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