comparison mcabber/src/main.c @ 374:bd5638c21834

Improve logging system (traces) There are now two trace logging levels: * tracelog_level = 1: Most messages from the log window are written to disk (LPRINT_LOG) * tracelog_level =2: LPRINT_LOG & LPRINT_DEBUG messages are written to disk The trace file name is set with the "tracelog_file" option.
author Mikael Berthe <mikael@lilotux.net>
date Mon, 25 Jul 2005 21:46:35 +0100
parents 33b8e801ffa6
children 6e895f397474
comparison
equal deleted inserted replaced
373:af2f8ddf6a1b 374:bd5638c21834
54 username = settings_opt_get("username"); 54 username = settings_opt_get("username");
55 password = settings_opt_get("password"); 55 password = settings_opt_get("password");
56 resource = settings_opt_get("resource"); 56 resource = settings_opt_get("resource");
57 57
58 if (!servername) { 58 if (!servername) {
59 scr_LogPrint("Server name has not been specified!\n"); 59 scr_LogPrint(LPRINT_NORMAL, "Server name has not been specified!");
60 return; 60 return;
61 } 61 }
62 if (!username) { 62 if (!username) {
63 scr_LogPrint("User name has not been specified!\n"); 63 scr_LogPrint(LPRINT_NORMAL, "User name has not been specified!");
64 return; 64 return;
65 } 65 }
66 if (!password) { 66 if (!password) {
67 scr_LogPrint("Password has not been specified!\n"); 67 scr_LogPrint(LPRINT_NORMAL, "Password has not been specified!");
68 return; 68 return;
69 } 69 }
70 if (!resource) 70 if (!resource)
71 resource = "mcabber"; 71 resource = "mcabber";
72 72
74 port = (unsigned int) settings_opt_get_int("port"); 74 port = (unsigned int) settings_opt_get_int("port");
75 75
76 jb_set_priority(settings_opt_get_int("priority")); 76 jb_set_priority(settings_opt_get_int("priority"));
77 77
78 /* Connect to server */ 78 /* Connect to server */
79 ut_WriteLog("Connecting to server: %s\n", servername); 79 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, "Connecting to server: %s",
80 scr_LogPrint("Connecting to server: %s", servername); 80 servername);
81 if (port) { 81 if (port)
82 ut_WriteLog(" using port %d\n", port); 82 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, " using port %d", port);
83 scr_LogPrint(" using port %d", port);
84 }
85 83
86 jid = compose_jid(username, servername, resource); 84 jid = compose_jid(username, servername, resource);
87 jc = jb_connect(jid, port, ssl, password); 85 jc = jb_connect(jid, port, ssl, password);
88 g_free(jid); 86 g_free(jid);
89 87
90 if (!jc) { 88 if (!jc)
91 ut_WriteLog("\tConnection error!!!\n"); 89 scr_LogPrint(LPRINT_LOGNORM, "Error connecting to (%s)", servername);
92 scr_LogPrint("Error connecting to (%s)\n", servername);
93 }
94 90
95 jb_reset_keepalive(); 91 jb_reset_keepalive();
96 } 92 }
97 93
98 void mcabber_disconnect(const char *msg) 94 void mcabber_disconnect(const char *msg)
112 pid_t pid; 108 pid_t pid;
113 do { 109 do {
114 pid = waitpid (WAIT_ANY, &status, WNOHANG); 110 pid = waitpid (WAIT_ANY, &status, WNOHANG);
115 } while (pid > 0); 111 } while (pid > 0);
116 //if (pid < 0) 112 //if (pid < 0)
117 // ut_WriteLog("Error in waitpid: errno=%d\n", errno); 113 // scr_LogPrint(LPRINT_LOGNORM, "Error in waitpid: errno=%d", errno);
118 signal(SIGCHLD, sig_handler); 114 signal(SIGCHLD, sig_handler);
119 } else if (signum == SIGTERM) { 115 } else if (signum == SIGTERM) {
120 mcabber_disconnect("Killed by SIGTERM"); 116 mcabber_disconnect("Killed by SIGTERM");
121 } else if (signum == SIGINT) { // Ctrl-C 117 } else if (signum == SIGINT) { // Ctrl-C
122 static time_t LastSigtermTime; 118 static time_t LastSigtermTime;
126 if (now - LastSigtermTime < 2) 122 if (now - LastSigtermTime < 2)
127 mcabber_disconnect("Killed by SIGINT"); 123 mcabber_disconnect("Killed by SIGINT");
128 LastSigtermTime = now; 124 LastSigtermTime = now;
129 signal(SIGINT, sig_handler); 125 signal(SIGINT, sig_handler);
130 scr_handle_sigint(); 126 scr_handle_sigint();
131 scr_LogPrint("Hit Ctrl-C twice to leave mcabber"); 127 scr_LogPrint(LPRINT_NORMAL, "Hit Ctrl-C twice to leave mcabber");
132 } else { 128 } else {
133 ut_WriteLog("Caught signal: %d\n", signum); 129 scr_LogPrint(LPRINT_LOGNORM, "Caught signal: %d", signum);
134 } 130 }
135 } 131 }
136 132
137 static void ask_password(void) 133 static void ask_password(void)
138 { 134 {
184 int ret; 180 int ret;
185 unsigned int refresh = 0; 181 unsigned int refresh = 0;
186 182
187 credits(); 183 credits();
188 184
189 /* Set this >0 to enable log */
190 /* Note: debug can be enabled via the config file */
191 ut_InitDebug(0, NULL);
192
193 ut_WriteLog("Setting signals handlers...\n");
194 signal(SIGTERM, sig_handler); 185 signal(SIGTERM, sig_handler);
195 signal(SIGINT, sig_handler); 186 signal(SIGINT, sig_handler);
196 signal(SIGCHLD, sig_handler); 187 signal(SIGCHLD, sig_handler);
197 188
198 /* Parse command line options */ 189 /* Parse command line options */
213 } 204 }
214 205
215 /* Initialize commands system */ 206 /* Initialize commands system */
216 cmd_init(); 207 cmd_init();
217 208
218 if (configFile)
219 ut_WriteLog("Setting config file: %s\n", configFile);
220
221 /* Parsing config file... */ 209 /* Parsing config file... */
222 ut_WriteLog("Parsing config file...\n");
223 ret = cfg_read_file(configFile); 210 ret = cfg_read_file(configFile);
211 /* free() configFile if it has been allocated during options parsing */
224 if (configFile) g_free(configFile); 212 if (configFile) g_free(configFile);
225 /* Leave if there was an error in the config. file */ 213 /* Leave if there was an error in the config. file */
226 if (ret) 214 if (ret)
227 exit(EXIT_FAILURE); 215 exit(EXIT_FAILURE);
228 216
229 optstring = settings_opt_get("debug"); 217 optstring = settings_opt_get("tracelog_file");
230 if (optstring) ut_InitDebug(1, optstring); 218 if (optstring)
219 ut_InitDebug(settings_opt_get_int("tracelog_level"), optstring);
231 220
232 /* If no password is stored, we ask for it before entering 221 /* If no password is stored, we ask for it before entering
233 ncurses mode */ 222 ncurses mode */
234 if (!settings_opt_get("password")) 223 if (!settings_opt_get("password"))
235 ask_password(); 224 ask_password();
236 225
237 /* Initialize N-Curses */ 226 /* Initialize N-Curses */
238 ut_WriteLog("Initializing N-Curses...\n"); 227 scr_LogPrint(LPRINT_DEBUG, "Initializing N-Curses...");
239 scr_InitCurses(); 228 scr_InitCurses();
240 229
241 ut_WriteLog("Drawing main window...\n"); 230 scr_LogPrint(LPRINT_DEBUG, "Drawing main window...");
242 scr_DrawMainWindow(TRUE); 231 scr_DrawMainWindow(TRUE);
243 232
244 optval = (settings_opt_get_int("logging") > 0); 233 optval = (settings_opt_get_int("logging") > 0);
245 optval2 = (settings_opt_get_int("load_logs") > 0); 234 optval2 = (settings_opt_get_int("load_logs") > 0);
246 if (optval || optval2) 235 if (optval || optval2)
252 241
253 ping = 40; 242 ping = 40;
254 if (settings_opt_get("pinginterval")) 243 if (settings_opt_get("pinginterval"))
255 ping = (unsigned int) settings_opt_get_int("pinginterval"); 244 ping = (unsigned int) settings_opt_get_int("pinginterval");
256 jb_set_keepalive_delay(ping); 245 jb_set_keepalive_delay(ping);
257 ut_WriteLog("Ping interval stablished: %d secs\n", ping); 246 scr_LogPrint(LPRINT_DEBUG, "Ping interval established: %d secs", ping);
258 247
259 if (settings_opt_get_int("hide_offline_buddies") > 0) 248 if (settings_opt_get_int("hide_offline_buddies") > 0)
260 buddylist_set_hide_offline_buddies(TRUE); 249 buddylist_set_hide_offline_buddies(TRUE);
261 250
262 /* Connection */ 251 /* Connection */
263 if (settings_opt_get("password")) 252 if (settings_opt_get("password"))
264 mcabber_connect(); 253 mcabber_connect();
265 else 254 else
266 scr_LogPrint("Can't connect: no password supplied"); 255 scr_LogPrint(LPRINT_LOGNORM, "Can't connect: no password supplied");
267 256
268 ut_WriteLog("Entering into main loop...\n\n"); 257 scr_LogPrint(LPRINT_DEBUG, "Entering into main loop...");
269 ut_WriteLog("Ready to send/receive messages...\n");
270 258
271 for (ret = 0 ; ret != 255 ; ) { 259 for (ret = 0 ; ret != 255 ; ) {
272 key = scr_Getch(); 260 key = scr_Getch();
273 261
274 /* The refresh is really an ugly hack, but we need to call doupdate() 262 /* The refresh is really an ugly hack, but we need to call doupdate()