コード例 #1
0
/*------------------------------------------------------------------------
 * Enable the user to change their PIN.
 *
 *  @param action	The action object
 */
static void mxit_change_pin_action( PurplePluginAction* action )
{
	PurpleConnection*			gc		= (PurpleConnection*) action->context;

	PurpleRequestFields*		fields	= NULL;
	PurpleRequestFieldGroup*	group	= NULL;
	PurpleRequestField*			field	= NULL;

	purple_debug_info( MXIT_PLUGIN_ID, "mxit_change_pin_action\n" );

	fields = purple_request_fields_new();
	group = purple_request_field_group_new( NULL );
	purple_request_fields_add_group( fields, group );

	/* pin */
	field = purple_request_field_string_new( "pin", _( "PIN" ), purple_connection_get_password( gc ), FALSE );
	purple_request_field_string_set_masked( field, TRUE );
	purple_request_field_group_add_field( group, field );

	/* verify pin */
	field = purple_request_field_string_new( "pin2", _( "Verify PIN" ), purple_connection_get_password( gc ), FALSE );
	purple_request_field_string_set_masked( field, TRUE );
	purple_request_field_group_add_field( group, field );

	/* (reference: "libpurple/request.h") */
	purple_request_fields( gc, _( "Change PIN" ), _( "Change MXit PIN" ), NULL, fields, _( "Set" ),
			G_CALLBACK( mxit_change_pin_cb ), _( "Cancel" ), NULL, purple_request_cpar_from_connection(gc), gc );
}
コード例 #2
0
ファイル: buddy_opt.c プロジェクト: chrisballinger/AdiumQQ
void auth_token_captcha_input_cb(PurpleUtilFetchUrlData *url_data, 
	gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message)
{
	PurpleAccount *account;
	PurpleRequestFields *fields;
	PurpleRequestFieldGroup *group;
	PurpleRequestField *field;
	qq_buddy_opt_req *opt_req = (qq_buddy_opt_req *)user_data;
	gchar *end_of_headers, *p;
	guint header_len, content_len;

	g_return_if_fail(opt_req && opt_req->gc && opt_req->uid>0 );
	g_return_if_fail(url_text && len>0);

	account = purple_connection_get_account(opt_req->gc);

	end_of_headers = strstr(url_text, "\r\n\r\n");
	if (end_of_headers) {
		header_len = (end_of_headers + 4 - url_text);
	}

	p = find_header_content(url_text, header_len, "\nContent-Length: ", sizeof("\nContent-Length: ") - 1);
	if (p) {
		sscanf(p, "%" G_GSIZE_FORMAT, &content_len);
	} else {
		purple_debug_error("QQ", "can not parse http header, maybe it's chunked!");
	}

	p = find_header_content(url_text, header_len, "\ngetqqsession: ", sizeof("\ngetqqsession: ") - 1);
	if (!p) purple_debug_error("QQ", "can not find qqsession in http header!");
	
	opt_req->session_len = strstr(p, "\r\n")-p;
	opt_req->session = g_new0(guint8, opt_req->session_len);
	g_memmove(opt_req->session, p, opt_req->session_len);

	fields = purple_request_fields_new();
	group = purple_request_field_group_new(NULL);
	purple_request_fields_add_group(fields, group);

	field = purple_request_field_image_new("captcha_img",
		_("Captcha Image"), url_text+header_len, content_len);
	purple_request_field_group_add_field(group, field);

	field = purple_request_field_string_new("captcha_code",
		_("Enter code"), "", FALSE);
	purple_request_field_string_set_masked(field, FALSE);
	purple_request_field_group_add_field(group, field);

	purple_request_fields(account,
		_("QQ Captcha Verification"),
		_("QQ Captcha Verification"),
		_("Enter the text from the image"),
		fields,
		_("OK"), G_CALLBACK(auth_token_captcha_input_ok_cb),
		_("Cancel"), G_CALLBACK(auth_token_captcha_input_cancel_cb),
		account, NULL, NULL,
		opt_req);
}
コード例 #3
0
ファイル: plainprpl.c プロジェクト: mwarning/plain-prpl
static void plainprpl_change_address(PurpleBlistNode *node, gpointer userdata)
{
	PurpleBuddy *buddy;
	plain_buddy_state *bstate;

	char *request_str;
	const char *addr_str;

	PurpleRequestFields *fields;
	PurpleRequestFieldGroup *group;
	PurpleRequestField *field;

	fields = purple_request_fields_new();
	group = purple_request_field_group_new(NULL);
	purple_request_fields_add_group(fields, group);

	buddy = (PurpleBuddy *) node;
	bstate = purple_buddy_get_protocol_data(buddy);

	if (bstate) {
		addr_str = purple_blist_node_get_string(PURPLE_BLIST_NODE(buddy), "addr_str");
		field = purple_request_field_string_new("addr_str", _("Address"), addr_str, FALSE);
		purple_request_field_string_set_masked(field, FALSE);
		purple_request_field_group_add_field(group, field);

		request_str = g_strdup_printf("Address to reach buddy '%s'.", buddy->name);
		purple_request_fields(buddy->account, "Change Address",
			request_str,
			NULL, fields,
			_("OK"), G_CALLBACK(plainprpl_change_address_ok),
			_("Cancel"), G_CALLBACK(plainprpl_change_address_cancel),
			NULL, NULL, NULL, (void *) buddy
		);
		g_free(request_str);
	} else {
		purple_debug_info("plainprpl", "Buddy %s has no bstate set.\n", buddy->name);
	}
}