comparison mcabber/src/main.c @ 312:f0b7ff2df7e8

Ctrl-C does not terminate mcabber 1st Ctrl-C abort current completion 2 Ctrl-C in less than 2 seconds leave mcabber
author Mikael Berthe <mikael@lilotux.net>
date Thu, 14 Jul 2005 23:17:21 +0100
parents 566818afee1c
children 1ceb68eb2fc1
comparison
equal deleted inserted replaced
311:1d6b16d9c577 312:f0b7ff2df7e8
42 #include "hooks.h" 42 #include "hooks.h"
43 #include "utils.h" 43 #include "utils.h"
44 #include "harddefines.h" 44 #include "harddefines.h"
45 45
46 46
47 void mcabber_connect(void)
48 {
49 const char *username, *password, *resource, *servername;
50 char *jid;
51 int ssl;
52 unsigned int port;
53
54 servername = settings_opt_get("server");
55 username = settings_opt_get("username");
56 password = settings_opt_get("password");
57 resource = settings_opt_get("resource");
58
59 if (!servername) {
60 scr_LogPrint("Server name has not been specified!\n");
61 return;
62 }
63 if (!username) {
64 scr_LogPrint("User name has not been specified!\n");
65 return;
66 }
67 if (!password) {
68 scr_LogPrint("Password has not been specified!\n");
69 return;
70 }
71 if (!resource)
72 resource = "mcabber";
73
74 ssl = (settings_opt_get_int("ssl") > 0);
75 port = (unsigned int) settings_opt_get_int("port");
76
77 jb_set_priority(settings_opt_get_int("priority"));
78
79 /* Connect to server */
80 ut_WriteLog("Connecting to server: %s:%d\n", servername, port);
81 scr_LogPrint("Connecting to server: %s:%d", servername, port);
82
83 jid = compose_jid(username, servername, resource);
84 jc = jb_connect(jid, port, ssl, password);
85 g_free(jid);
86
87 if (!jc) {
88 ut_WriteLog("\tConnection error!!!\n");
89 scr_LogPrint("Error connecting to (%s)\n", servername);
90 }
91
92 jb_reset_keepalive();
93 }
94
95 void mcabber_disconnect(const char *msg)
96 {
97 jb_disconnect();
98 scr_TerminateCurses();
99 if (msg)
100 fprintf(stderr, "%s\n", msg);
101 printf("Bye!\n");
102 exit(EXIT_SUCCESS);
103 }
104
47 void sig_handler(int signum) 105 void sig_handler(int signum)
48 { 106 {
49 if (signum == SIGCHLD) { 107 if (signum == SIGCHLD) {
50 int status; 108 int status;
51 pid_t pid; 109 pid_t pid;
54 } while (pid > 0); 112 } while (pid > 0);
55 //if (pid < 0) 113 //if (pid < 0)
56 // ut_WriteLog("Error in waitpid: errno=%d\n", errno); 114 // ut_WriteLog("Error in waitpid: errno=%d\n", errno);
57 signal(SIGCHLD, sig_handler); 115 signal(SIGCHLD, sig_handler);
58 } else if (signum == SIGTERM) { 116 } else if (signum == SIGTERM) {
59 jb_disconnect(); 117 mcabber_disconnect("Killed by SIGTERM");
60 scr_TerminateCurses(); 118 } else if (signum == SIGINT) { // Ctrl-C
61 printf("Killed by SIGTERM\nBye!\n"); 119 static time_t LastSigtermTime;
62 exit(EXIT_SUCCESS); 120 time_t now;
121 time(&now);
122 /* Terminate if 2 consecutive SIGTERMs */
123 if (now - LastSigtermTime < 2)
124 mcabber_disconnect("Killed by SIGINT");
125 LastSigtermTime = now;
126 signal(SIGINT, sig_handler);
127 scr_LogPrint("Hit Ctrl-C twice to leave mcabber");
128 scr_handle_sigint();
63 } else { 129 } else {
64 ut_WriteLog("Caught signal: %d\n", signum); 130 ut_WriteLog("Caught signal: %d\n", signum);
65 } 131 }
66 } 132 }
67 133
95 if (*p == '\n' || *p == '\r') *p = 0; 161 if (*p == '\n' || *p == '\r') *p = 0;
96 162
97 settings_set(SETTINGS_TYPE_OPTION, "password", password); 163 settings_set(SETTINGS_TYPE_OPTION, "password", password);
98 free(password); 164 free(password);
99 return; 165 return;
100 }
101
102 void mcabber_connect(void)
103 {
104 const char *username, *password, *resource, *servername;
105 char *jid;
106 int ssl;
107 unsigned int port;
108
109 servername = settings_opt_get("server");
110 username = settings_opt_get("username");
111 password = settings_opt_get("password");
112 resource = settings_opt_get("resource");
113
114 if (!servername) {
115 scr_LogPrint("Server name has not been specified!\n");
116 return;
117 }
118 if (!username) {
119 scr_LogPrint("User name has not been specified!\n");
120 return;
121 }
122 if (!password) {
123 scr_LogPrint("Password has not been specified!\n");
124 return;
125 }
126 if (!resource)
127 resource = "mcabber";
128
129 ssl = (settings_opt_get_int("ssl") > 0);
130 port = (unsigned int) settings_opt_get_int("port");
131
132 jb_set_priority(settings_opt_get_int("priority"));
133
134 /* Connect to server */
135 ut_WriteLog("Connecting to server: %s:%d\n", servername, port);
136 scr_LogPrint("Connecting to server: %s:%d", servername, port);
137
138 jid = compose_jid(username, servername, resource);
139 jc = jb_connect(jid, port, ssl, password);
140 g_free(jid);
141
142 if (!jc) {
143 ut_WriteLog("\tConnection error!!!\n");
144 scr_LogPrint("Error connecting to (%s)\n", servername);
145 }
146
147 jb_reset_keepalive();
148 } 166 }
149 167
150 void credits(void) 168 void credits(void)
151 { 169 {
152 printf(MCABBER_VERSION "\n"); 170 printf(MCABBER_VERSION "\n");
169 /* Note: debug can be enabled via the config file */ 187 /* Note: debug can be enabled via the config file */
170 ut_InitDebug(0, NULL); 188 ut_InitDebug(0, NULL);
171 189
172 ut_WriteLog("Setting signals handlers...\n"); 190 ut_WriteLog("Setting signals handlers...\n");
173 signal(SIGTERM, sig_handler); 191 signal(SIGTERM, sig_handler);
192 signal(SIGINT, sig_handler);
174 signal(SIGCHLD, sig_handler); 193 signal(SIGCHLD, sig_handler);
175 194
176 /* Parse command line options */ 195 /* Parse command line options */
177 while (1) { 196 while (1) {
178 int c = getopt(argc, argv, "hf:"); 197 int c = getopt(argc, argv, "hf:");