annotate mcabber/mcabber/main.c @ 2225:dc3b3ac1ba76

Free the buffdata structures when buffers are closed Free the buffdata strcutures when buffers are closed and there are no more users (these structures can be shared if the "symlink" shared history is used).
author Mikael Berthe <mikael@lilotux.net>
date Sat, 07 Nov 2015 12:21:12 +0100
parents 8811fe9d6ef0
children 1afa40f1d80d
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 *
2134
fc7a758ebbde Remove deprecated options comments, update headers
Mikael Berthe <mikael@lilotux.net>
parents: 2110
diff changeset
4 * Copyright (C) 2005-2014 Mikael Berthe <mikael@lilotux.net>
307
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
5 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
6 * 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
7 * 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
8 * 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
9 * your option) any later version.
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
10 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
11 * 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
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
13 * 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
14 * General Public License for more details.
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
15 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
16 * 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
17 * 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
18 * 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
19 * USA
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
20 */
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
21
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
22 #include <stdio.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
23 #include <stdlib.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
24 #include <unistd.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
25 #include <string.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
26 #include <signal.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
27 #include <termios.h>
163
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
28 #include <sys/types.h>
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
29 #include <sys/wait.h>
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 165
diff changeset
30 #include <glib.h>
404
fb2325d24d13 Drop harddefines.h
Mikael Berthe <mikael@lilotux.net>
parents: 403
diff changeset
31 #include <config.h>
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
32 #include <poll.h>
2183
e62319868844 Fix external password support (esp. on OS X)
Mikael Berthe <mikael@lilotux.net>
parents: 2173
diff changeset
33 #include <errno.h>
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
34
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
35 #include "caps.h"
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
36 #include "screen.h"
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
37 #include "settings.h"
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 96
diff changeset
38 #include "roster.h"
96
8b2703ccc4be [/trunk] Changeset 110 by mikael
mikael
parents: 88
diff changeset
39 #include "commands.h"
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents: 112
diff changeset
40 #include "histolog.h"
163
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
41 #include "hooks.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 77
diff changeset
42 #include "utils.h"
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
43 #include "pgp.h"
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
44 #include "otr.h"
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
45 #include "xmpp.h"
1678
e489ead6574a New help system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1674
diff changeset
46 #include "help.h"
1685
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1678
diff changeset
47 #include "events.h"
1426
a64778f5f26b Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents: 1425
diff changeset
48
1941
2256d0626730 Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1940
diff changeset
49 #ifndef MODULES_ENABLE
2256d0626730 Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1940
diff changeset
50 # include "fifo.h"
2256d0626730 Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1940
diff changeset
51 #endif
2256d0626730 Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1940
diff changeset
52
1735
5093b5ca1572 New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1729
diff changeset
53 #ifdef MODULES_ENABLE
1922
4ba68ad737bc Increase the number of available categories for completions
Mikael Berthe <mikael@lilotux.net>
parents: 1916
diff changeset
54 # include "compl.h"
1735
5093b5ca1572 New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1729
diff changeset
55 # include "modules.h"
5093b5ca1572 New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1729
diff changeset
56 #endif
5093b5ca1572 New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1729
diff changeset
57
781
d3af6877a7df Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
58 #ifdef ENABLE_HGCSET
d3af6877a7df Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
59 # include "hgcset.h"
d3af6877a7df Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
60 #endif
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
61
801
d8e0a1ce3e8a Define WAIT_ANY if needed.
Soren Andersen <somian@pobox.com>
parents: 789
diff changeset
62 #ifndef WAIT_ANY
1053
1ec7ec9bda60 Cleanup/cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
63 # define WAIT_ANY -1
801
d8e0a1ce3e8a Define WAIT_ANY if needed.
Soren Andersen <somian@pobox.com>
parents: 789
diff changeset
64 #endif
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
65
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
66 static unsigned int terminate_ui;
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
67 GMainContext *main_context;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
68
789
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
69 static struct termios *backup_termios;
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
70
777
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
71 char *mcabber_version(void)
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
72 {
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
73 char *ver;
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
74 #ifdef HGCSET
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
75 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
76 #else
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
77 ver = g_strdup(PACKAGE_VERSION);
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
78 #endif
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
79 return ver;
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
80 }
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
81
962
e79af58cd0be mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents: 961
diff changeset
82 static void mcabber_terminate(const char *msg)
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
83 {
1941
2256d0626730 Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1940
diff changeset
84 #ifndef MODULES_ENABLE
1659
2536a4b5e370 Re-add fifo_deinit() in mcabber_terminate() (isbear)
Mikael Berthe <mikael@lilotux.net>
parents: 1658
diff changeset
85 fifo_deinit();
1941
2256d0626730 Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1940
diff changeset
86 #endif
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
87 xmpp_disconnect();
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
88 scr_terminate_curses();
789
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
89
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
90 // Restore term settings, if needed.
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
91 if (backup_termios)
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
92 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
93
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
94 if (msg)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
95 fprintf(stderr, "%s\n", msg);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
96 printf("Bye!\n");
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
97 exit(EXIT_SUCCESS);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
98 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
99
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
100 void sig_handler(int signum)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
101 {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
102 if (signum == SIGCHLD) {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
103 int status;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
104 pid_t pid;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
105 do {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
106 pid = waitpid (WAIT_ANY, &status, WNOHANG);
676
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
107 // Check the exit status value if 'eventcmd_checkstatus' is set
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
108 if (settings_opt_get_int("eventcmd_checkstatus")) {
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
109 if (pid > 0) {
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
110 // exit status 2 -> beep
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
111 if (WIFEXITED(status) && WEXITSTATUS(status) == 2) {
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
112 scr_beep();
676
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
113 }
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
114 }
80d4959422ca New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
115 }
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
116 } while (pid > 0);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
117 signal(SIGCHLD, sig_handler);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
118 } else if (signum == SIGTERM) {
962
e79af58cd0be mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents: 961
diff changeset
119 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
120 } else if (signum == SIGINT) {
962
e79af58cd0be mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents: 961
diff changeset
121 mcabber_terminate("Killed by SIGINT");
2071
a5acc2a1af53 Adds SIGHUP to signal handling.
Dominik George <nik@naturalnet.de>
parents: 2042
diff changeset
122 } else if (signum == SIGHUP) {
a5acc2a1af53 Adds SIGHUP to signal handling.
Dominik George <nik@naturalnet.de>
parents: 2042
diff changeset
123 mcabber_terminate("Killed by SIGHUP");
1454
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
124 #ifdef USE_SIGWINCH
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
125 } else if (signum == SIGWINCH) {
1995
7f7c6b87f1b1 Fix segfault with SIGWINCH
Mikael Berthe <mikael@lilotux.net>
parents: 1941
diff changeset
126 if (scr_curses_status())
7f7c6b87f1b1 Fix segfault with SIGWINCH
Mikael Berthe <mikael@lilotux.net>
parents: 1941
diff changeset
127 ungetch(KEY_RESIZE);
1454
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
128 #endif
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
129 } else {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
130 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
131 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
132 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
133
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
134 // ask_password(what)
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
135 // Return the password, or NULL.
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
136 // The string must be freed after use.
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
137 static char *ask_password(const char *what)
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
138 {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
139 char *password, *p;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
140 size_t passsize = 128;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
141 struct termios orig, new;
482
2ea7591584ab Use fgets() instead of getline()
Mikael Berthe <mikael@lilotux.net>
parents: 429
diff changeset
142
2ea7591584ab Use fgets() instead of getline()
Mikael Berthe <mikael@lilotux.net>
parents: 429
diff changeset
143 password = g_new0(char, passsize);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
144
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
145 /* Turn echoing off and fail if we can't. */
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
146 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
147 backup_termios = &orig;
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
148
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
149 new = orig;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
150 new.c_lflag &= ~ECHO;
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
151 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
152
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
153 /* Read the password. */
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
154 printf("Please enter %s: ", what);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
155 if (fgets(password, passsize, stdin) == NULL) return NULL;
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
156
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
157 /* Restore terminal. */
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
158 tcsetattr(fileno(stdin), TCSAFLUSH, &orig);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
159 printf("\n");
789
1fa93cc6f5e3 Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents: 784
diff changeset
160 backup_termios = NULL;
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
161
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
162 for (p = (char*)password; *p; p++)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
163 ;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
164 for ( ; p > (char*)password ; p--)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
165 if (*p == '\n' || *p == '\r') *p = 0;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
166
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
167 return password;
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
168 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
169
2173
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
170 // password_eval(command, *status)
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
171 // Get password from a system command.
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
172 // The string must be freed after use.
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
173 static char *password_eval(const char *command, int *status)
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
174 {
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
175 #define MAX_PWD 100
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
176 char *pwd;
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
177 FILE *outfp = popen(command, "r");
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
178 if (outfp == NULL) {
2183
e62319868844 Fix external password support (esp. on OS X)
Mikael Berthe <mikael@lilotux.net>
parents: 2173
diff changeset
179 scr_log_print(LPRINT_NORMAL,
e62319868844 Fix external password support (esp. on OS X)
Mikael Berthe <mikael@lilotux.net>
parents: 2173
diff changeset
180 "** ERROR: Failed to execute password_eval command.");
2173
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
181 *status = -1;
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
182 return NULL;
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
183 }
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
184
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
185 pwd = g_new0(char, MAX_PWD);
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
186 if (fgets(pwd, MAX_PWD, outfp) == NULL) {
2183
e62319868844 Fix external password support (esp. on OS X)
Mikael Berthe <mikael@lilotux.net>
parents: 2173
diff changeset
187 scr_log_print(LPRINT_NORMAL,
e62319868844 Fix external password support (esp. on OS X)
Mikael Berthe <mikael@lilotux.net>
parents: 2173
diff changeset
188 "** ERROR: Failed to read from password_eval command.");
2173
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
189 g_free(pwd);
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
190 *status = -1;
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
191 return NULL;
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
192 }
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
193
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
194 int res = pclose(outfp);
2183
e62319868844 Fix external password support (esp. on OS X)
Mikael Berthe <mikael@lilotux.net>
parents: 2173
diff changeset
195 if (res != 0 && errno != ECHILD) {
e62319868844 Fix external password support (esp. on OS X)
Mikael Berthe <mikael@lilotux.net>
parents: 2173
diff changeset
196 scr_log_print(LPRINT_NORMAL,
e62319868844 Fix external password support (esp. on OS X)
Mikael Berthe <mikael@lilotux.net>
parents: 2173
diff changeset
197 "** ERROR: Password evaluation command exited with error %d.",
e62319868844 Fix external password support (esp. on OS X)
Mikael Berthe <mikael@lilotux.net>
parents: 2173
diff changeset
198 res);
e62319868844 Fix external password support (esp. on OS X)
Mikael Berthe <mikael@lilotux.net>
parents: 2173
diff changeset
199 if (res == -1) {
2184
f30459c47092 Fix indent in previous patch
Mikael Berthe <mikael@lilotux.net>
parents: 2183
diff changeset
200 scr_log_print(LPRINT_NORMAL, " errno=%d", errno);
2183
e62319868844 Fix external password support (esp. on OS X)
Mikael Berthe <mikael@lilotux.net>
parents: 2173
diff changeset
201 }
2173
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
202 g_free(pwd);
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
203 *status = res;
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
204 return NULL;
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
205 }
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
206
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
207 // Strip trailing whitespaces and newlines
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
208 size_t i = strlen(pwd);
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
209 while (i && isspace(pwd[i-1])) {
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
210 i--;
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
211 }
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
212 pwd[i] = '\0';
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
213 return pwd;
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
214 }
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
215
784
d7f3b58db522 Display hgcset (if defined) at startup
Mikael Berthe <mikael@lilotux.net>
parents: 781
diff changeset
216 static void credits(void)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
217 {
895
b461d7ee6d96 Minor changes
Mikael Berthe <mikael@lilotux.net>
parents: 872
diff changeset
218 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
219 char *v = mcabber_version();
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
220 printf(v_fmt, v);
1897
efd7c4c34ff2 Display mcabber version when starting a trace log
Mikael Berthe <mikael@lilotux.net>
parents: 1894
diff changeset
221 scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8, v_fmt, v);
784
d7f3b58db522 Display hgcset (if defined) at startup
Mikael Berthe <mikael@lilotux.net>
parents: 781
diff changeset
222 g_free(v);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
223 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
224
1257
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
225 static void compile_options(void)
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
226 {
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
227 puts("Installation data directory: " DATA_DIR "\n");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
228 #ifdef HAVE_UNICODE
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
229 puts("Compiled with unicode support.");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
230 #endif
1630
141ae278e769 Reorder feature list in mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents: 1628
diff changeset
231 #ifdef MODULES_ENABLE
1764
6e856c5858c3 Display module API version with mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents: 1744
diff changeset
232 printf("Compiled with modules support. (API %s:%d-%d)\n",
6e856c5858c3 Display module API version with mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents: 1744
diff changeset
233 MCABBER_BRANCH, MCABBER_API_MIN, MCABBER_API_VERSION);
1702
02039190532d Display modules directory with mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents: 1685
diff changeset
234 # ifdef PKGLIB_DIR
1764
6e856c5858c3 Display module API version with mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents: 1744
diff changeset
235 puts("Modules directory: " PKGLIB_DIR);
1702
02039190532d Display modules directory with mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents: 1685
diff changeset
236 # endif
1630
141ae278e769 Reorder feature list in mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents: 1628
diff changeset
237 #endif
1257
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
238 #ifdef HAVE_GPGME
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
239 puts("Compiled with GPG support.");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
240 #endif
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
241 #ifdef HAVE_LIBOTR
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
242 puts("Compiled with OTR support.");
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
243 #endif
1590
8d1bcc83ae32 Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents: 1545
diff changeset
244 #ifdef WITH_ENCHANT
8d1bcc83ae32 Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents: 1545
diff changeset
245 puts("Compiled with Enchant support.");
8d1bcc83ae32 Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents: 1545
diff changeset
246 #endif
1257
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
247 #ifdef WITH_ASPELL
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
248 puts("Compiled with Aspell support.");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
249 #endif
1423
757ebe4df0b9 Replace DEBUG_ENABLE with ENABLE_DEBUG
Mikael Berthe <mikael@lilotux.net>
parents: 1421
diff changeset
250 #ifdef ENABLE_DEBUG
1257
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
251 puts("Compiled with debugging support.");
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
252 #endif
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
253 }
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
254
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
255 static void main_init_pgp(void)
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
256 {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
257 #ifdef HAVE_GPGME
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
258 const char *pk, *pp;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
259 char *typed_passwd = NULL;
1238
80008fe2a4f2 Re-enable gpg-agent (revert 591d8b35c881)
Mikael Berthe <mikael@lilotux.net>
parents: 1223
diff changeset
260 char *p;
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
261 bool pgp_invalid = FALSE;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
262 bool pgp_agent;
1313
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
263 int retries;
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
264
2196
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
265 pk = settings_opt_get("pgp_private_key");
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
266
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
267 if (!pk)
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
268 scr_LogPrint(LPRINT_LOGNORM, "WARNING: unknown PGP private key");
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
269
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
270 if (gpg_init(pk, NULL)) {
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
271 scr_LogPrint(LPRINT_LOGNORM, "WARNING: Could not initialize PGP.");
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
272 return;
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
273 }
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
274
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
275 // We're done if the PGP engine version is > 1
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
276 // since the agent is mandatory and password mechanism is external.
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
277 if (!gpg_is_version1())
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
278 return;
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
279
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
280
1238
80008fe2a4f2 Re-enable gpg-agent (revert 591d8b35c881)
Mikael Berthe <mikael@lilotux.net>
parents: 1223
diff changeset
281 p = getenv("GPG_AGENT_INFO");
80008fe2a4f2 Re-enable gpg-agent (revert 591d8b35c881)
Mikael Berthe <mikael@lilotux.net>
parents: 1223
diff changeset
282 pgp_agent = (p && strchr(p, ':'));
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
283
1313
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
284 if (settings_opt_get("pgp_passphrase_retries"))
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
285 retries = settings_opt_get_int("pgp_passphrase_retries");
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
286 else
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
287 retries = 2;
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
288
2196
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
289 pp = settings_opt_get("pgp_passphrase");
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
290
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
291 if (!pk) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
292 pgp_invalid = TRUE;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
293 } else if (!(pp || pgp_agent)) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
294 // Request PGP passphrase
1799
e73cd9377a4e Better UI message for password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 1780
diff changeset
295 pp = typed_passwd = ask_password("your PGP passphrase");
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
296 }
2196
8811fe9d6ef0 Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents: 2184
diff changeset
297 gpg_set_passphrase(pp);
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
298 // Erase password from the settings array
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
299 if (pp) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
300 memset((char*)pp, 0, strlen(pp));
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
301 if (typed_passwd)
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
302 g_free(typed_passwd);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
303 else
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
304 settings_set(SETTINGS_TYPE_OPTION, "pgp_passphrase", NULL);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
305 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
306 if (!pgp_agent && pk && pp && gpg_test_passphrase()) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
307 // Let's check the pasphrase
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
308 int i;
1313
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
309 for (i = 1; retries < 0 || i <= retries; i++) {
1799
e73cd9377a4e Better UI message for password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 1780
diff changeset
310 typed_passwd = ask_password("your PGP passphrase"); // Ask again...
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
311 if (typed_passwd) {
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
312 gpg_set_passphrase(typed_passwd);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
313 memset(typed_passwd, 0, strlen(typed_passwd));
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
314 g_free(typed_passwd);
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
315 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
316 if (!gpg_test_passphrase())
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
317 break; // Ok
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
318 }
1313
d1d12a09b04a Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
319 if (i > retries)
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
320 pgp_invalid = TRUE;
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
321 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
322 if (pgp_invalid)
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
323 scr_LogPrint(LPRINT_LOGNORM, "WARNING: PGP key/pass invalid");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
324 #else /* not HAVE_GPGME */
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
325 scr_LogPrint(LPRINT_LOGNORM, "WARNING: not compiled with PGP support");
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
326 #endif /* HAVE_GPGME */
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
327 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
328
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
329 void mcabber_set_terminate_ui(void)
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
330 {
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
331 terminate_ui = TRUE;
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
332 }
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1313
diff changeset
333
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
334 typedef struct {
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
335 GSource source;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
336 GPollFD pollfd;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
337 } mcabber_source_t;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
338
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
339 static gboolean mcabber_source_prepare(GSource *source, gint *timeout)
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
340 {
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
341 *timeout = -1;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
342 return FALSE;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
343 }
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
344
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
345 static gboolean mcabber_source_check(GSource *source)
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
346 {
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
347 mcabber_source_t *mc_source = (mcabber_source_t *) source;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
348 gushort revents = mc_source->pollfd.revents;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
349 if (revents)
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
350 return TRUE;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
351 return FALSE;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
352 }
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
353
1657
c4ee6d99f75b Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents: 1653
diff changeset
354 static gboolean keyboard_activity(void)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
355 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
356 keycode kcode;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
357
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
358 if (terminate_ui) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
359 return FALSE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
360 }
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
361 scr_do_update();
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
362 scr_getch(&kcode);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
363
1618
9296987856d9 Process keycodes faster
franky
parents: 1610
diff changeset
364 while (kcode.value != ERR) {
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
365 scr_process_key(kcode);
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
366 scr_getch(&kcode);
1618
9296987856d9 Process keycodes faster
franky
parents: 1610
diff changeset
367 }
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
368 scr_check_auto_away(FALSE);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
369
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
370 return TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
371 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
372
1657
c4ee6d99f75b Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents: 1653
diff changeset
373 static gboolean mcabber_source_dispatch(GSource *source, GSourceFunc callback,
c4ee6d99f75b Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents: 1653
diff changeset
374 gpointer udata) {
c4ee6d99f75b Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents: 1653
diff changeset
375 return keyboard_activity();
c4ee6d99f75b Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents: 1653
diff changeset
376 }
c4ee6d99f75b Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents: 1653
diff changeset
377
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
378 static GSourceFuncs mcabber_source_funcs = {
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
379 mcabber_source_prepare,
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
380 mcabber_source_check,
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
381 mcabber_source_dispatch,
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
382 NULL,
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
383 NULL,
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
384 NULL
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
385 };
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
386
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
387 int main(int argc, char **argv)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
388 {
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 165
diff changeset
389 char *configFile = NULL;
281
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
390 const char *optstring;
177
a51ce78a0e2a [/trunk] Changeset 189 by mikael
mikael
parents: 170
diff changeset
391 int optval, optval2;
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
392 int ret;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
393
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
394 credits();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
395
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
396 signal(SIGTERM, sig_handler);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
397 signal(SIGINT, sig_handler);
2071
a5acc2a1af53 Adds SIGHUP to signal handling.
Dominik George <nik@naturalnet.de>
parents: 2042
diff changeset
398 signal(SIGHUP, sig_handler);
163
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
399 signal(SIGCHLD, sig_handler);
1454
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
400 #ifdef USE_SIGWINCH
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
401 signal(SIGWINCH, sig_handler);
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1448
diff changeset
402 #endif
413
f7e4b0424081 Ignore SIGPIPE
Mikael Berthe <mikael@lilotux.net>
parents: 404
diff changeset
403 signal(SIGPIPE, SIG_IGN);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
404
77
32f54ad6d729 [/trunk] Changeset 91 by mikael
mikael
parents: 70
diff changeset
405 /* Parse command line options */
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
406 while (1) {
1259
c5c09f8f60b0 Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents: 1257
diff changeset
407 int c = getopt(argc, argv, "hVf:");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
408 if (c == -1) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
409 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
410 } else
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
411 switch (c) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
412 case 'h':
1256
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
413 case '?':
1259
c5c09f8f60b0 Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents: 1257
diff changeset
414 printf("Usage: %s [-h|-V|-f mcabberrc_file]\n\n", argv[0]);
1256
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
415 return (c == 'h' ? 0 : -1);
1259
c5c09f8f60b0 Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents: 1257
diff changeset
416 case 'V':
1257
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
417 compile_options();
05dc45e7c7bb Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents: 1256
diff changeset
418 return 0;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
419 case 'f':
1241
3a4018f18bdf Cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 1238
diff changeset
420 configFile = g_strdup(optarg);
3a4018f18bdf Cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 1238
diff changeset
421 break;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
422 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
423 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
424
1256
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
425 if (optind < argc) {
1259
c5c09f8f60b0 Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents: 1257
diff changeset
426 fprintf(stderr, "Usage: %s [-h|-V|-f mcabberrc_file]\n\n", argv[0]);
1256
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
427 return -1;
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
428 }
ea679e3598a9 Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents: 1253
diff changeset
429
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
430 /* Initialize command system, roster and default key bindings */
2042
0cb8ea02e472 Make completion sorting order configurable
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1995
diff changeset
431 compl_init_system();
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
432 cmd_init();
848
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 815
diff changeset
433 roster_init();
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
434 settings_init();
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
435 scr_init_bindings();
2101
f56c214a19dc Add a guard for 'attention_char'
Mikael Berthe <mikael@lilotux.net>
parents: 2071
diff changeset
436 scr_init_settings();
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
437 caps_init();
1735
5093b5ca1572 New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1729
diff changeset
438 #ifdef MODULES_ENABLE
5093b5ca1572 New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1729
diff changeset
439 modules_init();
5093b5ca1572 New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1729
diff changeset
440 #endif
779
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 777
diff changeset
441 /* Initialize charset */
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
442 scr_init_locale_charset();
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
443 ut_init_debug();
1678
e489ead6574a New help system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1674
diff changeset
444 help_init();
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
445
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
446 /* Parsing config file... */
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1179
diff changeset
447 ret = cfg_read_file(configFile, TRUE);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
448 /* 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
449 g_free(configFile);
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
450 /* 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
451 if (ret == -2)
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
452 exit(EXIT_FAILURE);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
453
1894
c3271ac96173 Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents: 1811
diff changeset
454 /* Display configuration settings */
c3271ac96173 Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents: 1811
diff changeset
455 {
c3271ac96173 Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents: 1811
diff changeset
456 const char *p;
c3271ac96173 Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents: 1811
diff changeset
457 if ((p = settings_opt_get("server")) != NULL)
c3271ac96173 Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents: 1811
diff changeset
458 scr_log_print(LPRINT_NORMAL, "Server: %s", p);
1900
5dc0fd8225e3 Display a warning when the configuration file hasn't been updated
Mikael Berthe <mikael@lilotux.net>
parents: 1897
diff changeset
459 if ((p = settings_opt_get("jid")) != NULL) {
1894
c3271ac96173 Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents: 1811
diff changeset
460 scr_log_print(LPRINT_NORMAL, "User JID: %s", p);
1916
a87ac75872fe Display a warning when the option ssl_verify is still used
Mikael Berthe <mikael@lilotux.net>
parents: 1901
diff changeset
461 }
1894
c3271ac96173 Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents: 1811
diff changeset
462 }
c3271ac96173 Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents: 1811
diff changeset
463
306
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
464 /* 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
465 ncurses mode -- unless the username is unknown. */
1610
6db9f403f707 Replace 'username' with 'jid' in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1607
diff changeset
466 if (settings_opt_get("jid") && !settings_opt_get("password")) {
2173
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
467 const char *pass_eval = settings_opt_get("password_eval");
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
468 if (pass_eval) {
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
469 int status = 0;
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
470 char *pwd = password_eval(pass_eval, &status);
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
471 if (status == 0 && pwd) {
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
472 settings_set(SETTINGS_TYPE_OPTION, "password", pwd);
2172
06669fc1810c Add support for using external password managers
Christian Burkert <post@cburkert.de>
parents: 2134
diff changeset
473 }
2173
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
474 g_free(pwd);
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
475 }
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
476 // If the password is still unset, ask the user...
cf08c3b630af Tweak the previous change...
Mikael Berthe <mikael@lilotux.net>
parents: 2172
diff changeset
477 if (!settings_opt_get("password")) {
2172
06669fc1810c Add support for using external password managers
Christian Burkert <post@cburkert.de>
parents: 2134
diff changeset
478 char *pwd = ask_password("your Jabber password");
06669fc1810c Add support for using external password managers
Christian Burkert <post@cburkert.de>
parents: 2134
diff changeset
479 settings_set(SETTINGS_TYPE_OPTION, "password", pwd);
06669fc1810c Add support for using external password managers
Christian Burkert <post@cburkert.de>
parents: 2134
diff changeset
480 g_free(pwd);
06669fc1810c Add support for using external password managers
Christian Burkert <post@cburkert.de>
parents: 2134
diff changeset
481 }
415
5692c3a13202 Display the server name/IP before asking for password
Mikael Berthe <mikael@lilotux.net>
parents: 413
diff changeset
482 }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
483
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
484 /* Initialize PGP system
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
485 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
486 a passphrase. */
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
487 if (settings_opt_get_int("pgp"))
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
488 main_init_pgp();
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
489
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
490 /* Initialize N-Curses */
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
491 scr_LogPrint(LPRINT_DEBUG, "Initializing N-Curses...");
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
492 scr_init_curses();
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
493 scr_draw_main_window(TRUE);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents: 28
diff changeset
494
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
495 optval = (settings_opt_get_int("logging") > 0);
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
496 optval2 = (settings_opt_get_int("load_logs") > 0);
177
a51ce78a0e2a [/trunk] Changeset 189 by mikael
mikael
parents: 170
diff changeset
497 if (optval || optval2)
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
498 hlog_enable(optval, settings_opt_get("logging_dir"), optval2);
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents: 112
diff changeset
499
1590
8d1bcc83ae32 Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents: 1545
diff changeset
500 #if defined(WITH_ENCHANT) || defined(WITH_ASPELL)
8d1bcc83ae32 Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents: 1545
diff changeset
501 /* Initialize spelling */
8d1bcc83ae32 Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents: 1545
diff changeset
502 if (settings_opt_get_int("spell_enable")) {
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
503 spellcheck_init();
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
504 }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
505 #endif
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
506
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
507 optstring = settings_opt_get("events_command");
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
508 if (optstring)
160
44c6410b4845 [/trunk] Changeset 172 by mikael
mikael
parents: 156
diff changeset
509 hk_ext_cmd_init(optstring);
44c6410b4845 [/trunk] Changeset 172 by mikael
mikael
parents: 156
diff changeset
510
1632
d29376ef424d Remove deprecated option ('hide_offline_buddies')
Mikael Berthe <mikael@lilotux.net>
parents: 1630
diff changeset
511 optstring = settings_opt_get("roster_display_filter");
d29376ef424d Remove deprecated option ('hide_offline_buddies')
Mikael Berthe <mikael@lilotux.net>
parents: 1630
diff changeset
512 if (optstring)
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
513 scr_roster_display(optstring);
1632
d29376ef424d Remove deprecated option ('hide_offline_buddies')
Mikael Berthe <mikael@lilotux.net>
parents: 1630
diff changeset
514 // Empty filter isn't allowed...
d29376ef424d Remove deprecated option ('hide_offline_buddies')
Mikael Berthe <mikael@lilotux.net>
parents: 1630
diff changeset
515 if (!buddylist_get_filter())
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
516 scr_roster_display("*");
87
f600615c490d [/trunk] Changeset 101 by mikael
mikael
parents: 81
diff changeset
517
993
0759f4c7da68 Add option 'disable_chatstates'
Mikael Berthe <mikael@lilotux.net>
parents: 962
diff changeset
518 chatstates_disabled = settings_opt_get_int("disable_chatstates");
0759f4c7da68 Add option 'disable_chatstates'
Mikael Berthe <mikael@lilotux.net>
parents: 962
diff changeset
519
1941
2256d0626730 Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1940
diff changeset
520 #ifndef MODULES_ENABLE
1426
a64778f5f26b Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents: 1425
diff changeset
521 /* Initialize FIFO named pipe */
1940
7eadf86039e6 Use guard for the fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1936
diff changeset
522 fifo_init();
1941
2256d0626730 Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1940
diff changeset
523 #endif
1426
a64778f5f26b Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents: 1425
diff changeset
524
1437
071c8170b7de Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
525 /* Load previous roster state */
071c8170b7de Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
526 hlog_load_state();
071c8170b7de Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
527
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
528 main_context = g_main_context_default();
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
529
872
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
530 if (ret < 0) {
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
531 scr_LogPrint(LPRINT_NORMAL, "No configuration file has been found.");
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
532 scr_show_buddy_window();
872
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
533 } else {
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
534 /* Connection */
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1799
diff changeset
535 if (xmpp_connect())
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1799
diff changeset
536 scr_show_buddy_window();
872
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 855
diff changeset
537 }
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
538
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1799
diff changeset
539 // Initial drawing
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1799
diff changeset
540 scr_draw_roster();
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1799
diff changeset
541 scr_do_update();
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1799
diff changeset
542
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
543 { // add keypress processing source
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
544 GSource *mc_source = g_source_new(&mcabber_source_funcs,
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
545 sizeof(mcabber_source_t));
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
546 GPollFD *mc_pollfd = &(((mcabber_source_t *)mc_source)->pollfd);
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
547 mc_pollfd->fd = STDIN_FILENO;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
548 mc_pollfd->events = POLLIN|POLLERR|POLLPRI;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
549 mc_pollfd->revents = 0;
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
550 g_source_add_poll(mc_source, mc_pollfd);
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
551 g_source_attach(mc_source, main_context);
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
552
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
553 scr_LogPrint(LPRINT_DEBUG, "Entering into main loop...");
112
edb5591e2e64 [/trunk] Changeset 126 by mikael
mikael
parents: 102
diff changeset
554
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
555 while(!terminate_ui) {
1657
c4ee6d99f75b Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents: 1653
diff changeset
556 if (g_main_context_iteration(main_context, TRUE) == FALSE)
c4ee6d99f75b Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents: 1653
diff changeset
557 keyboard_activity();
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
558 if (update_roster)
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
559 scr_draw_roster();
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1764
diff changeset
560 scr_do_update();
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
561 }
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
562
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
563 g_source_destroy(mc_source);
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
564 g_source_unref(mc_source);
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1643
diff changeset
565 }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
566
1685
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1678
diff changeset
567 evs_deinit();
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1600
diff changeset
568 #ifdef MODULES_ENABLE
1735
5093b5ca1572 New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1729
diff changeset
569 modules_deinit();
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1600
diff changeset
570 #endif
1941
2256d0626730 Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1940
diff changeset
571 #ifndef MODULES_ENABLE
1426
a64778f5f26b Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents: 1425
diff changeset
572 fifo_deinit();
1941
2256d0626730 Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1940
diff changeset
573 #endif
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
574 #ifdef HAVE_LIBOTR
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
575 otr_terminate();
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1259
diff changeset
576 #endif
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1597
diff changeset
577 xmpp_disconnect();
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
578 #ifdef HAVE_GPGME
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
579 gpg_terminate();
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
580 #endif
1590
8d1bcc83ae32 Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents: 1545
diff changeset
581 #if defined(WITH_ENCHANT) || defined(WITH_ASPELL)
8d1bcc83ae32 Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents: 1545
diff changeset
582 /* Deinitialize spelling */
8d1bcc83ae32 Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents: 1545
diff changeset
583 if (settings_opt_get_int("spell_enable"))
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
584 spellcheck_deinit();
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1176
diff changeset
585 #endif
1936
9e6e53821fb3 Do not terminate ncurses too early
Mikael Berthe <mikael@lilotux.net>
parents: 1922
diff changeset
586
9e6e53821fb3 Do not terminate ncurses too early
Mikael Berthe <mikael@lilotux.net>
parents: 1922
diff changeset
587 scr_terminate_curses();
1437
071c8170b7de Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
588 /* Save pending message state */
071c8170b7de Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
589 hlog_save_state();
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
590 caps_free();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
591
961
95659cf9ea1a Display mcabber version in the status window
Mikael Berthe <mikael@lilotux.net>
parents: 955
diff changeset
592 printf("\n\nThanks for using mcabber!\n");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
593
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
594 return 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
595 }
576
8b3db0b555a1 Add Vim modelines
Mikael Berthe <mikael@lilotux.net>
parents: 542
diff changeset
596
1811
e6d355e50d7a Update Vim modelines
Mikael Berthe <mikael@lilotux.net>
parents: 1810
diff changeset
597 /* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2: For Vim users... */