# HG changeset patch # User Ka-Hing Cheung # Date 1176605027 0 # Node ID 0b0ecee550914062af5bd07f46654a763496cb35 # Parent d634f88e25d82989be5941fce5f446b312ad7d79 The second msn.tgz from SF Patch #1621854 from Ka-Hing Cheung. "new version, fixes some crashes because group_id is char * but in some places it's set to an int (!). skadotnet, I don't understand why you need `if (!strcmp(type, "MFN")) {` in so many places, so I didn't include most of them. I also have different versions of some of your fixes because I already fixed them. Group manipulations may still not work, at least it's not crashing :-)" committer: Richard Laager diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/contact.c --- a/libgaim/protocols/msn/contact.c Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/contact.c Sun Apr 15 02:43:47 2007 +0000 @@ -250,7 +250,7 @@ /*SOAP get contact list*/ void -msn_get_contact_list(MsnContact * contact,char * update_time) +msn_get_contact_list(MsnContact * contact, const char *update_time) { MsnSoapReq *soap_request; char *body = NULL; @@ -378,7 +378,7 @@ /*setup the Display Name*/ if (!strcmp(type, "Me")){ char *friendly; - friendly = xmlnode_get_data(xmlnode_get_child(contactInfo,"displayName")); + friendly = xmlnode_get_data(xmlnode_get_child(contactInfo, "displayName")); gaim_connection_set_display_name(session->account->gc, gaim_url_decode(friendly)); g_free(friendly); } diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/contact.h --- a/libgaim/protocols/msn/contact.h Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/contact.h Sun Apr 15 02:43:47 2007 +0000 @@ -213,7 +213,7 @@ void msn_contact_destroy(MsnContact *contact); void msn_contact_connect(MsnContact *contact); -void msn_get_contact_list(MsnContact * contact,char * update); +void msn_get_contact_list(MsnContact * contact, const char *update); void msn_get_address_book(MsnContact *contact, const char * update, const char * gupdate); /*contact SOAP Operation*/ diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/directconn.c --- a/libgaim/protocols/msn/directconn.c Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/directconn.c Sun Apr 15 02:43:47 2007 +0000 @@ -422,7 +422,6 @@ msn_directconn_connect(MsnDirectConn *directconn, const char *host, int port) { MsnSession *session; - int r; g_return_val_if_fail(directconn != NULL, FALSE); g_return_val_if_fail(host != NULL, TRUE); diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/msn-utils.c --- a/libgaim/protocols/msn/msn-utils.c Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/msn-utils.c Sun Apr 15 02:43:47 2007 +0000 @@ -26,6 +26,8 @@ #include "time.h" //#include +char *rand_guid(void); + /************************************************************************** * Util **************************************************************************/ @@ -150,12 +152,12 @@ * Currently only support the UTF-8 and base64 encode */ char * -msn_encode_mime(char *str) +msn_encode_mime(const char *str) { char *base64; - base64 = gaim_base64_encode(str,strlen(str)); - return g_strdup_printf("=?utf-8?B?%s?=",base64); + base64 = gaim_base64_encode((guchar *)str, strlen(str)); + return g_strdup_printf("=?utf-8?B?%s?=", base64); } /* @@ -549,7 +551,7 @@ # endif /* GCC. */ #endif /* Not __P. */ -#if ! HAVE_LOCALTIME_R && ! defined localtime_r +#if defined(HAVE_LOCALTIME_R) && ! HAVE_LOCALTIME_R && ! defined localtime_r # ifdef _LIBC # define localtime_r __localtime_r # else diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/msn-utils.h --- a/libgaim/protocols/msn/msn-utils.h Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/msn-utils.h Sun Apr 15 02:43:47 2007 +0000 @@ -25,12 +25,12 @@ #define _MSN_UTILS_H_ /*encode the str to RFC2047 style*/ -char * msn_encode_mime(char *str); +char * msn_encode_mime(const char *str); /** * Generate the Random GUID */ -char * rand_guid(); +char * rand_guid(void); /** * Parses the MSN message formatting into a format compatible with Gaim. diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/msn.c --- a/libgaim/protocols/msn/msn.c Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/msn.c Sun Apr 15 02:43:47 2007 +0000 @@ -137,9 +137,12 @@ return; } - msn_cmdproc_send(cmdproc, "REA", "%s %s", - gaim_account_get_username(account), - alias); + if (*alias != '\0') { + msn_cmdproc_send(cmdproc, "PRP", "MFN %s", alias); + } else { + msn_cmdproc_send(cmdproc, "PRP", "MFN %s", + gaim_url_encode(gaim_account_get_username(account))); + } } static void @@ -524,7 +527,8 @@ { GaimPresence *presence; GaimStatus *status; - char *msg, *psm_str, *tmp2, *text, *name; + const char *msg, *name; + char *psm_str, *tmp2, *text; presence = gaim_buddy_get_presence(buddy); status = gaim_presence_get_active_status(presence); @@ -903,9 +907,8 @@ oim = session->oim; friendname = msn_encode_mime(account->username); - msn_oim_prep_send_msg_info(oim, - gaim_account_get_username(account),friendname,who, - message); + msn_oim_prep_send_msg_info(oim, gaim_account_get_username(account), + friendname, who, message); msn_oim_send_msg(oim); } return 1; diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/notification.c --- a/libgaim/protocols/msn/notification.c Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/notification.c Sun Apr 15 02:43:47 2007 +0000 @@ -37,9 +37,10 @@ /**************************************************************************** * Local Function Prototype ****************************************************************************/ -void msn_notification_post_adl(MsnCmdProc *cmdproc,char *payload ,int payload_len); -void msn_add_contact_xml(xmlnode *mlNode,const char *passport,int list_op,int type); +static void msn_notification_fqy_yahoo(MsnSession *session, const char *passport); +static void msn_notification_post_adl(MsnCmdProc *cmdproc, char *payload, int payload_len); +static void msn_add_contact_xml(xmlnode *mlNode, const char *passport, int list_op, int type); /************************************************************************** * Main @@ -233,15 +234,17 @@ if (!g_ascii_strcasecmp(cmd->params[1], "OK")){ /* authenticate OK */ + /* friendly name part no longer true in msnp11 */ +#if 0 const char *friendly = gaim_url_decode(cmd->params[3]); gaim_connection_set_display_name(gc, friendly); - +#endif msn_session_set_login_step(session, MSN_LOGIN_STEP_SYN); // msn_cmdproc_send(cmdproc, "SYN", "%s", "0"); //TODO we should use SOAP contact to fetch contact list - }else if (!g_ascii_strcasecmp(cmd->params[1], "TWN")){ + } else if (!g_ascii_strcasecmp(cmd->params[1], "TWN")){ /* Passport authentication */ char **elems, **cur, **tokens; @@ -561,7 +564,7 @@ * Buddy Lists **************************************************************************/ /* add contact to xmlnode */ -void +static void msn_add_contact_xml(xmlnode *mlNode,const char *passport,int list_op,int type) { xmlnode *d_node,*c_node; @@ -622,10 +625,19 @@ g_free(tokens); } -void +static void msn_notification_post_adl(MsnCmdProc *cmdproc,char *payload, int payload_len) { MsnTransaction *trans; + const char *display_name; + const char *friendly; + + display_name = gaim_connection_get_display_name(cmdproc->session->account->gc); + if (display_name) { + friendly = gaim_url_encode(display_name); + msn_cmdproc_send(cmdproc, "PRP", "MFN %s", friendly); + } + gaim_debug_info("MaYuan","Send ADL{%s}\n",payload); trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload)); @@ -662,8 +674,8 @@ } /*Post FQY to NS,Inform add a Yahoo User*/ -void -msn_notification_fqy_yahoo(MsnSession *session,char *passport) +static void +msn_notification_fqy_yahoo(MsnSession *session, const char *passport) { MsnTransaction *trans; MsnCmdProc *cmdproc; @@ -715,8 +727,10 @@ static void rml_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { +#if 0 MsnTransaction *trans; char * payload; +#endif gaim_debug_info("MaYuan","Process ADL\n"); #if 0 @@ -820,7 +834,7 @@ group_name = gaim_url_decode(cmd->params[2]); - msn_group_new(session->userlist, group_id, group_name); + msn_group_new(session->userlist, cmd->params[3], group_name); /* There is a user that must me moved to this group */ if (cmd->trans->data) @@ -1045,6 +1059,12 @@ msn_user_set_work_phone(session->user, NULL); else if (!strcmp(type, "PHM")) msn_user_set_mobile_phone(session->user, NULL); + else if (!strcmp(type, "MFM")) { + type = cmd->params[1]; + gaim_connection_set_display_name( + gaim_account_get_connection(session->account), + gaim_url_decode(cmd->params[2])); + } } } @@ -1052,11 +1072,10 @@ reg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { MsnSession *session; - int group_id; - const char *group_name; + const char *group_id, *group_name; session = cmdproc->session; - group_id = atoi(cmd->params[2]); + group_id = cmd->params[2]; group_name = gaim_url_decode(cmd->params[3]); msn_userlist_rename_group_id(session->userlist, group_id, group_name); @@ -1082,10 +1101,8 @@ { MsnSession *session; MsnUser *user; - const char *list; - const char *passport; + const char *group_id, *list, *passport; MsnListId list_id; - int group_id; session = cmdproc->session; list = cmd->params[1]; @@ -1097,9 +1114,9 @@ list_id = msn_get_list_id(list); if (cmd->param_count == 5) - group_id = atoi(cmd->params[4]); + group_id = cmd->params[4]; else - group_id = -1; + group_id = NULL; msn_got_rem_user(session, user, list_id, group_id); msn_user_update(user); @@ -1109,10 +1126,10 @@ rmg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { MsnSession *session; - int group_id; + const char *group_id; session = cmdproc->session; - group_id = atoi(cmd->params[2]); + group_id = cmd->params[2]; msn_userlist_remove_group_id(session->userlist, group_id); } @@ -1120,7 +1137,7 @@ static void rmg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) { - int group_id; + const char *group_id; char **params; params = g_strsplit(trans->params, " ", 0); @@ -1412,7 +1429,8 @@ GaimAccount *account; GaimConnection *gc; MsnUser *user; - const char *passport, *psm_str; + const char *passport; + char *psm_str; /*get the payload content*/ // gaim_debug_info("MaYuan","UBX {%s} payload{%s}\n",cmd->params[0], cmd->payload); @@ -1507,7 +1525,7 @@ msn_session_set_bnode(session); session->contact = msn_contact_new(session); clLastChange = gaim_blist_node_get_string(msn_session_get_bnode(session),"CLLastChange"); - msn_get_contact_list(session->contact,clLastChange); + msn_get_contact_list(session->contact, clLastChange); // msn_contact_connect(session->contact); } @@ -1738,7 +1756,6 @@ const char *group_id) { MsnCmdProc *cmdproc; - MsnTransaction *trans; xmlnode *adl_node; char *payload; int payload_len; diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/oim.c --- a/libgaim/protocols/msn/oim.c Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/oim.c Sun Apr 15 02:43:47 2007 +0000 @@ -30,9 +30,18 @@ /*Local Function Prototype*/ static void msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid); -void msn_oim_retrieve_connect_init(MsnSoapConn *soapconn); -void msn_oim_send_connect_init(MsnSoapConn *soapconn); -void msn_oim_free_send_req(MsnOimSendReq *req); +static MsnOimSendReq *msn_oim_new_send_req(const char *from_member, + const char *friendname, + const char* to_member, + gint send_seq, + const char *msg); +static void msn_oim_retrieve_connect_init(MsnSoapConn *soapconn); +static void msn_oim_send_connect_init(MsnSoapConn *soapconn); +static void msn_oim_free_send_req(MsnOimSendReq *req); +static void msn_oim_report_to_user(MsnOim *oim, char *msg_str); +static void msn_oim_get_process(MsnOim *oim, char *oim_msg); +static char *msn_oim_msg_to_str(MsnOim *oim, const char *body); +const void msn_oim_send_process(MsnOim *oim, const char *body, int len); /*new a OIM object*/ MsnOim * @@ -73,11 +82,10 @@ g_free(oim); } -MsnOimSendReq * -msn_oim_new_send_req(char *from_member, - char*friendname,char* to_member, - gint send_seq, - char *msg) +static MsnOimSendReq * +msn_oim_new_send_req(const char *from_member, const char*friendname, + const char* to_member, gint send_seq, + const char *msg) { MsnOimSendReq *request; @@ -90,7 +98,7 @@ return request; } -void +static void msn_oim_free_send_req(MsnOimSendReq *req) { g_return_if_fail(req != NULL); @@ -107,8 +115,8 @@ * OIM send SOAP request * **************************************/ /*encode the message to OIM Message Format*/ -char * -msn_oim_msg_to_str(MsnOim *oim,char *body) +static char * +msn_oim_msg_to_str(MsnOim *oim, const char *body) { char *oim_body,*oim_base64; @@ -154,14 +162,13 @@ * Process the send return SOAP string * If got SOAP Fault,get the lock key,and resend it. */ -void -msn_oim_send_process(MsnOim *oim,char *body,int len) +const void +msn_oim_send_process(MsnOim *oim, const char *body, int len) { - xmlnode *responseNode,*bodyNode; - xmlnode *faultNode,*faultCodeNode,*faultstringNode; - xmlnode *detailNode,*challengeNode; - char *faultCodeStr,*faultstring; - char *challenge; + xmlnode *responseNode, *bodyNode; + xmlnode *faultNode, *faultCodeNode, *faultstringNode; + xmlnode *detailNode, *challengeNode; + char *faultCodeStr, *faultstring; responseNode = xmlnode_from_str(body,len); g_return_if_fail(responseNode != NULL); @@ -245,9 +252,9 @@ } void -msn_oim_prep_send_msg_info(MsnOim *oim, - char *membername,char*friendname,char *tomember, - char * msg) +msn_oim_prep_send_msg_info(MsnOim *oim, const char *membername, + const char* friendname, const char *tomember, + const char * msg) { MsnOimSendReq *request; @@ -324,7 +331,6 @@ GaimInputCondition cond) { MsnSoapConn * soapconn = data; - MsnOim * oim = soapconn->session->oim; gaim_debug_info("MaYuan","OIM delete read buffer:{%s}\n",soapconn->body); @@ -404,8 +410,8 @@ } /*Post the Offline Instant Message to User Conversation*/ -void -msn_oim_report_to_user(MsnOim *oim,char *msg_str) +static void +msn_oim_report_to_user(MsnOim *oim, char *msg_str) { MsnMessage *message; char *date,*from,*decode_msg; @@ -413,13 +419,13 @@ char **tokens; char *start,*end; int has_nick = 0; - char *passport_str,*passport; + char *passport_str, *passport; char *msg_id; message = msn_message_new(MSN_MSG_UNKNOWN); - msn_message_parse_payload(message,msg_str,strlen(msg_str), - MSG_OIM_LINE_DEM, MSG_OIM_BODY_DEM); + msn_message_parse_payload(message, msg_str, strlen(msg_str), + MSG_OIM_LINE_DEM, MSG_OIM_BODY_DEM); gaim_debug_info("MaYuan","oim body:{%s}\n",message->body); decode_msg = gaim_base64_decode(message->body,&body_len); date = (char *)g_hash_table_lookup(message->attr_table, "Date"); @@ -463,8 +469,8 @@ /* Parse the XML data, * prepare to report the OIM to user */ -void -msn_oim_get_process(MsnOim *oim,char *oim_msg) +static void +msn_oim_get_process(MsnOim *oim, char *oim_msg) { xmlnode *oimNode,*bodyNode,*responseNode,*msgNode; char *msg_data,*msg_str; @@ -569,7 +575,7 @@ } /*msn oim retrieve server connect init */ -void +static void msn_oim_retrieve_connect_init(MsnSoapConn *soapconn) { gaim_debug_info("MaYuan","msn_oim_connect...\n"); @@ -579,7 +585,8 @@ } /*Msn OIM Send Server Connect Init Function*/ -void msn_oim_send_connect_init(MsnSoapConn *sendconn) +static void +msn_oim_send_connect_init(MsnSoapConn *sendconn) { gaim_debug_info("MaYuan","msn oim send connect init...\n"); msn_soap_init(sendconn,MSN_OIM_SEND_HOST,1, diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/oim.h --- a/libgaim/protocols/msn/oim.h Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/oim.h Sun Apr 15 02:43:47 2007 +0000 @@ -132,9 +132,9 @@ void msn_parse_oim_msg(MsnOim *oim,const char *xmlmsg); /*Send OIM Message*/ -void msn_oim_prep_send_msg_info(MsnOim *oim, - char *membername,char*friendname,char *tomember, - char * msg); +void msn_oim_prep_send_msg_info(MsnOim *oim, const char *membername, + const char *friendname, const char *tomember, + const char * msg); void msn_oim_send_msg(MsnOim *oim); diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/servconn.c --- a/libgaim/protocols/msn/servconn.c Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/servconn.c Sun Apr 15 02:43:47 2007 +0000 @@ -203,7 +203,6 @@ msn_servconn_connect(MsnServConn *servconn, const char *host, int port) { MsnSession *session; - int r; g_return_val_if_fail(servconn != NULL, FALSE); g_return_val_if_fail(host != NULL, FALSE); diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/state.c --- a/libgaim/protocols/msn/state.c Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/state.c Sun Apr 15 02:43:47 2007 +0000 @@ -39,7 +39,8 @@ }; /* Local Function Prototype*/ -char * msn_build_psm(char * psmstr,char *mediastr,char * guidstr); +static char *msn_build_psm(const char *psmstr,const char *mediastr, + const char *guidstr); /* * WLM media PSM info build prcedure @@ -49,8 +50,8 @@ * \0Games\01\0Playing {0}\0Game Name\0\ * \0Office\01\0Office Message\0Office App Name\0" */ -char * -msn_build_psm(char * psmstr,char *mediastr,char * guidstr) +static char * +msn_build_psm(const char *psmstr,const char *mediastr, const char *guidstr) { xmlnode *dataNode,*psmNode,*mediaNode,*guidNode; char *result; @@ -81,11 +82,11 @@ } /*get the PSM info from the XML string*/ -const char * -msn_get_psm(char *xml_str,gsize len) +char * +msn_get_psm(char *xml_str, gsize len) { xmlnode *payloadNode, *psmNode; - char *psm_str,*psm; + char *psm_str, *psm; gaim_debug_info("Ma Yuan","msn get PSM\n"); payloadNode = xmlnode_from_str(xml_str, len); @@ -119,7 +120,8 @@ GaimStatus *status; MsnCmdProc *cmdproc; MsnTransaction *trans; - char *payload,*statusline; + char *payload; + const char *statusline; g_return_if_fail(session != NULL); g_return_if_fail(session->notification != NULL); @@ -133,7 +135,7 @@ presence = gaim_account_get_presence(account); status = gaim_presence_get_active_status(presence); statusline = gaim_status_get_attr_string(status, "message"); - session ->psm = g_strdup(msn_build_psm(statusline,NULL,NULL)); + session ->psm = msn_build_psm(statusline, NULL, NULL); payload = session->psm; gaim_debug_info("MaYuan","UUX{%s}\n",payload); diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/state.h --- a/libgaim/protocols/msn/state.h Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/state.h Sun Apr 15 02:43:47 2007 +0000 @@ -62,7 +62,7 @@ void msn_set_psm(MsnSession *session); /*get the PSM info from the XML string*/ -const char * msn_get_psm(char *xml_str,gsize len); +char * msn_get_psm(char *xml_str,gsize len); MsnAwayType msn_state_from_account(GaimAccount *account); diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/sync.c --- a/libgaim/protocols/msn/sync.c Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/sync.c Sun Apr 15 02:43:47 2007 +0000 @@ -86,10 +86,9 @@ lsg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { MsnSession *session = cmdproc->session; - const char *name; - int group_id; + const char *name, *group_id; - group_id = atoi(cmd->params[0]); + group_id = cmd->params[0]; name = gaim_url_decode(cmd->params[1]); msn_group_new(session->userlist, group_id, name); diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/user.c --- a/libgaim/protocols/msn/user.c Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/user.c Sun Apr 15 02:43:47 2007 +0000 @@ -90,7 +90,7 @@ account = user->userlist->session->account; if (user->statusline != NULL) { - char *status = g_strdup_printf("%s - %s", user->status, user->statusline); + //char *status = g_strdup_printf("%s - %s", user->status, user->statusline); gaim_prpl_got_user_status(account, user->passport, user->status, "message", user->statusline, NULL); } else if (user->status != NULL) { @@ -188,7 +188,7 @@ void msn_user_set_op(MsnUser *user,int list_op) { - g_return_if_fail(list_op != NULL); + g_return_if_fail(list_op != 0); user->list_op |= list_op; } @@ -277,14 +277,14 @@ GaimBuddy *b; GaimGroup *g; const char *passport; - const char *group_id; + char *group_id; const char *group_name; g_return_if_fail(user != NULL); g_return_if_fail(id != NULL); group_id = g_strdup(id); - user->group_ids = g_list_append(user->group_ids,group_id); + user->group_ids = g_list_append(user->group_ids, group_id); userlist = user->userlist; account = userlist->session->account; @@ -337,7 +337,8 @@ g_return_if_fail(id != NULL); user->group_ids = g_list_remove(user->group_ids, id); - g_free(id); + /* khc need to use g_list_find_custom here to find the right link */ + //g_free(id); } void diff -r d634f88e25d8 -r 0b0ecee55091 libgaim/protocols/msn/user.h --- a/libgaim/protocols/msn/user.h Sun Apr 15 02:18:17 2007 +0000 +++ b/libgaim/protocols/msn/user.h Sun Apr 15 02:43:47 2007 +0000 @@ -48,7 +48,7 @@ char * uid; /*< User Id */ const char *status; /**< The state of the user. */ - const char *statusline; /**< The state of the user. */ + char *statusline; /**< The state of the user. */ gboolean idle; /**< The idle state of the user. */