comparison mcabber/src/jabglue.c @ 420:04a0b450380b

Display error code/message when receiving a message packet with "error" type
author Mikael Berthe <mikael@lilotux.net>
date Fri, 02 Sep 2005 21:47:14 +0200
parents 2f9852610cf4
children 569f333e51e2
comparison
equal deleted inserted replaced
419:2f9852610cf4 420:04a0b450380b
575 hk_message_in(jid, timestamp, buffer, type); 575 hk_message_in(jid, timestamp, buffer, type);
576 g_free(jid); 576 g_free(jid);
577 g_free(buffer); 577 g_free(buffer);
578 } 578 }
579 579
580 const char *errormsg(int code)
581 {
582 const char *desc;
583
584 switch(code) {
585 case 401: desc = "Unauthorized";
586 break;
587 case 302: desc = "Redirect";
588 break;
589 case 400: desc = "Bad request";
590 break;
591 case 402: desc = "Payment Required";
592 break;
593 case 403: desc = "Forbidden";
594 break;
595 case 404: desc = "Not Found";
596 break;
597 case 405: desc = "Not Allowed";
598 break;
599 case 406: desc = "Not Acceptable";
600 break;
601 case 407: desc = "Registration Required";
602 break;
603 case 408: desc = "Request Timeout";
604 break;
605 case 409: desc = "Conflict";
606 break;
607 case 500: desc = "Internal Server Error";
608 break;
609 case 501: desc = "Not Implemented";
610 break;
611 case 502: desc = "Remote Server Error";
612 break;
613 case 503: desc = "Service Unavailable";
614 break;
615 case 504: desc = "Remote Server Timeout";
616 break;
617 default:
618 desc = NULL;
619 }
620
621 return desc;
622 }
623
580 void statehandler(jconn conn, int state) 624 void statehandler(jconn conn, int state)
581 { 625 {
582 static int previous_state = -1; 626 static int previous_state = -1;
583 627
584 scr_LogPrint(LPRINT_DEBUG, "StateHandler called (state=%d).", state); 628 scr_LogPrint(LPRINT_DEBUG, "StateHandler called (state=%d).", state);
656 } 700 }
657 701
658 /* there can be multiple <x> tags. we're looking for one with 702 /* there can be multiple <x> tags. we're looking for one with
659 xmlns = jabber:x:encrypted */ 703 xmlns = jabber:x:encrypted */
660 704
661 for (x = xmlnode_get_firstchild(packet->x); x; x = xmlnode_get_nextsibling(x)) { 705 x = xmlnode_get_firstchild(packet->x);
706 for ( ; x; x = xmlnode_get_nextsibling(x)) {
662 if ((p = xmlnode_get_name(x)) && !strcmp(p, "x")) 707 if ((p = xmlnode_get_name(x)) && !strcmp(p, "x"))
663 if ((p = xmlnode_get_attrib(x, "xmlns")) && 708 if ((p = xmlnode_get_attrib(x, "xmlns")) &&
664 !strcasecmp(p, "jabber:x:encrypted")) 709 !strcasecmp(p, "jabber:x:encrypted"))
665 if ((p = xmlnode_get_data(x)) != NULL) { 710 if ((p = xmlnode_get_data(x)) != NULL) {
666 enc = p; 711 enc = p;
672 if ((x = xmlnode_get_tag(packet->x, "x")) != NULL) { 717 if ((x = xmlnode_get_tag(packet->x, "x")) != NULL) {
673 if ((p = xmlnode_get_attrib(x, "stamp")) != NULL) 718 if ((p = xmlnode_get_attrib(x, "stamp")) != NULL)
674 timestamp = from_iso8601(p, 1); 719 timestamp = from_iso8601(p, 1);
675 } 720 }
676 721
722 if (type && !strcmp(type, "error")) {
723 if ((x = xmlnode_get_tag(packet->x, "error")) != NULL) {
724 if ((p = xmlnode_get_attrib(x, "code")) != NULL) {
725 const char *desc;
726 int code = atoi(p);
727 desc = errormsg(atoi(p));
728 scr_LogPrint(LPRINT_LOGNORM, "Error code from server: %d %s",
729 code, (desc ? desc : ""));
730 }
731 }
732 }
677 if (from && body) 733 if (from && body)
678 gotmessage(type, from, body, enc, timestamp); 734 gotmessage(type, from, body, enc, timestamp);
679 if (tmp) 735 if (tmp)
680 g_free(tmp); 736 g_free(tmp);
681 } 737 }
795 851
796 } 852 }
797 } 853 }
798 } else if (!strcmp(type, "set")) { 854 } else if (!strcmp(type, "set")) {
799 } else if (!strcmp(type, "error")) { 855 } else if (!strcmp(type, "error")) {
800 char *name=NULL, *desc; 856 char *name=NULL;
801 char *text=NULL; 857 char *text=NULL;
802 int code = 0; 858 int code = 0;
859 const char *desc;
803 860
804 x = xmlnode_get_tag(packet->x, "error"); 861 x = xmlnode_get_tag(packet->x, "error");
805 p = xmlnode_get_attrib(x, "code"); if (p) code = atoi(p); 862 p = xmlnode_get_attrib(x, "code"); if (p) code = atoi(p);
806 p = xmlnode_get_attrib(x, "id"); if (p) name = p; 863 p = xmlnode_get_attrib(x, "id"); if (p) name = p;
807 p = xmlnode_get_tag_data(packet->x, "error"); if (p) desc = p; 864 p = xmlnode_get_tag_data(packet->x, "error"); if (p) desc = p;
808 865
809 // Sometimes there is a text message 866 // Sometimes there is a text message
810 x = xmlnode_get_tag(x, "text"); 867 x = xmlnode_get_tag(x, "text");
811 p = xmlnode_get_data(x); if (p) text = p; 868 p = xmlnode_get_data(x); if (p) text = p;
812 869
813 switch(code) { 870 desc = errormsg(code);
814 case 401: desc = "Unauthorized";
815 break;
816 case 302: desc = "Redirect";
817 break;
818 case 400: desc = "Bad request";
819 break;
820 case 402: desc = "Payment Required";
821 break;
822 case 403: desc = "Forbidden";
823 break;
824 case 404: desc = "Not Found";
825 break;
826 case 405: desc = "Not Allowed";
827 break;
828 case 406: desc = "Not Acceptable";
829 break;
830 case 407: desc = "Registration Required";
831 break;
832 case 408: desc = "Request Timeout";
833 break;
834 case 409: desc = "Conflict";
835 break;
836 case 500: desc = "Internal Server Error";
837 break;
838 case 501: desc = "Not Implemented";
839 break;
840 case 502: desc = "Remote Server Error";
841 break;
842 case 503: desc = "Service Unavailable";
843 break;
844 case 504: desc = "Remote Server Timeout";
845 break;
846 default:
847 desc = NULL;
848 }
849 871
850 scr_LogPrint(LPRINT_LOGNORM, "Error code from server: %d %s", 872 scr_LogPrint(LPRINT_LOGNORM, "Error code from server: %d %s",
851 code, (desc ? desc : "")); 873 code, (desc ? desc : ""));
852 if (text) 874 if (text)
853 scr_LogPrint(LPRINT_LOGNORM, "Server message: %s", text); 875 scr_LogPrint(LPRINT_LOGNORM, "Server message: %s", text);