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