obex/obexprotocol/obex/public/obexconstants.h
changeset 0 d0791faffa3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/obex/obexprotocol/obex/public/obexconstants.h	Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,595 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef __OBEXCONSTANTS_H
+#define __OBEXCONSTANTS_H
+
+#include <e32std.h>
+#include <es_sock.h>
+#include <ir_sock.h>
+#include <bt_sock.h>
+#include <obexpanics.h>
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <obexconstantsinternal.h>
+#endif
+
+
+/** @publishedAll */
+const TInt KChallResponseSize = 58;
+/** @publishedAll */
+const TInt KObexRespSize = 16;
+/** @publishedAll */
+const TInt KUsbIntStringDescLength = 30;
+/** @publishedAll */
+const TUint8 KObexObjectDescriptionSize = 255;
+
+// Extended errors for IrObex
+
+/** Must not use as not in the allocated range */
+const TInt KErrIrObexRespBase			= - 5500; 
+
+/** Extended error for IrObex - No other infrared device found */
+const TInt KErrIrObexClientNoDevicesFound = -5501;
+
+/** Extended error for IrObex - Other IR device cannot handle IrObex */
+const TInt KErrIrObexClientPeerDoesNotHaveObex = -5502;
+
+/** Extended error for IrObex - Other IR device aborted the transfer */
+const TInt KErrIrObexClientPutPeerAborted	= -5503;
+
+/** Extended error for IrObex - Peer device aborted data transmission/obex sending */
+const TInt KErrIrObexServerPutPeerAborted = -5507;
+
+/** Extended error for IrObex - Cannot authorise the challenge so link dropped */
+const TInt KErrIrObexConnectChallRejected = -5512;
+
+// Other Obex errors defined in the system but no longer used
+// Do not reuse the number!
+// KErrIrObexClientPutPeerCannotHandleObject -5504
+// KErrIrObexServerPutFileWriteError		-5509
+// KErrIrObexClientFirstPutFailed			-5510
+// KErrIrObexClientSubsequentPutFailed		-5511
+
+/** Unexpected event for the given state */
+const TInt KErrIrObexBadEvent = -5513;
+
+/** Event occurred while Server is stopped */
+const TInt KErrIrObexServerStopped = -5514;
+
+/** Packet received while state machine is in a wait state */
+const TInt KErrIrObexPacketDuringWait = -5515;
+
+// There are other error codes defined at the end of this file,
+// which are a direct mapping of specific Obex error codes and
+// are returned by the client.
+
+
+// Flags used by Connect
+// ...None in OBEX 1.0
+
+
+/**
+Version number for TObexTransportInfo and derived classes.  
+When iVersion is set to this value the following fields of TObexTransportInfo  
+must be set:
+iTransportName, 
+iReceiveMtu
+iTransmitMtu
+The iVersion member variable must be set to this value. If in future any of the 
+iFuture variables are used a new version constant will be created.
+
+@see TObexTransportInfo
+@publishedAll
+@released
+*/
+const TInt KObexTransportInfoVersion0 = 0;	
+
+/**
+Default for the receive and transmit MTU sizes
+Use this default value for setting the iReceiveMtu or iTransmitMtu in TObexTransportInfo
+objects or derived classes.
+
+@see TObexTransportInfo
+@publishedAll
+@released
+*/
+const TInt KObexDefaultMtuSize = 4000;
+
+/**
+Default value for the number of discovery slots to use.  Use this value as a default 
+for iDiscoverySlots in TObexIrdaV2TransportInfo.  
+
+@see TObexIrdaV2TransportInfo
+@publishedAll
+@released
+*/
+const TUint KObexIrdaDefaultDiscoverySlotsToUse = 1;
+
+/**
+Default value for the number of discovery attempts made.  Use this value as a default for iDiscoveryAttempts
+in TObexIrdaV2TransportInfo.  
+@see TObexIrdaV2TransportInfo
+@publishedAll
+@released
+*/
+const TUint KObexIrdaDefaultDiscoveryAttempts = 4;
+
+// Constants used to define which transport Obex will run over.
+// Used in TObexTransportInfo and TObexProtocolInfo's iTransport member.
+
+/**
+Protocol string when running over IrDA
+@see TObexIrProtocolInfo
+@see TObexTransportInfo
+@publishedAll
+@released
+*/
+_LIT(KObexIrTTPProtocol, "IrTinyTP");
+
+/**
+Protocol string when running over IrDA
+Using this version indicates that the configuration object contains discovery parameters.
+@see TObexIrProtocolInfo
+@publishedAll
+@released
+*/
+_LIT(KObexIrTTPProtocolV2, "IrTinyTP-V2");
+
+/**
+Protocol string when running over IrDA
+Using this version indicates that the configuration object contains the device nickname.
+@see TObexIrProtocolInfo
+@publishedAll
+
+@capability WriteDeviceData If the TObexIrV3TransportInfo is passed as the argument
+                            to CObexServer::NewL or CObexClient::NewL and the associated 
+                            name is valid.
+@released
+*/
+_LIT(KObexIrTTPProtocolV3, "IrTinyTP-V3");
+
+/**
+Protocol string when running over Bluetooth
+@see TObexBluetoothProtocolInfo
+@see TObexTransportInfo
+@publishedAll
+@released
+*/
+_LIT(KObexRfcommProtocol, "RFCOMM");
+
+/**
+Protocol string when running over USB
+@see TObexUsbProtocolInfo
+@see TObexTransportInfo
+@publishedAll
+@released
+*/
+_LIT(KObexUsbProtocol, "USB");
+
+/**
+Place holder for...
+protocol string that should be used 
+if a Win32 emulator USB transport were 
+to be created for testing.
+@see TObexUsbProtocolInfo
+@see TObexTransportInfo
+@publishedAll
+@released
+*/
+_LIT(KObexWin32UsbProtocol, "Win32Usb");
+
+/**
+Protocol string when running over USB using client driver extensions
+@see TObexUsbProtocolInfoV2
+@see TObexTransportInfo
+@publishedAll
+@released
+*/
+_LIT(KObexUsbProtocolV2, "USB-V2");
+
+/** 
+This class is derived for each underlying transport protocol OBEX 
+runs over.
+
+The iTransport member holds the unique name for the transport. For example for
+infra-red (TinyTP) this is "IrTinyTP" or KObexIrTTPProtocol.
+
+@see TObexIrProtocolInfo for running over TinyTP
+@see TObexBluetoothProtocolInfo for running over Rfcomm
+@see TObexUsbProtocolInfo for running over USB
+@see TObexUsbProtocolInfoV2 for running over USB using client driver extensions
+
+@see KObexIrTTPProtocol
+@see KObexIrTTPProtocolV2
+@see KObexRfcommProtocol
+@see KObexUsbProtocol
+@see KObexUsbProtocolV2
+
+@publishedAll
+@released
+*/
+NONSHARABLE_CLASS(TObexProtocolInfo)
+	{
+public:
+	/** Holds the unique name for the transport. */
+	TBuf<60> iTransport;
+private:
+	// This data padding has been added to help prevent future binary compatibility breaks	
+	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
+	TUint32     iPadding1; 
+	TUint32     iPadding2; 		
+	};
+
+/** 
+Used to describe IrDA specific protocol information
+	
+To access the default OBEX server, the IAS class value should be "OBEX"
+and the IAS attribute name "IrDA:TinyTP:LsapSel". 
+
+@publishedAll
+@released
+*/
+NONSHARABLE_CLASS(TObexIrProtocolInfo) : public TObexProtocolInfo
+	{
+public:
+	/** IrDA address information for this connection, as used in the IrDA sockets interface.
+	Refer to the SDK for more information about this.
+	Its main use is for setting the port that the local machine will listen on. */
+	TIrdaSockAddr iAddr;
+	/** The IAS class value that the OBEX session will register its listener port,
+	or request remote port with. */
+	TBuf8<KIASClassNameMax> iClassName;
+	/** The IAS attribute value that the OBEX session will register its listener port,
+	or request remote port with. */
+	TBuf8<KIASAttributeNameMax> iAttributeName;
+	/** The number of discovery slots to use. */
+	TUint8 iDiscoverySlots;
+	/** The number of discovery attempts to make. */
+	TUint8 iDiscoveryAttempts;
+
+private:
+	// This data padding has been added to help prevent future binary compatibility breaks	
+	// None of these padding variables have been zero'd because they are currently not used
+	TUint16     iPadding1; 
+	TUint32     iPadding2; 		
+	TUint32     iPadding3; 
+	TUint32     iPadding4; 	
+	};
+
+/** 
+Used to describe Bluetooth specific protocol information
+	
+@publishedAll
+@released
+*/
+NONSHARABLE_CLASS(TObexBluetoothProtocolInfo) : public TObexProtocolInfo
+	{
+public:
+	/** 
+	For OBEX servers:
+	This defines the server channel on which the OBEX server listens 
+	for connections. The server channel is set using SetPort on the 
+	TRfcommSockAddr.
+	Note:
+	1) Unless the channel is defined as KRfcommPassiveAutoBind 
+	it may be in use when the obex server attempts to 'bind' to it
+	2) If the channel is defined as KRfcommPassiveAutoBind 
+	then when the server is FIRST started it will attempt 
+	to find a free RFComm channel. If this is successful 
+	that free channel will be used as the server channel 
+	for the life time of the obex server including
+	when it is 'stopped' and re-'started'.
+	3) When the obex server is stopped, and very
+	briefly when a bluetooth connection comes down, the
+	obex server releases its server channel. It is possible
+	therefore that during this time another application might bind
+	to it. This will cause an error when the obex server tries
+	to re-bind.
+
+	Also note that a Bluetooth OBEX server will itself set the Object Transfer
+	bit in the Service Class as required by the Generic Object Exchange
+	Profile so the user need not do this.	
+	@see CObexServer
+	
+	For OBEX clients:
+	This defines the server channel and the 
+	device address to connect to. The server channel 
+	and device address are set respectively using SetPort 
+	and SetBTAddr on the TRfcommSockAddr.
+	*/
+	TRfcommSockAddr iAddr;
+	
+private:
+	// This data padding has been added to help prevent future binary compatibility breaks	
+	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
+	TUint32     iPadding1; 
+	TUint32     iPadding2; 	
+	};
+
+/** 
+Used to describe USB specific protocol information
+	
+@publishedAll
+@released
+*/
+NONSHARABLE_CLASS(TObexUsbProtocolInfo) : public TObexProtocolInfo
+	{
+public:
+	/** Provides a string to be attached to the Obex function's Communication Class interface,
+	which may be used to identify the Obex service. */
+	TBuf16<KUsbIntStringDescLength> iInterfaceStringDescriptor;
+	};
+
+/** 
+Used to set options used by the extended USB client driver for improved performance
+	
+@see TObexUsbProtocolInfo
+@see RDevUsbcClient
+@publishedAll
+@released
+*/
+NONSHARABLE_CLASS(TObexUsbProtocolInfoV2) : public TObexUsbProtocolInfo
+	{
+public:
+	/** Bitmap containing the bandwidth priorities to use on IN and OUT endpoints
+	@see TUsbcBandwidthPriority
+	*/
+	TInt iBandwidthPriority;
+	/** Specifies whether to use DMA on the bulk OUT endpoint */
+	TBool iDmaOnOutEndpoint;
+	/** Specifies whether to use DMA on the bulk IN endpoint */
+	TBool iDmaOnInEndpoint;
+	
+private:
+	// This data padding has been added to help prevent future binary compatibility breaks	
+	// None of these padding variables have been zero'd because they are currently not used
+	TUint32     iPadding1; 
+	TUint32     iPadding2; 		
+	TUint32     iPadding3; 
+	TUint32     iPadding4; 	
+	};
+
+/**
+Contains information about OBEX packet sizing policy, defining the
+maximum buffer size for receive and transmit packets
+*/
+NONSHARABLE_CLASS(TObexProtocolPolicy)
+	{
+public:
+	IMPORT_C TObexProtocolPolicy ();	// Sets version and default values
+
+	IMPORT_C TInt SetReceiveMtu ( TUint16 aReceiveMtu );
+	IMPORT_C TInt SetTransmitMtu ( TUint16 aTransmitMtu );
+	IMPORT_C TUint16 Version () const;
+	IMPORT_C TUint16 ReceiveMtu () const;
+	IMPORT_C TUint16 TransmitMtu () const;
+
+private:
+	TUint16 iVersion;
+	TUint16 iReceiveMtu;
+	TUint16 iTransmitMtu;
+
+	// This data padding has been added to help prevent future binary compatibility breaks	
+	// None of these padding variables have been zero'd because they are currently not used
+	TUint32     iPadding1; 
+	TUint32     iPadding2; 		
+	TUint32     iPadding3; 
+	TUint32     iPadding4; 	
+	};
+
+struct TObexConnectionInfo;
+
+/**
+TObexConnectInfo
+This structure contains information used during OBEX connection. iVersion
+holds the encoded OBEX version of the machine, use @c VersionMajor() and
+@c VersionMinor() to extract the parts of the version number (each having a
+value from 0 to 15). @c iFlags holds OBEX connection flags. @c iWho holds 
+the Who attribute from the connect packet, if any was specified, or 
+otherwise has a length of 0. 
+It is recommended that this class is only ever allocated on the heap as it is quite big.
+*/
+NONSHARABLE_CLASS(TObexConnectInfo)
+	{
+public:
+	IMPORT_C TObexConnectInfo();
+	IMPORT_C TUint8 VersionMajor() const;
+	IMPORT_C TUint8 VersionMinor() const;
+public:
+	TUint8 iVersion; /** Encoded OBEX version of the machine*/
+	TUint8 iFlags; /** iFlags holds OBEX connection flags*/
+	TBuf8<KObexObjectDescriptionSize> iWho; /** the Who attribute from the connect packet, if any was specified */
+	TBuf8<KObexObjectDescriptionSize> iTargetHeader; /** the Target header from the connect packet, if any was specified */
+	
+private:
+	// This data padding has been added to help prevent future binary compatibility breaks	
+	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
+	TUint32     iPadding1; 
+	TUint32     iPadding2; 	
+	};
+
+
+
+//if these codes are extended due to a IRObex spec update ensure 
+//that the TInt immediately below are updated 
+//and the default in the method IrOBEXUtil::ObexResponse is also updated
+enum TObexResponse  
+	{ 
+/** Response is "Continue" */	
+	ERespContinue			= 0x10,
+	
+/** Response is "Success" */		
+	ERespSuccess			= 0x20,
+	
+/** Response is "Created" */		
+	ERespCreated			= 0x21,
+	
+/** Response is "Accepted" */		
+	ERespAccepted			= 0x22,
+	
+/** Response is "Non-Authenticated Information" */		
+	ERespNonAuthInfo		= 0x23,
+	
+/** Response is "No Content" */			
+	ERespNoContent			= 0x24,
+	
+/** Response is "Reset Content" */				
+	ERespResetContent		= 0x25,
+	
+/** Response is "Partial Content" */					
+	ERespPartialContent		= 0x26,
+	
+/** Response is "Multiple Choices" */						
+	ERespMultipleChoices	= 0x30,
+	
+/** Response is "Moved Permanently" */						
+	ERespMovedPerm			= 0x31,
+	
+/** Response is "Moved Temporarily" */							
+	ERespMovedTemp			= 0x32,
+
+/** Response is "See Other" */								
+	ERespSeeOther			= 0x33,
+
+/** Response is "Not Modified" */									
+	ERespNotModified		= 0x34,
+
+/** Response is "Use Proxy" */									
+	ERespUseProxy			= 0x35,
+
+/** Response is "Bad Request" */									
+	ERespBadRequest			= 0x40,
+
+/** Response is "Unauthorized" */									
+	ERespUnauthorized		= 0x41,
+
+/** Response is "Payment Required" */									
+	ERespPaymentRequired	= 0x42,
+
+/** Response is "Forbidden" */									
+	ERespForbidden			= 0x43,
+
+/** Response is "Not Found" */										
+	ERespNotFound			= 0x44,
+
+/** Response is "Method Not Allowed" */										
+	ERespMethodNotAllowed	= 0x45,
+
+/** Response is "Not Acceptable" */									
+	ERespNotAcceptable		= 0x46,
+
+/** Response is "Proxy Authentication is Required" */										
+	ERespProxyAuthenReqd	= 0x47,
+
+/** Response is "Timed Out" */										
+	ERespTimedOut			= 0x48,
+
+/** Response is "Conflict" */										
+	ERespConflict			= 0x49,
+
+/** Response is "Gone" */										
+	ERespGone				= 0x4A,
+
+/** Response is "Length Required" */										
+	ERespLengthReqd			= 0x4B,
+
+/** Response is "Precondition Failed" */											
+	ERespPreCondFailed		= 0x4C,
+
+/** Response is "Required Entity is Too Large" */											
+	ERespReqEntityTooLarge	= 0x4D,
+
+/** Response is "Required URL is Too Large" */											
+	ERespReqURLTooLarge		= 0x4E,
+
+/** Response is "Unsupported Media Type" */											
+	ERespUnsupMediaType		= 0x4F,
+
+/** Response is "Internal Error" */											
+	ERespInternalError		= 0x50,
+
+/** Response is "Not Implemented" */											
+	ERespNotImplemented		= 0x51,
+
+/** Response is "Bad Gateway" */											
+	ERespBadGateway			= 0x52,
+
+/** Response is "Service Unavailable" */											
+	ERespServiceUnavail		= 0x53,
+
+/** Response is "Gateway Timeout" */											
+	ERespGatewayTimeout		= 0x54,
+
+/** Response is "HTTP Version is Not Supported" */											
+	ERespHTTPVerNotSupp		= 0x55,
+
+/** Response is "Database is Full" */											
+	ERespDatabaseFull		= 0x60,
+
+/** Response is "Database is Locked" */											
+	ERespDatabaseLocked		= 0x61,
+
+/** Response is "Service is Unavailable" */											
+	ERespServiceUnavailable = 0xD3,
+	};
+
+
+//some error codes to be used specifically by the client
+//these shall, be mapped directly to OBEX defined error codes.
+const TInt KErrIrObexRespSuccess		= KErrIrObexRespBase - ERespSuccess;			//-5532 returns 0x20 (0xA0)
+const TInt KErrIrObexRespCreated		= KErrIrObexRespBase - ERespCreated;			//-5533 returns 0x21 (0xA1)
+const TInt KErrIrObexRespAccepted		= KErrIrObexRespBase - ERespAccepted;			//-5534 returns 0x22 (0xA2)
+const TInt KErrIrObexRespNonAuthInfo	= KErrIrObexRespBase - ERespNonAuthInfo;		//-5535 returns 0x23 (0xA3)
+const TInt KErrIrObexRespNoContent		= KErrIrObexRespBase - ERespNoContent;			//-5536 returns 0x24 (0xA4)
+const TInt KErrIrObexRespResetContent	= KErrIrObexRespBase - ERespResetContent;		//-5537 returns 0x25 (0xA5)
+const TInt KErrIrObexRespPartialContent = KErrIrObexRespBase - ERespPartialContent;		//-5538 returns 0x26 (0xA6)
+const TInt KErrIrObexRespMultipleChoices = KErrIrObexRespBase - ERespMultipleChoices;	//-5548 returns 0x30 (0xB0)
+const TInt KErrIrObexRespMovedPerm		= KErrIrObexRespBase - ERespMovedPerm;			//-5549 returns 0x31 (0xB1)
+const TInt KErrIrObexRespMovedTemp		= KErrIrObexRespBase - ERespMovedTemp;			//-5550 returns 0x32 (0xB2)
+const TInt KErrIrObexRespSeeOther		= KErrIrObexRespBase - ERespSeeOther;			//-5551 returns 0x33 (0xB3)
+const TInt KErrIrObexRespNotModified	= KErrIrObexRespBase - ERespNotModified;		//-5552 returns 0x34 (0xB4)
+const TInt KErrIrObexRespUseProxy		= KErrIrObexRespBase - ERespUseProxy;			//-5553 returns 0x35 (0xB5)
+const TInt KErrIrObexRespBadRequest		= KErrIrObexRespBase - ERespBadRequest;			//-5564 returns 0x40 (0xC0)
+const TInt KErrIrObexRespUnauthorized	= KErrIrObexRespBase - ERespUnauthorized;		//-5565 returns 0x41 (0xC1)
+const TInt KErrIrObexRespPaymentRequired = KErrIrObexRespBase - ERespPaymentRequired;	//-5566 returns 0x42 (0xC2)
+const TInt KErrIrObexRespForbidden		= KErrIrObexRespBase - ERespForbidden;			//-5567 returns 0x43 (0xC3)
+const TInt KErrIrObexRespNotFound		= KErrIrObexRespBase - ERespNotFound;			//-5568 returns 0x44 (0xC4)
+const TInt KErrIrObexRespMethodNotAllowed = KErrIrObexRespBase - ERespMethodNotAllowed;	//-5569 returns 0x45 (0xC5)
+const TInt KErrIrObexRespNotAcceptable	= KErrIrObexRespBase - ERespNotAcceptable;		//-5570 returns 0x46 (0xC6)
+const TInt KErrIrObexRespProxyAuthenReqd = KErrIrObexRespBase - ERespProxyAuthenReqd;	//-5571 returns 0x47 (0xC7)
+const TInt KErrIrObexRespTimedOut		= KErrIrObexRespBase - ERespTimedOut;			//-5572 returns 0x48 (0xC8)
+const TInt KErrIrObexRespConflict		= KErrIrObexRespBase - ERespConflict;			//-5573 returns 0x49 (0xC9)
+const TInt KErrIrObexRespGone			= KErrIrObexRespBase - ERespGone;				//-5574 returns 0x4A (0xCA)
+const TInt KErrIrObexRespLengthReqd		= KErrIrObexRespBase - ERespLengthReqd;			//-5575 returns 0x4B (0xCB)
+const TInt KErrIrObexRespPreCondFailed	= KErrIrObexRespBase - ERespPreCondFailed;		//-5576 returns 0x4C (0xCC)
+const TInt KErrIrObexRespReqEntityTooLarge = KErrIrObexRespBase - ERespReqEntityTooLarge;//-5577 returns 0x4D (0xCD)
+const TInt KErrIrObexRespReqURLTooLarge	= KErrIrObexRespBase - ERespReqURLTooLarge;		//-5578 returns 0x4E (0xCE)
+const TInt KErrIrObexRespUnsupMediaType = KErrIrObexRespBase - ERespUnsupMediaType;		//-5579 returns 0x4F (0xCF)
+const TInt KErrIrObexRespInternalError	= KErrIrObexRespBase - ERespInternalError;		//-5580 returns 0x50 (0xD0)
+const TInt KErrIrObexRespNotImplemented = KErrIrObexRespBase - ERespNotImplemented;		//-5581 returns 0x51 (0xD1)
+const TInt KErrIrObexRespBadGateway		= KErrIrObexRespBase - ERespBadGateway;			//-5582 returns 0x52 (0xD2)
+const TInt KErrIrObexRespServiceUnavail = KErrIrObexRespBase - ERespServiceUnavail;		//-5583 returns 0x53 (0xD3)
+const TInt KErrIrObexRespGatewayTimeout = KErrIrObexRespBase - ERespGatewayTimeout;		//-5584 returns 0x54 (0xD4)
+const TInt KErrIrObexRespHTTPVerNotSupp = KErrIrObexRespBase - ERespHTTPVerNotSupp;		//-5585 returns 0x55 (0xD5)
+const TInt KErrIrObexRespDatabaseFull	= KErrIrObexRespBase - ERespDatabaseFull;		//-5596 returns 0x60 (0xE0)
+const TInt KErrIrObexRespDatabaseLocked = KErrIrObexRespBase - ERespDatabaseLocked;		//-5597 returns 0x61 (0xE1)
+
+#endif // __OBEXCONSTANTS_H