Mercurial > hg > nnchat
comparison libnnchat.h @ 352:b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 23 Jun 2011 06:28:40 +0300 |
parents | 8e509d6546d3 |
children | c01e42fc9adb |
comparison
equal
deleted
inserted
replaced
351:b18b97d3e4f5 | 352:b54c8545dcb0 |
---|---|
32 #define NN_DELAY_USEC (15 * 1000) | 32 #define NN_DELAY_USEC (15 * 1000) |
33 #define NN_BACKBUF_LEN (512) /* Backbuffer size (in lines) */ | 33 #define NN_BACKBUF_LEN (512) /* Backbuffer size (in lines) */ |
34 | 34 |
35 enum { | 35 enum { |
36 NN_CONN_UNINIT = 0, | 36 NN_CONN_UNINIT = 0, |
37 NN_CONN_PROXY_NEG, | |
37 NN_CONN_OPEN, | 38 NN_CONN_OPEN, |
38 NN_CONN_CLOSED | 39 NN_CONN_CLOSED |
39 }; | 40 }; |
40 | 41 |
42 enum { | |
43 NN_PROXY_NONE = 0, | |
44 NN_PROXY_SOCKS4, | |
45 NN_PROXY_SOCKS4A, | |
46 | |
47 NN_PROXY_LAST | |
48 }; | |
49 | |
50 enum { | |
51 SOCKS_CMD_CONNECT = 1, | |
52 SOCKS_CMD_BIND = 2 | |
53 }; | |
54 | |
55 struct nn_socks_t { | |
56 uint8_t version; | |
57 uint8_t command; | |
58 in_port_t port; | |
59 in_addr_t addr; | |
60 } __attribute__((__packed__));; | |
61 | |
62 struct nn_socks_res_t { | |
63 uint8_t nb; | |
64 uint8_t result; | |
65 in_port_t port; | |
66 in_addr_t addr; | |
67 } __attribute__((__packed__));; | |
68 | |
41 typedef struct _nn_conn_t { | 69 typedef struct _nn_conn_t { |
70 struct { | |
71 int type; | |
72 int port; | |
73 struct in_addr addr; | |
74 } proxy; | |
75 | |
76 char *host; | |
42 int socket; | 77 int socket; |
43 int port; | 78 int port; |
44 struct in_addr address; | 79 struct in_addr addr; |
45 fd_set sockfds; | 80 fd_set sockfds; |
46 | 81 |
47 void (*errfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap); | 82 void (*errfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap); |
48 void (*msgfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap); | 83 void (*msgfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap); |
49 | 84 |
53 char buf[NN_CONNBUF_SIZE + 16]; | 88 char buf[NN_CONNBUF_SIZE + 16]; |
54 char *ptr; | 89 char *ptr; |
55 ssize_t got; | 90 ssize_t got; |
56 } nn_conn_t; | 91 } nn_conn_t; |
57 | 92 |
93 | |
58 const char *nn_get_errstr(int err); | 94 const char *nn_get_errstr(int err); |
59 BOOL nn_network_init(void); | 95 BOOL nn_network_init(); |
60 void nn_network_close(void); | 96 void nn_network_close(void); |
61 | 97 |
62 nn_conn_t * nn_conn_open(struct in_addr *addr, const int port); | 98 nn_conn_t * nn_conn_open( |
99 void (*errfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap), | |
100 void (*msgfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap), | |
101 int ptype, int pport, struct in_addr *paddr, | |
102 struct in_addr *addr, const int port, const char *host); | |
63 void nn_conn_close(nn_conn_t *); | 103 void nn_conn_close(nn_conn_t *); |
64 BOOL nn_conn_pull(nn_conn_t *); | 104 int nn_conn_pull(nn_conn_t *); |
65 BOOL nn_conn_send_buf(nn_conn_t *, const char *buf, const size_t len); | 105 BOOL nn_conn_send_buf(nn_conn_t *, const char *buf, const size_t len); |
66 BOOL nn_conn_send_msg(nn_conn_t *, const char *user, const char *fmt, ...); | 106 BOOL nn_conn_send_msg(nn_conn_t *, const char *user, const char *fmt, ...); |
67 BOOL nn_conn_check(nn_conn_t *); | 107 BOOL nn_conn_check(nn_conn_t *); |
68 | 108 |
69 | 109 |