Mercurial > hg
comparison mcabber/src/main.c @ 298:35cda94e570d
Add /connect and /disconnect commands
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sun, 10 Jul 2005 15:38:45 +0100 |
parents | f562b9af2de7 |
children | 12f919be3da5 |
comparison
equal
deleted
inserted
replaced
297:9bdfef4f4735 | 298:35cda94e570d |
---|---|
32 } while (pid > 0); | 32 } while (pid > 0); |
33 //if (pid < 0) | 33 //if (pid < 0) |
34 // ut_WriteLog("Error in waitpid: errno=%d\n", errno); | 34 // ut_WriteLog("Error in waitpid: errno=%d\n", errno); |
35 signal(SIGCHLD, sig_handler); | 35 signal(SIGCHLD, sig_handler); |
36 } else if (signum == SIGTERM) { | 36 } else if (signum == SIGTERM) { |
37 // bud_TerminateBuddies(); | 37 jb_disconnect(); |
38 scr_TerminateCurses(); | 38 scr_TerminateCurses(); |
39 jb_disconnect(); | |
40 printf("Killed by SIGTERM\nBye!\n"); | 39 printf("Killed by SIGTERM\nBye!\n"); |
41 exit(EXIT_SUCCESS); | 40 exit(EXIT_SUCCESS); |
42 } else { | 41 } else { |
43 ut_WriteLog("Caught signal: %d\n", signum); | 42 ut_WriteLog("Caught signal: %d\n", signum); |
44 } | 43 } |
64 (void) tcsetattr(fileno(stdin), TCSAFLUSH, &orig); | 63 (void) tcsetattr(fileno(stdin), TCSAFLUSH, &orig); |
65 | 64 |
66 return (ssize_t)nread; | 65 return (ssize_t)nread; |
67 } | 66 } |
68 | 67 |
69 char *compose_jid(const char *username, const char *servername, | 68 void mcabber_connect(void) |
70 const char *resource) | 69 { |
71 { | 70 const char *username, *password, *resource, *servername; |
72 char *jid = g_new(char, | 71 char *jid; |
73 strlen(username)+strlen(servername)+strlen(resource)+3); | 72 int ssl; |
74 strcpy(jid, username); | 73 unsigned int port; |
75 strcat(jid, "@"); | 74 |
76 strcat(jid, servername); | 75 servername = settings_opt_get("server"); |
77 strcat(jid, "/"); | 76 username = settings_opt_get("username"); |
78 strcat(jid, resource); | 77 password = settings_opt_get("password"); |
79 return jid; | 78 resource = settings_opt_get("resource"); |
79 | |
80 if (!servername) { | |
81 scr_LogPrint("Server name has not been specified!\n"); | |
82 return; | |
83 } | |
84 if (!username) { | |
85 scr_LogPrint("User name has not been specified!\n"); | |
86 return; | |
87 } | |
88 if (!password) { | |
89 scr_LogPrint("Password has not been specified!\n"); | |
90 return; | |
91 } | |
92 if (!resource) | |
93 resource = "mcabber"; | |
94 | |
95 ssl = (settings_opt_get_int("ssl") > 0); | |
96 port = (unsigned int) settings_opt_get_int("port"); | |
97 | |
98 jb_set_priority(settings_opt_get_int("priority")); | |
99 | |
100 /* Connect to server */ | |
101 ut_WriteLog("Connecting to server: %s:%d\n", servername, port); | |
102 scr_LogPrint("Connecting to server: %s:%d", servername, port); | |
103 | |
104 jid = compose_jid(username, servername, resource); | |
105 jc = jb_connect(jid, port, ssl, password); | |
106 g_free(jid); | |
107 | |
108 if (!jc) { | |
109 ut_WriteLog("\tConnection error!!!\n"); | |
110 scr_LogPrint("Error connecting to (%s)\n", servername); | |
111 } | |
112 | |
113 jb_reset_keepalive(); | |
80 } | 114 } |
81 | 115 |
82 void credits(void) | 116 void credits(void) |
83 { | 117 { |
84 printf(MCABBER_VERSION "\n"); | 118 printf(MCABBER_VERSION "\n"); |
86 } | 120 } |
87 | 121 |
88 int main(int argc, char **argv) | 122 int main(int argc, char **argv) |
89 { | 123 { |
90 char *configFile = NULL; | 124 char *configFile = NULL; |
91 const char *username, *password, *resource, *servername; | |
92 char *jid; | |
93 const char *optstring; | 125 const char *optstring; |
94 int optval, optval2; | 126 int optval, optval2; |
95 int ssl; | |
96 int key; | 127 int key; |
97 unsigned int port; | |
98 unsigned int ping; | 128 unsigned int ping; |
99 int ret = 0; | 129 int ret = 0; |
100 unsigned int refresh = 0; | 130 unsigned int refresh = 0; |
101 | 131 |
102 credits(); | 132 credits(); |
103 | 133 |
104 /* SET THIS >0 TO ENABLE LOG */ | 134 /* Set this >0 to enable log */ |
135 /* Note: debug can be enabled via the config file */ | |
105 ut_InitDebug(0, NULL); | 136 ut_InitDebug(0, NULL); |
106 | 137 |
107 ut_WriteLog("Setting signals handlers...\n"); | 138 ut_WriteLog("Setting signals handlers...\n"); |
108 signal(SIGTERM, sig_handler); | 139 signal(SIGTERM, sig_handler); |
109 signal(SIGCHLD, sig_handler); | 140 signal(SIGCHLD, sig_handler); |
134 if (configFile) g_free(configFile); | 165 if (configFile) g_free(configFile); |
135 | 166 |
136 optstring = settings_opt_get("debug"); | 167 optstring = settings_opt_get("debug"); |
137 if (optstring) ut_InitDebug(1, optstring); | 168 if (optstring) ut_InitDebug(1, optstring); |
138 | 169 |
139 servername = settings_opt_get("server"); | 170 // If no password is stored, we ask for it before entering |
140 username = settings_opt_get("username"); | 171 // ncurses mode |
141 password = settings_opt_get("password"); | 172 if (!settings_opt_get("password")) { |
142 resource = settings_opt_get("resource"); | 173 char *password, *p; |
143 | 174 size_t passsize = 64; |
144 if (!servername) { | 175 printf("Please enter password: "); |
145 printf("Server name has not been specified in the config file!\n"); | 176 my_getpass((char**)&password, &passsize); |
146 return -1; | 177 printf("\n"); |
147 } | 178 for (p = (char*)password; *p; p++) |
148 if (!username) { | 179 ; |
149 printf("User name has not been specified in the config file!\n"); | 180 for ( ; p > (char*)password ; p--) |
150 return -1; | 181 if (*p == '\n' || *p == '\r') *p = 0; |
151 } | 182 |
152 if (!password) { | 183 settings_set(SETTINGS_TYPE_OPTION, "password", password); |
153 char *p; | |
154 size_t passsize = 64; | |
155 printf("Please enter password: "); | |
156 my_getpass((char**)&password, &passsize); | |
157 printf("\n"); | |
158 for (p = (char*)password; *p; p++); | |
159 for ( ; p > (char*)password ; p--) | |
160 if (*p == '\n' || *p == '\r') *p = 0; | |
161 } | 184 } |
162 | 185 |
163 /* Initialize N-Curses */ | 186 /* Initialize N-Curses */ |
164 ut_WriteLog("Initializing N-Curses...\n"); | 187 ut_WriteLog("Initializing N-Curses...\n"); |
165 scr_InitCurses(); | 188 scr_InitCurses(); |
168 scr_DrawMainWindow(TRUE); | 191 scr_DrawMainWindow(TRUE); |
169 | 192 |
170 optval = (settings_opt_get_int("logging") > 0); | 193 optval = (settings_opt_get_int("logging") > 0); |
171 optval2 = (settings_opt_get_int("load_logs") > 0); | 194 optval2 = (settings_opt_get_int("load_logs") > 0); |
172 if (optval || optval2) | 195 if (optval || optval2) |
173 hlog_enable(optval, settings_opt_get("logging_dir"), | 196 hlog_enable(optval, settings_opt_get("logging_dir"), optval2); |
174 optval2); | |
175 | 197 |
176 optstring = settings_opt_get("events_command"); | 198 optstring = settings_opt_get("events_command"); |
177 if (optstring) | 199 if (optstring) |
178 hk_ext_cmd_init(optstring); | 200 hk_ext_cmd_init(optstring); |
179 | |
180 ssl = (settings_opt_get_int("ssl") > 0); | |
181 port = (unsigned int) settings_opt_get_int("port"); | |
182 | |
183 jb_set_priority(settings_opt_get_int("priority")); | |
184 | |
185 /* Connect to server */ | |
186 ut_WriteLog("Connecting to server: %s:%d\n", servername, port); | |
187 scr_LogPrint("Connecting to server: %s:%d", servername, port); | |
188 | |
189 jid = compose_jid(username, servername, resource); | |
190 jc = jb_connect(jid, port, ssl, password); | |
191 g_free(jid); | |
192 if (!jc) { | |
193 ut_WriteLog("\terror!!!\n"); | |
194 fprintf(stderr, "Error connecting to (%s)\n", servername); | |
195 scr_TerminateCurses(); | |
196 return -2; | |
197 } | |
198 | 201 |
199 ping = 40; | 202 ping = 40; |
200 if (settings_opt_get("pinginterval")) | 203 if (settings_opt_get("pinginterval")) |
201 ping = (unsigned int) settings_opt_get_int("pinginterval"); | 204 ping = (unsigned int) settings_opt_get_int("pinginterval"); |
202 jb_set_keepalive_delay(ping); | 205 jb_set_keepalive_delay(ping); |
203 ut_WriteLog("Ping interval stablished: %d secs\n", ping); | 206 ut_WriteLog("Ping interval stablished: %d secs\n", ping); |
204 | 207 |
205 if (settings_opt_get_int("hide_offline_buddies") > 0) | 208 if (settings_opt_get_int("hide_offline_buddies") > 0) |
206 buddylist_set_hide_offline_buddies(TRUE); | 209 buddylist_set_hide_offline_buddies(TRUE); |
207 | 210 |
211 // Connection | |
212 mcabber_connect(); | |
213 | |
208 /* Initialize commands system */ | 214 /* Initialize commands system */ |
209 cmd_init(); | 215 cmd_init(); |
210 | 216 |
211 ut_WriteLog("Entering into main loop...\n\n"); | 217 ut_WriteLog("Entering into main loop...\n\n"); |
212 ut_WriteLog("Ready to send/receive messages...\n"); | 218 ut_WriteLog("Ready to send/receive messages...\n"); |
213 | 219 |
214 jb_reset_keepalive(); | |
215 while (ret != 255) { | 220 while (ret != 255) { |
216 key = scr_Getch(); | 221 key = scr_Getch(); |
217 | 222 |
218 // The refresh is really an ugly hack, but we need to call doupdate() | 223 // The refresh is really an ugly hack, but we need to call doupdate() |
219 // from time to time to catch the RESIZE events, because getch keep | 224 // from time to time to catch the RESIZE events, because getch keep |
231 if (update_roster) | 236 if (update_roster) |
232 scr_DrawRoster(); | 237 scr_DrawRoster(); |
233 } | 238 } |
234 | 239 |
235 jb_disconnect(); | 240 jb_disconnect(); |
236 //bud_TerminateBuddies(); | |
237 scr_TerminateCurses(); | 241 scr_TerminateCurses(); |
238 | 242 |
239 printf("\n\nHave a nice day!\nBye!\n"); | 243 printf("\n\nHave a nice day!\nBye!\n"); |
240 | 244 |
241 return 0; | 245 return 0; |