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 ); }
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); }
/*------------------------------------------------------------------------ * 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); }