annotate mcabber/src/main.c @ 403:17aa60c6dc63

Allow a different server name than the jid domain name Sync libjabber with upstream (centericq). The libjabber patch is from Ian Johannesen. This allows connecting to Google Talk, for example.
author Mikael Berthe <mikael@lilotux.net>
date Sat, 27 Aug 2005 11:21:27 +0200
parents f8f3c7493457
children fb2325d24d13
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 *
307
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
4 * Copyright (C) 2005 Mikael Berthe <bmikael@lists.lilotux.net>
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
5 * Parts of this file come from Cabber <cabber@ajmacias.com>
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
6 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
7 * This program is free software; you can redistribute it and/or modify
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
8 * it under the terms of the GNU General Public License as published by
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or (at
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
10 * your option) any later version.
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
11 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
12 * This program is distributed in the hope that it will be useful, but
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
15 * General Public License for more details.
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
16 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
17 * You should have received a copy of the GNU General Public License
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
18 * along with this program; if not, write to the Free Software
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
20 * USA
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
21 */
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
22
149
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 138
diff changeset
23 #define _GNU_SOURCE
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
24 #include <stdio.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
25 #include <stdlib.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
26 #include <unistd.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
27 #include <string.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
28 #include <signal.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
29 #include <termios.h>
28
0cd8025eebee [/trunk] Changeset 44 by mikael
mikael
parents: 27
diff changeset
30 #include <getopt.h>
163
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
31 #include <sys/types.h>
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
32 #include <sys/wait.h>
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 165
diff changeset
33 #include <glib.h>
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
34
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 77
diff changeset
35 #include "jabglue.h"
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
36 #include "screen.h"
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
37 #include "settings.h"
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 96
diff changeset
38 #include "roster.h"
96
8b2703ccc4be [/trunk] Changeset 110 by mikael
mikael
parents: 88
diff changeset
39 #include "commands.h"
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents: 112
diff changeset
40 #include "histolog.h"
163
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
41 #include "hooks.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 77
diff changeset
42 #include "utils.h"
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
43 #include "harddefines.h"
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
44
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
45
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
46 void mcabber_connect(void)
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
47 {
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
48 const char *username, *password, *resource, *servername;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
49 char *jid;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
50 int ssl;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
51 unsigned int port;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
52
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
53 servername = settings_opt_get("server");
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
54 username = settings_opt_get("username");
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
55 password = settings_opt_get("password");
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
56 resource = settings_opt_get("resource");
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
57
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
58 if (!servername) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
59 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
60 return;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
61 }
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
62 if (!username) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
63 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
64 return;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
65 }
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
66 if (!password) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
67 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
68 return;
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
69 }
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
70 if (!resource)
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
71 resource = "mcabber";
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
72
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
73 ssl = (settings_opt_get_int("ssl") > 0);
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
74 port = (unsigned int) settings_opt_get_int("port");
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
75
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
76 jb_set_priority(settings_opt_get_int("priority"));
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
77
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
78 /* Connect to server */
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
79 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, "Connecting to server: %s",
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
80 servername);
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
81 if (port)
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
82 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
83
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
84 jid = compose_jid(username, servername, resource);
403
17aa60c6dc63 Allow a different server name than the jid domain name
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
85 jc = jb_connect(jid, servername, port, ssl, password);
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
86 g_free(jid);
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
87
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
88 if (!jc)
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
89 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
90
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
91 jb_reset_keepalive();
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
92 }
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
93
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
94 void mcabber_disconnect(const char *msg)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
95 {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
96 jb_disconnect();
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
97 scr_TerminateCurses();
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
98 if (msg)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
99 fprintf(stderr, "%s\n", msg);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
100 printf("Bye!\n");
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
101 exit(EXIT_SUCCESS);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
102 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
103
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
104 void sig_handler(int signum)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
105 {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
106 if (signum == SIGCHLD) {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
107 int status;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
108 pid_t pid;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
109 do {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
110 pid = waitpid (WAIT_ANY, &status, WNOHANG);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
111 } while (pid > 0);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
112 //if (pid < 0)
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
113 // scr_LogPrint(LPRINT_LOGNORM, "Error in waitpid: errno=%d", errno);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
114 signal(SIGCHLD, sig_handler);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
115 } else if (signum == SIGTERM) {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
116 mcabber_disconnect("Killed by SIGTERM");
389
6e895f397474 Ncurses changes + Ctrl-C does not send a signal anylore
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
117 } else if (signum == SIGINT) {
6e895f397474 Ncurses changes + Ctrl-C does not send a signal anylore
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
118 mcabber_disconnect("Killed by SIGINT");
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
119 } else {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
120 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
121 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
122 }
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
123
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 333
diff changeset
124 static void ask_password(void)
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
125 {
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
126 char *password, *p;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
127 size_t passsize = 128;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
128 struct termios orig, new;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
129 int nread;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
130
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
131 /* Turn echoing off and fail if we can't. */
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
132 if (tcgetattr(fileno(stdin), &orig) != 0) return;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
133 new = orig;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
134 new.c_lflag &= ~ECHO;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
135 if (tcsetattr(fileno(stdin), TCSAFLUSH, &new) != 0) return;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
136
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
137 /* Read the password. */
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
138 password = NULL;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
139 printf("Please enter password: ");
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
140 nread = getline(&password, &passsize, stdin);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
141
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
142 /* Restore terminal. */
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
143 tcsetattr(fileno(stdin), TCSAFLUSH, &orig);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
144 printf("\n");
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
145
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
146 if (nread == -1 || !password) return;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
147
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
148 for (p = (char*)password; *p; p++)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
149 ;
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
150 for ( ; p > (char*)password ; p--)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
151 if (*p == '\n' || *p == '\r') *p = 0;
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 settings_set(SETTINGS_TYPE_OPTION, "password", password);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
154 free(password);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
155 return;
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
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 333
diff changeset
158 static void credits(void)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
159 {
53
5690d6c2e48c [/trunk] Changeset 69 by mikael
mikael
parents: 36
diff changeset
160 printf(MCABBER_VERSION "\n");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
161 printf(EMAIL "\n");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
162 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
163
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
164 int main(int argc, char **argv)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
165 {
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 165
diff changeset
166 char *configFile = NULL;
281
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
167 const char *optstring;
177
a51ce78a0e2a [/trunk] Changeset 189 by mikael
mikael
parents: 170
diff changeset
168 int optval, optval2;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
169 int key;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
170 unsigned int ping;
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
171 int ret;
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
172 unsigned int refresh = 0;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
173
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
174 credits();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
175
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
176 signal(SIGTERM, sig_handler);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
177 signal(SIGINT, sig_handler);
163
a8f7dc0a56cb [/trunk] Changeset 175 by mikael
mikael
parents: 160
diff changeset
178 signal(SIGCHLD, sig_handler);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
179
77
32f54ad6d729 [/trunk] Changeset 91 by mikael
mikael
parents: 70
diff changeset
180 /* Parse command line options */
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
181 while (1) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
182 int c = getopt(argc, argv, "hf:");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
183 if (c == -1) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
184 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
185 } else
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
186 switch (c) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
187 case 'h':
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
188 printf("Usage: %s [-f mcabberrc_file]\n\n", argv[0]);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
189 printf("Thanks to AjMacias for cabber!\n\n");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
190 return 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
191 case 'f':
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 165
diff changeset
192 configFile = g_strdup(optarg);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
193 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
194 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
195 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
196
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
197 /* Initialize commands system */
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
198 cmd_init();
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
199
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
200 /* Parsing config file... */
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 336
diff changeset
201 ret = cfg_read_file(configFile);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
202 /* free() configFile if it has been allocated during options parsing */
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 165
diff changeset
203 if (configFile) g_free(configFile);
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
204 /* Leave if there was an error in the config. file */
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
205 if (ret)
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
206 exit(EXIT_FAILURE);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
207
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
208 optstring = settings_opt_get("tracelog_file");
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
209 if (optstring)
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
210 ut_InitDebug(settings_opt_get_int("tracelog_level"), optstring);
138
250f872c722f [/trunk] Changeset 150 by mikael
mikael
parents: 135
diff changeset
211
306
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
212 /* If no password is stored, we ask for it before entering
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
213 ncurses mode */
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
214 if (!settings_opt_get("password"))
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
215 ask_password();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
216
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
217 /* Initialize N-Curses */
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
218 scr_LogPrint(LPRINT_DEBUG, "Initializing N-Curses...");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
219 scr_InitCurses();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
220
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
221 scr_LogPrint(LPRINT_DEBUG, "Drawing main window...");
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
222 scr_DrawMainWindow(TRUE);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents: 28
diff changeset
223
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
224 optval = (settings_opt_get_int("logging") > 0);
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
225 optval2 = (settings_opt_get_int("load_logs") > 0);
177
a51ce78a0e2a [/trunk] Changeset 189 by mikael
mikael
parents: 170
diff changeset
226 if (optval || optval2)
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
227 hlog_enable(optval, settings_opt_get("logging_dir"), optval2);
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents: 112
diff changeset
228
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
229 optstring = settings_opt_get("events_command");
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
230 if (optstring)
160
44c6410b4845 [/trunk] Changeset 172 by mikael
mikael
parents: 156
diff changeset
231 hk_ext_cmd_init(optstring);
44c6410b4845 [/trunk] Changeset 172 by mikael
mikael
parents: 156
diff changeset
232
112
edb5591e2e64 [/trunk] Changeset 126 by mikael
mikael
parents: 102
diff changeset
233 ping = 40;
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
234 if (settings_opt_get("pinginterval"))
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
235 ping = (unsigned int) settings_opt_get_int("pinginterval");
112
edb5591e2e64 [/trunk] Changeset 126 by mikael
mikael
parents: 102
diff changeset
236 jb_set_keepalive_delay(ping);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
237 scr_LogPrint(LPRINT_DEBUG, "Ping interval established: %d secs", ping);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
238
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 272
diff changeset
239 if (settings_opt_get_int("hide_offline_buddies") > 0)
120
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 113
diff changeset
240 buddylist_set_hide_offline_buddies(TRUE);
87
f600615c490d [/trunk] Changeset 101 by mikael
mikael
parents: 81
diff changeset
241
306
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
242 /* Connection */
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
243 if (settings_opt_get("password"))
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
244 mcabber_connect();
b2d11b11675f Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents: 300
diff changeset
245 else
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
246 scr_LogPrint(LPRINT_LOGNORM, "Can't connect: no password supplied");
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
247
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
248 scr_LogPrint(LPRINT_DEBUG, "Entering into main loop...");
112
edb5591e2e64 [/trunk] Changeset 126 by mikael
mikael
parents: 102
diff changeset
249
333
db5bebe96c89 New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
250 for (ret = 0 ; ret != 255 ; ) {
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
251 key = scr_Getch();
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
252
307
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
253 /* The refresh is really an ugly hack, but we need to call doupdate()
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
254 from time to time to catch the RESIZE events, because getch keep
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
255 returning ERR until a real key is pressed :-(
322
da138cdebf04 Implement auto-away mode
Mikael Berthe <mikael@lilotux.net>
parents: 314
diff changeset
256 However, it allows us to handle an autoaway check here...
307
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 306
diff changeset
257 */
156
439b750d99fa [/trunk] Changeset 168 by mikael
mikael
parents: 152
diff changeset
258 if (key != ERR) {
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents: 28
diff changeset
259 ret = process_key(key);
156
439b750d99fa [/trunk] Changeset 168 by mikael
mikael
parents: 152
diff changeset
260 refresh = 0;
439b750d99fa [/trunk] Changeset 168 by mikael
mikael
parents: 152
diff changeset
261 } else if (refresh++ > 1) {
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
262 doupdate();
152
05f606cfb9e4 [/trunk] Changeset 164 by mikael
mikael
parents: 151
diff changeset
263 refresh = 0;
322
da138cdebf04 Implement auto-away mode
Mikael Berthe <mikael@lilotux.net>
parents: 314
diff changeset
264 scr_CheckAutoAway(FALSE);
152
05f606cfb9e4 [/trunk] Changeset 164 by mikael
mikael
parents: 151
diff changeset
265 }
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
266
152
05f606cfb9e4 [/trunk] Changeset 164 by mikael
mikael
parents: 151
diff changeset
267 if (key != KEY_RESIZE)
05f606cfb9e4 [/trunk] Changeset 164 by mikael
mikael
parents: 151
diff changeset
268 jb_main();
36
8f1a5e79ca40 [/trunk] Changeset 52 by mikael
mikael
parents: 35
diff changeset
269 if (update_roster)
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 77
diff changeset
270 scr_DrawRoster();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
271 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
272
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
273 jb_disconnect();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
274 scr_TerminateCurses();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
275
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
276 printf("\n\nHave a nice day!\nBye!\n");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
277
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
278 return 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
279 }