Mercurial > pidgin
diff libpurple/protocols/jabber/jingle/jingle.c @ 26087:0a5737e1e969
Update to newest XEP-0166 Jingle spec.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Thu, 05 Feb 2009 01:31:40 +0000 |
parents | 88f183f7dfc7 |
children | 925af7142249 |
line wrap: on
line diff
--- a/libpurple/protocols/jabber/jingle/jingle.c Thu Feb 05 00:31:35 2009 +0000 +++ b/libpurple/protocols/jabber/jingle/jingle.c Thu Feb 05 01:31:40 2009 +0000 @@ -41,8 +41,12 @@ return "content-add"; case JINGLE_CONTENT_MODIFY: return "content-modify"; + case JINGLE_CONTENT_REJECT: + return "content-reject"; case JINGLE_CONTENT_REMOVE: return "content-remove"; + case JINGLE_DESCRIPTION_INFO: + return "description-info"; case JINGLE_SESSION_ACCEPT: return "session-accept"; case JINGLE_SESSION_INFO: @@ -55,6 +59,8 @@ return "transport-accept"; case JINGLE_TRANSPORT_INFO: return "transport-info"; + case JINGLE_TRANSPORT_REJECT: + return "transport-reject"; case JINGLE_TRANSPORT_REPLACE: return "transport-replace"; default: @@ -71,8 +77,12 @@ return JINGLE_CONTENT_ADD; else if (!strcmp(action, "content-modify")) return JINGLE_CONTENT_MODIFY; + else if (!strcmp(action, "content-reject")) + return JINGLE_CONTENT_REJECT; else if (!strcmp(action, "content-remove")) return JINGLE_CONTENT_REMOVE; + else if (!strcmp(action, "description-info")) + return JINGLE_DESCRIPTION_INFO; else if (!strcmp(action, "session-accept")) return JINGLE_SESSION_ACCEPT; else if (!strcmp(action, "session-info")) @@ -85,6 +95,8 @@ return JINGLE_TRANSPORT_ACCEPT; else if (!strcmp(action, "transport-info")) return JINGLE_TRANSPORT_INFO; + else if (!strcmp(action, "transport-reject")) + return JINGLE_TRANSPORT_REJECT; else if (!strcmp(action, "transport-replace")) return JINGLE_TRANSPORT_REPLACE; else @@ -207,6 +219,30 @@ } static void +jingle_handle_description_info(JingleSession *session, xmlnode *jingle) +{ + xmlnode *content = xmlnode_get_child(jingle, "content"); + + jabber_iq_send(jingle_session_create_ack(session, jingle)); + + jingle_session_accept_session(session); + + for (; content; content = xmlnode_get_next_twin(content)) { + const gchar *name = xmlnode_get_attrib(content, "name"); + const gchar *creator = xmlnode_get_attrib(content, "creator"); + JingleContent *parsed_content = + jingle_session_find_content(session, name, creator); + if (parsed_content == NULL) { + purple_debug_error("jingle", "Error parsing content\n"); + /* XXX: send error */ + } else { + jingle_content_handle_action(parsed_content, content, + JINGLE_DESCRIPTION_INFO); + } + } +} + +static void jingle_handle_session_accept(JingleSession *session, xmlnode *jingle) { xmlnode *content = xmlnode_get_child(jingle, "content"); @@ -408,6 +444,8 @@ jingle_handle_content_reject(session, jingle); } else if (!strcmp(action, "content-remove")) { jingle_handle_content_remove(session, jingle); + } else if (!strcmp(action, "description-info")) { + jingle_handle_description_info(session, jingle); } else if (!strcmp(action, "session-accept")) { jingle_handle_session_accept(session, jingle); } else if (!strcmp(action, "session-info")) {