io_clr.c - sacc - sacc(omys), simple console gopher client | |
git clone git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65… | |
Log | |
Files | |
Refs | |
Tags | |
LICENSE | |
--- | |
io_clr.c (1406B) | |
--- | |
1 #include <string.h> | |
2 #include <unistd.h> | |
3 #include <netdb.h> | |
4 | |
5 #include <sys/socket.h> | |
6 | |
7 #include "common.h" | |
8 #include "io.h" | |
9 | |
10 static int | |
11 setup_clr(void) | |
12 { | |
13 return 0; | |
14 } | |
15 | |
16 static int | |
17 close_clr(struct cnx *c) | |
18 { | |
19 return close(c->sock); | |
20 } | |
21 | |
22 static int | |
23 connect_clr(struct cnx *c, struct addrinfo *ai, const char *host) | |
24 { | |
25 return connect(c->sock, ai->ai_addr, ai->ai_addrlen); | |
26 } | |
27 | |
28 static void | |
29 connerr_clr(struct cnx *c, const char *host, const char *port, int err) | |
30 { | |
31 if (c->sock == -1) | |
32 diag("Can't open socket: %s", strerror(err)); | |
33 else | |
34 diag("Can't connect to: %s:%s: %s", host, port, strerror… | |
35 } | |
36 | |
37 static char * | |
38 parseurl_clr(char *url) | |
39 { | |
40 char *p; | |
41 | |
42 if (p = strstr(url, "://")) { | |
43 if (strncmp(url, "gopher", p - url)) | |
44 die("Protocol not supported: %.*s", p - url, url… | |
45 | |
46 url = p + 3; | |
47 } | |
48 | |
49 return url; | |
50 } | |
51 | |
52 static ssize_t | |
53 read_clr(struct cnx *c, void *buf, size_t bs) | |
54 { | |
55 return read(c->sock, buf, bs); | |
56 } | |
57 | |
58 static ssize_t | |
59 write_clr(struct cnx *c, void *buf, size_t bs) | |
60 { | |
61 return write(c->sock, buf, bs); | |
62 } | |
63 | |
64 int (*iosetup)(void) = setup_clr; | |
65 int (*ioclose)(struct cnx *) = close_clr; | |
66 int (*ioconnect)(struct cnx *, struct addrinfo *, const char *) = connec… | |
67 void (*ioconnerr)(struct cnx *, const char *, const char *, int) = conne… | |
68 char *(*ioparseurl)(char *) = parseurl_clr; | |
69 ssize_t (*ioread)(struct cnx *, void *, size_t) = read_clr; | |
70 ssize_t (*iowrite)(struct cnx *, void *, size_t) = write_clr; |