annotate libnnchat.c @ 396:07a46ca075ab

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