# HG changeset patch # User Mike Ruprecht # Date 1216335571 0 # Node ID 001064185ad4bdb4e2799462ae60fe6baa3ce9d2 # Parent 1c68f78414b75cef51e29bd448f4ed6ba6d38390 Use the purple STUN server preference with the rawudp Farsight transmitter. diff -r 1c68f78414b7 -r 001064185ad4 libpurple/media.c --- a/libpurple/media.c Thu Jul 17 21:01:46 2008 +0000 +++ b/libpurple/media.c Thu Jul 17 22:59:31 2008 +0000 @@ -945,6 +945,27 @@ gst_pad_link(srcpad, sinkpad) == GST_PAD_LINK_OK ? "success" : "failure"); } +static gchar * +purple_media_get_stun_pref_ip() +{ + const gchar *stun_pref = + purple_prefs_get_string("/purple/network/stun_server"); + struct hostent *host; + + if ((host = gethostbyname(stun_pref)) && host->h_addr) { + gchar *stun_ip = g_strdup_printf("%hhu.%hhu.%hhu.%hhu", + host->h_addr[0], host->h_addr[1], + host->h_addr[2], host->h_addr[3]); + purple_debug_info("media", "IP address for %s found: %s\n", + stun_pref, stun_ip); + return stun_ip; + } else { + purple_debug_info("media", "Unable to resolve %s IP address\n", + stun_pref); + return NULL; + } +} + static gboolean purple_media_add_stream_internal(PurpleMedia *media, const gchar *sess_id, const gchar *who, FsMediaType type, @@ -1025,10 +1046,31 @@ if (!stream) { GError *err = NULL; + gchar *stun_ip = NULL; - stream = fs_session_new_stream(session->session, participant, - type_direction, transmitter, 0, - NULL, &err); + if (!strcmp(transmitter, "rawudp") && + (stun_ip = purple_media_get_stun_pref_ip())) { + GParameter param[2]; + memset(param, 0, sizeof(GParameter) * 2); + + param[0].name = "stun-ip"; + g_value_init(¶m[0].value, G_TYPE_STRING); + g_value_set_string(¶m[0].value, stun_ip); + + g_free(stun_ip); + + param[1].name = "stun-timeout"; + g_value_init(¶m[1].value, G_TYPE_UINT); + g_value_set_uint(¶m[1].value, 5); + + stream = fs_session_new_stream(session->session, + participant, type_direction, + transmitter, 2, param, &err); + } else { + stream = fs_session_new_stream(session->session, + participant, type_direction, + transmitter, 0, NULL, &err); + } if (err) { purple_debug_error("media", "Error creating stream: %s\n",