eion/purple-hangouts

c8a7021921d5
Parents a5e1b543057d
Children 73a1f6648a46
Updates to work with the latest API changes in purple3
--- a/hangouts_connection.c Wed Oct 04 09:05:00 2017 +1300
+++ b/hangouts_connection.c Wed Oct 04 09:16:51 2017 +1300
@@ -23,10 +23,10 @@
#include <stdlib.h>
+#include <string.h>
#include <stdio.h>
#include <unistd.h>
-#include "ciphers/sha1hash.h"
#include "debug.h"
#include "request.h"
@@ -255,8 +255,8 @@
gint64 mstime;
gchar *mstime_str;
GTimeVal time;
- PurpleHash *hash;
- gchar sha1[41];
+ GChecksum *hash;
+ const gchar *sha1;
gchar *sapisid_cookie;
g_get_current_time(&time);
@@ -264,14 +264,13 @@
mstime_str = g_strdup_printf("%" G_GINT64_FORMAT, mstime);
sapisid_cookie = purple_http_cookie_jar_get(ha->cookie_jar, "SAPISID");
- hash = purple_sha1_hash_new();
- purple_hash_append(hash, (guchar *) mstime_str, strlen(mstime_str));
- purple_hash_append(hash, (guchar *) " ", 1);
- purple_hash_append(hash, (guchar *) sapisid_cookie, strlen(sapisid_cookie));
- purple_hash_append(hash, (guchar *) " ", 1);
- purple_hash_append(hash, (guchar *) HANGOUTS_PBLITE_XORIGIN_URL, strlen(HANGOUTS_PBLITE_XORIGIN_URL));
- purple_hash_digest_to_str(hash, sha1, 41);
- purple_hash_destroy(hash);
+ hash = g_checksum_new(G_CHECKSUM_SHA1);
+ g_checksum_update(hash, (guchar *) mstime_str, strlen(mstime_str));
+ g_checksum_update(hash, (guchar *) " ", 1);
+ g_checksum_update(hash, (guchar *) sapisid_cookie, strlen(sapisid_cookie));
+ g_checksum_update(hash, (guchar *) " ", 1);
+ g_checksum_update(hash, (guchar *) HANGOUTS_PBLITE_XORIGIN_URL, strlen(HANGOUTS_PBLITE_XORIGIN_URL));
+ sha1 = g_checksum_get_string(hash);
purple_http_request_header_set_printf(request, "Authorization", "SAPISIDHASH %s_%s", mstime_str, sha1);
purple_http_request_header_set(request, "X-Origin", HANGOUTS_PBLITE_XORIGIN_URL);
@@ -279,6 +278,7 @@
g_free(sapisid_cookie);
g_free(mstime_str);
+ g_checksum_free(hash);
}
@@ -311,7 +311,7 @@
}
if (ha->channel_watchdog) {
- purple_timeout_remove(ha->channel_watchdog);
+ g_source_remove(ha->channel_watchdog);
ha->channel_watchdog = 0;
}
@@ -386,9 +386,9 @@
g_string_free(url, TRUE);
if (ha->channel_watchdog) {
- purple_timeout_remove(ha->channel_watchdog);
+ g_source_remove(ha->channel_watchdog);
}
- ha->channel_watchdog = purple_timeout_add_seconds(1, channel_watchdog_check, ha->pc);
+ ha->channel_watchdog = g_timeout_add_seconds(1, channel_watchdog_check, ha->pc);
}
@@ -575,7 +575,7 @@
content_type = purple_http_response_get_header(response, "X-Goog-Safety-Content-Type");
if (g_strcmp0(content_type, "application/x-protobuf") == 0) {
- decoded_response = purple_base64_decode(raw_response, &response_len);
+ decoded_response = g_base64_decode(raw_response, &response_len);
unpacked_message = protobuf_c_message_unpack(response_message->descriptor, NULL, response_len, decoded_response);
if (unpacked_message != NULL) {
--- a/hangouts_conversation.c Wed Oct 04 09:05:00 2017 +1300
+++ b/hangouts_conversation.c Wed Oct 04 09:16:51 2017 +1300
@@ -22,6 +22,9 @@
#include "hangouts_connection.h"
#include "hangouts_events.h"
+#include <string.h>
+#include <glib.h>
+
#include "debug.h"
#include "status.h"
#include "glibcompat.h"
@@ -1340,7 +1343,7 @@
purple_http_request_set_cookie_jar(request, ha->cookie_jar);
purple_http_request_header_set(request, "Content-Type", "application/octet-stream");
purple_http_request_set_method(request, "POST");
- purple_http_request_set_contents(request, purple_image_get_data(image), purple_image_get_size(image));
+ purple_http_request_set_contents(request, purple_image_get_data(image), purple_image_get_data_size(image));
new_connection = purple_http_request(ha->pc, request, hangouts_conversation_send_image_part2_cb, ha);
purple_http_request_unref(request);
@@ -1367,7 +1370,7 @@
filename = g_strdup_printf("purple%d.%s", g_random_int(), purple_image_get_extension(image));
}
- postdata = g_strdup_printf("{\"protocolVersion\":\"0.8\",\"createSessionRequest\":{\"fields\":[{\"external\":{\"name\":\"file\",\"filename\":\"%s\",\"put\":{},\"size\":%" G_GSIZE_FORMAT "}},{\"inlined\":{\"name\":\"client\",\"content\":\"hangouts\",\"contentType\":\"text/plain\"}}]}}", filename, (gsize) purple_image_get_size(image));
+ postdata = g_strdup_printf("{\"protocolVersion\":\"0.8\",\"createSessionRequest\":{\"fields\":[{\"external\":{\"name\":\"file\",\"filename\":\"%s\",\"put\":{},\"size\":%" G_GSIZE_FORMAT "}},{\"inlined\":{\"name\":\"client\",\"content\":\"hangouts\",\"contentType\":\"text/plain\"}}]}}", filename, (gsize) purple_image_get_data_size(image));
request = purple_http_request_new(HANGOUTS_IMAGE_UPLOAD_URL);
purple_http_request_set_cookie_jar(request, ha->cookie_jar);
@@ -1977,14 +1980,14 @@
mark_seen_timeout = GPOINTER_TO_INT(purple_conversation_get_data(conv, "mark_seen_timeout"));
if (mark_seen_timeout) {
- purple_timeout_remove(mark_seen_timeout);
+ g_source_remove(mark_seen_timeout);
}
- mark_seen_timeout = purple_timeout_add_seconds(1, hangouts_mark_conversation_seen_timeout, conv);
+ mark_seen_timeout = g_timeout_add_seconds(1, hangouts_mark_conversation_seen_timeout, conv);
purple_conversation_set_data(conv, "mark_seen_timeout", GINT_TO_POINTER(mark_seen_timeout));
- purple_timeout_add_seconds(1, hangouts_mark_conversation_focused_timeout, conv);
+ g_timeout_add_seconds(1, hangouts_mark_conversation_focused_timeout, conv);
hangouts_set_active_client(pc);
}
--- a/hangouts_media.c Wed Oct 04 09:05:00 2017 +1300
+++ b/hangouts_media.c Wed Oct 04 09:16:51 2017 +1300
@@ -394,7 +394,7 @@
if (g_str_has_prefix(key_encoded, "inline:")) {
key_encoded += 7;
}
- hangouts_media->decryption_key = purple_base64_decode(key_encoded, &key_len);
+ hangouts_media->decryption_key = g_base64_decode(key_encoded, &key_len);
purple_media_set_decryption_parameters(hangouts_media->media,
"hangout", hangouts_media->who, "aes-128-icm", crypto_algo,
@@ -606,7 +606,7 @@
crypto_param.has_suite = TRUE;
crypto_param.suite = MEDIA_CRYPTO_SUITE__AES_CM_128_HMAC_SHA1_80;
- hangouts_crypto_base64 = purple_base64_encode(hangouts_media->encryption_key, SRTP_KEY_LEN);
+ hangouts_crypto_base64 = g_base64_encode(hangouts_media->encryption_key, SRTP_KEY_LEN);
hangouts_crypto_key = g_strconcat("inline:", hangouts_crypto_base64, NULL);
crypto_param.key_params = hangouts_crypto_key;
--- a/libhangouts.c Wed Oct 04 09:05:00 2017 +1300
+++ b/libhangouts.c Wed Oct 04 09:16:51 2017 +1300
@@ -19,6 +19,7 @@
#include "libhangouts.h"
#include <stdlib.h>
+#include <string.h>
#include <stdio.h>
#include <glib.h>
@@ -361,7 +362,7 @@
chat_conversation_typing_signal = purple_signal_connect(purple_conversations_get_handle(), "chat-conversation-typing", purple_connection_get_protocol(pc), PURPLE_CALLBACK(hangouts_conv_send_typing), ha);
}
- ha->active_client_timeout = purple_timeout_add_seconds(HANGOUTS_ACTIVE_CLIENT_TIMEOUT, ((GSourceFunc) hangouts_set_active_client), pc);
+ ha->active_client_timeout = g_timeout_add_seconds(HANGOUTS_ACTIVE_CLIENT_TIMEOUT, ((GSourceFunc) hangouts_set_active_client), pc);
}
static void
@@ -372,8 +373,8 @@
ha = purple_connection_get_protocol_data(pc);
purple_signals_disconnect_by_handle(ha->account);
- purple_timeout_remove(ha->active_client_timeout);
- purple_timeout_remove(ha->channel_watchdog);
+ g_source_remove(ha->active_client_timeout);
+ g_source_remove(ha->channel_watchdog);
purple_http_conn_cancel_all(pc);
--- a/libhangouts.h Wed Oct 04 09:05:00 2017 +1300
+++ b/libhangouts.h Wed Oct 04 09:16:51 2017 +1300
@@ -32,7 +32,6 @@
#include "account.h"
#include "connection.h"
-#include "ciphers/sha1hash.h"
#include "http.h"
#include "hangouts.pb-c.h"
--- a/purple2compat/http.c Wed Oct 04 09:05:00 2017 +1300
+++ b/purple2compat/http.c Wed Oct 04 09:16:51 2017 +1300
@@ -1719,7 +1719,9 @@
http_conn);
}
- http_conn->response->code = 0;
+ if (http_conn->response != NULL) {
+ http_conn->response->code = 0;
+ }
_purple_http_disconnect(http_conn, FALSE);
purple_http_connection_terminate(http_conn);
}
@@ -1732,7 +1734,9 @@
purple_debug_info("http", "Retrying connection %p...\n", http_conn);
- http_conn->response->code = 0;
+ if (http_conn->response != NULL) {
+ http_conn->response->code = 0;
+ }
_purple_http_disconnect(http_conn, FALSE);
_purple_http_reconnect(http_conn);
}
--- a/purple2compat/image.h Wed Oct 04 09:05:00 2017 +1300
+++ b/purple2compat/image.h Wed Oct 04 09:16:51 2017 +1300
@@ -7,7 +7,7 @@
#define purple_image_new_from_file(p, e) purple_imgstore_new_from_file(p)
#define purple_image_new_from_data(d, l) purple_imgstore_add(d, l, NULL)
#define purple_image_get_path purple_imgstore_get_filename
-#define purple_image_get_size purple_imgstore_get_size
+#define purple_image_get_data_size purple_imgstore_get_size
#define purple_image_get_data purple_imgstore_get_data
#define purple_image_get_extension purple_imgstore_get_extension
--- a/purplecompat.h Wed Oct 04 09:05:00 2017 +1300
+++ b/purplecompat.h Wed Oct 04 09:16:51 2017 +1300
@@ -193,6 +193,10 @@
#define purple_status_get_status_type purple_status_get_type
+#define g_timeout_add_seconds purple_timeout_add_seconds
+#define g_timeout_add purple_timeout_add
+#define g_source_remove purple_timeout_remove
+
#define PurpleXmlNode xmlnode
#define purple_xmlnode_new xmlnode_new
#define purple_xmlnode_new_child xmlnode_new_child