|
|
//=============================================================================
// T127 PDU Types
//=============================================================================
typedef enum T127_PDU_TYPES { T127_FILE_OFFER = 0x0, T127_FILE_ACCEPT = 0x8, T127_FILE_REJECT = 0x10, T127_FILE_REQUEST = 0x18, T127_FILE_DENY = 0x20, T127_FILE_ERROR = 0x28, T127_FILE_ABORT = 0x30, T127_FILE_START = 0x38, T127_FILE_DATA = 0x40, T127_DIRECTORY_REQUEST = 0x48, T127_DIRECTORY_RESPONSE = 0x50, T127_MBFT_PRIVILEGE_REQUEST = 0x58, T127_MBFT_PRIVILEGE_ASSIGN = 0x60, T127_MBFT_NONSTANDARD = 0x68, T127_PRIVATE_CHANNEL_JOIN_INVITE = 0x70, T127_PRIVATE_CHANNEL_JOIN_RESPONSE = 0x78 } T127_PDUS;
#pragma pack(1)
typedef struct _T_T127_FILE_PDU_HEADER { BYTE pduType; WORD fileHandle; // File size in bytes
} T127_FILE_PDU_HEADER;
typedef struct _T_T127_FILE_DATA_BLOCK_HEADER { BYTE EOFFlag; WORD FileDataSize; // File size in bytes
}T127_FILE_DATA_BLOCK_HEADER;
typedef struct _T_T127_PRIVATE_CHANNEL_INVITE { BYTE pduType; WORD ControlChannel; WORD DataChannel; BYTE EncodingMode; }T127_PRIVATE_CHANNEL_INVITE;
typedef struct _T_T127_PRIVATE_CHANNEL_RESPONSE { BYTE pduType; WORD ControlChannel; BYTE Response; }T127_PRIVATE_CHANNEL_RESPONSE;
typedef struct _T_T127_FILE_START_DATA_BLOCK_HEADER { BYTE EOFFlag; WORD CompressionFormat; WORD FileDataSize; // File size in bytes
}T127_FILE_START_DATA_BLOCK_HEADER;
typedef struct _T_T127_FILE_DATA_HEADER { T127_FILE_PDU_HEADER PDUHeader; T127_FILE_DATA_BLOCK_HEADER DataHeader; // File size in bytes
} T127_FILE_DATA_HEADER;
typedef struct _T_127_FILE_ERROR_HEADER { T127_FILE_PDU_HEADER PDUHeader; BYTE errorCode; } T127_FILE_ERROR_HEADER;
typedef struct _T_T127_FILE_HEADER { DWORD presentFields; BYTE FileHeader; } T127_FILE_HEADER;
typedef struct _T_T127_FILE_START_PDU { WORD FileHandle; }T127_FILE_START_PDU;
typedef struct _T_T127_FILE_ABORT_PDU { WORD pduType_PresentFields; WORD dataChannel; WORD transmitterUserId; WORD fileHandle; } T127_FILE_ABORT_PDU;
typedef struct _T_T127_PRIVILEGE_REQUEST_PDU { BYTE pduType; BYTE nPrivileges; BYTE privileges[3]; // 6/2 privileges.
} T127_PRIVILEGE_REQUEST_PDU;
typedef struct _T_T127_FILE_OFFER_PDU { WORD ChannelID; WORD FileHandle; WORD RosterInstance; BYTE AckFlag; } T127_FILE_OFFER_PDU;
typedef struct _T_FILE_HEADER_INFO { BYTE pduType; PSTR fileName; LONG fileNameSize; LONG fileSize; LONG pduSize; BYTE nBytesForFileSize; } FILE_HEADER_INFO; typedef struct {
unsigned wASNuser_visible_string_present :1; // 00000000 00000000 00000000 0000000? 0000 0001
unsigned wASNFileHeader_pathname_present :1; // 00000000 00000000 00000000 000000?0 0000 0002
unsigned wASNenvironment_present :1; // 00000000 00000000 00000000 00000?00 0000 0004
unsigned wASNcompression_present :1; // 00000000 00000000 00000000 0000?000 0000 0008
unsigned wASNcharacter_set_present :1; // 00000000 00000000 00000000 000?0000 0000 0010
unsigned wASNrecipient_present :1; // 00000000 00000000 00000000 00?00000 0000 0020
unsigned wASNoperating_system_present :1; // 00000000 00000000 00000000 0?000000 0000 0040
unsigned wASNmachine_present :1; // 00000000 00000000 00000000 ?0000000 0000 0080
unsigned wASNapplication_reference_present :1; // 00000000 00000000 0000000? 00000000 0000 0100
unsigned wASNstructure_present :1; // 00000000 00000000 000000?0 00000000 0000 0200
unsigned wASNprivate_use_present :1; // 00000000 00000000 00000?00 00000000 0000 0400
unsigned :1; // 00000000 00000000 0000X000 00000000 0000 0800
unsigned wASNaccess_control_present :1; // 00000000 00000000 000?0000 00000000 0000 1000
unsigned wASNfuture_filesize_present :1; // 00000000 00000000 00?00000 00000000 0000 2000
unsigned wASNfilesize_present :1; // 00000000 00000000 0?000000 00000000 0000 4000
unsigned :3; // 00000000 000000XX X0000000 00000000 0003 8000
unsigned wASNdate_and_time_of_last_read_access_present :1; // 00000000 00000?00 00000000 00000000 0004 0000
unsigned wASNdate_and_time_of_last_modification_present :1; // 00000000 0000?000 00000000 00000000 0008 0000
unsigned wASNdate_and_time_of_creation_present :1; // 00000000 000?0000 00000000 00000000 0010 0000
unsigned :1; // 00000000 00X00000 00000000 00000000 0020 0000
unsigned wASNcontents_type_present :1; // 00000000 0?000000 00000000 00000000 0040 0000
unsigned wASNpermitted_actions_present :1; // 00000000 ?0000000 00000000 00000000 0080 0000
unsigned wASNfilename_present :1; // 0000000? 00000000 00000000 00000000 0100 0000
unsigned wASNprotocol_version_present :1; // 000000?0 00000000 00000000 00000000 0200 0000
}T127_FILE_OFFER_PRESENT_FIELDS;
#pragma pack()
typedef enum T127_file_header_fields { user_visible_string_present = 0x00000001,//0x00010000, //0x00000001
FileHeader_pathname_present = 0x00000002,//0x00020000, //0x00000002
environment_present = 0x00000004,//0x00040000, //0x00000004
compression_present = 0x00000008,//0x00080000, //0x00000008
character_set_present = 0x00000010,//0x00100000, //0x00000010
recipient_present = 0x00000020,//0x00200000, //0x00000020
operating_system_present = 0x00000040,//0x00400000, //0x00000040
machine_present = 0x00000080,//0x00800000, //0x00000080
application_reference_present = 0x00000100,//0x00010000, //0x00000100
structure_present = 0x00000200,//0x00020000, //0x00000200
private_use_present = 0x00000400,//0x00040000, //0x00000400
access_control_present = 0x00001000,//0x00100000, //0x00001000
future_filesize_present = 0x00002000,//0x00200000, //0x00002000
filesize_present = 0x00004000,//0x00400000, //0x00004000
date_and_time_of_last_read_access_present= 0x00040000,//0x00000400, //0x00040000
date_and_time_of_last_modification_present= 0x00080000,//0x00000800, //0x00080000
date_and_time_of_creation_present = 0x00100000,//0x00001000, //0x00100000
contents_type_present = 0x00400000,//0x00004000, //0x00400000
permitted_actions_present = 0x00800000,//0x00000800, //0x00800000
filename_present = 0x01000000,//0x00000001, //0x01000000
protocol_version_present = 0x02000000 //0x00000002 //0x02000000
}T127_FILE_HEADER_FIELDS;
VOID GetFileHeaderSize (FILE_HEADER_INFO* fileHeader); BYTE GetLengthFieldSize (ULONG length); VOID SetLengthField(BYTE * pBuff, BYTE sizeOfLength, ULONG lengthOfField); BYTE* GetFileInfo (LPSTR lpEncodedBuffer, BYTE * lpszFileName, LONG * FileSize, ULONG* FileDateTime );
#define SWAPWORD(a) (WORD)(HIBYTE(LOWORD(a)) | (LOBYTE(LOWORD(a)) << 8))
#define MIN_ASNDynamicChannelID 1001
#define MAX_ASNDynamicChannelID 65535
#define SIZE_OF_DATE_TIME_STRING 14 // yyyymmddhhmmss
|