--- 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;
--- a/jingle/jingle.c Sat Aug 14 19:21:42 2010 +0200
+++ b/jingle/jingle.c Sat Aug 14 21:02:49 2010 +0200
@@ -46,8 +46,6 @@
gpointer ignore);
static void jingle_init(void);
static void jingle_uninit(void);
-static void lm_insert_jinglecontent(gpointer data, gpointer userdata);
-
static LmMessageHandler* jingle_iq_handler = NULL;
static GSList *ack_handlers = NULL;
@@ -61,11 +59,11 @@
*/
struct JingleActionList jingle_action_list[] = {
{ NULL, NULL }, // for JINGLE_UNKNOWN_ACTION
- { "content-accept", handle_content_accept },
- { "content-add", handle_content_add },
+ { "content-accept", NULL },
+ { "content-add", NULL },
{ "content-modify", NULL },
- { "content-reject", handle_content_reject },
- { "content-remove", handle_content_remove },
+ { "content-reject", NULL },
+ { "content-remove", NULL },
{ "description-info", NULL },
{ "security-info", NULL },
{ "session-accept", handle_session_accept },
@@ -384,74 +382,6 @@
lm_message_handler_unref(jingle_iq_handler);
}
-
-LmMessage *lm_message_from_jinglenode(const JingleNode *jn, const gchar *to)
-{
- LmMessage* m;
- LmMessageNode *jnode;
- const gchar *actionstr;
-
- m = lm_message_new_with_sub_type(to, LM_MESSAGE_TYPE_IQ,
- LM_MESSAGE_SUB_TYPE_SET);
- jnode = lm_message_node_add_child(m->node, "jingle", NULL);
-
- if ((actionstr = jingle_action_list[jn->action].name))
- lm_message_node_set_attribute(jnode, "action", actionstr);
- else
- return NULL;
-
- if (jn->initiator)
- lm_message_node_set_attribute(jnode, "initiator", jn->initiator);
-
- if (jn->responder)
- lm_message_node_set_attribute(jnode, "responder", jn->responder);
-
- if (jn->sid)
- lm_message_node_set_attribute(jnode, "sid", jn->sid);
- else
- return NULL;
-
- g_slist_foreach(jn->content, lm_insert_jinglecontent, jnode);
- return m;
-}
-
-static void lm_insert_jinglecontent(gpointer data, gpointer userdata)
-{
- const gchar *xmlns;
- JingleTransportFuncs *tfunc;
- JingleAppFuncs *afunc;
- JingleContent* content = (JingleContent*) data;
- LmMessageNode* dad = (LmMessageNode*) userdata;
- LmMessageNode* node = (LmMessageNode*) lm_message_node_add_child(dad,
- "content", NULL);
-
- if (content->creator == JINGLE_CREATOR_INITIATOR)
- lm_message_node_set_attribute(node, "creator", "initiator");
- else
- lm_message_node_set_attribute(node, "creator", "responder");
-
- if (content->disposition)
- lm_message_node_set_attribute(node, "disposition", content->disposition);
-
- if (content->name)
- lm_message_node_set_attribute(node, "name", content->name);
-
- if (content->senders == JINGLE_SENDERS_BOTH)
- lm_message_node_set_attribute(node, "senders", "both");
- else if (content->senders == JINGLE_SENDERS_INITIATOR)
- lm_message_node_set_attribute(node, "senders", "initiator");
- else if (content->senders == JINGLE_SENDERS_RESPONDER)
- lm_message_node_set_attribute(node, "senders", "responder");
-
- xmlns = lm_message_node_get_attribute(content->transport, "xmlns");
- tfunc = jingle_get_transportfuncs(xmlns);
- tfunc->tomessage(tfunc->check(content, NULL), node);
-
- xmlns = lm_message_node_get_attribute(content->description, "xmlns");
- afunc = jingle_get_appfuncs(xmlns);
- afunc->tomessage(afunc->check(content, NULL), node);
-}
-
void handle_trans_data(const gchar *xmlns, gconstpointer data, const gchar *data2, guint len)
{
SessionContent *sc = session_find_transport(xmlns, data);
--- a/jingle/jingle.h Sat Aug 14 19:21:42 2010 +0200
+++ b/jingle/jingle.h Sat Aug 14 21:02:49 2010 +0200
@@ -135,7 +135,6 @@
void jingle_ack_iq(LmMessage *m);
-LmMessage *lm_message_from_jinglenode(const JingleNode *jn, const gchar *to);
void jingle_free_jinglenode(JingleNode *jn);
JingleAction jingle_action_from_str(const gchar* string);
@@ -147,4 +146,6 @@
gchar *jingle_generate_sid(void);
+void handle_trans_next(session_content *sc2);
+
#endif