Mercurial > hg > nnchat
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 |