networkprotocolmodules/suplprotocolmodule/SuplConnectionManager/inc/socketwriter.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networkprotocolmodules/suplprotocolmodule/SuplConnectionManager/inc/socketwriter.h Tue Feb 02 01:50:39 2010 +0200
@@ -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 <e32base.h>
+#include <es_sock.h>
+#include <in_sock.h>
+#include <securesocket.h>
+#include "lbstimer.h"
+#include <lbs/lbshostsettings.h>
+#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<HBufC8*> 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_*/