--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/tls/inc/ssl_internal.h Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,460 @@
+// Copyright (c) 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:
+// SSL exported functions.
+//
+//
+
+/**
+ * @file ssl_internal.h
+ * SSL internal constants and classes.
+ */
+
+#ifndef __TCPSSL_INTERNAL_H__
+#define __TCPSSL_INTERNAL_H__
+
+#include <e32base.h>
+#include <es_sock.h>
+
+//TDNInfo & TCertInfo moved to a header file owned by HTTP
+//included their file here to reduce impact of this move
+// next 3 lines xfer from ssldata.h
+/*
+Code using this const has been commented out.
+Be careful 0x406 could have been defined in the in_sock.h in the mean time...
+const TUint KSoCurrentConnectStatus =0x406;
+*/
+/**
+ * The SSL connection status.
+ *
+ * @internalComponent
+ *
+ * @since v6.0 *
+ * @deprecated No longer used by networking
+ */
+enum TSSLConnectStatus
+ {
+ /** Connected. */
+ ESSLConnected,
+ /** Waiting for user to answer. */
+ ESSLWaitingUserAnswer,
+ /** Connection failed. */
+ ESSLConnectFailed
+ };
+
+/**
+ * No dialogs.
+ *
+ * @internalComponent
+ */
+const TUint KSSLUserDialogMode = 0x02; // no dialogs
+
+/**
+ * SSL Protocol Module's UID.
+ *
+ * @internalComponent
+ */
+const TInt KUidSSLProtocolModule = 0x100011b2;
+
+/**
+ * Unicode SSL Protocol Module's UID.
+ *
+ * @internalComponent
+ */
+const TInt KUidUnicodeSSLProtocolModule = 0x1000183d;
+
+/**
+ * SSL v3 Protocol Module's UID.
+ *
+ * @internalComponent
+ */
+const TInt KUidSSLv3ProtocolModule = 0x10001699;
+
+/**
+ * Socket reads from SSL.
+ *
+ * @internalComponent
+ */
+const TUint KSockReadFromSSL = 0x10040000;
+
+/**
+ * Socket writes to SSL.
+ *
+ * @internalComponent
+ */
+const TUint KSockWriteFromSSL = 0x10044000;
+
+// SSL/TLS connection Option taken from previous releases. This information has been
+// removed from in_sock.h. All adaptor options have been removed.
+const TUint KSolInetSSL = 0x205; //< SSL setopts/ioctls
+
+const TUint KSoCurrentCipherSuite = 0x402; //< Get current cipher suites
+const TUint KSoSSLServerCert = 0x403; //< Get server certificate
+const TUint KSoDialogMode = 0x404; //< Get/Set current dialog mode
+const TUint KSoAvailableCipherSuites = 0x405; //< Get available cipher suites
+ // 0x406 skipped - See KSoCurrentConnectStatus
+const TUint KSoKeyingMaterial = 0x407; //< Get Keying Material for EAP
+
+
+/**
+ * Interface to the client code which decides which PSK identity and value should be used to secure the connection.
+*/
+class MSoPskKeyHandler
+ {
+public:
+ /**
+ Called during the TLS PSK handshake to get the PSK identity and value to be used to secure the connection.
+
+ @param aPskIdentityHint A ptr to an HBufC8 containing the "PSK identity hint", or NULL if the server did not send one.
+ @param aPskIdentity NULL passed in, must be set to an HBufC8 containing the PSK Identity to be used.
+ @param aPskKey NULL passed in, must be set to an HBufC8 containing the PSK key value to be used.
+
+ Note that the meaning of the PSK identity hint is NOT defined by the TLS standard, therefore any application
+ using PSK must previously agree the source of the PSK to be used and the interpretion of the (optional) PSK identity
+ hint.
+ */
+ virtual void GetPskL(const HBufC8 * aPskIdentityHint, HBufC8 *& aPskIdentity, HBufC8 *& aPskKey) = 0;
+ };
+
+/**
+ *
+ * @internalComponent
+ */
+const TUint KSoSSLDomainName = 0x505; //< Set Domain name
+
+// Adaptor layer specific options
+// all SSL related options are supposed to be here
+// rather then in insock/inc/in_sock.h
+/**
+ * Use SSL v2 handschake.
+ *
+ * @internalAll
+ * @deprecated the option is no longer supported
+ */
+const TUint KSoUseSSLv2Handshake = 0x500;
+
+// For KSoDialogMode
+const TUint KSSLDialogUnattendedMode= 0x01; //< No dialogs
+const TUint KSSLDialogAttendedMode = 0x00; //< dialogs
+
+
+// A version must be specified when creating an SSL factory
+/**
+ * SSL module major version number.
+ *
+ * @internalComponent
+ */
+const TUint KSSLMajorVersionNumber=1;
+/**
+ * SSL module minor version number.
+ *
+ * @internalComponent
+ */
+const TUint KSSLMinorVersionNumber=0;
+/**
+ * SSL module build version number.
+ *
+ * @internalComponent
+ */
+const TUint KSSLBuildVersionNumber=500;
+
+class RMBufChain;
+class CSSLSessionStore;
+class CSSLSessionState;
+class CNifFactory;
+class CSSLProviderBase;
+class CSymmetricCipher;
+class CCryptoFactory;
+class CCertFactory;
+class CSSLTimers;
+class MSSLSocketNotify
+ /**
+ * Abstract base class used to notify the SSL socket server that various events
+ * have occurred. The class provides several up-call member functions.
+ *
+ * @internalComponent
+ *
+ * @since v5.0
+ *
+ * @deprecated No longer used by networking
+ */
+ {
+public:
+// NOTE: THESE ARE A SUBSET OF MSocketNotify
+ /** Called with unencrypted data to be given to the client application.
+ *
+ * @param aDesc Descriptor holding the unencrypted data.
+ * @param aRestingData
+ */
+ virtual void SSLDeliver(const TDesC8 &aDesc, TUint aRestingData)=0;
+
+ virtual TUint SSLWrite(const TDesC8 &aDesc,TUint options, TSockAddr* aAddr=NULL)=0;
+
+ /** Indicates that new buffer space is available. */
+ virtual void SSLCanSend()=0;
+
+ /** Indicates that a connection attempt has completed successfully. */
+ virtual void SSLConnectComplete()=0;
+
+ /** Indicates that the SAP has finished closing down. */
+ virtual void SSLCanClose()=0;
+
+ /** Tells the socket server that an error state has arisen within the protocol.
+ *
+ * It should not be used to report programmatic errors, either in the protocol
+ * itself or the socket server (a panic should be used in these cases).
+ *
+ * @param anError Error that has arisen. */
+ virtual void SSLError(TInt anError)=0;
+
+ /** Called when the connection is closed due to an error. */
+ virtual void SSLDisconnectIndication(void)=0;
+
+ /** Called when the connection is closed due to an error.
+ *
+ * @param aDisconnectData Descriptor holding the disconnect data. */
+ virtual void SSLDisconnectIndication(TDesC8& aDisconnectData)=0;
+
+ /** Called when the connection is closed due to an error.
+ *
+ * @param aError The disconnect error. */
+ virtual void SSLDisconnectIndication(TInt aError)=0;
+
+ virtual void SSLIoctlComplete(TDesC8 *aBuf)=0;
+ };
+
+class CSSLTimers : public CBase
+ /**
+ * Base class for SSL timers.
+ *
+ * @internalComponent
+ *
+ * @since v5.0
+ *
+ * @deprecated No longer used by networking
+ */
+ {
+public:
+ /** Stops the SSLTimer, if it is running and destructs the object. */
+ virtual ~CSSLTimers();
+
+ /** Creates a new SSL Timer.
+ *
+ * @return KErrNone if successful; otherwise, a system-wide error code. */
+ static CSSLTimers *NewL();
+
+ /** Starts the SSL timer.
+ *
+ * @param aCallBack Call back function.
+ * @param aTimeout Time. */
+ void StartSSLTimer(TCallBack aCallBack,TInt aTimeout);
+
+ /** Stops the timer. */
+ void StopSSLTimer();
+
+ /** Stops and cancels the time recorded by the timer. */
+ void DoSSLTimerExpired();
+private:
+ CSSLTimers();
+private:
+ TDeltaTimerEntry iSSLTimer;
+ TDeltaTimerEntry *iSSLTimerH;
+ };
+
+class SSLGlobals
+ /**
+ * @internalComponent
+ *
+ * @deprecated No longer used by networking
+ */
+ {
+public:
+ CObjectConIx *iContainer;
+ CObjectCon *iSSLFactories;
+ TInt iSSLUnloadTimeout;
+ TInt iSecureSocketCount;
+ };
+
+class RSSLDialogServer;
+class CSSLFactory : public CObject
+ /**
+ * Factory base for creating a concrete instance of a CSSLBase.
+ *
+ * @internalComponent
+ *
+ * @since v5.0
+ * @deprecated No longer used by networking
+ */
+ {
+public:
+ CSSLFactory();
+ virtual ~CSSLFactory();
+ virtual CSSLProviderBase* NewSecureSocketL(MSSLSocketNotify* aParent);
+ virtual TInt Open();
+ virtual void Close();
+ virtual void InitL(RLibrary& aLib, CObjectCon& aCon);
+ virtual TVersion Version() const;
+// static void Cleanup(TAny* aObject);
+// static TInt ControlledDelete(TAny* aSSLFactory);
+ void SecureSocketShutdown(CSSLProviderBase *aSecureSocket);
+ // other public members
+ void SetSessionStateL(CSSLSessionState* aState,const TDesC8&);//const TDesC8& aSessionID,const TDesC8& aMasterSecret);
+ TPtrC8 GetSession(const TDesC8&,CSSLSessionState*);
+ void ConstructL();
+private:
+ void InitCryptoL();
+public:
+ RLibrary iLib;
+private:
+// RLibrary iCryptLibrary;
+// RLibrary iCertLibrary;
+ TDblQue<CSSLProviderBase> iSecureSocketsList;
+ TUint iSecureSocketsCount;
+ CSSLSessionStore *iSessStore;
+ };
+
+class CSSLProviderBase : public CBase
+ /**
+ * Abstract base class for all SSL protocol implementations.
+ *
+ * @internalComponent
+ *
+ * @since v5.0
+ *
+ * @deprecated No longer used by networking
+ */
+ {
+public:
+ friend class CSSLFactory;
+/** Connection closing type. */
+ enum TCloseType
+ {
+ /** Normal. */
+ ENormal,
+ /** Stop input. */
+ EStopInput,
+ /** Stop output. */
+ EStopOutput,
+ /** Close immediately. */
+ EImmediate
+ };
+
+ CSSLProviderBase(CSSLFactory& aFactory);
+ virtual ~CSSLProviderBase();
+
+ /** Set the notification parent,
+ *
+ * @param aNotify Parent to be notified. */
+ inline void SetNotify(MSSLSocketNotify* aNotify);
+public:
+// NOTE I'VE COPIED THESE DIRECTLY FROM CServProviderBase
+ virtual const TInt GetOption(TUint level,TUint name,TDes8& anOption) =0;
+ virtual void Ioctl(TUint level,TUint name,TDes8* anOption)=0;
+ virtual void CancelIoctl(TUint aLevel,TUint aName)=0;
+
+ /** Sets an option.
+ *
+ * @param level Integer constant identifying the option.
+ * @param name Option name.
+ * @param anOption Option value packaged in a descriptor.
+ * @return KErrNone if successful; otherwise, a system-wide error code. */
+ virtual TInt SetOption(TUint level,TUint name,const TDesC8 &anOption)=0;
+
+ virtual TUint Write(const TDesC8& aDesc,TUint options,TSockAddr* anAddr=NULL)=0;
+
+ /** Process the event in the buffer.
+ *
+ * @param aBuf Chain with events to process. */
+ virtual void Process(RMBufChain& aBuf)=0;
+
+ virtual void ProcessL(const TDesC8 &aDesc)=0;
+
+ /** Initiates a connection operation.
+ *
+ * This means that it tells the protocol to
+ * attempt to connect to a peer. It is called by the socket server in response
+ * to a connect request from a client. ActiveOpen() is only ever called on connection-oriented
+ * sockets. Such a socket should always have both the local address and the remote
+ * address specified before ActiveOpen() is called. If this is not the case,
+ * then the protocol should panic. When a connection has completed, the protocol
+ * should call ConnectComplete() on its TNotify.
+ *
+ * If an error occurs during connection the protocol should not call ConnectComplete()
+ * at all; instead it should call Error().
+ *
+ * @return KErrNone if successful; otherwise, a system-wide error code. */
+ virtual TInt ActiveOpen()=0;
+
+ /** Same as ActiveOpen(), but with user data in the connection frame.
+ *
+ * @param aConnectionData User specified connection data.
+ * @return KErrNone if successful; otherwise, a system-wide error code. */
+ virtual TInt ActiveOpen(const TDesC8& aConnectionData)=0;
+
+ /** Tells the protocol to start waiting for an incoming connection request on this
+ * socket (i.e. port).
+ *
+ * It is called by the socket server in response to a listen request from a client.
+ *
+ * PassiveOpen() is only ever called on connection-oriented sockets. Such a socket
+ * should always have both the local address and the remote address specified
+ * before PassiveOpen() is called. If this is not the case, then the protocol
+ * should panic.
+ *
+ * The protocol should keep a count of sockets in Start state - incrementing
+ * a variable in ConnectComplete(), and decrementing it in Start().
+ *
+ * When a connection has completed, the protocol should call ConnectComplete()
+ * on its TNotify.
+ *
+ * If an error occurs during connection the protocol should not call ConnectComplete()
+ * at all; instead it should call Error().
+ *
+ * @param aQueSize The number of sockets which can be waiting for an outstanding
+ * Start() after calling ConnectComplete().
+ * @return KErrNone if successful; otherwise, a system-wide error code. */
+ virtual TInt PassiveOpen(TUint aQueSize)=0;
+
+ /** Same as PassiveOpen(), but with user data in the connection frame.
+ *
+ * @param aQueSize The number of sockets which can be waiting for an outstanding
+ * Start() after calling ConnectComplete().
+ * @param aConnectionData User specified connection data
+ * @return KErrNone if successful, a system-wide error code if not. */
+ virtual TInt PassiveOpen(TUint aQueSize,const TDesC8& aConnectionData)=0;
+
+ /** Terminates a connection (or closes a non connection-oriented socket down).
+ *
+ * Normally, when the socket server has called Shutdown() for a socket, it will
+ * wait for the socket to call CanClose() before destroying the CServProviderBase
+ * object. */
+ virtual void Shutdown()=0;
+
+ /** Closes the connection. */
+ virtual void Close()=0;
+ /** Second phase contructor.
+ *
+ * @param aParent Parent to be notified. */
+ virtual void ConstructL(MSSLSocketNotify *aParent)=0;
+ /** Indicates that the connection has been completed. */
+ virtual void ConnectCompleted()=0;
+
+public:
+ TDblQueLink iLink;
+protected:
+ CSSLFactory* iFactory;
+private:
+ MSSLSocketNotify* iSocket;
+ };
+
+#endif