summaryrefslogtreecommitdiff
path: root/channels/chan_motif.c
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2012-07-10 11:49:18 +0000
committerJoshua Colp <jcolp@digium.com>2012-07-10 11:49:18 +0000
commit7296b670d4ca4fdaba41b82a0236f0cb6dd1da02 (patch)
tree7d08e430874e0c331f3142246a7a070b7adeb2e5 /channels/chan_motif.c
parent8f162be802fbadea7d1551202f1297cacf10a2e9 (diff)
Add required items for Google video support.
This adds legacy STUN support for RTCP sockets, adds RTCP candidates to the Google transport information, and adds required codec parameters. (closes issue ASTERISK-20106) Reported by: Malcolm Davenport git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@369864 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_motif.c')
-rw-r--r--channels/chan_motif.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/channels/chan_motif.c b/channels/chan_motif.c
index d7238cec5..d8e332049 100644
--- a/channels/chan_motif.c
+++ b/channels/chan_motif.c
@@ -820,12 +820,15 @@ static int jingle_add_google_candidates_to_transport(struct ast_rtp_instance *rt
break;
}
- /* We only support RTP candidates */
- if (candidate->id != 1) {
+ if (candidate->id == 1) {
+ iks_insert_attrib(local_candidate, "name", !video ? "rtp" : "video_rtp");
+ } else if (candidate->id == 2) {
+ iks_insert_attrib(local_candidate, "name", !video ? "rtcp" : "video_rtcp");
+ } else {
+ iks_delete(local_candidate);
continue;
}
- iks_insert_attrib(local_candidate, "name", !video ? "rtp" : "video_rtp");
iks_insert_attrib(local_candidate, "address", ast_sockaddr_stringify_host(&candidate->address));
iks_insert_attrib(local_candidate, "port", ast_sockaddr_stringify_port(&candidate->address));
@@ -1150,6 +1153,27 @@ static int jingle_add_payloads_to_description(struct jingle_session *session, st
iks_insert_attrib(payload, "clockrate", tmp);
}
+ if ((type == AST_FORMAT_TYPE_VIDEO) && (session->transport == JINGLE_TRANSPORT_GOOGLE_V2)) {
+ iks *parameter;
+
+ /* Google requires these parameters to be set, but alas we can not give accurate values so use some safe defaults */
+ if ((parameter = iks_new("parameter"))) {
+ iks_insert_attrib(parameter, "name", "width");
+ iks_insert_attrib(parameter, "value", "640");
+ iks_insert_node(payload, parameter);
+ }
+ if ((parameter = iks_new("parameter"))) {
+ iks_insert_attrib(parameter, "name", "height");
+ iks_insert_attrib(parameter, "value", "480");
+ iks_insert_node(payload, parameter);
+ }
+ if ((parameter = iks_new("parameter"))) {
+ iks_insert_attrib(parameter, "name", "framerate");
+ iks_insert_attrib(parameter, "value", "30");
+ iks_insert_node(payload, parameter);
+ }
+ }
+
iks_insert_node(description, payload);
payloads[i++] = payload;
}
@@ -2010,6 +2034,11 @@ static int jingle_interpret_google_transport(struct jingle_session *session, iks
continue;
}
+ /* We only permit audio and video, not RTCP */
+ if (strcasecmp(name, "rtp") && strcasecmp(name, "video_rtp")) {
+ continue;
+ }
+
/* Parse the target information so we can send a STUN request to the candidate */
if (sscanf(port, "%30d", &real_port) != 1) {
jingle_queue_hangup_with_cause(session, AST_CAUSE_PROTOCOL_ERROR);