comparison mcabber/src/jabglue.c @ 52:7d1c22aa2e5f

[/trunk] Changeset 68 by mikael * Small fixes
author mikael
date Wed, 06 Apr 2005 11:58:07 +0000
parents 85bbc6ed3796
children 0bd578421ce9
comparison
equal deleted inserted replaced
51:85bbc6ed3796 52:7d1c22aa2e5f
413 p = xmlnode_get_attrib(packet->x, "from"); if (p) from = p; 413 p = xmlnode_get_attrib(packet->x, "from"); if (p) from = p;
414 p = xmlnode_get_attrib(packet->x, "type"); if (p) type = p; 414 p = xmlnode_get_attrib(packet->x, "type"); if (p) type = p;
415 415
416 switch (packet->type) { 416 switch (packet->type) {
417 case JPACKET_MESSAGE: 417 case JPACKET_MESSAGE:
418 x = xmlnode_get_tag(packet->x, "body"); 418 {
419 p = xmlnode_get_data(x); if (p) body = p; 419 char *tmp = NULL;
420 char *tmp = NULL; 420 x = xmlnode_get_tag(packet->x, "body");
421 421 p = xmlnode_get_data(x); if (p) body = p;
422 if ((x = xmlnode_get_tag(packet->x, "subject")) != NULL) 422
423 if ((p = xmlnode_get_data(x)) != NULL) { 423 if ((x = xmlnode_get_tag(packet->x, "subject")) != NULL)
424 tmp = malloc(strlen(body)+strlen(p)+3); 424 if ((p = xmlnode_get_data(x)) != NULL) {
425 *tmp = '['; 425 tmp = malloc(strlen(body)+strlen(p)+3);
426 strcpy(tmp+1, p); 426 *tmp = '[';
427 strcat(tmp, "]\n"); 427 strcpy(tmp+1, p);
428 strcat(tmp, body); 428 strcat(tmp, "]\n");
429 body = tmp; 429 strcat(tmp, body);
430 body = tmp;
431 }
432
433 /* there can be multiple <x> tags. we're looking for one with
434 xmlns = jabber:x:encrypted */
435
436 for (x = xmlnode_get_firstchild(packet->x); x; x = xmlnode_get_nextsibling(x)) {
437 if ((p = xmlnode_get_name(x)) && !strcmp(p, "x"))
438 if ((p = xmlnode_get_attrib(x, "xmlns")) &&
439 !strcasecmp(p, "jabber:x:encrypted"))
440 if ((p = xmlnode_get_data(x)) != NULL) {
441 enc = p;
442 break;
443 }
430 } 444 }
431 445
432 /* there can be multiple <x> tags. we're looking for one with 446 if (body)
433 xmlns = jabber:x:encrypted */ 447 gotmessage(type, from, body, enc);
434 448 if (tmp)
435 for (x = xmlnode_get_firstchild(packet->x); x; x = xmlnode_get_nextsibling(x)) { 449 free(tmp);
436 if ((p = xmlnode_get_name(x)) && !strcmp(p, "x"))
437 if ((p = xmlnode_get_attrib(x, "xmlns")) &&
438 !strcasecmp(p, "jabber:x:encrypted"))
439 if ((p = xmlnode_get_data(x)) != NULL) {
440 enc = p;
441 break;
442 }
443 } 450 }
444
445 if (body)
446 gotmessage(type, from, body, enc);
447 if (tmp)
448 free(tmp);
449 break; 451 break;
450 452
451 case JPACKET_IQ: 453 case JPACKET_IQ:
452 if (!strcmp(type, "result")) { 454 if (!strcmp(type, "result")) {
453 455
557 } 559 }
558 } 560 }
559 } else if (!strcmp(type, "set")) { 561 } else if (!strcmp(type, "set")) {
560 } else if (!strcmp(type, "error")) { 562 } else if (!strcmp(type, "error")) {
561 char *name=NULL, *desc=NULL; 563 char *name=NULL, *desc=NULL;
562 int code; 564 int code = 0;
563 565
564 x = xmlnode_get_tag(packet->x, "error"); 566 x = xmlnode_get_tag(packet->x, "error");
565 p = xmlnode_get_attrib(x, "code"); if (p) code = atoi(p); 567 p = xmlnode_get_attrib(x, "code"); if (p) code = atoi(p);
566 p = xmlnode_get_attrib(x, "id"); if (p) name = p; 568 p = xmlnode_get_attrib(x, "id"); if (p) name = p;
567 p = xmlnode_get_tag_data(packet->x, "error"); if (p) desc = p; 569 p = xmlnode_get_tag_data(packet->x, "error"); if (p) desc = p;