author | Nicolas Cornu <nicolas.cornu@ensi-bourges.fr> |
Thu, 05 Aug 2010 04:33:11 +0200 | |
changeset 81 | 8b6320ad470b |
parent 80 | 1c2ef2c5debe |
child 83 | d5c5e9be53cb |
permissions | -rw-r--r-- |
21
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
1 |
/* |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
2 |
* sessions.c |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
3 |
* |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
4 |
* Copyrigth (C) 2010 Nicolas Cornu <nicolas.cornu@ensi-bourges.fr> |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
5 |
* |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
6 |
* This program is free software; you can redistribute it and/or modify |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
7 |
* it under the terms of the GNU General Public License as published by |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
8 |
* the Free Software Foundation; either version 2 of the License, or (at |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
9 |
* your option) any later version. |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
10 |
* |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
11 |
* This program is distributed in the hope that it will be useful, but |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
12 |
* WITHOUT ANY WARRANTY; without even the implied warranty of |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
14 |
* General Public License for more details. |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
15 |
* |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
16 |
* You should have received a copy of the GNU General Public License |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
17 |
* along with this program; if not, write to the Free Software |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
18 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
19 |
* USA |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
20 |
*/ |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
21 |
|
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
22 |
#include <glib.h> |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
23 |
|
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
24 |
#include <jingle/jingle.h> |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
25 |
#include <jingle/sessions.h> |
33
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
26 |
#include <jingle/register.h> |
21
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
27 |
|
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
28 |
|
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
29 |
static GSList *sessions; |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
30 |
|
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
31 |
|
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
32 |
/** |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
33 |
* Create a new session and insert it in the linked list. |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
34 |
*/ |
80
1c2ef2c5debe
Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
75
diff
changeset
|
35 |
JingleSession *session_new(const gchar *sid, const gchar *from, |
1c2ef2c5debe
Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
75
diff
changeset
|
36 |
const gchar *to, SessionOrigin origin) |
21
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
37 |
{ |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
38 |
JingleSession *js = g_new0(JingleSession, 1); |
67
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
39 |
|
80
1c2ef2c5debe
Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
75
diff
changeset
|
40 |
js->sid = g_strdup(sid); |
67
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
41 |
js->from = g_strdup(from); |
80
1c2ef2c5debe
Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
75
diff
changeset
|
42 |
js->to = g_strdup(to); |
67
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
43 |
|
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
44 |
sessions = g_slist_append(sessions, js); |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
45 |
return js; |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
46 |
} |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
47 |
|
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
48 |
JingleSession *session_new_from_jinglenode(JingleNode *jn) |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
49 |
{ |
80
1c2ef2c5debe
Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
75
diff
changeset
|
50 |
const gchar *from, *to; |
24
c80439433dd7
Fix compilation errors.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
23
diff
changeset
|
51 |
|
80
1c2ef2c5debe
Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
75
diff
changeset
|
52 |
from = lm_message_node_get_attribute(jn->message->node, "from"); |
1c2ef2c5debe
Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
75
diff
changeset
|
53 |
to = lm_message_node_get_attribute(jn->message->node, "to"); |
1c2ef2c5debe
Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
75
diff
changeset
|
54 |
if (!from || !to) { |
21
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
55 |
return NULL; |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
56 |
} |
80
1c2ef2c5debe
Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
75
diff
changeset
|
57 |
|
1c2ef2c5debe
Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
75
diff
changeset
|
58 |
return session_new(jn->sid, from, to, JINGLE_SESSION_INCOMING); |
21
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
59 |
} |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
60 |
|
31
02f5698ffa49
fix jingle_ft_check, make session_find use JingleNodes directly.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
24
diff
changeset
|
61 |
JingleSession *session_find_by_sid(const gchar *sid, const gchar *from) |
21
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
62 |
{ |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
63 |
GSList *el; |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
64 |
JingleSession *js; |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
65 |
for (el = sessions; el; el = el->next) { |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
66 |
js = (JingleSession*) el->data; |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
67 |
if (g_strcmp0(js->sid, sid) && g_strcmp0(js->from, from)) { |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
68 |
return js; |
35
a0fd92a93af7
Fix the function converting a JingleNode to a LmMessage.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
33
diff
changeset
|
69 |
} |
21
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
70 |
} |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
71 |
return NULL; |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
72 |
} |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
73 |
|
31
02f5698ffa49
fix jingle_ft_check, make session_find use JingleNodes directly.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
24
diff
changeset
|
74 |
JingleSession *session_find(const JingleNode *jn) |
02f5698ffa49
fix jingle_ft_check, make session_find use JingleNodes directly.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
24
diff
changeset
|
75 |
{ |
81
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
80
diff
changeset
|
76 |
const gchar *from = lm_message_node_get_attribute(jn->message->node, "from"); |
31
02f5698ffa49
fix jingle_ft_check, make session_find use JingleNodes directly.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
24
diff
changeset
|
77 |
return session_find_by_sid(jn->sid, from); |
02f5698ffa49
fix jingle_ft_check, make session_find use JingleNodes directly.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
24
diff
changeset
|
78 |
} |
02f5698ffa49
fix jingle_ft_check, make session_find use JingleNodes directly.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
24
diff
changeset
|
79 |
|
67
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
80 |
void session_add_content(JingleSession *sess, const gchar *name, |
38 | 81 |
SessionState state) |
33
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
82 |
{ |
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
83 |
SessionContent *sc = g_new0(SessionContent, 1); |
37
fce6bdc1ff46
Modify comparaison function for session, now basing on name
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
35
diff
changeset
|
84 |
|
67
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
85 |
sc->name = name; |
38 | 86 |
sc->state = state; |
67
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
87 |
|
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
88 |
sess->content = g_slist_append(sess->content, sc); |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
89 |
} |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
90 |
|
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
91 |
void session_add_app(JingleSession *sess, const gchar *name, |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
92 |
const gchar *xmlns, gconstpointer data) |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
93 |
{ |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
94 |
SessionContent *sc = session_find_sessioncontent(sess, name); |
37
fce6bdc1ff46
Modify comparaison function for session, now basing on name
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
35
diff
changeset
|
95 |
|
67
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
96 |
sc->xmlns_desc = xmlns; |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
97 |
sc->appfuncs = jingle_get_appfuncs(xmlns); |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
98 |
sc->description = data; |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
99 |
} |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
100 |
|
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
101 |
void session_add_trans(JingleSession *sess, const gchar *name, |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
102 |
const gchar *xmlns, gconstpointer data) |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
103 |
{ |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
104 |
SessionContent *sc = session_find_sessioncontent(sess, name); |
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
105 |
|
67
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
106 |
sc->xmlns_trans = xmlns; |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
107 |
sc->transfuncs = jingle_get_transportfuncs(xmlns); |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
108 |
sc->transport = data; |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
109 |
} |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
110 |
|
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
111 |
void session_add_content_from_jinglecontent(JingleSession *sess, JingleContent *cn, |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
112 |
SessionState state) |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
113 |
{ |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
114 |
SessionContent *sc = g_new0(SessionContent, 1); |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
115 |
session_add_content(sess, cn->name, state); |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
116 |
session_add_app(sess, cn->name, |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
117 |
lm_message_node_get_attribute(cn->description, "xmlns"), |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
118 |
sc->appfuncs->check(cn, NULL)); |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
119 |
session_add_trans(sess, cn->name, |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
120 |
lm_message_node_get_attribute(cn->transport, "xmlns"), |
c12618793df0
New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
121 |
sc->transfuncs->check(cn, NULL)); |
33
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
122 |
} |
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
123 |
|
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
124 |
SessionContent *session_find_sessioncontent(JingleSession *sess, |
37
fce6bdc1ff46
Modify comparaison function for session, now basing on name
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
35
diff
changeset
|
125 |
const gchar *name) |
33
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
126 |
{ |
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
127 |
GSList *el; |
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
128 |
SessionContent *sc; |
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
129 |
for (el = sess->content; el; el = el->next) { |
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
130 |
sc = (SessionContent*) el->data; |
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
131 |
if (!g_strcmp0(sc->name, name)) |
33
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
132 |
return sc; |
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
133 |
} |
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
134 |
return NULL; |
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
135 |
} |
92e92ce901e7
a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
32
diff
changeset
|
136 |
|
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
137 |
SessionContent *session_find_transport(const gchar *xmlns_trans, gconstpointer data) |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
138 |
{ |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
139 |
GSList *el, *el1; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
140 |
JingleSession *sess; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
141 |
SessionContent *sc; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
142 |
for (el1 = sessions; el1; el1 = el1->next) { |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
143 |
sess = (JingleSession*) el1->data; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
144 |
for (el = sess->content; el; el = el->next) { |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
145 |
sc = (SessionContent*) el->data; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
146 |
if (!g_strcmp0(sc->xmlns_trans, xmlns_trans) && sc->transfuncs->cmp(sc->transport, data)) |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
147 |
return sc; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
148 |
} |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
149 |
} |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
150 |
return NULL; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
151 |
} |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
47
diff
changeset
|
152 |
|
37
fce6bdc1ff46
Modify comparaison function for session, now basing on name
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
35
diff
changeset
|
153 |
void session_remove_sessioncontent(JingleSession *sess, const gchar *name) |
fce6bdc1ff46
Modify comparaison function for session, now basing on name
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
35
diff
changeset
|
154 |
{ |
fce6bdc1ff46
Modify comparaison function for session, now basing on name
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
35
diff
changeset
|
155 |
SessionContent *sc; |
fce6bdc1ff46
Modify comparaison function for session, now basing on name
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
35
diff
changeset
|
156 |
sc = session_find_sessioncontent(sess, name); |
38 | 157 |
if(sc == NULL) return; |
158 |
||
47 | 159 |
if (sc->state == JINGLE_SESSION_STATE_ACTIVE); // We should stop the transfert |
38 | 160 |
|
161 |
sess->content = g_slist_remove(sess->content, sc); |
|
162 |
} |
|
163 |
||
164 |
void session_changestate_sessioncontent(JingleSession *sess, const gchar *name, |
|
165 |
SessionState state) |
|
166 |
{ |
|
167 |
SessionContent *sc; |
|
168 |
sc = session_find_sessioncontent(sess, name); |
|
37
fce6bdc1ff46
Modify comparaison function for session, now basing on name
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
35
diff
changeset
|
169 |
if(sc != NULL) |
38 | 170 |
sc->state = state; |
37
fce6bdc1ff46
Modify comparaison function for session, now basing on name
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
35
diff
changeset
|
171 |
} |
fce6bdc1ff46
Modify comparaison function for session, now basing on name
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
35
diff
changeset
|
172 |
|
21
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
173 |
/** |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
174 |
* Remove a session from the linked list and free it. |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
175 |
*/ |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
176 |
void session_delete(JingleSession *sess) |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
177 |
{ |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
178 |
session_remove(sess); |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
179 |
session_free(sess); |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
180 |
} |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
181 |
|
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
182 |
/** |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
183 |
* Remove a session from the linked list. |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
184 |
*/ |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
185 |
void session_remove(JingleSession *sess) |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
186 |
{ |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
187 |
sessions = g_slist_remove(sessions, sess); |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
188 |
} |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
189 |
|
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
190 |
/** |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
191 |
* Free a session. |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
192 |
*/ |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
193 |
void session_free(JingleSession *sess) |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
194 |
{ |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
195 |
g_free(sess->sid); |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
196 |
g_free(sess->from); |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
197 |
g_free(sess); |
147f131382dd
Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
198 |
} |
75
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
199 |
|
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
200 |
void jingle_handle_app(JingleSession *sess, const gchar *name, |
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
201 |
const gchar *xmlns_app, gconstpointer app, |
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
202 |
const gchar *to) |
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
203 |
{ |
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
204 |
JingleTransportFuncs *trans = jingle_transport_for_app(xmlns_app, NULL); |
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
205 |
|
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
206 |
if (trans == NULL) |
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
207 |
return; |
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
208 |
|
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
209 |
session_add_trans(sess, name, trans->xmlns(), trans->new()); |
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
210 |
|
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
211 |
jingle_send_session_initiate(sess, to); |
bd48c89b0a3d
Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
67
diff
changeset
|
212 |
} |