Mercurial > ~mikael > mcabber > hg
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 |
rev | line source |
---|---|
307 | 1 /* |
2 * main.c | |
393 | 3 * |
699 | 4 * Copyright (C) 2005, 2006 Mikael Berthe <bmikael@lists.lilotux.net> |
307 | 5 * Parts of this file come from Cabber <cabber@ajmacias.com> |
6 * | |
7 * This program is free software; you can redistribute it and/or modify | |
8 * it under the terms of the GNU General Public License as published by | |
9 * the Free Software Foundation; either version 2 of the License, or (at | |
10 * your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, but | |
13 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU General Public License | |
18 * along with this program; if not, write to the Free Software | |
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | |
20 * USA | |
21 */ | |
22 | |
24 | 23 #include <stdio.h> |
24 #include <stdlib.h> | |
25 #include <unistd.h> | |
26 #include <string.h> | |
27 #include <signal.h> | |
28 #include <termios.h> | |
28 | 29 #include <getopt.h> |
163 | 30 #include <sys/types.h> |
31 #include <sys/wait.h> | |
169 | 32 #include <glib.h> |
404 | 33 #include <config.h> |
24 | 34 |
81 | 35 #include "jabglue.h" |
24 | 36 #include "screen.h" |
279
f5dd437c057b
Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
272
diff
changeset
|
37 #include "settings.h" |
102 | 38 #include "roster.h" |
96 | 39 #include "commands.h" |
113 | 40 #include "histolog.h" |
163 | 41 #include "hooks.h" |
81 | 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 | 48 |
801
d8e0a1ce3e8a
Define WAIT_ANY if needed.
Soren Andersen <somian@pobox.com>
parents:
789
diff
changeset
|
49 #ifndef WAIT_ANY |
1053 | 50 # define WAIT_ANY -1 |
801
d8e0a1ce3e8a
Define WAIT_ANY if needed.
Soren Andersen <somian@pobox.com>
parents:
789
diff
changeset
|
51 #endif |
24 | 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 | 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 | 69 const char *proxy_host; |
1058 | 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 | 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 | 128 if (proxy_host) { |
129 int proxy_port = settings_opt_get_int("proxy_port"); | |
130 if (proxy_port <= 0 || proxy_port > 65535) { | |
131 scr_LogPrint(LPRINT_LOGNORM, "Invalid proxy port: %d", proxy_port); | |
132 } else { | |
133 const char *proxy_user, *proxy_pass; | |
134 proxy_user = settings_opt_get("proxy_user"); | |
135 proxy_pass = settings_opt_get("proxy_pass"); | |
136 // Proxy initialization | |
137 cw_setproxy(proxy_host, proxy_port, proxy_user, proxy_pass); | |
138 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, " using proxy %s:%d", | |
139 proxy_host, proxy_port); | |
140 } | |
141 } | |
142 | |
1058 | 143 bjid = compose_jid(username, servername, resource); |
144 jc = jb_connect(bjid, servername, port, ssl, password); | |
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 | 151 } |
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 | 232 { |
895 | 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 | 238 } |
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 | 293 int main(int argc, char **argv) |
294 { | |
169 | 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 | 297 int optval, optval2; |
24 | 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 | 301 |
302 credits(); | |
303 | |
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 | 306 signal(SIGCHLD, sig_handler); |
413 | 307 signal(SIGPIPE, SIG_IGN); |
24 | 308 |
77 | 309 /* Parse command line options */ |
24 | 310 while (1) { |
311 int c = getopt(argc, argv, "hf:"); | |
312 if (c == -1) { | |
313 break; | |
314 } else | |
315 switch (c) { | |
316 case 'h': | |
317 printf("Usage: %s [-f mcabberrc_file]\n\n", argv[0]); | |
318 printf("Thanks to AjMacias for cabber!\n\n"); | |
319 return 0; | |
320 case 'f': | |
169 | 321 configFile = g_strdup(optarg); |
24 | 322 break; |
323 } | |
324 } | |
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 | 334 /* Parsing config file... */ |
1192 | 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 | 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 | 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 | 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 | 357 |
358 pwd = ask_password("Jabber password"); | |
359 settings_set(SETTINGS_TYPE_OPTION, "password", pwd); | |
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 | 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 | 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 | 371 scr_InitCurses(); |
151 | 372 scr_DrawMainWindow(TRUE); |
29 | 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 | 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 | 378 |
1179 | 379 #ifdef HAVE_ASPELL_H |
380 /* Initialize aspell */ | |
381 if (settings_opt_get_int("aspell_enable")) { | |
382 spellcheck_init(); | |
383 } | |
384 #endif | |
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 | 388 hk_ext_cmd_init(optstring); |
389 | |
112 | 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 | 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 | 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 | 397 buddylist_set_hide_offline_buddies(TRUE); |
87 | 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 | 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 | 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 | 424 } |
24 | 425 } |
426 | |
35 | 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 | 431 scr_TerminateCurses(); |
1179 | 432 #ifdef HAVE_ASPELL_H |
433 /* Deinitialize aspell */ | |
434 if (settings_opt_get_int("aspell_enable")) { | |
435 spellcheck_deinit(); | |
436 } | |
437 #endif | |
24 | 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 | 440 |
441 return 0; | |
442 } | |
576 | 443 |
580 | 444 /* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */ |