/***************************************************************************
                          types.h  -  description
                             -------------------
    begin                : Thu May 08 2003
    copyright            : (C) 2003-2005 by Mathias Küster
    email                : mathen@users.berlios.de
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef _TYPES_H
#define _TYPES_H

/** */
typedef enum eUnit {
	euAUTO=0,
	euBYTE,
	euKBYTE,
	euMBYTE,
	euGBYTE
} eUnit;

/** transfer medium */
typedef enum eltMedium {
	eltNONE=0,
	eltBUFFER,
	eltFILE,
	eltCLIENTVERSION
};

/** direction */
typedef enum eDirection {
	edNONE=0,
	edUPLOAD,
	edDOWNLOAD
};

/** chunk state */
typedef enum eChunkState {
	ecsFREE=0,
	ecsFINISHED,
	ecsLOCKED
};

/** crypt state */
typedef enum eSecureState {
	esecsNONE=0,
	esecsHANDSHAKE,
	esecsENCRYPTED
};

/** socket state */
typedef enum eConnectionState {
	estNONE=0,
	estCONNECT,
	estCONNECTING,
	estCONNECTED,
	estSSLCONNECTED,
	estDISCONNECTING,
	estDISCONNECTED,
	estSOCKETERROR,
	estCONNECTIONTIMEOUT,
	estTRANSFERHANDSHAKE,
	estTRANSFERDOWNLOAD,
	estTRANSFERUPLOAD
};

typedef enum eTransferFileState {
	etfsNONE=0,
	etfsTRANSFER,
	etfsERROR,
	etfsPAUSE
};

typedef enum eTransferWaitState {
	etwsWAIT=0,
	etwsIDLE,
	etwsRUN,
	etwsHUBOFFLINE,
	etwsUSEROFFLINE,
	etwsUSERBUSY,
	etwsSENDERROR
};

typedef enum eClientMode {
	ecmNONE=0,
	ecmACTIVE,
	ecmPASSIVE
};

typedef enum eUserAwayMode {
	euamNONE=0,
	euamNORMAL,
	euamAWAY,
	euamONLINE,
	euamOFFLINE
};

typedef enum eFileTypes {
	eftUNKNOWN=0,
	eftALL,
	eftMP3,
	eftARCHIVE,
	eftDOCUMENT,
	eftAPPLICATION,
	eftPICTURE,
	eftVIDEO,
	eftFOLDER,
	eftHASH
};

typedef enum eSearchSizeType {
	esstATLEAST=0,
	esstATMOST,
	esstEXACT
};

typedef enum eUserSpeed {
	eusUNKNOWN=0,
	eus288KBPS,
	eus336KBPS,
	eus56KBPS,
	eusMODEM,
	eusISDN,
	eusDSL,
	eusSATELLITE,
	eusCABLE,
	eusLANT1,
	eusLANT3,
	eusWIRELESS,
	eusMICROWAVE
};

typedef enum eUserClientVersion {
	eucvNONE=0,
	eucvDCPP,
	eucvDCHPP,
	eucvPTOKAX,
	eucvDCGUI,
	eucvZPOC,
	eucvOPENDCD,
	eucvDCTC,
	eucvNMDC,
	eucvQUICKDC,
	eucvOPERADC,
	eucvSDDC,	/* <SdDC++ V:0.121GoddessOfTheDark,M:A,H:2/2/13,S:0/1> */
	eucvSTRGDCPP,	/* <StrgDC++ V:1.00 RC3,M:P,H:1/0/0,S:1> */
	eucvRMDC,	/* <RMDC++ V:0.306E[6],M:A,H:3/0/0,S:3> */
	eucvDCPRO,	/* <DC:PRO V:0.2.3.23,M:A,H:2/0/0,S:4> */
	eucvIDC,	/* <iDC1.072> */
	eucvPERLDC,	/* Leaf's are the best! <PerlDC V:0.2,M:P,H:1,S:1> */
	eucvUNKNOWN
};

#endif
