jingle/jingle.h
author Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Fri, 02 Jul 2010 17:04:41 +0200
changeset 25 11694a99f84b
parent 23 9367e144e626
child 26 af14f8f5a2b6
permissions -rw-r--r--
Build a LMNode from a Jingle struct
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     1
#ifndef __JINGLE_H__
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     2
#define __JINGLE_H__ 1
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     3
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     4
#include <glib.h>
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     5
#include <loudmouth/loudmouth.h>
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     6
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     7
#define NS_JINGLE "urn:xmpp:jingle:1"
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     8
#define NS_JINGLE_ERRORS "urn:xmpp:jingle:errors:1"
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     9
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    10
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    11
typedef enum {
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    12
  JINGLE_UNKNOWN_ACTION,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    13
  JINGLE_CONTENT_ACCEPT,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    14
  JINGLE_CONTENT_ADD,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    15
  JINGLE_CONTENT_MODIFY,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    16
  JINGLE_CONTENT_REJECT,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    17
  JINGLE_CONTENT_REMOVE,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    18
  JINGLE_DESCRIPTION_INFO,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    19
  JINGLE_SECURITY_INFO,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    20
  JINGLE_SESSION_ACCEPT,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    21
  JINGLE_SESSION_INFO,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    22
  JINGLE_SESSION_INITIATE,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    23
  JINGLE_SESSION_TERMINATE,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    24
  JINGLE_TRANSPORT_ACCEPT,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    25
  JINGLE_TRANSPORT_INFO,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    26
  JINGLE_TRANSPORT_REJECT,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    27
  JINGLE_TRANSPORT_REPLACE,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    28
} JingleAction;
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    29
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    30
typedef enum {
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    31
  JINGLE_CREATOR_INITIATOR,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    32
  JINGLE_CREATOR_RESPONDER,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    33
} JingleCreator;
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    34
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    35
typedef enum {
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    36
  JINGLE_SENDERS_BOTH,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    37
  JINGLE_SENDERS_INITIATOR,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    38
  JINGLE_SENDERS_NONE,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    39
  JINGLE_SENDERS_RESPONDER,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    40
} JingleSenders;
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    41
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    42
typedef struct {
18
d0ddcfd31eb8 Change the way the header files are included.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 15
diff changeset
    43
  /* pointer to the original LmMessage */
d0ddcfd31eb8 Change the way the header files are included.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 15
diff changeset
    44
  LmMessage *message;
d0ddcfd31eb8 Change the way the header files are included.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 15
diff changeset
    45
22
a089f2f49e9f Produce new LmMessageNode with a struct Jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 21
diff changeset
    46
  /* pointer to the <jingle> element */
18
d0ddcfd31eb8 Change the way the header files are included.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 15
diff changeset
    47
  LmMessageNode *node;
d0ddcfd31eb8 Change the way the header files are included.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 15
diff changeset
    48
14
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    49
  /* action attribute */
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    50
  JingleAction action;
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    51
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    52
  /* full JID of the entity that has initiated the session flow.
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    53
   * may be different from the 'from' address on the IQ-set of the
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    54
   * session-initiate message.
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    55
   * recommended for session-initiate, not recommended otherwise. */
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    56
  const gchar *initiator;
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    57
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    58
  /* full JID of the entity that has replied to the initation.
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    59
   * can be different from the 'to' address on the IQ-set.
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    60
   * recommended for session-accept, not recommended otherwise. */
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    61
  const gchar *responder;
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    62
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    63
  /* Random session identifier generated by the initator. */
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    64
  const gchar *sid;
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    65
21
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 20
diff changeset
    66
  /* Linked list of JingleContent. */
18
d0ddcfd31eb8 Change the way the header files are included.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 15
diff changeset
    67
  GSList *content;
14
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    68
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    69
} JingleNode;
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    70
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    71
typedef struct {
21
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 20
diff changeset
    72
  /* pointer to the <content> element */
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 20
diff changeset
    73
  LmMessageNode *node;
147f131382dd Some sessions management code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 20
diff changeset
    74
14
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    75
  /* which party originally generated the content type.
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    76
   * the defined values are "initiator" and "responder"
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    77
   * (where the default is "initiator"). required. */
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    78
  JingleCreator creator;
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    79
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    80
  /* how the content definition is to be interpreted by the recipient.
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    81
   * optional, the default value is "session". */
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    82
  const gchar *disposition; // optional, default=session
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    83
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    84
  /* A unique name or identifier for the content type
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    85
   * according to the creator. required.*/
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    86
  const gchar *name;
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    87
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    88
  /* which parties in the session will be generating content.
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    89
   * allowable values are both, initiator, none, responder.
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    90
   * default is both.
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    91
   * required for content-modify, optional otherwise */
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    92
  JingleSenders senders;
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    93
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    94
  /* each content element (must) contain one description
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    95
   * child element that specifies a desired application.
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    96
   * the content of this node is app specific. */
25
11694a99f84b Build a LMNode from a Jingle struct
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 23
diff changeset
    97
  gconstpointer *description;
14
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    98
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    99
  /* each content element (must) contain one transport
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   100
   * child element that specifies a potential transport
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   101
   * method */
25
11694a99f84b Build a LMNode from a Jingle struct
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 23
diff changeset
   102
  gconstpointer *transport;
11694a99f84b Build a LMNode from a Jingle struct
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 23
diff changeset
   103
  
11694a99f84b Build a LMNode from a Jingle struct
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 23
diff changeset
   104
  const gchar *xmlns_desc;
11694a99f84b Build a LMNode from a Jingle struct
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 23
diff changeset
   105
  const gchar *xmlns_trans;
14
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   106
20
72e53665328e Add a function to check a file transfert request.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 18
diff changeset
   107
} JingleContent;
14
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   108
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   109
struct JingleActionList {
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   110
  const gchar  *name;
15
61ffa66f8288 Include config.h. The file transfert module now add the corresponding
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 14
diff changeset
   111
  void (*handler)(LmMessage *, JingleNode *);
14
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   112
};
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   113
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   114
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   115
LmMessage *jingle_new_iq_error(LmMessage *m, const gchar *errtype,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   116
                               const gchar *cond, const gchar *jinglecond);
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   117
void jingle_send_iq_error(LmMessage *m, const gchar *errtype,
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   118
                          const gchar *cond, const gchar *jinglecond);
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   119
void jingle_ack_iq(LmMessage *m);
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   120
JingleAction jingle_action_from_str(const gchar* string);
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   121
23
9367e144e626 Some errors in code
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 22
diff changeset
   122
LmMessageNode* get_lm_from_jingle_struct(const JingleNode* elem);
9367e144e626 Some errors in code
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 22
diff changeset
   123
void get_lm_from_content_struct(gpointer data, gpointer userdata);
14
77966ed56e14 Create two subdirectories.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   124
#endif