comparison mcabber/src/main.c @ 300:12f919be3da5

Merge heads
author Mikael Berthe <mikael@lilotux.net>
date Sun, 10 Jul 2005 22:36:55 +0100
parents f562b9af2de7 35cda94e570d
children b2d11b11675f
comparison
equal deleted inserted replaced
299:8af283462e63 300:12f919be3da5
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;