Mercurial > hg > nnchat
annotate libnnchat.c @ 374:812af6823eb7
Clean up address handling a tiny, tiny bit.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 23 Jun 2011 15:19:12 +0300 |
parents | b9f0bdad6285 |
children | 4523fc0941e8 |
rev | line source |
---|---|
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 /* |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
2 * NNChat - Custom chat client for NewbieNudes.com chatrooms |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 * Written by Matti 'ccr' Hämäläinen |
274 | 4 * (C) Copyright 2008-2011 Tecnic Software productions (TNSP) |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 */ |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 #include "libnnchat.h" |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
8 |
90
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
9 #ifdef __WIN32 |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
10 const char *hstrerror(int err) |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
11 { |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
12 static char buf[64]; |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
13 snprintf(buf, sizeof(buf), "Error #%d", err); |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
14 return buf; |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
15 } |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
16 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
17 int nn_get_socket_errno(void) |
90
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
18 { |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
19 return WSAGetLastError(); |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
20 } |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
21 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
22 const char *nn_get_socket_errstr(int err) |
90
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
23 { |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
24 static char buf[64]; |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
25 switch (err) { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
26 case WSAEADDRINUSE: return "Address already in use"; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
27 case WSAECONNABORTED: return "Software caused connection abort"; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
28 case WSAECONNREFUSED: return "Connection refused"; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
29 case WSAECONNRESET: return "Connection reset by peer"; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
30 case WSAEHOSTUNREACH: return "No route to host"; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
31 case WSAENETDOWN: return "Network is down"; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
32 case WSAETIMEDOUT: return "Connection timed out"; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
33 case WSAHOST_NOT_FOUND: return "Host not found"; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
34 case WSAVERNOTSUPPORTED: return "Wrong WinSock DLL version"; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
35 default: |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
36 snprintf(buf, sizeof(buf), "Error #%d", err); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
37 return buf; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
38 break; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
39 } |
90
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
40 } |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
41 #else |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
42 int nn_get_socket_errno(void) |
90
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
43 { |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
44 return errno; |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
45 } |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
46 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
47 const char *nn_get_socket_errstr(int err) |
90
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
48 { |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
49 return strerror(err); |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
50 } |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
51 #endif |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
52 |
1e0bf7b4fd41
Move socket error handling functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
89
diff
changeset
|
53 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
54 void nn_conn_err(nn_conn_t *conn, const char *fmt, ...) |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
55 { |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
56 if (conn->errfunc) { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
57 va_list ap; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
58 va_start(ap, fmt); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
59 conn->errfunc(conn, fmt, ap); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
60 va_end(ap); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
61 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
62 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
63 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
64 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
65 static void nn_conn_msg(nn_conn_t *conn, const char *fmt, ...) |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
66 { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
67 if (conn->msgfunc) { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
68 va_list ap; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
69 va_start(ap, fmt); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
70 conn->msgfunc(conn, fmt, ap); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
71 va_end(ap); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
72 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
73 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
74 |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
75 struct hostent *nn_resolve_host(nn_conn_t *conn, const char *name) |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
76 { |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
77 struct hostent *res = gethostbyname(name); |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
78 if (res == NULL) |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
79 nn_conn_err(conn, "Could not resolve hostname: %s\n", strerror(h_errno)); |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
80 else |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
81 nn_conn_msg(conn, "True hostname for %s is %s\n", name, res->h_name); |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
82 |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
83 return res; |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
84 } |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
85 |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
86 static const char *nn_proxy_types[] = { |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
87 "none", |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
88 "SOCKS 4", |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
89 "SOCKS 4a", |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
90 NULL |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
91 }; |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
92 |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
93 |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
94 nn_conn_t * nn_conn_new( |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
95 void (*errfunc)(nn_conn_t *conn, const char *fmt, va_list ap), |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
96 void (*msgfunc)(nn_conn_t *conn, const char *fmt, va_list ap)) |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
97 { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
98 nn_conn_t *conn = th_calloc(1, sizeof(nn_conn_t)); |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
99 |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
100 if (conn == NULL) |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
101 return NULL; |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
102 |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
103 conn->errfunc = errfunc; |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
104 conn->msgfunc = msgfunc; |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
105 |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
106 return conn; |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
107 } |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
108 |
374
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
109 static BOOL nn_get_addr(struct in_addr *addr, struct hostent *hst) |
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
110 { |
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
111 if (hst != NULL) { |
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
112 *addr = *(struct in_addr *) (hst->h_addr); |
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
113 return TRUE; |
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
114 } else { |
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
115 addr->s_addr = 0; |
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
116 return FALSE; |
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
117 } |
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
118 } |
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
119 |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
120 int nn_conn_set_proxy(nn_conn_t *conn, int type, int port, const char *host) |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
121 { |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
122 if (conn == NULL) |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
123 return -1; |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
124 |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
125 conn->proxy.type = type; |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
126 conn->proxy.port = port; |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
127 conn->proxy.host = th_strdup(host); |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
128 |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
129 if (host != NULL) { |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
130 conn->proxy.hst = nn_resolve_host(conn, host); |
374
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
131 nn_get_addr(&(conn->proxy.addr), conn->proxy.hst); |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
132 } else |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
133 return -2; |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
134 |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
135 return 0; |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
136 } |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
137 |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
138 int nn_conn_open(nn_conn_t *conn, const int port, const char *host) |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
139 { |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
140 struct sockaddr_in dest; |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
141 static const char *userid = "James Bond"; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
142 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
143 if (conn == NULL) |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
144 return -1; |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
145 |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
146 conn->port = port; |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
147 if (host != NULL) { |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
148 conn->host = th_strdup(host); |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
149 conn->hst = nn_resolve_host(conn, host); |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
150 } |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
151 |
374
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
152 nn_get_addr(&(conn->addr), conn->hst); |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
153 |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
154 /* Prepare for connection */ |
374
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
155 dest.sin_family = AF_INET; |
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
156 |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
157 if (conn->proxy.type > NN_PROXY_NONE && conn->proxy.type < NN_PROXY_LAST) { |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
158 dest.sin_port = htons(conn->proxy.port); |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
159 dest.sin_addr = conn->proxy.addr; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
160 |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
161 nn_conn_msg(conn, "Connecting to %s proxy %s:%d ...\n", |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
162 nn_proxy_types[conn->proxy.type], |
374
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
163 inet_ntoa(conn->proxy.addr), conn->proxy.port); |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
164 } else { |
374
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
165 dest.sin_port = htons(conn->port); |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
166 dest.sin_addr = conn->addr; |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
167 |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
168 nn_conn_msg(conn, "Connecting to %s:%d ...\n", |
374
812af6823eb7
Clean up address handling a tiny, tiny bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
372
diff
changeset
|
169 inet_ntoa(conn->addr), conn->port); |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
170 } |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
171 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
172 if ((conn->socket = socket(PF_INET, SOCK_STREAM, 0)) == -1) { |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
173 conn->err = nn_get_socket_errno(); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
174 nn_conn_err(conn, "Could not open socket: %s\n", nn_get_socket_errstr(conn->err)); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
175 goto error; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
176 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
177 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
178 nn_conn_msg(conn, "Using socket %d.\n", conn->socket); |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
179 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
180 if (connect(conn->socket, (struct sockaddr *) &dest, sizeof(dest)) == -1) { |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
181 conn->err = nn_get_socket_errno(); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
182 nn_conn_err(conn, "Could not connect: %s\n", nn_get_socket_errstr(conn->err)); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
183 goto error; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
184 } |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
185 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
186 FD_ZERO(&(conn->sockfds)); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
187 FD_SET(conn->socket, &(conn->sockfds)); |
360
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
188 |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
189 /* Proxy-specific setup */ |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
190 if (conn->proxy.type == NN_PROXY_SOCKS4 || conn->proxy.type == NN_PROXY_SOCKS4A) { |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
191 struct nn_socks_t *socksh; |
359 | 192 size_t bufsiz = sizeof(struct nn_socks_t) + strlen(userid) + 1; |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
193 char *ptr, *buf; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
194 int tries, status = -1; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
195 |
359 | 196 if (conn->proxy.type == NN_PROXY_SOCKS4A) |
197 bufsiz += strlen(conn->host) + 1; | |
198 | |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
199 ptr = buf = th_malloc(bufsiz); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
200 if (buf == NULL) { |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
201 conn->err = -1; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
202 nn_conn_err(conn, "Could not allocate memory for SOCKS negotiation buffer, %d bytes.\n", bufsiz); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
203 goto error; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
204 } |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
205 |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
206 /* Create SOCKS 4/4A request */ |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
207 nn_conn_msg(conn, "Initializing proxy negotiation.\n"); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
208 socksh = (struct nn_socks_t *) buf; |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
209 socksh->version = 4; |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
210 socksh->command = SOCKS_CMD_CONNECT; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
211 socksh->port = htons(port); |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
212 if (conn->proxy.type == NN_PROXY_SOCKS4A) |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
213 socksh->addr = htonl(0x00000032); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
214 else |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
215 socksh->addr = conn->addr.s_addr; |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
216 ptr += sizeof(struct nn_socks_t); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
217 |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
218 strcpy(ptr, userid); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
219 |
359 | 220 if (conn->proxy.type == NN_PROXY_SOCKS4A) { |
221 ptr += strlen(userid) + 1; | |
222 strcpy(ptr, conn->host); | |
223 } | |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
224 |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
225 /* Send request */ |
360
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
226 nn_conn_reset(conn); |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
227 if (!nn_conn_send_buf(conn, buf, bufsiz)) { |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
228 th_free(buf); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
229 nn_conn_err(conn, "Error sending SOCKS proxy request.\n"); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
230 goto error; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
231 } |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
232 th_free(buf); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
233 |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
234 /* Wait for SOCKS server to reply */ |
359 | 235 for (status = tries = 1; tries <= 20 && status > 0; tries++) { |
365
88ac689d11bc
Win32/MinGW specific fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
360
diff
changeset
|
236 #ifdef __WIN32 |
88ac689d11bc
Win32/MinGW specific fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
360
diff
changeset
|
237 Sleep(50); |
88ac689d11bc
Win32/MinGW specific fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
360
diff
changeset
|
238 #else |
88ac689d11bc
Win32/MinGW specific fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
360
diff
changeset
|
239 usleep(50000); |
88ac689d11bc
Win32/MinGW specific fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
360
diff
changeset
|
240 #endif |
360
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
241 nn_conn_reset(conn); |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
242 status = nn_conn_pull(conn); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
243 } |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
244 |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
245 /* Check results */ |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
246 if (status == 0) { |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
247 struct nn_socks_res_t *res = (struct nn_socks_res_t *) &(conn->buf); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
248 if (res->nb != 0) { |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
249 nn_conn_err(conn, "Invalid SOCKS server reply, does not begin with NUL byte (%d).\n", res->nb); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
250 goto error; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
251 } |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
252 if (res->result != 0x5a) { |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
253 char *s = NULL; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
254 switch (res->result) { |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
255 case 0x5b: s = "Request rejected or failed"; break; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
256 case 0x5c: s = "Request failed because client is not running identd (or not reachable from the server)"; break; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
257 case 0x5d: s = "Request failed because client's identd could not confirm the user ID string in the request"; break; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
258 default: s = "Unknown SOCKS error response"; break; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
259 } |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
260 nn_conn_err(conn, "SOCKS setup failed, 0x%02x: %s.\n", res->result, s); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
261 goto error; |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
262 } |
355
ba2aa110755b
Add some informational messages to proxy connection setup.
Matti Hamalainen <ccr@tnsp.org>
parents:
354
diff
changeset
|
263 nn_conn_msg(conn, "SOCKS connection established!\n"); |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
264 } |
355
ba2aa110755b
Add some informational messages to proxy connection setup.
Matti Hamalainen <ccr@tnsp.org>
parents:
354
diff
changeset
|
265 else if (status < 0) { |
359 | 266 nn_conn_err(conn, "Proxy negotiation failed at try %d with network error: %d\n", tries, status); |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
267 goto error; |
355
ba2aa110755b
Add some informational messages to proxy connection setup.
Matti Hamalainen <ccr@tnsp.org>
parents:
354
diff
changeset
|
268 } |
ba2aa110755b
Add some informational messages to proxy connection setup.
Matti Hamalainen <ccr@tnsp.org>
parents:
354
diff
changeset
|
269 else { |
ba2aa110755b
Add some informational messages to proxy connection setup.
Matti Hamalainen <ccr@tnsp.org>
parents:
354
diff
changeset
|
270 nn_conn_err(conn, "Proxy negotiation timed out.\n"); |
ba2aa110755b
Add some informational messages to proxy connection setup.
Matti Hamalainen <ccr@tnsp.org>
parents:
354
diff
changeset
|
271 goto error; |
ba2aa110755b
Add some informational messages to proxy connection setup.
Matti Hamalainen <ccr@tnsp.org>
parents:
354
diff
changeset
|
272 } |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
273 } |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
274 |
360
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
275 nn_conn_reset(conn); |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
276 conn->status = NN_CONN_OPEN; |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
277 return 0; |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
278 |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
279 error: |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
280 conn->status = NN_CONN_CLOSED; |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
281 return -2; |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
282 } |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
283 |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
284 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
285 void nn_conn_close(nn_conn_t *conn) |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
286 { |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
287 if (conn == NULL) |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
288 return; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
289 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
290 if (conn->socket >= 0) { |
64
6a3a917303e4
Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
291 #ifdef __WIN32 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
292 closesocket(conn->socket); |
64
6a3a917303e4
Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
293 #else |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
294 close(conn->socket); |
64
6a3a917303e4
Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
295 #endif |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
296 conn->socket = -1; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
297 } |
354
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
298 |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
299 th_free(conn->host); |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
300 th_free(conn->proxy.host); |
c01e42fc9adb
More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
301 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
302 conn->status = NN_CONN_CLOSED; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
303 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
304 th_free(conn); |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
305 } |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
306 |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
307 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
308 BOOL nn_conn_send_buf(nn_conn_t *conn, const char *buf, const size_t len) |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
309 { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
310 size_t bufLeft = len; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
311 const char *bufPtr = buf; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
312 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
313 while (bufLeft > 0) { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
314 ssize_t bufSent; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
315 bufSent = send(conn->socket, bufPtr, bufLeft, 0); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
316 if (bufSent < 0) { |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
317 conn->err = nn_get_socket_errno(); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
318 nn_conn_err(conn, "nn_conn_send_buf() failed: %s", nn_get_socket_errstr(conn->err)); |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
319 return FALSE; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
320 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
321 bufLeft -= bufSent; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
322 bufPtr += bufSent; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
323 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
324 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
325 return TRUE; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
326 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
327 |
360
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
328 void nn_conn_reset(nn_conn_t *conn) |
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
329 { |
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
330 if (conn != NULL) { |
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
331 conn->ptr = conn->buf; |
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
332 conn->got = conn->total = 0; |
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
333 } |
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
334 } |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
335 |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
336 int nn_conn_pull(nn_conn_t *conn) |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
337 { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
338 int result; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
339 struct timeval socktv; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
340 fd_set tmpfds; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
341 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
342 if (conn == NULL) |
359 | 343 return -10; |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
344 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
345 /* Check for incoming data */ |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
346 socktv.tv_sec = 0; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
347 socktv.tv_usec = NN_DELAY_USEC; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
348 tmpfds = conn->sockfds; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
349 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
350 if ((result = select(conn->socket + 1, &tmpfds, NULL, NULL, &socktv)) == -1) { |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
351 conn->err = nn_get_socket_errno(); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
352 if (conn->err != EINTR) { |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
353 nn_conn_err(conn, "Error occured in select(%d, sockfds): %d, %s\n", |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
354 socket, conn->err, nn_get_socket_errstr(conn->err)); |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
355 return -1; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
356 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
357 } else |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
358 if (FD_ISSET(conn->socket, &tmpfds)) { |
360
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
359 conn->got = recv(conn->socket, conn->ptr, NN_CONNBUF_SIZE - conn->total, 0); |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
360 if (conn->got < 0) { |
352
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
361 conn->err = nn_get_socket_errno(); |
b54c8545dcb0
Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents:
330
diff
changeset
|
362 nn_conn_err(conn, "Error in recv: %d, %s\n", conn->err, nn_get_socket_errstr(conn->err)); |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
363 return -2; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
364 } else if (conn->got == 0) { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
365 nn_conn_err(conn, "Server closed connection.\n"); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
366 conn->status = NN_CONN_CLOSED; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
367 return -3; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
368 } else { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
369 /* Handle protocol data */ |
360
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
370 conn->total += conn->got; |
b465a17ffa47
Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
371 conn->ptr += conn->got; |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
372 return 0; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
373 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
374 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
375 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
376 return 1; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
377 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
378 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
379 BOOL nn_conn_check(nn_conn_t *conn) |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
380 { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
381 if (conn == NULL) |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
382 return FALSE; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
383 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
384 return conn->err == 0 && conn->status == NN_CONN_OPEN; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
385 } |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
386 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
387 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
388 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
389 BOOL nn_network_init(void) |
91
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
390 { |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
391 #ifdef __WIN32 |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
392 /* Initialize WinSock, if needed */ |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
393 WSADATA wsaData; |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
394 int err = WSAStartup(0x0101, &wsaData); |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
395 if (err != 0) { |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
396 THERR("Could not initialize WinSock library (err=%d).\n", err); |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
397 return FALSE; |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
398 } |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
399 #endif |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
400 return TRUE; |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
401 } |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
402 |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
403 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
404 void nn_network_close(void) |
91
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
405 { |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
406 #ifdef __WIN32 |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
407 WSACleanup(); |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
408 #endif |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
409 } |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
410 |
acfc4b4bc180
Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents:
90
diff
changeset
|
411 |
304
61884ce9db41
Use th_vputch() and th_vputs() instead of similar routines in libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
285
diff
changeset
|
412 #define PUSHCHAR(x) th_vputch(&result, &resSize, &resPos, x) |
61884ce9db41
Use th_vputch() and th_vputs() instead of similar routines in libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
285
diff
changeset
|
413 #define PUSHSTR(x) th_vputs(&result, &resSize, &resPos, x) |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
414 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
415 char *nn_encode_str1(const char *str) |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
416 { |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
417 const char *s = str; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
418 char *result; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
419 size_t resSize, resPos = 0; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
420 |
78
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
421 if (str == NULL) return NULL; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
422 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
423 resSize = strlen(str) + NN_ALLOC_SIZE; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
424 if ((result = th_malloc(resSize)) == NULL) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
425 return NULL; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
426 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
427 while (*s) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
428 switch (*s) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
429 case 32: |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
430 PUSHCHAR('+'); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
431 break; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
432 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
433 default: |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
434 if (th_isalnum(*s)) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
435 PUSHCHAR(*s); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
436 else { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
437 char tmpStr[4]; |
215
659b8229d015
Silence some warnings on OpenBSD.
Matti Hamalainen <ccr@tnsp.org>
parents:
168
diff
changeset
|
438 snprintf(tmpStr, sizeof(tmpStr), "%2X", (unsigned char) *s); |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
439 PUSHCHAR('%'); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
440 PUSHSTR(tmpStr); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
441 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
442 break; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
443 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
444 s++; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
445 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
446 PUSHCHAR(0); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
447 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
448 return result; |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
449 } |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
450 |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
451 |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
452 static int getHexDigit(const int c, const int shift) |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
453 { |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
454 int i; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
455 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
456 if (c >= 'A' && c <= 'F') |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
457 i = c - 'A' + 10; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
458 else if (c >= 'a' && c <= 'f') |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
459 i = c - 'a' + 10; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
460 else if (c >= '0' && c <= '9') |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
461 i = c - '0'; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
462 else |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
463 return -1; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
464 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
465 return i << shift; |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
466 } |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
467 |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
468 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
469 char *nn_decode_str1(const char *str) |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
470 { |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
471 const char *s = str; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
472 char *result; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
473 size_t resSize, resPos = 0; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
474 int c; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
475 |
78
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
476 if (str == NULL) return NULL; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
477 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
478 resSize = strlen(str) + NN_ALLOC_SIZE; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
479 if ((result = th_malloc(resSize)) == NULL) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
480 return NULL; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
481 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
482 while (*s) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
483 switch (*s) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
484 case '+': |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
485 PUSHCHAR(' '); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
486 s++; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
487 break; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
488 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
489 case '½': |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
490 /* Escape these .. */ |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
491 PUSHCHAR('½'); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
492 PUSHCHAR('½'); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
493 s++; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
494 break; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
495 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
496 case '\r': |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
497 PUSHCHAR(' '); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
498 s++; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
499 break; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
500 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
501 case '%': |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
502 s++; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
503 if (*s == '%') |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
504 PUSHCHAR('%'); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
505 else if ((c = getHexDigit(*s, 4)) >= 0) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
506 int i = getHexDigit(*(++s), 0); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
507 if (i >= 0) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
508 PUSHCHAR(c | i); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
509 } else { |
72
fe5fc76c0806
Fix the fuckups of previous commit.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
510 PUSHCHAR('§'); |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
511 PUSHCHAR(*s); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
512 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
513 } else { |
72
fe5fc76c0806
Fix the fuckups of previous commit.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
514 PUSHCHAR('§'); |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
515 PUSHCHAR(*s); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
516 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
517 s++; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
518 break; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
519 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
520 default: |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
521 PUSHCHAR(*s); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
522 s++; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
523 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
524 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
525 PUSHCHAR(0); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
526 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
527 return result; |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
528 } |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
529 |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
530 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
531 char *nn_strip_tags(const char *str) |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
532 { |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
533 const char *s = str; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
534 char *result; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
535 size_t resSize, resPos = 0; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
536 |
78
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
537 if (str == NULL) return NULL; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
538 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
539 resSize = strlen(str) + NN_ALLOC_SIZE; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
540 if ((result = th_malloc(resSize)) == NULL) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
541 return NULL; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
542 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
543 while (*s) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
544 if (*s == '<') { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
545 while (*s && *s != '>') s++; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
546 if (*s == '>') s++; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
547 } else |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
548 PUSHCHAR(*s++); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
549 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
550 PUSHCHAR(0); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
551 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
552 return result; |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
553 } |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
554 |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
555 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
556 typedef struct { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
557 char c; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
558 char *ent; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
559 } html_entity_t; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
560 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
561 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
562 static const html_entity_t HTMLEntities[] = { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
563 { '<', "<" }, |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
564 { '>', ">" }, |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
565 }; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
566 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
567 static const int numHTMLEntities = sizeof(HTMLEntities) / sizeof(HTMLEntities[0]); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
568 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
569 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
570 char *nn_encode_str2(const char *str) |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
571 { |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
572 const char *s = str; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
573 char *result; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
574 size_t resSize, resPos = 0; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
575 |
78
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
576 if (str == NULL) return NULL; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
577 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
578 resSize = strlen(str) + NN_ALLOC_SIZE; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
579 if ((result = th_malloc(resSize)) == NULL) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
580 return NULL; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
581 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
582 while (*s) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
583 int i; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
584 BOOL found = FALSE; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
585 for (i = 0; i < numHTMLEntities; i++) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
586 if (HTMLEntities[i].c == *s) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
587 PUSHSTR(HTMLEntities[i].ent); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
588 found = TRUE; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
589 break; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
590 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
591 if (!found) PUSHCHAR(*s); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
592 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
593 s++; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
594 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
595 PUSHCHAR(0); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
596 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
597 return result; |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
598 } |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
599 |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
600 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
601 char *nn_decode_str2(const char *str) |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
602 { |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
603 const char *s = str; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
604 char *result; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
605 size_t resSize, resPos = 0; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
606 |
78
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
607 if (str == NULL) return NULL; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
608 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
609 resSize = strlen(str); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
610 if ((result = th_malloc(resSize)) == NULL) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
611 return NULL; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
612 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
613 while (*s) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
614 if (*s == '&') { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
615 int i; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
616 BOOL found = FALSE; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
617 for (i = 0; i < numHTMLEntities; i++) { |
95 | 618 const html_entity_t *ent = &HTMLEntities[i]; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
619 int len = strlen(ent->ent); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
620 if (!strncmp(s, ent->ent, len)) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
621 PUSHCHAR(ent->c); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
622 s += len; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
623 found = TRUE; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
624 break; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
625 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
626 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
627 if (!found) PUSHCHAR(*s++); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
628 } else |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
629 PUSHCHAR(*s++); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
630 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
631 PUSHCHAR(0); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
632 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
633 return result; |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
634 } |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
635 |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
636 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
637 char *nn_dbldecode_str(const char *str) |
78
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
638 { |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
639 char *res, *tmp; |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
640 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
641 if ((tmp = nn_decode_str1(str)) == NULL) |
78
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
642 return NULL; |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
643 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
644 res = nn_decode_str2(tmp); |
78
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
645 th_free(tmp); |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
646 |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
647 return res; |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
648 } |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
649 |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
650 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
651 char *nn_dblencode_str(const char *str) |
78
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
652 { |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
653 char *res, *tmp; |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
654 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
655 if ((tmp = nn_encode_str2(str)) == NULL) |
78
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
656 return NULL; |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
657 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
658 res = nn_encode_str1(tmp); |
78
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
659 th_free(tmp); |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
660 |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
661 return res; |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
662 } |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
663 |
745f670068dc
Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents:
72
diff
changeset
|
664 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
665 BOOL nn_conn_send_msg(nn_conn_t *conn, const char *user, const char *fmt, ...) |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
666 { |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
667 char *tmp, *msg; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
668 va_list ap; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
669 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
670 va_start(ap, fmt); |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
671 tmp = th_strdup_vprintf(fmt, ap); |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
672 va_end(ap); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
673 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
674 if (tmp == NULL) |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
675 return FALSE; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
676 |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
677 msg = th_strdup_printf("<USER>%s</USER><MESSAGE>%s</MESSAGE>", user, tmp); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
678 th_free(tmp); |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
679 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
680 if (msg != NULL) { |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
681 BOOL ret = nn_conn_send_buf(conn, msg, strlen(msg) + 1); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
682 th_free(msg); |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
683 return ret; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
684 } else |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
685 return FALSE; |
62
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
686 } |
ff5d74f0d428
Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
687 |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
688 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
689 int nn_editbuf_write(nn_editbuf_t *buf, ssize_t pos, int ch) |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
690 { |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
691 if (buf->len+1 >= buf->size) return -3; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
692 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
693 if (pos < 0) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
694 return -1; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
695 else if (pos >= buf->len) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
696 buf->data[buf->len++] = ch; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
697 } else { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
698 buf->data[pos] = ch; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
699 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
700 return 0; |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
701 } |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
702 |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
703 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
704 int nn_editbuf_insert(nn_editbuf_t *buf, ssize_t pos, int ch) |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
705 { |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
706 if (buf->len+1 >= buf->size) return -3; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
707 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
708 if (pos < 0) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
709 return -1; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
710 else if (pos >= buf->len) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
711 buf->data[buf->len] = ch; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
712 } else { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
713 memmove(&(buf->data[pos+1]), &(buf->data[pos]), buf->len - pos + 1); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
714 buf->data[pos] = ch; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
715 } |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
716 buf->len++; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
717 return 0; |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
718 } |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
719 |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
720 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
721 int nn_editbuf_delete(nn_editbuf_t *buf, ssize_t pos) |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
722 { |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
723 if (pos < 0) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
724 return -1; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
725 else if (pos < buf->len) { |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
726 memmove(&(buf->data[pos]), &(buf->data[pos+1]), buf->len - pos); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
727 buf->len--; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
728 return 0; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
729 } else |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
730 return -2; |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
731 } |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
732 |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
733 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
734 void nn_editbuf_clear(nn_editbuf_t *buf) |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
735 { |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
736 buf->len = 0; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
737 buf->pos = 0; |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
738 } |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
739 |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
740 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
741 nn_editbuf_t * nn_editbuf_new(ssize_t n) |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
742 { |
89
c2d916b340bf
Change some typedef names; Add struct for user list handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
79
diff
changeset
|
743 nn_editbuf_t *res = th_calloc(1, sizeof(nn_editbuf_t)); |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
744 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
745 res->data = (char *) th_malloc(n); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
746 res->size = n; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
747 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
748 return res; |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
749 } |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
750 |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
751 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
752 void nn_editbuf_free(nn_editbuf_t *buf) |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
753 { |
312 | 754 if (buf != NULL) { |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
755 th_free(buf->data); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
756 th_free(buf); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
757 } |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
758 } |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
759 |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
760 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
761 nn_editbuf_t * nn_editbuf_copy(nn_editbuf_t *src) |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
762 { |
89
c2d916b340bf
Change some typedef names; Add struct for user list handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
79
diff
changeset
|
763 nn_editbuf_t *res; |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
764 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
765 assert(src != NULL); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
766 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
767 if (src == NULL) return NULL; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
768 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
769 if ((res = nn_editbuf_new(src->size)) == NULL) |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
770 return NULL; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
771 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
772 memcpy(res->data, src->data, src->size); |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
773 res->pos = res->len = src->len; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
774 |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
775 return res; |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
776 } |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
777 |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
778 |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
779 char * nn_editbuf_get_string(nn_editbuf_t *buf, ssize_t start, ssize_t end) |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
780 { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
781 char *str; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
782 ssize_t siz; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
783 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
784 if (buf == NULL) |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
785 return NULL; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
786 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
787 if (start < 0 || end > buf->len || start >= buf->len) |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
788 return NULL; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
789 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
790 if (end < 0) { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
791 siz = buf->len - start + 1; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
792 } else if (start <= end) { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
793 siz = end - start + 1; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
794 } else |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
795 return NULL; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
796 |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
797 if ((str = th_malloc(siz + 1)) == NULL) |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
798 return NULL; |
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
799 |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
800 memcpy(str, buf->data + start, siz); |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
801 str[siz] = 0; |
168
2e4850ece456
Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
167
diff
changeset
|
802 |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
803 return str; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
804 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
805 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
806 |
97
218efd2f0641
Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
807 void nn_editbuf_setpos(nn_editbuf_t *buf, ssize_t pos) |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
808 { |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
809 assert(buf != NULL); |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
810 |
71
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
811 if (pos < 0) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
812 buf->pos = 0; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
813 else if (pos >= buf->len) |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
814 buf->pos = buf->len; |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
815 else |
3a23c2adfb78
Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
65
diff
changeset
|
816 buf->pos = pos; |
65
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
817 } |
e763ef5cfd53
Move more functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
64
diff
changeset
|
818 |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
819 |
102 | 820 static uint8_t nn_hash_user(const char *name) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
821 { |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
822 /* |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
823 int n = 0; |
102 | 824 const uint8_t *c = (uint8_t *)name; |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
825 uint8_t hash = 0xff; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
826 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
827 while (*c && n < 4) { |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
828 hash = (hash << 1) ^ tolower(*c); |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
829 c++; n++; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
830 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
831 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
832 return (hash & 0xff); |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
833 */ |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
834 return tolower(name[0]); |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
835 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
836 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
837 |
102 | 838 static void nn_user_insert(nn_user_t **list, nn_user_t *node) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
839 { |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
840 node->next = *list; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
841 *list = node; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
842 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
843 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
844 |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
845 nn_user_t *nn_userhash_foreach(const nn_userhash_t *list, int (*func)(const nn_user_t *)) |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
846 { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
847 int i; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
848 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
849 if (list == NULL) return NULL; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
850 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
851 for (i = 0; i < NN_NUM_BUCKETS; i++) |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
852 if (list->buckets[i] != NULL) { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
853 nn_user_t *curr = list->buckets[i]; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
854 while (curr != NULL) { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
855 if (func(curr) != 0) |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
856 return curr; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
857 curr = curr->next; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
858 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
859 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
860 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
861 return NULL; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
862 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
863 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
864 |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
865 nn_user_t *nn_user_find(const nn_userhash_t *list, const char *name) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
866 { |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
867 uint8_t hash; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
868 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
869 if (list == NULL) return NULL; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
870 |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
871 hash = nn_hash_user(name); |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
872 if (list->buckets[hash] != NULL) { |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
873 nn_user_t *curr = list->buckets[hash]; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
874 while (curr != NULL) { |
372
b9f0bdad6285
Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents:
365
diff
changeset
|
875 if (th_strcasecmp(curr->name, name) == 0) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
876 return curr; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
877 curr = curr->next; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
878 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
879 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
880 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
881 return NULL; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
882 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
883 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
884 |
164
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
885 static nn_user_t *nn_user_match_do(nn_user_t *list, const char *pattern, size_t len) |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
886 { |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
887 nn_user_t *curr = list; |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
888 while (curr != NULL) { |
372
b9f0bdad6285
Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents:
365
diff
changeset
|
889 if (len <= strlen(curr->name) && th_strncasecmp(curr->name, pattern, len) == 0) |
164
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
890 return curr; |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
891 curr = curr->next; |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
892 } |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
893 return NULL; |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
894 } |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
895 |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
896 |
116
741e45592522
Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents:
108
diff
changeset
|
897 nn_user_t *nn_user_match(const nn_userhash_t *list, const char *pattern, const char *current, BOOL again) |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
898 { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
899 uint8_t hash; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
900 |
108
f323b137ca08
Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
901 if (list == NULL || pattern == NULL) return NULL; |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
902 |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
903 hash = nn_hash_user(pattern); |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
904 if (list->buckets[hash] != NULL) { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
905 nn_user_t *curr = list->buckets[hash]; |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
906 size_t len = strlen(pattern); |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
907 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
908 if (current != NULL) { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
909 nn_user_t *found = NULL; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
910 while (curr != NULL) { |
372
b9f0bdad6285
Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents:
365
diff
changeset
|
911 if (th_strcasecmp(curr->name, current) == 0) { |
116
741e45592522
Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents:
108
diff
changeset
|
912 if (again) |
741e45592522
Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents:
108
diff
changeset
|
913 return curr; |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
914 found = curr->next; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
915 break; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
916 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
917 curr = curr->next; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
918 } |
164
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
919 |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
920 if (found != NULL && (found = nn_user_match_do(found, pattern, len)) != NULL) |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
921 return found; |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
922 } |
116
741e45592522
Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents:
108
diff
changeset
|
923 |
164
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
924 if ((curr = nn_user_match_do(list->buckets[hash], pattern, len)) != NULL) |
701c54a45466
Fix matching of usernames against hash. In some cases after the last match the function would not go back to the first match.
Matti Hamalainen <ccr@tnsp.org>
parents:
116
diff
changeset
|
925 return curr; |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
926 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
927 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
928 return NULL; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
929 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
930 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
931 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
932 nn_userhash_t *nn_userhash_new(void) |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
933 { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
934 return th_calloc(1, sizeof(nn_userhash_t)); |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
935 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
936 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
937 |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
938 int nn_userhash_insert(nn_userhash_t *list, const char *name) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
939 { |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
940 uint8_t hash; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
941 nn_user_t *user; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
942 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
943 /* Check arguments */ |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
944 if (list == NULL || name == NULL) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
945 return -1; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
946 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
947 /* Check if username is already there */ |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
948 if (nn_user_find(list, name) != NULL) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
949 return 1; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
950 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
951 /* No, we'll add it */ |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
952 if ((user = th_calloc(1, sizeof(nn_user_t))) == NULL) |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
953 return -3; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
954 |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
955 user->name = th_strdup(name); |
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
956 if (user->name == NULL) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
957 return -4; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
958 |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
959 hash = nn_hash_user(name); |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
960 nn_user_insert(&(list->buckets[hash]), user); |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
961 |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
962 return 0; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
963 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
964 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
965 |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
966 int nn_userhash_delete(nn_userhash_t *list, const char *name) |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
967 { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
968 uint8_t hash; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
969 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
970 /* Check arguments */ |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
971 if (list == NULL || name == NULL) |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
972 return -1; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
973 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
974 /* Check if username is already there */ |
106
c587a99e2096
Drop internal use and storage of encoded usernames.
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
975 hash = nn_hash_user(name); |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
976 if (list->buckets[hash] != NULL) { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
977 nn_user_t *curr, *prev; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
978 curr = list->buckets[hash]; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
979 prev = NULL; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
980 while (curr != NULL) { |
372
b9f0bdad6285
Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents:
365
diff
changeset
|
981 if (th_strcasecmp(curr->name, name) == 0) { |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
982 if (prev) |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
983 prev->next = curr->next; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
984 else |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
985 list->buckets[hash] = curr->next; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
986 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
987 nn_user_free(curr); |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
988 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
989 return 0; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
990 } else { |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
991 prev = curr; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
992 curr = curr->next; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
993 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
994 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
995 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
996 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
997 return 1; |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
998 } |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
999 |
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
1000 |
102 | 1001 nn_user_t *nn_user_copy(const nn_user_t *src) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1002 { |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1003 nn_user_t *user; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1004 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1005 if (src == NULL) return NULL; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1006 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1007 if ((user = th_calloc(1, sizeof(nn_user_t))) == NULL) |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1008 return NULL; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1009 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1010 /* Copy relevant data */ |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1011 user->name = th_strdup(src->name); |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1012 user->lastspoke = src->lastspoke; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1013 user->joined = src->joined; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1014 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1015 return user; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1016 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1017 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1018 |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
1019 void nn_user_free(nn_user_t *user) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1020 { |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1021 th_free(user->name); |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1022 th_free(user); |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1023 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1024 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1025 |
102 | 1026 void nn_user_free_list(nn_user_t *list) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1027 { |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1028 nn_user_t *next, *curr = list; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1029 while (curr != NULL) { |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1030 next = curr->next; |
102 | 1031 nn_user_free(curr); |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1032 curr = next; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1033 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1034 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1035 |
103
eaa524e153f9
Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents:
102
diff
changeset
|
1036 void nn_userhash_free(nn_userhash_t *hash) |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1037 { |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1038 int i; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1039 if (hash == NULL) |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1040 return; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1041 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1042 for (i = 0; i < NN_NUM_BUCKETS; i++) { |
102 | 1043 nn_user_free_list(hash->buckets[i]); |
94
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1044 hash->buckets[i] = NULL; |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1045 } |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1046 |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1047 th_free(hash); |
6e47426efb6a
Add preliminary userlist data handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
1048 } |
285
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1049 |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1050 |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1051 char *nn_username_encode(char *str) |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1052 { |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1053 unsigned char *c = (unsigned char *) str; |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1054 if (str == NULL) return NULL; |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1055 for (; *c ; c++) |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1056 if (*c == ' ') *c = 255; |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1057 return str; |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1058 } |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1059 |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1060 |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1061 char *nn_username_decode(char *str) |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1062 { |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1063 unsigned char *c = (unsigned char *) str; |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1064 if (str == NULL) return NULL; |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1065 for (; *c ; c++) |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1066 if (*c == 255) *c = ' '; |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1067 return str; |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1068 } |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1069 |
b765f15f9895
Move nn_username_{de,en}code() to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
277
diff
changeset
|
1070 |
325
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1071 nn_window_t *nn_window_new(const char *id) |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1072 { |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1073 nn_window_t *res = th_calloc(1, sizeof(nn_window_t)); |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1074 |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1075 if (res == NULL) return NULL; |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1076 |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1077 res->data = th_ringbuf_new(NN_BACKBUF_LEN, th_free); |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1078 if (res->data == NULL) { |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1079 th_free(res); |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1080 return NULL; |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1081 } |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1082 |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1083 res->id = th_strdup(id); |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1084 |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1085 return res; |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1086 } |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1087 |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1088 |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1089 void nn_window_free(nn_window_t *win) |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1090 { |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1091 if (win != NULL) { |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1092 th_ringbuf_free(win->data); |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1093 th_free(win->id); |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1094 th_free(win); |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1095 } |
c086345d176b
Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents:
312
diff
changeset
|
1096 } |
330
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1097 |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1098 |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1099 nn_strtuple_t *nn_strtuple_new(size_t len, char *str) |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1100 { |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1101 nn_strtuple_t *tuple = th_calloc(1, sizeof(nn_strtuple_t)); |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1102 tuple->len = len; |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1103 tuple->str = str; |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1104 return tuple; |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1105 } |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1106 |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1107 |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1108 void nn_strtuple_free(nn_strtuple_t *tuple) |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1109 { |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1110 th_free(tuple->str); |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1111 th_free(tuple); |
8e509d6546d3
Move nn_strtuple_* functions to libnnchat.
Matti Hamalainen <ccr@tnsp.org>
parents:
325
diff
changeset
|
1112 } |