Mercurial > pidgin.yaz
comparison libpurple/protocols/msn/switchboard.c @ 27928:13c2fb2da4eb
- moved msn_plain_msg() and msn_control_msg() as upstream.
- a bit clean up msn_plain_msg().
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 02 Feb 2009 12:10:33 +0000 |
parents | 1102f8642bd1 |
children |
comparison
equal
deleted
inserted
replaced
27927:1102f8642bd1 | 27928:13c2fb2da4eb |
---|---|
885 | 885 |
886 /************************************************************************** | 886 /************************************************************************** |
887 * Message Handlers | 887 * Message Handlers |
888 **************************************************************************/ | 888 **************************************************************************/ |
889 static void | 889 static void |
890 plain_msg(MsnCmdProc *cmdproc, MsnMessage *msg) | |
891 { | |
892 PurpleConnection *gc; | |
893 MsnSwitchBoard *swboard; | |
894 const char *body; | |
895 char *body_str; | |
896 char *body_enc; | |
897 char *body_final; | |
898 size_t body_len, new_len; | |
899 const char *passport; | |
900 const char *value; | |
901 | |
902 gc = cmdproc->session->account->gc; | |
903 swboard = cmdproc->data; | |
904 | |
905 body = msn_message_get_bin_data(msg, &body_len); | |
906 body_str = sanitize_utf(body, body_len, &new_len); | |
907 body_enc = g_markup_escape_text(body_str, -1); | |
908 g_free(body_str); | |
909 | |
910 passport = msg->remote_user; | |
911 | |
912 if (!strcmp(passport, "messenger@microsoft.com") && | |
913 strstr(body, "immediate security update")) | |
914 { | |
915 return; | |
916 } | |
917 | |
918 #if 0 | |
919 if ((value = msn_message_get_attr(msg, "User-Agent")) != NULL) | |
920 { | |
921 purple_debug_misc("msn", "User-Agent = '%s'\n", value); | |
922 } | |
923 #endif | |
924 | |
925 if ((value = msn_message_get_attr(msg, "X-MMS-IM-Format")) != NULL) | |
926 { | |
927 char *pre, *post; | |
928 | |
929 msn_parse_format(value, &pre, &post); | |
930 | |
931 body_final = g_strdup_printf("%s%s%s", pre ? pre : "", | |
932 body_enc ? body_enc : "", post ? post : ""); | |
933 | |
934 g_free(pre); | |
935 g_free(post); | |
936 g_free(body_enc); | |
937 } | |
938 else | |
939 { | |
940 body_final = body_enc; | |
941 } | |
942 | |
943 swboard->flag |= MSN_SB_FLAG_IM; | |
944 | |
945 if (swboard->current_users > 1 || | |
946 ((swboard->conv != NULL) && | |
947 purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT)) | |
948 { | |
949 /* If current_users is always ok as it should then there is no need to | |
950 * check if this is a chat. */ | |
951 if (swboard->current_users <= 1) | |
952 purple_debug_misc("msn", "plain_msg: current_users(%d)\n", | |
953 swboard->current_users); | |
954 | |
955 serv_got_chat_in(gc, swboard->chat_id, passport, 0, body_final, | |
956 time(NULL)); | |
957 if (swboard->conv == NULL) | |
958 { | |
959 swboard->conv = purple_find_chat(gc, swboard->chat_id); | |
960 swboard->flag |= MSN_SB_FLAG_IM; | |
961 } | |
962 } | |
963 else | |
964 { | |
965 char *yaz_body_final; | |
966 yaz_body_final = purple_strreplace(body_final, "\r\n", "<br>"); // replace 0D 0A with <br> | |
967 purple_debug_info("yaz msn", "yaz_body_final=%s\n", yaz_body_final); | |
968 serv_got_im(gc, passport, yaz_body_final, 0, time(NULL)); | |
969 if (swboard->conv == NULL) | |
970 { | |
971 swboard->conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, | |
972 passport, purple_connection_get_account(gc)); | |
973 swboard->flag |= MSN_SB_FLAG_IM; | |
974 } | |
975 g_free(yaz_body_final); | |
976 } | |
977 | |
978 g_free(body_final); | |
979 } | |
980 | |
981 static void | |
982 control_msg(MsnCmdProc *cmdproc, MsnMessage *msg) | |
983 { | |
984 PurpleConnection *gc; | |
985 MsnSwitchBoard *swboard; | |
986 char *passport; | |
987 | |
988 gc = cmdproc->session->account->gc; | |
989 swboard = cmdproc->data; | |
990 passport = msg->remote_user; | |
991 | |
992 if (swboard->current_users == 1 && | |
993 msn_message_get_attr(msg, "TypingUser") != NULL) | |
994 { | |
995 serv_got_typing(gc, passport, MSN_TYPING_RECV_TIMEOUT, | |
996 PURPLE_TYPING); | |
997 } | |
998 } | |
999 | |
1000 static void | |
1001 clientcaps_msg(MsnCmdProc *cmdproc, MsnMessage *msg) | 890 clientcaps_msg(MsnCmdProc *cmdproc, MsnMessage *msg) |
1002 { | 891 { |
1003 #if 0 | 892 #if 0 |
1004 MsnSession *session; | 893 MsnSession *session; |
1005 MsnSwitchBoard *swboard; | 894 MsnSwitchBoard *swboard; |