Mercurial > pidgin
comparison libpurple/protocols/jabber/jingle/rtp.c @ 26285:b1c4fcc5b814
Add ssrc property to JingleRtp.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Tue, 17 Mar 2009 10:11:18 +0000 |
parents | 4f47eeaa1414 |
children | 26cf297796a5 |
comparison
equal
deleted
inserted
replaced
26284:4f47eeaa1414 | 26285:b1c4fcc5b814 |
---|---|
35 #include <string.h> | 35 #include <string.h> |
36 | 36 |
37 struct _JingleRtpPrivate | 37 struct _JingleRtpPrivate |
38 { | 38 { |
39 gchar *media_type; | 39 gchar *media_type; |
40 gchar *ssrc; | |
40 }; | 41 }; |
41 | 42 |
42 #define JINGLE_RTP_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), JINGLE_TYPE_RTP, JingleRtpPrivate)) | 43 #define JINGLE_RTP_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), JINGLE_TYPE_RTP, JingleRtpPrivate)) |
43 | 44 |
44 static void jingle_rtp_class_init (JingleRtpClass *klass); | 45 static void jingle_rtp_class_init (JingleRtpClass *klass); |
61 #endif | 62 #endif |
62 | 63 |
63 enum { | 64 enum { |
64 PROP_0, | 65 PROP_0, |
65 PROP_MEDIA_TYPE, | 66 PROP_MEDIA_TYPE, |
67 PROP_SSRC, | |
66 }; | 68 }; |
67 | 69 |
68 GType | 70 GType |
69 jingle_rtp_get_type() | 71 jingle_rtp_get_type() |
70 { | 72 { |
106 g_param_spec_string("media-type", | 108 g_param_spec_string("media-type", |
107 "Media Type", | 109 "Media Type", |
108 "The media type (\"audio\" or \"video\") for this rtp session.", | 110 "The media type (\"audio\" or \"video\") for this rtp session.", |
109 NULL, | 111 NULL, |
110 G_PARAM_READWRITE)); | 112 G_PARAM_READWRITE)); |
113 g_object_class_install_property(gobject_class, PROP_SSRC, | |
114 g_param_spec_string("ssrc", | |
115 "ssrc", | |
116 "The ssrc for this rtp session.", | |
117 NULL, | |
118 G_PARAM_READWRITE)); | |
119 | |
111 g_type_class_add_private(klass, sizeof(JingleRtpPrivate)); | 120 g_type_class_add_private(klass, sizeof(JingleRtpPrivate)); |
112 } | 121 } |
113 | 122 |
114 static void | 123 static void |
115 jingle_rtp_init (JingleRtp *rtp) | 124 jingle_rtp_init (JingleRtp *rtp) |
116 { | 125 { |
117 rtp->priv = JINGLE_RTP_GET_PRIVATE(rtp); | 126 rtp->priv = JINGLE_RTP_GET_PRIVATE(rtp); |
118 memset(rtp->priv, 0, sizeof(rtp->priv)); | 127 memset(rtp->priv, 0, sizeof(*rtp->priv)); |
119 } | 128 } |
120 | 129 |
121 static void | 130 static void |
122 jingle_rtp_finalize (GObject *rtp) | 131 jingle_rtp_finalize (GObject *rtp) |
123 { | 132 { |
124 JingleRtpPrivate *priv = JINGLE_RTP_GET_PRIVATE(rtp); | 133 JingleRtpPrivate *priv = JINGLE_RTP_GET_PRIVATE(rtp); |
125 purple_debug_info("jingle-rtp","jingle_rtp_finalize\n"); | 134 purple_debug_info("jingle-rtp","jingle_rtp_finalize\n"); |
126 | 135 |
127 g_free(priv->media_type); | 136 g_free(priv->media_type); |
137 g_free(priv->ssrc); | |
128 } | 138 } |
129 | 139 |
130 static void | 140 static void |
131 jingle_rtp_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) | 141 jingle_rtp_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) |
132 { | 142 { |
138 switch (prop_id) { | 148 switch (prop_id) { |
139 case PROP_MEDIA_TYPE: | 149 case PROP_MEDIA_TYPE: |
140 g_free(rtp->priv->media_type); | 150 g_free(rtp->priv->media_type); |
141 rtp->priv->media_type = g_value_dup_string(value); | 151 rtp->priv->media_type = g_value_dup_string(value); |
142 break; | 152 break; |
153 case PROP_SSRC: | |
154 g_free(rtp->priv->ssrc); | |
155 rtp->priv->ssrc = g_value_dup_string(value); | |
156 break; | |
143 default: | 157 default: |
144 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | 158 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |
145 break; | 159 break; |
146 } | 160 } |
147 } | 161 } |
156 | 170 |
157 switch (prop_id) { | 171 switch (prop_id) { |
158 case PROP_MEDIA_TYPE: | 172 case PROP_MEDIA_TYPE: |
159 g_value_set_string(value, rtp->priv->media_type); | 173 g_value_set_string(value, rtp->priv->media_type); |
160 break; | 174 break; |
175 case PROP_SSRC: | |
176 g_value_set_string(value, rtp->priv->ssrc); | |
177 break; | |
161 default: | 178 default: |
162 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | 179 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |
163 break; | 180 break; |
164 } | 181 } |
165 } | 182 } |
168 jingle_rtp_get_media_type(JingleContent *content) | 185 jingle_rtp_get_media_type(JingleContent *content) |
169 { | 186 { |
170 gchar *media_type; | 187 gchar *media_type; |
171 g_object_get(content, "media-type", &media_type, NULL); | 188 g_object_get(content, "media-type", &media_type, NULL); |
172 return media_type; | 189 return media_type; |
190 } | |
191 | |
192 gchar * | |
193 jingle_rtp_get_ssrc(JingleContent *content) | |
194 { | |
195 gchar *ssrc; | |
196 g_object_get(content, "ssrc", &ssrc, NULL); | |
197 return ssrc; | |
173 } | 198 } |
174 | 199 |
175 static PurpleMedia * | 200 static PurpleMedia * |
176 jingle_rtp_get_media(JingleSession *session) | 201 jingle_rtp_get_media(JingleSession *session) |
177 { | 202 { |
523 jingle_rtp_parse_internal(xmlnode *rtp) | 548 jingle_rtp_parse_internal(xmlnode *rtp) |
524 { | 549 { |
525 JingleContent *content = parent_class->parse(rtp); | 550 JingleContent *content = parent_class->parse(rtp); |
526 xmlnode *description = xmlnode_get_child(rtp, "description"); | 551 xmlnode *description = xmlnode_get_child(rtp, "description"); |
527 const gchar *media_type = xmlnode_get_attrib(description, "media"); | 552 const gchar *media_type = xmlnode_get_attrib(description, "media"); |
553 const gchar *ssrc = xmlnode_get_attrib(description, "ssrc"); | |
528 purple_debug_info("jingle-rtp", "rtp parse\n"); | 554 purple_debug_info("jingle-rtp", "rtp parse\n"); |
529 g_object_set(content, "media-type", media_type, NULL); | 555 g_object_set(content, "media-type", media_type, NULL); |
556 if (ssrc != NULL) | |
557 g_object_set(content, "ssrc", ssrc, NULL); | |
530 return content; | 558 return content; |
531 } | 559 } |
532 | 560 |
533 static void | 561 static void |
534 jingle_rtp_add_payloads(xmlnode *description, GList *codecs) | 562 jingle_rtp_add_payloads(xmlnode *description, GList *codecs) |
569 xmlnode *description = xmlnode_get_child(node, "description"); | 597 xmlnode *description = xmlnode_get_child(node, "description"); |
570 if (description != NULL) { | 598 if (description != NULL) { |
571 JingleSession *session = jingle_content_get_session(rtp); | 599 JingleSession *session = jingle_content_get_session(rtp); |
572 PurpleMedia *media = jingle_rtp_get_media(session); | 600 PurpleMedia *media = jingle_rtp_get_media(session); |
573 gchar *media_type = jingle_rtp_get_media_type(rtp); | 601 gchar *media_type = jingle_rtp_get_media_type(rtp); |
602 gchar *ssrc = jingle_rtp_get_ssrc(rtp); | |
574 gchar *name = jingle_content_get_name(rtp); | 603 gchar *name = jingle_content_get_name(rtp); |
575 GList *codecs = purple_media_get_codecs(media, name); | 604 GList *codecs = purple_media_get_codecs(media, name); |
576 | 605 |
577 xmlnode_set_attrib(description, "media", media_type); | 606 xmlnode_set_attrib(description, "media", media_type); |
607 | |
608 if (ssrc != NULL) | |
609 xmlnode_set_attrib(description, "ssrc", ssrc); | |
578 | 610 |
579 g_free(media_type); | 611 g_free(media_type); |
580 g_free(name); | 612 g_free(name); |
581 g_object_unref(session); | 613 g_object_unref(session); |
582 | 614 |