示例#1
0
static void fb_login_captcha_image_cb(FacebookAccount *fba, gchar *response, 
		gsize len, gpointer userdata)
{
	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);
	
	field = purple_request_field_image_new("captcha_image", "", response, len);
	purple_request_field_group_add_field(group, field);
	
	field = purple_request_field_string_new("captcha_response", "", "", FALSE);
	purple_request_field_group_add_field(group, field);
	
	purple_request_fields(fba->pc, 
		_("Facebook Captcha"), _("Facebook Captcha"), 
		_("Enter both words below, separated by a space"), 
		fields, 
		_("OK"), G_CALLBACK(fb_login_captcha_ok_cb), 
		_("Logout"), G_CALLBACK(fb_login_captcha_cancel_cb), 
		fba->account, NULL, NULL, fba->pc	 
	);
}
示例#2
0
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
/*------------------------------------------------------------------------
 * Display the current splash-screen.
 *
 *  @param session		The MXit session object
 */
void splash_display(struct MXitSession* session)
{
	const char* splashId = NULL;
	char* filename;
	gchar* imgdata;
	gsize imglen;
	int imgid = -1;

	/* Get current splash ID */
	splashId = splash_current(session);
	if (splashId == NULL)		/* no splash-screen */
		return;

	purple_debug_info(MXIT_PLUGIN_ID, "Display Splash: '%s'\n", splashId);

	/* Load splash-screen image from file */
	filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S "mxit" G_DIR_SEPARATOR_S "%s.png", purple_user_dir(), splashId);
	if (g_file_get_contents(filename, &imgdata, &imglen, NULL)) {
		char buf[128];

		/* Add splash-image to imagestore */
		imgid = purple_imgstore_new_with_id(g_memdup(imgdata, imglen), imglen, NULL);

		/* Generate and display message */
		g_snprintf(buf, sizeof(buf),
		           "<img src=\"" PURPLE_STORED_IMAGE_PROTOCOL "%d\">", imgid);

		/* Open a request-type popup to display the image */
		{
			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);

			field = purple_request_field_image_new("splash", "", imgdata, imglen);		/* add splash image */
			purple_request_field_group_add_field(group, field);

			if (splash_clickable(session)) {
				purple_request_fields(session->con, _("MXit Advertising"), NULL, NULL, fields,
					_("More Information"), G_CALLBACK(splash_click_ok), _("Close"), NULL, purple_request_cpar_from_account(session->acc), session->con);
			}
			else {
				purple_request_fields(session->con, _("MXit Advertising"), NULL, NULL, fields,
					_("Continue"), G_CALLBACK(splash_click_ok), _("Close"), NULL, purple_request_cpar_from_account(session->acc), session->con);
			}
		}

		/* Release reference to image */
		purple_imgstore_unref_by_id(imgid);

		g_free(imgdata);
	}

	g_free(filename);
}