00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __OBEX_DEF_H__
00010 #define __OBEX_DEF_H__
00011
00012 #ifndef __OBEX_PRIVATE_INCLUDE__
00013 #error "This is private interface definition file. Do not include outside obex."
00014 #endif
00015
00016 #include "obex.h"
00017
00018 #include <winsock2.h>
00019 #include <bthdef.h>
00020 #include <Bthsdpdef.h>
00021 #include <BluetoothAPIs.h>
00022
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026
00027
00028 #define OBEX_SOCKET_VERSION MAKEWORD( 2, 2 )
00029 #define OBEX_BLUETOOTH_MAX_CHANNEL 32
00030
00031 #define OBEX_MINUMUM_RESPONSE_SIZE 3
00032
00033 #define OBEX_CONNECT_REQ_SIZE 7
00034 #define OBEX_SETPATH_REQ_SIZE 5
00035 #define OBEX_DEFAULT_REQ_SIZE 3
00036
00037 #define OBEX_CONNECT_RES_SIZE 7
00038 #define OBEX_DEFAULT_RES_SIZE 3
00039
00040 #define OBEX_DEFAULT_VERSION 0x10
00041
00042
00043
00045 typedef enum _ObexSessionState
00046 {
00047 OBEX_SESSION_STATE_UNKNOWN = 0,
00048 OBEX_SESSION_STATE_UNINITIALIZED = 1,
00049 OBEX_SESSION_STATE_OPERATING,
00050 OBEX_SESSION_STATE_SUSPENDED,
00051 OBEX_SESSION_STATE_DISCONNECTED,
00053 OBEX_SESSION_STATE_FORCE_DWORD = 0xffffffff,
00054 } ObexSessionState;
00055
00056
00057
00059 struct _BTConnection
00060 {
00062 SOCKET sckt;
00063
00065 BTH_ADDR address;
00066
00068 OBEX_UUID serviceClass;
00069
00071 int port;
00072
00074 dword packetSize;
00075 };
00076
00077
00079 struct _ObexSession
00080 {
00082 BTConnection* connection;
00083
00085 ObexSessionState sessionState;
00086
00088 word maximumPacketSize;
00089
00091 OBEX_UUID target;
00092
00094 dword connectionId;
00095
00097 AuthenticationResponseFunc authFunc;
00098
00100 void* appData;
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111 };
00112
00114 typedef struct _HeaderOffsetEntry
00115 {
00117 ObexPacketHeader header;
00118
00120 word offset;
00121
00123 word size;
00124 } HeaderOffsetEntry;
00125
00127 typedef enum _ObexPacketType
00128 {
00129 OBEX_PACKET_TYPE_UNKNOWN = 0,
00130 OBEX_PACKET_TYPE_REQUEST = 1,
00131 OBEX_PACKET_TYPE_RESPONSE,
00132 } ObexPacketType;
00133
00135 struct _ObexPacket
00136 {
00138 ObexPacketType type;
00139
00141 byte id;
00142
00144 word length;
00145
00147 byte flags;
00148
00150 word headerCount;
00151
00153 HeaderOffsetEntry* headers;
00154
00156 byte* packetData;
00157 };
00158
00160 typedef struct _ObexDataBuffer
00161 {
00163 byte* dataPtr;
00164
00166 dword size;
00167
00169 dword readOffset;
00170
00172 int bufferType;
00173 } ObexDataBuffer;
00174
00175
00176
00177
00178
00179
00180
00195 int obexPacketTransfer( BTConnection* connection, ObexPacket *request, ObexPacket **response );
00196
00209 int obexPacketParseResponse( ObexPacket *request, ObexPacket *response );
00210
00225 int obexPacketGetMaximumPacketSize( ObexPacket* packet, word *size );
00226
00241 int obexPacketSetMaximumPacketSize( ObexPacket* packet, word size );
00242
00257 int obexPacketGetVersion( ObexPacket* packet, byte *minor, byte *major );
00258
00273 int obexPacketSetVersion( ObexPacket* packet, byte minor, byte major );
00274
00287 int obexPacketInitialize( ObexPacket* newPacket, ObexPacketOperation operation, byte flags );
00288
00302 int obexPacketAddHeaderOffset( ObexPacket *packet, ObexPacketHeader header, word offset, word size );
00303
00312 word obexPacketGetEmptyPacketSize( ObexPacketOperation operation );
00313
00314
00315
00333 BOOL checkPacketHeader( ObexPacket* packet, ObexPacketHeader header, word size );
00334
00344 BOOL exclusiveHeader( ObexPacketHeader header1 , ObexPacketHeader header2 );
00345
00356 BOOL legalPacketHeader( ObexPacketHeader header );
00357
00365 BOOL legalOperationFlag ( ObexPacketOperation operation, byte flags );
00366
00377 BOOL legalPacketOperation( ObexPacketOperation operation );
00378
00379
00380
00390 int obexDataBufferRead( ObexDataBuffer* buffer, dword *size, void* data );
00391
00401 int obexDataBufferWrite( ObexDataBuffer* buffer, dword size, void* data );
00402
00409 void MD5(void *dest, void *orig, int len);
00410
00411
00412 #ifdef _DEBUG
00413
00414 void* _mallocTracked(unsigned int size, char *file, unsigned int line );
00415 void _freeTracked(void *ptr, char *file, unsigned int line );
00416
00417 #define obexAlloc( size ) _mallocTracked( size, __FILE__, __LINE__ )
00418 #define obexDealloc( ptr ) _freeTracked( ptr, __FILE__, __LINE__ )
00419
00420 void _debugStrOutHex(const char *str, int len);
00421 void _debugStrOut(const char* output);
00422
00423 #else
00424
00425 #define obexAlloc( size ) malloc(size)
00426 #define obexDealloc( ptr ) free(ptr);
00427
00428 #endif
00429
00430 static const word wordToNetworkByteOrder( const word w )
00431 {
00432 return htons ( w );
00433 }
00434
00435 static const word wordFromNetworkByteOrder( const word w )
00436 {
00437 return ntohs( w );
00438 }
00439
00440 static const dword dwordToNetworkByteOrder( const dword dw )
00441 {
00442 return htonl ( dw );
00443 }
00444
00445 static const dword dwordFromNetworkByteOrder( const dword dw )
00446 {
00447 return ntohl ( dw );
00448 }
00449
00450
00451 #ifdef __cplusplus
00452 "}"
00453 #endif
00454
00455
00456 #endif // __OBEX_DEF_H__
00457
00458