Skip to content

Commit

Permalink
Some sessions management code.
Browse files Browse the repository at this point in the history
Fix a spelling mistake (transfer not transfert)
  • Loading branch information
Nicolas Cornu committed Jun 16, 2010
1 parent b5fd8dd commit 9edd57f
Show file tree
Hide file tree
Showing 10 changed files with 143 additions and 15 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Expand Up @@ -38,7 +38,7 @@ include_directories(SYSTEM ${GLIB_INCLUDE_DIRS} ${MCABBER_INCLUDE_DIRS})

## Target definitions
add_subdirectory(jingle)
add_subdirectory(jingle-filetransfert)
add_subdirectory(jingle-filetransfer)

## Packaging information
set(CPACK_PACKAGE_NAME mcabber-jingle)
Expand Down
4 changes: 4 additions & 0 deletions jingle-filetransfer/CMakeLists.txt
@@ -0,0 +1,4 @@
add_library(jingle-filetransfer MODULE filetransfer.c)
set_target_properties(jingle-filetransfer PROPERTIES COMPILE_FLAGS "-Wall")
include_directories(${CMAKE_SOURCE_DIR})
install(TARGETS jingle-filetransfer DESTINATION lib/mcabber)
@@ -1,5 +1,5 @@
/*
* filetransfert.c
* filetransfer.c
*
* Copyrigth (C) 2010 Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
*
Expand Down Expand Up @@ -31,7 +31,7 @@
#include <jingle/check.h>
#include <jingle/register.h>

#include "filetransfert.h"
#include "filetransfer.h"


gconstpointer jingle_ft_check(JingleContent *cn, GError **err, gpointer *data);
Expand All @@ -43,11 +43,11 @@ const gchar *deps[] = { "jingle", NULL };

JingleAppFuncs funcs = {jingle_ft_check, NULL};

module_info_t info_jingle_filetransfert = {
module_info_t info_jingle_filetransfer = {
.branch = MCABBER_BRANCH,
.api = MCABBER_API_VERSION,
.version = PROJECT_VERSION,
.description = "Jingle File Transfert (XEP-0234)\n",
.description = "Jingle File Transfer (XEP-0234)\n",
.requires = deps,
.init = jingle_ft_init,
.uninit = jingle_ft_uninit,
Expand Down Expand Up @@ -77,7 +77,7 @@ gconstpointer jingle_ft_check(JingleContent *cn, GError **err, gpointer *data)

if (g_strcmp0(lm_message_node_get_attribute(node, "xmlns"), NS_SI_FT)) {
g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_MISSING,
"the file transfert offer has an invalid/unsupported namespace");
"the file transfer offer has an invalid/unsupported namespace");
return NULL;
}

Expand Down
File renamed without changes.
4 changes: 0 additions & 4 deletions jingle-filetransfert/CMakeLists.txt

This file was deleted.

4 changes: 2 additions & 2 deletions jingle/CMakeLists.txt
@@ -1,5 +1,5 @@
add_library(jingle MODULE jingle.c check.c action-handlers.c register.c)
set_target_properties(jingle PROPERTIES COMPILE_FLAGS "-Wall")
add_library(jingle MODULE jingle.c check.c action-handlers.c register.c sessions.c)
set_target_properties(jingle PROPERTIES COMPILE_FLAGS "")
include_directories(${LM_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR})
target_link_libraries(jingle ${LM_LIBRARIES})
install(TARGETS jingle DESTINATION lib/mcabber)
9 changes: 9 additions & 0 deletions jingle/check.c
Expand Up @@ -20,8 +20,11 @@
*/

#include <glib.h>

#include <loudmouth/loudmouth.h>

#include <mcabber/utils.h>

#include <jingle/check.h>
#include <jingle/jingle.h>

Expand Down Expand Up @@ -66,6 +69,12 @@ gboolean check_jingle(LmMessage *message, LmMessageNode *node,
return FALSE;
}

if (!check_jid_syntax(jn->initiator)) {
g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_BADVALUE,
"the initiator attribute in invalid (not a jid)");
return FALSE;
}

jn->action = jingle_action_from_str(actionstr);
if (jn->action == JINGLE_UNKNOWN_ACTION) {
g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_BADVALUE,
Expand Down
9 changes: 6 additions & 3 deletions jingle/jingle.h
Expand Up @@ -63,12 +63,15 @@ typedef struct {
/* Random session identifier generated by the initator. */
const gchar *sid;

/* Doubly-linked list of JingleContent. */
/* Linked list of JingleContent. */
GSList *content;

} JingleNode;

typedef struct {
/* pointer to the <content> element */
LmMessageNode *node;

/* which party originally generated the content type.
* the defined values are "initiator" and "responder"
* (where the default is "initiator"). required. */
Expand All @@ -91,12 +94,12 @@ typedef struct {
/* each content element (must) contain one description
* child element that specifies a desired application.
* the content of this node is app specific. */
LmMessageNode *description;
gconstpointer *description;

/* each content element (must) contain one transport
* child element that specifies a potential transport
* method */
LmMessageNode *transport;
gconstpointer *transport;

} JingleContent;

Expand Down
89 changes: 89 additions & 0 deletions jingle/sessions.c
@@ -0,0 +1,89 @@
/*
* sessions.c
*
* Copyrigth (C) 2010 Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*/

#include <glib.h>


#include <jingle/jingle.h>
#include <jingle/sessions.h>


static GSList *sessions;


/**
* Create a new session and insert it in the linked list.
*/
JingleSession *session_new(JingleNode *jn)
{
JingleSession *js = g_new0(JingleSession, 1);
js->sid = g_strdup(jn->sid);
js->initiator = g_strdup(jn->initiator);
js->from = lm_message_node_get_attribute(lm_message_get_node(jn->message),
"from");
if (!js->from) {
return NULL;
}
js->from = g_strdup(js->from);


sessions = g_slist_append(sessions, js);
}

JingleSession *session_find(const gchar *sid, const gchar *from)
{
GSList *el;
JingleSession *js;
for (el = sessions; el; el = el->next) {
js = (JingleSession*) el->data;
if (g_strcmp0(js->sid, sid) && g_strcmp0(js->from, from)) {
return js;
}
}
return NULL;
}

/**
* Remove a session from the linked list and free it.
*/
void session_delete(JingleSession *sess)
{
session_remove(sess);
session_free(sess);
}

/**
* Remove a session from the linked list.
*/
void session_remove(JingleSession *sess)
{
sessions = g_slist_remove(sessions, sess);
}

/**
* Free a session.
*/
void session_free(JingleSession *sess)
{
g_free(sess->sid);
g_free(sess->from);
g_free(sess);
}
27 changes: 27 additions & 0 deletions jingle/sessions.h
@@ -0,0 +1,27 @@
#ifndef __JINGLE_SESSIONS_H__
#define __JINGLE_SESSIONS_H__ 1

#include <glib.h>


typedef enum {
JINGLE_SESSION_
} JingleStatus;

typedef struct {
JingleStatus status;
const gchar *sid;
const gchar *from;
GSList *content;
} JingleSession;


JingleSession *session_new(JingleNode *jn,
gconstpointer *app,
gconstpointer *transport);
JingleSession *session_find();
void session_delete(JingleSession *sess);
void session_remove(JingleSession *sess);
void session_free(JingleSession *sess);

#endif

0 comments on commit 9edd57f

Please sign in to comment.