obex_def.h

Go to the documentation of this file.
00001 /*
00002  Copyright (c) 2007, Forkbeard team
00003 
00004  All rights reserved.
00005 
00006  Licensed under BSD license. See License.txt
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 /* Enumerations */
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 /* Structures */
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     /* Reliable session support  */
00103     /*
00104     byte                sequenceNumber;
00105     SessioId            sessionId;
00106     Address             clientDeviceAddress;
00107     Address             serverDeviceAddress;
00108     Nonce               clientNonce;
00109     Nonce               serverNonce;
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 /* Functions */
00177 
00178 
00179 /* Packet functions */
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 /* Parameter check functions */
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 /* Data buffer functions */
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 /* Debugging functions */
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 // End of file  
footer
 SourceForge.net Logo