diff -r a2efdd544abf -r b47902b73a93 networkprotocolmodules/suplprotocolmodule/SuplConnectionManager/inc/socketwriter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkprotocolmodules/suplprotocolmodule/SuplConnectionManager/inc/socketwriter.h Fri Jun 04 10:34:15 2010 +0100 @@ -0,0 +1,218 @@ +// Copyright (c) 2008-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 + @internalComponent + @deprecated +*/ + +#ifndef SOCKETWRITER_H_ +#define SOCKETWRITER_H_ + +#include +#include +#include +#include +#include "lbstimer.h" +#include +#include "observers.h" + + + +// Forwards +class CSuplSocketRequestQueue; +class CSocketReader; +class CSecureSocketReader; +class CLbsCallbackTimer; + +class CSocketWriterBase : public CActive, + public MLbsCallbackTimerObserver + { +public: + ~CSocketWriterBase(); + + // Methods + void Connect(const TSuplLocalSessionId sessionId); + void Disconnect(); + void SendMessageL(CSuplMessageBase* aMessage, const TSuplLocalSessionId& aSessionId); + TLbsHostSettingsId HostSettingsId(); + TInt CallbackId(); + + // CActive + void RunL(); + void DoCancel(); + TInt RunError(TInt aError); + +protected: + // Constructors + CSocketWriterBase(const TLbsHostSettingsId& aSlpId, + TInt iCallbackId, + MSuplSocketObserver& aSocketWriterObserver, + RSocketServ& aSocketServer, + const TLbsHostSettingsSupl& aHostSettings); + void BaseConstructL(); + + // Methods + void ResolveHost(); + void ConnectConnection(); + void CheckQueue(); + void DoConnect(); + void SelfComplete(); + + // Virtual Methods + virtual void DoConnectSocket() = 0; + virtual void DoDisconnect() = 0; + virtual void DoStartReaderL() = 0; + virtual void DoSendMessage(TDesC8& aMessage) = 0; + + // Timer + void StartTimer(); + void StopTimer(); +private: + // MLbsCallbackTimerObserver + virtual void OnTimerEventL(TInt aTimerId); + virtual TInt OnTimerError(TInt aTimerId, TInt aError); +protected: + enum TSuplSocketState + { + EIdleDisconnected = 0, + EResolvingSlpAddress, + EConnectingConnection, + EConnectingSocket, + ETlsHandshaking, + EIdleConnected, + ESendingMessage, + EClosing, + ENone + }; + + TSuplSocketState iState; + + // TCP Socket + RSocket iSocket; + + // Information about the resolved address + TNameEntry iNameEntry; + + // Actual internet address + TInetAddr iAddr; + + // Socket server + RSocketServ& iSocketServ; + + // Connection + RConnection iConnection; + + // Observer + MSuplSocketObserver& iObserver; + + // Session index in connection manager => Used for call backs + TInt iCallbackId; + + // Count of number of current sessions + TInt iSessionCount; + + // Session Id of active request + TSuplLocalSessionId iLastSessionId; + + // The actual host settings + const TLbsHostSettingsSupl iHostSettings; +private: + // Index into the Host Settings DataBase where SLP info is stored + TLbsHostSettingsId iSlpSettings; + + // Resolver to find out the SLP's IP address + RHostResolver iResolver; + + // Queue of messages to send + CArrayFixFlat iQueue; + + // Call back timer + CLbsCallbackTimer* iTimeout; + }; + + +class CSocketWriter : public CSocketWriterBase + { +public: + // Constructors + static CSocketWriter* NewL(const TLbsHostSettingsId& aSlpId, + TInt aCallbackIndex, + MSuplSocketObserver& aSocketWriterObserver, + RSocketServ& aSocketServer, + TLbsHostSettingsSupl& aHostSettings); + ~CSocketWriter(); +protected: + // Constructors + CSocketWriter(const TLbsHostSettingsId& aSlpId, + TInt aCallbackIndex, + MSuplSocketObserver& aSocketWriterObserver, + RSocketServ& aSocketServer, + TLbsHostSettingsSupl& aHostSettings); + + // CSocketWriterBase + void DoConnectSocket(); + void DoDisconnect(); + void DoSendMessage(TDesC8& aMessage); + void DoStartReaderL(); +private: + CSocketReader* iSocketReader; + }; + + +class CSecureSocketWriter : public CSocketWriterBase + { +public: + // Constructors + static CSecureSocketWriter* NewL(const TLbsHostSettingsId& aSlpId, + TInt aCallbackIndex, + MSuplSocketObserver& aSocketWriterObserver, + RSocketServ& aSocketServer, + TLbsHostSettingsSupl& aHostSettings, + const CSuplSessionRecord::TServiceType& aServiceType); + ~CSecureSocketWriter(); +protected: + // Constructors + CSecureSocketWriter(const TLbsHostSettingsId& aSlpId, + TInt aCallbackIndex, + MSuplSocketObserver& aSocketWriterObserver, + RSocketServ& aSocketServer, + TLbsHostSettingsSupl& aHostSettings, + const CSuplSessionRecord::TServiceType& aServiceType); + + // CActive + void RunL(); // Override of RunL to handle security handshaking + void DoCancel(); + + // CSocketWriterBase + void DoConnectSocket(); + void DoDisconnect(); + void DoSendMessage(TDesC8& aMessage); + void DoStartReaderL(); + + // New functions + void StartSecureSocketL(); + TBool CheckTlsSecureL(); +private: + CSecureSocketReader* iSocketReader; + + CSecureSocket* iSecureSocket; + + CSuplSessionRecord::TServiceType iServiceType; + + }; + +#endif /*SOCKETWRITER_H_*/