comparison libnnchat.h @ 390:acea18a741e3

Cleanup libnnchat.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 24 May 2012 00:47:31 +0300
parents ebbe97f2a2a5
children 318a71f4f57f
comparison
equal deleted inserted replaced
389:19cb995994c9 390:acea18a741e3
33 #define NN_CONNBUF_SIZE (64 * 1024) 33 #define NN_CONNBUF_SIZE (64 * 1024)
34 #define NN_NUM_BUCKETS (256) 34 #define NN_NUM_BUCKETS (256)
35 #define NN_DELAY_USEC (15 * 1000) 35 #define NN_DELAY_USEC (15 * 1000)
36 #define NN_BACKBUF_LEN (512) /* Backbuffer size (in lines) */ 36 #define NN_BACKBUF_LEN (512) /* Backbuffer size (in lines) */
37 37
38 enum { 38 enum
39 {
39 NN_CONN_UNINIT = 0, 40 NN_CONN_UNINIT = 0,
40 NN_CONN_PROXY_NEG, 41 NN_CONN_PROXY_NEG,
41 NN_CONN_OPEN, 42 NN_CONN_OPEN,
42 NN_CONN_CLOSED 43 NN_CONN_CLOSED
43 }; 44 };
44 45
45 enum { 46 enum
47 {
46 NN_PROXY_NONE = 0, 48 NN_PROXY_NONE = 0,
47 NN_PROXY_SOCKS4, 49 NN_PROXY_SOCKS4,
48 NN_PROXY_SOCKS4A, 50 NN_PROXY_SOCKS4A,
49 51
50 NN_PROXY_LAST 52 NN_PROXY_LAST
51 }; 53 };
52 54
53 enum { 55 enum
56 {
54 SOCKS_CMD_CONNECT = 1, 57 SOCKS_CMD_CONNECT = 1,
55 SOCKS_CMD_BIND = 2 58 SOCKS_CMD_BIND = 2
56 }; 59 };
57 60
58 struct nn_socks_t { 61 struct nn_socks_t
62 {
59 uint8_t version; 63 uint8_t version;
60 uint8_t command; 64 uint8_t command;
61 in_port_t port; 65 in_port_t port;
62 in_addr_t addr; 66 in_addr_t addr;
63 } __attribute__((__packed__)); 67 } __attribute__((__packed__));
64 68
65 struct nn_socks_res_t { 69 struct nn_socks_res_t
70 {
66 uint8_t nb; 71 uint8_t nb;
67 uint8_t result; 72 uint8_t result;
68 in_port_t port; 73 in_port_t port;
69 in_addr_t addr; 74 in_addr_t addr;
70 } __attribute__((__packed__)); 75 } __attribute__((__packed__));
71 76
72 typedef struct _nn_conn_t { 77 typedef struct _nn_conn_t
73 struct { 78 {
79 struct
80 {
74 char *host; 81 char *host;
75 struct hostent *hst; 82 struct hostent *hst;
76 int type; 83 int type;
77 int port; 84 int port;
78 struct in_addr addr; 85 struct in_addr addr;
89 void (*errfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap); 96 void (*errfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap);
90 void (*msgfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap); 97 void (*msgfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap);
91 98
92 int err; 99 int err;
93 int status; 100 int status;
94 101
95 char buf[NN_CONNBUF_SIZE + 16]; 102 char buf[NN_CONNBUF_SIZE + 16];
96 char *ptr; 103 char *ptr;
97 ssize_t got, total; 104 ssize_t got, total;
98 } nn_conn_t; 105 } nn_conn_t;
99 106
102 BOOL nn_network_init(); 109 BOOL nn_network_init();
103 void nn_network_close(void); 110 void nn_network_close(void);
104 111
105 struct hostent *nn_resolve_host(nn_conn_t *conn, const char *name); 112 struct hostent *nn_resolve_host(nn_conn_t *conn, const char *name);
106 nn_conn_t * nn_conn_new( 113 nn_conn_t * nn_conn_new(
107 void (*errfunc)(nn_conn_t *conn, const char *fmt, va_list ap), 114 void (*errfunc)(nn_conn_t *conn, const char *fmt, va_list ap),
108 void (*msgfunc)(nn_conn_t *conn, const char *fmt, va_list ap)); 115 void (*msgfunc)(nn_conn_t *conn, const char *fmt, va_list ap));
109 116
110 int nn_conn_set_proxy(nn_conn_t *conn, int type, int port, const char *host); 117 int nn_conn_set_proxy(nn_conn_t *conn, int type, int port, const char *host);
111 int nn_conn_open(nn_conn_t *conn, const int port, const char *host); 118 int nn_conn_open(nn_conn_t *conn, const int port, const char *host);
112 void nn_conn_close(nn_conn_t *); 119 void nn_conn_close(nn_conn_t *);
113 void nn_conn_reset(nn_conn_t *); 120 void nn_conn_reset(nn_conn_t *);
115 BOOL nn_conn_send_buf(nn_conn_t *, const char *buf, const size_t len); 122 BOOL nn_conn_send_buf(nn_conn_t *, const char *buf, const size_t len);
116 BOOL nn_conn_send_msg(nn_conn_t *, const char *user, const char *fmt, ...); 123 BOOL nn_conn_send_msg(nn_conn_t *, const char *user, const char *fmt, ...);
117 BOOL nn_conn_check(nn_conn_t *); 124 BOOL nn_conn_check(nn_conn_t *);
118 125
119 126
120 typedef struct _nn_user_t { 127 typedef struct _nn_user_t
128 {
121 char *name; 129 char *name;
122 time_t lastspoke, joined; 130 time_t lastspoke, joined;
123 struct _nn_user_t *next; 131 struct _nn_user_t *next;
124 } nn_user_t; 132 } nn_user_t;
125 133
126 typedef struct { 134 typedef struct
135 {
127 nn_user_t *buckets[NN_NUM_BUCKETS]; 136 nn_user_t *buckets[NN_NUM_BUCKETS];
128 } nn_userhash_t; 137 } nn_userhash_t;
129 138
130 nn_userhash_t *nn_userhash_new(void); 139 nn_userhash_t *nn_userhash_new(void);
131 nn_user_t * nn_userhash_foreach(const nn_userhash_t *, int (*func)(const nn_user_t *)); 140 nn_user_t * nn_userhash_foreach(const nn_userhash_t *, int (*func)(const nn_user_t *));
149 158
150 char * nn_username_encode(char *str); 159 char * nn_username_encode(char *str);
151 char * nn_username_decode(char *str); 160 char * nn_username_decode(char *str);
152 161
153 162
154 typedef struct { 163 typedef struct
164 {
155 ssize_t pos, len, size; 165 ssize_t pos, len, size;
156 char *data; 166 char *data;
157 } nn_editbuf_t; 167 } nn_editbuf_t;
158 168
159 int nn_editbuf_write(nn_editbuf_t *buf, ssize_t pos, int ch); 169 int nn_editbuf_write(nn_editbuf_t *buf, ssize_t pos, int ch);
165 nn_editbuf_t * nn_editbuf_copy(nn_editbuf_t *src); 175 nn_editbuf_t * nn_editbuf_copy(nn_editbuf_t *src);
166 void nn_editbuf_setpos(nn_editbuf_t *buf, ssize_t pos); 176 void nn_editbuf_setpos(nn_editbuf_t *buf, ssize_t pos);
167 char * nn_editbuf_get_string(nn_editbuf_t *buf, ssize_t start, ssize_t end); 177 char * nn_editbuf_get_string(nn_editbuf_t *buf, ssize_t start, ssize_t end);
168 178
169 179
170 typedef struct { 180 typedef struct
181 {
171 qringbuf_t *data; /* "Backbuffer" data for this window */ 182 qringbuf_t *data; /* "Backbuffer" data for this window */
172 int pos; /* Current position in the window, 0 = real time */ 183 int pos; /* Current position in the window, 0 = real time */
173 BOOL dirty; 184 BOOL dirty;
174 185
175 char *id; /* Chatter ID, NULL = main window */ 186 char *id; /* Chatter ID, NULL = main window */
176 int num; /* Window number */ 187 int num; /* Window number */
177 188
178 char *buf; 189 char *buf;
179 size_t len, bufsize; 190 size_t len, bufsize;
180 size_t chlen; 191 size_t chlen;
181 } nn_window_t; 192 } nn_window_t;
182 193
183 nn_window_t *nn_window_new(const char *); 194 nn_window_t *nn_window_new(const char *);
184 void nn_window_free(nn_window_t *); 195 void nn_window_free(nn_window_t *);
185 196
186 197
187 typedef struct { 198 typedef struct
199 {
188 size_t len; 200 size_t len;
189 char *str; 201 char *str;
190 } nn_strtuple_t; 202 } nn_strtuple_t;
191 203
192 204