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