comparison mcabber/src/jabglue.c @ 113:8ac67e951eab

[/trunk] Changeset 127 by mikael * Add a "hooks" layer. Hooks are used when multiples operations should be done when an event araises. For example message in/out, status change... 2 more files; Makefile updated. * Logging is ready. * Add 2 options: - "logging" (bool): enable/disable history logging - "logging_dir" (char): root dir for logging files * Document pinginterval (keepalive) in the sample config file. * Send keepalive only when online.
author mikael
date Sun, 24 Apr 2005 20:24:18 +0000
parents edb5591e2e64
children 065d8368c36b
comparison
equal deleted inserted replaced
112:edb5591e2e64 113:8ac67e951eab
23 23
24 #include "../libjabber/jabber.h" 24 #include "../libjabber/jabber.h"
25 #include "jabglue.h" 25 #include "jabglue.h"
26 #include "roster.h" 26 #include "roster.h"
27 #include "screen.h" 27 #include "screen.h"
28 #include "hooks.h"
28 #include "utils.h" 29 #include "utils.h"
29 30
30 #define JABBERPORT 5222 31 #define JABBERPORT 5222
31 #define JABBERSSLPORT 5223 32 #define JABBERSSLPORT 5223
32 33
66 { 67 {
67 screen_logger(j, io, buf); 68 screen_logger(j, io, buf);
68 file_logger(j, io, buf); 69 file_logger(j, io, buf);
69 } 70 }
70 71
72 /*
71 static void jidsplit(const char *jid, char **user, char **host, 73 static void jidsplit(const char *jid, char **user, char **host,
72 char **res) 74 char **res)
73 { 75 {
74 char *tmp, *ptr; 76 char *tmp, *ptr;
75 tmp = strdup(jid); 77 tmp = strdup(jid);
87 *host = NULL; 89 *host = NULL;
88 90
89 *user = strdup(tmp); 91 *user = strdup(tmp);
90 free(tmp); 92 free(tmp);
91 } 93 }
94 */
92 95
93 char *jidtodisp(const char *jid) 96 char *jidtodisp(const char *jid)
94 { 97 {
95 char *ptr; 98 char *ptr;
96 char *alias = strdup(jid); 99 char *alias = strdup(jid);
138 time(&LastPingTime); 141 time(&LastPingTime);
139 } 142 }
140 143
141 void jb_keepalive() 144 void jb_keepalive()
142 { 145 {
143 if (jc) { 146 if (jc && online)
144 // XXX Only if connected...
145 jab_send_raw(jc, " \t "); 147 jab_send_raw(jc, " \t ");
146 scr_LogPrint("Sent keepalive");
147 }
148 jb_reset_keepalive(); 148 jb_reset_keepalive();
149 } 149 }
150 150
151 void jb_set_keepalive_delay(unsigned int delay) 151 void jb_set_keepalive_delay(unsigned int delay)
152 { 152 {
363 } 363 }
364 364
365 void gotmessage(char *type, const char *from, const char *body, 365 void gotmessage(char *type, const char *from, const char *body,
366 const char *enc) 366 const char *enc)
367 { 367 {
368 char *u, *h, *r; 368 char *jid;
369 369
370 jidsplit(from, &u, &h, &r);
371 /* 370 /*
371 //char *u, *h, *r;
372 //jidsplit(from, &u, &h, &r);
372 // Maybe we should remember the resource? 373 // Maybe we should remember the resource?
373 if (r) 374 if (r)
374 scr_LogPrint("There is an extra part in message (resource?): %s", r); 375 scr_LogPrint("There is an extra part in message (resource?): %s", r);
376 //scr_LogPrint("Msg from <%s>, type=%s", jidtodisp(from), type);
375 */ 377 */
376 378
377 //scr_LogPrint("Msg from <%s>, type=%s", jidtodisp(from), type); 379 jid = jidtodisp(from);
378 scr_WriteIncomingMessage(jidtodisp(from), body); 380 hk_message_in(jid, 0, body);
381 free(jid);
379 } 382 }
380 383
381 void statehandler(jconn conn, int state) 384 void statehandler(jconn conn, int state)
382 { 385 {
383 static int previous_state = -1; 386 static int previous_state = -1;
652 if (type && !strcmp(type, "unavailable")) { 655 if (type && !strcmp(type, "unavailable")) {
653 ust = offline; 656 ust = offline;
654 } 657 }
655 658
656 r = jidtodisp(from); 659 r = jidtodisp(from);
660 /*
657 if (ust != roster_getstatus(r)) 661 if (ust != roster_getstatus(r))
658 scr_LogPrint("Buddy status has changed: [%c>%c] <%s>", 662 scr_LogPrint("Buddy status has changed: [%c>%c] <%s>",
659 imstatus2char[roster_getstatus(r)], imstatus2char[ust], r); 663 imstatus2char[roster_getstatus(r)], imstatus2char[ust], r);
660 roster_setstatus(r, ust); 664 roster_setstatus(r, ust);
665 */
666 if (ust != roster_getstatus(r))
667 hk_statuschange(r, 0, ust);
661 free(r); 668 free(r);
662 buddylist_build(); 669 buddylist_build();
663 scr_DrawRoster(); 670 scr_DrawRoster();
664 /* 671 /*
665 if (x = xmlnode_get_tag(packet->x, "status")) 672 if (x = xmlnode_get_tag(packet->x, "status"))