Blame


1 18824b58 2008-08-03 rsc #include "a.h"
2 18824b58 2008-08-03 rsc
3 18824b58 2008-08-03 rsc struct Pfd
4 18824b58 2008-08-03 rsc {
5 18824b58 2008-08-03 rsc int fd;
6 18824b58 2008-08-03 rsc };
7 18824b58 2008-08-03 rsc
8 18824b58 2008-08-03 rsc static Pfd*
9 18824b58 2008-08-03 rsc httpconnect(char *host)
10 18824b58 2008-08-03 rsc {
11 18824b58 2008-08-03 rsc char buf[1024];
12 18824b58 2008-08-03 rsc Pfd *pfd;
13 18824b58 2008-08-03 rsc int fd;
14 18824b58 2008-08-03 rsc
15 18824b58 2008-08-03 rsc snprint(buf, sizeof buf, "tcp!%s!http", host);
16 18824b58 2008-08-03 rsc if((fd = dial(buf, nil, nil, nil)) < 0)
17 18824b58 2008-08-03 rsc return nil;
18 18824b58 2008-08-03 rsc pfd = emalloc(sizeof *pfd);
19 18824b58 2008-08-03 rsc pfd->fd = fd;
20 18824b58 2008-08-03 rsc return pfd;
21 18824b58 2008-08-03 rsc }
22 18824b58 2008-08-03 rsc
23 18824b58 2008-08-03 rsc static void
24 18824b58 2008-08-03 rsc httpclose(Pfd *pfd)
25 18824b58 2008-08-03 rsc {
26 18824b58 2008-08-03 rsc if(pfd == nil)
27 18824b58 2008-08-03 rsc return;
28 18824b58 2008-08-03 rsc close(pfd->fd);
29 18824b58 2008-08-03 rsc free(pfd);
30 18824b58 2008-08-03 rsc }
31 18824b58 2008-08-03 rsc
32 18824b58 2008-08-03 rsc static int
33 18824b58 2008-08-03 rsc httpwrite(Pfd *pfd, void *v, int n)
34 18824b58 2008-08-03 rsc {
35 18824b58 2008-08-03 rsc return writen(pfd->fd, v, n);
36 18824b58 2008-08-03 rsc }
37 18824b58 2008-08-03 rsc
38 18824b58 2008-08-03 rsc static int
39 18824b58 2008-08-03 rsc httpread(Pfd *pfd, void *v, int n)
40 18824b58 2008-08-03 rsc {
41 18824b58 2008-08-03 rsc return read(pfd->fd, v, n);
42 18824b58 2008-08-03 rsc }
43 18824b58 2008-08-03 rsc
44 18824b58 2008-08-03 rsc Protocol http = {
45 18824b58 2008-08-03 rsc httpconnect,
46 18824b58 2008-08-03 rsc httpread,
47 18824b58 2008-08-03 rsc httpwrite,
48 18824b58 2008-08-03 rsc httpclose,
49 18824b58 2008-08-03 rsc };
50 18824b58 2008-08-03 rsc