summaryrefslogtreecommitdiff
path: root/libpurple/protocols/jabber/jingle/jingle.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpurple/protocols/jabber/jingle/jingle.c')
-rw-r--r--libpurple/protocols/jabber/jingle/jingle.c92
1 files changed, 77 insertions, 15 deletions
diff --git a/libpurple/protocols/jabber/jingle/jingle.c b/libpurple/protocols/jabber/jingle/jingle.c
index d445bdecb6..f106797fff 100644
--- a/libpurple/protocols/jabber/jingle/jingle.c
+++ b/libpurple/protocols/jabber/jingle/jingle.c
@@ -35,6 +35,9 @@
#include "rtp.h"
#include <string.h>
+#ifdef USE_VV
+#include <gst/gst.h>
+#endif
GType
jingle_get_type(const gchar *type)
@@ -431,32 +434,91 @@ jingle_terminate_sessions(JabberStream *js)
jingle_terminate_sessions_gh, NULL);
}
+#ifdef USE_VV
+static GValueArray *
+jingle_create_relay_info(const gchar *ip, guint port, const gchar *username,
+ const gchar *password, const gchar *relay_type, GValueArray *relay_info)
+{
+ GValue value;
+ GstStructure *turn_setup = gst_structure_new("relay-info",
+ "ip", G_TYPE_STRING, ip,
+ "port", G_TYPE_UINT, port,
+ "username", G_TYPE_STRING, username,
+ "password", G_TYPE_STRING, password,
+ "relay-type", G_TYPE_STRING, relay_type,
+ NULL);
+ purple_debug_info("jabber", "created gst_structure %" GST_PTR_FORMAT "\n",
+ turn_setup);
+ if (turn_setup) {
+ memset(&value, 0, sizeof(GValue));
+ g_value_init(&value, GST_TYPE_STRUCTURE);
+ gst_value_set_structure(&value, turn_setup);
+ relay_info = g_value_array_append(relay_info, &value);
+ gst_structure_free(turn_setup);
+ }
+ return relay_info;
+}
+
GParameter *
-jingle_get_params(JabberStream *js, guint *num)
+jingle_get_params(JabberStream *js, const gchar *relay_ip, guint relay_udp,
+ guint relay_tcp, guint relay_ssltcp, const gchar *relay_username,
+ const gchar *relay_password, guint *num)
{
/* don't set a STUN server if one is set globally in prefs, in that case
this will be handled in media.c */
gboolean has_account_stun = js->stun_ip && !purple_network_get_stun_ip();
- guint num_params = has_account_stun ? 2 : 0;
+ guint num_params = has_account_stun ?
+ (relay_ip ? 3 : 2) : (relay_ip ? 1 : 0);
GParameter *params = NULL;
-
+ int next_index = 0;
+
if (num_params > 0) {
params = g_new0(GParameter, num_params);
- purple_debug_info("jabber",
- "setting param stun-ip for stream using auto-discovered IP: %s\n",
- js->stun_ip);
- params[0].name = "stun-ip";
- g_value_init(&params[0].value, G_TYPE_STRING);
- g_value_set_string(&params[0].value, js->stun_ip);
- purple_debug_info("jabber",
- "setting param stun-port for stream using auto-discovered port: %d\n",
- js->stun_port);
- params[1].name = "stun-port";
- g_value_init(&params[1].value, G_TYPE_UINT);
- g_value_set_uint(&params[1].value, js->stun_port);
+ if (has_account_stun) {
+ purple_debug_info("jabber",
+ "setting param stun-ip for stream using Google auto-config: %s\n",
+ js->stun_ip);
+ params[next_index].name = "stun-ip";
+ g_value_init(&params[next_index].value, G_TYPE_STRING);
+ g_value_set_string(&params[next_index].value, js->stun_ip);
+ purple_debug_info("jabber",
+ "setting param stun-port for stream using Google auto-config: %d\n",
+ js->stun_port);
+ next_index++;
+ params[next_index].name = "stun-port";
+ g_value_init(&params[next_index].value, G_TYPE_UINT);
+ g_value_set_uint(&params[next_index].value, js->stun_port);
+ next_index++;
+ }
+
+ if (relay_ip) {
+ GValueArray *relay_info = g_value_array_new(0);
+
+ if (relay_udp) {
+ relay_info =
+ jingle_create_relay_info(relay_ip, relay_udp, relay_username,
+ relay_password, "udp", relay_info);
+ }
+ if (relay_tcp) {
+ relay_info =
+ jingle_create_relay_info(relay_ip, relay_tcp, relay_username,
+ relay_password, "tcp", relay_info);
+ }
+ if (relay_ssltcp) {
+ relay_info =
+ jingle_create_relay_info(relay_ip, relay_ssltcp, relay_username,
+ relay_password, "tls", relay_info);
+ }
+ params[next_index].name = "relay-info";
+ g_value_init(&params[next_index].value, G_TYPE_VALUE_ARRAY);
+ g_value_set_boxed(&params[next_index].value, relay_info);
+ g_value_array_free(relay_info);
+ }
}
*num = num_params;
return params;
}
+#endif
+