jingle-ft/filetransfer.h
author Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Sun, 12 Sep 2010 18:20:53 +0200
changeset 167 97f93fa3cd95
parent 160 e149e868d501
permissions -rw-r--r--
Change socks5.c to s5b.c in the headers and cmakelist

#ifndef __JINGLEFT_H__
#define __JINGLEFT_H__ 1

/**
 * \file filetransfer.h
 * \brief The main file of app-module to the file transfer XEP 234
 * \author Nicolas Cornu
 * \version 0.1
 */
 
#define NS_JINGLE_APP_FT      "urn:xmpp:jingle:apps:file-transfer:1"
#define NS_JINGLE_APP_FT_INFO "urn:xmpp:jingle:apps:file-transfer:info:1"
#define NS_SI_FT              "http://jabber.org/protocol/si/profile/file-transfer"
#define JINGLE_FT_SIZE_READ 2048

/**
 * \enum JingleFTType
 * \brief type of the content
 */
typedef enum {
  JINGLE_FT_OFFER,
  JINGLE_FT_REQUEST,
} JingleFTType;

/**
 * \enum JingleFTDirection
 * \brief Direction of the file
 */
typedef enum {
  JINGLE_FT_INCOMING, /*!< We download the file */
  JINGLE_FT_OUTGOING /*!< We upload the file */
} JingleFTDirection;

/**
 * \enum JingleFTState
 * \brief state of the file
 */
typedef enum {
  JINGLE_FT_PENDING, /*!< The file isn't yet accepted by the both parts */
  JINGLE_FT_STARTING, /*!< The file is transfering */
  JINGLE_FT_ENDING, /*!< The file has been transfered */
  JINGLE_FT_REJECT, /*!< The transfer has been refused */
  JINGLE_FT_ERROR /*!< And error occured during the transfer */
} JingleFTState;

/**
 * \struct JingleFT
 * \brief represent the file transfer himself
 */
typedef struct {
  /**
   * the last modification of the file, optional 
   */
  time_t date;

  /**
   * MD5 hash of the file, optional 
   */
  gchar *hash;

  /**
   * the name of the file that the sender wishes to send
   */
  gchar *name;

  /**
   * the size, in bytes, of the data to be sent 
   */
  guint64 size;

  /**
   * Data already send/receive 
   */
  guint64 transmit;
  
  /**
   * descriptor to the output file
   */
  GIOChannel *outfile;
  
  /**
   * Is it an offer or a request ?
   */
  JingleFTType type;
  
  /**
   * Is it if the file is incoming or outgoing
   */
  JingleFTDirection dir;
  
  /**
   * The state of the file (PENDING, STARTING, ...) 
   */
  JingleFTState state;
  
  /**
   * A little description of the transfer
   */
  gchar *desc;
  
  /**
   * Where we compute the hash
   */
  GChecksum *md5;
  
} JingleFT;

/**
 * \struct JingleFTInfo
 * \brief contain only a link to the gconstpointer
 *
 * We keep localy a list of all the files transfered to print infos
 *
 */
typedef struct {
  /**
   * An index. Not use now, but will in the futur to cancel a transfer.
   */
  gint index;
  
  /**
   * The link to the JingleFT in the session.
   */
  JingleFT *jft;
} JingleFTInfo;
#endif