jingle-ft/filetransfer.c
author Dominik George <nik@naturalnet.de>
Mon, 04 Nov 2013 20:45:18 +0100
changeset 172 d33526eba590
parent 171 2729dfd1c085
permissions -rw-r--r--
Fixed calls for MCabber API changes in 0.10.2.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     1
/*
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     2
 * filetransfer.c
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     3
 *
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     4
 * Copyrigth (C) 2010 Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     5
 *
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License as published by
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     8
 * the Free Software Foundation; either version 2 of the License, or (at
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
     9
 * your option) any later version.
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    10
 *
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    11
 * This program is distributed in the hope that it will be useful, but
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    12
 * WITHOUT ANY WARRANTY; without even the implied warranty of
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    14
 * General Public License for more details.
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    15
 *
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    17
 * along with this program; if not, write to the Free Software
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    19
 * USA
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    20
 */
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    21
#include "config.h"
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    22
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    23
#include <glib.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    24
#include <glib/gstdio.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    25
#include <string.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    26
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    27
#include <mcabber/modules.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    28
#include <mcabber/utils.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    29
#include <mcabber/xmpp_helper.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    30
#include <mcabber/settings.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    31
#include <mcabber/logprint.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    32
#include <mcabber/compl.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    33
#include <mcabber/commands.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    34
#include <mcabber/roster.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    35
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    36
#include <jingle/jingle.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    37
#include <jingle/check.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    38
#include <jingle/register.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    39
#include <jingle/sessions.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    40
#include <jingle/send.h>
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    41
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    42
#include "filetransfer.h"
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    43
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    44
156
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    45
static gconstpointer newfrommessage(JingleContent *cn, GError **err);
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    46
static JingleHandleStatus handle(JingleAction action, gconstpointer data,
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    47
                                 LmMessageNode *node, GError **err);
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    48
static void tomessage(gconstpointer data, LmMessageNode *node);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    49
static gboolean handle_data(gconstpointer data, const gchar *data2, guint len);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    50
static void start(session_content *sc);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    51
static void send(session_content *sc);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    52
static void stop(gconstpointer data);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    53
static gchar* info(gconstpointer data);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    54
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    55
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    56
static void jingle_ft_init(void);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    57
static void jingle_ft_uninit(void);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    58
// Return must be free
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    59
static gchar *_convert_size(guint64 size);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    60
static int _next_index(void);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    61
static void _free(JingleFT *jft);
140
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
    62
static gboolean _check_hash(const gchar *hash1, GChecksum *md5);
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
    63
static gboolean _is_md5_hash(const gchar *hash);
160
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
    64
static void _jft_send(char **args, JingleFT *jft);
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
    65
static void _jft_info(char **args);
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
    66
static void _jft_flush(char **args);
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
    67
static JingleFT* _new(const gchar *name);
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    68
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    69
const gchar *deps[] = { "jingle", NULL };
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    70
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    71
static GSList *info_list = NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    72
static guint jft_cid = 0;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    73
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    74
const gchar* strstate[] = {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    75
  "PENDING",
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    76
  "STARTING",
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    77
  "ENDING",
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    78
  "REJECT",
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    79
  "ERROR"
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    80
};
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    81
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    82
static JingleAppFuncs funcs = {
156
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    83
  .newfrommessage   = newfrommessage,
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    84
  .handle           = handle,
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    85
  .tomessage        = tomessage,
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    86
  .handle_data      = handle_data,
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    87
  .start            = start,
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    88
  .send             = send,
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    89
  .stop             = stop,
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
    90
  .info             = info
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    91
};
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    92
141
8bc73e965a07 change the name of the structs module_info_t
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 140
diff changeset
    93
module_info_t info_jingle_ft = {
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    94
  .branch          = MCABBER_BRANCH,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    95
  .api             = MCABBER_API_VERSION,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    96
  .version         = PROJECT_VERSION,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    97
  .description     = "Jingle File Transfer (XEP-0234)\n",
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    98
  .requires        = deps,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
    99
  .init            = jingle_ft_init,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   100
  .uninit          = jingle_ft_uninit,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   101
  .next            = NULL,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   102
};
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   103
170
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   104
#ifdef MCABBER_API_HAVE_CMD_ID
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   105
static gpointer jft_cmdid;
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   106
#endif
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   107
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   108
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   109
/**
170
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   110
 * @brief Check if a node description with xmlns of JFT is correct
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   111
 *
143
cd97a18dd0b9 JFT: Fix the Doxygen doc in filetransfer.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 142
diff changeset
   112
 * @param cn the jinglecontent a node description
cd97a18dd0b9 JFT: Fix the Doxygen doc in filetransfer.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 142
diff changeset
   113
 * @param err contain an error of the domain JINGLE_CHECK_ERROR
cd97a18dd0b9 JFT: Fix the Doxygen doc in filetransfer.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 142
diff changeset
   114
 * @return a gconstpointer, which is a new allocated JingleFT
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   115
 */
156
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   116
static gconstpointer newfrommessage(JingleContent *cn, GError **err)
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   117
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   118
  JingleFT *ft = NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   119
  LmMessageNode *node;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   120
  gint64 tmpsize;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   121
  const gchar *datestr, *sizestr;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   122
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   123
  node = lm_message_node_get_child(cn->description, "offer");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   124
 
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   125
  if (!node) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   126
    g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_MISSING,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   127
                "the offer element is missing");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   128
    return NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   129
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   130
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   131
  node = lm_message_node_get_child(node, "file");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   132
  if (!node) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   133
    g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_MISSING,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   134
                "the file element is missing");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   135
    return NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   136
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   137
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   138
  if (g_strcmp0(lm_message_node_get_attribute(node, "xmlns"), NS_SI_FT)) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   139
    g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_MISSING,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   140
                "the file transfer offer has an invalid/unsupported namespace");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   141
    return NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   142
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   143
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   144
  ft = g_new0(JingleFT, 1);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   145
  datestr  = lm_message_node_get_attribute(node, "date");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   146
  ft->hash = (gchar *) lm_message_node_get_attribute(node, "hash");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   147
  ft->name = (gchar *) lm_message_node_get_attribute(node, "name");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   148
  sizestr  = lm_message_node_get_attribute(node, "size");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   149
  ft->transmit = 0;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   150
  ft->dir = JINGLE_FT_INCOMING;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   151
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   152
  if (!ft->name || !sizestr) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   153
    g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_MISSING,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   154
                "an attribute of the file element is missing");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   155
    g_free(ft);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   156
    return NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   157
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   158
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   159
  ft->date = from_iso8601(datestr, 1);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   160
  tmpsize = g_ascii_strtoll(sizestr, NULL, 10);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   161
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   162
  // the size attribute is a xs:integer an therefore can be negative.
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   163
  if (tmpsize < 0) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   164
    g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_BADVALUE,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   165
                "the offered file has a negative size");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   166
    g_free(ft);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   167
    return NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   168
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   169
  ft->size = tmpsize;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   170
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   171
  ft->name = g_path_get_basename(ft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   172
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   173
  if (settings_opt_get("jingle_ft_dir") != NULL)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   174
    ft->name = g_build_filename(settings_opt_get("jingle_ft_dir"), ft->name, NULL);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   175
  else
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   176
    ft->name = g_build_filename("/tmp", ft->name, NULL);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   177
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   178
  if (!g_strcmp0(ft->name, ".")) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   179
    g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_BADVALUE,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   180
                "the offered file has an invalid filename");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   181
    g_free(ft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   182
    g_free(ft);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   183
    return NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   184
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   185
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   186
  // check if the md5 hash is valid ([a-fA-F0-9){32})
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   187
  if (ft->hash != NULL && (strlen(ft->hash) != 32 || !_is_md5_hash(ft->hash))) {
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   188
    g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_BADVALUE,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   189
                "the offered file has an invalid hash");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   190
    g_free(ft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   191
    g_free(ft);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   192
    return NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   193
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   194
  ft->hash = g_strndup(ft->hash, 32);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   195
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   196
  {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   197
    JingleFTInfo *jfti = g_new0(JingleFTInfo, 1);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   198
    jfti->index = _next_index();
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   199
    jfti->jft = ft;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   200
    info_list = g_slist_append(info_list, jfti);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   201
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   202
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   203
  return (gconstpointer) ft;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   204
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   205
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   206
/**
143
cd97a18dd0b9 JFT: Fix the Doxygen doc in filetransfer.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 142
diff changeset
   207
 * @brief A function to handle incoming jingle action
cd97a18dd0b9 JFT: Fix the Doxygen doc in filetransfer.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 142
diff changeset
   208
 * @param action The action which have been received
cd97a18dd0b9 JFT: Fix the Doxygen doc in filetransfer.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 142
diff changeset
   209
 * @param data   Contain the JingleFT of the content concerned
cd97a18dd0b9 JFT: Fix the Doxygen doc in filetransfer.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 142
diff changeset
   210
 * @param node   The node himself
cd97a18dd0b9 JFT: Fix the Doxygen doc in filetransfer.c
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 142
diff changeset
   211
 * @return       TRUE if the action was handled, FALSE otherwise
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   212
 */
156
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   213
static JingleHandleStatus handle(JingleAction action, gconstpointer data,
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   214
                                 LmMessageNode *node, GError **err)
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   215
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   216
  if (action == JINGLE_SESSION_INFO) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   217
    if (!g_strcmp0(lm_message_node_get_attribute(node, "xmlns"),
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   218
                   NS_JINGLE_APP_FT_INFO)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   219
        && !g_strcmp0(node->name, "hash")) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   220
      ((JingleFT *)data)->hash = g_strdup(lm_message_node_get_value(node));
156
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   221
      return JINGLE_STATUS_HANDLED;
166
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 160
diff changeset
   222
    }
c42c167a2a5c Rename socks5.c to s5b.c, remove remaining tabulation
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 160
diff changeset
   223
    return JINGLE_STATUS_NOT_HANDLED;
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   224
  }
156
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   225
  return JINGLE_STATUS_NOT_HANDLED;
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   226
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   227
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   228
static gboolean _is_md5_hash(const gchar *hash)
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   229
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   230
  int i = 0;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   231
  for (i = 0; i < 32 && hash[i]; i++)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   232
    if (!g_ascii_isxdigit(hash[i])) break;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   233
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   234
  if (i == 32)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   235
    return TRUE;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   236
  else
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   237
    return FALSE;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   238
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   239
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   240
static gboolean handle_data(gconstpointer jingleft, const gchar *data, guint len)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   241
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   242
  JingleFT *jft = (JingleFT *) jingleft;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   243
  GError *err = NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   244
  GIOStatus status;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   245
  gsize bytes_written = 0;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   246
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   247
  if (jft->dir != JINGLE_FT_INCOMING)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   248
    return FALSE;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   249
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   250
  if (jft->md5 == NULL) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   251
    jft->md5 = g_checksum_new(G_CHECKSUM_MD5);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   252
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   253
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   254
  g_checksum_update(jft->md5, (guchar*)data, (gsize)len);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   255
    
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   256
  // TODO: check if the file already exist or if it was created
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   257
  // during the call to jingle_ft_check and handle_data
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   258
  if (jft->outfile == NULL) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   259
    jft->outfile = g_io_channel_new_file(jft->name, "w", &err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   260
    if (jft->outfile == NULL || err != NULL) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   261
      scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: %s %s", err->message,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   262
                   jft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   263
    //TODO: propagate the GError ?
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   264
      g_error_free(err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   265
      return FALSE;
156
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   266
    }
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   267
    jft->state = JINGLE_FT_STARTING;
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   268
    status = g_io_channel_set_encoding(jft->outfile, NULL, &err);
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   269
    if (status != G_IO_STATUS_NORMAL || err != NULL) {
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   270
     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: %s %s", err->message,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   271
                  jft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   272
     g_error_free(err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   273
     return FALSE;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   274
   }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   275
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   276
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   277
  jft->state = JINGLE_FT_STARTING;
156
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   278
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   279
  status = g_io_channel_write_chars(jft->outfile, data, (gssize) len,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   280
                                    &bytes_written, &err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   281
  if (status != G_IO_STATUS_NORMAL || err != NULL) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   282
     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: %s %s", err->message,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   283
                  jft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   284
    g_error_free(err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   285
    return FALSE;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   286
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   287
  status = g_io_channel_flush(jft->outfile, &err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   288
  if (status != G_IO_STATUS_NORMAL || err != NULL) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   289
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: %s %s", err->message,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   290
                 jft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   291
    g_error_free(err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   292
    return FALSE;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   293
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   294
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   295
  if (bytes_written != len) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   296
    // not supposed to happen if status is normal, unless outfile is non-blocking
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   297
    return FALSE;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   298
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   299
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   300
  jft->transmit += len;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   301
  return TRUE;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   302
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   303
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   304
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   305
static int _next_index(void)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   306
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   307
  static int a = 0;
141
8bc73e965a07 change the name of the structs module_info_t
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 140
diff changeset
   308
  return ++a;
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   309
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   310
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   311
static void _jft_info(char **args)
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   312
{
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   313
  GSList *el = info_list;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   314
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   315
  if (!info_list)
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   316
    scr_LogPrint(LPRINT_LOGNORM, "JFT: no file");
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   317
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   318
  for (el = info_list; el; el = el->next) {
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   319
    JingleFTInfo *jftio = el->data;
147
c72010633a86 JFT: cleanup obscur part
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 146
diff changeset
   320
    JingleFT *jft = jftio->jft;
c72010633a86 JFT: cleanup obscur part
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 146
diff changeset
   321
    gchar *strsize = _convert_size(jft->size);
c72010633a86 JFT: cleanup obscur part
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 146
diff changeset
   322
    const gchar *dir = (jft->dir == JINGLE_FT_INCOMING) ? "<==" : "-->";
151
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   323
    gfloat percent = (gfloat)jft->size ? 
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   324
                       ((gfloat)jft->transmit / (gfloat)jft->size) * 100 :
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   325
                       0;
147
c72010633a86 JFT: cleanup obscur part
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 146
diff changeset
   326
    const gchar *state = strstate[jft->state];
c72010633a86 JFT: cleanup obscur part
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 146
diff changeset
   327
    const gchar *desc = jft->desc ? jft->desc : "";
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   328
    const gchar *hash = "";
147
c72010633a86 JFT: cleanup obscur part
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 146
diff changeset
   329
    if (jft->dir == JINGLE_FT_INCOMING &&
c72010633a86 JFT: cleanup obscur part
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 146
diff changeset
   330
        jft->state == JINGLE_FT_ENDING) {
c72010633a86 JFT: cleanup obscur part
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 146
diff changeset
   331
      if (_check_hash(jft->hash, jft->md5) == FALSE)
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   332
        hash = "corrupt";
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   333
      else
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   334
        hash = "checked";
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   335
    }
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   336
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   337
    scr_LogPrint(LPRINT_LOGNORM, "[%i]%s %s %s %.2f%%: %s %s %s", jftio->index, 
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   338
                 dir, jftio->jft->name, strsize, percent, desc, state, hash);
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   339
    g_free(strsize);
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   340
  }
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   341
}
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   342
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   343
static void _jft_flush(char **args)
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   344
{
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   345
  GSList *el, *el2 = info_list;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   346
  int count = 0;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   347
  el = info_list;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   348
  while (el) {
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   349
    JingleFTInfo *jftinf;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   350
    jftinf = el->data;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   351
    if (jftinf->jft->state == JINGLE_FT_ERROR ||
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   352
        jftinf->jft->state == JINGLE_FT_REJECT ||
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   353
        jftinf->jft->state == JINGLE_FT_ENDING) {
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   354
      count++;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   355
      _free(jftinf->jft);
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   356
      info_list = g_slist_delete_link(info_list, el);
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   357
      if (info_list == NULL)
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   358
        break;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   359
      el = el2;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   360
      continue;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   361
    }
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   362
    el2 = el;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   363
    el = el->next;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   364
  }
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   365
  scr_LogPrint(LPRINT_LOGNORM, "JFT: %i file%s removed", count, (count>1) ? "s" : "");
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   366
}
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   367
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   368
static JingleFT* _new(const gchar *name)
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   369
{
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   370
  struct stat fileinfo;
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   371
  GError *err = NULL;
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   372
  gchar *filename = expand_filename(name); // expand ~ to HOME
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   373
  JingleFT *jft = g_new0(JingleFT, 1);
151
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   374
  
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   375
  jft->desc = g_strdup(name);
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   376
  jft->type = JINGLE_FT_OFFER;
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   377
  jft->name = g_path_get_basename(filename);
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   378
  jft->transmit = 0;
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   379
  jft->hash = NULL;
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   380
  jft->md5 = NULL;
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   381
  jft->state = JINGLE_FT_PENDING;
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   382
  jft->dir = JINGLE_FT_OUTGOING;
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   383
  jft->date = 0;
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   384
  jft->size = 0;
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   385
  
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   386
  // Add the jft to the list
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   387
  JingleFTInfo *jftinf = g_new0(JingleFTInfo, 1);
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   388
  jftinf->index = _next_index();
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   389
  jftinf->jft = jft;
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   390
  info_list = g_slist_append(info_list, jftinf);
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   391
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   392
  if (g_stat(filename, &fileinfo) != 0) {
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   393
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: unable to stat %s",
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   394
                 filename);
151
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   395
    jft->state = JINGLE_FT_ERROR;
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   396
    return NULL;
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   397
  }
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   398
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   399
  if (!S_ISREG(fileinfo.st_mode) || S_ISLNK(fileinfo.st_mode)) {
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   400
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: File doesn't exist!");
151
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   401
    jft->state = JINGLE_FT_ERROR;
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   402
    return NULL;
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   403
  }
151
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   404
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   405
  jft->date = fileinfo.st_mtime;
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   406
  jft->size = fileinfo.st_size;
151
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   407
  
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   408
  jft->outfile = g_io_channel_new_file(filename, "r", &err);
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   409
  if (jft->outfile == NULL || err != NULL) {
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   410
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: %s %s", err->message,
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   411
                 name);
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   412
    g_error_free(err);
151
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   413
    jft->state = JINGLE_FT_ERROR;
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   414
    return NULL;
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   415
  }
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   416
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   417
  g_io_channel_set_encoding(jft->outfile, NULL, &err);
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   418
  if (jft->outfile == NULL || err != NULL) {
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   419
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: %s %s", err->message,
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   420
                 name);
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   421
    g_error_free(err);
151
b1acef78e4f5 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 147
diff changeset
   422
    jft->state = JINGLE_FT_ERROR;
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   423
    return NULL;
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   424
  }
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   425
  
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   426
  return jft;
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   427
}
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   428
160
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   429
static void _jft_send(char **args, JingleFT *jft2)
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   430
{
160
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   431
  JingleFT *jft = jft2;
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   432
160
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   433
  if (jft == NULL && !args[1]) {
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   434
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: give me a name!");
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   435
    return;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   436
  }
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   437
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   438
  scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: Trying to send %s",
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   439
               args[1]);
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   440
160
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   441
  if (jft == NULL && (jft = _new(args[1])) == NULL)
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   442
    return;
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   443
  
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   444
  {
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   445
    gchar *ressource, *recipientjid;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   446
    const gchar *namespaces[] = {NS_JINGLE, NS_JINGLE_APP_FT, NULL};
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   447
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   448
    if (CURRENT_JID == NULL) { // CURRENT_JID = the jid of the user which has focus
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   449
      scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: Please, choose a valid JID in the roster");
169
9aee866bdb9a JFT: when no ressource, change state from PENDING to ERROR
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 166
diff changeset
   450
      jft->state = JINGLE_FT_ERROR;
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   451
      return;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   452
    }
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   453
    ressource = jingle_find_compatible_res(CURRENT_JID, namespaces);
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   454
    if (ressource == NULL) {
159
1df5f5e3f1e7 Fix the segfault when quitting in IBB and various other bugs.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 156
diff changeset
   455
      scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: Cannot send file, because this buddy"
1df5f5e3f1e7 Fix the segfault when quitting in IBB and various other bugs.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 156
diff changeset
   456
                                   " has no compatible ressource available");
169
9aee866bdb9a JFT: when no ressource, change state from PENDING to ERROR
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 166
diff changeset
   457
9aee866bdb9a JFT: when no ressource, change state from PENDING to ERROR
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 166
diff changeset
   458
      jft->state = JINGLE_FT_ERROR;
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   459
      return;
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   460
    }
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   461
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   462
    recipientjid = g_strdup_printf("%s/%s", CURRENT_JID, ressource);
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   463
152
a8623ca21574 JFT: app sub-module no more create the session himself
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 151
diff changeset
   464
    new_session_with_apps(recipientjid, (const gchar*[]){"file", NULL},
a8623ca21574 JFT: app sub-module no more create the session himself
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 151
diff changeset
   465
                          (gconstpointer[]){jft, NULL},
a8623ca21574 JFT: app sub-module no more create the session himself
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 151
diff changeset
   466
                          (const gchar*[]){NS_JINGLE_APP_FT, NULL});
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   467
152
a8623ca21574 JFT: app sub-module no more create the session himself
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 151
diff changeset
   468
    jingle_handle_app("file", NS_JINGLE_APP_FT, jft, recipientjid);
a8623ca21574 JFT: app sub-module no more create the session himself
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 151
diff changeset
   469
    
a8623ca21574 JFT: app sub-module no more create the session himself
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 151
diff changeset
   470
    g_free(recipientjid);
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   471
    g_free(ressource);
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   472
  }
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   473
}
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   474
160
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   475
static void _jft_retry(char **args)
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   476
{
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   477
  GSList *el;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   478
  JingleFT *jft;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   479
  JingleFTInfo *jftinf;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   480
  gint index = g_ascii_strtoll(args[1], NULL, 10);
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   481
  for (el = info_list; el; el = el->next) {
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   482
    jftinf = el->data;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   483
    if (jftinf->index == index);
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   484
      break;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   485
  }
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   486
  
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   487
  if (!args[1]) {
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   488
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: give me a number!");
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   489
    return;  
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   490
  }
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   491
  
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   492
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   493
  
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   494
  if (el == NULL) {
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   495
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: give me a correct number!");
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   496
    return;  
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   497
  }
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   498
  
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   499
  jft = jftinf->jft;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   500
  jft->hash = NULL;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   501
  jft->size = 0;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   502
  jft->transmit = 0;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   503
  jft->outfile = NULL;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   504
  jft->state = JINGLE_FT_PENDING;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   505
  jft->desc = NULL;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   506
  jft->md5 = NULL;
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   507
  
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   508
  _jft_send(args, jft);
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   509
}
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   510
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   511
static void do_sendfile(char *arg)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   512
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   513
  char **args = split_arg(arg, 3, 0);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   514
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   515
  if (!g_strcmp0(args[0], "send"))
160
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   516
    _jft_send(args, NULL);
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   517
  else if (!g_strcmp0(args[0], "info"))
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   518
    _jft_info(args);
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   519
  else if (!g_strcmp0(args[0], "flush"))
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   520
    _jft_flush(args);
160
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   521
  else if (!g_strcmp0(args[0], "retry"))
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   522
    _jft_retry(args);
142
f513b0bc039a JFT: explode do_sendfile in several functions
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 141
diff changeset
   523
  else
159
1df5f5e3f1e7 Fix the segfault when quitting in IBB and various other bugs.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 156
diff changeset
   524
    scr_LogPrint(LPRINT_LOGNORM, "/jft: %s is not a correct option.", args[0]);
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   525
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   526
  free_arg_lst(args);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   527
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   528
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   529
static void _free(JingleFT *jft)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   530
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   531
  g_free(jft->hash);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   532
  g_free(jft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   533
  g_free(jft->desc);
160
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   534
  if (jft->outfile != NULL)
e149e868d501 JFT: add retry
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 159
diff changeset
   535
    g_io_channel_unref(jft->outfile);
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   536
  if (jft->dir == JINGLE_FT_INCOMING)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   537
    g_checksum_free(jft->md5);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   538
  g_free(jft);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   539
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   540
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   541
static void tomessage(gconstpointer data, LmMessageNode *node)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   542
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   543
  JingleFT *jft = (JingleFT*) data;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   544
  gchar *size = NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   545
  gchar date[19];
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   546
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   547
  if (lm_message_node_get_child(node, "description") != NULL)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   548
    return;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   549
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   550
  LmMessageNode *node2 = lm_message_node_add_child(node, "description", NULL);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   551
  lm_message_node_set_attribute(node2, "xmlns", NS_JINGLE_APP_FT);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   552
  if (jft->type == JINGLE_FT_OFFER)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   553
    node2 = lm_message_node_add_child(node2, "offer", NULL);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   554
  else
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   555
    node2 = lm_message_node_add_child(node2, "request", NULL);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   556
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   557
  node2 = lm_message_node_add_child(node2, "file", NULL);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   558
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   559
  size = g_strdup_printf("%" G_GUINT64_FORMAT, jft->size);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   560
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   561
  lm_message_node_set_attributes(node2, "xmlns", NS_SI_FT,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   562
                                 "name", jft->name,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   563
                                 "size", size,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   564
                                 NULL);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   565
  g_free(size);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   566
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   567
  if (jft->hash != NULL)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   568
    lm_message_node_set_attribute(node2, "hash", jft->hash);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   569
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   570
  if (jft->date)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   571
    if (!to_iso8601(date, jft->date))
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   572
      lm_message_node_set_attribute(node2, "date", date);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   573
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   574
  if (jft->desc != NULL)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   575
    lm_message_node_add_child(node2, "desc", jft->desc);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   576
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   577
  //if (jft->data != 0)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   578
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   579
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   580
static void send_hash(const gchar *sid, const gchar *to, const gchar *hash)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   581
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   582
  JingleAckHandle *ackhandle;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   583
  GError *err = NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   584
  gboolean ret;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   585
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   586
  LmMessage *r = lm_message_new_with_sub_type(to, LM_MESSAGE_TYPE_IQ,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   587
                                              LM_MESSAGE_SUB_TYPE_SET);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   588
  LmMessageNode *node = lm_message_get_node(r);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   589
  lm_message_node_add_child(node, "jingle", NULL);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   590
  node = lm_message_node_get_child(node, "jingle");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   591
  lm_message_node_set_attributes(node, "xmlns", NS_JINGLE,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   592
                                 "sid", sid,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   593
                                 "action", "session-info",
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   594
                                 NULL);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   595
  lm_message_node_add_child(node, "hash", hash);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   596
  node = lm_message_node_get_child(node, "hash");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   597
  lm_message_node_set_attribute(node, "xmlns", NS_JINGLE_APP_FT_INFO);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   598
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   599
  ackhandle = g_new0(JingleAckHandle, 1);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   600
  ackhandle->callback = NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   601
  ackhandle->user_data = NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   602
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   603
  ret = lm_connection_send_with_reply(lconnection, r,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   604
                                      jingle_new_ack_handler(ackhandle), &err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   605
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   606
  // It's not really a problem, but we must tell it!
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   607
  if (ret == FALSE || err != NULL) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   608
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: cannot send hash: %s",
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   609
                 err->message);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   610
    g_error_free(err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   611
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   612
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   613
  lm_message_unref(r);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   614
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   615
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   616
static void send(session_content *sc)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   617
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   618
  JingleFT *jft;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   619
  gchar buf[JINGLE_FT_SIZE_READ];
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   620
  gsize read;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   621
  GIOStatus status;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   622
  int count = 0;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   623
  GError *err = NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   624
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   625
  JingleSession *sess = session_find_by_sid(sc->sid, sc->from);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   626
  if (sess == NULL) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   627
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: error before transfer");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   628
    // We haven't LmMessage: jingle_send_iq_error(jn->message, "cancel", "item-not-found", "unknown-session");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   629
    return;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   630
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   631
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   632
  SessionContent *sc2 = session_find_sessioncontent(sess, sc->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   633
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   634
  jft = (JingleFT*)sc2->description;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   635
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   636
  if (jft->dir != JINGLE_FT_OUTGOING)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   637
    return;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   638
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   639
  do {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   640
    count++;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   641
    status = g_io_channel_read_chars(jft->outfile, (gchar*)buf,
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   642
                                     JINGLE_FT_SIZE_READ, &read, &err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   643
  } while (status == G_IO_STATUS_AGAIN && count < 10);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   644
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   645
  if (status == G_IO_STATUS_AGAIN) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   646
    // TODO: something better
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   647
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: file unavailable");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   648
    return;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   649
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   650
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   651
  if (status == G_IO_STATUS_ERROR || err != NULL) {
146
2200a1c96af3 JFT: explode _jft_send
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 145
diff changeset
   652
    jft->state = JINGLE_FT_ERROR;
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   653
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: %s", err->message);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   654
    g_error_free(err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   655
    return;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   656
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   657
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   658
  if (status == G_IO_STATUS_NORMAL) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   659
    jft->transmit += read;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   660
    g_checksum_update(jft->md5, (guchar*)buf, read);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   661
    // Call a handle in jingle who will call the trans
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   662
    handle_app_data(sc->sid, sc->from, sc->name, buf, read);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   663
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   664
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   665
  if (status == G_IO_STATUS_EOF) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   666
    handle_app_data(sc->sid, sc->from, sc->name, NULL, 0);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   667
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: transfer finish (%s)",
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   668
                 jft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   669
    jft->hash = g_strdup(g_checksum_get_string(jft->md5));
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   670
    jft->state = JINGLE_FT_ENDING;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   671
    // Call a function to say state is ended
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   672
    session_changestate_sessioncontent(sess, sc2->name, 
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   673
                                       JINGLE_SESSION_STATE_ENDED);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   674
    // Send the hash
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   675
    send_hash(sess->sid, sess->to, jft->hash);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   676
    g_checksum_free(jft->md5);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   677
    
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   678
    if (!session_remove_sessioncontent(sess, sc2->name)) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   679
      jingle_send_session_terminate(sess, "success");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   680
      session_delete(sess);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   681
    }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   682
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   683
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   684
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   685
static void start(session_content *sc)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   686
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   687
  JingleFT *jft;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   688
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   689
  JingleSession *sess = session_find_by_sid(sc->sid, sc->from);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   690
  if (sess == NULL) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   691
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: error before transfer");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   692
    return;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   693
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   694
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   695
  SessionContent *sc2 = session_find_sessioncontent(sess, sc->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   696
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   697
  jft = (JingleFT*)sc2->description;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   698
  jft->state = JINGLE_FT_STARTING;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   699
  jft->md5 = g_checksum_new(G_CHECKSUM_MD5);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   700
  
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   701
  scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: Transfer start (%s)",
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   702
               jft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   703
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   704
  sc2->appfuncs->send(sc);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   705
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   706
140
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   707
static gboolean _check_hash(const gchar *hash1, GChecksum *md5)
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   708
{
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   709
  const gchar *hash2;
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   710
  
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   711
  if (!hash1 || !md5)
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   712
    return FALSE;
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   713
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   714
  hash2 = g_checksum_get_string(md5);
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   715
  
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   716
  if (g_ascii_strncasecmp(hash1, hash2, 32))
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   717
    return FALSE;
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   718
  
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   719
  return TRUE;
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   720
}
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   721
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   722
// When we got a session-terminate
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   723
static void stop(gconstpointer data)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   724
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   725
  JingleFT *jft = (JingleFT*)data;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   726
  GError *err = NULL;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   727
  GIOStatus status;
145
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   728
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   729
  if (jft->outfile != NULL) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   730
    status = g_io_channel_shutdown(jft->outfile, TRUE, &err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   731
    if (status != G_IO_STATUS_NORMAL || err != NULL) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   732
      scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: %s",
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   733
                   err->message);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   734
      g_error_free(err);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   735
    }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   736
  }
145
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   737
  
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   738
  if (jft->transmit < jft->size) {
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   739
    jft->state = JINGLE_FT_ERROR;
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   740
    if (jft->dir == JINGLE_FT_INCOMING)
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   741
      scr_LogPrint(LPRINT_LOGNORM, "JFT: session have been closed before we"
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   742
                   "receive all the file: %s", jft->name);
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   743
    else
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   744
      scr_LogPrint(LPRINT_LOGNORM, "JFT: session have been closed before we"
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   745
                   "send all the file: %s", jft->name);
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   746
    return;
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   747
  }
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   748
  
bde23b68e126 JFT: function stop now check if file is finish
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 143
diff changeset
   749
  jft->state = JINGLE_FT_ENDING;
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   750
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   751
  if (jft->hash != NULL && jft->md5 != NULL) {
140
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   752
    if (_check_hash(jft->hash, jft->md5) == FALSE) {
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   753
      scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: File corrupt (%s)",
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   754
                   jft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   755
    } else {
156
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   756
      scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: Transfer finished (%s)"
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   757
                   " and verified", jft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   758
    }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   759
  } else {
156
653fa009fea3 Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 152
diff changeset
   760
    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: Transfer finished (%s)"
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   761
                 " but not verified", jft->name);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   762
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   763
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   764
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   765
static gchar *_convert_size(guint64 size)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   766
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   767
  gchar *strsize;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   768
 
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   769
  if (size < 1024)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   770
    strsize = g_strdup_printf("%" G_GUINT64_FORMAT " B", size);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   771
  else if (size < 1048576)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   772
    strsize = g_strdup_printf("%.2lf KiB", size/1024.0);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   773
  else if (size < 1073741824)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   774
    strsize = g_strdup_printf("%.2lf MiB", size/1048576.0);
140
bbc50e69f5ad JFT: show is the hash is correct in info and add a new func _check_hash
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 139
diff changeset
   775
  else
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   776
    strsize = g_strdup_printf("%.2lf GiB", size/1073741824.0);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   777
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   778
  return strsize;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   779
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   780
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   781
static gchar* info(gconstpointer data)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   782
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   783
  JingleFT *jft = (JingleFT *)data;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   784
  gchar *info, *strsize = _convert_size(jft->size);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   785
  info = g_strdup_printf("JFT: Receive %s (%s)", jft->name, strsize);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   786
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   787
  g_free(strsize);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   788
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   789
  return info;
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   790
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   791
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   792
static void jingle_ft_init(void)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   793
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   794
  jingle_register_app(NS_JINGLE_APP_FT, &funcs, JINGLE_TRANSPORT_STREAMING);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   795
  xmpp_add_feature(NS_JINGLE_APP_FT);
172
d33526eba590 Fixed calls for MCabber API changes in 0.10.2.
Dominik George <nik@naturalnet.de>
parents: 171
diff changeset
   796
  jft_cid = compl_new_category(0);
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   797
  if (jft_cid) {
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   798
    compl_add_category_word(jft_cid, "send");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   799
    //compl_add_category_word(jft_cid, "request");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   800
    compl_add_category_word(jft_cid, "info");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   801
    compl_add_category_word(jft_cid, "flush");
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   802
  }
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   803
  /* Add command */
170
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   804
#ifdef MCABBER_API_HAVE_CMD_ID
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   805
  jft_cmdid = cmd_add("jft", "Manage file transfer", jft_cid, 0, do_sendfile,
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   806
                      NULL);
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   807
#else
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   808
  cmd_add("jft", "Manage file transfer", jft_cid, 0, do_sendfile, NULL);
170
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   809
#endif
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   810
}
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   811
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   812
static void jingle_ft_uninit(void)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   813
{
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   814
  g_slist_free(info_list);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   815
  xmpp_del_feature(NS_JINGLE_APP_FT);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   816
  jingle_unregister_app(NS_JINGLE_APP_FT);
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   817
  if (jft_cid)
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   818
    compl_del_category(jft_cid);
170
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   819
#ifdef MCABBER_API_HAVE_CMD_ID
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   820
  cmd_del(jft_cmdid);
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   821
#else
171
2729dfd1c085 Fix old typo
Mikael Berthe <mikael@lilotux.net>
parents: 170
diff changeset
   822
  cmd_del("jft");
170
2af5b8872201 Sync with new API
Mikael Berthe <mikael@lilotux.net>
parents: 169
diff changeset
   823
#endif
139
459b2503c1a3 Rename some stuff, create a README file, enable warnings in ./jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff changeset
   824
}
169
9aee866bdb9a JFT: when no ressource, change state from PENDING to ERROR
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents: 166
diff changeset
   825
/* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2:  For Vim users... */