jingle-socks5/socks5.c
author Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Thu, 19 Aug 2010 00:43:39 +0200
changeset 148 cb40539b88b7
parent 127 02dde03e219b
child 150 5a4ca04ea3c9
permissions -rw-r--r--
Fix compilation warnings. Add documentation in the code.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
115
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     1
/*
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     2
 * socks5.c
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     3
 *
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     4
 * Copyrigth (C) 2010 Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     5
 *
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License as published by
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     8
 * the Free Software Foundation; either version 2 of the License, or (at
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     9
 * your option) any later version.
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    10
 *
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    11
 * This program is distributed in the hope that it will be useful, but
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    12
 * WITHOUT ANY WARRANTY; without even the implied warranty of
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    14
 * General Public License for more details.
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    15
 *
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    17
 * along with this program; if not, write to the Free Software
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    19
 * USA
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    20
 */
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    21
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    22
#include "config.h"
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    23
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    24
#include <glib.h>
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    25
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    26
#include <mcabber/xmpp.h>
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    27
#include <mcabber/modules.h>
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    28
#include <mcabber/utils.h>
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    29
#include <mcabber/xmpp_helper.h>
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    30
#include <mcabber/logprint.h>
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    31
#include <mcabber/hooks.h>
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    32
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    33
#include <jingle/jingle.h>
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    34
#include <jingle/check.h>
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    35
#include <jingle/register.h>
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    36
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    37
#include "socks5.h"
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    38
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    39
gconstpointer jingle_socks5_check(JingleContent *cn, GError **err);
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    40
void jingle_socks5_tomessage(gconstpointer data, LmMessageNode *node);
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    41
gconstpointer jingle_socks5_new(void);
122
8969dc3e2f14 JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 120
diff changeset
    42
void jingle_socks5_send(session_content *sc, gconstpointer data, gchar *buf,
8969dc3e2f14 JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 120
diff changeset
    43
                        gsize size);
115
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    44
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    45
static void jingle_socks5_init(void);
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    46
static void jingle_socks5_uninit(void);
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    47
117
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    48
115
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    49
const gchar *deps[] = { "jingle", NULL };
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    50
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    51
static JingleTransportFuncs funcs = {
148
cb40539b88b7 Fix compilation warnings. Add documentation in the code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 127
diff changeset
    52
  .check     = jingle_socks5_check,
cb40539b88b7 Fix compilation warnings. Add documentation in the code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 127
diff changeset
    53
  .tomessage = jingle_socks5_tomessage,
cb40539b88b7 Fix compilation warnings. Add documentation in the code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 127
diff changeset
    54
  .new       = jingle_socks5_new,
cb40539b88b7 Fix compilation warnings. Add documentation in the code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 127
diff changeset
    55
  .send      = jingle_socks5_send
115
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    56
};
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    57
116
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
    58
module_info_t  info_jingle_socks5bytestream = {
115
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    59
  .branch          = MCABBER_BRANCH,
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    60
  .api             = MCABBER_API_VERSION,
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    61
  .version         = PROJECT_VERSION,
116
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
    62
  .description     = "Jingle Socks5 Bytestream (XEP-0260)\n",
115
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    63
  .requires        = deps,
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    64
  .init            = jingle_socks5_init,
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    65
  .uninit          = jingle_socks5_uninit,
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    66
  .next            = NULL,
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    67
};
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    68
117
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    69
static const gchar *jingle_s5b_types[] = {
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    70
  "assisted",
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    71
  "direct",
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    72
  "proxy",
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    73
  "tunnel",
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    74
  NULL
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    75
};
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    76
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    77
static const gchar *jingle_s5b_modes[] = {
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    78
  "tcp",
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    79
  "udp",
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    80
  NULL
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    81
};
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    82
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    83
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    84
gint index_in_array(const gchar *str, const gchar **array)
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    85
{
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    86
  gint i;
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    87
  for (i = 0; array[i]; i++) {
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    88
    if (!g_strcmp0(array[i], str)) {
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    89
      return i;
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    90
    }
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    91
  }
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    92
  return -1;
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    93
}
115
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    94
116
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
    95
gconstpointer jingle_socks5_check(JingleContent *cn, GError **err)
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
    96
{
117
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    97
  JingleSocks5 *js5b;
116
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
    98
  LmMessageNode *node = cn->transport, *node2;
117
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
    99
  const gchar *modestr;
116
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   100
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   101
  js5b = g_new0(JingleSocks5, 1);
117
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   102
  modestr    = lm_message_node_get_attribute(node, "mode");
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   103
  js5b->mode = index_in_array(modestr, jingle_s5b_modes);
120
3e2085a44a5c Last strdup
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 118
diff changeset
   104
  js5b->sid  = g_strdup(lm_message_node_get_attribute(node, "sid"));
117
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   105
116
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   106
  if (!js5b->sid) {
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   107
    g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_MISSING,
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   108
                "an attribute of the transport element is missing");
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   109
    g_free(js5b);
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   110
    return NULL;
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   111
  }
117
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   112
116
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   113
  for (node2 = node->children; node2; node2 = node2->next) {
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   114
    if (!g_strcmp0(node->name, "candidate")) {
117
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   115
      const gchar *portstr, *prioritystr, *typestr;
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   116
      JingleS5BCandidate *jc = g_new0(JingleS5BCandidate, 1);
120
3e2085a44a5c Last strdup
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 118
diff changeset
   117
      jc->cid      = g_strdup(lm_message_node_get_attribute(node2, "cid"));
3e2085a44a5c Last strdup
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 118
diff changeset
   118
      jc->host     = g_strdup(lm_message_node_get_attribute(node2, "host"));
3e2085a44a5c Last strdup
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 118
diff changeset
   119
      jc->jid      = g_strdup(lm_message_node_get_attribute(node2, "jid"));
117
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   120
      portstr      = lm_message_node_get_attribute(node2, "port");
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   121
      prioritystr  = lm_message_node_get_attribute(node2, "priority");
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   122
      typestr      = lm_message_node_get_attribute(node2, "type");
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   123
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   124
      if (!jc->cid || !jc->host || !jc->jid || !prioritystr) {
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   125
        g_free(jc);
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   126
        continue;
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   127
	  }
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   128
      jc->port     = g_ascii_strtoull(portstr, NULL, 10);
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   129
      jc->priority = g_ascii_strtoull(prioritystr, NULL, 10);
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   130
      jc->type     = index_in_array(typestr, jingle_s5b_types);
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   131
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   132
      if (jc->type == -1) {
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   133
        g_free(jc);
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   134
        continue;
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   135
	  }
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   136
116
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   137
      js5b->candidates = g_slist_append(js5b->candidates, jc);
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   138
    }
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   139
  }
117
bd54d1dba1ad JS5: Finish the check function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 116
diff changeset
   140
116
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   141
  return (gconstpointer) js5b;
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   142
}
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   143
118
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   144
void jingle_socks5_tomessage(gconstpointer data, LmMessageNode *node)
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   145
{
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   146
  JingleSocks5 *js5 = (JingleSocks5*)data;
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   147
  JingleS5BCandidate *js5c;
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   148
  
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   149
  LmMessageNode *node2, *node3;
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   150
  gchar *port;
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   151
  gchar *priority;
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   152
  GSList *el;
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   153
  
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   154
  if (lm_message_node_get_child(node, "transport") != NULL)
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   155
    return;
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   156
  
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   157
  node2 = lm_message_node_add_child(node, "transport", NULL);
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   158
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   159
  lm_message_node_set_attributes(node2, "xmlns", NS_JINGLE_TRANSPORT_SOCKS5,
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   160
                                 "sid", js5->sid,
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   161
                                 "mode", jingle_s5b_modes[js5->mode],
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   162
                                 NULL);
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   163
  for (el = js5->candidates; el; el = el->next) {
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   164
    js5c = (JingleS5BCandidate*) el->data;
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   165
    node3 = lm_message_node_add_child(node2, "candidate", NULL);
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   166
    
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   167
    port = g_strdup_printf("%" G_GUINT16_FORMAT, js5c->port);
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   168
    priority = g_strdup_printf("%" G_GUINT64_FORMAT, js5c->priority);
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   169
    
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   170
    lm_message_node_set_attributes(node3, "cid", js5c->cid,
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   171
                                   "host", js5c->host,
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   172
                                   "jid", js5c->jid,
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   173
                                   "port", port,
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   174
                                   "priority", priority,
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   175
                                   "type", jingle_s5b_types[js5c->type],
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   176
                                   NULL);
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   177
    g_free(port);
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   178
    g_free(priority);
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   179
  }
f3408f4fe61a JS5B: to message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 117
diff changeset
   180
}
116
7dbd5e5e7a7c S5B: check
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 115
diff changeset
   181
115
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   182
static void jingle_socks5_init(void)
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   183
{
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   184
  jingle_register_transport(NS_JINGLE_TRANSPORT_SOCKS5, &funcs,
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   185
                            JINGLE_TRANSPORT_STREAMING,
148
cb40539b88b7 Fix compilation warnings. Add documentation in the code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 127
diff changeset
   186
                            JINGLE_TRANSPORT_PRIO_HIGH);
115
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   187
  xmpp_add_feature(NS_JINGLE_TRANSPORT_SOCKS5);
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   188
}
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   189
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   190
static void jingle_socks5_uninit(void)
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   191
{
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   192
  xmpp_del_feature(NS_JINGLE_TRANSPORT_SOCKS5);
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   193
  jingle_unregister_transport(NS_JINGLE_TRANSPORT_SOCKS5);
cae0cb7eff45 JS5: Add a CMakeList
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   194
}