Mercurial > hg
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:"); |