1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
24 #ifndef __OBEXCONSTANTS_H
25 #define __OBEXCONSTANTS_H
31 #include <obexpanics.h>
33 //common to request & resp digests
35 /** @internalComponent */
36 const TInt KChallResponseSize = 58;
37 /** @internalComponent */
38 const TInt KMinChallResponseSize = 18; //Nonce(16) + tag(1) + size(1)
39 /** @internalComponent */
40 const TInt KObexNonceSize = 16;
41 /** @internalComponent */
42 const TUint8 KObexRequireUID = 0x01;
45 /** @internalComponent */
46 const TUint KObexChallNonceTag = 0;
47 /** @internalComponent */
48 const TUint8 KObexChallOptionsTag = 0x01;
49 /** @internalComponent */
50 const TUint8 KObexChallRealmTag = 0x02;
51 /** @internalComponent */
52 const TInt KObexChallOptionSize = 1; //this can't be changed from one without making
53 /** @internalComponent */
54 const TUint KObexChallHeaderSize = 23; //assuming no Realm data
57 /** @internalComponent */
58 const TUint KObexRespTag = 0;
59 /** @internalComponent */
60 const TInt KObexRespSize = 16;
61 /** @internalComponent */
62 const TUint8 KObexRespUserIDTag = 0x01;
63 /** @internalComponent */
64 const TUint8 KObexRespNonceTag = 0x02;
66 /** @internalComponent */
67 const TUint8 KObexHeaderTypeMask = 0xc0;
68 /** @internalComponent */
69 const TUint8 KObexHeaderTypeOffset = 6;
72 /** @internalComponent */
73 const TInt KUidOBEXTransportModule = 0x10003d56;
75 /** @internalComponent */
76 const TInt KUidOBEXTransportModule = 0x1000169c;
79 /** @internalComponent */
80 const TInt KUsbIntStringDescLength = 30;
82 /** @internalComponent */
83 const TUint8 KFourByteTimeHeaderAddress = 0xc4;
85 // Header mask definitions.
86 // Old style accessor for which headers are present or
87 // should be sent by an object. Now deprecated, use the
88 // header iterator instead.
89 /** @internalComponent */
90 const TUint16 KObexHdrName = 0x0001;
91 /** @internalComponent */
92 const TUint16 KObexHdrType = 0x0002;
93 /** @internalComponent */
94 const TUint16 KObexHdrLength = 0x0004;
95 /** @internalComponent */
96 const TUint16 KObexHdrTime = 0x0008;
97 /** @internalComponent */
98 const TUint16 KObexHdrDescription = 0x0010;
99 /** @internalComponent */
100 const TUint16 KObexHdrTarget = 0x0020;
101 /** @internalComponent */
102 const TUint16 KObexHdrConnectionID = 0x0040;
103 /** @internalComponent */
104 const TUint16 KObexHdrBody = 0x0080;
105 /** @internalComponent */
106 const TUint16 KObexHdrEndOfBody = 0x0100;
107 /** @internalComponent */
108 const TUint16 KObexHdrHttp = 0x0200;
109 /** @internalComponent */
110 const TUint16 KObexHdrAppParam = 0x0400;
111 /** @internalComponent */
112 const TUint16 KObexHdrUserDefined = 0x0800;
113 /** @internalComponent */
114 const TUint16 KObexHdrCount = 0x1000;
115 /** @internalComponent */
116 const TUint16 KObexHdrCreatorID = 0x2000;
117 /** @internalComponent */
118 const TUint16 KObexHdrWanUUID = 0x4000;
119 /** @internalComponent */
120 const TUint16 KObexHdrObjectClass = 0x8000;
122 /** @internalComponent */
123 const TUint8 KObexUserDefinedHdrAddrMin = 0x30; //start of user defined header address range
124 /** @internalComponent */
125 const TUint8 KObexUserDefinedHdrAddrMax = 0x3F; //end of user defined header address range
127 /** @internalComponent */
128 const TUint8 KObexVersion = 0x10; ///< Version 1.0 (still correct for Obex spec v 1.2)
130 /** @internalComponent */
131 const TUint8 KObexObjectFieldSize = 127;
132 /** @internalComponent */
133 const TUint8 KObexObjectDescriptionSize = 255;
135 // Extended errors for IrObex
137 /** Must not use as not in the allocated range */
138 const TInt KErrIrObexRespBase = - 5500;
140 /** Extended error for IrObex - No other infrared device found */
141 const TInt KErrIrObexClientNoDevicesFound = -5501;
143 /** Extended error for IrObex - Other IR device cannot handle IrObex */
144 const TInt KErrIrObexClientPeerDoesNotHaveObex = -5502;
146 /** Extended error for IrObex - Other IR device aborted the transfer */
147 const TInt KErrIrObexClientPutPeerAborted = -5503;
149 /** Extended error for IrObex - Peer device aborted data transmission/obex sending */
150 const TInt KErrIrObexServerPutPeerAborted = -5507;
152 /** Extended error for IrObex - Cannot authorise the challenge so link dropped */
153 const TInt KErrIrObexConnectChallRejected = -5512;
155 // Other Obex errors defined in the system but no longer used
156 // Do not reuse the number!
157 // KErrIrObexClientPutPeerCannotHandleObject -5504
158 // KErrIrObexServerPutFileWriteError -5509
159 // KErrIrObexClientFirstPutFailed -5510
160 // KErrIrObexClientSubsequentPutFailed -5511
162 /** Unexpected event for the given state */
163 const TInt KErrIrObexBadEvent = -5513;
165 /** Event occurred while Server is stopped */
166 const TInt KErrIrObexServerStopped = -5514;
168 /** Packet received while state machine is in a wait state */
169 const TInt KErrIrObexPacketDuringWait = -5515;
171 // There are other error codes defined at the end of this file,
172 // which are a direct mapping of specific Obex error codes and
173 // are returned by the client.
176 // Flags used by Connect
177 // ...None in OBEX 1.0
179 // Flags used by SetPath
180 /** @internalComponent */
181 const TUint8 KObexSetPathParent = 0x01;
184 Version number for TObexTransportInfo and derived classes.
185 When iVersion is set to this value the following fields of TObexTransportInfo
190 The iVersion member variable must be set to this value. If in future any of the
191 iFuture variables are used a new version constant will be created.
193 @see TObexTransportInfo
197 const TInt KObexTransportInfoVersion0 = 0;
200 Default for the receive and transmit MTU sizes
201 Use this default value for setting the iReceiveMtu or iTransmitMtu in TObexTransportInfo
202 objects or derived classes.
204 @see TObexTransportInfo
208 const TInt KObexDefaultMtuSize = 4000;
211 Default value for the number of discovery slots to use. Use this value as a default
212 for iDiscoverySlots in TObexIrdaV2TransportInfo.
214 @see TObexIrdaV2TransportInfo
218 const TUint KObexIrdaDefaultDiscoverySlotsToUse = 1;
221 Default value for the number of discovery attempts made. Use this value as a default for iDiscoveryAttempts
222 in TObexIrdaV2TransportInfo.
223 @see TObexIrdaV2TransportInfo
227 const TUint KObexIrdaDefaultDiscoveryAttempts = 4;
229 // Constants used to define which transport Obex will run over.
230 // Used in TObexTransportInfo and TObexProtocolInfo's iTransport member.
233 Protocol string when running over IrDA
234 @see TObexIrProtocolInfo
235 @see TObexTransportInfo
239 _LIT(KObexIrTTPProtocol, "IrTinyTP");
242 Protocol string when running over IrDA
243 Using this version indicates that the configuration object contains discovery parameters.
244 @see TObexIrProtocolInfo
248 _LIT(KObexIrTTPProtocolV2, "IrTinyTP-V2");
251 Protocol string when running over IrDA
252 Using this version indicates that the configuration object contains the device nickname.
253 @see TObexIrProtocolInfo
256 @capability WriteDeviceData If the TObexIrV3TransportInfo is passed as the argument
257 to CObexServer::NewL or CObexClient::NewL and the associated
261 _LIT(KObexIrTTPProtocolV3, "IrTinyTP-V3");
264 Protocol string when running over Bluetooth
265 @see TObexBluetoothProtocolInfo
266 @see TObexTransportInfo
270 _LIT(KObexRfcommProtocol, "RFCOMM");
273 Protocol string when running over USB
274 @see TObexUsbProtocolInfo
275 @see TObexTransportInfo
279 _LIT(KObexUsbProtocol, "USB");
283 protocol string that should be used
284 if a Win32 emulator USB transport were
285 to be created for testing.
286 @see TObexUsbProtocolInfo
287 @see TObexTransportInfo
291 _LIT(KObexWin32UsbProtocol, "Win32Usb");
294 Protocol string when running over USB using client driver extensions
295 @see TObexUsbProtocolInfoV2
296 @see TObexTransportInfo
300 _LIT(KObexUsbProtocolV2, "USB-V2");
303 This class is derived for each underlying transport protocol OBEX
306 The iTransport member holds the unique name for the transport. For example for
307 infra-red (TinyTP) this is "IrTinyTP" or KObexIrTTPProtocol.
309 @see TObexIrProtocolInfo for running over TinyTP
310 @see TObexBluetoothProtocolInfo for running over Rfcomm
311 @see TObexUsbProtocolInfo for running over USB
312 @see TObexUsbProtocolInfoV2 for running over USB using client driver extensions
314 @see KObexIrTTPProtocol
315 @see KObexIrTTPProtocolV2
316 @see KObexRfcommProtocol
317 @see KObexUsbProtocol
318 @see KObexUsbProtocolV2
323 NONSHARABLE_CLASS(TObexProtocolInfo)
326 /** Holds the unique name for the transport. */
329 // This data padding has been added to help prevent future binary compatibility breaks
330 // Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
336 Used to describe IrDA specific protocol information
338 To access the default OBEX server, the IAS class value should be "OBEX"
339 and the IAS attribute name "IrDA:TinyTP:LsapSel".
344 NONSHARABLE_CLASS(TObexIrProtocolInfo) : public TObexProtocolInfo
347 /** IrDA address information for this connection, as used in the IrDA sockets interface.
348 Refer to the SDK for more information about this.
349 Its main use is for setting the port that the local machine will listen on. */
351 /** The IAS class value that the OBEX session will register its listener port,
352 or request remote port with. */
353 TBuf8<KIASClassNameMax> iClassName;
354 /** The IAS attribute value that the OBEX session will register its listener port,
355 or request remote port with. */
356 TBuf8<KIASAttributeNameMax> iAttributeName;
357 /** The number of discovery slots to use. */
358 TUint8 iDiscoverySlots;
359 /** The number of discovery attempts to make. */
360 TUint8 iDiscoveryAttempts;
363 // This data padding has been added to help prevent future binary compatibility breaks
364 // None of these padding variables have been zero'd because they are currently not used
372 Used to describe Bluetooth specific protocol information
377 NONSHARABLE_CLASS(TObexBluetoothProtocolInfo) : public TObexProtocolInfo
382 This defines the server channel on which the OBEX server listens
383 for connections. The server channel is set using SetPort on the
386 1) Unless the channel is defined as KRfcommPassiveAutoBind
387 it may be in use when the obex server attempts to 'bind' to it
388 2) If the channel is defined as KRfcommPassiveAutoBind
389 then when the server is FIRST started it will attempt
390 to find a free RFComm channel. If this is successful
391 that free channel will be used as the server channel
392 for the life time of the obex server including
393 when it is 'stopped' and re-'started'.
394 3) When the obex server is stopped, and very
395 briefly when a bluetooth connection comes down, the
396 obex server releases its server channel. It is possible
397 therefore that during this time another application might bind
398 to it. This will cause an error when the obex server tries
401 Also note that a Bluetooth OBEX server will itself set the Object Transfer
402 bit in the Service Class as required by the Generic Object Exchange
403 Profile so the user need not do this.
407 This defines the server channel and the
408 device address to connect to. The server channel
409 and device address are set respectively using SetPort
410 and SetBTAddr on the TRfcommSockAddr.
412 TRfcommSockAddr iAddr;
415 // This data padding has been added to help prevent future binary compatibility breaks
416 // Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
422 Used to describe USB specific protocol information
427 NONSHARABLE_CLASS(TObexUsbProtocolInfo) : public TObexProtocolInfo
430 /** Provides a string to be attached to the Obex function's Communication Class interface,
431 which may be used to identify the Obex service. */
432 TBuf16<KUsbIntStringDescLength> iInterfaceStringDescriptor;
436 Used to set options used by the extended USB client driver for improved performance
438 @see TObexUsbProtocolInfo
443 NONSHARABLE_CLASS(TObexUsbProtocolInfoV2) : public TObexUsbProtocolInfo
446 /** Bitmap containing the bandwidth priorities to use on IN and OUT endpoints
447 @see TUsbcBandwidthPriority
449 TInt iBandwidthPriority;
450 /** Specifies whether to use DMA on the bulk OUT endpoint */
451 TBool iDmaOnOutEndpoint;
452 /** Specifies whether to use DMA on the bulk IN endpoint */
453 TBool iDmaOnInEndpoint;
456 // This data padding has been added to help prevent future binary compatibility breaks
457 // None of these padding variables have been zero'd because they are currently not used
465 Contains information about OBEX packet sizing policy, defining the
466 maximum buffer size for receive and transmit packets
468 NONSHARABLE_CLASS(TObexProtocolPolicy)
471 IMPORT_C TObexProtocolPolicy (); // Sets version and default values
473 IMPORT_C TInt SetReceiveMtu ( TUint16 aReceiveMtu );
474 IMPORT_C TInt SetTransmitMtu ( TUint16 aTransmitMtu );
475 IMPORT_C TUint16 Version () const;
476 IMPORT_C TUint16 ReceiveMtu () const;
477 IMPORT_C TUint16 TransmitMtu () const;
482 TUint16 iTransmitMtu;
484 // This data padding has been added to help prevent future binary compatibility breaks
485 // None of these padding variables have been zero'd because they are currently not used
492 struct TObexConnectionInfo;
496 This structure contains information used during OBEX connection. iVersion
497 holds the encoded OBEX version of the machine, use @c VersionMajor() and
498 @c VersionMinor() to extract the parts of the version number (each having a
499 value from 0 to 15). @c iFlags holds OBEX connection flags. @c iWho holds
500 the Who attribute from the connect packet, if any was specified, or
501 otherwise has a length of 0.
502 It is recommended that this class is only ever allocated on the heap as it is quite big.
504 NONSHARABLE_CLASS(TObexConnectInfo)
507 IMPORT_C TObexConnectInfo();
508 IMPORT_C TUint8 VersionMajor() const;
509 IMPORT_C TUint8 VersionMinor() const;
511 TUint8 iVersion; /** Encoded OBEX version of the machine*/
512 TUint8 iFlags; /** iFlags holds OBEX connection flags*/
513 TBuf8<KObexObjectDescriptionSize> iWho; /** the Who attribute from the connect packet, if any was specified */
514 TBuf8<KObexObjectDescriptionSize> iTargetHeader; /** the Target header from the connect packet, if any was specified */
517 // This data padding has been added to help prevent future binary compatibility breaks
518 // Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
525 //if these codes are extended due to a IRObex spec update ensure
526 //that the TInt immediately below are updated
527 //and the default in the method IrOBEXUtil::ObexResponse is also updated
530 /** Response is "Continue" */
531 ERespContinue = 0x10,
533 /** Response is "Success" */
536 /** Response is "Created" */
539 /** Response is "Accepted" */
540 ERespAccepted = 0x22,
542 /** Response is "Non-Authenticated Information" */
543 ERespNonAuthInfo = 0x23,
545 /** Response is "No Content" */
546 ERespNoContent = 0x24,
548 /** Response is "Reset Content" */
549 ERespResetContent = 0x25,
551 /** Response is "Partial Content" */
552 ERespPartialContent = 0x26,
554 /** Response is "Multiple Choices" */
555 ERespMultipleChoices = 0x30,
557 /** Response is "Moved Permanently" */
558 ERespMovedPerm = 0x31,
560 /** Response is "Moved Temporarily" */
561 ERespMovedTemp = 0x32,
563 /** Response is "See Other" */
564 ERespSeeOther = 0x33,
566 /** Response is "Not Modified" */
567 ERespNotModified = 0x34,
569 /** Response is "Use Proxy" */
570 ERespUseProxy = 0x35,
572 /** Response is "Bad Request" */
573 ERespBadRequest = 0x40,
575 /** Response is "Unauthorized" */
576 ERespUnauthorized = 0x41,
578 /** Response is "Payment Required" */
579 ERespPaymentRequired = 0x42,
581 /** Response is "Forbidden" */
582 ERespForbidden = 0x43,
584 /** Response is "Not Found" */
585 ERespNotFound = 0x44,
587 /** Response is "Method Not Allowed" */
588 ERespMethodNotAllowed = 0x45,
590 /** Response is "Not Acceptable" */
591 ERespNotAcceptable = 0x46,
593 /** Response is "Proxy Authentication is Required" */
594 ERespProxyAuthenReqd = 0x47,
596 /** Response is "Timed Out" */
597 ERespTimedOut = 0x48,
599 /** Response is "Conflict" */
600 ERespConflict = 0x49,
602 /** Response is "Gone" */
605 /** Response is "Length Required" */
606 ERespLengthReqd = 0x4B,
608 /** Response is "Precondition Failed" */
609 ERespPreCondFailed = 0x4C,
611 /** Response is "Required Entity is Too Large" */
612 ERespReqEntityTooLarge = 0x4D,
614 /** Response is "Required URL is Too Large" */
615 ERespReqURLTooLarge = 0x4E,
617 /** Response is "Unsupported Media Type" */
618 ERespUnsupMediaType = 0x4F,
620 /** Response is "Internal Error" */
621 ERespInternalError = 0x50,
623 /** Response is "Not Implemented" */
624 ERespNotImplemented = 0x51,
626 /** Response is "Bad Gateway" */
627 ERespBadGateway = 0x52,
629 /** Response is "Service Unavailable" */
630 ERespServiceUnavail = 0x53,
632 /** Response is "Gateway Timeout" */
633 ERespGatewayTimeout = 0x54,
635 /** Response is "HTTP Version is Not Supported" */
636 ERespHTTPVerNotSupp = 0x55,
638 /** Response is "Database is Full" */
639 ERespDatabaseFull = 0x60,
641 /** Response is "Database is Locked" */
642 ERespDatabaseLocked = 0x61,
644 /** Response is "Service is Unavailable" */
645 ERespServiceUnavailable = 0xD3,
649 //some error codes to be used specifically by the client
650 //these shall, be mapped directly to OBEX defined error codes.
651 const TInt KErrIrObexRespSuccess = KErrIrObexRespBase - ERespSuccess; //-5532 returns 0x20 (0xA0)
652 const TInt KErrIrObexRespCreated = KErrIrObexRespBase - ERespCreated; //-5533 returns 0x21 (0xA1)
653 const TInt KErrIrObexRespAccepted = KErrIrObexRespBase - ERespAccepted; //-5534 returns 0x22 (0xA2)
654 const TInt KErrIrObexRespNonAuthInfo = KErrIrObexRespBase - ERespNonAuthInfo; //-5535 returns 0x23 (0xA3)
655 const TInt KErrIrObexRespNoContent = KErrIrObexRespBase - ERespNoContent; //-5536 returns 0x24 (0xA4)
656 const TInt KErrIrObexRespResetContent = KErrIrObexRespBase - ERespResetContent; //-5537 returns 0x25 (0xA5)
657 const TInt KErrIrObexRespPartialContent = KErrIrObexRespBase - ERespPartialContent; //-5538 returns 0x26 (0xA6)
658 const TInt KErrIrObexRespMultipleChoices = KErrIrObexRespBase - ERespMultipleChoices; //-5548 returns 0x30 (0xB0)
659 const TInt KErrIrObexRespMovedPerm = KErrIrObexRespBase - ERespMovedPerm; //-5549 returns 0x31 (0xB1)
660 const TInt KErrIrObexRespMovedTemp = KErrIrObexRespBase - ERespMovedTemp; //-5550 returns 0x32 (0xB2)
661 const TInt KErrIrObexRespSeeOther = KErrIrObexRespBase - ERespSeeOther; //-5551 returns 0x33 (0xB3)
662 const TInt KErrIrObexRespNotModified = KErrIrObexRespBase - ERespNotModified; //-5552 returns 0x34 (0xB4)
663 const TInt KErrIrObexRespUseProxy = KErrIrObexRespBase - ERespUseProxy; //-5553 returns 0x35 (0xB5)
664 const TInt KErrIrObexRespBadRequest = KErrIrObexRespBase - ERespBadRequest; //-5564 returns 0x40 (0xC0)
665 const TInt KErrIrObexRespUnauthorized = KErrIrObexRespBase - ERespUnauthorized; //-5565 returns 0x41 (0xC1)
666 const TInt KErrIrObexRespPaymentRequired = KErrIrObexRespBase - ERespPaymentRequired; //-5566 returns 0x42 (0xC2)
667 const TInt KErrIrObexRespForbidden = KErrIrObexRespBase - ERespForbidden; //-5567 returns 0x43 (0xC3)
668 const TInt KErrIrObexRespNotFound = KErrIrObexRespBase - ERespNotFound; //-5568 returns 0x44 (0xC4)
669 const TInt KErrIrObexRespMethodNotAllowed = KErrIrObexRespBase - ERespMethodNotAllowed; //-5569 returns 0x45 (0xC5)
670 const TInt KErrIrObexRespNotAcceptable = KErrIrObexRespBase - ERespNotAcceptable; //-5570 returns 0x46 (0xC6)
671 const TInt KErrIrObexRespProxyAuthenReqd = KErrIrObexRespBase - ERespProxyAuthenReqd; //-5571 returns 0x47 (0xC7)
672 const TInt KErrIrObexRespTimedOut = KErrIrObexRespBase - ERespTimedOut; //-5572 returns 0x48 (0xC8)
673 const TInt KErrIrObexRespConflict = KErrIrObexRespBase - ERespConflict; //-5573 returns 0x49 (0xC9)
674 const TInt KErrIrObexRespGone = KErrIrObexRespBase - ERespGone; //-5574 returns 0x4A (0xCA)
675 const TInt KErrIrObexRespLengthReqd = KErrIrObexRespBase - ERespLengthReqd; //-5575 returns 0x4B (0xCB)
676 const TInt KErrIrObexRespPreCondFailed = KErrIrObexRespBase - ERespPreCondFailed; //-5576 returns 0x4C (0xCC)
677 const TInt KErrIrObexRespReqEntityTooLarge = KErrIrObexRespBase - ERespReqEntityTooLarge;//-5577 returns 0x4D (0xCD)
678 const TInt KErrIrObexRespReqURLTooLarge = KErrIrObexRespBase - ERespReqURLTooLarge; //-5578 returns 0x4E (0xCE)
679 const TInt KErrIrObexRespUnsupMediaType = KErrIrObexRespBase - ERespUnsupMediaType; //-5579 returns 0x4F (0xCF)
680 const TInt KErrIrObexRespInternalError = KErrIrObexRespBase - ERespInternalError; //-5580 returns 0x50 (0xD0)
681 const TInt KErrIrObexRespNotImplemented = KErrIrObexRespBase - ERespNotImplemented; //-5581 returns 0x51 (0xD1)
682 const TInt KErrIrObexRespBadGateway = KErrIrObexRespBase - ERespBadGateway; //-5582 returns 0x52 (0xD2)
683 const TInt KErrIrObexRespServiceUnavail = KErrIrObexRespBase - ERespServiceUnavail; //-5583 returns 0x53 (0xD3)
684 const TInt KErrIrObexRespGatewayTimeout = KErrIrObexRespBase - ERespGatewayTimeout; //-5584 returns 0x54 (0xD4)
685 const TInt KErrIrObexRespHTTPVerNotSupp = KErrIrObexRespBase - ERespHTTPVerNotSupp; //-5585 returns 0x55 (0xD5)
686 const TInt KErrIrObexRespDatabaseFull = KErrIrObexRespBase - ERespDatabaseFull; //-5596 returns 0x60 (0xE0)
687 const TInt KErrIrObexRespDatabaseLocked = KErrIrObexRespBase - ERespDatabaseLocked; //-5597 returns 0x61 (0xE1)
689 #endif // __OBEXCONSTANTS_H