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(err)); 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 *) = connect_clr; 67 void (*ioconnerr)(struct cnx *, const char *, const char *, int) = connerr_clr; 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;