jingle-s5b/s5b.c
author Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Wed, 01 Sep 2010 20:34:23 +0200
changeset 166 c42c167a2a5c
child 167 97f93fa3cd95
permissions -rw-r--r--
Rename socks5.c to s5b.c, remove remaining tabulation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
166
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     1
/*
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     2
 * socks5.c
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     3
 *
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     4
 * Copyrigth (C) 2010 Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     5
 *
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License as published by
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     8
 * the Free Software Foundation; either version 2 of the License, or (at
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     9
 * your option) any later version.
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    10
 *
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    11
 * This program is distributed in the hope that it will be useful, but
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    12
 * WITHOUT ANY WARRANTY; without even the implied warranty of
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    14
 * General Public License for more details.
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    15
 *
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    17
 * along with this program; if not, write to the Free Software
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    19
 * USA
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    20
 */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    21
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    22
#include "config.h"
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    23
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    24
#include <glib.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    25
#include <gio/gio.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    26
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    27
#include <sys/types.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    28
#include <ifaddrs.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    29
#include <net/if.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    30
#include <netinet/in.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    31
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    32
#include <mcabber/xmpp.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    33
#include <mcabber/modules.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    34
#include <mcabber/utils.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    35
#include <mcabber/xmpp_helper.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    36
#include <mcabber/settings.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    37
#include <mcabber/logprint.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    38
#include <mcabber/hooks.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    39
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    40
#include <jingle/jingle.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    41
#include <jingle/check.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    42
#include <jingle/register.h>
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    43
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    44
#include "s5b.h"
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    45
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    46
static gconstpointer newfrommessage(JingleContent *cn, GError **err);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    47
static JingleHandleStatus handle(JingleAction action, gconstpointer data,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    48
                                 LmMessageNode *node, GError **err);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    49
static void tomessage(gconstpointer data, LmMessageNode *node);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    50
static gconstpointer new(void);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    51
static void _send(session_content *sc, gconstpointer data, gchar *buf, gsize size);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    52
static void init(session_content *sc, gconstpointer data);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    53
static void end(session_content *sc, gconstpointer data);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    54
static gchar *info(gconstpointer data);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    55
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    56
static void connect_candidate(JingleS5B *js5b, S5BCandidate *cand);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    57
static void connect_next_candidate(JingleS5B *js5b, S5BCandidate *cand);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    58
static void
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    59
handle_listener_accept(GObject *_listener, GAsyncResult *res, gpointer data);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    60
static void
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    61
handle_client_connect(GObject *_client, GAsyncResult *res, gpointer data);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    62
static void handle_sock_io(GSocket *sock, GIOCondition cond, gpointer data);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    63
static GSList *get_all_local_ips();
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    64
static gchar *gen_random_sid(void);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    65
static gchar *gen_random_cid(void);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    66
static void jingle_socks5_init(void);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    67
static void jingle_socks5_uninit(void);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    68
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    69
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    70
const gchar *deps[] = { "jingle", NULL };
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    71
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    72
static JingleTransportFuncs funcs = {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    73
  .newfrommessage = newfrommessage,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    74
  .handle         = handle,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    75
  .tomessage      = tomessage,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    76
  .new            = new,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    77
  .send           = _send,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    78
  .init           = init,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    79
  .end            = end,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    80
  .info           = info
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    81
};
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    82
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    83
module_info_t  info_jingle_s5b = {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    84
  .branch          = MCABBER_BRANCH,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    85
  .api             = MCABBER_API_VERSION,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    86
  .version         = PROJECT_VERSION,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    87
  .description     = "Jingle SOCKS5 Bytestream (XEP-0260)\n",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    88
  .requires        = deps,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    89
  .init            = jingle_socks5_init,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    90
  .uninit          = jingle_socks5_uninit,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    91
  .next            = NULL,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    92
};
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    93
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    94
static const gchar *jingle_s5b_types[] = {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    95
  "direct",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    96
  "assisted",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    97
  "tunnel",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    98
  "proxy",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    99
  NULL
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   100
};
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   101
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   102
static const gchar *jingle_s5b_modes[] = {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   103
  "tcp",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   104
  "udp",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   105
  NULL
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   106
};
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   107
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   108
typedef struct {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   109
  GInetAddress *address;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   110
  guint32       priority;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   111
  JingleS5BType type;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   112
} LocalIP;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   113
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   114
/**
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   115
 * @brief Linked list of candidates to send on session-initiate
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   116
 */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   117
static GSList *local_ips = NULL;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   118
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   119
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   120
static gint index_in_array(const gchar *str, const gchar **array)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   121
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   122
  gint i;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   123
  for (i = 0; array[i]; i++) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   124
    if (!g_strcmp0(array[i], str)) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   125
      return i;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   126
    }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   127
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   128
  return -1;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   129
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   130
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   131
static gint prioritycmp(gconstpointer a, gconstpointer b)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   132
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   133
  S5BCandidate *s1 = (S5BCandidate *)a, *s2 = (S5BCandidate *)b;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   134
  if (s1->priority < s2->priority) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   135
    return 1;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   136
  } else if (s1->priority > s2->priority) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   137
    return -1;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   138
  } else {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   139
    return 0;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   140
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   141
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   142
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   143
/**
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   144
 * @brief Parse a list of <candidate> elements
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   145
 * @return a list of S5BCandidate
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   146
 */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   147
static GSList *parse_candidates(LmMessageNode *node)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   148
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   149
  LmMessageNode *node2;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   150
  GSList *list = NULL;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   151
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   152
  for (node2 = node->children; node2; node2 = node2->next) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   153
    if (g_strcmp0(node->name, "candidate"))
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   154
        continue;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   155
    const gchar *hoststr, *portstr, *prioritystr, *typestr;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   156
    S5BCandidate *cand = g_new0(S5BCandidate, 1);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   157
    cand->cid    = g_strdup(lm_message_node_get_attribute(node2, "cid"));
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   158
    cand->jid    = g_strdup(lm_message_node_get_attribute(node2, "jid"));
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   159
    hoststr      = lm_message_node_get_attribute(node2, "host");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   160
    portstr      = lm_message_node_get_attribute(node2, "port");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   161
    prioritystr  = lm_message_node_get_attribute(node2, "priority");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   162
    typestr      = lm_message_node_get_attribute(node2, "type");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   163
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   164
    if (!cand->cid || !hoststr || !cand->jid || !prioritystr) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   165
      g_free(cand);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   166
      continue;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   167
    }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   168
    cand->host     = g_inet_address_new_from_string(hoststr);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   169
    cand->port     = g_ascii_strtoull(portstr, NULL, 10);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   170
    cand->priority = g_ascii_strtoull(prioritystr, NULL, 10);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   171
    cand->type     = index_in_array(typestr, jingle_s5b_types);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   172
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   173
    if (cand->type == -1 || cand->host == NULL) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   174
      g_free(cand);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   175
      continue;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   176
    }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   177
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   178
    list = g_slist_prepend(list, cand);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   179
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   180
  list = g_slist_sort(list, prioritycmp);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   181
  return list;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   182
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   183
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   184
static GSList *get_our_candidates(guint16 port)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   185
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   186
  GSList *our_candidates = NULL, *entry;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   187
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   188
  for (entry = local_ips; entry; entry = entry->next) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   189
    LocalIP *lcand = (LocalIP *)entry->data;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   190
    S5BCandidate *cand = g_new0(S5BCandidate, 1);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   191
    cand->cid      = gen_random_cid();
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   192
    cand->host     = g_object_ref(lcand->address);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   193
    cand->jid      = g_strdup(lm_connection_get_jid(lconnection));
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   194
    cand->port     = port;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   195
    cand->priority = lcand->priority;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   196
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   197
    our_candidates = g_slist_prepend(our_candidates, cand);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   198
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   199
  our_candidates = g_slist_sort(our_candidates, prioritycmp);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   200
  return our_candidates;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   201
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   202
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   203
/**
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   204
 * @brief Get a port number by settings or randomly
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   205
 * @return A guint16 containing the port number
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   206
 * */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   207
static guint16 get_port(void)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   208
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   209
  // TODO: find a way to make sure the port is not already used
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   210
  guint64 portstart, portend;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   211
  guint16 port;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   212
  const gchar *port_range = settings_opt_get("js5b_portrange");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   213
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   214
  if (port_range != NULL) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   215
    sscanf(port_range, "%" G_GUINT64_FORMAT "-%" G_GUINT64_FORMAT, &portstart, &portend);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   216
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   217
    if ((portstart >= 1024 && portstart <= (guint16)~0) &&
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   218
        (portend >= 1024 && portend <= (guint16)~0) && portstart <= portend) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   219
      port = g_random_int_range(portstart, portend);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   220
    } else {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   221
      scr_LogPrint(LPRINT_LOGNORM, "Jingle S5B: Invalid port range specified");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   222
      port = g_random_int_range(1024, (guint16)~0);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   223
    }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   224
  } else {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   225
    port = g_random_int_range(1024, (guint16)~0);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   226
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   227
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   228
  return port;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   229
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   230
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   231
static gconstpointer newfrommessage(JingleContent *cn, GError **err)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   232
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   233
  JingleS5B *js5b;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   234
  LmMessageNode *node = cn->transport;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   235
  const gchar *modestr;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   236
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   237
  js5b = g_new0(JingleS5B, 1);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   238
  modestr    = lm_message_node_get_attribute(node, "mode");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   239
  js5b->mode = index_in_array(modestr, jingle_s5b_modes);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   240
  js5b->sid  = g_strdup(lm_message_node_get_attribute(node, "sid"));
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   241
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   242
  if (!js5b->sid) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   243
    g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_MISSING,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   244
                "an attribute of the transport element is missing");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   245
    g_free(js5b);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   246
    return NULL;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   247
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   248
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   249
  js5b->candidates = parse_candidates(node);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   250
  js5b->ourcandidates = get_our_candidates(get_port());
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   251
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   252
  return (gconstpointer) js5b;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   253
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   254
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   255
static gconstpointer new(void)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   256
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   257
  JingleS5B *js5b = g_new0(JingleS5B, 1);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   258
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   259
  js5b->mode = JINGLE_S5B_TCP;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   260
  js5b->sid  = gen_random_sid();
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   261
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   262
  js5b->ourcandidates = get_our_candidates(get_port());
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   263
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   264
  return js5b;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   265
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   266
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   267
static JingleHandleStatus handle(JingleAction action, gconstpointer data,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   268
                                 LmMessageNode *node, GError **err)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   269
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   270
  JingleS5B *js5b = (JingleS5B *)data;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   271
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   272
  if (action == JINGLE_SESSION_ACCEPT) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   273
    js5b->candidates = parse_candidates(node);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   274
    return JINGLE_STATUS_HANDLED;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   275
  } else if (action == JINGLE_TRANSPORT_INFO) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   276
    LmMessageNode *errorn, *usedn;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   277
    if (g_strcmp0(lm_message_node_get_attribute(node, "sid"), js5b->sid))
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   278
      return JINGLE_STATUS_HANDLED; // huh.. not the same socks5 sid ?
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   279
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   280
    errorn = lm_message_node_get_child(node, "candidate-error");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   281
    usedn = lm_message_node_get_child(node, "candidate-used");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   282
    if (errorn != FALSE) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   283
      //got_candidate_error
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   284
    } else if (usedn != FALSE) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   285
      //got_candidate_used
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   286
    }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   287
    return JINGLE_STATUS_HANDLED;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   288
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   289
  return JINGLE_STATUS_NOT_HANDLED;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   290
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   291
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   292
static void tomessage(gconstpointer data, LmMessageNode *node)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   293
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   294
  JingleS5B *js5 = (JingleS5B *)data;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   295
  S5BCandidate *js5c;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   296
  
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   297
  LmMessageNode *node2, *node3;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   298
  gchar *port;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   299
  gchar *priority;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   300
  GSList *el;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   301
  
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   302
  if (lm_message_node_get_child(node, "transport") != NULL)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   303
    return;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   304
  
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   305
  node2 = lm_message_node_add_child(node, "transport", NULL);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   306
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   307
  lm_message_node_set_attributes(node2, "xmlns", NS_JINGLE_TRANSPORT_SOCKS5,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   308
                                 "sid", js5->sid,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   309
                                 "mode", jingle_s5b_modes[js5->mode],
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   310
                                 NULL);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   311
  for (el = js5->ourcandidates; el; el = el->next) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   312
    js5c = (S5BCandidate*) el->data;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   313
    node3 = lm_message_node_add_child(node2, "candidate", NULL);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   314
    
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   315
    port = g_strdup_printf("%" G_GUINT16_FORMAT, js5c->port);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   316
    priority = g_strdup_printf("%" G_GUINT64_FORMAT, js5c->priority);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   317
    
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   318
    lm_message_node_set_attributes(node3, "cid", js5c->cid,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   319
                                   "host", g_inet_address_to_string(js5c->host),
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   320
                                   "jid", js5c->jid,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   321
                                   "port", port,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   322
                                   "priority", priority,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   323
                                   "type", jingle_s5b_types[js5c->type],
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   324
                                   NULL);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   325
    g_free(port);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   326
    g_free(priority);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   327
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   328
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   329
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   330
static void init(session_content *sc, gconstpointer data)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   331
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   332
  JingleS5B *js5b = (JingleS5B *)data;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   333
  GSocketAddress *saddr;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   334
  guint numlistening = 0; // number of addresses we are listening to
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   335
  GSList *entry;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   336
  GError *err = NULL;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   337
  GSocket *sock;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   338
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   339
  // First, we listen on all ips
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   340
  js5b->listener = g_socket_listener_new();
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   341
  for (entry = js5b->ourcandidates; entry; entry = entry->next) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   342
    S5BCandidate *cand = (S5BCandidate *)entry->data;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   343
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   344
    sock = g_socket_new(g_inet_address_get_family(cand->host),
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   345
                        G_SOCKET_TYPE_STREAM,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   346
                        G_SOCKET_PROTOCOL_TCP, &err);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   347
    if (sock == NULL) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   348
      scr_LogPrint(LPRINT_LOGNORM, "Jingle S5B: Error while creating a new socket: %s",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   349
                   err->message ? err->message : "(no message)");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   350
      continue;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   351
    }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   352
    g_socket_set_blocking(sock, FALSE);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   353
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   354
    saddr = g_inet_socket_address_new(cand->host, cand->port);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   355
    if (!g_socket_bind(sock, saddr, TRUE, &err)) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   356
      scr_LogPrint(LPRINT_LOGNORM, "Jingle S5B: Unable to bind a socket on %s port %u: %s",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   357
                   g_inet_address_to_string(cand->host),
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   358
                   cand->port,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   359
                   err->message ? err->message : "(no message)");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   360
      goto cleancontinue;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   361
    }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   362
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   363
    if (!g_socket_listen(sock, &err)) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   364
      scr_LogPrint(LPRINT_LOGNORM, "Jingle S5B: Unable to listen on %s port %u: %s",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   365
                   g_inet_address_to_string(cand->host),
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   366
                   cand->port,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   367
                   err->message ? err->message : "(no message)");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   368
      goto cleancontinue;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   369
    }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   370
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   371
    if (!g_socket_listener_add_socket(js5b->listener, sock, NULL, &err)) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   372
      scr_LogPrint(LPRINT_LOGNORM, "Jingle S5B: Unable to add our socket to the"
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   373
                   " GSocketListener: %s",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   374
                   err->message ? err->message : "(no message)");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   375
      goto cleancontinue;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   376
    }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   377
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   378
    scr_LogPrint(LPRINT_LOGNORM, "Jingle S5B: Listening on %s:%u",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   379
                 g_inet_address_to_string(cand->host),
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   380
                 cand->port);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   381
    ++numlistening;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   382
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   383
cleancontinue:
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   384
      if (err != NULL) g_clear_error(&err);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   385
      g_object_unref(saddr);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   386
      g_object_unref(sock);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   387
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   388
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   389
  if (numlistening > 0) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   390
    g_socket_listener_accept_async(js5b->listener, NULL, handle_listener_accept, NULL);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   391
  } else {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   392
      g_object_unref(js5b->listener);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   393
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   394
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   395
  // Then, we start connecting to the other entity's candidates, if any.
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   396
  if (js5b->candidates) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   397
    js5b->client = g_socket_client_new();
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   398
    S5BCandidate *cand = (S5BCandidate *)js5b->candidates->data;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   399
    connect_candidate(js5b, cand);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   400
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   401
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   402
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   403
/**
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   404
 * @brief Called when a connection was established
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   405
 * 
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   406
 * This function free/unref everything created by init like
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   407
 * the GSocketListener and GClientSocket objects.
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   408
 */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   409
static void free_after_connection(JingleS5B *js5b)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   410
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   411
  g_socket_listener_close(js5b->listener);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   412
  g_object_unref(js5b->listener);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   413
  g_object_unref(js5b->client);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   414
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   415
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   416
/**
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   417
 * @brief Cancel an ongoing connection after 5 seconds
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   418
 * @param data  A GPtrArray
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   419
 * 
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   420
 * "A client SHOULD NOT wait for a TCP timeout on connect.
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   421
 * If it is unable to connect to any candidate within 5 seconds
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   422
 * it SHOULD send a candidate-error to the other party."
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   423
 */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   424
static gboolean connect_cancel_timeout(gpointer data)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   425
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   426
  GPtrArray *args = (GPtrArray *)data;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   427
  JingleS5B *js5b = g_ptr_array_index(args, 0);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   428
  //S5BCandidate *cand = g_ptr_array_index(args, 1);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   429
  g_ptr_array_unref(args);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   430
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   431
  g_cancellable_cancel(js5b->cancelconnect);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   432
  // we need to send a candidate-error in case we cannot connect.
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   433
  return FALSE;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   434
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   435
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   436
static void connect_candidate(JingleS5B *js5b, S5BCandidate *cand)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   437
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   438
  GSocketAddress *saddr;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   439
  GPtrArray *args;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   440
  guint eventid;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   441
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   442
  args = g_ptr_array_sized_new(2);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   443
  g_ptr_array_add(args, js5b);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   444
  g_ptr_array_add(args, cand);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   445
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   446
  saddr = g_inet_socket_address_new(cand->host, cand->port);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   447
  js5b->cancelconnect = g_cancellable_new();
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   448
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   449
  eventid = g_timeout_add_seconds(5, connect_cancel_timeout, g_ptr_array_ref(args));
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   450
  g_ptr_array_add(args, GUINT_TO_POINTER(eventid));
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   451
  g_socket_client_connect_async(js5b->client, G_SOCKET_CONNECTABLE(saddr),
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   452
                                js5b->cancelconnect, handle_client_connect, args);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   453
  g_object_unref(saddr);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   454
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   455
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   456
/**
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   457
 * Convenience function that find the next candidate to try and
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   458
 * call connect_candidate
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   459
 */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   460
static void connect_next_candidate(JingleS5B *js5b, S5BCandidate *cand)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   461
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   462
  GSList *link = g_slist_find(js5b->candidates, cand);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   463
  if (js5b->cancelconnect != NULL)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   464
    g_object_unref(js5b->cancelconnect);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   465
  g_assert(link != NULL);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   466
  if (link->next == NULL) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   467
    // there is no next candidate to try.
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   468
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   469
  connect_candidate(js5b, (S5BCandidate *)link->next->data);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   470
  return;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   471
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   472
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   473
static gchar *info(gconstpointer data)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   474
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   475
  //JingleS5B *js5b = (JingleS5B *)data;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   476
  gchar *info = g_strdup_printf("S5B");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   477
  return info;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   478
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   479
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   480
static void end(session_content *sc, gconstpointer data) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   481
  return;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   482
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   483
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   484
/**
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   485
 * @brief Handle incoming connections
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   486
 */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   487
static void
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   488
handle_listener_accept(GObject *_listener, GAsyncResult *res, gpointer data)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   489
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   490
  GError *err = NULL;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   491
  GSocketConnection *conn;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   492
  //scr_LogPrint(LPRINT_LOGNORM, "Jingle S5B: Got Incoming Connection");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   493
  conn = g_socket_listener_accept_finish(G_SOCKET_LISTENER(_listener), res, NULL, &err);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   494
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   495
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   496
/**
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   497
 * @brief Handle outgoing connections
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   498
 */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   499
static void
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   500
handle_client_connect(GObject *_client, GAsyncResult *res, gpointer data)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   501
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   502
  GError *err = NULL;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   503
  GSocketConnection *conn;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   504
  GPtrArray *args;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   505
  JingleS5B *js5b;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   506
  S5BCandidate *cand;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   507
  //scr_LogPrint(LPRINT_LOGNORM, "Jingle S5B: Got Outgoing Connection");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   508
  
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   509
  args = (GPtrArray *)data;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   510
  js5b = g_ptr_array_index(args, 0);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   511
  cand = g_ptr_array_index(args, 1);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   512
  g_ptr_array_unref(args);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   513
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   514
  conn = g_socket_client_connect_finish(G_SOCKET_CLIENT(_client), res, &err);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   515
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   516
  if (!g_error_matches(err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   517
    // if we did not received a CANCELLED error, then the time limit was not
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   518
    // reached and we need to clean up the GSource and unref args a second time.
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   519
    guint eventid = GPOINTER_TO_UINT(g_ptr_array_index(args, 2));
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   520
    GSource *s = g_main_context_find_source_by_id(NULL, eventid);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   521
    g_source_destroy(s);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   522
    g_ptr_array_unref(args);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   523
    connect_next_candidate(js5b, cand);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   524
    return;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   525
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   526
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   527
  if (err != NULL) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   528
    if (err->domain == G_IO_ERROR)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   529
      scr_LogPrint(LPRINT_DEBUG, "Jingle S5B: IO Error (%s)",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   530
                   err->message ? err->message : "no message");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   531
    else
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   532
      scr_LogPrint(LPRINT_DEBUG, "Jingle S5B: %s Error (%s)",
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   533
                   g_quark_to_string (err->domain),
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   534
                   err->message ? err->message : "no message");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   535
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   536
    g_error_free(err);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   537
    connect_next_candidate(js5b, cand);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   538
    return;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   539
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   540
  js5b->connection = conn; // we have a valid connection
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   541
  // TODO: send transport-info activated IQ
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   542
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   543
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   544
/**
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   545
 * @brief Handle any event on a sock
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   546
 */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   547
static void handle_sock_io(GSocket *sock, GIOCondition cond, gpointer data)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   548
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   549
  switch (cond) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   550
    case G_IO_IN:
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   551
      break;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   552
    case G_IO_OUT:
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   553
      break;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   554
    case G_IO_ERR:
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   555
      break;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   556
    case G_IO_HUP:
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   557
      break;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   558
    default:
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   559
      ;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   560
      // ?!
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   561
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   562
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   563
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   564
static void _send(session_content *sc, gconstpointer data, gchar *buf, gsize size)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   565
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   566
  return;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   567
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   568
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   569
/**
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   570
 * @brief Discover all IPs of this computer
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   571
 * @return A linked list of GInetAddress
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   572
 */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   573
static GSList *get_all_local_ips(void) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   574
  GSList *addresses = NULL;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   575
  GInetAddress *thisaddr;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   576
  GSocketFamily family;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   577
  struct ifaddrs *first, *ifaddr;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   578
  struct sockaddr_in *native;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   579
  struct sockaddr_in6 *native6;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   580
  const guint8 *addrdata;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   581
  guint16 ifacecounter = 0; // for lack of a better method
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   582
  LocalIP *candidate;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   583
  gchar **ifblacklist;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   584
  guint ifblkcnt;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   585
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   586
  gint rval = getifaddrs(&first);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   587
  if (rval != 0) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   588
    scr_LogPrint(LPRINT_LOGNORM, "Jingle S5B: Unable to retreive local ip addresses");
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   589
    return NULL;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   590
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   591
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   592
  if (settings_opt_get("js5b_iface_blacklist") != NULL) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   593
    ifblacklist = g_strsplit(settings_opt_get("js5b_iface_blacklist"), ",", 0);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   594
  } else {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   595
    ifblacklist = (gchar*[]){NULL};
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   596
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   597
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   598
  for (ifaddr = first; ifaddr; ifaddr = ifaddr->ifa_next) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   599
    gboolean continueloop = FALSE;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   600
    if (!(ifaddr->ifa_flags & IFF_UP) || ifaddr->ifa_flags & IFF_LOOPBACK)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   601
      continue;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   602
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   603
    for (ifblkcnt = 0; ifblacklist[ifblkcnt]; ifblkcnt++)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   604
      if (!g_strcmp0(ifaddr->ifa_name, ifblacklist[ifblkcnt])) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   605
        continueloop = TRUE;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   606
        break;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   607
      }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   608
    
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   609
    if (continueloop) continue;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   610
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   611
    if (ifaddr->ifa_addr->sa_family == AF_INET) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   612
      native = (struct sockaddr_in *)ifaddr->ifa_addr;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   613
      addrdata = (const guint8 *)&native->sin_addr.s_addr;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   614
      family = G_SOCKET_FAMILY_IPV4;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   615
    } else if (ifaddr->ifa_addr->sa_family == AF_INET6) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   616
      native6 = (struct sockaddr_in6 *)ifaddr->ifa_addr;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   617
      addrdata = (const guint8 *)&native6->sin6_addr.s6_addr;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   618
      family = G_SOCKET_FAMILY_IPV6;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   619
    } else
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   620
      continue;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   621
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   622
    thisaddr = g_inet_address_new_from_bytes(addrdata, family);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   623
    if (g_inet_address_get_is_link_local(thisaddr)) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   624
      g_object_unref(thisaddr);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   625
      continue;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   626
    }/* else if (g_inset_address_get_is_site_local(thisaddr)) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   627
      // TODO: should we offer a way to filter the offer of LAN ips ?
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   628
    } */
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   629
    candidate = g_new0(LocalIP, 1);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   630
    candidate->address  = thisaddr;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   631
    candidate->priority = (1<<16)*126+ifacecounter;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   632
    candidate->type     = JINGLE_S5B_DIRECT;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   633
    addresses = g_slist_prepend(addresses, candidate);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   634
    ++ifacecounter;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   635
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   636
  freeifaddrs(first);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   637
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   638
  return addresses;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   639
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   640
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   641
static gchar *random_str(guint len)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   642
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   643
  gchar *str;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   644
  gchar car[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   645
  gint i;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   646
  str = g_new0(gchar, 8);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   647
  for (i = 0; i < len; i++)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   648
    str[i] = car[g_random_int_range(0, sizeof(car)/sizeof(car[0])-1)];
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   649
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   650
  str[len] = '\0';
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   651
  return str;
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   652
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   653
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   654
static gchar *gen_random_sid(void)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   655
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   656
  return random_str(7);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   657
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   658
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   659
static gchar *gen_random_cid(void)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   660
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   661
  return random_str(7);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   662
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   663
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   664
static void free_localip(LocalIP *l) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   665
  g_object_unref(l->address);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   666
  g_free(l);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   667
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   668
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   669
static void jingle_socks5_init(void)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   670
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   671
  // ugly hack to fix the segfault when quitting:
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   672
  // mcabber doesn't load gthread or gobject but they are required by gio,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   673
  // and cannot be unloaded once they are loaded or a segfault occur.
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   674
  // We dlopen gio with global | nodelete flags. This will also load gobject
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   675
  // and gthread as dependencies. g_type_init will init gobject/gthread (and
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   676
  // set threads_got_initialized to true).
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   677
  if (g_threads_got_initialized == FALSE) {
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   678
    void *dlopen(const char *filename, int flag);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   679
    // RTLD_LAZY | RTLD_GLOBAL | RTLD_NODELETE
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   680
    dlopen("libgio-2.0.so", 0x00001 | 0x00100 | 0x01000);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   681
    g_type_init();
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   682
  }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   683
  jingle_register_transport(NS_JINGLE_TRANSPORT_SOCKS5, &funcs,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   684
                            JINGLE_TRANSPORT_STREAMING,
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   685
                            JINGLE_TRANSPORT_PRIO_HIGH);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   686
  xmpp_add_feature(NS_JINGLE_TRANSPORT_SOCKS5);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   687
  local_ips = get_all_local_ips();
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   688
}
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   689
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   690
static void jingle_socks5_uninit(void)
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   691
{
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   692
  xmpp_del_feature(NS_JINGLE_TRANSPORT_SOCKS5);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   693
  jingle_unregister_transport(NS_JINGLE_TRANSPORT_SOCKS5);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   694
  g_slist_foreach(local_ips, (GFunc)free_localip, NULL);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   695
  g_slist_free(local_ips);
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   696
}