104 } |
102 } |
105 |
103 |
106 if (jc) |
104 if (jc) |
107 free(jc); |
105 free(jc); |
108 |
106 |
109 //jc = jab_new(jid, pass, port, ssl); |
107 jc = jab_new(jid, pass, port, ssl); |
110 jc = jab_new("mctest@lilotux.net/mcabber", (char*)pass, (int)port, ssl); |
108 |
111 |
109 jab_logger(jc, file_logger); |
112 jab_logger(jc, big_logger); |
|
113 jab_packet_handler(jc, &packethandler); |
110 jab_packet_handler(jc, &packethandler); |
114 jab_state_handler(jc, &statehandler); |
111 jab_state_handler(jc, &statehandler); |
115 |
112 |
116 if (jc->user) { |
113 if (jc->user) { |
117 //fonline = TRUE; |
114 //fonline = TRUE; |
118 scr_LogPrint("+ State_Connecting"); |
|
119 jstate = STATE_CONNECTING; |
115 jstate = STATE_CONNECTING; |
120 statehandler(0, -1); |
116 statehandler(0, -1); |
121 jab_start(jc); |
117 jab_start(jc); |
122 } |
118 } |
123 |
119 |
213 xmlnode_insert_cdata(xmlnode_insert_tag(x, "priority"), |
209 xmlnode_insert_cdata(xmlnode_insert_tag(x, "priority"), |
214 add["prio"].c_str(), (unsigned) -1); |
210 add["prio"].c_str(), (unsigned) -1); |
215 */ |
211 */ |
216 |
212 |
217 if (!msg || !*msg) { |
213 if (!msg || !*msg) { |
218 msg = "unknownStatus"; |
214 msg = "unknownStatus"; // FIXME |
219 //msg = imstatus2str(st); |
215 //msg = imstatus2str(st); |
220 } |
216 } |
221 |
217 |
222 xmlnode_insert_cdata(xmlnode_insert_tag(x, "status"), msg, |
218 xmlnode_insert_cdata(xmlnode_insert_tag(x, "status"), msg, |
223 (unsigned) -1); |
219 (unsigned) -1); |
228 //sendvisibility(); |
224 //sendvisibility(); |
229 |
225 |
230 // XXX logger.putourstatus(proto, getstatus(), ourstatus = st); |
226 // XXX logger.putourstatus(proto, getstatus(), ourstatus = st); |
231 } |
227 } |
232 |
228 |
|
229 void jb_send_msg(const char *jid, const char *text) |
|
230 { |
|
231 xmlnode x = jutil_msgnew(TMSG_CHAT, jid, 0, text); |
|
232 jab_send(jc, x); |
|
233 xmlnode_free(x); |
|
234 } |
|
235 |
233 void postlogin() |
236 void postlogin() |
234 { |
237 { |
235 //int i; |
238 //int i; |
236 |
239 |
237 //flogged = TRUE; |
240 //flogged = TRUE; |
238 //ourstatus = available; |
241 //ourstatus = available; |
239 |
242 |
240 //setautostatus(jhook.manualstatus); |
243 //setautostatus(jhook.manualstatus); |
241 |
244 |
|
245 setjabberstatus(1, "I'm here!"); |
242 /* |
246 /* |
243 for (i = 0; i < clist.count; i++) { |
247 for (i = 0; i < clist.count; i++) { |
244 c = (icqcontact *) clist.at(i); |
248 c = (icqcontact *) clist.at(i); |
245 |
249 |
246 if (c->getdesc().pname == proto) |
250 if (c->getdesc().pname == proto) |
307 |
311 |
308 z = xmlnode_get_tag(y, "group"); |
312 z = xmlnode_get_tag(y, "group"); |
309 if (z) group = xmlnode_get_data(z); |
313 if (z) group = xmlnode_get_data(z); |
310 |
314 |
311 if (alias) { |
315 if (alias) { |
312 char *buddyname = jidtodisp(alias); |
316 char *buddyname; |
313 if (buddyname) { |
317 if (name) |
314 scr_LogPrint("New buddy: %s", buddyname); |
318 buddyname = name; |
|
319 else |
|
320 buddyname = jidtodisp(alias); |
|
321 |
|
322 //scr_LogPrint("New buddy: %s", buddyname); |
|
323 bud_AddBuddy(alias, buddyname); |
|
324 if (!name) |
315 free(buddyname); |
325 free(buddyname); |
316 } |
|
317 } |
326 } |
318 } |
327 } |
319 |
328 |
|
329 bud_SortRoster(); |
320 postlogin(); |
330 postlogin(); |
321 } |
331 } |
322 |
332 |
323 void gotmessage(char *type, const char *from, const char *body, |
333 void gotmessage(char *type, const char *from, const char *body, |
324 const char *enc) |
334 const char *enc) |
325 { |
335 { |
326 char *u, *h, *r; |
336 char *u, *h, *r; |
327 |
337 |
328 jidsplit(from, &u, &h, &r); |
338 jidsplit(from, &u, &h, &r); |
329 if (*r) |
339 /* |
330 scr_LogPrint("There is an extra part in message: %s", *r); |
340 // Maybe we should remember the resource? |
331 scr_WriteIncomingMessage(from, body); |
341 if (r) |
|
342 scr_LogPrint("There is an extra part in message (resource?): %s", r); |
|
343 */ |
|
344 |
|
345 scr_LogPrint("Msg from <%s>, type=%s", jidtodisp(from), type); |
|
346 scr_WriteIncomingMessage(jidtodisp(from), body); |
332 } |
347 } |
333 |
348 |
334 void statehandler(jconn conn, int state) |
349 void statehandler(jconn conn, int state) |
335 { |
350 { |
336 static int previous_state = -1; |
351 static int previous_state = -1; |
337 |
352 |
338 scr_LogPrint("StateHandler called (%d).\n", state); |
353 ut_WriteLog("StateHandler called (state=%d).\n", state); |
339 ut_WriteLog("StateHandler called (%d).\n", state); |
|
340 |
354 |
341 switch(state) { |
355 switch(state) { |
342 case JCONN_STATE_OFF: |
356 case JCONN_STATE_OFF: |
|
357 scr_LogPrint("+ JCONN_STATE_OFF"); |
343 /* |
358 /* |
344 jhook.flogged = jhook.fonline = FALSE; |
359 jhook.flogged = jhook.fonline = FALSE; |
345 |
360 |
346 if (previous_state != JCONN_STATE_OFF) { |
361 if (previous_state != JCONN_STATE_OFF) { |
347 logger.putourstatus(jhook.proto, jhook.getstatus(), jhook.ourstatus = offline); |
362 logger.putourstatus(jhook.proto, jhook.getstatus(), jhook.ourstatus = offline); |
348 jhook.log(logDisconnected); |
363 jhook.log(logDisconnected); |
349 jhook.roster.clear(); |
364 jhook.roster.clear(); |
350 jhook.agents.clear(); |
365 jhook.agents.clear(); |
351 clist.setoffline(jhook.proto); |
|
352 face.update(); |
|
353 } |
366 } |
354 */ |
367 */ |
355 break; |
368 break; |
356 |
369 |
357 case JCONN_STATE_CONNECTED: |
370 case JCONN_STATE_CONNECTED: |
|
371 scr_LogPrint("+ JCONN_STATE_CONNECTED"); |
358 break; |
372 break; |
359 |
373 |
360 case JCONN_STATE_AUTH: |
374 case JCONN_STATE_AUTH: |
|
375 scr_LogPrint("+ JCONN_STATE_AUTH"); |
361 break; |
376 break; |
362 |
377 |
363 case JCONN_STATE_ON: |
378 case JCONN_STATE_ON: |
|
379 scr_LogPrint("+ JCONN_STATE_ON"); |
364 // if (regmode) jhook.fonline = TRUE; |
380 // if (regmode) jhook.fonline = TRUE; |
|
381 break; |
|
382 |
|
383 case JCONN_STATE_CONNECTING: |
|
384 scr_LogPrint("+ JCONN_STATE_CONNECTING"); |
365 break; |
385 break; |
366 |
386 |
367 default: |
387 default: |
368 break; |
388 break; |
369 } |
389 } |
376 xmlnode x; // , y; |
396 xmlnode x; // , y; |
377 // string from, type, body, enc, ns, id, u, h, s; |
397 // string from, type, body, enc, ns, id, u, h, s; |
378 char *from=NULL, *type=NULL, *body=NULL, *enc=NULL; |
398 char *from=NULL, *type=NULL, *body=NULL, *enc=NULL; |
379 char *ns=NULL; |
399 char *ns=NULL; |
380 char *id=NULL; |
400 char *id=NULL; |
381 // imstatus ust; |
401 enum imstatus ust; |
382 // int npos; |
402 // int npos; |
383 // bool isagent; |
403 // bool isagent; |
384 |
|
385 scr_LogPrint("Received a packet"); |
|
386 ut_WriteLog("Received a packet\n"); |
|
387 |
404 |
388 jpacket_reset(packet); |
405 jpacket_reset(packet); |
389 |
406 |
390 p = xmlnode_get_attrib(packet->x, "from"); if (p) from = p; |
407 p = xmlnode_get_attrib(packet->x, "from"); if (p) from = p; |
391 p = xmlnode_get_attrib(packet->x, "type"); if (p) type = p; |
408 p = xmlnode_get_attrib(packet->x, "type"); if (p) type = p; |
415 enc = p; |
432 enc = p; |
416 break; |
433 break; |
417 } |
434 } |
418 } |
435 } |
419 |
436 |
420 // FIXME: |
|
421 if (body) { |
437 if (body) { |
422 scr_LogPrint("Message received"); |
|
423 scr_LogPrint("Type: %s", type); |
|
424 gotmessage(type, from, body, enc); |
438 gotmessage(type, from, body, enc); |
425 } |
439 } |
426 |
|
427 break; |
440 break; |
428 |
441 |
429 case JPACKET_IQ: |
442 case JPACKET_IQ: |
430 if (!strcmp(type, "result")) { |
443 if (!strcmp(type, "result")) { |
431 scr_LogPrint("Received a result packet"); |
|
432 ut_WriteLog("Received a result packet\n"); |
|
433 |
444 |
434 if (p = xmlnode_get_attrib(packet->x, "id")) { |
445 if (p = xmlnode_get_attrib(packet->x, "id")) { |
435 int iid = atoi(p); |
446 int iid = atoi(p); |
436 |
447 |
437 ut_WriteLog("iid = %d\n", iid); |
448 ut_WriteLog("iid = %d\n", iid); |
586 } |
597 } |
587 break; |
598 break; |
588 |
599 |
589 case JPACKET_PRESENCE: |
600 case JPACKET_PRESENCE: |
590 x = xmlnode_get_tag(packet->x, "show"); |
601 x = xmlnode_get_tag(packet->x, "show"); |
591 //ust = available; |
602 ust = available; |
592 |
603 |
593 if (x) { |
604 if (x) { |
594 p = xmlnode_get_data(x); if (p) ns = p; |
605 p = xmlnode_get_data(x); if (p) ns = p; |
595 |
606 |
596 if (ns) { |
607 if (ns) { |
597 scr_LogPrint("New status: %s", ns); |
608 scr_LogPrint("New status: %s (%s)", ns, from); |
598 /* |
609 if (!strcmp(ns, "away")) ust = away; |
599 if (ns == "away") ust = away; else |
610 else if (!strcmp(ns, "dnd")) ust = dontdisturb; |
600 if (ns == "dnd") ust = dontdisturb; else |
611 else if (!strcmp(ns, "xa")) ust = notavail; |
601 if (ns == "xa") ust = notavail; else |
612 else if (!strcmp(ns, "chat")) ust = freeforchat; |
602 if (ns == "chat") ust = freeforchat; |
|
603 */ |
|
604 } |
613 } |
605 } |
614 } |
606 |
615 |
607 if (!strcmp(type, "unavailable")) { |
616 if (type && !strcmp(type, "unavailable")) { |
608 scr_LogPrint("New status: unavailable/offline"); |
617 scr_LogPrint("New status: unavailable/offline"); |
609 // XXX |
618 ust = offline; |
610 // ust = offline; |
|
611 } |
619 } |
612 |
620 |
|
621 bud_SetBuddyStatus(jidtodisp(from), ust); |
613 /* |
622 /* |
614 jidsplit(from, u, h, s); |
623 if (x = xmlnode_get_tag(packet->x, "status")) |
615 id = u + "@" + h; |
624 if (p = xmlnode_get_data(x)) |
616 |
625 scr_LogPrint("Away msg: %s", p); |
617 if (clist.get(imcontact((string) "#" + id, jhook.proto))) { |
|
618 if (ust == offline) { |
|
619 vector<string>::iterator im = find(jhook.chatmembers[id].begin(), jhook.chatmembers[id].end(), s); |
|
620 if (im != jhook.chatmembers[id].end()) |
|
621 jhook.chatmembers[id].erase(im); |
|
622 |
|
623 } else { |
|
624 jhook.chatmembers[id].push_back(s); |
|
625 |
|
626 } |
|
627 |
|
628 } else { |
|
629 icqcontact *c = clist.get(ic); |
|
630 |
|
631 if (c) |
|
632 if (c->getstatus() != ust) { |
|
633 if (c->getstatus() == offline) |
|
634 jhook.awaymsgs[ic.nickname] = ""; |
|
635 |
|
636 logger.putonline(c, c->getstatus(), ust); |
|
637 c->setstatus(ust); |
|
638 |
|
639 if (x = xmlnode_get_tag(packet->x, "status")) |
|
640 if (p = xmlnode_get_data(x)) |
|
641 jhook.awaymsgs[ic.nickname] = p; |
|
642 |
|
643 #ifdef HAVE_GPGME |
|
644 if (x = xmlnode_get_tag(packet->x, "x")) |
|
645 if (p = xmlnode_get_attrib(x, "xmlns")) |
|
646 if ((string) p == "jabber:x:signed") |
|
647 if (p = xmlnode_get_data(x)) |
|
648 c->setpgpkey(pgp.verify(p, jhook.awaymsgs[ic.nickname])); |
|
649 #endif |
|
650 |
|
651 } |
|
652 } |
|
653 */ |
626 */ |
654 break; |
627 break; |
655 |
628 |
656 case JPACKET_S10N: |
629 case JPACKET_S10N: |
657 scr_LogPrint("Received subscription packet"); |
630 scr_LogPrint("Received subscription packet"); |