jingle/sessions.h
author Dominik George <nik@naturalnet.de>
Mon, 04 Nov 2013 20:45:18 +0100
changeset 172 d33526eba590
parent 153 eab91df480d3
permissions -rw-r--r--
Fixed calls for MCabber API changes in 0.10.2.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     1
#ifndef __JINGLE_SESSIONS_H__
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     2
#define __JINGLE_SESSIONS_H__ 1
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
#include <glib.h>
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     5
33
92e92ce901e7 a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 32
diff changeset
     6
#include <jingle/register.h>
92e92ce901e7 a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 32
diff changeset
     7
21
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     8
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     9
typedef enum {
47
964b3ebeba8d Handle ack iq
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 40
diff changeset
    10
  JINGLE_SESSION_STATE_ACTIVE,
964b3ebeba8d Handle ack iq
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 40
diff changeset
    11
  JINGLE_SESSION_STATE_PENDING,
964b3ebeba8d Handle ack iq
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 40
diff changeset
    12
  JINGLE_SESSION_STATE_ENDED,
38
121e5ae7c1e5 new handlers
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 37
diff changeset
    13
} SessionState;
121e5ae7c1e5 new handlers
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 37
diff changeset
    14
80
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    15
typedef enum {
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    16
  /* A session that was initiated by some remote entity */
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    17
  JINGLE_SESSION_INCOMING,
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    18
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    19
  /* A session that we initiated (by sending a session-initiate) */
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    20
  JINGLE_SESSION_OUTGOING
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    21
} SessionOrigin;
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    22
21
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    23
typedef struct {
80
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    24
  /* Random session identifier generated by the initator. */
24
c80439433dd7 Fix compilation errors.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 23
diff changeset
    25
  gchar *sid;
80
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    26
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    27
  /* We need to know who initiated the session ?
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    28
   * us or a remote entity. */
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    29
  SessionOrigin origin;
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    30
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    31
  /* jid of the xmpp entity that initiated the session. */
24
c80439433dd7 Fix compilation errors.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 23
diff changeset
    32
  gchar *from;
80
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    33
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    34
  /* jid of the xmpp entity that received the initiation request. */
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    35
  gchar *to;
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    36
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    37
  /* jid of the entity we send iq. point to "from" or "to" depending on
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    38
   * who initiated the session. Basically a shortcut to avoid checking
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    39
   * origin. Should not be freed when destroying a JingleSession. */
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    40
  gchar *recipient;
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    41
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    42
  /* A singly-linked list of content. */
21
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    43
  GSList *content;
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    44
} JingleSession;
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    45
32
72bbe33f151a Modify the session-initiate handler among other things.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 31
diff changeset
    46
typedef struct {
81
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    47
  /* "A unique name or identifier for the content type
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    48
   *  according to the creator" */
119
0b9a7b505079 create the session when receiving a session-initiate
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 107
diff changeset
    49
  gchar *name;
81
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    50
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    51
  /* */
38
121e5ae7c1e5 new handlers
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 37
diff changeset
    52
  SessionState state;
81
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    53
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    54
  /* The namespace of the app */
119
0b9a7b505079 create the session when receiving a session-initiate
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 107
diff changeset
    55
  gchar *xmlns_desc;
81
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    56
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    57
  /* The internal struct of the app module */
33
92e92ce901e7 a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 32
diff changeset
    58
  gconstpointer description;
81
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    59
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    60
  /* Struct of functions provided by the app module */
32
72bbe33f151a Modify the session-initiate handler among other things.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 31
diff changeset
    61
  JingleAppFuncs *appfuncs;
81
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    62
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    63
  /* The namespace of the transport */
119
0b9a7b505079 create the session when receiving a session-initiate
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 107
diff changeset
    64
  gchar *xmlns_trans;
81
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    65
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    66
  /* The internal struct of the transport module */
33
92e92ce901e7 a function to find a sessioncontent
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 32
diff changeset
    67
  gconstpointer transport;
81
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    68
8b6320ad470b Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 80
diff changeset
    69
  /* Struct of functions provided by the transport module */
32
72bbe33f151a Modify the session-initiate handler among other things.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 31
diff changeset
    70
  JingleTransportFuncs *transfuncs;
72bbe33f151a Modify the session-initiate handler among other things.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 31
diff changeset
    71
} SessionContent;
72bbe33f151a Modify the session-initiate handler among other things.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 31
diff changeset
    72
153
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    73
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    74
// Manage sessions:
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    75
//    Inititiator:
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    76
void new_session_with_apps(const gchar *recipientjid, const gchar **name,
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    77
                           gconstpointer *datas, const gchar **ns);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    78
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    79
//    Responder:
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    80
JingleSession *session_new_from_jinglenode(JingleNode *jn);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    81
SessionContent *session_add_content_from_jinglecontent(JingleSession *sess,
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    82
                           JingleContent *cn, SessionState state, GError **err);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    83
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    84
//    Both:
80
1c2ef2c5debe Modifications to the JingleSession struct.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 75
diff changeset
    85
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
    86
                           const gchar *to, SessionOrigin origin);
153
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    87
void session_delete(JingleSession *sess);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    88
void session_remove(JingleSession *sess);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    89
void session_free(JingleSession *sess);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    90
SessionContent *session_add_content(JingleSession *sess, const gchar *name,
133
361d8577ebd1 Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 119
diff changeset
    91
                                    SessionState state);
153
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    92
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    93
// Manage contents:
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    94
int session_remove_sessioncontent(JingleSession *sess, const gchar *name);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    95
void session_changestate_sessioncontent(JingleSession *sess, const gchar *name,
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    96
                                        SessionState state);
67
c12618793df0 New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 54
diff changeset
    97
void session_add_app(JingleSession *sess, const gchar *name,
c12618793df0 New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 54
diff changeset
    98
                           const gchar *xmlns, gconstpointer data);
c12618793df0 New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 54
diff changeset
    99
void session_add_trans(JingleSession *sess, const gchar *name,
c12618793df0 New functions in sessions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 54
diff changeset
   100
                           const gchar *xmlns, gconstpointer data);
153
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   101
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   102
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   103
// Search:
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   104
//   Session:
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   105
JingleSession *session_find_by_sid(const gchar *sid, const gchar *from);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   106
JingleSession *session_find(const JingleNode *jn);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   107
JingleSession *session_find_by_sessioncontent(SessionContent *sc);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   108
SessionContent *sessioncontent_find_by_app(gconstpointer data);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   109
SessionContent *sessioncontent_find_by_transport(gconstpointer data);
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   110
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   111
//   Content:
152
a8623ca21574 JFT: app sub-module no more create the session himself
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 151
diff changeset
   112
SessionContent *sessioncontent_find_by_transport(gconstpointer data);
a8623ca21574 JFT: app sub-module no more create the session himself
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 151
diff changeset
   113
SessionContent *sessioncontent_find_by_app(gconstpointer data);
133
361d8577ebd1 Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 119
diff changeset
   114
SessionContent *session_find_sessioncontent(JingleSession *sess,
361d8577ebd1 Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 119
diff changeset
   115
                                            const gchar *name);
21
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   116
153
eab91df480d3 Clarify sessions.h
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   117
// API:
152
a8623ca21574 JFT: app sub-module no more create the session himself
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 151
diff changeset
   118
void jingle_handle_app(const gchar *name,
75
bd48c89b0a3d Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 68
diff changeset
   119
                       const gchar *xmlns_app, gconstpointer app,
bd48c89b0a3d Put jingle_handle_app in sessions.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 68
diff changeset
   120
                       const gchar *to);
83
d5c5e9be53cb modify send_session_initiate
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 81
diff changeset
   121
LmMessage *lm_message_from_jinglesession(const JingleSession *js,
d5c5e9be53cb modify send_session_initiate
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 81
diff changeset
   122
                                         JingleAction action);
103
c34b513be8d9 JFT: handle data app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 102
diff changeset
   123
void handle_app_data(const gchar *sid, const gchar* from, const gchar *name, gchar *data, gsize size);
21
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   124
#endif