--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/wappushfw/tpush/DummyStack/DummyWapClient.h Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,563 @@
+// Copyright (c) 2000-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:
+//
+
+
+#ifndef __DUMMYWAPCLIENT_H__
+#define __DUMMYWAPCLIENT_H__
+
+#include <e32base.h>
+#include <in_sock.h>
+
+enum {KDefaultMessageSlots = 10};
+/**
+ * forward declaration
+ */
+class CDummyWapSession;
+class CDummyWSPCLConn;
+class CDummyWSPCOConn;
+class CDummyWSPConn;
+class CDummyWSPCOTrans;
+class CDummyWTLS;
+
+namespace Wap
+ {
+ // Bearer type definition
+ typedef enum
+ {
+ EAll,
+ EIP,
+ ESMS7,
+ ESMS,
+ EWAPSMS7,
+ EWAPSMS
+ } TBearer;
+
+ // Port number definition
+ typedef TUint16 TPort;
+
+ class TAddressInfo
+ {
+ public:
+ TName iName; // Interface name
+ TInetAddr iAddress; // Interface IP Address (*)
+ };
+ }
+
+
+
+/** Bound Connectionless Push
+*/
+class CWapBoundCLPushService : public CBase
+{
+
+public: // creation/deletion
+ IMPORT_C static CWapBoundCLPushService* NewL();
+ IMPORT_C virtual ~CWapBoundCLPushService();
+
+public: // API methods
+
+ virtual TInt Connect(Wap::TBearer , Wap::TPort , TBool , TInetAddr ){return 0;}
+ virtual TInt Connect(Wap::TBearer aBearer, Wap::TPort aPort, TBool aSecure);
+ virtual TInt AwaitPush(TDes8& aPushHeaders, TDes8& aPushBody, TPckgBuf<TUint8>& aPushId, TRequestStatus& aReqStatus);
+ virtual void CancelAwaitPush();
+ virtual TInt GetLocalPort(Wap::TPort& /*aPort*/) { return KErrNotSupported;}
+ virtual TInt GetLocalAddress(HBufC8*& /*aLocalHost*/) { return KErrNotSupported;}
+ virtual TInt GetBearer(Wap::TBearer& /*aBearer*/) { return KErrNotSupported;}
+ virtual TInt GetServerAddressL(HBufC8*& aRemoteHost);
+
+protected: // methods
+ IMPORT_C CWapBoundCLPushService();
+
+ CDummyWapSession* DummyWapSession();
+private:
+ CDummyWapSession* iSessHandle;
+ CDummyWSPCLConn* iClConnHandle;
+};
+
+/**
+ * This represents a client session with the server
+ */
+class RWAPServ
+ {
+public:
+ IMPORT_C RWAPServ();
+ IMPORT_C TInt Connect(TInt aDefaultMessageSlots = KDefaultMessageSlots);
+ IMPORT_C void Close();
+ CDummyWapSession* DummyWapSession();
+private:
+ CDummyWapSession* iSessHandle;
+ CDummyWSPCLConn* iClConnHandle;
+ };
+
+
+
+
+/**
+ * Base class used by all type of connections
+ */
+class RWAPConn
+ {
+public:
+ typedef TUint16 TPort;
+ IMPORT_C virtual TInt Close();
+ IMPORT_C class RWTLS Wtls();
+
+ enum
+ {
+ ERetCodeBase = -5500,
+ EWSPCORetCodeBase = ERetCodeBase + 25,
+ EWSPCLRetCodeBase = ERetCodeBase + 50,
+ EWTPRetCodeBase = ERetCodeBase + 75,
+ EWDPRetCodeBase = ERetCodeBase + 100,
+ EWTLSRetCodeBase = ERetCodeBase + 125,
+ ERetCodeTop = ERetCodeBase + 200
+ };
+ enum TReturnCodes
+ {
+ EMoreData = ERetCodeBase + 0,
+ EBearerError = ERetCodeBase + 1,
+ EPortAlreadyBound = ERetCodeBase + 2,
+ ECannotOpenPort = ERetCodeBase + 3,
+ ETooManyConnections = ERetCodeBase + 4,
+ EBadConnection = ERetCodeBase + 5,
+ EBufferTooSmall = ERetCodeBase + 6
+ };
+ enum TMethod
+ {
+ EGet = 0x40,
+ EOptions = 0x41,
+ EHead = 0x42,
+ EDelete = 0x43,
+ ETrace = 0x44,
+ EPost = 0x60,
+ EPut = 0x61
+ };
+protected:
+ CDummyWSPConn* iDummyConn;
+ };
+
+
+
+class RWTLS
+ {
+public:
+ enum TReturnCodes
+ {
+ EOutOfMemory = RWAPConn::EWTLSRetCodeBase + 0,
+ ESocketError = RWAPConn::EWTLSRetCodeBase + 1,
+ EBadParameters = RWAPConn::EWTLSRetCodeBase + 2,
+ ESocketError2 = RWAPConn::EWTLSRetCodeBase + 3,
+ EResumeIDNotFound = RWAPConn::EWTLSRetCodeBase + 4,
+ EResumeError = RWAPConn::EWTLSRetCodeBase + 5,
+ ERenegotiationRequest = RWAPConn::EWTLSRetCodeBase + 6,
+ EIllegalCall = RWAPConn::EWTLSRetCodeBase + 7,
+ EConnectionCloseNotify = RWAPConn::EWTLSRetCodeBase + 8,
+ ESessionCloseNotify = RWAPConn::EWTLSRetCodeBase + 9,
+ ENoConnection = RWAPConn::EWTLSRetCodeBase + 10,
+ EUnexpectedMessage = RWAPConn::EWTLSRetCodeBase + 11,
+ EBadRecordMac = RWAPConn::EWTLSRetCodeBase + 12,
+ EDecryptionFailed = RWAPConn::EWTLSRetCodeBase + 13,
+ ERecordOverflow = RWAPConn::EWTLSRetCodeBase + 14,
+ EHandshakeFailure = RWAPConn::EWTLSRetCodeBase + 15,
+ EDecompressionFailure = RWAPConn::EWTLSRetCodeBase + 16,
+ EBadCertificate = RWAPConn::EWTLSRetCodeBase + 17,
+ EUnsupportedCertificate = RWAPConn::EWTLSRetCodeBase + 18,
+ ECertificateRevoked = RWAPConn::EWTLSRetCodeBase + 19,
+ ECertificateExpired = RWAPConn::EWTLSRetCodeBase + 20,
+ ECertificateUnknown = RWAPConn::EWTLSRetCodeBase + 21,
+ EIllegalParameter = RWAPConn::EWTLSRetCodeBase + 22,
+ EUnknownCA = RWAPConn::EWTLSRetCodeBase + 23,
+ EAccessDenied = RWAPConn::EWTLSRetCodeBase + 24,
+ EDecodeError = RWAPConn::EWTLSRetCodeBase + 25,
+ EDecryptError = RWAPConn::EWTLSRetCodeBase + 26,
+ EUnknownKeyId = RWAPConn::EWTLSRetCodeBase + 27,
+ EDisableKeyId = RWAPConn::EWTLSRetCodeBase + 28,
+ EKeyExchangeDisabled = RWAPConn::EWTLSRetCodeBase + 29,
+ ESessionNotReady = RWAPConn::EWTLSRetCodeBase + 30,
+ EUnknownParameterIndex = RWAPConn::EWTLSRetCodeBase + 31,
+ EDuplicateFinishedRecv = RWAPConn::EWTLSRetCodeBase + 32,
+ EExportRestriction = RWAPConn::EWTLSRetCodeBase + 33,
+ EProtocolVersion = RWAPConn::EWTLSRetCodeBase + 34,
+ EInsufficientSecurity = RWAPConn::EWTLSRetCodeBase + 35,
+ EInternalError = RWAPConn::EWTLSRetCodeBase + 36,
+ EUserCanceled = RWAPConn::EWTLSRetCodeBase + 37,
+ ENoRenegotiation = RWAPConn::EWTLSRetCodeBase + 38,
+
+ EErrGeneral = RWAPConn::EWTLSRetCodeBase + 39,
+ EErrBulk = RWAPConn::EWTLSRetCodeBase + 40,
+ EErrMac = RWAPConn::EWTLSRetCodeBase + 41,
+ EErrSequenceNumberMode = RWAPConn::EWTLSRetCodeBase + 42,
+ EErrKeyRefreshRate = RWAPConn::EWTLSRetCodeBase + 43,
+ };
+
+ enum TIdType
+ {
+ EIdNull,
+ EText,
+ EBinary,
+ EKeyHashSha = 254,
+ EX509Name = 255
+ };
+
+ enum TKeyExchangeSuite
+ {
+ ESharedSecret = 1,
+ EDHAnon,
+ EDHAnon512,
+ EDHAnon768,
+ ERsaAnon,
+ ERsaAnon512,
+ ERsaAnon768,
+ ERsa,
+ ERsa512,
+ ERsa768,
+ EEcdhAnon,
+ EEcdhAnon113,
+ EEcdhAnon131,
+ EEcdhEcdsa
+ };
+
+ IMPORT_C TInt SetKeyExchangeSuite(TKeyExchangeSuite aSuite,TIdType IdType,
+ const TDesC8& aKeyId);
+
+ enum TBulkEncryptionAlgorithm
+ {
+ EBulkNull = 0x00,
+ ERc5_cbc_40 = 0x01,
+ ERc5_cbc_56 = 0x02,
+ ERc5_cbc = 0x03,
+ EDes_cbc_40 = 0x04,
+ EDes_cbc = 0x05,
+ E3Des_cbc_ede = 0x06,
+ EIdea_cbc_40 = 0x07,
+ EIdea_cbc_56 = 0x08,
+ EIdea_cbc = 0x09
+ };
+
+ enum TMacAlgorithm
+ {
+ ESha_0 = 0x00,
+ ESha_40 = 0x01,
+ ESha_80 = 0x02,
+ ESha = 0x03,
+ ESha_xor_40 = 0x04,
+ EMd5_40 = 0x05,
+ EMd5_80 = 0x06,
+ EMd5 = 0x07
+ };
+
+ struct TCipherSuite
+ {
+ TBulkEncryptionAlgorithm iBulkEncryptionAlgorithm;
+ TMacAlgorithm iMacAlgorithm;
+ };
+
+ typedef CArrayFixFlat<TCipherSuite> CipherSuiteArray;
+
+ IMPORT_C TInt SetCipherSuites(const CipherSuiteArray& aCipherSuites);
+
+ enum TSequenceNumberMode
+ {
+ ENotUsed = 0,
+ EImplicit,
+ EExplicit
+ };
+
+ IMPORT_C TInt SetSequenceNumberMode(TSequenceNumberMode aMode);
+ IMPORT_C TInt SetKeyRefreshRate(TUint8 aRate);
+ IMPORT_C TInt SetSharedSecret(const TDesC8& aSharedSecret);
+ IMPORT_C TInt SetRecordLengthUsage(TBool aUsage);
+
+
+ // This is returned in the TRequestStatus on completion in
+ // Connect and ConnectPhaseTwo.
+ enum HandshakeResult
+ {
+ EServerCertificateValid,
+ EServerCertificateNotValid,
+ ECertificateRequested,
+ EHandshakeOk,
+ EHandshakeError,
+ EHandshakeUserAbort
+ };
+
+ IMPORT_C void Connect(TRequestStatus& aStatus, TBool aTwoPhaseHandshake);
+
+
+ IMPORT_C void CancelConnect();
+
+ IMPORT_C TInt ConnectPhaseTwo(TRequestStatus& aStatus);
+ IMPORT_C void CancelConnectPhaseTwo();
+
+ IMPORT_C TInt GetCipherSuite(TCipherSuite& aCipherSuite) const;
+ IMPORT_C TInt GetSequenceNumberMode(TSequenceNumberMode& aMode) const;
+ IMPORT_C TInt GetKeyRefreshRate(TUint8& aRate) const;
+ IMPORT_C class RCertificate ServerCert();
+private:
+ friend class RWAPConn;
+ CDummyWTLS* iDummyWTLS;
+ };
+
+
+/**
+ * This class represents a server certificate
+ */
+class RCertificate
+ {
+public:
+ typedef TUint16 TCertId;
+ typedef TDesC8 TCertificate; // binary format
+
+ IMPORT_C TInt Load(const TDesC8& aSubject);
+ IMPORT_C TInt LoadById(const TCertId& aId);
+ IMPORT_C TInt Delete(const TDesC8& aSubject);
+ IMPORT_C TInt Save(const TCertificate& aCertificate, TDes8& aSubject);
+ IMPORT_C TInt FindFirst(TDes8& aSubject, TCertId& aId) const;
+ IMPORT_C TInt FindNext(TDes8& aSubject, TCertId& aId) const;
+
+ enum TStatus
+ {
+ EOk,
+ ENotYetValid,
+ EExpired,
+ EUnknownCA,
+ EPermanentStorageReadError
+ };
+
+ struct TInfo
+ {
+ TUint32 iValidNotBefore; // is first valid date of the cert (unix GMT).
+ TUint32 iValidNotAfter; // is last valid date of the cert (unix GMT)
+ TUint16 iSubjectCharacterSet;// is an IANA defined number.
+ TUint16 iIssuerCharacterSet; // is an IANA defined number.
+ TDes8* iSubject;
+ TDes8* iIssuer;
+ TStatus iServerCertificateStatus;
+ TDes8* iFingerPrint;
+ };
+
+ IMPORT_C TInt Info(TInfo& aInfo) const;
+private:
+ friend class RWTLS;
+ RCertificate(){}
+ };
+
+
+
+/**
+ * this class represents a connection of type connectionless Push
+ */
+class RWSPCLConn : public RWAPConn
+ {
+public:
+ IMPORT_C TInt Open(RWAPServ& aServer, TPort aLocalPort);
+ IMPORT_C TInt Open(RWAPServ& aServer,
+ const TDesC8& aRemoteHost,
+ TPort aRemotePort,
+ TPort aLocalPort,
+ Wap::TBearer aBearer,
+ TBool aSecureConn);
+ IMPORT_C TInt AwaitPush(TDes8& aPushHeaders, TDes8& aPushBody, TUint& aPushId, TRequestStatus& aReqStatus);
+ IMPORT_C void UnitWaitPush(TDes8& aBody,TDes8& aHeaders,TPushID& aID,TRequestStatus& aStatus);
+ IMPORT_C void CancelUnitWaitPush();
+ IMPORT_C void CancelAwaitPush();
+ IMPORT_C TInt UnitWaitPush(TDes8& aBody,TDes8& aHeaders,TPushID& aID);
+
+ enum TReturnCodes
+ {
+ EBufferTooSmall = EWSPCLRetCodeBase + 0,
+ EInvalidSession = EWSPCLRetCodeBase + 1,
+ EParameterError = EWSPCLRetCodeBase + 2,
+ ESessionNotConnected = EWSPCLRetCodeBase + 3,
+ ENotSupported = EWSPCLRetCodeBase + 4,
+ EInvalidState = EWSPCLRetCodeBase + 5,
+ ESessionClosed = EWSPCLRetCodeBase + 6,
+ EMRUExceeded = EWSPCLRetCodeBase + 7,
+ EInvalidBufferSize = EWSPCLRetCodeBase + 8,
+ EDataNotAvailable = EWSPCLRetCodeBase + 9,
+ EErrorTimeout = EWSPCLRetCodeBase + 10
+ };
+private:
+ CDummyWSPCLConn* iClConnHandle;
+ };
+
+
+/**
+ * Represents a connection-orientated transaction
+ *
+ */
+class RWSPCOTrans
+ {
+public:
+ IMPORT_C RWSPCOTrans();
+ IMPORT_C ~RWSPCOTrans();
+
+ enum TDataType
+ {
+ EPushBody = 0,
+ EPushHeaders,
+ EResultStatus,
+ EResultBody,
+ EResultHeaders,
+ EInvokeUri,
+ EInvokeMethod,
+ EInvokeHeaders,
+ EInvokeBody,
+ EAckHeaders,
+ EAbortReason
+ };
+
+ enum TState
+ {
+ EInit = 0,
+ ERequesting,
+ EReplying,
+ EDone,
+ EAborted,
+ EPushing
+ };
+ typedef TPckgBuf<TState> TStatePckg;
+ typedef TPckgBuf<TInt> THandlePckg;
+ typedef TUint8 TAbortReason;
+ typedef TInt TTransID;
+
+ /** acknowledge a transaction - must be used for confirmed push */
+ IMPORT_C TInt Acknowledge(const TDesC8& aAckHeaders);
+
+ /** Retrieves the data associated to a transaction */
+ IMPORT_C TInt GetData(TDes8& aBuffer, TDataType aDataType, TInt* aSizeLeft = 0) const;
+
+ /** Retrieve the state the transaction is in */
+ IMPORT_C TInt GetState(TState& aState) const;
+ IMPORT_C TInt Abort(TAbortReason aReason);
+ IMPORT_C TInt Release();
+ IMPORT_C TInt Id(TTransID& aId);
+private:
+ friend class CDummyWSPCOConn;
+ CDummyWSPCOTrans* iCoTransHandle;
+ };
+
+enum TBearer
+{
+ EAll,
+ EIP,
+ ESMS7,
+ ESMS,
+ EWAPSMS7,
+ EWAPSMS
+ };
+
+/**
+ * Connection-orientated connection
+ *
+ */
+class RWSPCOConn : public RWAPConn
+ {
+public:
+ IMPORT_C TInt Open(RWAPServ& aServer, const TDesC8& aRemoteHost, TPort aRemotePort, TPort aLocalPort,
+ TBearer aBearer, TBool aSecureConn);
+ // Open fully defined
+ IMPORT_C virtual TInt Close();
+
+ IMPORT_C TInt Connect(const TDesC8& aClientHeaders, class CCapCodec* aCap = 0);
+ IMPORT_C TInt Disconnect();
+
+ IMPORT_C TInt Suspend();
+ IMPORT_C TInt Resume(RWSPCOConn& aBlankConn, const TDesC8& aHeaders);
+
+ enum TSessionState
+ {
+ EInit = 0,
+ EConnecting,
+ EConnected,
+ ESuspended,
+ EResuming,
+ EReplying,
+ EDisconnected
+ };
+ enum TSessionDataType
+ {
+ EServerHeaders = 12,
+ EClientHeaders,
+ ECapabilities,
+ ERedirectOptions,
+ ERedirectAddresses,
+ EQueueLen,
+ EErrorHeaders,
+ EErrorBody,
+ EDisconReason,
+ ESuspendReason
+ };
+
+ IMPORT_C TInt GetSessionState(TSessionState& aState) const;
+ IMPORT_C TInt GetSessionData(TDes8& aData, TSessionDataType aType) const;
+
+ IMPORT_C TInt CreateTransaction(TMethod aMethod, const TDesC& aURI, const TDesC8& aHeaders,
+ const TDesC8& aBody, RWSPCOTrans& aTrans);
+
+ typedef TPckgBuf<TInt> TEvent;
+
+ /** Gets next session or transaction event on this session */
+ IMPORT_C void GetEvent(TEvent& aEvent, RWSPCOTrans& aTrans, TRequestStatus& aStatus) const;
+ /** Cancel the asynchronous GetEvent operation */
+ IMPORT_C void CancelGetEvent();
+
+ /** Gets next session or transaction event on this session (synchronous version */
+ IMPORT_C TInt GetEvent(TEvent& aEvent, RWSPCOTrans& aTrans) const;
+
+ /** Return the number of events pending for the session */
+ IMPORT_C TInt GetNrOfEvents(TUint& aNrOfEvents) const;
+
+ enum TReturnCodes
+ {
+ EBufferTooSmall = EWSPCORetCodeBase + 0,
+ EInvalidSession = EWSPCORetCodeBase + 1,
+ EInvalidTransaction = EWSPCORetCodeBase + 2,
+ EParameterError = EWSPCORetCodeBase + 3,
+ ESessionNotConnected = EWSPCORetCodeBase + 4,
+ ENotSupported = EWSPCORetCodeBase + 5,
+ EInvalidState = EWSPCORetCodeBase + 6,
+ ESessionClosed = EWSPCORetCodeBase + 7,
+ EMRUExceeded = EWSPCORetCodeBase + 8,
+ EInvalidBufferSize = EWSPCORetCodeBase + 9,
+ EDataNotAvailable = EWSPCORetCodeBase + 10,
+ EErrorTimeout = EWSPCORetCodeBase + 11
+ };
+
+ enum TEventType
+ {
+ // session events
+ EDisconnect_ind_s = 0,
+ ESuspend_ind_s,
+ EResume_cnf_s,
+ EConnect_cnf_s,
+ ERedirect_ind_s,
+
+ // transaction events
+ EMethodInvoke_cnf_t,
+ EMethodResult_ind_t,
+ EAbort_ind_t,
+ EPush_ind_t,
+ EConfirmedPush_ind_t,
+
+ // exception events
+ EException_ind_e,
+ };
+private:
+ CDummyWSPCOConn* iCoConnHandle;
+ };
+
+
+#endif