--- a/jingle/action-handlers.c Sat Aug 14 19:21:42 2010 +0200
+++ b/jingle/action-handlers.c Sat Aug 14 21:02:49 2010 +0200
@@ -38,231 +38,6 @@
extern LmMessageHandler* jingle_ack_iq_handler;
-
-void handle_content_accept(JingleNode *jn)
-{
- GError *err = NULL;
- GSList *child = NULL;
- JingleContent *cn;
- JingleAppFuncs *appfuncs;
- JingleTransportFuncs *transfuncs;
- gconstpointer description, transport;
- const gchar *xmlns;
- JingleSession *sess;
-
- if (!check_contents(jn, &err)) {
- scr_log_print(LPRINT_DEBUG, "jingle: One of the content element was invalid (%s)",
- err->message);
- jingle_send_iq_error(jn->message, "cancel", "bad-request", NULL);
- return;
- }
-
- // it's better if there is at least one content elem
- if (g_slist_length(jn->content) < 1) {
- jingle_send_iq_error(jn->message, "cancel", "bad-request", NULL);
- return;
- }
-
- // if a session with the same sid doesn't already exists
- if ((sess = session_find(jn)) == NULL) {
- jingle_send_iq_error(jn->message, "cancel", "item-not-found", "unknown-session");
- return;
- }
-
- jingle_ack_iq(jn->message);
-
- for (child = jn->content; child; child = child->next) {
- cn = (JingleContent *)(child->data);
- session_changestate_sessioncontent(sess, cn->name, JINGLE_SESSION_STATE_ACTIVE);
- }
- jingle_free_jinglenode(jn);
-}
-
-void handle_content_add(JingleNode *jn)
-{
- GError *err = NULL;
- GSList *child = NULL;
- JingleContent *cn;
- JingleAppFuncs *appfuncs;
- JingleTransportFuncs *transfuncs;
- gconstpointer description, transport;
- const gchar *xmlns;
- JingleSession *sess;
- JingleNode accept, reject;
- JingleContent tmp_cn;
- LmMessage *r;
-
- if (!check_contents(jn, &err)) {
- scr_log_print(LPRINT_DEBUG, "jingle: One of the content element was invalid (%s)",
- err->message);
- jingle_send_iq_error(jn->message, "cancel", "bad-request", NULL);
- return;
- }
-
- if (g_slist_length(jn->content) < 1) {
- jingle_send_iq_error(jn->message, "cancel", "bad-request", NULL);
- return;
- }
-
- if ((sess = session_find(jn)) == NULL) {
- jingle_send_iq_error(jn->message, "cancel", "item-not-found", "unknown-session");
- return;
- }
-
- jingle_ack_iq(jn->message);
-
- accept.action = JINGLE_CONTENT_ACCEPT;
- accept.sid = jn->sid;
- accept.content = NULL;
-
- reject.action = JINGLE_CONTENT_REJECT;
- reject.sid = jn->sid;
- reject.content = NULL;
-
- for (child = jn->content; child; child = child->next) {
- cn = (JingleContent *)(child->data);
-
- xmlns = lm_message_node_get_attribute(cn->description, "xmlns");
- appfuncs = jingle_get_appfuncs(xmlns);
- if (appfuncs == NULL) continue;
-
- xmlns = lm_message_node_get_attribute(cn->transport, "xmlns");
- transfuncs = jingle_get_transportfuncs(xmlns);
- if (appfuncs == NULL) continue;
-
- description = appfuncs->check(cn, &err);
- if (description == NULL || err != NULL) {
- reject.content = g_slist_append(reject.content, cn);
- continue;
- }
- transport = transfuncs->check(cn, &err);
- if (transport == NULL || err != NULL) {
- reject.content = g_slist_append(reject.content, cn);
- continue;
- }
- session_add_content_from_jinglecontent(sess, cn, JINGLE_SESSION_STATE_ACTIVE);
- accept.content = g_slist_append(accept.content, cn);
- }
-
- if (g_slist_length(accept.content) != 0) {
- JingleAckHandle *ackhandle = g_new0(JingleAckHandle, 1);
- r = lm_message_from_jinglenode(&accept, lm_message_get_from(jn->message));
- if (r) {
- ackhandle->callback = NULL;
- ackhandle->user_data = NULL;
- lm_connection_send_with_reply(lconnection, r,
- jingle_new_ack_handler(ackhandle), &err);
- lm_message_unref(r);
- if (err != NULL) {
- // TODO
- }
- }
- }
-
- if (g_slist_length(reject.content) != 0) {
- JingleAckHandle *ackhandle = g_new0(JingleAckHandle, 1);
- r = lm_message_from_jinglenode(&reject, lm_message_get_from(jn->message));
- if (r) {
- ackhandle->callback = NULL;
- ackhandle->user_data = NULL;
- lm_connection_send_with_reply(lconnection, r,
- jingle_new_ack_handler(ackhandle), &err);
- lm_message_unref(r);
- if (err != NULL) {
- // TODO
- }
- }
- }
- jingle_free_jinglenode(jn);
-}
-
-void handle_content_reject(JingleNode *jn)
-{
- GError *err = NULL;
- GSList *child = NULL;
- JingleContent *cn;
- JingleAppFuncs *appfuncs;
- JingleTransportFuncs *transfuncs;
- gconstpointer description, transport;
- const gchar *xmlns;
- JingleSession *sess;
-
- if (!check_contents(jn, &err)) {
- scr_log_print(LPRINT_DEBUG, "jingle: One of the content element was invalid (%s)",
- err->message);
- jingle_send_iq_error(jn->message, "cancel", "bad-request", NULL);
- return;
- }
-
- if (g_slist_length(jn->content) < 1) {
- jingle_send_iq_error(jn->message, "cancel", "bad-request", NULL);
- return;
- }
-
- if ((sess = session_find(jn)) == NULL) {
- jingle_send_iq_error(jn->message, "cancel", "item-not-found", "unknown-session");
- return;
- }
-
- jingle_ack_iq(jn->message);
-
- for (child = jn->content; child; child = child->next) {
- cn = (JingleContent *)(child->data);
- session_remove_sessioncontent(sess, cn->name);
- }
-
- // If there is nothing more to do, close the session
- if (g_slist_length(sess->content) == 0) {
- jingle_send_session_terminate(sess, "success");
- session_delete(sess);
- return;
- }
- jingle_free_jinglenode(jn);
-}
-
-void handle_content_remove(JingleNode *jn)
-{
- GError *err = NULL;
- GSList *child = NULL;
- JingleContent *cn;
- JingleAppFuncs *appfuncs;
- JingleTransportFuncs *transfuncs;
- gconstpointer description, transport;
- const gchar *xmlns;
- JingleSession *sess;
-
- if (!check_contents(jn, &err)) {
- scr_log_print(LPRINT_DEBUG, "jingle: One of the content element was invalid (%s)",
- err->message);
- jingle_send_iq_error(jn->message, "cancel", "bad-request", NULL);
- jingle_free_jinglenode(jn);
- return;
- }
-
- /* it's better if there is at least one content elem */
- if (g_slist_length(jn->content) < 1) {
- jingle_send_iq_error(jn->message, "cancel", "bad-request", NULL);
- jingle_free_jinglenode(jn);
- return;
- }
-
- // if a session with the same sid doesn't already exists
- if ((sess = session_find(jn)) == NULL) {
- // TODO: look if it's really that
- jingle_send_iq_error(jn->message, "cancel", "item-not-found", "unknown-session");
- jingle_free_jinglenode(jn);
- return;
- }
-
- jingle_ack_iq(jn->message);
-
- for (child = jn->content; child; child = child->next) {
- cn = (JingleContent *)(child->data);
- session_remove_sessioncontent(sess, cn->name);
- }
- jingle_free_jinglenode(jn);
-}
-
void handle_session_initiate(JingleNode *jn)
{
GError *err = NULL;