static void ggp_pubdir_search_got_token(PurpleConnection *gc, const gchar *token, gpointer _request) { PurpleHttpRequest *req; ggp_pubdir_request *request = _request; gchar *query; PURPLE_ASSERT_CONNECTION_IS_VALID(gc); if (!token) { request->cb(gc, -1, NULL, 0, request->user_data); ggp_pubdir_request_free(request); return; } purple_debug_misc("gg", "ggp_pubdir_search_got_token\n"); query = ggp_pubdir_search_make_query(request->params.search_form); req = purple_http_request_new(NULL); purple_http_request_set_url_printf(req, "http://api.gadu-gadu.pl%s", query); purple_http_request_header_set(req, "Authorization", token); purple_http_request(gc, req, ggp_pubdir_got_data, request); purple_http_request_unref(req); g_free(query); }
static void hangouts_auth_get_session_cookies_uberauth_cb(PurpleHttpConnection *http_conn, PurpleHttpResponse *response, gpointer user_data) { HangoutsAccount *ha = user_data; PurpleHttpRequest *request; const gchar *uberauth; uberauth = purple_http_response_get_data(response, NULL); if (purple_http_response_get_error(response) != NULL) { purple_connection_error(ha->pc, PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, _("Auth error")); return; } purple_debug_misc("hangouts-prpl", "uberauth: %s", uberauth); request = purple_http_request_new(NULL); purple_http_request_set_url_printf(request, "https://accounts.google.com/MergeSession" "?service=mail&continue=http://www.google.com&uberauth=%s", purple_url_encode(uberauth)); purple_http_request_set_cookie_jar(request, ha->cookie_jar); purple_http_request_header_set_printf(request, "Authorization", "Bearer %s", ha->access_token); purple_http_request_set_max_redirects(request, 0); purple_http_request(ha->pc, request, hangouts_auth_get_session_cookies_got_cb, ha); purple_http_request_unref(request); }
static void ggp_pubdir_set_info_got_token(PurpleConnection *gc, const gchar *token, gpointer _record) { PurpleHttpRequest *req; ggp_pubdir_record *record = _record; gchar *request_data; gchar *name, *surname, *city; uin_t uin = record->uin; PURPLE_ASSERT_CONNECTION_IS_VALID(gc); if (!token) { /* TODO: notify about failure */ ggp_pubdir_record_free(record, 1); return; } name = g_uri_escape_string(record->first_name, NULL, FALSE); surname = g_uri_escape_string(record->last_name, NULL, FALSE); city = g_uri_escape_string(record->city, NULL, FALSE); request_data = g_strdup_printf( "name=%s&" "surname=%s&" "birth=%sT10:00:00%%2B00:00&" "birth_priv=2&" "gender=%d&" "gender_priv=2&" "city=%s&" "province=%d", name, surname, ggp_date_strftime("%Y-%m-%d", record->birth), record->gender, city, record->province); if (purple_debug_is_verbose() && purple_debug_is_unsafe()) { purple_debug_misc("gg", "ggp_pubdir_set_info_got_token: " "query [%s]\n", request_data); } req = purple_http_request_new(NULL); purple_http_request_set_method(req, "PUT"); purple_http_request_set_url_printf(req, "http://api.gadu-gadu.pl/users/%u.xml", uin); purple_http_request_header_set(req, "Authorization", token); purple_http_request_header_set(req, "Content-Type", "application/x-www-form-urlencoded"); purple_http_request_set_contents(req, request_data, -1); purple_http_request(gc, req, ggp_pubdir_set_info_got_response, NULL); purple_http_request_unref(req); g_free(request_data); ggp_pubdir_record_free(record, 1); }
void jabber_google_do_relay_request(JabberStream *js, GoogleSession *session, JabberGoogleRelayCallback cb) { PurpleHttpRequest *req; JabberGoogleRelayCallbackData *data = g_new0(JabberGoogleRelayCallbackData, 1); data->session = session; data->cb = cb; purple_debug_info("jabber", "sending Google relay request\n"); req = purple_http_request_new(NULL); purple_http_request_set_url_printf(req, "http://%s/create_session", js->google_relay_host); /* yes, the relay token is included twice as different request headers, this is apparently needed to make Google's relay servers work... */ purple_http_request_header_set(req, "X-Talk-Google-Relay-Auth", js->google_relay_token); purple_http_request_header_set(req, "X-Google-Relay-Auth", js->google_relay_token); purple_http_request(js->gc, req, jabber_google_relay_fetch_cb, data); purple_http_request_unref(req); }
static void ggp_pubdir_get_info_got_token(PurpleConnection *gc, const gchar *token, gpointer _request) { PurpleHttpRequest *req; ggp_pubdir_request *request = _request; PURPLE_ASSERT_CONNECTION_IS_VALID(gc); if (!token) { request->cb(gc, -1, NULL, 0, request->user_data); ggp_pubdir_request_free(request); return; } req = purple_http_request_new(NULL); purple_http_request_set_url_printf(req, "http://api.gadu-gadu.pl/users/%u", request->params.user_info.uin); purple_http_request_header_set(req, "Authorization", token); purple_http_request(gc, req, ggp_pubdir_got_data, request); purple_http_request_unref(req); }
/* return TRUE if avatar update was performed or there is no new requests, FALSE if we can request another one immediately */ static gboolean ggp_avatar_buddy_update_next(PurpleConnection *gc) { PurpleHttpRequest *req; ggp_avatar_session_data *avdata = ggp_avatar_get_avdata(gc); GList *pending_update_it; ggp_avatar_buddy_update_req *pending_update; PurpleBuddy *buddy; PurpleAccount *account = purple_connection_get_account(gc); time_t old_timestamp; const char *old_timestamp_str; pending_update_it = g_list_first(avdata->pending_updates); if (pending_update_it == NULL) return TRUE; pending_update = pending_update_it->data; avdata->pending_updates = g_list_remove(avdata->pending_updates, pending_update); buddy = purple_blist_find_buddy(account, ggp_uin_to_str(pending_update->uin)); if (!buddy) { if (ggp_str_to_uin(purple_account_get_username(account)) == pending_update->uin) { purple_debug_misc("gg", "ggp_avatar_buddy_update_next(%p): own " "avatar update requested, but we don't have " "ourselves on buddy list\n", gc); } else { purple_debug_warning("gg", "ggp_avatar_buddy_update_next(%p): " "%u update requested, but he's not on buddy " "list\n", gc, pending_update->uin); } return FALSE; } old_timestamp_str = purple_buddy_icons_get_checksum_for_user(buddy); old_timestamp = old_timestamp_str ? g_ascii_strtoull( old_timestamp_str, NULL, 10) : 0; if (old_timestamp == pending_update->timestamp) { if (purple_debug_is_verbose()) { purple_debug_misc("gg", "ggp_avatar_buddy_update_next(%p): " "%u have up to date avatar with ts=%lu\n", gc, pending_update->uin, pending_update->timestamp); } return FALSE; } if (old_timestamp > pending_update->timestamp) { purple_debug_warning("gg", "ggp_avatar_buddy_update_next(%p): " "saved timestamp for %u is newer than received " "(%lu > %lu)\n", gc, pending_update->uin, old_timestamp, pending_update->timestamp); } purple_debug_info("gg", "ggp_avatar_buddy_update_next(%p): " "updating %u with ts=%lu...\n", gc, pending_update->uin, pending_update->timestamp); pending_update->gc = gc; avdata->current_update = pending_update; req = purple_http_request_new(NULL); purple_http_request_set_url_printf(req, GGP_AVATAR_BUDDY_URL, pending_update->uin); purple_http_request_header_set(req, "User-Agent", GGP_AVATAR_USERAGENT); purple_http_request_set_max_len(req, GGP_AVATAR_SIZE_MAX); pending_update->request = purple_http_request(gc, req, ggp_avatar_buddy_update_received, pending_update); purple_http_request_unref(req); return TRUE; }