static void connect_cb(MsnServConn *servconn) { MsnSwitchBoard *swboard; MsnTransaction *trans; MsnCmdProc *cmdproc; PurpleAccount *account; cmdproc = servconn->cmdproc; g_return_if_fail(cmdproc != NULL); account = cmdproc->session->account; swboard = cmdproc->data; g_return_if_fail(swboard != NULL); if (msn_switchboard_is_invited(swboard)) { swboard->empty = FALSE; trans = msn_transaction_new(cmdproc, "ANS", "%s %s %s", purple_account_get_username(account), swboard->auth_key, swboard->session_id); } else { trans = msn_transaction_new(cmdproc, "USR", "%s %s", purple_account_get_username(account), swboard->auth_key); } msn_transaction_set_error_cb(trans, ans_usr_error); msn_transaction_set_data(trans, swboard); msn_cmdproc_send_trans(cmdproc, trans); }
static void release_msg(MsnSwitchBoard *swboard, MsnMessage *msg) { MsnCmdProc *cmdproc; MsnTransaction *trans; char *payload; gsize payload_len; char flag; g_return_if_fail(swboard != NULL); g_return_if_fail(msg != NULL); cmdproc = swboard->cmdproc; payload = msn_message_gen_payload(msg, &payload_len); if (purple_debug_is_verbose()) { purple_debug_info("msn", "SB length:{%" G_GSIZE_FORMAT "}\n", payload_len); msn_message_show_readable(msg, "SB SEND", FALSE); } flag = msn_message_get_flag(msg); trans = msn_transaction_new(cmdproc, "MSG", "%c %" G_GSIZE_FORMAT, flag, payload_len); /* Data for callbacks */ msn_transaction_set_data(trans, msg); if (flag != 'U') { if (msg->type == MSN_MSG_TEXT) { msg->ack_ref = TRUE; msn_message_ref(msg); swboard->ack_list = g_list_append(swboard->ack_list, msg); msn_transaction_set_timeout_cb(trans, msg_timeout); } else if (msg->type == MSN_MSG_SLP) { msg->ack_ref = TRUE; msn_message_ref(msg); swboard->ack_list = g_list_append(swboard->ack_list, msg); msn_transaction_set_timeout_cb(trans, msg_timeout); #if 0 if (msg->ack_cb != NULL) { msn_transaction_add_cb(trans, "ACK", msg_ack); msn_transaction_add_cb(trans, "NAK", msg_nak); } #endif } } trans->payload = payload; trans->payload_len = payload_len; msg->trans = trans; msn_cmdproc_send_trans(cmdproc, trans); }
static void release_msg(MsnSwitchBoard *swboard, MsnMessage *msg) { MsnCmdProc *cmdproc; MsnTransaction *trans; char *payload; gsize payload_len; g_return_if_fail(swboard != NULL); g_return_if_fail(msg != NULL); cmdproc = swboard->cmdproc; payload = msn_message_gen_payload(msg, &payload_len); #ifdef MSN_DEBUG_SB msn_message_show_readable(msg, "SB SEND", FALSE); #endif trans = msn_transaction_new(cmdproc, "MSG", "%c %d", msn_message_get_flag(msg), payload_len); /* Data for callbacks */ msn_transaction_set_data(trans, msg); if (msg->type == MSN_MSG_TEXT) { msg->ack_ref = TRUE; msn_message_ref(msg); swboard->ack_list = g_list_append(swboard->ack_list, msg); msn_transaction_set_timeout_cb(trans, msg_timeout); } else if (msg->type == MSN_MSG_SLP) { msg->ack_ref = TRUE; msn_message_ref(msg); swboard->ack_list = g_list_append(swboard->ack_list, msg); msn_transaction_set_timeout_cb(trans, msg_timeout); #if 0 if (msg->ack_cb != NULL) { msn_transaction_add_cb(trans, "ACK", msg_ack); msn_transaction_add_cb(trans, "NAK", msg_nak); } #endif } trans->payload = payload; trans->payload_len = payload_len; msg->trans = trans; msn_cmdproc_send_trans(cmdproc, trans); }
void msn_switchboard_request(MsnSwitchBoard *swboard) { MsnCmdProc *cmdproc; MsnTransaction *trans; g_return_if_fail(swboard != NULL); cmdproc = swboard->session->notification->cmdproc; trans = msn_transaction_new(cmdproc, "XFR", "%s", "SB"); msn_transaction_add_cb(trans, "XFR", got_swboard); msn_transaction_set_data(trans, swboard); msn_transaction_set_error_cb(trans, xfr_error); msn_cmdproc_send_trans(cmdproc, trans); }
void msn_notification_add_buddy(MsnNotification *notification, const char *list, const char *who, const gchar *user_guid, const char *store_name, const gchar *group_guid) { MsnCmdProc *cmdproc; cmdproc = notification->cmdproc; /* moogman: * If old_group_name == NULL, then ADC cmd is different. * If a new buddy (as opposed to a buddy move), ADC cmd is different. * If !Fl, then do same as "new". */ if (user_guid && group_guid) { /* Buddy already in FL. Add it to group_guid. */ msn_cmdproc_send (cmdproc, "ADC", "%s C=%s %s", list, user_guid, group_guid); } else if (strcmp(list, "FL") == 0) { /* Add buddy to our FL. */ /* FunkTastic Foo! */ MsnTransaction *trans; MsnAddBuddy *data; data = g_new0 (MsnAddBuddy, 1); data->who = g_strdup (who); data->group_guid = g_strdup (group_guid); trans = msn_transaction_new (cmdproc, "ADC", "%s N=%s F=%s", list, who, purple_url_encode (store_name)); msn_transaction_set_data (trans, data); msn_cmdproc_send_trans (cmdproc, trans); } else { /* Add buddy to another list (BL, AL). */ msn_cmdproc_send (cmdproc, "ADC", "%s N=%s", list, who); } }
void msn_switchboard_request_add_user(MsnSwitchBoard *swboard, const char *user) { MsnTransaction *trans; MsnCmdProc *cmdproc; g_return_if_fail(swboard != NULL); cmdproc = swboard->cmdproc; trans = msn_transaction_new(cmdproc, "CAL", "%s", user); /* this doesn't do anything, but users seem to think that * 'Unhandled command' is some kind of error, so we don't report it */ msn_transaction_add_cb(trans, "CAL", got_cal); msn_transaction_set_data(trans, swboard); msn_transaction_set_timeout_cb(trans, cal_timeout); if (swboard->ready) msn_cmdproc_send_trans(cmdproc, trans); else msn_cmdproc_queue_trans(cmdproc, trans); }
static void msn_request_add_group(MsnUserList *userlist, const char *who, const char *old_group_name, const char *new_group_name) { MsnCmdProc *cmdproc; MsnTransaction *trans; MsnMoveBuddy *data; cmdproc = userlist->session->notification->cmdproc; data = g_new0(MsnMoveBuddy, 1); data->who = g_strdup(who); if (old_group_name) data->old_group_name = g_strdup(old_group_name); trans = msn_transaction_new(cmdproc, "ADG", "%s %d", purple_url_encode(new_group_name), 0); msn_transaction_set_data(trans, data); msn_cmdproc_send_trans(cmdproc, trans); }