MsnSession * msn_session_new(PurpleAccount *account) { MsnSession *session; g_return_val_if_fail(account != NULL, NULL); session = g_new0(MsnSession, 1); session->http_reqs = purple_http_connection_set_new(); session->account = account; session->notification = msn_notification_new(session); session->userlist = msn_userlist_new(session); session->user = msn_user_new(session->userlist, purple_account_get_username(account), NULL); msn_userlist_add_user(session->userlist, session->user); session->oim = msn_oim_new(session); session->protocol_ver = 0; session->enable_mpop = TRUE; /* Default only */ session->guid = rand_guid(); session->soap = msn_soap_service_new(session); return session; }
MsnUser * msn_userlist_find_add_user(MsnUserList *userlist,const char *passport,const char *userName) { MsnUser *user; user = msn_userlist_find_user(userlist, passport); if (user == NULL) { user = msn_user_new(userlist, passport, userName); msn_userlist_add_user(userlist, user); } else { msn_user_set_friendly_name(user, userName); } return user; }
static void add_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { MsnSession *session; MsnUser *user; const char *list; const char *passport; const char *friendly; MsnListId list_id; int group_id; list = cmd->params[1]; passport = cmd->params[3]; friendly = gaim_url_decode(cmd->params[4]); session = cmdproc->session; user = msn_userlist_find_user(session->userlist, passport); if (user == NULL) { user = msn_user_new(session->userlist, passport, friendly); msn_userlist_add_user(session->userlist, user); } else msn_user_set_friendly_name(user, friendly); list_id = msn_get_list_id(list); if (cmd->param_count >= 6) group_id = atoi(cmd->params[5]); else group_id = -1; msn_got_add_user(session, user, list_id, group_id); msn_user_update(user); }
static void lst_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { MsnSession *session = cmdproc->session; char *passport = NULL; const char *friend = NULL; int list_op; MsnUser *user; passport = cmd->params[0]; friend = gaim_url_decode(cmd->params[1]); list_op = atoi(cmd->params[2]); user = msn_user_new(session->userlist, passport, friend); msn_userlist_add_user(session->userlist, user); session->sync->last_user = user; /* TODO: This can be improved */ if (list_op & MSN_LIST_FL_OP) { char **c; char **tokens; const char *group_nums; GSList *group_ids; group_nums = cmd->params[3]; group_ids = NULL; tokens = g_strsplit(group_nums, ",", -1); for (c = tokens; *c != NULL; c++) { int id; id = atoi(*c); group_ids = g_slist_append(group_ids, GINT_TO_POINTER(id)); } g_strfreev(tokens); msn_got_lst_user(session, user, list_op, group_ids); g_slist_free(group_ids); } else { msn_got_lst_user(session, user, list_op, NULL); } session->sync->num_users++; if (session->sync->num_users == session->sync->total_users) { cmdproc->cbs_table = session->sync->old_cbs_table; msn_session_finish_login(session); msn_sync_destroy(session->sync); session->sync = NULL; } }