annotate main.c @ 513:ef5a2aa8382b

Refactor input handling.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 05 Jun 2012 22:16:42 +0300
parents 93c8ba1ef55f
children 151edcb79ce4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
41
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
1 /*
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
2 * NNChat - Custom chat client for NewbieNudes.com chatrooms
39
Matti Hamalainen <ccr@tnsp.org>
parents: 36
diff changeset
3 * Written by Matti 'ccr' Hämäläinen
421
4b7cd24dc943 Update copyright.
Matti Hamalainen <ccr@tnsp.org>
parents: 419
diff changeset
4 * (C) Copyright 2008-2012 Tecnic Software productions (TNSP)
39
Matti Hamalainen <ccr@tnsp.org>
parents: 36
diff changeset
5 */
413
14b685cdbd2c Rename files.
Matti Hamalainen <ccr@tnsp.org>
parents: 412
diff changeset
6 #include "util.h"
14b685cdbd2c Rename files.
Matti Hamalainen <ccr@tnsp.org>
parents: 412
diff changeset
7 #include "network.h"
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
8 #include "ui.h"
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9 #include "th_args.h"
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
10 #include "th_config.h"
468
607bd4491e79 Fix win32 build.
Matti Hamalainen <ccr@tnsp.org>
parents: 466
diff changeset
11 #include <time.h>
415
8263cb88556a Some #include cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 413
diff changeset
12 #include <errno.h>
64
6a3a917303e4 Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
13 #ifdef __WIN32
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
14 #include <shlwapi.h>
128
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
15 #else
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
16 #include <sys/wait.h>
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
17 #endif
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18
139
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
19 #ifdef __WIN32
160
d3c78f2ef77b Rename configuration file for Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
20 #define SET_CONFIG_FILE "nnchat.txt"
139
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
21 #define SET_DIR_SEPARATOR "\\"
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
22 #else
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
23 #define SET_CONFIG_FILE ".nnchat"
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
24 #define SET_DIR_SEPARATOR "/"
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
25 #endif
49
0bcc38910a77 Simple ringbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
26
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
27 #define SET_PROFILE_PREFIX "http://www.newbienudes.com/profile/%s/"
409
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
28 #define SET_NICK_SEPARATOR ':'
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
29
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
30 #define SET_MAX_HISTORY (16) // Command history length
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
31 #define SET_KEEPALIVE (15*60) // Ping/keepalive period in seconds
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32
49
0bcc38910a77 Simple ringbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
33
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 /* Options
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 */
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: 347
diff changeset
36 int optPort = 8005,
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: 347
diff changeset
37 optProxyPort = 1080,
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: 347
diff changeset
38 optProxyType = NN_PROXY_NONE;
207
e0c085426b91 Change default user color to black (#000000).
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
39 int optUserColor = 0x000000;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
40 char *optServer = "chat.newbienudes.com",
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: 347
diff changeset
41 *optProxyServer = NULL,
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
42 *optUserName = NULL,
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
43 *optUserNameCmd = NULL,
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
44 *optUserNameEnc = NULL,
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
45 *optPassword = NULL,
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
46 *optPasswordCmd = NULL,
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
47 *optLogFilename = NULL,
409
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
48 *optSite = "NN",
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
49 *optNickSepStr = NULL;
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
50 char optNickSep;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
51 BOOL optDaemon = FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
52 FILE *optLogFile = NULL;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
53 BOOL setIgnoreMode = FALSE;
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
54 BOOL optDebug = FALSE;
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
55 BOOL optLogEnable = FALSE;
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
56
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
57 qlist_t *setIgnoreList = NULL,
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
58 *setIdleMessages = NULL;
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
59 nn_userhash_t *nnUsers = NULL;
137
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
60 char *setConfigFile = NULL,
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
61 *setBrowser = NULL;
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
62 cfgitem_t *cfg = NULL;
89
c2d916b340bf Change some typedef names; Add struct for user list handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 86
diff changeset
63
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
64 nn_editbuf_t *editHistBuf[SET_MAX_HISTORY+2];
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
65 int editHistPos = 0,
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
66 editHistMax = 0;
273
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
67
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
68 /* Logging mode flags
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
69 */
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
70 enum
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
71 {
273
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
72 LOG_FILE = 1,
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
73 LOG_WINDOW = 2,
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
74 LOG_STAMP = 4
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
75 };
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
76
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
77
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
78 /* Arguments
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
79 */
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
80 optarg_t optList[] =
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
81 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
82 { 0, '?', "help", "Show this help", OPT_NONE },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
83 { 1, 'v', "verbose", "Be more verbose", OPT_NONE },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
84 { 2, 'p', "port", "Connect to port", OPT_ARGREQ },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
85 { 3, 's', "server", "Server to connect to", OPT_ARGREQ },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
86 { 4, 'C', "color", "Initial color in RGB hex 000000", OPT_ARGREQ },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
87 { 5, 'l', "logfile", "Log filename", OPT_ARGREQ },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
88 { 6, 'D', "daemon", "A pseudo-daemon mode for logging", OPT_NONE },
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: 347
diff changeset
89 { 7, 'f', "force-site", "Force site (default: NN)", OPT_ARGREQ },
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
90 { 8, 'd', "debug", "Enable various debug features", OPT_NONE },
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
91
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: 347
diff changeset
92 {10, '4', "socks4", "SOCKS4 proxy server", OPT_ARGREQ },
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: 347
diff changeset
93 {11, 'A', "socks4a", "SOCKS4A proxy server", OPT_ARGREQ },
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: 347
diff changeset
94 {12, 'P', "proxy-port", "Proxy port (default: 1080)", OPT_ARGREQ },
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
95 };
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96
43
40ba8cdcf03a Cleanups, added a silly morse code conversion mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
97 const int optListN = (sizeof(optList) / sizeof(optList[0]));
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
98
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
99
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
100 void argShowHelp(void)
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
101 {
381
7c28f38cb6dd Update to use new th-libs from the subrepo.
Matti Hamalainen <ccr@tnsp.org>
parents: 376
diff changeset
102 th_print_banner(stdout, th_prog_name,
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
103 "[options] <username> <password>");
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
104
381
7c28f38cb6dd Update to use new th-libs from the subrepo.
Matti Hamalainen <ccr@tnsp.org>
parents: 376
diff changeset
105 th_args_help(stdout, optList, optListN);
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
106 }
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
107
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
108
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
109 BOOL argHandleOpt(const int optN, char *optArg, char *currArg)
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110 {
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
111 switch (optN)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
112 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
113 case 0:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
114 argShowHelp();
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
115 exit(0);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
116 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
117
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
118 case 1:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
119 th_verbosityLevel++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
120 break;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
121
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
122 case 2:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
123 optPort = atoi(optArg);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
124 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
125
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
126 case 3:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
127 optServer = optArg;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
128 break;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
129
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
130 case 4:
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
131 if ((optUserColor = th_get_hex_triplet(optArg)) < 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
132 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
133 THERR("Invalid color argument '%s', should be a RGB hex triplet '000000'.\n",
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
134 optArg);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
135 return FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
136 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
137 THMSG(1, "Using color #%06x\n", optUserColor);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
138 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
140 case 5:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
141 optLogFilename = optArg;
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
142 optLogEnable = TRUE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
143 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
144
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
145 case 7:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
146 optSite = optArg;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
147 break;
33
e49ea6febfeb Cleanups. Added option to specify/fake "site" where logging in from.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
148
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
149 case 6:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
150 optDaemon = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
151 THMSG(1, "Running in pseudo-daemon mode.\n");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
152 break;
21
29098addfa65 Added a "daemon" mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
153
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
154 case 8:
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
155 optDebug = TRUE;
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
156 THMSG(1, "Debug mode enabled.\n");
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
157 break;
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
158
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: 347
diff changeset
159
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: 347
diff changeset
160 case 10:
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: 347
diff changeset
161 optProxyServer = optArg;
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: 347
diff changeset
162 optProxyType = NN_PROXY_SOCKS4;
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: 347
diff changeset
163 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: 347
diff changeset
164
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: 347
diff changeset
165 case 11:
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: 347
diff changeset
166 optProxyServer = optArg;
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: 347
diff changeset
167 optProxyType = NN_PROXY_SOCKS4A;
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: 347
diff changeset
168 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: 347
diff changeset
169
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: 347
diff changeset
170 case 12:
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: 347
diff changeset
171 optPort = atoi(optArg);
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: 347
diff changeset
172 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: 347
diff changeset
173
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: 347
diff changeset
174
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
175 default:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
176 THERR("Unknown option '%s'.\n", currArg);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
177 return FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
178 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
179
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
180 return TRUE;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
182
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184 BOOL argHandleFile(char *currArg)
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
185 {
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
186 if (!optUserNameCmd)
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
187 optUserNameCmd = currArg;
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
188 else if (!optPasswordCmd)
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
189 optPasswordCmd = currArg;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
190 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
191 {
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
192 THERR("Username '%s' already specified on commandline!\n", optUserNameCmd);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
193 return FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
194 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
195
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
196 return TRUE;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198
460
c956af023014 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 459
diff changeset
199
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
200 int printFile(FILE *outFile, const char *fmt)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
201 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
202 const char *s = fmt;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
203
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
204 while (*s)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
205 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
206 if (*s == '½')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
207 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
208 s++;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
209 if (*s == '½')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
210 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
211 fputc((unsigned char) *s, outFile);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
212 s++;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
213 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
214 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
215 {
74
98004129202a Portability fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
216 while (*s && isdigit((int) *s)) s++;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
217 if (*s != '½') return -1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
218 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
219 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
220 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
221 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
222 {
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
223 if ((unsigned char) *s == 255)
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
224 fputc(' ', outFile);
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
225 else
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
226 fputc((unsigned char) *s, outFile);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
227 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
228 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
229 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
230
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
231 return 0;
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
232 }
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
233
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
234 void printMsgV(nn_window_t *win, int flags, const char *fmt, va_list ap)
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
235 {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
236 char tmpStr[128], *buf;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
237
397
932829a556c7 Rename a function.
Matti Hamalainen <ccr@tnsp.org>
parents: 391
diff changeset
238 str_get_timestamp(tmpStr, sizeof(tmpStr), "½17½[½11½%H:%M:%S½17½]½0½ ");
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
239
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
240 buf = th_strdup_vprintf(fmt, ap);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
241
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
242 if (optLogFile && (flags & LOG_FILE))
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
243 {
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
244 if (flags & LOG_STAMP) printFile(optLogFile, tmpStr);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
245 printFile(optLogFile, buf);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
246 fflush(optLogFile);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
247 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
248
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
249 if (!optDaemon && (flags & LOG_WINDOW))
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
250 {
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
251 nn_window_t *tmp = (win != NULL) ? win : nnwin_main_window();
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 497
diff changeset
252 if (flags & LOG_STAMP) nnwin_print(tmp, tmpStr);
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 497
diff changeset
253 nnwin_print(tmp, buf);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
254 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
255
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
256 th_free(buf);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
257 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
258
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
259 void printMsg(nn_window_t *win, const char *fmt, ...)
100
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
260 {
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
261 va_list ap;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
262
100
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
263 va_start(ap, fmt);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
264 printMsgV(win, LOG_STAMP | LOG_WINDOW | LOG_FILE, fmt, ap);
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
265 va_end(ap);
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
266 }
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
267
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
268 void printMsgF(nn_window_t *win, int flags, const char *fmt, ...)
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
269 {
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
270 va_list ap;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
271
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
272 va_start(ap, fmt);
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
273 printMsgV(win, flags | LOG_STAMP, fmt, ap);
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
274 va_end(ap);
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
275 }
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
276
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
277 void printMsgQ(nn_window_t *win, const char *fmt, ...)
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
278 {
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
279 va_list ap;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
280
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
281 va_start(ap, fmt);
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
282 printMsgV(win, LOG_STAMP | LOG_WINDOW, fmt, ap);
100
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
283 va_end(ap);
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
284 }
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
285
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
286
223
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
287 char *errorMessages = NULL;
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
288
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
289 void errorMsgV(const char *fmt, va_list ap)
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
290 {
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
291 char *tmp = th_strdup_vprintf(fmt, ap);
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
292
359
8f3c102db611 Fix SOCKS handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 354
diff changeset
293 printMsg(NULL, "%s", tmp);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
294
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
295 if (errorMessages != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
296 {
223
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
297 char *tmp2 = th_strdup_printf("%s%s", errorMessages, tmp);
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
298 th_free(errorMessages);
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
299 th_free(tmp);
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
300 errorMessages = tmp2;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
301 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
302 else
223
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
303 errorMessages = tmp;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
304 }
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
305
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
306
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
307 void errorMsg(const char *fmt, ...)
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
308 {
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
309 va_list ap;
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
310
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
311 va_start(ap, fmt);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
312 errorMsgV(fmt, ap);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
313 va_end(ap);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
314 }
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
315
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
316
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
317 void debugMsg(const char *fmt, ...)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
318 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
319 if (optDebug)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
320 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
321 va_list ap;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
322
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
323 va_start(ap, fmt);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
324 printMsgV(NULL, LOG_FILE|LOG_WINDOW, fmt, ap);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
325 va_end(ap);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
326 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
327 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
328
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
329
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
330 void errorFunc(struct _nn_conn_t *conn, const char *fmt, va_list ap)
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
331 {
262
6d48fc4fd421 Shut up some trivial warnings.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
332 (void) conn;
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
333 errorMsgV(fmt, ap);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
334 }
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
335
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
336
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
337 void messageFunc(struct _nn_conn_t *conn, const char *fmt, va_list ap)
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
338 {
262
6d48fc4fd421 Shut up some trivial warnings.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
339 (void) conn;
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
340 printMsgV(NULL, LOG_STAMP | LOG_WINDOW | LOG_FILE, fmt, ap);
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
341 }
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
342
225
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
343
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
344 BOOL checkIgnoreList(const char *name)
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
345 {
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
346 qlist_t *node = setIgnoreList;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
347 while (node != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
348 {
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
349 if (th_strcasecmp(name, (char *) node->data) == 0)
225
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
350 return TRUE;
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
351 node = node->next;
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
352 }
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
353 return FALSE;
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
354 }
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
355
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
356
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
357 int nnproto_parse_user(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
358 {
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
359 BOOL isMine, isIgnored = FALSE;
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
360 char *name, *msg, *t;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
361
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
362 // Find start of the message
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
363 name = conn->ptr;
430
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
364 t = nn_conn_buf_strstr(conn, "</USER>");
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
365 if (!t) return 1;
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
366 *t = 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
367
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
368 // Find end of the message
430
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
369 t = nn_conn_buf_strstr(conn, "<MESSAGE>");
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
370 if (!t) return 2;
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
371 msg = conn->ptr;
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
372
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
373 t = nn_conn_buf_strstr(conn, "</MESSAGE>");
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
374 if (!t) return 3;
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
375 *t = 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
376
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
377 // Decode message string
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
378 msg = nn_decode_str1(msg);
481
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
379 if (!msg)
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
380 {
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
381 errorMsg("Decode/malloc failure @ nnproto_parse_user()\n");
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
382 return -1;
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
383 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
384
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
385 // Decode username
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
386 name = nn_decode_str1(name);
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
387 if (!name)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
388 {
481
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
389 errorMsg("Decode/malloc failure @ nnproto_parse_user()\n");
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
390 th_free(msg);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
391 return -2;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
392 }
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
393
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
394 /* Check if the username is on our ignore list and
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
395 * that it is not our OWN username!
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
396 */
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
397 isMine = strcmp(name, optUserName) == 0;
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
398 isIgnored = setIgnoreMode && !isMine && checkIgnoreList(name);
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
399
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
400 // Is it a special control message?
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
401 if (*msg == '/')
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
402 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
403 // Ignore room join/leave messages
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
404 if (!optDebug && (strstr(msg, "left the room") || strstr(msg, "joined the room from")))
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
405 goto done;
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
406
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
407 t = nn_strip_tags(msg + 1);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
408 if (!strncmp(t, "BPRV ", 5))
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
409 {
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
410 char *in_name, *tmp, *in_msg, *h;
293
ff39ebf05b40 Fix unwindowed PRVs.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
411 nn_window_t *win;
ff39ebf05b40 Fix unwindowed PRVs.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
412 h = nn_decode_str2(t + 1);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
413
418
8ca09a6cca09 Minor cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
414 // Check type of
8ca09a6cca09 Minor cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
415 if ((isMine = strncmp(t, "BPRV from ", 10)) == 0)
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
416 in_name = nn_decode_str2(t + 10);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
417 else
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
418 in_name = nn_decode_str2(t + 8);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
419
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
420 for (tmp = in_name; *tmp && *tmp != ':'; tmp++);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
421 if (tmp[0] != 0 && tmp[1] == ' ')
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
422 in_msg = tmp + 2;
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
423 else
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
424 in_msg = "";
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
425 *tmp = 0;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
426
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
427 isIgnored = setIgnoreMode && checkIgnoreList(in_name);
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
428 win = nnwin_find(in_name);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
429
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
430 if (win != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
431 {
388
f45673fe6b23 Log private messages always in the PRV format.
Matti Hamalainen <ccr@tnsp.org>
parents: 385
diff changeset
432 printMsgF(win, isIgnored ? 0 : LOG_WINDOW,
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
433 "½5½<½%d½%s½5½>½0½ %s\n",
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
434 isMine ? 14 : 15, isMine ? optUserName : in_name, in_msg);
388
f45673fe6b23 Log private messages always in the PRV format.
Matti Hamalainen <ccr@tnsp.org>
parents: 385
diff changeset
435
f45673fe6b23 Log private messages always in the PRV format.
Matti Hamalainen <ccr@tnsp.org>
parents: 385
diff changeset
436 printMsgF(NULL, LOG_FILE, "½11½%s½0½\n", h);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
437 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
438 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
439 {
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
440 printMsgF(NULL, isIgnored ? LOG_FILE : (LOG_WINDOW | LOG_FILE),
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
441 "½11½%s½0½\n", h);
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
442 }
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
443 th_free(in_name);
293
ff39ebf05b40 Fix unwindowed PRVs.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
444 th_free(h);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
445 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
446 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
447 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
448 // It's an action (/me)
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
449 char *h = nn_decode_str2(t);
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
450 printMsgF(NULL, isIgnored ? LOG_FILE : (LOG_WINDOW | LOG_FILE),
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
451 "½9½* %s½0½\n", h);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
452 th_free(h);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
453 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
454 th_free(t);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
455 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
456 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
457 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
458 // It's a normal message
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
459 char *h;
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
460 t = nn_strip_tags(msg);
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
461 h = nn_decode_str2(t);
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
462 printMsgF(NULL, isIgnored ? LOG_FILE : (LOG_WINDOW | LOG_FILE),
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
463 "½5½<½%d½%s½5½>½0½ %s\n", isMine ? 14 : 15, name, h);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
464 th_free(h);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
465 th_free(t);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
466 }
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
467
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
468 done:
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
469 th_free(msg);
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
470 th_free(name);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
471 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
472 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
473
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
474
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
475 int nnproto_parse_login(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
476 {
156
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
477 char tmpStr[256];
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
478 str_get_timestamp(tmpStr, sizeof(tmpStr), "%c");
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
479
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
480 if (!nn_conn_buf_strcmp(conn, "FAILURE>"))
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
481 {
430
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
482 nn_conn_buf_strstr(conn, "</LOGIN_FAILURE>");
437
8e9690a3f973 Fix parsing of LOGIN_{SUCCESS,FAILURE} packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 436
diff changeset
483 nn_conn_buf_strstr(conn, "</USER>");
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
484 printMsg(NULL, "½1½Login failure½0½ - ½3½%s½0½\n", tmpStr);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
485 return -2;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
486 }
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
487 else if (!nn_conn_buf_strcmp(conn, "SUCCESS>"))
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
488 {
430
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
489 nn_conn_buf_strstr(conn, "</LOGIN_SUCCESS>");
437
8e9690a3f973 Fix parsing of LOGIN_{SUCCESS,FAILURE} packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 436
diff changeset
490 nn_conn_buf_strstr(conn, "</USER>");
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
491 printMsg(NULL, "½2½Login success½0½ - ½3½%s½0½\n", tmpStr);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
492 nn_conn_send_msg(conn, optUserNameEnc, "%2FRequestUserList");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
493 return 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
494 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
495 else
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
496 return 1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
497 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
498
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
499
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
500 int nnproto_parse_add_user(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
501 {
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
502 char *p, *s, *str = conn->ptr;
297
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
503 nn_window_t *win;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
504
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
505 s = nn_conn_buf_strstr(conn, "</ADD_USER>");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
506 if (!s) return 1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
507 *s = 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
508
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
509 p = nn_dbldecode_str(str);
481
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
510 if (!p)
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
511 {
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
512 errorMsg("Decode/malloc failure @ nnproto_parse_add_user()\n");
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
513 return -1;
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
514 }
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
515
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
516 win = nnwin_find(p);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
517 nn_userhash_insert(nnUsers, nn_username_encode(p));
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
518
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
519 printMsg(NULL, "! ½3½%s½0½ ½2½ADDED.½0½\n", p);
297
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
520 if (win != NULL)
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
521 printMsg(win, "! ½3½%s½0½ ½2½joined the chat.½0½\n", p);
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
522
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
523 th_free(p);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
524 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
525 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
526
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
527
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
528 int nnproto_parse_delete_user(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
529 {
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
530 char *p, *s, *str = conn->ptr;
297
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
531 nn_window_t *win;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
532
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
533 s = nn_conn_buf_strstr(conn, "</DELETE_USER>");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
534 if (!s) return 1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
535 *s = 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
536
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
537 p = nn_dbldecode_str(str);
481
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
538 if (!p)
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
539 {
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
540 errorMsg("Decode/malloc failure @ nnproto_parse_delete_user()\n");
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
541 return -1;
73a648387d10 Improve error reporting.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
542 }
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
543
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
544 win = nnwin_find(p);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
545 nn_userhash_delete(nnUsers, nn_username_encode(p));
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
546
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
547 printMsg(NULL, "! ½3½%s½0½ ½1½DELETED.½0½\n", p);
297
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
548 if (win != NULL)
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
549 printMsg(win, "! ½3½%s½0½ ½1½left the chat.½0½\n", p);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
550
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
551 th_free(p);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
552 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
553 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
554
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
555
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
556 int nnproto_parse_num_clients(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
557 {
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
558 nn_conn_buf_strstr(conn, "</NUMCLIENTS>");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
559 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
560 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
561
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
562
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
563 int nnproto_parse_boot(nn_conn_t *conn)
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
564 {
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
565 (void) conn;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
566 errorMsg("Booted by server.\n");
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
567 return -1;
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
568 }
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
569
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
570
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
571 typedef struct
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
572 {
443
96cb82ebb93b Rename a structure member.
Matti Hamalainen <ccr@tnsp.org>
parents: 442
diff changeset
573 char *name;
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
574 size_t len;
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
575 int (*handler)(nn_conn_t *);
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
576 } nn_protocolcmd_t;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
577
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
578
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
579 static nn_protocolcmd_t protoCmds[] =
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
580 {
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
581 { "<USER>", 0, nnproto_parse_user },
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
582 { "<LOGIN_", 0, nnproto_parse_login },
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
583 { "<DELETE_USER>", 0, nnproto_parse_delete_user },
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
584 { "<ADD_USER>", 0, nnproto_parse_add_user },
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
585 { "<NUMCLIENTS>", 0, nnproto_parse_num_clients },
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
586 { "<BOOT />", 0, nnproto_parse_boot },
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
587 };
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
588
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
589 static const int nprotoCmds = sizeof(protoCmds) / sizeof(protoCmds[0]);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
590
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
591
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
592 int nn_parse_protocol(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
593 {
130
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
594 static BOOL protoCmdsInit = FALSE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
595 int i;
130
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
596
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
597 if (!protoCmdsInit)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
598 {
130
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
599 for (i = 0; i < nprotoCmds; i++)
443
96cb82ebb93b Rename a structure member.
Matti Hamalainen <ccr@tnsp.org>
parents: 442
diff changeset
600 protoCmds[i].len = strlen(protoCmds[i].name);
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
601
130
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
602 protoCmdsInit = TRUE;
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
603 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
604
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
605 for (i = 0; i < nprotoCmds; i++)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
606 {
443
96cb82ebb93b Rename a structure member.
Matti Hamalainen <ccr@tnsp.org>
parents: 442
diff changeset
607 if (!nn_conn_buf_strncmp(conn, protoCmds[i].name, protoCmds[i].len))
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
608 return protoCmds[i].handler(conn);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
609 }
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
610
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
611 if (optDebug)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
612 {
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
613 printMsg(NULL, "Unknown protocmd: \"%s\"\n", conn->ptr);
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
614 return 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
615 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
616 else
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
617 return 1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
618 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
619
402
563a70e8a303 Oops, these functions were moved/renamed and were left out from a previous commit. :|
Matti Hamalainen <ccr@tnsp.org>
parents: 401
diff changeset
620
474
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
621 int nn_open_uri(const char *uri)
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
622 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
623 #ifdef __WIN32
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
624 HINSTANCE status;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
625
442
ecbd9773c74b Minor win32 build fix.
Matti Hamalainen <ccr@tnsp.org>
parents: 439
diff changeset
626 status = ShellExecute(NULL, "open", uri, NULL, NULL, SW_SHOWNA);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
627 if (status <= (HINSTANCE) 32)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
628 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
629 printMsgQ(currWin, "Could not launch default web browser: %d\n", status);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
630 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
631 #else
474
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
632 int status;
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
633 int fds[2];
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
634 pid_t pid;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
635
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
636 if (pipe(fds) == -1)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
637 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
638 int ret = errno;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
639 printMsgQ(currWin, "Could not open process communication pipe! (%d, %s)\n", ret, strerror(ret));
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
640 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
641 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
642
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
643 if ((pid = fork()) < 0)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
644 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
645 printMsgQ(currWin, "Could not create sub-process!\n");
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
646 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
647 else if (pid == 0)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
648 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
649 dup2(fds[1], STDOUT_FILENO);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
650 dup2(fds[0], STDERR_FILENO);
474
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
651 char *url = th_strdup_printf("openurl(%s,new-tab)", uri);
478
4dca76db9e1f Fix opening of browser windows on UNIX.
Matti Hamalainen <ccr@tnsp.org>
parents: 474
diff changeset
652 execlp(setBrowser, setBrowser, "-remote", url, (void *)NULL);
474
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
653 th_free(url);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
654 _exit(errno);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
655 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
656
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
657 wait(&status);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
658 #endif
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
659
474
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
660 return 0;
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
661 }
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
662
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
663 int nncmd_open_profile(nn_conn_t *conn, char *name)
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
664 {
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
665 char *enc_name = nn_encode_str1(name);
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
666 char *uri = th_strdup_printf(SET_PROFILE_PREFIX, name);
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
667 (void) conn;
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
668
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
669 printMsg(currWin, "Opening profile for: '%s'\n", name);
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
670
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
671 nn_open_uri(uri);
4ddc3d87242e Refactor web-browser launching into nn_open_uri().
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
672
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
673 th_free(uri);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
674 th_free(enc_name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
675 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
676 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
677
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
678
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
679 int nncmd_ignore(nn_conn_t *conn, char *name)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
680 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
681 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
682
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
683 if (name[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
684 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
685 // Add or remove someone to/from ignore
459
75ed7be2cfe8 Rename compareUsername() to str_compare().
Matti Hamalainen <ccr@tnsp.org>
parents: 457
diff changeset
686 qlist_t *user = th_llist_find_func(setIgnoreList, name, str_compare);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
687 if (user != NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
688 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
689 printMsgQ(currWin, "Removed user '%s' from ignore.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
690 th_llist_delete_node(&setIgnoreList, user);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
691 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
692 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
693 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
694 printMsgQ(currWin, "Now ignoring '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
695 th_llist_append(&setIgnoreList, th_strdup(name));
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
696 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
697 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
698 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
699 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
700 // Just list whomever is in ignore now
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
701 qlist_t *user = setIgnoreList;
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
702 size_t nuser = th_llist_length(setIgnoreList);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
703 char *result = th_strdup_printf("Users ignored (%d): ", nuser);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
704 while (user != NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
705 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
706 if (user->data != NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
707 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
708 th_pstr_printf(&result, "%s'%s'", result, (char *) user->data);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
709 if (--nuser > 0)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
710 th_pstr_printf(&result, "%s, ", result);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
711 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
712 user = user->next;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
713 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
714 printMsgQ(currWin, "%s\n", result);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
715 th_free(result);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
716 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
717
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
718 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
719 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
720
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
721
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
722 int nncmd_set_color(nn_conn_t *conn, char *arg)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
723 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
724 int val;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
725 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
726
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
727 if ((val = th_get_hex_triplet(arg)) < 0)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
728 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
729 printMsgQ(currWin, "Invalid color value '%s'\n", arg);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
730 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
731 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
732
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
733 optUserColor = val;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
734 printMsgQ(currWin, "Setting color to #%06x\n", optUserColor);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
735 nn_conn_send_msg_v(conn, optUserNameEnc, "%%2FSetFontColor%%20%%2Dcolor%%20%06X", optUserColor);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
736 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
737 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
738
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
739
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
740 int nncmd_open_query(nn_conn_t *conn, char *name)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
741 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
742 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
743
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
744 if (name[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
745 {
446
3396acd40147 Rename and remove some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 445
diff changeset
746 nn_user_t *user = nn_userhash_find(nnUsers, nn_username_encode(name));
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
747 if (user != NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
748 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
749 name = nn_username_decode(th_strdup(user->name));
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
750 printMsgQ(currWin, "Opening PRV query for '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
751 if (nnwin_open(name, TRUE))
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
752 printMsgQ(currWin, "In PRV query with '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
753 th_free(name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
754 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
755 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
756 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
757 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
758 printMsgQ(currWin, "Could not find username '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
759 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
760 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
761 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
762 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
763 {
472
53179f875131 Combine some prints.
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
764 printMsgQ(currWin,
53179f875131 Combine some prints.
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
765 "Usage: /query username\n"
53179f875131 Combine some prints.
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
766 "To close a PRV query, use /close [username]\n"
53179f875131 Combine some prints.
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
767 "/close without username will close the current PRV window, if any.\n");
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
768 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
769 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
770 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
771
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
772
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
773 int nncmd_close_query(nn_conn_t *conn, char *name)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
774 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
775 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
776
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
777 if (name[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
778 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
779 nn_window_t *win = nnwin_find(name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
780 if (win != NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
781 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
782 nnwin_close(win);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
783 printMsgQ(currWin, "Closed PRV query to '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
784 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
785 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
786 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
787 printMsgQ(currWin, "No PRV query by name '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
788 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
789 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
790 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
791 {
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
792 if (currWin != nnwin_main_window())
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
793 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
794 nnwin_close(currWin);
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
795 currWin = nnwin_main_window();
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
796 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
797 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
798 {
472
53179f875131 Combine some prints.
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
799 printMsgQ(currWin,
53179f875131 Combine some prints.
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
800 "Usage: /close [username]\n"
53179f875131 Combine some prints.
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
801 "/close without username will close the current PRV window. if any.\n");
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
802 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
803 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
804
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
805 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
806 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
807
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
808
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
809 int nncmd_window_info(nn_conn_t *conn, char *arg)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
810 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
811 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
812
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
813 if (arg[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
814 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
815 int val = atoi(arg);
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
816 nn_window_t *win = nnwin_get(val);
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
817 if (win != NULL)
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
818 currWin = win;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
819 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
820 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
821 printMsgQ(currWin, "Invalid window number '%s'\n", arg);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
822 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
823 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
824 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
825 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
826 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
827 printMsgQ(currWin, "Window : #%d\n", currWin->num);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
828 printMsgQ(currWin, "ID : %s\n", currWin->id);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
829 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
830 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
831 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
832
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
833
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
834 int nncmd_list_all_users(nn_conn_t *conn, char *buf)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
835 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
836 (void) buf;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
837
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
838 // Alias /listallusers
425
143fd51048a9 Fix /list command.
Matti Hamalainen <ccr@tnsp.org>
parents: 424
diff changeset
839 return nn_conn_send_msg(conn, optUserNameEnc, "%2Flistallusers");
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
840 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
841
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
842
486
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
843 #define NAME_NUM_PER_LINE 3
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
844 #define NAME_ENTRY_SIZE 64
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
845 #define NAME_ENTRY_WIDTH 22
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
846
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
847 typedef struct
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
848 {
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
849 char buf[(NAME_NUM_PER_LINE * NAME_ENTRY_SIZE) + 16];
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
850 size_t offs;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
851 int i, total;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
852 } nncmd_namedata_t;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
853
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
854
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
855 static int nncmd_names_do(const nn_user_t *user, void *data)
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
856 {
486
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
857 nncmd_namedata_t *d = data;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
858 char name[NAME_ENTRY_SIZE];
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
859 size_t len;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
860
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
861 snprintf(name, sizeof(name), "[½3½%-20s½0½] ", user->name);
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
862
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
863 d->total++;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
864 if (d->i >= NAME_NUM_PER_LINE)
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
865 {
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
866 printMsgQ(currWin, "%s\n", d->buf);
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
867 d->i = 0;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
868 d->offs = 0;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
869 }
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
870
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
871 len = strlen(name);
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
872 memcpy(d->buf + d->offs, name, len + 1);
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
873 d->offs += len;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
874 d->i++;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
875
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
876 return 0;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
877 }
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
878
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
879
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
880 int nncmd_names(nn_conn_t *conn, char *arg)
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
881 {
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
882 nncmd_namedata_t data;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
883 (void) conn;
486
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
884 (void) arg;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
885
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
886 printMsgQ(currWin, "Users:\n");
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
887 data.i = data.total = 0;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
888 data.offs = 0;
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
889
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
890 nn_userhash_foreach(nnUsers, nncmd_names_do, &data);
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
891
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
892 if (data.i > 0)
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
893 {
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
894 printMsgQ(currWin, "%s\n", data.buf);
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
895 }
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
896
d48327519b17 Implement /who / /names functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
897 printMsgQ(currWin, "%d users total.\n", data.total);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
898 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
899 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
900
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
901
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
902 int nncmd_save_config(nn_conn_t *conn, char *buf)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
903 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
904 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
905 (void) buf;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
906
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
907 FILE *cfgfile = fopen(setConfigFile, "w");
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
908 if (cfgfile == NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
909 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
910 printMsgQ(currWin, "Could not create configuration to file '%s': %s\n",
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
911 setConfigFile, strerror(errno));
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
912 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
913 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
914
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
915 printMsgQ(currWin, "Configuration saved in file '%s', res=%d\n",
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
916 setConfigFile,
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
917 th_cfg_write(cfgfile, setConfigFile, cfg));
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
918
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
919 fclose(cfgfile);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
920 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
921 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
922
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
923
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
924 enum
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
925 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
926 CMDARG_NONE,
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
927 CMDARG_STRING,
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
928 CMDARG_OPTIONAL,
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
929 CMDARG_NICK,
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
930 };
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
931
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
932 typedef struct
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
933 {
443
96cb82ebb93b Rename a structure member.
Matti Hamalainen <ccr@tnsp.org>
parents: 442
diff changeset
934 char *name;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
935 int flags;
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
936 size_t len;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
937 int (*handler)(nn_conn_t *, char *buf);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
938 } nn_usercmd_t;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
939
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
940
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
941 static nn_usercmd_t userCmdsTable[] =
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
942 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
943 // Server side commands, we just implement completion
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
944 { "/me", CMDARG_STRING, 0, NULL },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
945 { "/status", CMDARG_STRING, 0, NULL },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
946 { "/list", CMDARG_NONE, 0, nncmd_list_all_users },
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
947
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
948 // List internal username list
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
949 { "/who", CMDARG_NONE, 0, nncmd_names },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
950 { "/names", CMDARG_NONE, 0, nncmd_names },
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
951
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
952 { "/w", CMDARG_NICK, 0, nncmd_open_profile },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
953 { "/profile", CMDARG_NICK, 0, nncmd_open_profile },
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
954
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
955 { "/query", CMDARG_NICK, 0, nncmd_open_query },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
956 { "/close", CMDARG_OPTIONAL, 0, nncmd_close_query },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
957 { "/win", CMDARG_OPTIONAL, 0, nncmd_window_info },
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
958
497
cbbf502e4a70 Fix /ignore command.
Matti Hamalainen <ccr@tnsp.org>
parents: 494
diff changeset
959 { "/ignore", CMDARG_OPTIONAL, 0, nncmd_ignore },
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
960 { "/color", CMDARG_STRING, 0, nncmd_set_color },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
961 { "/save", CMDARG_NONE, 0, nncmd_save_config },
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
962 };
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
963
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
964 static qlist_t *userCmds = NULL;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
965
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
966
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
967 void nn_usercmd_init()
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
968 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
969 size_t i;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
970 for (i = 0; i < sizeof(userCmdsTable) / sizeof(userCmdsTable[0]); i++)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
971 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
972 th_llist_append(&userCmds, &userCmdsTable[i]);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
973 userCmdsTable[i].len = strlen(userCmdsTable[i].name);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
974 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
975 }
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
976
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
977
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
978 int nn_handle_command(nn_conn_t *conn, char *buf)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
979 {
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
980 qlist_t *curr;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
981
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
982 for (curr = userCmds; curr != NULL; curr = curr->next)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
983 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
984 nn_usercmd_t *cmd = curr->data;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
985
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
986 if (!th_strncasecmp(buf, cmd->name, cmd->len))
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
987 {
457
69ce77696c5d Fix command precedence.
Matti Hamalainen <ccr@tnsp.org>
parents: 456
diff changeset
988 char *nbuf;
69ce77696c5d Fix command precedence.
Matti Hamalainen <ccr@tnsp.org>
parents: 456
diff changeset
989 if (buf[cmd->len] != 0 && !th_isspace(buf[cmd->len]))
69ce77696c5d Fix command precedence.
Matti Hamalainen <ccr@tnsp.org>
parents: 456
diff changeset
990 continue;
69ce77696c5d Fix command precedence.
Matti Hamalainen <ccr@tnsp.org>
parents: 456
diff changeset
991
69ce77696c5d Fix command precedence.
Matti Hamalainen <ccr@tnsp.org>
parents: 456
diff changeset
992 nbuf = str_trim_left(buf + cmd->len);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
993
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
994 switch (cmd->flags)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
995 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
996 case CMDARG_NICK:
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
997 case CMDARG_STRING:
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
998 if (!nbuf[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
999 {
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1000 printMsgQ(currWin, "Command %s requires an argument.\n", cmd->name);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1001 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1002 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1003 break;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1004
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1005 case CMDARG_NONE:
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1006 if (nbuf[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1007 {
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1008 printMsgQ(currWin, "Command %s does not take arguments.\n", cmd->name);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1009 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1010 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1011 break;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1012
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1013 case CMDARG_OPTIONAL:
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1014 break;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1015 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1016
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1017 // Check if there is a handler function
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1018 if (cmd->handler)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1019 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1020 // Internal commands have a handler
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1021 return cmd->handler(conn, nbuf);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1022 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1023 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1024 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1025 // Server-side commands are just pass-through here
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1026 char *tmp = nn_dblencode_str(buf);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1027 BOOL result;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1028 if (tmp == NULL) return -2;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1029 result = nn_conn_send_msg(conn, optUserNameEnc, tmp);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1030 th_free(tmp);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1031 return result ? 0 : -1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1032 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1033 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1034 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1035
444
29a341fa80a1 Fix cosmetic output issue.
Matti Hamalainen <ccr@tnsp.org>
parents: 443
diff changeset
1036 printMsgQ(currWin, "Unknown command: %s\n", buf);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1037 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1038 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1039
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1040
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1041 static nn_usercmd_t *nn_usercmd_match_do(qlist_t *list, const char *pattern, size_t len)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1042 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1043 qlist_t *node;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1044 for (node = list; node != NULL; node = node->next)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1045 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1046 nn_usercmd_t *cmd = node->data;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1047 if (len <= strlen(cmd->name) && th_strncasecmp(cmd->name, pattern, len) == 0)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1048 return cmd;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1049 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1050 return NULL;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1051 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1052
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1053
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1054 nn_usercmd_t *nn_usercmd_match(qlist_t *list, const char *pattern, const char *current, BOOL again)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1055 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1056 nn_usercmd_t *curr;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1057 size_t len;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1058
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1059 if (list == NULL || pattern == NULL) return NULL;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1060
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1061 len = strlen(pattern);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1062
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1063 if (current != NULL)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1064 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1065 qlist_t *node;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1066 for (node = list; node != NULL; node = node->next)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1067 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1068 curr = node->data;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1069 if (th_strcasecmp(curr->name, current) == 0)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1070 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1071 if (again)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1072 return curr;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1073
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1074 if ((curr = nn_usercmd_match_do(node->next, pattern, len)) != NULL)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1075 return curr;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1076 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1077 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1078 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1079
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1080 if ((curr = nn_usercmd_match_do(list, pattern, len)) != NULL)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1081 return curr;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1082
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1083 return NULL;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1084 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1085
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1086
410
7ea78f4a4d23 Rename input handling main function.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
1087 int nn_handle_input(nn_conn_t *conn, char *buf, size_t bufLen)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1088 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1089 BOOL result;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1090 char *tmp;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1091
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1092 // Trim right side
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1093 while (bufLen > 0 && th_isspace(buf[bufLen - 1]))
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1094 buf[--bufLen] = 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1095
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1096 if (buf[0] == 0)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1097 return 1;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
1098
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1099 // Decode completed usernames
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1100 nn_username_decode(buf);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1101
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1102 // Check for commands
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1103 if (buf[0] == '/')
426
c2e4d7b4e0ae Fix server-side commands.
Matti Hamalainen <ccr@tnsp.org>
parents: 425
diff changeset
1104 return nn_handle_command(conn, buf);
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1105
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1106 // If current window is not the main room window, send private
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
1107 if (currWin != nnwin_main_window())
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1108 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1109 if (currWin->id != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1110 {
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
1111 char *msg = th_strdup_printf("/prv -to %s -msg %s", currWin->id, buf);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1112 if (msg == NULL) return -3;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1113 tmp = nn_dblencode_str(msg);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1114 if (tmp == NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1115 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1116 th_free(msg);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1117 return -2;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1118 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1119 result = nn_conn_send_msg(conn, optUserNameEnc, tmp);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1120 th_free(tmp);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1121 th_free(msg);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1122 return result ? 0 : -1;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1123 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1124 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1125 {
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1126 printMsgQ(NULL, "No target set, exiting prv mode.\n");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1127 return 1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1128 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1129 }
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1130
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1131 // Send double-encoded message
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1132 tmp = nn_dblencode_str(buf);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1133 if (tmp == NULL) return -2;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1134 result = nn_conn_send_msg(conn, optUserNameEnc, tmp);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1135 th_free(tmp);
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1136 return result ? 0 : -1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1137 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1138
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1139
449
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
1140 static void nn_tabcomplete_replace(nn_editbuf_t *buf, size_t *pi, const size_t startPos, const size_t endPos, char *c)
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1141 {
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1142 size_t i;
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1143
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1144 for (i = startPos; i <= endPos; i++)
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1145 nn_editbuf_delete(buf, startPos);
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1146
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1147 for (i = startPos; *c; i++, c++)
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1148 nn_editbuf_insert(buf, i, *c);
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1149
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1150 *pi = i;
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1151 }
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1152
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1153
449
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
1154 static void nn_tabcomplete_finish(nn_editbuf_t *buf, char **previous, const size_t startPos, const char *name)
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1155 {
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1156 nn_editbuf_setpos(buf, startPos + 1 + strlen(name));
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1157 th_free(*previous);
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1158 *previous = th_strdup(name);
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1159 }
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1160
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1161
449
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
1162 BOOL nn_tabcomplete_buffer(nn_editbuf_t *buf)
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1163 {
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1164 static char *previous = NULL, *pattern = NULL;
451
733396469e5d Cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 450
diff changeset
1165 char *str = buf->data;
429
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1166 BOOL again = FALSE, hasSeparator = FALSE,
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1167 hasSpace, newPattern = FALSE, isCommand;
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
1168 size_t endPos, startPos = buf->pos;
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1169
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1170 // previous word
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1171 if (startPos >= 2 && str[startPos - 1] == ' ' && str[startPos - 2] != ' ')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1172 {
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1173 startPos -= 2;
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1174 endPos = startPos;
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1175 while (startPos > 0 && str[startPos - 1] != ' ') startPos--;
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1176 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1177 else
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1178 // middle of a word, new pattern
404
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1179 if (startPos < buf->len && str[startPos] != ' ')
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1180 {
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1181 endPos = startPos;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1182 while (startPos > 0 && str[startPos - 1] != ' ') startPos--;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1183 while (endPos < buf->len - 1 && str[endPos + 1] != ' ') endPos++;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1184 newPattern = TRUE;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1185 }
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1186 else
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1187 // previous word, new pattern
404
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1188 if (startPos >= 1 && str[startPos - 1] != ' ')
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1189 {
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1190 startPos -= 1;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1191 endPos = startPos;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1192 while (startPos > 0 && str[startPos - 1] != ' ') startPos--;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1193 newPattern = TRUE;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1194 }
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1195 else
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1196 return FALSE;
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1197
429
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1198 // Check if this is a command completion
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1199 isCommand = (str[0] == '/' && startPos == 0);
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1200
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1201 if (!isCommand && str[endPos] == optNickSep)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1202 {
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1203 endPos--;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1204 if (startPos > 0)
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1205 return FALSE;
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1206 hasSeparator = TRUE;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1207 }
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1208
451
733396469e5d Cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 450
diff changeset
1209 hasSpace = (buf->pos > 0 && str[buf->pos - 1] == ' ') ||
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1210 (buf->pos <= buf->len && str[buf->pos] == ' ');
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1211
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1212 if (newPattern)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1213 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1214 // Get pattern, check if it matches previous pattern and set 'again' flag
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1215 char *npattern = nn_editbuf_get_string(buf, startPos, endPos);
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
1216 if (pattern && npattern && th_strcasecmp(npattern, pattern) == 0)
116
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1217 again = TRUE;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1218
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1219 th_free(pattern);
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1220 pattern = npattern;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1221
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1222 if (!again)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1223 {
116
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1224 th_free(previous);
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1225 previous = NULL;
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1226 }
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1227 }
116
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1228
429
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1229 if (!pattern)
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1230 return FALSE;
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1231
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1232 if (isCommand)
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1233 {
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1234 nn_usercmd_t *cmd = nn_usercmd_match(userCmds, pattern, previous, again);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1235 if (cmd)
429
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1236 {
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1237 size_t i;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1238 nn_tabcomplete_replace(buf, &i, startPos, endPos, cmd->name);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1239
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1240 if (!hasSpace)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1241 nn_editbuf_insert(buf, i++, ' ');
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1242
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1243 nn_tabcomplete_finish(buf, &previous, startPos, cmd->name);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1244 return TRUE;
429
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1245 }
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1246 }
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1247 else
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1248 {
446
3396acd40147 Rename and remove some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 445
diff changeset
1249 nn_user_t *user = nn_userhash_match(nnUsers, pattern, previous, again);
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1250
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1251 if (user)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1252 {
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
1253 size_t i;
449
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
1254 nn_tabcomplete_replace(buf, &i, startPos, endPos, user->name);
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1255
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1256 if (!hasSeparator && startPos == 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1257 {
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1258 nn_editbuf_insert(buf, i++, optNickSep);
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1259 startPos++;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1260 }
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1261 else
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1262 if (hasSeparator)
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1263 startPos++;
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1264
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1265 if (!hasSpace)
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1266 nn_editbuf_insert(buf, i++, ' ');
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1267
449
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
1268 nn_tabcomplete_finish(buf, &previous, startPos, user->name);
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1269 return TRUE;
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1270 }
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1271 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1272
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1273 return FALSE;
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1274 }
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1275
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1276
511
291e3caa91a0 Move logParseFilename() to nn_log_parse_filename() under util.c and rename logFileOpen() and logFileClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 509
diff changeset
1277 BOOL nn_log_file_open(void)
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1278 {
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1279 char *filename;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1280
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1281 if (optLogFilename == NULL || !optLogEnable)
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1282 return FALSE;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1283
511
291e3caa91a0 Move logParseFilename() to nn_log_parse_filename() under util.c and rename logFileOpen() and logFileClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 509
diff changeset
1284 filename = nn_log_parse_filename(optLogFilename, optPort);
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1285
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1286 if ((optLogFile = fopen(filename, "a")) == NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1287 {
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1288 errorMsg("Could not open logfile '%s' for appending!\n", filename);
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1289 th_free(filename);
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1290 return FALSE;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1291 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1292
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1293 th_free(filename);
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1294
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1295 return TRUE;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1296 }
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1297
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1298
511
291e3caa91a0 Move logParseFilename() to nn_log_parse_filename() under util.c and rename logFileOpen() and logFileClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 509
diff changeset
1299 void nn_log_file_close(void)
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1300 {
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1301 if (optLogFile)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1302 {
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1303 fclose(optLogFile);
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1304 optLogFile = NULL;
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1305 }
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1306 }
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1307
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1308
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1309 BOOL processUserInput(int c, nn_editbuf_t *editBuf, nn_editstate_t *editState)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1310 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1311 // Chat window switching via Meta/Esc-[1..9]
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1312 if (c >= 0x5001 && c <= 0x5009)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1313 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1314 nn_window_t *win = nnwin_get(c - 0x5000);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1315 if (win != NULL)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1316 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1317 currWin = win;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1318 editState->update = TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1319 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1320 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1321 else
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1322 switch (c)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1323 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1324 case KEY_ENTER:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1325 // Call the user input handler
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1326 if (editBuf->len > 0)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1327 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1328 int result;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1329
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1330 if (editHistMax > 0)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1331 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1332 nn_editbuf_free(editHistBuf[SET_MAX_HISTORY+1]);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1333 editHistBuf[SET_MAX_HISTORY+1] = NULL;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1334 memmove(&editHistBuf[2], &editHistBuf[1],
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1335 editHistMax * sizeof(editHistBuf[0]));
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1336 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1337
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1338 editHistPos = 0;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1339 editHistBuf[1] = nn_editbuf_copy(editBuf);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1340 if (editHistMax < SET_MAX_HISTORY)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1341 editHistMax++;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1342
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1343 result = nn_handle_input(editState->conn, editBuf->data, editBuf->len);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1344
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1345 nn_editbuf_clear(editBuf);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1346
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1347 if (result < 0)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1348 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1349 errorMsg("Fatal error handling user input: %s\n", editBuf->data);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1350 editState->isError = TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1351 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1352 else
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1353 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1354 // Update time value of last sent message for unidle timeouts
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1355 editState->prevKeepAlive = time(NULL);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1356 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1357 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1358 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1359
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1360 case KEY_NPAGE:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1361 case KEY_PPAGE:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1362 // Page Up / Page Down
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1363 if (currWin != NULL)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1364 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1365 int oldPos = currWin->pos, page = (scrHeight - 4) / 3;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1366
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1367 currWin->pos += (c == KEY_NPAGE) ? - page : page;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1368
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1369 if (currWin->pos >= currWin->data->n - page)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1370 currWin->pos = currWin->data->n - page;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1371 if (currWin->pos < 0)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1372 currWin->pos = 0;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1373
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1374 if (oldPos != currWin->pos)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1375 editState->update = TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1376 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1377 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1378
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1379 case KEY_UP: // Backwards in input history
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1380 if (editHistPos == 0)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1381 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1382 nn_editbuf_free(editHistBuf[0]);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1383 editHistBuf[0] = nn_editbuf_copy(editBuf);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1384 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1385 if (editHistPos < editHistMax)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1386 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1387 editHistPos++;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1388 nn_editbuf_free(editBuf);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1389 editBuf = nn_editbuf_copy(editHistBuf[editHistPos]);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1390 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1391 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1392
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1393 case KEY_DOWN: // Forwards in input history
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1394 if (editHistPos > 0)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1395 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1396 editHistPos--;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1397 nn_editbuf_free(editBuf);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1398 editBuf = nn_editbuf_copy(editHistBuf[editHistPos]);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1399 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1400 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1401
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1402 case KEY_F(5): // F5 = Ignore mode
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1403 setIgnoreMode = setIgnoreMode;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1404 printMsgQ(currWin, "Ignore mode = %s\n", setIgnoreMode ? "ON" : "OFF");
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1405 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1406
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1407 case 0x03: // ^C = quit
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1408 case KEY_F(9): // F9 = Quit
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1409 printMsg(currWin, "Quitting per user request (%d/0x%x).\n", c, c);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1410 editState->exitProg = TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1411 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1412
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1413 case 0x09: // Tab = complete username or command
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1414 nn_tabcomplete_buffer(editBuf);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1415 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1416
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1417 default:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1418 return FALSE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1419 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1420
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1421 return TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1422 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1423
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1424
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1425 BOOL processUserPrompt(int c, nn_editbuf_t *editBuf, nn_editstate_t *editState)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1426 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1427 (void) editBuf;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1428
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1429 switch (c)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1430 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1431 case KEY_ENTER:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1432 editState->done = TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1433 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1434
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1435 default:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1436 return FALSE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1437 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1438
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1439 return TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1440 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1441
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1442
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1443 void updateUserPrompt(nn_editbuf_t *editBuf, nn_editstate_t *editState)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1444 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1445 nnwin_update(editState->update, editState->mask, editBuf, optUserName, optUserColor);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1446 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1447
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1448
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1449 int main(int argc, char *argv[])
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1450 {
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1451 char *tmpStr;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1452 int index, updateCount = 0;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1453 BOOL argsOK, colorSet = FALSE;
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1454 nn_conn_t *conn = NULL;
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1455 nn_editbuf_t *editBuf = nn_editbuf_new(NN_TMPBUF_SIZE);
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1456 nn_editstate_t editState;
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1457 cfgitem_t *tmpcfg;
432
966c521e0954 Rename user home directory variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
1458 char *setHomeDir = NULL;
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1459
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1460 memset(editHistBuf, 0, sizeof(editHistBuf));
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1461 memset(&editState, 0, sizeof(editState));
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1462 editState.insertMode = TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1463 editState.debugMsg = debugMsg;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1464
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1465 // Initialize
195
829457be9eea Build system changes to support (in a big kludgy manner) icon and version information resource generation for Win32 binaries.
Matti Hamalainen <ccr@tnsp.org>
parents: 191
diff changeset
1466 th_init("NNChat", "Newbie Nudes chat client", NN_VERSION,
399
06a1c1db5bbb Update copyright.
Matti Hamalainen <ccr@tnsp.org>
parents: 398
diff changeset
1467 "Written and designed by Anonymous Finnish Guy (C) 2008-2012",
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1468 "This software is freeware, use and distribute as you wish.");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1469 th_verbosityLevel = 0;
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1470
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1471 // Read configuration file
148
9da39d090ef1 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 147
diff changeset
1472 tmpcfg = NULL;
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1473 th_cfg_add_comment(&tmpcfg, "General settings");
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1474 th_cfg_add_string(&tmpcfg, "username", &optUserName, NULL);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1475 th_cfg_add_string(&tmpcfg, "password", &optPassword, NULL);
409
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1476
150
db5e7a1f1eb3 Add comment in config file about format of user color setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 149
diff changeset
1477 th_cfg_add_comment(&tmpcfg, "Default color as a hex-triplet");
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1478 th_cfg_add_hexvalue(&tmpcfg, "color", &optUserColor, optUserColor);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1479
149
a4d6707161a7 Add config file option for default setting of ignore mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
1480 th_cfg_add_comment(&tmpcfg, "Default setting of ignore mode");
151
303db1141147 Oops, should be th_cfg_add_bool() instead of th_cfg_add_boolean()
Matti Hamalainen <ccr@tnsp.org>
parents: 150
diff changeset
1481 th_cfg_add_bool(&tmpcfg, "ignore", &setIgnoreMode, setIgnoreMode);
149
a4d6707161a7 Add config file option for default setting of ignore mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
1482 th_cfg_add_comment(&tmpcfg, "People to be ignored when ignore mode is enabled");
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
1483 th_cfg_add_string_list(&tmpcfg, "ignore_list", &setIgnoreList);
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1484
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1485 th_cfg_add_comment(&tmpcfg, "Random messages for idle timeout protection. If none are set, plain '.' is used.");
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1486 th_cfg_add_string_list(&tmpcfg, "idle_messages", &setIdleMessages);
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1487
409
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1488 th_cfg_add_comment(&tmpcfg, "Character used as nickname auto-completion separator (default is ':')");
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1489 th_cfg_add_string(&tmpcfg, "nick_separator", &optNickSepStr, NULL);
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1490
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1491 th_cfg_add_section(&cfg, "general", tmpcfg);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1492
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1493
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1494 tmpcfg = NULL;
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1495 th_cfg_add_comment(&tmpcfg, "Chat server hostname or IP address");
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1496 th_cfg_add_string(&tmpcfg, "host", &optServer, optServer);
321
384d508d1df3 Update configuration file comment about room ports.
Matti Hamalainen <ccr@tnsp.org>
parents: 320
diff changeset
1497 th_cfg_add_comment(&tmpcfg, "Default port to connect to (8005 = main room, 8003 = passion pit)");
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1498 th_cfg_add_int(&tmpcfg, "port", &optPort, optPort);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1499 th_cfg_add_section(&cfg, "server", tmpcfg);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1500
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1501 tmpcfg = NULL;
369
461a6befb7c3 Oops, the proxy type was accidentally called "port" in the configuration file, as was the actual port setting. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 360
diff changeset
1502 th_cfg_add_comment(&tmpcfg, "Proxy server type (0 = none, 1 = SOCKS 4, 2 = SOCKS 4a)");
461a6befb7c3 Oops, the proxy type was accidentally called "port" in the configuration file, as was the actual port setting. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 360
diff changeset
1503 th_cfg_add_int(&tmpcfg, "type", &optProxyType, optProxyType);
353
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1504 th_cfg_add_comment(&tmpcfg, "Proxy server host name");
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1505 th_cfg_add_string(&tmpcfg, "host", &optProxyServer, optProxyServer);
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1506 th_cfg_add_comment(&tmpcfg, "Proxy port, 1080 is the standard SOCKS port");
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1507 th_cfg_add_int(&tmpcfg, "port", &optProxyPort, optProxyPort);
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1508 th_cfg_add_section(&cfg, "proxy", tmpcfg);
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1509
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1510 tmpcfg = NULL;
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1511 th_cfg_add_comment(&tmpcfg, "Enable logging");
247
fce4e2e31d69 Add the config section ...
Matti Hamalainen <ccr@tnsp.org>
parents: 242
diff changeset
1512 th_cfg_add_bool(&tmpcfg, "enable", &optLogEnable, optLogEnable);
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1513 th_cfg_add_comment(&tmpcfg, "Log filename format");
247
fce4e2e31d69 Add the config section ...
Matti Hamalainen <ccr@tnsp.org>
parents: 242
diff changeset
1514 th_cfg_add_string(&tmpcfg, "filename", &optLogFilename, optLogFilename);
fce4e2e31d69 Add the config section ...
Matti Hamalainen <ccr@tnsp.org>
parents: 242
diff changeset
1515 th_cfg_add_section(&cfg, "logging", tmpcfg);
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1516
512
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1517 // Get home directory path
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1518 #ifdef __WIN32
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1519 {
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1520 char tmpPath[MAX_PATH];
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1521 if (SHGetFolderPath(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, tmpPath) == S_OK)
432
966c521e0954 Rename user home directory variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
1522 setHomeDir = th_strdup(tmpPath);
197
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
1523
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1524 CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1525 }
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1526 #else
512
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1527 {
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1528 char *xdgConfigDir = getenv("XDG_CONFIG_HOME"),
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1529 *userHomeDir = getenv("HOME");
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1530 #ifdef USE_XDG
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1531 if (xdgConfigDir != NULL)
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1532 setHomeDir = th_strdup(xdgConfigDir);
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1533 else
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1534 setHomeDir = th_strdup_printf("%s/.config", userHomeDir);
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1535 #else
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1536 setHomeDir = th_strdup(userHomeDir);
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1537 #endif
93c8ba1ef55f Support XDG specification.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1538 }
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1539 #endif
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1540
432
966c521e0954 Rename user home directory variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
1541 if (setHomeDir != NULL)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1542 {
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1543 FILE *cfgfile;
432
966c521e0954 Rename user home directory variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
1544 setConfigFile = th_strdup_printf("%s" SET_DIR_SEPARATOR "%s", setHomeDir, SET_CONFIG_FILE);
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1545
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1546 THMSG(0, "Reading configuration from '%s'.\n", setConfigFile);
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1547
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1548 if ((cfgfile = fopen(setConfigFile, "r")) != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1549 {
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1550 th_cfg_read(cfgfile, setConfigFile, cfg);
315
864e6e52ed69 Fix a filehandle leak when reading in configuration file.
Matti Hamalainen <ccr@tnsp.org>
parents: 314
diff changeset
1551 fclose(cfgfile);
864e6e52ed69 Fix a filehandle leak when reading in configuration file.
Matti Hamalainen <ccr@tnsp.org>
parents: 314
diff changeset
1552 }
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1553 }
196
edd5ce3e5399 Add simplistic username/password requester if none given on commandline or config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
1554
409
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1555 if (optNickSepStr)
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1556 optNickSep = optNickSepStr[0];
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1557 else
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1558 optNickSep = SET_NICK_SEPARATOR;
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1559
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1560
137
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1561 setBrowser = getenv("BROWSER");
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1562 if (setBrowser == NULL)
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1563 setBrowser = "firefox";
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1564
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1565 // Parse command line arguments
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1566 argsOK = th_args_process(argc, argv, optList, optListN,
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1567 argHandleOpt, argHandleFile, FALSE);
26
b84fc46c6035 Improved color hex triplet parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
1568
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1569 if (optUserNameCmd != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1570 {
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1571 THMSG(1, "Username set on commandline.\n");
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1572 optUserName = optUserNameCmd;
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1573 optPassword = optPasswordCmd;
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1574 }
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1575
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1576 if (!argsOK)
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1577 return -2;
64
6a3a917303e4 Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
1578
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1579 // Allocate userhash
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1580 if ((nnUsers = nn_userhash_new()) == NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1581 {
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1582 THERR("Could not allocate userhash. Fatal error.\n");
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1583 return -105;
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1584 }
64
6a3a917303e4 Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
1585
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1586 // If no idle messages are set, add default
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1587 if (setIdleMessages == NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1588 {
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1589 th_llist_append(&setIdleMessages, th_strdup("."));
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1590 }
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1591
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1592 // Open logfile
511
291e3caa91a0 Move logParseFilename() to nn_log_parse_filename() under util.c and rename logFileOpen() and logFileClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 509
diff changeset
1593 nn_log_file_open();
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1594
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1595 // Initialize network
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1596 if (!nn_network_init())
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1597 {
91
acfc4b4bc180 Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents: 90
diff changeset
1598 THERR("Could not initialize network subsystem.\n");
acfc4b4bc180 Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents: 90
diff changeset
1599 goto err_exit;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1600 }
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
1601
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
1602 // Initialize curses windowing
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
1603 if (!optDaemon && !nnwin_init(SET_DELAY))
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
1604 goto err_exit;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1605
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
1606 if (cursesInit)
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 497
diff changeset
1607 {
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1608 printMsg(NULL, "%s v%s - %s\n", th_prog_name, th_prog_version, th_prog_fullname);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1609 printMsg(NULL, "%s\n", th_prog_author);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1610 printMsg(NULL, "%s\n", th_prog_license);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1611
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1612 nnwin_update(TRUE, FALSE, NULL, optUserName, optUserColor);
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1613
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1614 // Check if we have username and password
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1615 if (optUserName == NULL || optPassword == NULL)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1616 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1617 printMsg(NULL, "Please enter your NN login credentials.\n");
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1618 printMsg(NULL, "You can avoid doing this every time by issuing '/save' after logging in.\n");
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1619
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1620 printMsg(NULL, "Enter your NN username ...\n");
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1621 optUserName = nnwin_prompt_requester(FALSE, &editState, processUserPrompt, updateUserPrompt);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1622
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1623 editState.mask = TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1624 printMsg(NULL, "Enter your NN password ...\n");
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1625 optPassword = nnwin_prompt_requester(TRUE, &editState, processUserPrompt, updateUserPrompt);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1626 editState.mask = FALSE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1627 }
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1628 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1629
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1630 if (optUserName == NULL || optPassword == NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1631 {
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1632 errorMsg("Username and/or password not specified.\n");
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1633 goto err_exit;
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1634 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1635
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1636 // Create a connection
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1637 conn = nn_conn_new(errorFunc, messageFunc);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1638 if (conn == NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1639 {
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1640 errorMsg("Could not create connection structure.\n");
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1641 goto err_exit;
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1642 }
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1643
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1644 editState.conn = conn;
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1645
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1646 // Are we using a proxy?
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1647 if (optProxyType != NN_PROXY_NONE && optProxyServer != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1648 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1649 if (nn_conn_set_proxy(conn, optProxyType, optProxyPort, optProxyServer) != 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1650 {
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1651 errorMsg("Error setting proxy information.\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: 347
diff changeset
1652 goto err_exit;
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: 347
diff changeset
1653 }
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: 347
diff changeset
1654 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1655
456
bb65460c7aa2 Clean up some initialization messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 451
diff changeset
1656 // Okay, try to resolve the hostname
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1657 conn->host = th_strdup(optServer);
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1658 conn->hst = nn_resolve_host(conn, optServer);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1659 if (conn->hst == NULL)
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1660 goto err_exit;
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1661
329
c0988ab45afd #ifdef out the policy probe.
Matti Hamalainen <ccr@tnsp.org>
parents: 328
diff changeset
1662 #ifdef FINAL_BUILD
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1663 /* To emulate the official client, we first make a request for
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1664 * policy file, even though we don't use it for anything...
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1665 */
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1666 if (nn_conn_open(conn, 843, NULL) != 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1667 {
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1668 errorMsg("Policy file request connection setup failed!\n");
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1669 goto err_exit;
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1670 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1671
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1672 tmpStr = "<policy-file-request/>";
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1673 if (nn_conn_send_buf(conn, tmpStr, strlen(tmpStr) + 1) == FALSE)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1674 {
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1675 errorMsg("Failed to send policy file request.\n");
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1676 goto err_exit;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1677 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1678 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1679 {
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1680 int cres = nn_conn_pull(conn);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1681 if (cres == 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1682 {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1683 printMsg(currWin, "Probe got: %s\n", conn->buf);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1684 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1685 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1686 {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1687 printMsg(currWin, "Could not get policy probe.\n");
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1688 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1689 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1690 nn_conn_close(conn);
329
c0988ab45afd #ifdef out the policy probe.
Matti Hamalainen <ccr@tnsp.org>
parents: 328
diff changeset
1691 #endif
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1692
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1693 // Okay, now do the proper connection ...
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1694 if (nn_conn_open(conn, optPort, NULL) != 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1695 {
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1696 errorMsg("Main connection setup failed!\n");
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1697 goto err_exit;
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1698 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1699
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1700 // Send login command
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1701 optUserNameEnc = nn_dblencode_str(optUserName);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1702 tmpStr = nn_dblencode_str(optSite);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1703 nn_conn_send_msg_v(conn, optUserNameEnc, "%%2Flogin%%20%%2Dsite%%20%s%%20%%2Dpassword%%20%s", tmpStr, optPassword);
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1704 th_free(tmpStr);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1705
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1706 // Initialize user commands
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1707 nn_usercmd_init();
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1708
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1709 // Initialize random numbers
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1710 editState.prevKeepAlive = time(NULL);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1711 srandom((int) editState.prevKeepAlive);
100
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
1712
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1713 // Enter mainloop
360
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1714 nn_conn_reset(conn);
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1715 while (!editState.isError && !editState.exitProg)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1716 {
445
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1717 int retries = 3, cres;
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1718
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1719 packet_retry:
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1720 cres = nn_conn_pull(conn);
439
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1721 if (cres == 0)
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1722 {
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1723 while (conn->ptr < conn->in_ptr &&
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1724 *(conn->in_ptr - 1) == 0 &&
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1725 retries > 0 && !editState.isError)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1726 {
439
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1727 // nn_conn_dump_buffer(stderr, conn);
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
1728 int result = nn_parse_protocol(conn);
436
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1729 if (result == 0)
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1730 {
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1731 nn_conn_buf_skip(conn, 1);
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1732 }
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1733 else
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1734 if (result > 0)
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1735 {
445
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1736 // Retry if possible
439
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1737 if (--retries > 0)
445
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1738 goto packet_retry;
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1739
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1740 // Couldn't handle the message for some reason
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1741 printMsg(currWin, "Could not handle: %s\n", conn->ptr);
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1742 nn_conn_buf_skip(conn, strlen(conn->ptr) + 1);
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1743 }
436
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1744 else
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1745 editState.isError = TRUE;
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
1746 }
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
1747 }
439
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1748 else
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1749 if (cres < 0 || !nn_conn_check(conn))
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1750 editState.isError = TRUE;
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1751
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1752 // Handle user input
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1753 if (cursesInit)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1754 {
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1755 nnwin_input_process(editBuf, &editState, processUserInput);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1756 nnwin_update(editState.update, editState.mask, editBuf, optUserName, optUserColor);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1757 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1758
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1759 if (++updateCount > 10)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1760 {
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1761 time_t tmpTime = time(NULL);
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1762 if (tmpTime - editState.prevKeepAlive > SET_KEEPALIVE)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1763 {
435
708a15fdf791 Fix a type / conversion related warning.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
1764 size_t n = ((size_t) random()) % th_llist_length(setIdleMessages);
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1765 qlist_t *node = th_llist_get_nth(setIdleMessages, n);
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1766 nn_conn_send_msg(conn, optUserNameEnc, node->data);
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1767 editState.prevKeepAlive = tmpTime;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1768 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1769
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1770 if (!colorSet)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1771 {
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1772 colorSet = TRUE;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1773 nn_conn_send_msg_v(conn, optUserNameEnc, "%%2FSetFontColor%%20%%2Dcolor%%20%06X", optUserColor);
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1774 }
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1775
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1776 if (cursesInit)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1777 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1778 nnwin_update(FALSE, editState.mask, editBuf, optUserName, optUserColor);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1779 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1780
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1781 updateCount = 0;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1782 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1783
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1784 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1785
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1786 // Shutdown
13
86fe5f0d1a85 Cleanups; Added probing connection (requesting some policy crap) to emulate the official client.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
1787 err_exit:
316
1065115665bd Plug some more minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 315
diff changeset
1788 th_cfg_free(cfg);
432
966c521e0954 Rename user home directory variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
1789 th_free(setHomeDir);
316
1065115665bd Plug some more minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 315
diff changeset
1790 th_llist_free_func(setIdleMessages, th_free);
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1791 nn_userhash_free(nnUsers);
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1792 nn_editbuf_free(editBuf);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1793
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents: 464
diff changeset
1794 for (index = 0; index <= SET_MAX_HISTORY; index++)
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 512
diff changeset
1795 nn_editbuf_free(editHistBuf[index]);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1796
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1797 #ifdef __WIN32
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1798 if (errorMessages)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1799 {
505
12939e665e49 Fix Windows build.
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
1800 char *tmp = nnwin_prompt_requester("Press enter to quit.\n", FALSE);
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1801 th_free(tmp);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1802 }
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1803 #endif
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1804
489
ba48840b8525 Move network initialization/shutdown flag checking to network module.
Matti Hamalainen <ccr@tnsp.org>
parents: 486
diff changeset
1805 nnwin_shutdown();
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1806
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1807 #ifndef __WIN32
223
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
1808 if (errorMessages)
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
1809 THERR("%s", errorMessages);
222
a1fefbce0b7a Add a simple 'press enter to continue' for Windows port, when an error occurs so the user can see it before the application closes.
Matti Hamalainen <ccr@tnsp.org>
parents: 221
diff changeset
1810 #endif
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1811
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1812 th_free(optUserNameEnc);
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1813 nn_conn_close(conn);
489
ba48840b8525 Move network initialization/shutdown flag checking to network module.
Matti Hamalainen <ccr@tnsp.org>
parents: 486
diff changeset
1814 nn_network_close();
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
1815
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1816 THMSG(1, "Connection terminated.\n");
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1817
511
291e3caa91a0 Move logParseFilename() to nn_log_parse_filename() under util.c and rename logFileOpen() and logFileClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 509
diff changeset
1818 nn_log_file_close();
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1819
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1820 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1821 }