Mercurial > hg
comparison mcabber/src/main.c @ 35:a8ceaa3005fd
[/trunk] Changeset 51 by mikael
Work on libjabber integration. This is a big patch...
* Remove socket.[ch] server.[ch]
We have now fully switched to libjabber.
* Roster is fetched, and buddies are added to the buddylist
* Can send/receive messages using libjabber
* Presence messages are handled. I have added statuses, as there only were
online / offline statuses.
* Use halfdelay to have a non-blocking getch().
And use a timeout in jb_main().
* Use utf8_{encode,decode}
author | mikael |
---|---|
date | Mon, 04 Apr 2005 19:13:58 +0000 |
parents | 4ea2df449381 |
children | 8f1a5e79ca40 |
comparison
equal
deleted
inserted
replaced
34:f78ffe7ce43d | 35:a8ceaa3005fd |
---|---|
9 #include "utils.h" | 9 #include "utils.h" |
10 #include "screen.h" | 10 #include "screen.h" |
11 #include "buddies.h" | 11 #include "buddies.h" |
12 #include "parsecfg.h" | 12 #include "parsecfg.h" |
13 #include "lang.h" | 13 #include "lang.h" |
14 #include "server.h" | |
15 #include "harddefines.h" | 14 #include "harddefines.h" |
16 #include "socket.h" | |
17 #include "jabglue.h" | 15 #include "jabglue.h" |
18 | 16 |
19 //int sock; | 17 //int sock; |
20 | 18 |
21 void sig_handler(int signum) | 19 void sig_handler(int signum) |
26 break; | 24 break; |
27 | 25 |
28 case SIGTERM: | 26 case SIGTERM: |
29 bud_TerminateBuddies(); | 27 bud_TerminateBuddies(); |
30 scr_TerminateCurses(); | 28 scr_TerminateCurses(); |
31 // TODO srv_setpresence(sock, "unavailable"); | 29 jb_disconnect(); |
32 // TODO close(sock); | |
33 printf("Killed by SIGTERM\nBye!\n"); | 30 printf("Killed by SIGTERM\nBye!\n"); |
34 exit(EXIT_SUCCESS); | 31 exit(EXIT_SUCCESS); |
35 break; | 32 break; |
36 | 33 |
37 } | 34 } |
58 (void) tcsetattr(fileno(stdin), TCSAFLUSH, &orig); | 55 (void) tcsetattr(fileno(stdin), TCSAFLUSH, &orig); |
59 | 56 |
60 return (ssize_t)nread; | 57 return (ssize_t)nread; |
61 } | 58 } |
62 | 59 |
60 char *compose_jid(const char *username, const char *servername, | |
61 const char *resource) | |
62 { | |
63 char *jid = malloc(strlen(username)+strlen(servername)+strlen(resource)+3); | |
64 strcpy(jid, username); | |
65 strcat(jid, "@"); | |
66 strcat(jid, servername); | |
67 strcat(jid, "/"); | |
68 strcat(jid, resource); | |
69 return jid; | |
70 } | |
71 | |
63 void credits(void) | 72 void credits(void) |
64 { | 73 { |
65 printf(VERSION "\n"); | 74 printf(VERSION "\n"); |
66 printf(EMAIL "\n"); | 75 printf(EMAIL "\n"); |
67 } | 76 } |
69 int main(int argc, char **argv) | 78 int main(int argc, char **argv) |
70 { | 79 { |
71 char configFile[4096]; | 80 char configFile[4096]; |
72 char *username, *password, *resource; | 81 char *username, *password, *resource; |
73 char *servername; | 82 char *servername; |
74 //char *idsession; | 83 char *jid; |
75 char *portstring; | 84 char *portstring; |
76 int key; | 85 int key; |
77 unsigned int port; | 86 unsigned int port; |
78 unsigned int ping; | 87 unsigned int ping; |
79 int ret = 0; | 88 int ret = 0; |
146 scr_InitCurses(); | 155 scr_InitCurses(); |
147 | 156 |
148 ut_WriteLog("Drawing main window...\n"); | 157 ut_WriteLog("Drawing main window...\n"); |
149 scr_DrawMainWindow(); | 158 scr_DrawMainWindow(); |
150 | 159 |
151 /* Connect to server */ | |
152 portstring = cfg_read("port"); | 160 portstring = cfg_read("port"); |
153 port = (portstring != NULL) ? (unsigned int) atoi(portstring) : -1U; | 161 port = (portstring != NULL) ? (unsigned int) atoi(portstring) : -1U; |
154 | 162 |
163 /* Connect to server */ | |
155 ut_WriteLog("Connecting to server: %s:%d\n", servername, port); | 164 ut_WriteLog("Connecting to server: %s:%d\n", servername, port); |
156 scr_LogPrint("Connecting to server: %s:%d", servername, port); | 165 scr_LogPrint("Connecting to server: %s:%d", servername, port); |
157 jc = jb_connect(servername, port, 0, username, password, resource); | 166 |
167 jid = compose_jid(username, servername, resource); | |
168 jc = jb_connect(jid, port, 0, password); | |
169 free(jid); | |
158 if (!jc) { | 170 if (!jc) { |
159 ut_WriteLog("\terror!!!\n"); | 171 ut_WriteLog("\terror!!!\n"); |
160 fprintf(stderr, "Error connecting to (%s)\n", servername); | 172 fprintf(stderr, "Error connecting to (%s)\n", servername); |
161 scr_TerminateCurses(); | 173 scr_TerminateCurses(); |
162 return -2; | 174 return -2; |
176 ut_WriteLog("Ping interval stablished: %d secs\n", ping); | 188 ut_WriteLog("Ping interval stablished: %d secs\n", ping); |
177 | 189 |
178 ut_WriteLog("Entering into main loop...\n\n"); | 190 ut_WriteLog("Entering into main loop...\n\n"); |
179 ut_WriteLog("Ready to send/receive messages...\n"); | 191 ut_WriteLog("Ready to send/receive messages...\n"); |
180 | 192 |
181 sleep(1); | |
182 jb_main(); | |
183 sleep(1); | |
184 jb_main(); | |
185 sleep(2); | |
186 jb_disconnect(); | |
187 sleep(1); | |
188 jb_main(); | |
189 scr_TerminateCurses(); exit(0); // XXX | |
190 while (ret != 255) { | 193 while (ret != 255) { |
191 int x; | |
192 alarm(ping); | 194 alarm(ping); |
193 //x = check_io(sock, 0); | 195 keypad(scr_GetInputWindow(), TRUE); |
194 x = check_io(0, 0); // FIXME | 196 key = scr_Getch(); |
195 /* | 197 if (key != ERR) |
196 if ((x & 1) == 1) { | |
197 srv_msg *incoming = readserver(sock); | |
198 | |
199 switch (incoming->m) { | |
200 case SM_PRESENCE: | |
201 bud_SetBuddyStatus(incoming->from, incoming->connected); | |
202 break; | |
203 | |
204 case SM_MESSAGE: | |
205 scr_WriteIncomingMessage(incoming->from, incoming->body); | |
206 free(incoming->body); | |
207 free(incoming->from); | |
208 break; | |
209 | |
210 case SM_UNHANDLED: | |
211 break; | |
212 } | |
213 free(incoming); | |
214 } | |
215 if ((x & 2) == 2) { | |
216 */ | |
217 if (x) { | |
218 keypad(scr_GetInputWindow(), TRUE); | |
219 key = scr_Getch(); | |
220 ret = process_key(key); | 198 ret = process_key(key); |
221 /* | 199 jb_main(); |
222 switch (key) { | |
223 case KEY_IC: | |
224 bud_AddBuddy(sock); | |
225 break; | |
226 case KEY_DC: | |
227 bud_DeleteBuddy(sock); | |
228 break; | |
229 | |
230 case KEY_RESIZE: | |
231 endwin(); | |
232 printf("\nRedimensionado no implementado\n"); | |
233 printf("Reinicie Cabber.\n\n\n"); | |
234 exit(EXIT_FAILURE); | |
235 break; | |
236 } | |
237 */ | |
238 } | |
239 if (update_roster) { | 200 if (update_roster) { |
240 // scr_LogPrint("Update roster"); | 201 // scr_LogPrint("Update roster"); |
241 bud_DrawRoster(scr_GetRosterWindow()); | 202 bud_DrawRoster(scr_GetRosterWindow()); |
242 } | 203 } |
243 } | 204 } |
244 | 205 |
206 jb_disconnect(); | |
245 bud_TerminateBuddies(); | 207 bud_TerminateBuddies(); |
246 scr_TerminateCurses(); | 208 scr_TerminateCurses(); |
247 | 209 |
248 //srv_setpresence(sock, "unavailable"); | 210 //srv_setpresence(sock, "unavailable"); |
249 //close(sock); | 211 //close(sock); |