void GeneralMenu::fields_ok_cb(PurpleRequestFields *fields) { LOG->debug( "fields_ok_cb: text0=%s, text1=%s, int0=%d, bool0=%d, choice0=%d\n", purple_request_fields_get_string(fields, "text0"), purple_request_fields_get_string(fields, "text1"), purple_request_fields_get_integer(fields, "int0"), purple_request_fields_get_bool(fields, "bool0"), purple_request_fields_get_choice(fields, "choice0")); for (GList *list = purple_request_field_list_get_selected( purple_request_fields_get_field(fields, "list0")); list; list = list->next) LOG->debug("fields_ok_cb: list0=%s", reinterpret_cast<const char*>(list->data)); for (GList *list = purple_request_field_list_get_selected( purple_request_fields_get_field(fields, "list1")); list; list = list->next) LOG->debug("fields_ok_cb: list1=%s", reinterpret_cast<const char*>(list->data)); PurpleAccount *account = purple_request_fields_get_account(fields, "account0"); LOG->debug("fields_ok_cb: account0=[%s] %s", purple_account_get_protocol_name(account), purple_account_get_username(account)); }
/*------------------------------------------------------------------------ * The user has selected to change their PIN. * * @param gc The connection object * @param fields The fields from the request pop-up */ static void mxit_change_pin_cb( PurpleConnection* gc, PurpleRequestFields* fields ) { struct MXitSession* session = purple_connection_get_protocol_data( gc ); const char* pin = NULL; const char* pin2 = NULL; const char* err = NULL; int len; int i; PURPLE_ASSERT_CONNECTION_IS_VALID(gc); /* validate pin */ pin = purple_request_fields_get_string( fields, "pin" ); if ( !pin ) { err = _( "The PIN you entered is invalid." ); goto out; } len = strlen( pin ); if ( ( len < 4 ) || ( len > 10 ) ) { err = _( "The PIN you entered has an invalid length [4-10]." ); goto out; } for ( i = 0; i < len; i++ ) { if ( !g_ascii_isdigit( pin[i] ) ) { err = _( "The PIN is invalid. It should only consist of digits [0-9]." ); goto out; } } pin2 = purple_request_fields_get_string( fields, "pin2" ); if ( ( !pin2 ) || ( strcmp( pin, pin2 ) != 0 ) ) { err = _( "The two PINs you entered do not match." ); goto out; } out: if ( !err ) { /* update PIN in account */ purple_account_set_password( session->acc, pin, NULL, NULL ); /* update session object */ g_free( session->encpwd ); session->encpwd = mxit_encrypt_password( session ); /* send the update request to MXit */ mxit_send_extprofile_update( session, session->encpwd, 0, NULL ); } else { /* show error to user */ mxit_popup( PURPLE_NOTIFY_MSG_ERROR, _( "PIN Update Error" ), err ); } }
void BuddyList::add_buddy_ok_cb(PurpleRequestFields *fields) { PurpleAccount *account = purple_request_fields_get_account(fields, "account"); const char *name = purple_request_fields_get_string(fields, "name"); const char *alias = purple_request_fields_get_string(fields, "alias"); int selected = purple_request_fields_get_choice(fields, "group"); GList *list = purple_request_field_choice_get_labels( purple_request_fields_get_field(fields, "group")); const char *group = reinterpret_cast<const char*>(g_list_nth_data(list, selected)); bool err = false; if (!account) { LOG->Message(_("No account specified.")); err = true; } else if (!purple_account_is_connected(account)) { LOG->Message(_("Selected account is not connected.")); err = true; } if (!name || !name[0]) { LOG->Message(_("No buddy name specified.")); err = true; } if (!group || !group[0]) { LOG->Message(_("No group name specified.")); err = true; } if (err) { purple_blist_request_add_buddy(account, name, group, alias); return; } PurpleGroup *g = purple_find_group(group); if (!g) { g = purple_group_new(group); purple_blist_add_group(g, NULL); } PurpleBuddy *b = purple_find_buddy_in_group(account, name, g); if (b) { LOG->Message(_("Specified buddy is already in the list.")); return; } if (alias && !alias[0]) alias = NULL; b = purple_buddy_new(account, name, alias); purple_blist_add_buddy(b, NULL, g, NULL); purple_account_add_buddy(account, b); }
static void plainprpl_add_buddy_by_contact_request_ok(void *ptr, PurpleRequestFields *fields) { PurpleBuddy *buddy = (PurpleBuddy *) ptr; PurpleAccount *account = buddy->account; plain_plugin_state *pstate; plain_buddy_state *bstate; char *addr_str; const char *name; IP addr; name = purple_request_fields_get_string(fields, "name"); //invite_msg = purple_request_fields_get_string(fields, "invite_msg"); if (name == NULL && strlen(name) == 0) { purple_notify_error(ptr, "Invalid Name", _("Name was empty."), _("You need to enter a name.")); purple_blist_remove_buddy(buddy); } else { addr_str = g_strdup(buddy->name); purple_blist_node_set_string(PURPLE_BLIST_NODE(buddy), "addr_str", addr_str); assert(purple_blist_node_get_string(PURPLE_BLIST_NODE(buddy), "addr_str") != NULL); purple_blist_rename_buddy(buddy, name); g_free(addr_str); pstate = purple_connection_get_protocol_data(buddy->account->gc); bstate = add_buddy_sdata(buddy, pstate); assert(addr_parse_full(&addr, addr_str, PLAIN_DEFAULT_PORT_STR, pstate->sockaf) == 0); addr_parse_full(&addr, addr_str, PLAIN_DEFAULT_PORT_STR, pstate->sockaf); memcpy(&bstate->addr, &addr, sizeof(IP)); purple_prpl_got_user_status(account, buddy->name, PLAIN_STATUS_ONLINE, NULL); } pstate->block_unknown = FALSE; }
static void auth_pass_cb(PurpleConnection *gc, PurpleRequestFields *fields) { PurpleAccount *account; JabberStream *js; const char *entry; gboolean remember; /* The password prompt dialog doesn't get disposed if the account disconnects */ if (!PURPLE_CONNECTION_IS_VALID(gc)) return; account = purple_connection_get_account(gc); js = purple_connection_get_protocol_data(gc); entry = purple_request_fields_get_string(fields, "password"); remember = purple_request_fields_get_bool(fields, "remember"); if (!entry || !*entry) { purple_notify_error(account, NULL, _("Password is required to sign on."), NULL); return; } if (remember) purple_account_set_remember_password(account, TRUE); purple_account_set_password(account, entry); /* Rebuild our callbacks as we now have a password to offer */ jabber_sasl_build_callbacks(js); /* Restart our negotiation */ start_cyrus_wrapper(js); }
static void auth_old_pass_cb(PurpleConnection *gc, PurpleRequestFields *fields) { PurpleAccount *account; JabberStream *js; const char *entry; gboolean remember; /* TODO: the password prompt dialog doesn't get disposed if the account disconnects */ PURPLE_ASSERT_CONNECTION_IS_VALID(gc); account = purple_connection_get_account(gc); js = purple_connection_get_protocol_data(gc); entry = purple_request_fields_get_string(fields, "password"); remember = purple_request_fields_get_bool(fields, "remember"); if (!entry || !*entry) { purple_notify_error(account, NULL, _("Password is required to sign on."), NULL, purple_request_cpar_from_connection(gc)); return; } if (remember) purple_account_set_remember_password(account, TRUE); purple_account_set_password(account, entry, NULL, NULL); /* Restart our connection */ jabber_auth_start_old(js); }
static void ggp_pubdir_search_request(PurpleConnection *gc, PurpleRequestFields *fields) { ggp_pubdir_search_form *form = g_new0(ggp_pubdir_search_form, 1); purple_debug_info("gg", "ggp_pubdir_search_request\n"); form->nick = g_strdup(purple_request_fields_get_string(fields, "name")); form->city = g_strdup(purple_request_fields_get_string(fields, "city")); form->gender = GPOINTER_TO_INT(purple_request_fields_get_choice(fields, "gender")); form->offset = 0; form->limit = GGP_PUBDIR_SEARCH_PER_PAGE; ggp_pubdir_search_execute(gc, form, ggp_pubdir_search_results_display, form); }
void fb_login_captcha_ok_cb(PurpleConnection *pc, PurpleRequestFields *fields) { const gchar *captcha_response; gchar *postdata, *encoded_username, *encoded_password, *encoded_charset_test, *encoded_persist_data, *encoded_response, *encoded_extra_challenge, *encoded_session; FacebookAccount *fba = pc->proto_data; captcha_response = purple_request_fields_get_string(fields, "captcha_response"); encoded_response = g_strdup(purple_url_encode(captcha_response)); encoded_username = g_strdup(purple_url_encode( purple_account_get_username(fba->account))); encoded_password = g_strdup(purple_url_encode( purple_account_get_password(fba->account))); encoded_extra_challenge = g_strdup(purple_url_encode( fba->extra_challenge)); encoded_persist_data = g_strdup(purple_url_encode( fba->persist_data)); encoded_session = g_strdup(purple_url_encode( fba->captcha_session)); encoded_charset_test = g_strdup(purple_url_encode("€,´,€,´,水,Д,Є")); postdata = g_strdup_printf("charset_test=%s&" "version=1.0&" "return_session=0&" "charset_test=%s&" "answered_captcha=1&" "captcha_persist_data=%s&" "captcha_session=%s&" "extra_challenge_params=%s&" "captcha_response=%s&" "email=%s&pass=%s&" "persistent=1", encoded_charset_test, encoded_charset_test, encoded_persist_data, encoded_session, encoded_extra_challenge, encoded_response, encoded_username, encoded_password); g_free(encoded_username); g_free(encoded_password); g_free(encoded_charset_test); g_free(encoded_extra_challenge); g_free(encoded_persist_data); g_free(encoded_response); g_free(encoded_session); fb_post_or_get(fba, FB_METHOD_POST | FB_METHOD_SSL, "login.facebook.com", "/login.php?login_attempt=1&_fb_noscript=1", postdata, fb_login_cb, NULL, FALSE); g_free(postdata); g_free(fba->extra_challenge); g_free(fba->persist_data); g_free(fba->captcha_session); fba->extra_challenge = NULL; fba->persist_data = NULL; fba->captcha_session = NULL; }
static void auth_token_captcha_input_ok_cb(qq_buddy_opt_req *opt_req, PurpleRequestFields *fields) { g_return_if_fail(opt_req != NULL && opt_req->gc != NULL && opt_req->uid != 0); opt_req->captcha_input = purple_request_fields_get_string(fields, "captcha_code"); if (! strlen(opt_req->captcha_input) > 0) { auth_token_captcha_input_cancel_cb(opt_req, fields); return; } qq_request_auth_token(opt_req->gc, 0x02, QQ_AUTH_INFO_ADD_BUDDY, 0, opt_req); }
static void ggp_pubdir_set_info_request(PurpleConnection *gc, PurpleRequestFields *fields) { gchar *url; uin_t uin = ggp_str_to_uin(purple_account_get_username( purple_connection_get_account(gc))); ggp_pubdir_record *record = g_new0(ggp_pubdir_record, 1); gchar *birth_s; purple_debug_info("gg", "ggp_pubdir_set_info_request\n"); record->uin = uin; record->first_name = g_strdup(purple_request_fields_get_string(fields, "first_name")); record->last_name = g_strdup(purple_request_fields_get_string(fields, "last_name")); record->gender = GPOINTER_TO_INT( purple_request_fields_get_choice(fields, "gender")); record->city = g_strdup(purple_request_fields_get_string(fields, "city")); record->province = GPOINTER_TO_INT( purple_request_fields_get_choice(fields, "province")); birth_s = g_strdup_printf("%sT10:00:00+00:00", purple_request_fields_get_string(fields, "birth_date")); record->birth = ggp_date_from_iso8601(birth_s); g_free(birth_s); purple_debug_info("gg", "ggp_pubdir_set_info_request: birth [%lu][%s]\n", record->birth, purple_request_fields_get_string( fields, "birth_date")); url = g_strdup_printf("http://api.gadu-gadu.pl/users/%u.xml", uin); ggp_oauth_request(gc, ggp_pubdir_set_info_got_token, record, "PUT", url); g_free(url); }
/* prepare segments to be sent, string all convert to qq charset */ static void memo_modify_ok_cb(modify_memo_request *memo_request, PurpleRequestFields *fields) { PurpleConnection *gc; guint32 bd_uid; gchar **segments; const gchar *utf8_str; gchar *value = NULL; gint index; g_return_if_fail(NULL != memo_request); gc = (PurpleConnection *)memo_request->gc; segments = (gchar **)memo_request->segments; g_return_if_fail(NULL != gc && NULL != segments); bd_uid = (guint32)memo_request->bd_uid; for (index = 0; index < QQ_MEMO_SIZE; index++) { utf8_str = purple_request_fields_get_string(fields, memo_id[index]); /* update alias */ if (QQ_MEMO_ALIAS == index) { update_buddy_memo(gc, bd_uid, segments[QQ_MEMO_ALIAS]); } if (NULL == utf8_str) { value = g_strdup(""); } else { value = utf8_to_qq(utf8_str, QQ_CHARSET_DEFAULT); /* Warnning: value will be string "(NULL)" instead of NULL */ if (!qq_strcmp("(NULL)", value)) { value = g_strdup(""); } } g_free(segments[index]); segments[index] = value; } memo_debug(segments); /* send segments */ request_change_memo(gc, bd_uid, segments); /* free segments */ memo_free(segments); g_free(memo_request); }
static void new_alias (gpointer data, PurpleRequestFields *fields) { GtkTreeIter iter; GList *aliases; const char *alias; alias = purple_request_fields_get_string (fields, "alias"); aliases = purple_prefs_get_string_list ( "/plugins/gtk/autoprofile/components/logstat/aliases"); aliases = g_list_append (aliases, strdup (alias)); purple_prefs_set_string_list ( "/plugins/gtk/autoprofile/components/logstat/aliases", aliases); free_string_list (aliases); gtk_list_store_insert (alias_list, &iter, 0); gtk_list_store_set (alias_list, &iter, 0, alias, -1); }
static void plainprpl_add_buddy_ok(void *ptr, PurpleRequestFields *fields) { PurpleBuddy *buddy; PurpleConnection *gc; plain_plugin_state *pstate; plain_buddy_state *bstate; const char *addr_str; //const char* invite_msg; purple_debug_info("plainprpl", "plainprpl_add_buddy_ok\n"); buddy = (PurpleBuddy *) ptr; gc = purple_account_get_connection(buddy->account); addr_str = purple_request_fields_get_string(fields, "addr_str"); //invite_msg = purple_request_fields_get_string(fields, "invite_msg"); if (addr_str == NULL || strlen(addr_str) == 0) { purple_notify_error(ptr, "Invalid Address", _("The address was empty."), _("You need to enter a host name or an IP address.")); purple_blist_remove_buddy(buddy); } else { /* Finalize buddy creation */ purple_debug_info("plainprpl", "Add buddy %s\n", buddy->name); purple_blist_node_set_string(PURPLE_BLIST_NODE(buddy), "addr_str", addr_str); assert(purple_blist_node_get_string(PURPLE_BLIST_NODE(buddy), "addr_str") != NULL); pstate = purple_connection_get_protocol_data(gc); bstate = add_buddy_sdata(buddy, pstate); pstate->time_next = 0; //handle now purple_prpl_got_user_status(buddy->account, buddy->name, PLAIN_STATUS_OFFLINE, NULL); /* if (invite_msg) { plainprpl_send_im(gc, buddy->name, invite_msg, 0); }*/ } }
/*------------------------------------------------------------------------ * Register a new account with MXit * * @param gc The connection object * @param fields This is the fields filled-in by the user */ static void mxit_cb_register_ok( PurpleConnection *gc, PurpleRequestFields *fields ) { struct MXitSession* session = purple_connection_get_protocol_data( gc ); struct MXitProfile* profile = session->profile; const char* str; const char* pin; const char* err = NULL; int len; int i; purple_debug_info( MXIT_PLUGIN_ID, "mxit_cb_register_ok\n" ); if ( !PURPLE_CONNECTION_IS_VALID( gc ) ) { purple_debug_error( MXIT_PLUGIN_ID, "Unable to register; account offline.\n" ); return; } /* nickname */ str = purple_request_fields_get_string( fields, "nickname" ); if ( ( !str ) || ( strlen( str ) < 3 ) ) { err = _( "The Display Name you entered is too short." ); goto out; } g_strlcpy( profile->nickname, str, sizeof( profile->nickname ) ); /* birthdate */ str = purple_request_fields_get_string( fields, "bday" ); if ( ( !str ) || ( strlen( str ) < 10 ) || ( !validateDate( str ) ) ) { err = _( "The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'." ); goto out; } g_strlcpy( profile->birthday, str, sizeof( profile->birthday ) ); /* gender */ profile->male = ( purple_request_fields_get_choice( fields, "male" ) != 0 ); /* pin */ pin = purple_request_fields_get_string( fields, "pin" ); if ( !pin ) { err = _( "The PIN you entered is invalid." ); goto out; } len = strlen( pin ); if ( ( len < 7 ) || ( len > 10 ) ) { err = _( "The PIN you entered has an invalid length [7-10]." ); goto out; } for ( i = 0; i < len; i++ ) { if ( !g_ascii_isdigit( pin[i] ) ) { err = _( "The PIN is invalid. It should only consist of digits [0-9]." ); goto out; } } str = purple_request_fields_get_string( fields, "pin2" ); if ( ( !str ) || ( strcmp( pin, str ) != 0 ) ) { err = _( "The two PINs you entered do not match." ); goto out; } g_strlcpy( profile->pin, pin, sizeof( profile->pin ) ); out: if ( !err ) { purple_account_set_password( session->acc, session->profile->pin, NULL, NULL ); mxit_login_connect( session ); } else { /* show error to user */ mxit_popup( PURPLE_NOTIFY_MSG_ERROR, _( "Registration Error" ), err ); mxit_register_view( session ); } }
/* parse fields and send info packet */ static void info_modify_ok_cb(modify_info_request *info_request, PurpleRequestFields *fields) { PurpleConnection *gc; qq_data *qd; gchar **segments; int index; const char *utf8_str; gchar *value; int choice_num; gc = info_request->gc; g_return_if_fail(gc != NULL && info_request->gc); qd = (qq_data *) gc->proto_data; segments = info_request->segments; g_return_if_fail(segments != NULL); for (index = 1; segments[index] != NULL && index < QQ_INFO_LAST; index++) { if (field_infos[index].iclass == QQ_FIELD_UNUSED) { continue; } if (!purple_request_fields_exists(fields, field_infos[index].id)) { continue; } switch (field_infos[index].type) { case QQ_FIELD_BOOL: value = purple_request_fields_get_bool(fields, field_infos[index].id) ? g_strdup("1") : g_strdup("0"); g_free(segments[index]); segments[index] = value; break; case QQ_FIELD_CHOICE: choice_num = purple_request_fields_get_choice(fields, field_infos[index].id); if (choice_num < 0 || choice_num >= field_infos[index].choice_size) choice_num = 0; if (index == QQ_INFO_GENDER) { /* QQ Server only recept gender in Chinese */ value = g_strdup(genders_zh[choice_num]); } else { value = g_strdup_printf("%d", choice_num); } g_free(segments[index]); segments[index] = value; break; case QQ_FIELD_LABEL: case QQ_FIELD_STRING: case QQ_FIELD_MULTI: default: utf8_str = purple_request_fields_get_string(fields, field_infos[index].id); if (utf8_str == NULL) { value = g_strdup("-"); } else { value = utf8_to_qq(utf8_str, QQ_CHARSET_DEFAULT); if (value == NULL) value = g_strdup("-"); } g_free(segments[index]); segments[index] = value; break; } } request_change_info(gc, segments); g_strfreev(segments); g_free(info_request); }
void BuddyList::add_chat_ok_cb(PurpleRequestFields *fields) { PurpleAccount *account = purple_request_fields_get_account(fields, "account"); const char *name = purple_request_fields_get_string(fields, "name"); const char *alias = purple_request_fields_get_string(fields, "alias"); int selected = purple_request_fields_get_choice(fields, "group"); GList *list = purple_request_field_choice_get_labels( purple_request_fields_get_field(fields, "group")); const char *group = reinterpret_cast<const char*>(g_list_nth_data(list, selected)); bool autojoin = purple_request_fields_get_bool(fields, "autojoin"); bool err = false; if (!account) { LOG->Message(_("No account specified.")); err = true; } else if (!purple_account_is_connected(account)) { LOG->Message(_("Selected account is not connected.")); err = true; } else { PurpleConnection *gc = purple_account_get_connection(account); PurplePluginProtocolInfo *info = PURPLE_PLUGIN_PROTOCOL_INFO( purple_connection_get_prpl(gc)); if (!info->join_chat) { LOG->Message(_("This protocol does not support chat rooms.")); account = NULL; err = true; } } if (!name || !name[0]) { LOG->Message(_("No buddy name specified.")); err = true; } if (!group || !group[0]) { LOG->Message(_("No group name specified.")); err = true; } if (err) { purple_blist_request_add_chat(account, purple_find_group(group), alias, name); return; } PurpleConnection *gc = purple_account_get_connection(account); PurplePluginProtocolInfo *info = PURPLE_PLUGIN_PROTOCOL_INFO( purple_connection_get_prpl(gc)); GHashTable *hash = NULL; if (info->chat_info_defaults) hash = info->chat_info_defaults(gc, name); PurpleChat *chat = purple_chat_new(account, name, hash); if (chat) { PurpleGroup* g = purple_find_group(group); if (!g) { g = purple_group_new(group); purple_blist_add_group(g, NULL); } purple_blist_add_chat(chat, g, NULL); if (alias && alias[0]) purple_blist_alias_chat(chat, alias); purple_blist_node_set_bool(reinterpret_cast<PurpleBlistNode*>(chat), PACKAGE_NAME "-autojoin", autojoin); } }
/*------------------------------------------------------------------------ * The user has selected to change their profile. * * @param gc The connection object * @param fields The fields from the request pop-up */ static void mxit_profile_cb( PurpleConnection* gc, PurpleRequestFields* fields ) { struct MXitSession* session = purple_connection_get_protocol_data( gc ); PurpleRequestField* field = NULL; const char* name = NULL; const char* bday = NULL; const char* err = NULL; GList* entry = NULL; purple_debug_info( MXIT_PLUGIN_ID, "mxit_profile_cb\n" ); PURPLE_ASSERT_CONNECTION_IS_VALID(gc); /* validate name */ name = purple_request_fields_get_string( fields, "name" ); if ( ( !name ) || ( strlen( name ) < 3 ) ) { err = _( "The Display Name you entered is invalid." ); goto out; } /* validate birthdate */ bday = purple_request_fields_get_string( fields, "bday" ); if ( ( !bday ) || ( strlen( bday ) < 10 ) || ( !validateDate( bday ) ) ) { err = _( "The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'." ); goto out; } out: if ( !err ) { struct MXitProfile* profile = session->profile; GString* attributes = g_string_sized_new( 128 ); char attrib[512]; unsigned int acount = 0; /* update name */ g_strlcpy( profile->nickname, name, sizeof( profile->nickname ) ); g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%s", CP_PROFILE_FULLNAME, CP_PROFILE_TYPE_UTF8, profile->nickname ); g_string_append( attributes, attrib ); acount++; /* update birthday */ g_strlcpy( profile->birthday, bday, sizeof( profile->birthday ) ); g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%s", CP_PROFILE_BIRTHDATE, CP_PROFILE_TYPE_UTF8, profile->birthday ); g_string_append( attributes, attrib ); acount++; /* update gender */ profile->male = ( purple_request_fields_get_choice( fields, "male" ) != 0 ); g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%s", CP_PROFILE_GENDER, CP_PROFILE_TYPE_BOOL, ( profile->male ) ? "1" : "0" ); g_string_append( attributes, attrib ); acount++; /* update title */ name = purple_request_fields_get_string( fields, "title" ); if ( !name ) profile->title[0] = '\0'; else g_strlcpy( profile->title, name, sizeof( profile->title ) ); g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%s", CP_PROFILE_TITLE, CP_PROFILE_TYPE_UTF8, profile->title ); g_string_append( attributes, attrib ); acount++; /* update firstname */ name = purple_request_fields_get_string( fields, "firstname" ); if ( !name ) profile->firstname[0] = '\0'; else g_strlcpy( profile->firstname, name, sizeof( profile->firstname ) ); g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%s", CP_PROFILE_FIRSTNAME, CP_PROFILE_TYPE_UTF8, profile->firstname ); g_string_append( attributes, attrib ); acount++; /* update lastname */ name = purple_request_fields_get_string( fields, "lastname" ); if ( !name ) profile->lastname[0] = '\0'; else g_strlcpy( profile->lastname, name, sizeof( profile->lastname ) ); g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%s", CP_PROFILE_LASTNAME, CP_PROFILE_TYPE_UTF8, profile->lastname ); g_string_append( attributes, attrib ); acount++; /* update email address */ name = purple_request_fields_get_string( fields, "email" ); if ( !name ) profile->email[0] = '\0'; else g_strlcpy( profile->email, name, sizeof( profile->email ) ); g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%s", CP_PROFILE_EMAIL, CP_PROFILE_TYPE_UTF8, profile->email ); g_string_append( attributes, attrib ); acount++; /* update mobile number */ name = purple_request_fields_get_string( fields, "mobilenumber" ); if ( !name ) profile->mobilenr[0] = '\0'; else g_strlcpy( profile->mobilenr, name, sizeof( profile->mobilenr ) ); g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%s", CP_PROFILE_MOBILENR, CP_PROFILE_TYPE_UTF8, profile->mobilenr ); g_string_append( attributes, attrib ); acount++; /* update about me */ name = purple_request_fields_get_string( fields, "aboutme" ); if ( !name ) profile->aboutme[0] = '\0'; else g_strlcpy( profile->aboutme, name, sizeof( profile->aboutme ) ); g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%s", CP_PROFILE_ABOUTME, CP_PROFILE_TYPE_UTF8, profile->aboutme ); g_string_append( attributes, attrib ); acount++; /* update where am i */ name = purple_request_fields_get_string( fields, "whereami" ); if ( !name ) profile->whereami[0] = '\0'; else g_strlcpy( profile->whereami, name, sizeof( profile->whereami ) ); g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%s", CP_PROFILE_WHEREAMI, CP_PROFILE_TYPE_UTF8, profile->whereami ); g_string_append( attributes, attrib ); acount++; /* relationship status */ field = purple_request_fields_get_field( fields, "relationship" ); entry = g_list_first( purple_request_field_list_get_selected( field ) ); profile->relationship = atoi( purple_request_field_list_get_data( field, entry->data ) ); g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%i", CP_PROFILE_RELATIONSHIP, CP_PROFILE_TYPE_SHORT, profile->relationship ); g_string_append( attributes, attrib ); acount++; /* update flags */ field = purple_request_fields_get_field( fields, "searchable" ); if ( purple_request_field_bool_get_value( field ) ) /* is searchable -> clear not-searchable flag */ profile->flags &= ~CP_PROF_NOT_SEARCHABLE; else profile->flags |= CP_PROF_NOT_SEARCHABLE; field = purple_request_fields_get_field( fields, "suggestable" ); if ( purple_request_field_bool_get_value( field ) ) /* is suggestable -> clear not-suggestable flag */ profile->flags &= ~CP_PROF_NOT_SUGGESTABLE; else profile->flags |= CP_PROF_NOT_SUGGESTABLE; g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%" G_GINT64_FORMAT, CP_PROFILE_FLAGS, CP_PROFILE_TYPE_LONG, profile->flags); g_string_append( attributes, attrib ); acount++; /* send the profile update to MXit */ mxit_send_extprofile_update( session, NULL, acount, attributes->str ); g_string_free( attributes, TRUE ); } else { /* show error to user */ mxit_popup( PURPLE_NOTIFY_MSG_ERROR, _( "Profile Update Error" ), err ); } }
static void yahoo_set_userinfo_cb(PurpleConnection *gc, PurpleRequestFields *fields) { xmlnode *node = xmlnode_new("ab"); xmlnode *ct = xmlnode_new_child(node, "ct"); YahooData *yd = purple_connection_get_protocol_data(gc); PurpleAccount *account; PurpleUtilFetchUrlData *url_data; char *webaddress, *webpage; char *request, *content; int len; int i; char * yfields[] = { "fn", "ln", "nn", "mn", "hp", "wp", "mo", NULL }; account = purple_connection_get_account(gc); xmlnode_set_attrib(node, "k", purple_connection_get_display_name(gc)); xmlnode_set_attrib(node, "cc", "1"); /* XXX: ? */ xmlnode_set_attrib(ct, "e", "1"); xmlnode_set_attrib(ct, "yi", purple_request_fields_get_string(fields, "yname")); xmlnode_set_attrib(ct, "id", purple_request_fields_get_string(fields, "yid")); xmlnode_set_attrib(ct, "pr", "0"); for (i = 0; yfields[i]; i++) { const char *v = purple_request_fields_get_string(fields, yfields[i]); xmlnode_set_attrib(ct, yfields[i], v ? v : ""); } content = xmlnode_to_formatted_str(node, &len); xmlnode_free(node); purple_url_parse(yd->jp ? YAHOOJP_USERINFO_URL : YAHOO_USERINFO_URL, &webaddress, NULL, &webpage, NULL, NULL); request = g_strdup_printf("POST %s HTTP/1.1\r\n" "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" "Cookie: T=%s; path=/; domain=.yahoo.com; Y=%s;\r\n" "Host: %s\r\n" "Content-Length: %d\r\n" "Cache-Control: no-cache\r\n\r\n" "%s\r\n\r\n", webpage, yd->cookie_t, yd->cookie_y, webaddress, len + 4, content); #if 0 { /* This is if we wanted to send our contact details to everyone * in the buddylist. But this cannot be done now, because in the * official messenger, doing this pops a conversation window at * the receiver's end, which is stupid, and thus not really * surprising. */ struct yahoo_userinfo *ui = g_new(struct yahoo_userinfo, 1); node = xmlnode_new("contact"); for (i = 0; yfields[i]; i++) { const char *v = purple_request_fields_get_string(fields, yfields[i]); if (v) { xmlnode *nd = xmlnode_new_child(node, yfields[i]); xmlnode_insert_data(nd, v, -1); } } ui->yd = yd; ui->xml = xmlnode_to_str(node, NULL); xmlnode_free(node); } #endif url_data = purple_util_fetch_url_request_len_with_account(account, webaddress, FALSE, YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, -1, yahoo_fetch_aliases_cb, gc); if (url_data != NULL) yd->url_datas = g_slist_prepend(yd->url_datas, url_data); g_free(webaddress); g_free(webpage); g_free(content); g_free(request); }