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;