annotate mcabber/src/main.c @ 1461:8fa24a6d1a93

Improve Remote Controlling Clients The XEP recommends adding the node to the IQ response. Some clients seem not to understand the answer when it is omitted. Problem reported by Rhaamo and js (thanks to js for spotting the node issue!).
author Mikael Berthe <mikael@lilotux.net>
date Sat, 12 Apr 2008 13:35:03 +0200
parents 6b98dc22946d
children 35020a2ed115
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
307
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
1 /*
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
2 * main.c
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 389
diff changeset
3 *
1414
366ef500c522 Update copyrights
Mikael Berthe <mikael@lilotux.net>
parents: 1370
diff changeset
4 * Copyright (C) 2005-2008 Mikael Berthe <mikael@lilotux.net>
307
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
5 * Parts of this file come from Cabber <cabber@ajmacias.com>
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
6 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
7 * This program is free software; you can redistribute it and/or modify
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
8 * it under the terms of the GNU General Public License as published by
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or (at
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
10 * your option) any later version.
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
11 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
12 * This program is distributed in the hope that it will be useful, but
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
15 * General Public License for more details.
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
16 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
17 * You should have received a copy of the GNU General Public License
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
18 * along with this program; if not, write to the Free Software
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
20 * USA
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
21 */
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
22
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
23 #include <stdio.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
24 #include <stdlib.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
25 #include <unistd.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
26 #include <string.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
27 #include <signal.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
28 #include <termios.h>
28
0cd8025eebee [/trunk] Changeset 44 by mikael
mikael
parents: 27
diff changeset
29 #include <getopt.h>
163
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
30 #include <sys/types.h>
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
31 #include <sys/wait.h>
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 165
diff changeset
32 #include <glib.h>
404
fb2325d24d13 Drop harddefines.h
Mikael Berthe <mikael@lilotux.net>
parents: 403
diff changeset
33 #include <config.h>
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
34
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 77
diff changeset
35 #include "jabglue.h"
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
36 #include "screen.h"
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
37 #include "settings.h"
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 96
diff changeset
38 #include "roster.h"
96
8b2703ccc4be [/trunk] Changeset 110 by mikael
mikael
parents: 88
diff changeset
39 #include "commands.h"
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents: 112
diff changeset
40 #include "histolog.h"
163
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
41 #include "hooks.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 77
diff changeset
42 #include "utils.h"
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
43 #include "pgp.h"
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
44 #include "otr.h"
1448
844410b9b4cc Remove configure option --enable-fifo
Mikael Berthe <mikael@lilotux.net>
parents: 1445
diff changeset
45 #include "fifo.h"
1426
a64778f5f26b Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents: 1425
diff changeset
46
781
d3af6877a7df Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
47 #ifdef ENABLE_HGCSET
d3af6877a7df Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
48 # include "hgcset.h"
d3af6877a7df Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
49 #endif
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
50
801
d8e0a1ce3e8a Define WAIT_ANY if needed.
Soren Andersen <somian@pobox.com>
parents: 789
diff changeset
51 #ifndef WAIT_ANY
1053
1ec7ec9bda60 Cleanup/cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
52 # define WAIT_ANY -1
801
d8e0a1ce3e8a Define WAIT_ANY if needed.
Soren Andersen <somian@pobox.com>
parents: 789
diff changeset
53 #endif
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
54
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
55 static unsigned int terminate_ui;
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
56
789
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
57 static struct termios *backup_termios;
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
58
777
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
59 char *mcabber_version(void)
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
60 {
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
61 char *ver;
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
62 #ifdef HGCSET
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
63 ver = g_strdup_printf("%s (%s)", PACKAGE_VERSION, HGCSET);
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
64 #else
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
65 ver = g_strdup(PACKAGE_VERSION);
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
66 #endif
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
67 return ver;
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
68 }
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
69
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
70 void mcabber_connect(void)
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
71 {
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
72 const char *username, *password, *resource, *servername;
429
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
73 const char *proxy_host;
1421
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
74 char *dynresource = NULL;
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
75 char *fjid;
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
76 int ssl;
938
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
77 int sslverify = -1;
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
78 const char *sslvopt = NULL, *cafile = NULL, *capath = NULL, *ciphers = NULL;
1222
75aee46d3aee Fix a problem with the ssl_ca{file,path} variables expansion
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
79 static char *cafile_xp, *capath_xp;
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
80 unsigned int port;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
81
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
82 servername = settings_opt_get("server");
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
83 username = settings_opt_get("username");
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
84 password = settings_opt_get("password");
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
85 resource = settings_opt_get("resource");
429
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
86 proxy_host = settings_opt_get("proxy_host");
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
87
1222
75aee46d3aee Fix a problem with the ssl_ca{file,path} variables expansion
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
88 // Free the ca*_xp strings if they've already been set.
75aee46d3aee Fix a problem with the ssl_ca{file,path} variables expansion
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
89 g_free(cafile_xp);
75aee46d3aee Fix a problem with the ssl_ca{file,path} variables expansion
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
90 g_free(capath_xp);
75aee46d3aee Fix a problem with the ssl_ca{file,path} variables expansion
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
91 cafile_xp = capath_xp = NULL;
75aee46d3aee Fix a problem with the ssl_ca{file,path} variables expansion
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
92
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
93 if (!servername) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
94 scr_LogPrint(LPRINT_NORMAL, "Server name has not been specified!");
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
95 return;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
96 }
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
97 if (!username) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
98 scr_LogPrint(LPRINT_NORMAL, "User name has not been specified!");
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
99 return;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
100 }
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
101 if (!password) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
102 scr_LogPrint(LPRINT_NORMAL, "Password has not been specified!");
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
103 return;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
104 }
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
105
938
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
106 port = (unsigned int) settings_opt_get_int("port");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
107
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
108 ssl = settings_opt_get_int("ssl");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
109 sslvopt = settings_opt_get("ssl_verify");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
110 if (sslvopt)
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
111 sslverify = settings_opt_get_int("ssl_verify");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
112 cafile = settings_opt_get("ssl_cafile");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
113 capath = settings_opt_get("ssl_capath");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
114 ciphers = settings_opt_get("ssl_ciphers");
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
115
815
04edcb6d7ee3 Warn when ssl is request but not compiled in
Mikael Berthe <mikael@lilotux.net>
parents: 801
diff changeset
116 #if !defined(HAVE_OPENSSL) && !defined(HAVE_GNUTLS)
1370
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
117 if (ssl) {
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
118 scr_LogPrint(LPRINT_LOGNORM, "** Error: SSL is NOT available, "
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
119 "do not set the option 'ssl'.");
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
120 return;
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
121 } else if (sslvopt || cafile || capath || ciphers) {
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
122 scr_LogPrint(LPRINT_LOGNORM, "** Warning: SSL is NOT available, "
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
123 "ignoring ssl-related settings");
938
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
124 ssl = sslverify = 0;
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
125 cafile = capath = ciphers = NULL;
815
04edcb6d7ee3 Warn when ssl is request but not compiled in
Mikael Berthe <mikael@lilotux.net>
parents: 801
diff changeset
126 }
1253
eb38963e082f Add gnutls suppport
Mikael Berthe <mikael@lilotux.net>
parents: 1241
diff changeset
127 #elif defined HAVE_GNUTLS
1445
00503a68f431 Fix false error with GnuTLS
Mikael Berthe <mikael@lilotux.net>
parents: 1437
diff changeset
128 if (ssl && sslverify != 0) {
1370
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
129 scr_LogPrint(LPRINT_LOGNORM, "** Error: SSL certificate checking "
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
130 "is not supported yet with GnuTLS.");
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
131 scr_LogPrint(LPRINT_LOGNORM,
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
132 " * Please set 'ssl_verify' to 0 explicitly!");
6d4770f35ddd Do not connect when the SSL settings can't be used (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
133 return;
1253
eb38963e082f Add gnutls suppport
Mikael Berthe <mikael@lilotux.net>
parents: 1241
diff changeset
134 }
815
04edcb6d7ee3 Warn when ssl is request but not compiled in
Mikael Berthe <mikael@lilotux.net>
parents: 801
diff changeset
135 #endif
1222
75aee46d3aee Fix a problem with the ssl_ca{file,path} variables expansion
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
136 cafile_xp = expand_filename(cafile);
75aee46d3aee Fix a problem with the ssl_ca{file,path} variables expansion
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
137 capath_xp = expand_filename(capath);
1167
9726c78a91f3 Allow '~' (HOME directory) in config options
Mikael Berthe <mikael@lilotux.net>
parents: 1123
diff changeset
138 cw_set_ssl_options(sslverify, cafile_xp, capath_xp, ciphers, servername);
1222
75aee46d3aee Fix a problem with the ssl_ca{file,path} variables expansion
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
139 // We can't free the ca*_xp variables now, because they're not duplicated
75aee46d3aee Fix a problem with the ssl_ca{file,path} variables expansion
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
140 // in cw_set_ssl_options().
815
04edcb6d7ee3 Warn when ssl is request but not compiled in
Mikael Berthe <mikael@lilotux.net>
parents: 801
diff changeset
141
1421
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
142 if (!resource) {
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
143 unsigned int tab[2];
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
144 srand(time(NULL));
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
145 tab[0] = (unsigned int) (0xffff * (rand() / (RAND_MAX + 1.0)));
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
146 tab[1] = (unsigned int) (0xffff * (rand() / (RAND_MAX + 1.0)));
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
147 dynresource = g_strdup_printf("%s.%04x%04x", PACKAGE_NAME,
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
148 tab[0], tab[1]);
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
149 resource = dynresource;
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
150 }
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
151
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
152 /* Connect to server */
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
153 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, "Connecting to server: %s",
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
154 servername);
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
155 if (port)
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
156 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, " using port %d", port);
1421
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
157 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, " resource %s", resource);
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
158
429
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
159 if (proxy_host) {
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
160 int proxy_port = settings_opt_get_int("proxy_port");
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
161 if (proxy_port <= 0 || proxy_port > 65535) {
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
162 scr_LogPrint(LPRINT_LOGNORM, "Invalid proxy port: %d", proxy_port);
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
163 } else {
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
164 const char *proxy_user, *proxy_pass;
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
165 proxy_user = settings_opt_get("proxy_user");
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
166 proxy_pass = settings_opt_get("proxy_pass");
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
167 // Proxy initialization
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
168 cw_setproxy(proxy_host, proxy_port, proxy_user, proxy_pass);
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
169 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, " using proxy %s:%d",
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
170 proxy_host, proxy_port);
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
171 }
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
172 }
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
173
1421
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
174 fjid = compose_jid(username, servername, resource);
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
175 #if defined(HAVE_LIBOTR)
1421
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
176 otr_init(fjid);
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
177 #endif
1421
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
178 jc = jb_connect(fjid, servername, port, ssl, password);
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
179 g_free(fjid);
0b8701386bde Randomize the default resource
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
180 g_free(dynresource);
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
181
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
182 if (!jc)
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
183 scr_LogPrint(LPRINT_LOGNORM, "Error connecting to (%s)", servername);
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
184
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
185 jb_reset_keepalive();
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
186 }
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
187
962
e79af58cd0be mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents: 961
diff changeset
188 static void mcabber_terminate(const char *msg)
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
189 {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
190 jb_disconnect();
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
191 scr_TerminateCurses();
789
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
192
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
193 // Restore term settings, if needed.
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
194 if (backup_termios)
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
195 tcsetattr(fileno(stdin), TCSAFLUSH, backup_termios);
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
196
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
197 if (msg)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
198 fprintf(stderr, "%s\n", msg);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
199 printf("Bye!\n");
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
200 exit(EXIT_SUCCESS);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
201 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
202
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
203 void sig_handler(int signum)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
204 {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
205 if (signum == SIGCHLD) {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
206 int status;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
207 pid_t pid;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
208 do {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
209 pid = waitpid (WAIT_ANY, &status, WNOHANG);
676
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
210 // Check the exit status value if 'eventcmd_checkstatus' is set
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
211 if (settings_opt_get_int("eventcmd_checkstatus")) {
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
212 if (pid > 0) {
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
213 // exit status 2 -> beep
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
214 if (WIFEXITED(status) && WEXITSTATUS(status) == 2) {
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
215 scr_Beep();
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
216 }
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
217 }
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
218 }
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
219 } while (pid > 0);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
220 signal(SIGCHLD, sig_handler);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
221 } else if (signum == SIGTERM) {
962
e79af58cd0be mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents: 961
diff changeset
222 mcabber_terminate("Killed by SIGTERM");
389
6e895f397474 Ncurses changes + Ctrl-C does not send a signal anylore
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
223 } else if (signum == SIGINT) {
962
e79af58cd0be mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents: 961
diff changeset
224 mcabber_terminate("Killed by SIGINT");
1454
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
225 #ifdef USE_SIGWINCH
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
226 } else if (signum == SIGWINCH) {
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
227 ungetch(KEY_RESIZE);
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
228 #endif
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
229 } else {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
230 scr_LogPrint(LPRINT_LOGNORM, "Caught signal: %d", signum);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
231 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
232 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
233
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
234 // ask_password(what)
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
235 // Return the password, or NULL.
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
236 // The string must be freed after use.
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
237 static char *ask_password(const char *what)
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
238 {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
239 char *password, *p;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
240 size_t passsize = 128;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
241 struct termios orig, new;
482
2ea7591584ab Use fgets() instead of getline()
Mikael Berthe <mikael@lilotux.net>
parents: 429
diff changeset
242
2ea7591584ab Use fgets() instead of getline()
Mikael Berthe <mikael@lilotux.net>
parents: 429
diff changeset
243 password = g_new0(char, passsize);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
244
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
245 /* Turn echoing off and fail if we can't. */
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
246 if (tcgetattr(fileno(stdin), &orig) != 0) return NULL;
789
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
247 backup_termios = &orig;
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
248
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
249 new = orig;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
250 new.c_lflag &= ~ECHO;
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
251 if (tcsetattr(fileno(stdin), TCSAFLUSH, &new) != 0) return NULL;
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
252
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
253 /* Read the password. */
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
254 printf("Please enter %s: ", what);
482
2ea7591584ab Use fgets() instead of getline()
Mikael Berthe <mikael@lilotux.net>
parents: 429
diff changeset
255 fgets(password, passsize, stdin);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
256
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
257 /* Restore terminal. */
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
258 tcsetattr(fileno(stdin), TCSAFLUSH, &orig);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
259 printf("\n");
789
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
260 backup_termios = NULL;
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
261
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
262 for (p = (char*)password; *p; p++)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
263 ;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
264 for ( ; p > (char*)password ; p--)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
265 if (*p == '\n' || *p == '\r') *p = 0;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
266
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
267 return password;
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
268 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
269
784
d7f3b58db522 Display hgcset (if defined) at startup
Mikael Berthe <mikael@lilotux.net>
parents: 781
diff changeset
270 static void credits(void)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
271 {
895
b461d7ee6d96 Minor changes
Mikael Berthe <mikael@lilotux.net>
parents: 872
diff changeset
272 const char *v_fmt = "MCabber %s -- Email: mcabber [at] lilotux [dot] net\n";
784
d7f3b58db522 Display hgcset (if defined) at startup
Mikael Berthe <mikael@lilotux.net>
parents: 781
diff changeset
273 char *v = mcabber_version();
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
274 printf(v_fmt, v);
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
275 scr_LogPrint(LPRINT_LOGNORM|LPRINT_NOTUTF8, v_fmt, v);
784
d7f3b58db522 Display hgcset (if defined) at startup
Mikael Berthe <mikael@lilotux.net>
parents: 781
diff changeset
276 g_free(v);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
277 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
278
1257
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
279 static void compile_options(void)
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
280 {
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
281 puts("Installation data directory: " DATA_DIR "\n");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
282 #ifdef HAVE_UNICODE
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
283 puts("Compiled with unicode support.");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
284 #endif
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
285 #ifdef HAVE_OPENSSL
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
286 puts("Compiled with OpenSSL support.");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
287 #elif defined HAVE_GNUTLS
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
288 puts("Compiled with GnuTLS support.");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
289 #endif
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
290 #ifdef HAVE_GPGME
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
291 puts("Compiled with GPG support.");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
292 #endif
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
293 #ifdef HAVE_LIBOTR
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
294 puts("Compiled with OTR support.");
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
295 #endif
1257
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
296 #ifdef WITH_ASPELL
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
297 puts("Compiled with Aspell support.");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
298 #endif
1423
757ebe4df0b9 Replace DEBUG_ENABLE with ENABLE_DEBUG
Mikael Berthe <mikael@lilotux.net>
parents: 1421
diff changeset
299 #ifdef ENABLE_DEBUG
1257
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
300 puts("Compiled with debugging support.");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
301 #endif
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
302 }
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
303
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
304 static void main_init_pgp(void)
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
305 {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
306 #ifdef HAVE_GPGME
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
307 const char *pk, *pp;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
308 char *typed_passwd = NULL;
1238
80008fe2a4f2 Re-enable gpg-agent (revert 591d8b35c881)
Mikael Berthe <mikael@lilotux.net>
parents: 1223
diff changeset
309 char *p;
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
310 bool pgp_invalid = FALSE;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
311 bool pgp_agent;
1313
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
312 int retries;
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
313
1238
80008fe2a4f2 Re-enable gpg-agent (revert 591d8b35c881)
Mikael Berthe <mikael@lilotux.net>
parents: 1223
diff changeset
314 p = getenv("GPG_AGENT_INFO");
80008fe2a4f2 Re-enable gpg-agent (revert 591d8b35c881)
Mikael Berthe <mikael@lilotux.net>
parents: 1223
diff changeset
315 pgp_agent = (p && strchr(p, ':'));
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
316
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
317 pk = settings_opt_get("pgp_private_key");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
318 pp = settings_opt_get("pgp_passphrase");
1313
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
319
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
320 if (settings_opt_get("pgp_passphrase_retries"))
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
321 retries = settings_opt_get_int("pgp_passphrase_retries");
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
322 else
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
323 retries = 2;
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
324
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
325 if (!pk) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
326 scr_LogPrint(LPRINT_LOGNORM, "WARNING: unkown PGP private key");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
327 pgp_invalid = TRUE;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
328 } else if (!(pp || pgp_agent)) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
329 // Request PGP passphrase
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
330 pp = typed_passwd = ask_password("PGP passphrase");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
331 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
332 gpg_init(pk, pp);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
333 // Erase password from the settings array
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
334 if (pp) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
335 memset((char*)pp, 0, strlen(pp));
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
336 if (typed_passwd)
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
337 g_free(typed_passwd);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
338 else
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
339 settings_set(SETTINGS_TYPE_OPTION, "pgp_passphrase", NULL);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
340 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
341 if (!pgp_agent && pk && pp && gpg_test_passphrase()) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
342 // Let's check the pasphrase
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
343 int i;
1313
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
344 for (i = 1; retries < 0 || i <= retries; i++) {
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
345 typed_passwd = ask_password("PGP passphrase"); // Ask again...
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
346 if (typed_passwd) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
347 gpg_set_passphrase(typed_passwd);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
348 memset(typed_passwd, 0, strlen(typed_passwd));
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
349 g_free(typed_passwd);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
350 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
351 if (!gpg_test_passphrase())
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
352 break; // Ok
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
353 }
1313
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
354 if (i > retries)
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
355 pgp_invalid = TRUE;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
356 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
357 if (pgp_invalid)
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
358 scr_LogPrint(LPRINT_LOGNORM, "WARNING: PGP key/pass invalid");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
359 #else /* not HAVE_GPGME */
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
360 scr_LogPrint(LPRINT_LOGNORM, "WARNING: not compiled with PGP support");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
361 #endif /* HAVE_GPGME */
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
362 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
363
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
364 void mcabber_set_terminate_ui(void)
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
365 {
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
366 terminate_ui = TRUE;
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
367 }
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
368
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
369 int main(int argc, char **argv)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
370 {
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 165
diff changeset
371 char *configFile = NULL;
281
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
372 const char *optstring;
177
a51ce78a0e2a [/trunk] Changeset 189 by mikael
mikael
parents: 170
diff changeset
373 int optval, optval2;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
374 unsigned int ping;
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
375 int ret;
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
376 keycode kcode;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
377
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
378 credits();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
379
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
380 signal(SIGTERM, sig_handler);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
381 signal(SIGINT, sig_handler);
163
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
382 signal(SIGCHLD, sig_handler);
1454
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
383 #ifdef USE_SIGWINCH
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
384 signal(SIGWINCH, sig_handler);
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
385 #endif
413
f7e4b0424081 Ignore SIGPIPE
Mikael Berthe <mikael@lilotux.net>
parents: 404
diff changeset
386 signal(SIGPIPE, SIG_IGN);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
387
77
32f54ad6d729 [/trunk] Changeset 91 by mikael
mikael
parents: 70
diff changeset
388 /* Parse command line options */
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
389 while (1) {
1259
c5c09f8f60b0 Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents: 1257
diff changeset
390 int c = getopt(argc, argv, "hVf:");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
391 if (c == -1) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
392 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
393 } else
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
394 switch (c) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
395 case 'h':
1256
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
396 case '?':
1259
c5c09f8f60b0 Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents: 1257
diff changeset
397 printf("Usage: %s [-h|-V|-f mcabberrc_file]\n\n", argv[0]);
1256
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
398 return (c == 'h' ? 0 : -1);
1259
c5c09f8f60b0 Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents: 1257
diff changeset
399 case 'V':
1257
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
400 compile_options();
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
401 return 0;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
402 case 'f':
1241
3a4018f18bdf Cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 1238
diff changeset
403 configFile = g_strdup(optarg);
3a4018f18bdf Cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 1238
diff changeset
404 break;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
405 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
406 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
407
1256
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
408 if (optind < argc) {
1259
c5c09f8f60b0 Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents: 1257
diff changeset
409 fprintf(stderr, "Usage: %s [-h|-V|-f mcabberrc_file]\n\n", argv[0]);
1256
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
410 return -1;
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
411 }
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
412
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
413 /* Initialize command system, roster and default key bindings */
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
414 cmd_init();
848
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 815
diff changeset
415 roster_init();
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
416 settings_init();
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
417 scr_init_bindings();
779
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 777
diff changeset
418 /* Initialize charset */
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 777
diff changeset
419 scr_InitLocaleCharSet();
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
420
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
421 /* Parsing config file... */
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1179
diff changeset
422 ret = cfg_read_file(configFile, TRUE);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
423 /* free() configFile if it has been allocated during options parsing */
774
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
424 g_free(configFile);
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
425 /* Leave if there was an error in the config. file */
872
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
426 if (ret == -2)
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
427 exit(EXIT_FAILURE);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
428
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
429 optstring = settings_opt_get("tracelog_file");
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
430 if (optstring)
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
431 ut_InitDebug(settings_opt_get_int("tracelog_level"), optstring);
138
250f872c722f [/trunk] Changeset 150 by mikael
mikael
parents: 135
diff changeset
432
306
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
433 /* If no password is stored, we ask for it before entering
872
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
434 ncurses mode -- unless the username is unknown. */
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
435 if (settings_opt_get("username") && !settings_opt_get("password")) {
855
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
436 const char *p;
1123
910e2cce49b3 Fix memory leak
misc@mandriva.org
parents: 1065
diff changeset
437 char *pwd;
855
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
438 p = settings_opt_get("server");
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
439 if (p)
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
440 printf("Server: %s\n", p);
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
441 p = settings_opt_get("username");
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
442 if (p)
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
443 printf("Username: %s\n", p);
1123
910e2cce49b3 Fix memory leak
misc@mandriva.org
parents: 1065
diff changeset
444
910e2cce49b3 Fix memory leak
misc@mandriva.org
parents: 1065
diff changeset
445 pwd = ask_password("Jabber password");
910e2cce49b3 Fix memory leak
misc@mandriva.org
parents: 1065
diff changeset
446 settings_set(SETTINGS_TYPE_OPTION, "password", pwd);
910e2cce49b3 Fix memory leak
misc@mandriva.org
parents: 1065
diff changeset
447 g_free(pwd);
415
5692c3a13202 Display the server name/IP before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 413
diff changeset
448 }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
449
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
450 /* Initialize PGP system
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
451 We do it before ncurses initialization because we may need to request
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
452 a passphrase. */
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
453 if (settings_opt_get_int("pgp"))
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
454 main_init_pgp();
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
455
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
456 /* Initialize N-Curses */
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
457 scr_LogPrint(LPRINT_DEBUG, "Initializing N-Curses...");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
458 scr_InitCurses();
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
459 scr_DrawMainWindow(TRUE);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents: 28
diff changeset
460
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
461 optval = (settings_opt_get_int("logging") > 0);
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
462 optval2 = (settings_opt_get_int("load_logs") > 0);
177
a51ce78a0e2a [/trunk] Changeset 189 by mikael
mikael
parents: 170
diff changeset
463 if (optval || optval2)
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
464 hlog_enable(optval, settings_opt_get("logging_dir"), optval2);
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents: 112
diff changeset
465
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
466 #ifdef HAVE_ASPELL_H
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
467 /* Initialize aspell */
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
468 if (settings_opt_get_int("aspell_enable")) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
469 spellcheck_init();
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
470 }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
471 #endif
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
472
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
473 optstring = settings_opt_get("events_command");
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
474 if (optstring)
160
44c6410b4845 [/trunk] Changeset 172 by mikael
mikael
parents: 156
diff changeset
475 hk_ext_cmd_init(optstring);
44c6410b4845 [/trunk] Changeset 172 by mikael
mikael
parents: 156
diff changeset
476
112
edb5591e2e64 [/trunk] Changeset 126 by mikael
mikael
parents: 102
diff changeset
477 ping = 40;
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
478 if (settings_opt_get("pinginterval"))
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
479 ping = (unsigned int) settings_opt_get_int("pinginterval");
112
edb5591e2e64 [/trunk] Changeset 126 by mikael
mikael
parents: 102
diff changeset
480 jb_set_keepalive_delay(ping);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
481 scr_LogPrint(LPRINT_DEBUG, "Ping interval established: %d secs", ping);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
482
1311
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
483 if (settings_opt_get_int("hide_offline_buddies") > 0) { // XXX Deprecated
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
484 scr_RosterDisplay("ofdna");
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
485 scr_LogPrint(LPRINT_LOGNORM,
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
486 "* Warning: 'hide_offline_buddies' is deprecated.");
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
487 } else {
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
488 optstring = settings_opt_get("roster_display_filter");
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
489 if (optstring)
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
490 scr_RosterDisplay(optstring);
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
491 // Empty filter isn't allowed...
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
492 if (!buddylist_get_filter())
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
493 scr_RosterDisplay("*");
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1307
diff changeset
494 }
87
f600615c490d [/trunk] Changeset 101 by mikael
mikael
parents: 81
diff changeset
495
993
0759f4c7da68 Add option 'disable_chatstates'
Mikael Berthe <mikael@lilotux.net>
parents: 962
diff changeset
496 chatstates_disabled = settings_opt_get_int("disable_chatstates");
0759f4c7da68 Add option 'disable_chatstates'
Mikael Berthe <mikael@lilotux.net>
parents: 962
diff changeset
497
1426
a64778f5f26b Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents: 1425
diff changeset
498 /* Initialize FIFO named pipe */
a64778f5f26b Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents: 1425
diff changeset
499 fifo_init(settings_opt_get("fifo_name"));
a64778f5f26b Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents: 1425
diff changeset
500
1437
071c8170b7de Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
501 /* Load previous roster state */
071c8170b7de Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
502 hlog_load_state();
071c8170b7de Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
503
872
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
504 if (ret < 0) {
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
505 scr_LogPrint(LPRINT_NORMAL, "No configuration file has been found.");
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
506 scr_ShowBuddyWindow();
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
507 } else {
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
508 /* Connection */
306
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
509 mcabber_connect();
872
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
510 }
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
511
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
512 scr_LogPrint(LPRINT_DEBUG, "Entering into main loop...");
112
edb5591e2e64 [/trunk] Changeset 126 by mikael
mikael
parents: 102
diff changeset
513
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
514 while (!terminate_ui) {
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
515 scr_DoUpdate();
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
516 scr_Getch(&kcode);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
517
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
518 if (kcode.value != ERR) {
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
519 process_key(kcode);
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
520 } else {
322
da138cdebf04 Implement auto-away mode
Mikael Berthe <mikael@lilotux.net>
parents: 314
diff changeset
521 scr_CheckAutoAway(FALSE);
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
522
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
523 if (update_roster)
1241
3a4018f18bdf Cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 1238
diff changeset
524 scr_DrawRoster();
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
525
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
526 jb_main();
1425
b0cfd9ab4b9f Add a mainloop hook
Mikael Berthe <mikael@lilotux.net>
parents: 1423
diff changeset
527 hk_mainloop();
152
05f606cfb9e4 [/trunk] Changeset 164 by mikael
mikael
parents: 151
diff changeset
528 }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
529 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
530
1307
6c116207ab2e Work around segfault in otrl_userstate_free()
Mikael Berthe <mikael@lilotux.net>
parents: 1299
diff changeset
531 scr_TerminateCurses();
1426
a64778f5f26b Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents: 1425
diff changeset
532 fifo_deinit();
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
533 #ifdef HAVE_LIBOTR
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
534 otr_terminate();
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
535 #endif
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
536 jb_disconnect();
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
537 #ifdef HAVE_GPGME
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
538 gpg_terminate();
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
539 #endif
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
540 #ifdef HAVE_ASPELL_H
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
541 /* Deinitialize aspell */
1437
071c8170b7de Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
542 if (settings_opt_get_int("aspell_enable"))
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
543 spellcheck_deinit();
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
544 #endif
1437
071c8170b7de Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
545 /* Save pending message state */
071c8170b7de Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
546 hlog_save_state();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
547
961
95659cf9ea1a Display mcabber version in the status window
Mikael Berthe <mikael@lilotux.net>
parents: 955
diff changeset
548 printf("\n\nThanks for using mcabber!\n");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
549
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
550 return 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
551 }
576
8b3db0b555a1 Add Vim modelines
Mikael Berthe <mikael@lilotux.net>
parents: 542
diff changeset
552
580
fed6d1e4d7a9 Fix modelines
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
553 /* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */