Mercurial > pidgin.yaz
comparison libpurple/media.c @ 26009:6ab96d5d8ac6
Add params to purple_media_add_stream to allow for different libNice
compatibility modes needed for GTalk and MSN.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Mon, 01 Sep 2008 01:23:26 +0000 |
parents | 5606408fff59 |
children | 3b4b9795f987 |
comparison
equal
deleted
inserted
replaced
26008:5606408fff59 | 26009:6ab96d5d8ac6 |
---|---|
1038 | 1038 |
1039 static gboolean | 1039 static gboolean |
1040 purple_media_add_stream_internal(PurpleMedia *media, const gchar *sess_id, | 1040 purple_media_add_stream_internal(PurpleMedia *media, const gchar *sess_id, |
1041 const gchar *who, FsMediaType type, | 1041 const gchar *who, FsMediaType type, |
1042 FsStreamDirection type_direction, | 1042 FsStreamDirection type_direction, |
1043 const gchar *transmitter) | 1043 const gchar *transmitter, |
1044 guint num_params, GParameter *params) | |
1044 { | 1045 { |
1045 PurpleMediaSession *session = purple_media_get_session(media, sess_id); | 1046 PurpleMediaSession *session = purple_media_get_session(media, sess_id); |
1046 FsParticipant *participant = NULL; | 1047 FsParticipant *participant = NULL; |
1047 FsStream *stream = NULL; | 1048 FsStream *stream = NULL; |
1048 FsStreamDirection *direction = NULL; | 1049 FsStreamDirection *direction = NULL; |
1113 GError *err = NULL; | 1114 GError *err = NULL; |
1114 gchar *stun_ip = NULL; | 1115 gchar *stun_ip = NULL; |
1115 | 1116 |
1116 if (!strcmp(transmitter, "rawudp") && | 1117 if (!strcmp(transmitter, "rawudp") && |
1117 (stun_ip = purple_media_get_stun_pref_ip())) { | 1118 (stun_ip = purple_media_get_stun_pref_ip())) { |
1118 GParameter param[2]; | 1119 GParameter *param = g_new0(GParameter, num_params+2); |
1119 memset(param, 0, sizeof(GParameter) * 2); | 1120 memcpy(param, params, sizeof(GParameter) * num_params); |
1120 | 1121 |
1121 param[0].name = "stun-ip"; | 1122 param[num_params].name = "stun-ip"; |
1122 g_value_init(¶m[0].value, G_TYPE_STRING); | 1123 g_value_init(¶m[num_params].value, G_TYPE_STRING); |
1123 g_value_take_string(¶m[0].value, stun_ip); | 1124 g_value_take_string(¶m[num_params].value, stun_ip); |
1124 | 1125 |
1125 param[1].name = "stun-timeout"; | 1126 param[num_params+1].name = "stun-timeout"; |
1126 g_value_init(¶m[1].value, G_TYPE_UINT); | 1127 g_value_init(¶m[num_params+1].value, G_TYPE_UINT); |
1127 g_value_set_uint(¶m[1].value, 5); | 1128 g_value_set_uint(¶m[num_params+1].value, 5); |
1128 | 1129 |
1129 stream = fs_session_new_stream(session->session, | 1130 stream = fs_session_new_stream(session->session, |
1130 participant, type_direction, | 1131 participant, type_direction, |
1131 transmitter, 2, param, &err); | 1132 transmitter, num_params+2, param, &err); |
1133 g_free(param); | |
1132 g_free(stun_ip); | 1134 g_free(stun_ip); |
1133 } else { | 1135 } else { |
1134 stream = fs_session_new_stream(session->session, | 1136 stream = fs_session_new_stream(session->session, |
1135 participant, type_direction, | 1137 participant, type_direction, |
1136 transmitter, 0, NULL, &err); | 1138 transmitter, num_params, params, &err); |
1137 } | 1139 } |
1138 | 1140 |
1139 if (err) { | 1141 if (err) { |
1140 purple_debug_error("media", "Error creating stream: %s\n", | 1142 purple_debug_error("media", "Error creating stream: %s\n", |
1141 err->message); | 1143 err->message); |
1162 } | 1164 } |
1163 | 1165 |
1164 gboolean | 1166 gboolean |
1165 purple_media_add_stream(PurpleMedia *media, const gchar *sess_id, const gchar *who, | 1167 purple_media_add_stream(PurpleMedia *media, const gchar *sess_id, const gchar *who, |
1166 PurpleMediaSessionType type, | 1168 PurpleMediaSessionType type, |
1167 const gchar *transmitter) | 1169 const gchar *transmitter, |
1170 guint num_params, GParameter *params) | |
1168 { | 1171 { |
1169 FsStreamDirection type_direction; | 1172 FsStreamDirection type_direction; |
1170 | 1173 |
1171 if (type & PURPLE_MEDIA_AUDIO) { | 1174 if (type & PURPLE_MEDIA_AUDIO) { |
1172 type_direction = purple_media_to_fs_stream_direction(type & PURPLE_MEDIA_AUDIO); | 1175 type_direction = purple_media_to_fs_stream_direction(type & PURPLE_MEDIA_AUDIO); |
1173 | 1176 |
1174 if (!purple_media_add_stream_internal(media, sess_id, who, | 1177 if (!purple_media_add_stream_internal(media, sess_id, who, |
1175 FS_MEDIA_TYPE_AUDIO, type_direction, | 1178 FS_MEDIA_TYPE_AUDIO, type_direction, |
1176 transmitter)) { | 1179 transmitter, num_params, params)) { |
1177 return FALSE; | 1180 return FALSE; |
1178 } | 1181 } |
1179 } | 1182 } |
1180 if (type & PURPLE_MEDIA_VIDEO) { | 1183 if (type & PURPLE_MEDIA_VIDEO) { |
1181 type_direction = purple_media_to_fs_stream_direction(type & PURPLE_MEDIA_VIDEO); | 1184 type_direction = purple_media_to_fs_stream_direction(type & PURPLE_MEDIA_VIDEO); |
1182 | 1185 |
1183 if (!purple_media_add_stream_internal(media, sess_id, who, | 1186 if (!purple_media_add_stream_internal(media, sess_id, who, |
1184 FS_MEDIA_TYPE_VIDEO, type_direction, | 1187 FS_MEDIA_TYPE_VIDEO, type_direction, |
1185 transmitter)) { | 1188 transmitter, num_params, params)) { |
1186 return FALSE; | 1189 return FALSE; |
1187 } | 1190 } |
1188 } | 1191 } |
1189 return TRUE; | 1192 return TRUE; |
1190 } | 1193 } |