| 139 ******************************************************************************/ |
139 ******************************************************************************/ |
| 140 |
140 |
| 141 static void |
141 static void |
| 142 ggp_edisc_set_defaults(SoupMessage *msg) |
142 ggp_edisc_set_defaults(SoupMessage *msg) |
| 143 { |
143 { |
| |
144 SoupMessageHeaders *headers = soup_message_get_request_headers(msg); |
| |
145 |
| 144 // purple_http_request_set_max_len(msg, GGP_EDISC_RESPONSE_MAX); |
146 // purple_http_request_set_max_len(msg, GGP_EDISC_RESPONSE_MAX); |
| 145 soup_message_headers_replace(msg->request_headers, "X-gged-api-version", |
147 soup_message_headers_replace(headers, "X-gged-api-version", |
| 146 GGP_EDISC_API); |
148 GGP_EDISC_API); |
| 147 |
149 |
| 148 /* optional fields */ |
150 /* optional fields */ |
| 149 soup_message_headers_replace( |
151 soup_message_headers_replace( |
| 150 msg->request_headers, "User-Agent", |
152 headers, "User-Agent", |
| 151 "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20120613 " |
153 "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20120613 " |
| 152 "GG/11.0.0.8169 (WINNT_x86-msvc; pl; beta; standard)"); |
154 "GG/11.0.0.8169 (WINNT_x86-msvc; pl; beta; standard)"); |
| 153 soup_message_headers_replace( |
155 soup_message_headers_replace( |
| 154 msg->request_headers, "Accept", |
156 headers, "Accept", |
| 155 "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); |
157 "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); |
| 156 soup_message_headers_replace(msg->request_headers, "Accept-Language", |
158 soup_message_headers_replace(headers, "Accept-Language", |
| 157 "pl,en-us;q=0.7,en;q=0.3"); |
159 "pl,en-us;q=0.7,en;q=0.3"); |
| 158 /* soup_message_headers_replace(msg->request_headers, "Accept-Encoding", |
160 /* soup_message_headers_replace(headers, "Accept-Encoding", |
| 159 * "gzip, deflate"); */ |
161 * "gzip, deflate"); */ |
| 160 soup_message_headers_replace(msg->request_headers, "Accept-Charset", |
162 soup_message_headers_replace(headers, "Accept-Charset", |
| 161 "ISO-8859-2,utf-8;q=0.7,*;q=0.7"); |
163 "ISO-8859-2,utf-8;q=0.7,*;q=0.7"); |
| 162 soup_message_headers_replace(msg->request_headers, "Connection", |
164 soup_message_headers_replace(headers, "Connection", "keep-alive"); |
| 163 "keep-alive"); |
|
| 164 soup_message_headers_replace( |
165 soup_message_headers_replace( |
| 165 msg->request_headers, "Content-Type", |
166 headers, "Content-Type", |
| 166 "application/x-www-form-urlencoded; charset=UTF-8"); |
167 "application/x-www-form-urlencoded; charset=UTF-8"); |
| 167 } |
168 } |
| 168 |
169 |
| 169 static int ggp_edisc_parse_error(const gchar *data) |
170 static int ggp_edisc_parse_error(const gchar *data) |
| 170 { |
171 { |
| 359 |
361 |
| 360 purple_debug_info("gg", "ggp_ggdrive_auth(gc=%p)", gc); |
362 purple_debug_info("gg", "ggp_ggdrive_auth(gc=%p)", gc); |
| 361 |
363 |
| 362 msg = soup_message_new("PUT", "https://drive.mpa.gg.pl/signin"); |
364 msg = soup_message_new("PUT", "https://drive.mpa.gg.pl/signin"); |
| 363 ggp_edisc_set_defaults(msg); |
365 ggp_edisc_set_defaults(msg); |
| |
366 headers = soup_message_get_request_headers(msg); |
| 364 |
367 |
| 365 metadata = g_strdup_printf("{" |
368 metadata = g_strdup_printf("{" |
| 366 "\"id\": \"%032x\", " |
369 "\"id\": \"%032x\", " |
| 367 "\"name\": \"%s\", " |
370 "\"name\": \"%s\", " |
| 368 "\"os_version\": \"" GGP_EDISC_OS "\", " |
371 "\"os_version\": \"" GGP_EDISC_OS "\", " |
| 370 "\"type\": \"" GGP_EDISC_TYPE "\"}", |
373 "\"type\": \"" GGP_EDISC_TYPE "\"}", |
| 371 g_random_int_range(1, 1 << 16), |
374 g_random_int_range(1, 1 << 16), |
| 372 g_get_host_name(), ggp_libgaduw_version(gc)); |
375 g_get_host_name(), ggp_libgaduw_version(gc)); |
| 373 |
376 |
| 374 tmp = g_strdup_printf("IMToken %s", imtoken); |
377 tmp = g_strdup_printf("IMToken %s", imtoken); |
| 375 soup_message_headers_replace(msg->request_headers, "Authorization", tmp); |
378 soup_message_headers_replace(headers, "Authorization", tmp); |
| 376 g_free(tmp); |
379 g_free(tmp); |
| 377 tmp = g_strdup_printf("gg/pl:%u", accdata->session->uin); |
380 tmp = g_strdup_printf("gg/pl:%u", accdata->session->uin); |
| 378 soup_message_headers_replace(msg->request_headers, "X-gged-user", tmp); |
381 soup_message_headers_replace(headers, "X-gged-user", tmp); |
| 379 g_free(tmp); |
382 g_free(tmp); |
| 380 soup_message_headers_replace(msg->request_headers, "X-gged-client-metadata", |
383 soup_message_headers_replace(headers, "X-gged-client-metadata", metadata); |
| 381 metadata); |
|
| 382 g_free(metadata); |
384 g_free(metadata); |
| 383 |
385 |
| 384 soup_session_queue_message(sdata->session, msg, ggp_ggdrive_auth_done, gc); |
386 soup_session_queue_message(sdata->session, msg, ggp_ggdrive_auth_done, gc); |
| 385 sdata->auth_request = msg; |
387 sdata->auth_request = msg; |
| 386 } |
388 } |
| 527 g_return_if_fail(sdata != NULL); |
529 g_return_if_fail(sdata != NULL); |
| 528 |
530 |
| 529 msg = soup_message_new("PUT", "https://drive.mpa.gg.pl/send_ticket"); |
531 msg = soup_message_new("PUT", "https://drive.mpa.gg.pl/send_ticket"); |
| 530 ggp_edisc_set_defaults(msg); |
532 ggp_edisc_set_defaults(msg); |
| 531 |
533 |
| 532 soup_message_headers_replace(msg->request_headers, "X-gged-security-token", |
534 soup_message_headers_replace(soup_message_get_request_headers(msg), |
| |
535 "X-gged-security-token", |
| 533 sdata->security_token); |
536 sdata->security_token); |
| 534 |
537 |
| 535 data = g_strdup_printf("{\"send_ticket\":{" |
538 data = g_strdup_printf("{\"send_ticket\":{" |
| 536 "\"recipient\":\"%s\"," |
539 "\"recipient\":\"%s\"," |
| 537 "\"file_name\":\"%s\"," |
540 "\"file_name\":\"%s\"," |
| 648 msg = soup_message_new("PUT", upload_url); |
652 msg = soup_message_new("PUT", upload_url); |
| 649 g_free(upload_url); |
653 g_free(upload_url); |
| 650 |
654 |
| 651 ggp_edisc_set_defaults(msg); |
655 ggp_edisc_set_defaults(msg); |
| 652 |
656 |
| 653 soup_message_headers_replace(msg->request_headers, "X-gged-local-revision", |
657 headers = soup_message_get_request_headers(msg); |
| 654 "0"); |
658 soup_message_headers_replace(headers, "X-gged-local-revision", "0"); |
| 655 soup_message_headers_replace(msg->request_headers, "X-gged-security-token", |
659 soup_message_headers_replace(headers, "X-gged-security-token", |
| 656 sdata->security_token); |
660 sdata->security_token); |
| 657 soup_message_headers_replace(msg->request_headers, "X-gged-metadata", |
661 soup_message_headers_replace(headers, "X-gged-metadata", |
| 658 "{\"node_type\": \"file\"}"); |
662 "{\"node_type\": \"file\"}"); |
| 659 |
663 |
| 660 soup_message_set_flags(msg, SOUP_MESSAGE_CAN_REBUILD); |
664 soup_message_set_flags(msg, SOUP_MESSAGE_CAN_REBUILD); |
| 661 soup_message_body_set_accumulate(msg->request_body, FALSE); |
665 soup_message_body_set_accumulate(msg->request_body, FALSE); |
| 662 soup_message_headers_set_content_length(msg->request_headers, |
666 soup_message_headers_set_content_length(headers, |
| 663 purple_xfer_get_size(xfer)); |
667 purple_xfer_get_size(xfer)); |
| 664 g_signal_connect(msg, "wrote-headers", |
668 g_signal_connect(msg, "wrote-headers", |
| 665 G_CALLBACK(ggp_edisc_xfer_send_reader), xfer); |
669 G_CALLBACK(ggp_edisc_xfer_send_reader), xfer); |
| 666 g_signal_connect(msg, "wrote-chunk", G_CALLBACK(ggp_edisc_xfer_send_reader), |
670 g_signal_connect(msg, "wrote-chunk", G_CALLBACK(ggp_edisc_xfer_send_reader), |
| 667 xfer); |
671 xfer); |
| 756 static void ggp_edisc_xfer_recv_ack(PurpleXfer *xfer, gboolean accept) |
760 static void ggp_edisc_xfer_recv_ack(PurpleXfer *xfer, gboolean accept) |
| 757 { |
761 { |
| 758 GGPXfer *edisc_xfer = GGP_XFER(xfer); |
762 GGPXfer *edisc_xfer = GGP_XFER(xfer); |
| 759 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(edisc_xfer->gc); |
763 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(edisc_xfer->gc); |
| 760 SoupMessage *msg; |
764 SoupMessage *msg; |
| |
765 SoupMessageHeaders *headers; |
| 761 |
766 |
| 762 g_return_if_fail(sdata != NULL); |
767 g_return_if_fail(sdata != NULL); |
| 763 |
768 |
| 764 edisc_xfer->allowed = accept; |
769 edisc_xfer->allowed = accept; |
| 765 |
770 |
| 766 msg = soup_message_new("PUT", |
771 msg = soup_message_new("PUT", |
| 767 ggp_edisc_xfer_ticket_url(edisc_xfer->ticket_id)); |
772 ggp_edisc_xfer_ticket_url(edisc_xfer->ticket_id)); |
| 768 ggp_edisc_set_defaults(msg); |
773 ggp_edisc_set_defaults(msg); |
| 769 |
774 |
| 770 soup_message_headers_replace(msg->request_headers, "X-gged-security-token", |
775 headers = soup_message_get_request_headers(msg); |
| |
776 soup_message_headers_replace(headers, "X-gged-security-token", |
| 771 sdata->security_token); |
777 sdata->security_token); |
| 772 soup_message_headers_replace(msg->request_headers, "X-gged-ack-status", |
778 soup_message_headers_replace(headers, "X-gged-ack-status", |
| 773 accept ? "allow" : "reject"); |
779 accept ? "allow" : "reject"); |
| 774 |
780 |
| 775 soup_session_queue_message(sdata->session, msg, |
781 soup_session_queue_message(sdata->session, msg, |
| 776 accept ? ggp_edisc_xfer_recv_ack_done : NULL, |
782 accept ? ggp_edisc_xfer_recv_ack_done : NULL, |
| 777 xfer); |
783 xfer); |
| 1022 msg = soup_message_new("GET", ggp_edisc_xfer_ticket_url(ticket)); |
1028 msg = soup_message_new("GET", ggp_edisc_xfer_ticket_url(ticket)); |
| 1023 g_free(ticket); |
1029 g_free(ticket); |
| 1024 |
1030 |
| 1025 ggp_edisc_set_defaults(msg); |
1031 ggp_edisc_set_defaults(msg); |
| 1026 |
1032 |
| 1027 soup_message_headers_replace(msg->request_headers, "X-gged-security-token", |
1033 soup_message_headers_replace(soup_message_get_request_headers(msg), |
| |
1034 "X-gged-security-token", |
| 1028 sdata->security_token); |
1035 sdata->security_token); |
| 1029 |
1036 |
| 1030 soup_session_queue_message(sdata->session, msg, |
1037 soup_session_queue_message(sdata->session, msg, |
| 1031 ggp_edisc_xfer_recv_ticket_update_got, gc); |
1038 ggp_edisc_xfer_recv_ticket_update_got, gc); |
| 1032 } |
1039 } |