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