comparison libpurple/media.c @ 24933: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
24932:5606408fff59 24933: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(&param[0].value, G_TYPE_STRING); 1123 g_value_init(&param[num_params].value, G_TYPE_STRING);
1123 g_value_take_string(&param[0].value, stun_ip); 1124 g_value_take_string(&param[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(&param[1].value, G_TYPE_UINT); 1127 g_value_init(&param[num_params+1].value, G_TYPE_UINT);
1127 g_value_set_uint(&param[1].value, 5); 1128 g_value_set_uint(&param[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 }