annotate mcabber/src/main.c @ 1197:6f602d3270a4

Add /pgp [-]force With this command it becomes possible to enforce PGP encryption without checking if the remote client has PGP support. It can be used to send encrypted offline messages too.
author Mikael Berthe <mikael@lilotux.net>
date Fri, 27 Apr 2007 00:37:57 +0200
parents 7b8765c10abb
children 2de8f8ba1f34
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 *
699
ee03b56b93ee Update Copyright (2006)
Mikael Berthe <mikael@lilotux.net>
parents: 676
diff changeset
4 * Copyright (C) 2005, 2006 Mikael Berthe <bmikael@lists.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"
781
d3af6877a7df Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
44
d3af6877a7df Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
45 #ifdef ENABLE_HGCSET
d3af6877a7df Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
46 # include "hgcset.h"
d3af6877a7df Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
47 #endif
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
48
801
d8e0a1ce3e8a Define WAIT_ANY if needed.
Soren Andersen <somian@pobox.com>
parents: 789
diff changeset
49 #ifndef WAIT_ANY
1053
1ec7ec9bda60 Cleanup/cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
50 # define WAIT_ANY -1
801
d8e0a1ce3e8a Define WAIT_ANY if needed.
Soren Andersen <somian@pobox.com>
parents: 789
diff changeset
51 #endif
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
52
789
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
53 static struct termios *backup_termios;
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
54
777
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
55 char *mcabber_version(void)
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
56 {
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
57 char *ver;
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
58 #ifdef HGCSET
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
59 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
60 #else
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
61 ver = g_strdup(PACKAGE_VERSION);
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
62 #endif
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
63 return ver;
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
64 }
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
65
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
66 void mcabber_connect(void)
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
67 {
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
68 const char *username, *password, *resource, *servername;
429
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
69 const char *proxy_host;
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1053
diff changeset
70 char *bjid;
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
71 int ssl;
938
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
72 int sslverify = -1;
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
73 const char *sslvopt = NULL, *cafile = NULL, *capath = NULL, *ciphers = NULL;
1167
9726c78a91f3 Allow '~' (HOME directory) in config options
Mikael Berthe <mikael@lilotux.net>
parents: 1123
diff changeset
74 char *cafile_xp = NULL, *capath_xp = NULL;
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
75 unsigned int port;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
76
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
77 servername = settings_opt_get("server");
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
78 username = settings_opt_get("username");
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
79 password = settings_opt_get("password");
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
80 resource = settings_opt_get("resource");
429
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
81 proxy_host = settings_opt_get("proxy_host");
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
82
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
83 if (!servername) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
84 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
85 return;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
86 }
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
87 if (!username) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
88 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
89 return;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
90 }
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
91 if (!password) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
92 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
93 return;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
94 }
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
95 if (!resource)
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
96 resource = "mcabber";
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
97
938
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
98 port = (unsigned int) settings_opt_get_int("port");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
99
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
100 ssl = settings_opt_get_int("ssl");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
101 sslvopt = settings_opt_get("ssl_verify");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
102 if (sslvopt)
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
103 sslverify = settings_opt_get_int("ssl_verify");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
104 cafile = settings_opt_get("ssl_cafile");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
105 capath = settings_opt_get("ssl_capath");
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
106 ciphers = settings_opt_get("ssl_ciphers");
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
107
815
04edcb6d7ee3 Warn when ssl is request but not compiled in
Mikael Berthe <mikael@lilotux.net>
parents: 801
diff changeset
108 #if !defined(HAVE_OPENSSL) && !defined(HAVE_GNUTLS)
938
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
109 if (ssl || sslvopt || cafile || capath || ciphers) {
815
04edcb6d7ee3 Warn when ssl is request but not compiled in
Mikael Berthe <mikael@lilotux.net>
parents: 801
diff changeset
110 scr_LogPrint(LPRINT_LOGNORM,
955
6be62425dc38 Use current ssl_verify value in /connect
Mikael Berthe <mikael@lilotux.net>
parents: 940
diff changeset
111 "** Warning: SSL is NOT available, ignoring ssl-related setting");
938
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
112 ssl = sslverify = 0;
40175f3dcef7 SSL server certificate verification
Jefferson Ogata <ogata@antibozo.net>
parents: 895
diff changeset
113 cafile = capath = ciphers = NULL;
815
04edcb6d7ee3 Warn when ssl is request but not compiled in
Mikael Berthe <mikael@lilotux.net>
parents: 801
diff changeset
114 }
04edcb6d7ee3 Warn when ssl is request but not compiled in
Mikael Berthe <mikael@lilotux.net>
parents: 801
diff changeset
115 #endif
1167
9726c78a91f3 Allow '~' (HOME directory) in config options
Mikael Berthe <mikael@lilotux.net>
parents: 1123
diff changeset
116 if (cafile) cafile_xp = expand_filename(cafile);
9726c78a91f3 Allow '~' (HOME directory) in config options
Mikael Berthe <mikael@lilotux.net>
parents: 1123
diff changeset
117 if (capath) capath_xp = expand_filename(capath);
9726c78a91f3 Allow '~' (HOME directory) in config options
Mikael Berthe <mikael@lilotux.net>
parents: 1123
diff changeset
118 cw_set_ssl_options(sslverify, cafile_xp, capath_xp, ciphers, servername);
9726c78a91f3 Allow '~' (HOME directory) in config options
Mikael Berthe <mikael@lilotux.net>
parents: 1123
diff changeset
119 g_free(cafile_xp);
9726c78a91f3 Allow '~' (HOME directory) in config options
Mikael Berthe <mikael@lilotux.net>
parents: 1123
diff changeset
120 g_free(capath_xp);
815
04edcb6d7ee3 Warn when ssl is request but not compiled in
Mikael Berthe <mikael@lilotux.net>
parents: 801
diff changeset
121
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
122 /* Connect to server */
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
123 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, "Connecting to server: %s",
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
124 servername);
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
125 if (port)
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
126 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, " using port %d", port);
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
127
429
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
128 if (proxy_host) {
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
129 int proxy_port = settings_opt_get_int("proxy_port");
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
130 if (proxy_port <= 0 || proxy_port > 65535) {
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
131 scr_LogPrint(LPRINT_LOGNORM, "Invalid proxy port: %d", proxy_port);
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
132 } else {
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
133 const char *proxy_user, *proxy_pass;
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
134 proxy_user = settings_opt_get("proxy_user");
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
135 proxy_pass = settings_opt_get("proxy_pass");
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
136 // Proxy initialization
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
137 cw_setproxy(proxy_host, proxy_port, proxy_user, proxy_pass);
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
138 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, " using proxy %s:%d",
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
139 proxy_host, proxy_port);
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
140 }
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
141 }
0bb3d37579aa Enable proxy support
Mikael Berthe <mikael@lilotux.net>
parents: 415
diff changeset
142
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1053
diff changeset
143 bjid = compose_jid(username, servername, resource);
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1053
diff changeset
144 jc = jb_connect(bjid, servername, port, ssl, password);
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1053
diff changeset
145 g_free(bjid);
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
146
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
147 if (!jc)
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
148 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
149
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
150 jb_reset_keepalive();
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
151 }
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
152
962
e79af58cd0be mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents: 961
diff changeset
153 static void mcabber_terminate(const char *msg)
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
154 {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
155 jb_disconnect();
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
156 scr_TerminateCurses();
789
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
157
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
158 // Restore term settings, if needed.
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
159 if (backup_termios)
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
160 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
161
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
162 if (msg)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
163 fprintf(stderr, "%s\n", msg);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
164 printf("Bye!\n");
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
165 exit(EXIT_SUCCESS);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
166 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
167
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
168 void sig_handler(int signum)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
169 {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
170 if (signum == SIGCHLD) {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
171 int status;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
172 pid_t pid;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
173 do {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
174 pid = waitpid (WAIT_ANY, &status, WNOHANG);
676
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
175 // Check the exit status value if 'eventcmd_checkstatus' is set
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
176 if (settings_opt_get_int("eventcmd_checkstatus")) {
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
177 if (pid > 0) {
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
178 // exit status 2 -> beep
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
179 if (WIFEXITED(status) && WEXITSTATUS(status) == 2) {
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
180 scr_Beep();
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
181 }
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
182 }
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
183 }
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
184 } while (pid > 0);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
185 signal(SIGCHLD, sig_handler);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
186 } else if (signum == SIGTERM) {
962
e79af58cd0be mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents: 961
diff changeset
187 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
188 } else if (signum == SIGINT) {
962
e79af58cd0be mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents: 961
diff changeset
189 mcabber_terminate("Killed by SIGINT");
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
190 } else {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
191 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
192 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
193 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
194
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
195 // ask_password(what)
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
196 // Return the password, or NULL.
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
197 // The string must be freed after use.
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
198 static char *ask_password(const char *what)
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
199 {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
200 char *password, *p;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
201 size_t passsize = 128;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
202 struct termios orig, new;
482
2ea7591584ab Use fgets() instead of getline()
Mikael Berthe <mikael@lilotux.net>
parents: 429
diff changeset
203
2ea7591584ab Use fgets() instead of getline()
Mikael Berthe <mikael@lilotux.net>
parents: 429
diff changeset
204 password = g_new0(char, passsize);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
205
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
206 /* Turn echoing off and fail if we can't. */
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
207 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
208 backup_termios = &orig;
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
209
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
210 new = orig;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
211 new.c_lflag &= ~ECHO;
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
212 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
213
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
214 /* Read the password. */
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
215 printf("Please enter %s: ", what);
482
2ea7591584ab Use fgets() instead of getline()
Mikael Berthe <mikael@lilotux.net>
parents: 429
diff changeset
216 fgets(password, passsize, stdin);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
217
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
218 /* Restore terminal. */
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
219 tcsetattr(fileno(stdin), TCSAFLUSH, &orig);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
220 printf("\n");
789
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
221 backup_termios = NULL;
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
222
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
223 for (p = (char*)password; *p; p++)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
224 ;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
225 for ( ; p > (char*)password ; p--)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
226 if (*p == '\n' || *p == '\r') *p = 0;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
227
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
228 return password;
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
229 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
230
784
d7f3b58db522 Display hgcset (if defined) at startup
Mikael Berthe <mikael@lilotux.net>
parents: 781
diff changeset
231 static void credits(void)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
232 {
895
b461d7ee6d96 Minor changes
Mikael Berthe <mikael@lilotux.net>
parents: 872
diff changeset
233 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
234 char *v = mcabber_version();
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
235 printf(v_fmt, v);
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
236 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
237 g_free(v);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
238 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
239
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
240 void main_init_pgp(void)
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
241 {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
242 #ifdef HAVE_GPGME
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
243 const char *pk, *pp;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
244 char *typed_passwd = NULL;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
245 char *p;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
246 bool pgp_invalid = FALSE;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
247 bool pgp_agent;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
248
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
249 p = getenv("GPG_AGENT_INFO");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
250 pgp_agent = (p && strchr(p, ':'));
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
251
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
252 pk = settings_opt_get("pgp_private_key");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
253 pp = settings_opt_get("pgp_passphrase");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
254 if (!pk) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
255 scr_LogPrint(LPRINT_LOGNORM, "WARNING: unkown PGP private key");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
256 pgp_invalid = TRUE;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
257 } else if (!(pp || pgp_agent)) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
258 // Request PGP passphrase
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
259 pp = typed_passwd = ask_password("PGP passphrase");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
260 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
261 gpg_init(pk, pp);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
262 // Erase password from the settings array
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
263 if (pp) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
264 memset((char*)pp, 0, strlen(pp));
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
265 if (typed_passwd)
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
266 g_free(typed_passwd);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
267 else
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
268 settings_set(SETTINGS_TYPE_OPTION, "pgp_passphrase", NULL);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
269 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
270 if (!pgp_agent && pk && pp && gpg_test_passphrase()) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
271 // Let's check the pasphrase
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
272 int i;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
273 for (i = 0; i < 2; i++) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
274 typed_passwd = ask_password("PGP passphrase"); // Ask again...
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
275 if (typed_passwd) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
276 gpg_set_passphrase(typed_passwd);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
277 memset(typed_passwd, 0, strlen(typed_passwd));
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
278 g_free(typed_passwd);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
279 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
280 if (!gpg_test_passphrase())
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
281 break; // Ok
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
282 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
283 if (i == 2)
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
284 pgp_invalid = TRUE;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
285 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
286 if (pgp_invalid)
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
287 scr_LogPrint(LPRINT_LOGNORM, "WARNING: PGP key/pass invalid");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
288 #else /* not HAVE_GPGME */
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
289 scr_LogPrint(LPRINT_LOGNORM, "WARNING: not compiled with PGP support");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
290 #endif /* HAVE_GPGME */
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
291 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
292
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
293 int main(int argc, char **argv)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
294 {
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 165
diff changeset
295 char *configFile = NULL;
281
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
296 const char *optstring;
177
a51ce78a0e2a [/trunk] Changeset 189 by mikael
mikael
parents: 170
diff changeset
297 int optval, optval2;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
298 unsigned int ping;
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
299 int ret;
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
300 keycode kcode;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
301
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
302 credits();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
303
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
304 signal(SIGTERM, sig_handler);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
305 signal(SIGINT, sig_handler);
163
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
306 signal(SIGCHLD, sig_handler);
413
f7e4b0424081 Ignore SIGPIPE
Mikael Berthe <mikael@lilotux.net>
parents: 404
diff changeset
307 signal(SIGPIPE, SIG_IGN);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
308
77
32f54ad6d729 [/trunk] Changeset 91 by mikael
mikael
parents: 70
diff changeset
309 /* Parse command line options */
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
310 while (1) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
311 int c = getopt(argc, argv, "hf:");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
312 if (c == -1) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
313 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
314 } else
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
315 switch (c) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
316 case 'h':
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
317 printf("Usage: %s [-f mcabberrc_file]\n\n", argv[0]);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
318 printf("Thanks to AjMacias for cabber!\n\n");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
319 return 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
320 case 'f':
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 165
diff changeset
321 configFile = g_strdup(optarg);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
322 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
323 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
324 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
325
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
326 /* Initialize command system, roster and default key bindings */
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
327 cmd_init();
848
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 815
diff changeset
328 roster_init();
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
329 settings_init();
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
330 scr_init_bindings();
779
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 777
diff changeset
331 /* Initialize charset */
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 777
diff changeset
332 scr_InitLocaleCharSet();
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
333
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
334 /* Parsing config file... */
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1179
diff changeset
335 ret = cfg_read_file(configFile, TRUE);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
336 /* 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
337 g_free(configFile);
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
338 /* 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
339 if (ret == -2)
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
340 exit(EXIT_FAILURE);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
341
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
342 optstring = settings_opt_get("tracelog_file");
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
343 if (optstring)
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
344 ut_InitDebug(settings_opt_get_int("tracelog_level"), optstring);
138
250f872c722f [/trunk] Changeset 150 by mikael
mikael
parents: 135
diff changeset
345
306
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
346 /* 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
347 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
348 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
349 const char *p;
1123
910e2cce49b3 Fix memory leak
misc@mandriva.org
parents: 1065
diff changeset
350 char *pwd;
855
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
351 p = settings_opt_get("server");
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
352 if (p)
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
353 printf("Server: %s\n", p);
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
354 p = settings_opt_get("username");
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
355 if (p)
cbeedd730b1b Display username before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
356 printf("Username: %s\n", p);
1123
910e2cce49b3 Fix memory leak
misc@mandriva.org
parents: 1065
diff changeset
357
910e2cce49b3 Fix memory leak
misc@mandriva.org
parents: 1065
diff changeset
358 pwd = ask_password("Jabber password");
910e2cce49b3 Fix memory leak
misc@mandriva.org
parents: 1065
diff changeset
359 settings_set(SETTINGS_TYPE_OPTION, "password", pwd);
910e2cce49b3 Fix memory leak
misc@mandriva.org
parents: 1065
diff changeset
360 g_free(pwd);
415
5692c3a13202 Display the server name/IP before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 413
diff changeset
361 }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
362
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
363 /* Initialize PGP system
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
364 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
365 a passphrase. */
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
366 if (settings_opt_get_int("pgp"))
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
367 main_init_pgp();
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
368
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
369 /* Initialize N-Curses */
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
370 scr_LogPrint(LPRINT_DEBUG, "Initializing N-Curses...");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
371 scr_InitCurses();
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
372 scr_DrawMainWindow(TRUE);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents: 28
diff changeset
373
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
374 optval = (settings_opt_get_int("logging") > 0);
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
375 optval2 = (settings_opt_get_int("load_logs") > 0);
177
a51ce78a0e2a [/trunk] Changeset 189 by mikael
mikael
parents: 170
diff changeset
376 if (optval || optval2)
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
377 hlog_enable(optval, settings_opt_get("logging_dir"), optval2);
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents: 112
diff changeset
378
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
379 #ifdef HAVE_ASPELL_H
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
380 /* Initialize aspell */
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
381 if (settings_opt_get_int("aspell_enable")) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
382 spellcheck_init();
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
383 }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
384 #endif
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
385
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
386 optstring = settings_opt_get("events_command");
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
387 if (optstring)
160
44c6410b4845 [/trunk] Changeset 172 by mikael
mikael
parents: 156
diff changeset
388 hk_ext_cmd_init(optstring);
44c6410b4845 [/trunk] Changeset 172 by mikael
mikael
parents: 156
diff changeset
389
112
edb5591e2e64 [/trunk] Changeset 126 by mikael
mikael
parents: 102
diff changeset
390 ping = 40;
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
391 if (settings_opt_get("pinginterval"))
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
392 ping = (unsigned int) settings_opt_get_int("pinginterval");
112
edb5591e2e64 [/trunk] Changeset 126 by mikael
mikael
parents: 102
diff changeset
393 jb_set_keepalive_delay(ping);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
394 scr_LogPrint(LPRINT_DEBUG, "Ping interval established: %d secs", ping);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
395
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
396 if (settings_opt_get_int("hide_offline_buddies") > 0)
120
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 113
diff changeset
397 buddylist_set_hide_offline_buddies(TRUE);
87
f600615c490d [/trunk] Changeset 101 by mikael
mikael
parents: 81
diff changeset
398
993
0759f4c7da68 Add option 'disable_chatstates'
Mikael Berthe <mikael@lilotux.net>
parents: 962
diff changeset
399 chatstates_disabled = settings_opt_get_int("disable_chatstates");
0759f4c7da68 Add option 'disable_chatstates'
Mikael Berthe <mikael@lilotux.net>
parents: 962
diff changeset
400
872
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
401 if (ret < 0) {
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
402 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
403 scr_ShowBuddyWindow();
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
404 } else {
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
405 /* Connection */
306
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
406 mcabber_connect();
872
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
407 }
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
408
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
409 scr_LogPrint(LPRINT_DEBUG, "Entering into main loop...");
112
edb5591e2e64 [/trunk] Changeset 126 by mikael
mikael
parents: 102
diff changeset
410
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
411 for (ret = 0 ; ret != 255 ; ) {
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
412 scr_DoUpdate();
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
413 scr_Getch(&kcode);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
414
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
415 if (kcode.value != ERR) {
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
416 ret = process_key(kcode);
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
417 } else {
322
da138cdebf04 Implement auto-away mode
Mikael Berthe <mikael@lilotux.net>
parents: 314
diff changeset
418 scr_CheckAutoAway(FALSE);
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
419
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
420 if (update_roster)
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
421 scr_DrawRoster();
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
422
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 938
diff changeset
423 jb_main();
152
05f606cfb9e4 [/trunk] Changeset 164 by mikael
mikael
parents: 151
diff changeset
424 }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
425 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
426
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
427 jb_disconnect();
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
428 #ifdef HAVE_GPGME
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
429 gpg_terminate();
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
430 #endif
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
431 scr_TerminateCurses();
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
432 #ifdef HAVE_ASPELL_H
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
433 /* Deinitialize aspell */
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
434 if (settings_opt_get_int("aspell_enable")) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
435 spellcheck_deinit();
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
436 }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
437 #endif
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
438
961
95659cf9ea1a Display mcabber version in the status window
Mikael Berthe <mikael@lilotux.net>
parents: 955
diff changeset
439 printf("\n\nThanks for using mcabber!\n");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
440
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
441 return 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
442 }
576
8b3db0b555a1 Add Vim modelines
Mikael Berthe <mikael@lilotux.net>
parents: 542
diff changeset
443
580
fed6d1e4d7a9 Fix modelines
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
444 /* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */