Mercurial > hg > nnchat
annotate libnnnet.c @ 412:3e64acb433e8
Split libnnchat into libnnet and libnnutil
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 24 May 2012 06:38:26 +0300 |
parents | |
children |
rev | line source |
---|---|
412
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 /* |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
2 * NNChat - Custom chat client for NewbieNudes.com chatrooms |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 * Written by Matti 'ccr' Hämäläinen |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
4 * (C) Copyright 2008-2012 Tecnic Software productions (TNSP) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 */ |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 #include "libnnnet.h" |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
8 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
9 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
10 #ifdef __WIN32 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
11 const char *hstrerror(int err) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
12 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 static char buf[64]; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
14 snprintf(buf, sizeof(buf), "Error #%d", err); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
15 return buf; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
16 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
17 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
18 int nn_get_socket_errno(void) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
19 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
20 return WSAGetLastError(); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
21 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
22 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
23 const char *nn_get_socket_errstr(int err) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
24 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
25 static char buf[64]; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
26 switch (err) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
27 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
28 case WSAEADDRINUSE: return "Address already in use"; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
29 case WSAECONNABORTED: return "Software caused connection abort"; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
30 case WSAECONNREFUSED: return "Connection refused"; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
31 case WSAECONNRESET: return "Connection reset by peer"; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
32 case WSAEHOSTUNREACH: return "No route to host"; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
33 case WSAENETDOWN: return "Network is down"; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
34 case WSAETIMEDOUT: return "Connection timed out"; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
35 case WSAHOST_NOT_FOUND: return "Host not found"; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
36 case WSAVERNOTSUPPORTED: return "Wrong WinSock DLL version"; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
37 default: |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
38 snprintf(buf, sizeof(buf), "Error #%d", err); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
39 return buf; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
40 break; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
41 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
42 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
43 #else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
44 int nn_get_socket_errno(void) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
45 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
46 return errno; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
47 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
48 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
49 const char *nn_get_socket_errstr(int err) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
50 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
51 return strerror(err); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
52 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
53 #endif |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
54 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
55 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
56 void nn_conn_err(nn_conn_t *conn, const char *fmt, ...) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
57 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
58 if (conn->errfunc != NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
59 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
60 va_list ap; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
61 va_start(ap, fmt); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
62 conn->errfunc(conn, fmt, ap); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
63 va_end(ap); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
64 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
65 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
66 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
67 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
68 static void nn_conn_msg(nn_conn_t *conn, const char *fmt, ...) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
69 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
70 if (conn->msgfunc != NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
71 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
72 va_list ap; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
73 va_start(ap, fmt); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
74 conn->msgfunc(conn, fmt, ap); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
75 va_end(ap); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
76 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
77 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
78 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
79 struct hostent *nn_resolve_host(nn_conn_t *conn, const char *name) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
80 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
81 struct hostent *res = gethostbyname(name); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
82 if (res == NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
83 nn_conn_err(conn, "Could not resolve hostname: %s\n", strerror(h_errno)); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
84 else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
85 nn_conn_msg(conn, "True hostname for %s is %s\n", name, res->h_name); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
86 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
87 return res; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
88 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
89 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
90 static const char *nn_proxy_types[] = |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
91 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
92 "none", |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
93 "SOCKS 4", |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
94 "SOCKS 4a", |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
95 NULL |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
96 }; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
97 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
98 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
99 nn_conn_t * nn_conn_new( |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
100 void (*errfunc)(nn_conn_t *conn, const char *fmt, va_list ap), |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
101 void (*msgfunc)(nn_conn_t *conn, const char *fmt, va_list ap)) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
102 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
103 nn_conn_t *conn = th_calloc(1, sizeof(nn_conn_t)); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
104 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
105 if (conn == NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
106 return NULL; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
107 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
108 conn->errfunc = errfunc; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
109 conn->msgfunc = msgfunc; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
110 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
111 return conn; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
112 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
113 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
114 static BOOL nn_get_addr(struct in_addr *addr, struct hostent *hst) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
115 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
116 if (hst != NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
117 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
118 *addr = *(struct in_addr *) (hst->h_addr); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
119 return TRUE; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
120 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
121 else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
122 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
123 addr->s_addr = 0; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
124 return FALSE; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
125 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
126 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
127 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
128 int nn_conn_set_proxy(nn_conn_t *conn, int type, int port, const char *host) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
129 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
130 if (conn == NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
131 return -1; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
132 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
133 conn->proxy.type = type; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
134 conn->proxy.port = port; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
135 conn->proxy.host = th_strdup(host); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
136 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
137 if (host != NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
138 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
139 conn->proxy.hst = nn_resolve_host(conn, host); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
140 nn_get_addr(&(conn->proxy.addr), conn->proxy.hst); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
141 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
142 else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
143 return -2; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
144 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
145 return 0; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
146 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
147 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
148 int nn_conn_open(nn_conn_t *conn, const int port, const char *host) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
149 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
150 struct sockaddr_in dest; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
151 static const char *userid = "James Bond"; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
152 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
153 if (conn == NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
154 return -1; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
155 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
156 conn->port = port; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
157 if (host != NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
158 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
159 conn->host = th_strdup(host); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
160 conn->hst = nn_resolve_host(conn, host); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
161 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
162 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
163 nn_get_addr(&(conn->addr), conn->hst); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
164 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
165 /* Prepare for connection */ |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
166 dest.sin_family = AF_INET; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
167 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
168 if (conn->proxy.type > NN_PROXY_NONE && conn->proxy.type < NN_PROXY_LAST) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
169 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
170 dest.sin_port = htons(conn->proxy.port); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
171 dest.sin_addr = conn->proxy.addr; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
172 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
173 nn_conn_msg(conn, "Connecting to %s proxy %s:%d ...\n", |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
174 nn_proxy_types[conn->proxy.type], |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
175 inet_ntoa(conn->proxy.addr), conn->proxy.port); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
176 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
177 else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
178 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
179 dest.sin_port = htons(conn->port); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
180 dest.sin_addr = conn->addr; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
181 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
182 nn_conn_msg(conn, "Connecting to %s:%d ...\n", |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
183 inet_ntoa(conn->addr), conn->port); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
184 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
185 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
186 if ((conn->socket = socket(PF_INET, SOCK_STREAM, 0)) == -1) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
187 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
188 conn->err = nn_get_socket_errno(); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
189 nn_conn_err(conn, "Could not open socket: %s\n", nn_get_socket_errstr(conn->err)); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
190 goto error; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
191 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
192 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
193 nn_conn_msg(conn, "Using socket %d.\n", conn->socket); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
194 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
195 if (connect(conn->socket, (struct sockaddr *) &dest, sizeof(dest)) == -1) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
196 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
197 conn->err = nn_get_socket_errno(); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
198 nn_conn_err(conn, "Could not connect: %s\n", nn_get_socket_errstr(conn->err)); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
199 goto error; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
200 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
201 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
202 FD_ZERO(&(conn->sockfds)); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
203 FD_SET(conn->socket, &(conn->sockfds)); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
204 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
205 /* Proxy-specific setup */ |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
206 if (conn->proxy.type == NN_PROXY_SOCKS4 || conn->proxy.type == NN_PROXY_SOCKS4A) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
207 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
208 struct nn_socks_t *socksh; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
209 size_t bufsiz = sizeof(struct nn_socks_t) + strlen(userid) + 1; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
210 char *ptr, *buf; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
211 int tries, status = -1; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
212 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
213 if (conn->proxy.type == NN_PROXY_SOCKS4A) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
214 bufsiz += strlen(conn->host) + 1; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
215 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
216 ptr = buf = th_malloc(bufsiz); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
217 if (buf == NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
218 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
219 conn->err = -1; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
220 nn_conn_err(conn, "Could not allocate memory for SOCKS negotiation buffer, %d bytes.\n", bufsiz); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
221 goto error; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
222 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
223 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
224 /* Create SOCKS 4/4A request */ |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
225 nn_conn_msg(conn, "Initializing proxy negotiation.\n"); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
226 socksh = (struct nn_socks_t *) buf; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
227 socksh->version = 4; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
228 socksh->command = SOCKS_CMD_CONNECT; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
229 socksh->port = htons(port); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
230 if (conn->proxy.type == NN_PROXY_SOCKS4A) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
231 socksh->addr = htonl(0x00000032); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
232 else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
233 socksh->addr = conn->addr.s_addr; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
234 ptr += sizeof(struct nn_socks_t); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
235 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
236 strcpy(ptr, userid); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
237 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
238 if (conn->proxy.type == NN_PROXY_SOCKS4A) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
239 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
240 ptr += strlen(userid) + 1; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
241 strcpy(ptr, conn->host); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
242 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
243 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
244 /* Send request */ |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
245 nn_conn_reset(conn); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
246 if (!nn_conn_send_buf(conn, buf, bufsiz)) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
247 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
248 th_free(buf); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
249 nn_conn_err(conn, "Error sending SOCKS proxy request.\n"); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
250 goto error; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
251 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
252 th_free(buf); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
253 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
254 /* Wait for SOCKS server to reply */ |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
255 for (status = tries = 1; tries <= 20 && status > 0; tries++) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
256 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
257 #ifdef __WIN32 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
258 Sleep(50); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
259 #else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
260 usleep(50000); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
261 #endif |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
262 nn_conn_reset(conn); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
263 status = nn_conn_pull(conn); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
264 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
265 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
266 /* Check results */ |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
267 if (status == 0) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
268 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
269 struct nn_socks_res_t *res = (struct nn_socks_res_t *) &(conn->buf); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
270 if (res->nb != 0) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
271 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
272 nn_conn_err(conn, "Invalid SOCKS server reply, does not begin with NUL byte (%d).\n", res->nb); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
273 goto error; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
274 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
275 if (res->result != 0x5a) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
276 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
277 char *s = NULL; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
278 switch (res->result) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
279 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
280 case 0x5b: s = "Request rejected or failed"; break; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
281 case 0x5c: s = "Request failed because client is not running identd (or not reachable from the server)"; break; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
282 case 0x5d: s = "Request failed because client's identd could not confirm the user ID string in the request"; break; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
283 default: s = "Unknown SOCKS error response"; break; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
284 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
285 nn_conn_err(conn, "SOCKS setup failed, 0x%02x: %s.\n", res->result, s); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
286 goto error; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
287 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
288 nn_conn_msg(conn, "SOCKS connection established!\n"); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
289 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
290 else if (status < 0) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
291 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
292 nn_conn_err(conn, "Proxy negotiation failed at try %d with network error: %d\n", tries, status); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
293 goto error; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
294 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
295 else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
296 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
297 nn_conn_err(conn, "Proxy negotiation timed out.\n"); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
298 goto error; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
299 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
300 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
301 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
302 nn_conn_reset(conn); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
303 conn->status = NN_CONN_OPEN; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
304 return 0; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
305 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
306 error: |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
307 conn->status = NN_CONN_CLOSED; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
308 return -2; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
309 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
310 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
311 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
312 void nn_conn_close(nn_conn_t *conn) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
313 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
314 if (conn == NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
315 return; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
316 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
317 if (conn->socket >= 0) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
318 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
319 #ifdef __WIN32 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
320 closesocket(conn->socket); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
321 #else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
322 close(conn->socket); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
323 #endif |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
324 conn->socket = -1; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
325 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
326 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
327 th_free(conn->host); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
328 th_free(conn->proxy.host); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
329 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
330 conn->status = NN_CONN_CLOSED; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
331 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
332 th_free(conn); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
333 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
334 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
335 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
336 BOOL nn_conn_send_buf(nn_conn_t *conn, const char *buf, const size_t len) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
337 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
338 size_t bufLeft = len; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
339 const char *bufPtr = buf; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
340 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
341 while (bufLeft > 0) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
342 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
343 ssize_t bufSent; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
344 bufSent = send(conn->socket, bufPtr, bufLeft, 0); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
345 if (bufSent < 0) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
346 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
347 conn->err = nn_get_socket_errno(); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
348 nn_conn_err(conn, "nn_conn_send_buf() failed: %s", nn_get_socket_errstr(conn->err)); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
349 return FALSE; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
350 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
351 bufLeft -= bufSent; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
352 bufPtr += bufSent; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
353 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
354 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
355 return TRUE; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
356 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
357 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
358 void nn_conn_reset(nn_conn_t *conn) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
359 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
360 if (conn != NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
361 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
362 conn->ptr = conn->in_ptr = conn->buf; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
363 conn->got_bytes = conn->total_bytes = 0; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
364 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
365 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
366 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
367 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
368 int nn_conn_pull(nn_conn_t *conn) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
369 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
370 int result; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
371 struct timeval socktv; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
372 fd_set tmpfds; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
373 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
374 if (conn == NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
375 return -10; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
376 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
377 /* Prod the input buffer */ |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
378 if (conn->in_ptr > conn->buf && conn->in_ptr - conn->ptr > 0) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
379 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
380 size_t delta = conn->in_ptr - conn->ptr; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
381 memmove(conn->buf, conn->in_ptr, delta); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
382 conn->ptr = conn->buf; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
383 conn->in_ptr -= delta; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
384 conn->total_bytes -= delta; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
385 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
386 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
387 /* Check for incoming data */ |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
388 socktv.tv_sec = 0; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
389 socktv.tv_usec = NN_DELAY_USEC; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
390 tmpfds = conn->sockfds; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
391 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
392 if ((result = select(conn->socket + 1, &tmpfds, NULL, NULL, &socktv)) == -1) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
393 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
394 conn->err = nn_get_socket_errno(); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
395 if (conn->err != EINTR) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
396 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
397 nn_conn_err(conn, "Error occured in select(%d, sockfds): %d, %s\n", |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
398 socket, conn->err, nn_get_socket_errstr(conn->err)); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
399 return -1; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
400 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
401 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
402 else if (FD_ISSET(conn->socket, &tmpfds)) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
403 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
404 conn->got_bytes = recv(conn->socket, conn->in_ptr, NN_CONNBUF_SIZE - conn->total_bytes, 0); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
405 if (conn->got_bytes < 0) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
406 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
407 conn->err = nn_get_socket_errno(); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
408 nn_conn_err(conn, "Error in recv: %d, %s\n", conn->err, nn_get_socket_errstr(conn->err)); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
409 return -2; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
410 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
411 else if (conn->got_bytes == 0) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
412 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
413 nn_conn_err(conn, "Server closed connection.\n"); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
414 conn->status = NN_CONN_CLOSED; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
415 return -3; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
416 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
417 else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
418 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
419 conn->total_bytes += conn->got_bytes; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
420 conn->in_ptr += conn->got_bytes; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
421 return 0; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
422 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
423 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
424 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
425 return 1; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
426 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
427 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
428 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
429 BOOL nn_conn_check(nn_conn_t *conn) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
430 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
431 if (conn == NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
432 return FALSE; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
433 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
434 return conn->err == 0 && conn->status == NN_CONN_OPEN; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
435 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
436 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
437 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
438 BOOL nn_network_init(void) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
439 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
440 #ifdef __WIN32 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
441 /* Initialize WinSock, if needed */ |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
442 WSADATA wsaData; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
443 int err = WSAStartup(0x0101, &wsaData); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
444 if (err != 0) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
445 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
446 THERR("Could not initialize WinSock library (err=%d).\n", err); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
447 return FALSE; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
448 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
449 #endif |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
450 return TRUE; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
451 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
452 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
453 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
454 void nn_network_close(void) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
455 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
456 #ifdef __WIN32 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
457 WSACleanup(); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
458 #endif |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
459 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
460 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
461 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
462 BOOL nn_conn_buf_check(nn_conn_t *conn, size_t n) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
463 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
464 return conn && conn->ptr && conn->in_ptr && (conn->ptr + n <= conn->in_ptr); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
465 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
466 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
467 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
468 BOOL nn_conn_buf_skip(nn_conn_t *conn, size_t n) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
469 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
470 if (nn_conn_buf_check(conn, n)) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
471 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
472 conn->ptr += n; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
473 return TRUE; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
474 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
475 else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
476 return FALSE; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
477 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
478 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
479 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
480 int nn_conn_buf_strncmp(nn_conn_t *conn, const char *str, const size_t n) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
481 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
482 int ret; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
483 if (!nn_conn_buf_check(conn, n)) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
484 return -1; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
485 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
486 if ((ret = strncmp(conn->ptr, str, n)) == 0) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
487 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
488 conn->ptr += n; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
489 return 0; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
490 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
491 else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
492 return ret; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
493 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
494 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
495 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
496 int nn_conn_buf_strcmp(nn_conn_t *conn, const char *str) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
497 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
498 return nn_conn_buf_strncmp(conn, str, strlen(str)); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
499 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
500 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
501 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
502 char *nn_conn_buf_strstr(nn_conn_t *conn, const char *str) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
503 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
504 char *pos; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
505 size_t n = strlen(str); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
506 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
507 if (nn_conn_buf_check(conn, n) && ((pos = strstr(conn->ptr, str)) != NULL)) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
508 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
509 conn->ptr = pos + n; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
510 return pos; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
511 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
512 else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
513 return NULL; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
514 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
515 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
516 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
517 BOOL nn_conn_send_msg(nn_conn_t *conn, const char *user, const char *fmt, ...) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
518 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
519 char *tmp, *msg; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
520 va_list ap; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
521 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
522 va_start(ap, fmt); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
523 tmp = th_strdup_vprintf(fmt, ap); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
524 va_end(ap); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
525 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
526 if (tmp == NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
527 return FALSE; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
528 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
529 msg = th_strdup_printf("<USER>%s</USER><MESSAGE>%s</MESSAGE>", user, tmp); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
530 th_free(tmp); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
531 |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
532 if (msg != NULL) |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
533 { |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
534 BOOL ret = nn_conn_send_buf(conn, msg, strlen(msg) + 1); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
535 th_free(msg); |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
536 return ret; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
537 } |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
538 else |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
539 return FALSE; |
3e64acb433e8
Split libnnchat into libnnet and libnnutil
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
540 } |