Recently Written · git

sacc

Mirror of git://bitreich.org/sacc, the sacc gopher client from bitreich.org.

git clone https://github.com/equwal/sacc

Log | Files | Refs


io_clr.c (1406 bytes)

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;