static void ggp_edisc_xfer_recv_done(PurpleHttpConnection *hc, PurpleHttpResponse *response, gpointer _xfer) { PurpleXfer *xfer = _xfer; ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer); if (purple_xfer_is_cancelled(xfer)) return; g_return_if_fail(edisc_xfer != NULL); edisc_xfer->hc = NULL; if (!purple_http_response_is_successful(response)) { ggp_edisc_xfer_error(xfer, _("Error while receiving a file")); return; } if (purple_xfer_get_bytes_remaining(xfer) == 0) { purple_xfer_set_completed(xfer, TRUE); purple_xfer_end(xfer); ggp_edisc_xfer_free(xfer); } else { purple_debug_warning("gg", "ggp_edisc_xfer_recv_done: didn't " "received everything\n"); ggp_edisc_xfer_error(xfer, _("Error while receiving a file")); } }
static void ggp_edisc_xfer_error(PurpleXfer *xfer, const gchar *msg) { if (purple_xfer_is_cancelled(xfer)) g_return_if_reached(); purple_xfer_set_status(xfer, PURPLE_XFER_STATUS_CANCEL_REMOTE); purple_xfer_conversation_write(xfer, msg, TRUE); purple_xfer_error( purple_xfer_get_xfer_type(xfer), purple_xfer_get_account(xfer), purple_xfer_get_remote_user(xfer), msg); ggp_edisc_xfer_free(xfer); purple_xfer_end(xfer); }
static void ggp_edisc_xfer_send_init_authenticated(PurpleConnection *gc, gboolean success, gpointer _xfer) { ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc); PurpleHttpRequest *req; PurpleXfer *xfer = _xfer; ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer); gchar *data; if (purple_xfer_is_cancelled(xfer)) return; if (!success) { ggp_edisc_xfer_error(xfer, _("Authentication failed")); return; } g_return_if_fail(sdata != NULL); req = purple_http_request_new("https://drive.mpa.gg.pl/send_ticket"); purple_http_request_set_method(req, "PUT"); ggp_edisc_set_defaults(req); purple_http_request_set_cookie_jar(req, sdata->cookies); purple_http_request_header_set(req, "X-gged-security-token", sdata->security_token); data = g_strdup_printf("{\"send_ticket\":{" "\"recipient\":\"%s\"," "\"file_name\":\"%s\"," "\"file_size\":\"%u\"" "}}", purple_xfer_get_remote_user(xfer), edisc_xfer->filename, (int)purple_xfer_get_size(xfer)); purple_http_request_set_contents(req, data, -1); g_free(data); edisc_xfer->hc = purple_http_request(gc, req, ggp_edisc_xfer_send_init_ticket_created, xfer); purple_http_request_unref(req); }
static void ggp_edisc_xfer_recv_ack_done(PurpleHttpConnection *hc, PurpleHttpResponse *response, gpointer _xfer) { PurpleXfer *xfer = _xfer; ggp_edisc_xfer *edisc_xfer; if (purple_xfer_is_cancelled(xfer)) g_return_if_reached(); edisc_xfer = purple_xfer_get_protocol_data(xfer); edisc_xfer->hc = NULL; if (!purple_http_response_is_successful(response)) { ggp_edisc_xfer_error(xfer, _("Cannot confirm file transfer.")); return; } purple_debug_info("gg", "ggp_edisc_xfer_recv_ack_done: [%s]\n", purple_http_response_get_data(response, NULL)); }
static void yahoo_process_filetrans_15_downloaded(PurpleHttpConnection *hc, PurpleHttpResponse *response, gpointer _xfer) { PurpleXfer *xfer = _xfer; struct yahoo_xfer_data *xd; xd = purple_xfer_get_protocol_data(xfer); xd->hc = NULL; if (purple_xfer_is_cancelled(xfer)) return; if (!purple_http_response_is_successful(response) || purple_xfer_get_bytes_remaining(xfer) > 0) { purple_xfer_set_status(xfer, PURPLE_XFER_STATUS_CANCEL_REMOTE); purple_xfer_end(xfer); } else { purple_xfer_set_completed(xfer, TRUE); purple_xfer_end(xfer); } }
static void ggp_edisc_xfer_send_done(PurpleHttpConnection *hc, PurpleHttpResponse *response, gpointer _xfer) { PurpleXfer *xfer = _xfer; ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer); const gchar *data = purple_http_response_get_data(response, NULL); JsonParser *parser; JsonObject *result; int result_status = -1; if (purple_xfer_is_cancelled(xfer)) return; g_return_if_fail(edisc_xfer != NULL); edisc_xfer->hc = NULL; if (!purple_http_response_is_successful(response)) { ggp_edisc_xfer_error(xfer, _("Error while sending a file")); return; } parser = ggp_json_parse(data); result = json_node_get_object(json_parser_get_root(parser)); result = json_object_get_object_member(result, "result"); if (json_object_has_member(result, "status")) result_status = json_object_get_int_member(result, "status"); g_object_unref(parser); if (result_status == 0) { purple_xfer_set_completed(xfer, TRUE); purple_xfer_end(xfer); ggp_edisc_xfer_free(xfer); } else ggp_edisc_xfer_error(xfer, _("Error while sending a file")); }
static void ggp_edisc_xfer_send_init_ticket_created(PurpleHttpConnection *hc, PurpleHttpResponse *response, gpointer _xfer) { ggp_edisc_session_data *sdata = ggp_edisc_get_sdata( purple_http_conn_get_purple_connection(hc)); PurpleXfer *xfer = _xfer; ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer); const gchar *data = purple_http_response_get_data(response, NULL); ggp_edisc_xfer_ack_status ack_status; JsonParser *parser; JsonObject *ticket; if (purple_xfer_is_cancelled(xfer)) return; g_return_if_fail(sdata != NULL); edisc_xfer->hc = NULL; if (!purple_http_response_is_successful(response)) { int error_id = ggp_edisc_parse_error(data); if (error_id == 206) /* recipient not logged in */ ggp_edisc_xfer_error(xfer, _("Recipient not logged in")); else if (error_id == 207) /* bad sender recipient relation */ ggp_edisc_xfer_error(xfer, _("You aren't on the " "recipient's buddy list")); else ggp_edisc_xfer_error(xfer, _("Unable to send file")); return; } parser = ggp_json_parse(data); ticket = json_node_get_object(json_parser_get_root(parser)); ticket = json_object_get_object_member(ticket, "result"); ticket = json_object_get_object_member(ticket, "send_ticket"); edisc_xfer->ticket_id = g_strdup(json_object_get_string_member( ticket, "id")); ack_status = ggp_edisc_xfer_parse_ack_status( json_object_get_string_member(ticket, "ack_status")); /* send_mode: "normal", "publink" (for legacy clients) */ g_object_unref(parser); if (edisc_xfer->ticket_id == NULL) { purple_debug_error("gg", "ggp_edisc_xfer_send_init_ticket_created: " "couldn't get ticket id\n"); return; } purple_debug_info("gg", "ggp_edisc_xfer_send_init_ticket_created: " "ticket \"%s\" created\n", edisc_xfer->ticket_id); g_hash_table_insert(sdata->xfers_initialized, edisc_xfer->ticket_id, xfer); g_hash_table_insert(sdata->xfers_history, g_strdup(edisc_xfer->ticket_id), GINT_TO_POINTER(1)); if (ack_status != GGP_EDISC_XFER_ACK_STATUS_UNKNOWN) ggp_edisc_xfer_send_ticket_changed(edisc_xfer->gc, xfer, ack_status == GGP_EDISC_XFER_ACK_STATUS_ALLOWED); }