diff options
author | Marcus Lundblad <malu@pidgin.im> | 2010-09-05 08:35:37 +0000 |
---|---|---|
committer | Marcus Lundblad <malu@pidgin.im> | 2010-09-05 08:35:37 +0000 |
commit | baba5db44c5930a275a5c3287a74776a5dd0f514 (patch) | |
tree | 1e886d7eff4af55b4a786ad0a8e438cf7d355c4e | |
parent | d68072bc81fd81352ecb24235e8367f7b16ee0c8 (diff) | |
download | pidgin-baba5db44c5930a275a5c3287a74776a5dd0f514.tar.gz |
refactor out the relay credential fetching code to its own module
-rw-r--r-- | libpurple/protocols/jabber/Makefile.am | 2 | ||||
-rw-r--r-- | libpurple/protocols/jabber/Makefile.mingw | 1 | ||||
-rw-r--r-- | libpurple/protocols/jabber/google/google_session.c | 139 |
3 files changed, 15 insertions, 127 deletions
diff --git a/libpurple/protocols/jabber/Makefile.am b/libpurple/protocols/jabber/Makefile.am index 190c534780..f376b71d21 100644 --- a/libpurple/protocols/jabber/Makefile.am +++ b/libpurple/protocols/jabber/Makefile.am @@ -38,6 +38,8 @@ JABBERSOURCES = \ google/google_session.h \ google/jingleinfo.c \ google/jingleinfo.h \ + google/relay.c \ + google/relay.h \ ibb.c \ ibb.h \ iq.c \ diff --git a/libpurple/protocols/jabber/Makefile.mingw b/libpurple/protocols/jabber/Makefile.mingw index e2725e22f6..4e9f9f9db6 100644 --- a/libpurple/protocols/jabber/Makefile.mingw +++ b/libpurple/protocols/jabber/Makefile.mingw @@ -61,6 +61,7 @@ C_SRC = \ google/google_roster.c \ google/google_session.c \ google/jingleinfo.c \ + google/relay.c \ ibb.c \ iq.c \ jabber.c \ diff --git a/libpurple/protocols/jabber/google/google_session.c b/libpurple/protocols/jabber/google/google_session.c index f2bb7be610..12faf31869 100644 --- a/libpurple/protocols/jabber/google/google_session.c +++ b/libpurple/protocols/jabber/google/google_session.c @@ -21,6 +21,7 @@ #include "internal.h" #include "debug.h" #include "google_session.h" +#include "relay.h" #include "jingle/jingle.h" @@ -336,83 +337,17 @@ jabber_google_session_get_params(JabberStream *js, const gchar *relay_ip, return new_params; } -static void -jabber_google_relay_parse_response(const gchar *response, gchar **ip, - guint *udp, guint *tcp, guint *ssltcp, gchar **username, gchar **password) -{ - gchar **lines = g_strsplit(response, "\n", -1); - int i = 0; - - for (; lines[i] ; i++) { - gchar *line = lines[i]; - gchar **parts = g_strsplit(line, "=", 2); - - if (parts[0] && parts[1]) { - if (purple_strequal(parts[0], "relay.ip")) { - *ip = g_strdup(parts[1]); - } else if (purple_strequal(parts[0], "relay.udp_port")) { - *udp = atoi(parts[1]); - } else if (purple_strequal(parts[0], "relay.tcp_port")) { - *tcp = atoi(parts[1]); - } else if (purple_strequal(parts[0], "relay.ssltcp_port")) { - *ssltcp = atoi(parts[1]); - } else if (purple_strequal(parts[0], "username")) { - *username = g_strdup(parts[1]); - } else if (purple_strequal(parts[0], "password")) { - *password = g_strdup(parts[1]); - } - } - g_strfreev(parts); - } - - g_strfreev(lines); -} - -static void -jabber_google_relay_remove_url_data(JabberStream *js, - PurpleUtilFetchUrlData *url_data) -{ - GList *iter = js->google_relay_requests; - - while (iter) { - if (iter->data == url_data) { - js->google_relay_requests = - g_list_delete_link(js->google_relay_requests, iter); - break; - } - } -} static void -jabber_google_relay_response_session_initiate_cb(PurpleUtilFetchUrlData *url_data, - gpointer user_data, const gchar *url_text, gsize len, - const gchar *error_message) +jabber_google_relay_response_session_initiate_cb(GoogleSession *session, + const gchar *relay_ip, guint relay_udp, guint relay_tcp, guint relay_ssltcp, + const gchar *relay_username, const gchar *relay_password) { - GoogleSession *session = (GoogleSession *) user_data; GParameter *params; guint num_params; JabberStream *js = session->js; - gchar *relay_ip = NULL; - guint relay_udp = 0; - guint relay_tcp = 0; - guint relay_ssltcp = 0; - gchar *relay_username = NULL; - gchar *relay_password = NULL; GoogleAVSessionData *session_data = (GoogleAVSessionData *) session->session_data; - - if (url_data) { - jabber_google_relay_remove_url_data(js, url_data); - } - - purple_debug_info("jabber", "got response on HTTP request to relay server\n"); - - if (url_text && len > 0) { - purple_debug_info("jabber", "got Google relay request response:\n%s\n", - url_text); - jabber_google_relay_parse_response(url_text, &relay_ip, &relay_udp, - &relay_tcp, &relay_ssltcp, &relay_username, &relay_password); - } session_data->media = purple_media_manager_create_media( purple_media_manager_get(), @@ -434,10 +369,6 @@ jabber_google_relay_response_session_initiate_cb(PurpleUtilFetchUrlData *url_dat params = jabber_google_session_get_params(js, relay_ip, relay_udp, relay_tcp, relay_ssltcp, relay_username, relay_password, &num_params); - - g_free(relay_ip); - g_free(relay_username); - g_free(relay_password); if (purple_media_add_stream(session_data->media, "google-voice", session->remote_jid, PURPLE_MEDIA_AUDIO, @@ -456,33 +387,6 @@ jabber_google_relay_response_session_initiate_cb(PurpleUtilFetchUrlData *url_dat g_free(params); } -static void -jabber_google_do_relay_request(JabberStream *js, GoogleSession *session, - PurpleUtilFetchUrlCallback cb) -{ - PurpleUtilFetchUrlData *url_data = NULL; - gchar *url = g_strdup_printf("http://%s", js->google_relay_host); - gchar *request = - g_strdup_printf("GET /create_session HTTP/1.0\r\n" - "Host: %s\r\n" - "X-Talk-Google-Relay-Auth: %s\r\n" - "X-Google-Relay-Auth: %s\r\n\r\n", - js->google_relay_host, js->google_relay_token, js->google_relay_token); - purple_debug_info("jabber", - "sending Google relay request %s to %s\n", request, url); - url_data = - purple_util_fetch_url_request(url, FALSE, NULL, FALSE, request, FALSE, - cb, session); - if (url_data) { - js->google_relay_requests = - g_list_prepend(js->google_relay_requests, url_data); - } else { - purple_debug_error("jabber", "unable to create Google relay request\n"); - cb(NULL, session, NULL, 0, NULL); - } - g_free(url); - g_free(request); -} gboolean jabber_google_session_initiate(JabberStream *js, const gchar *who, PurpleMediaSessionType type) @@ -531,8 +435,8 @@ jabber_google_session_initiate(JabberStream *js, const gchar *who, PurpleMediaSe jabber_google_do_relay_request(js, session, jabber_google_relay_response_session_initiate_cb); } else { - jabber_google_relay_response_session_initiate_cb(NULL, session, NULL, 0, - NULL); + jabber_google_relay_response_session_initiate_cb(session, NULL, 0, 0, 0, + NULL, NULL); } /* we don't actually know yet wether it succeeded... maybe this is very @@ -541,21 +445,13 @@ jabber_google_session_initiate(JabberStream *js, const gchar *who, PurpleMediaSe } static void -jabber_google_relay_response_session_handle_initiate_cb( - PurpleUtilFetchUrlData *url_data, - gpointer user_data, const gchar *url_text, gsize len, - const gchar *error_message) +jabber_google_relay_response_session_handle_initiate_cb(GoogleSession *session, + const gchar *relay_ip, guint relay_udp, guint relay_tcp, guint relay_ssltcp, + const gchar *relay_username, const gchar *relay_password) { - GoogleSession *session = (GoogleSession *) user_data; GParameter *params; guint num_params; JabberStream *js = session->js; - gchar *relay_ip = NULL; - guint relay_udp = 0; - guint relay_tcp = 0; - guint relay_ssltcp = 0; - gchar *relay_username = NULL; - gchar *relay_password = NULL; xmlnode *codec_element; xmlnode *desc_element; const gchar *xmlns; @@ -566,18 +462,7 @@ jabber_google_relay_response_session_handle_initiate_cb( GoogleAVSessionData *session_data = (GoogleAVSessionData *) session->session_data; - if (url_data) { - jabber_google_relay_remove_url_data(js, url_data); - } - - if (url_text && len > 0) { - purple_debug_info("jabber", "got Google relay request response:\n%s\n", - url_text); - jabber_google_relay_parse_response(url_text, &relay_ip, &relay_udp, - &relay_tcp, &relay_ssltcp, &relay_username, &relay_password); - } - - params = + params = jabber_google_session_get_params(js, relay_ip, relay_udp, relay_tcp, relay_ssltcp, relay_username, relay_password, &num_params); @@ -718,8 +603,8 @@ google_session_handle_initiate(JabberStream *js, GoogleSession *session, xmlnode jabber_google_do_relay_request(js, session, jabber_google_relay_response_session_handle_initiate_cb); } else { - jabber_google_relay_response_session_handle_initiate_cb(NULL, session, - NULL, 0, NULL); + jabber_google_relay_response_session_handle_initiate_cb(session, NULL, + 0, 0, 0, NULL, NULL); } return TRUE; |