summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Lundblad <malu@pidgin.im>2010-09-05 08:35:37 +0000
committerMarcus Lundblad <malu@pidgin.im>2010-09-05 08:35:37 +0000
commitbaba5db44c5930a275a5c3287a74776a5dd0f514 (patch)
tree1e886d7eff4af55b4a786ad0a8e438cf7d355c4e
parentd68072bc81fd81352ecb24235e8367f7b16ee0c8 (diff)
downloadpidgin-baba5db44c5930a275a5c3287a74776a5dd0f514.tar.gz
refactor out the relay credential fetching code to its own module
-rw-r--r--libpurple/protocols/jabber/Makefile.am2
-rw-r--r--libpurple/protocols/jabber/Makefile.mingw1
-rw-r--r--libpurple/protocols/jabber/google/google_session.c139
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;