JingleContent * jingle_session_find_pending_content(JingleSession *session, const gchar *name, const gchar *creator) { GList *iter; if (name == NULL) return NULL; iter = session->priv->pending_contents; for (; iter; iter = g_list_next(iter)) { JingleContent *content = iter->data; gchar *cname = jingle_content_get_name(content); gboolean result = g_str_equal(name, cname); g_free(cname); if (creator != NULL) { gchar *ccreator = jingle_content_get_creator(content); result = (result && !strcmp(creator, ccreator)); g_free(ccreator); } if (result == TRUE) return content; } return NULL; }
static xmlnode * jingle_content_to_xml_internal(JingleContent *content, xmlnode *jingle, JingleActionType action) { xmlnode *node = xmlnode_new_child(jingle, "content"); gchar *creator = jingle_content_get_creator(content); gchar *name = jingle_content_get_name(content); gchar *senders = jingle_content_get_senders(content); gchar *disposition = jingle_content_get_disposition(content); xmlnode_set_attrib(node, "creator", creator); xmlnode_set_attrib(node, "name", name); xmlnode_set_attrib(node, "senders", senders); if (strcmp("session", disposition)) xmlnode_set_attrib(node, "disposition", disposition); g_free(disposition); g_free(senders); g_free(name); g_free(creator); if (action != JINGLE_CONTENT_REMOVE) { JingleTransport *transport; if (action != JINGLE_TRANSPORT_ACCEPT && action != JINGLE_TRANSPORT_INFO && action != JINGLE_TRANSPORT_REJECT && action != JINGLE_TRANSPORT_REPLACE) { xmlnode *description = xmlnode_new_child(node, "description"); xmlnode_set_namespace(description, jingle_content_get_description_type(content)); } if (action != JINGLE_TRANSPORT_REJECT && action == JINGLE_TRANSPORT_REPLACE) transport = jingle_content_get_pending_transport(content); else transport = jingle_content_get_transport(content); jingle_transport_to_xml(transport, node, action); g_object_unref(transport); } return node; }