networkcontrol/ipcprshim/inc/shimnifmansconn.h
author hgs
Tue, 29 Jun 2010 19:20:22 +0530
changeset 37 052078dda061
permissions -rw-r--r--
201025_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37
052078dda061 201025_01
hgs
parents:
diff changeset
     1
// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
052078dda061 201025_01
hgs
parents:
diff changeset
     2
// All rights reserved.
052078dda061 201025_01
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
052078dda061 201025_01
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
052078dda061 201025_01
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
052078dda061 201025_01
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
052078dda061 201025_01
hgs
parents:
diff changeset
     7
//
052078dda061 201025_01
hgs
parents:
diff changeset
     8
// Initial Contributors:
052078dda061 201025_01
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
052078dda061 201025_01
hgs
parents:
diff changeset
    10
//
052078dda061 201025_01
hgs
parents:
diff changeset
    11
// Contributors:
052078dda061 201025_01
hgs
parents:
diff changeset
    12
//
052078dda061 201025_01
hgs
parents:
diff changeset
    13
// Description:
052078dda061 201025_01
hgs
parents:
diff changeset
    14
//
052078dda061 201025_01
hgs
parents:
diff changeset
    15
052078dda061 201025_01
hgs
parents:
diff changeset
    16
/**
052078dda061 201025_01
hgs
parents:
diff changeset
    17
 @file
052078dda061 201025_01
hgs
parents:
diff changeset
    18
 @internalComponent
052078dda061 201025_01
hgs
parents:
diff changeset
    19
*/
052078dda061 201025_01
hgs
parents:
diff changeset
    20
052078dda061 201025_01
hgs
parents:
diff changeset
    21
052078dda061 201025_01
hgs
parents:
diff changeset
    22
#if !defined(__SHIMNIFMANSCONN_H__)
052078dda061 201025_01
hgs
parents:
diff changeset
    23
#define __SHIMNIFMANSCONN_H__
052078dda061 201025_01
hgs
parents:
diff changeset
    24
052078dda061 201025_01
hgs
parents:
diff changeset
    25
#include <comms-infras/ss_log.h>
052078dda061 201025_01
hgs
parents:
diff changeset
    26
#include "shimdatatransfer.h"
052078dda061 201025_01
hgs
parents:
diff changeset
    27
#include "shimclient.h"
052078dda061 201025_01
hgs
parents:
diff changeset
    28
#include "shimcpr.h" //access to the CConnectionProviderShim::Provider() fn
052078dda061 201025_01
hgs
parents:
diff changeset
    29
052078dda061 201025_01
hgs
parents:
diff changeset
    30
//const TInt KSubConnectionProviderShimImplementationUid = 0x10207106;
052078dda061 201025_01
hgs
parents:
diff changeset
    31
052078dda061 201025_01
hgs
parents:
diff changeset
    32
#define KShimScprTag KESockSubConnectionTag
052078dda061 201025_01
hgs
parents:
diff changeset
    33
_LIT8(KShimScprSubTag, "shimscpr");
052078dda061 201025_01
hgs
parents:
diff changeset
    34
_LIT8(KShimScprDataTag, "shimscprData");
052078dda061 201025_01
hgs
parents:
diff changeset
    35
_LIT8(KShimScprClientTag, "shimscprClient");
052078dda061 201025_01
hgs
parents:
diff changeset
    36
052078dda061 201025_01
hgs
parents:
diff changeset
    37
//Former CInterface CSubConnection related up-calls so that CConnectionProviderShim
052078dda061 201025_01
hgs
parents:
diff changeset
    38
//doesn't have to link against the sub-connection shim
052078dda061 201025_01
hgs
parents:
diff changeset
    39
class CConnection;
052078dda061 201025_01
hgs
parents:
diff changeset
    40
class MSubInterfaceShim : public MConnDataTransferNotify
052078dda061 201025_01
hgs
parents:
diff changeset
    41
	{
052078dda061 201025_01
hgs
parents:
diff changeset
    42
public:
052078dda061 201025_01
hgs
parents:
diff changeset
    43
	virtual TInt ProgressNotification(TInt aStage, TInt aError, const TDesC8& aInfo) = 0;
052078dda061 201025_01
hgs
parents:
diff changeset
    44
	virtual TSubConnectionUniqueId Id() = 0;
052078dda061 201025_01
hgs
parents:
diff changeset
    45
	virtual void SetSubConnectionUniqueId( TSubConnectionUniqueId aSubConnectionUniqueId ) = 0;
052078dda061 201025_01
hgs
parents:
diff changeset
    46
	virtual void ConnectionJoiningL(const CConnection& aConnection) = 0;
052078dda061 201025_01
hgs
parents:
diff changeset
    47
	virtual void ConnectionLeaving(const CConnection& aConnection) = 0;
052078dda061 201025_01
hgs
parents:
diff changeset
    48
	};
052078dda061 201025_01
hgs
parents:
diff changeset
    49
052078dda061 201025_01
hgs
parents:
diff changeset
    50
//class CSubConnectionProviderFactoryShim;
052078dda061 201025_01
hgs
parents:
diff changeset
    51
class CSubConnectionLinkShimClient;
052078dda061 201025_01
hgs
parents:
diff changeset
    52
052078dda061 201025_01
hgs
parents:
diff changeset
    53
NONSHARABLE_CLASS(CNifManSubConnectionShim) : public CBase, public MConnectionDataClient, public MSubInterfaceShim
052078dda061 201025_01
hgs
parents:
diff changeset
    54
/**
052078dda061 201025_01
hgs
parents:
diff changeset
    55
 @internalComponent
052078dda061 201025_01
hgs
parents:
diff changeset
    56
 */
052078dda061 201025_01
hgs
parents:
diff changeset
    57
	{
052078dda061 201025_01
hgs
parents:
diff changeset
    58
052078dda061 201025_01
hgs
parents:
diff changeset
    59
public:
052078dda061 201025_01
hgs
parents:
diff changeset
    60
	CNifManSubConnectionShim(CConnectionProviderShim& aProviderShim);
052078dda061 201025_01
hgs
parents:
diff changeset
    61
	~CNifManSubConnectionShim();
052078dda061 201025_01
hgs
parents:
diff changeset
    62
052078dda061 201025_01
hgs
parents:
diff changeset
    63
	// MSubInterfaceShim impl
052078dda061 201025_01
hgs
parents:
diff changeset
    64
	virtual TInt ProgressNotification(TInt aStage, TInt aError, const TDesC8& aInfo);
052078dda061 201025_01
hgs
parents:
diff changeset
    65
	virtual TInt NotifyDataTransferred(TUint aUplinkVolume, TUint aDownlinkVolume);
052078dda061 201025_01
hgs
parents:
diff changeset
    66
	virtual TInt NotifyDataSent(TUint aUplinkVolume, TUint aCurrentGranularity);
052078dda061 201025_01
hgs
parents:
diff changeset
    67
	virtual TInt NotifyDataReceived(TUint aDownlinkVolume, TUint aCurrentGranularity);
052078dda061 201025_01
hgs
parents:
diff changeset
    68
	virtual TSubConnectionUniqueId Id();
052078dda061 201025_01
hgs
parents:
diff changeset
    69
	virtual void SetSubConnectionUniqueId( TSubConnectionUniqueId aSubConnectionUniqueId );
052078dda061 201025_01
hgs
parents:
diff changeset
    70
	virtual void ConnectionJoiningL(const CConnection& aConnection);
052078dda061 201025_01
hgs
parents:
diff changeset
    71
	virtual void ConnectionLeaving(const CConnection& aConnection);
052078dda061 201025_01
hgs
parents:
diff changeset
    72
052078dda061 201025_01
hgs
parents:
diff changeset
    73
	CConnectionProvdBase& Provider()
052078dda061 201025_01
hgs
parents:
diff changeset
    74
		{
052078dda061 201025_01
hgs
parents:
diff changeset
    75
		return static_cast<CConnectionProviderShim*>(iConnectionProvider)->Provider();
052078dda061 201025_01
hgs
parents:
diff changeset
    76
		}
052078dda061 201025_01
hgs
parents:
diff changeset
    77
	CConnDataTransferShim* DataTransferShim()
052078dda061 201025_01
hgs
parents:
diff changeset
    78
		{
052078dda061 201025_01
hgs
parents:
diff changeset
    79
		return iConnDataTransferShim;
052078dda061 201025_01
hgs
parents:
diff changeset
    80
		}
052078dda061 201025_01
hgs
parents:
diff changeset
    81
	CSubConnectionLinkShimClient* ShimClient( TInt aIndex )
052078dda061 201025_01
hgs
parents:
diff changeset
    82
		{
052078dda061 201025_01
hgs
parents:
diff changeset
    83
		return aIndex < iShimClients.Count() ? iShimClients[aIndex] : NULL;
052078dda061 201025_01
hgs
parents:
diff changeset
    84
		}
052078dda061 201025_01
hgs
parents:
diff changeset
    85
	void DeleteAsync();	
052078dda061 201025_01
hgs
parents:
diff changeset
    86
protected:
052078dda061 201025_01
hgs
parents:
diff changeset
    87
	//MConnectionDataClient
052078dda061 201025_01
hgs
parents:
diff changeset
    88
	virtual void ConnectionGoingDown(CConnectionProviderBase& aConnProvider);
052078dda061 201025_01
hgs
parents:
diff changeset
    89
	virtual void ConnectionError(TInt aStage, TInt aError);
052078dda061 201025_01
hgs
parents:
diff changeset
    90
	virtual void Notify(TNotify aNotifyType,  CConnectionProviderBase* aConnProvider, TInt aError, const CConNotificationEvent* aConNotificationEvent);
052078dda061 201025_01
hgs
parents:
diff changeset
    91
      virtual void AttachToNext(CSubConnectionProviderBase* aSubConnProvider);
052078dda061 201025_01
hgs
parents:
diff changeset
    92
052078dda061 201025_01
hgs
parents:
diff changeset
    93
052078dda061 201025_01
hgs
parents:
diff changeset
    94
	TInt FindClient(const CConnection& aConnection);
052078dda061 201025_01
hgs
parents:
diff changeset
    95
      CConnDataTransfer& CreateDataTransferL();
052078dda061 201025_01
hgs
parents:
diff changeset
    96
052078dda061 201025_01
hgs
parents:
diff changeset
    97
protected:
052078dda061 201025_01
hgs
parents:
diff changeset
    98
	RPointerArray<CSubConnectionLinkShimClient> iShimClients;
052078dda061 201025_01
hgs
parents:
diff changeset
    99
	TSubConnectionUniqueId iSubConnectionsUniqueId;
052078dda061 201025_01
hgs
parents:
diff changeset
   100
	CConnDataTransferShim* iConnDataTransferShim;
052078dda061 201025_01
hgs
parents:
diff changeset
   101
	CConnectionProviderBase* iConnectionProvider;
052078dda061 201025_01
hgs
parents:
diff changeset
   102
	CAsyncCallBack iAsyncDestructor;
052078dda061 201025_01
hgs
parents:
diff changeset
   103
private:
052078dda061 201025_01
hgs
parents:
diff changeset
   104
	static TInt AsyncDestructorCb(TAny* aInstance);
052078dda061 201025_01
hgs
parents:
diff changeset
   105
	};
052078dda061 201025_01
hgs
parents:
diff changeset
   106
052078dda061 201025_01
hgs
parents:
diff changeset
   107
NONSHARABLE_CLASS(CSubConnectionLinkShimClient) : public CBase, public MConnDataTransferNotify, public MShimControlClient
052078dda061 201025_01
hgs
parents:
diff changeset
   108
/**
052078dda061 201025_01
hgs
parents:
diff changeset
   109
 Handle subconnection-related asynchronous client requests that may not complete immediately, it effectively
052078dda061 201025_01
hgs
parents:
diff changeset
   110
 represents the old CSubConnection
052078dda061 201025_01
hgs
parents:
diff changeset
   111
 @internalComponent
052078dda061 201025_01
hgs
parents:
diff changeset
   112
 */
052078dda061 201025_01
hgs
parents:
diff changeset
   113
	{
052078dda061 201025_01
hgs
parents:
diff changeset
   114
public:
052078dda061 201025_01
hgs
parents:
diff changeset
   115
	CSubConnectionLinkShimClient(const CConnection& aConnection, CNifManSubConnectionShim& aSubConnectionShim);
052078dda061 201025_01
hgs
parents:
diff changeset
   116
	~CSubConnectionLinkShimClient();
052078dda061 201025_01
hgs
parents:
diff changeset
   117
052078dda061 201025_01
hgs
parents:
diff changeset
   118
	//MConnDataTransferNotify interface towards CConnDataTransfer
052078dda061 201025_01
hgs
parents:
diff changeset
   119
	virtual TInt NotifyDataTransferred(const TUint aUplinkVolume, const TUint aDownlinkVolume);
052078dda061 201025_01
hgs
parents:
diff changeset
   120
	virtual TInt NotifyDataSent(TUint aUplinkVolume, TUint aCurrentGranularity);
052078dda061 201025_01
hgs
parents:
diff changeset
   121
	virtual TInt NotifyDataReceived(TUint aDownlinkVolume, TUint aCurrentGranularity);
052078dda061 201025_01
hgs
parents:
diff changeset
   122
	
052078dda061 201025_01
hgs
parents:
diff changeset
   123
	void ProgressNotification(TInt aStage, TInt aError, const TDesC8& aInfo);
052078dda061 201025_01
hgs
parents:
diff changeset
   124
052078dda061 201025_01
hgs
parents:
diff changeset
   125
	//MShimControlClient interface towards ESOCK
052078dda061 201025_01
hgs
parents:
diff changeset
   126
	//former CConnection::StopSubConnectionL(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   127
	virtual TBool StopL(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   128
	// Former calls from CConnection::GetSubConnectionInfo
052078dda061 201025_01
hgs
parents:
diff changeset
   129
	virtual TInt GetSubConnectionInfo(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   130
	//	Former Calls from RConnection via CSubConnection
052078dda061 201025_01
hgs
parents:
diff changeset
   131
	virtual TInt GetCurrentProgress(TNifProgress& aProgress);
052078dda061 201025_01
hgs
parents:
diff changeset
   132
	virtual TBool DataTransferredL(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   133
	virtual TBool DataTransferredCancel(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   134
	virtual TBool RequestSubConnectionProgressNotificationL(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   135
	virtual TBool CancelSubConnectionProgressNotification(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   136
	virtual TBool DataSentNotificationRequestL(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   137
	virtual TBool DataSentNotificationCancel(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   138
	virtual TBool DataReceivedNotificationRequestL(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   139
	virtual TBool DataReceivedNotificationCancel(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   140
	virtual TBool IsSubConnectionActiveRequestL(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   141
	virtual TBool IsSubConnectionActiveCancel(const RMessage2& aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   142
	TBool Match(const CConnection& aConnection) const;
052078dda061 201025_01
hgs
parents:
diff changeset
   143
	TSubConnectionUniqueId Id();
052078dda061 201025_01
hgs
parents:
diff changeset
   144
	virtual TInt ReturnCode() const;
052078dda061 201025_01
hgs
parents:
diff changeset
   145
052078dda061 201025_01
hgs
parents:
diff changeset
   146
	void SetReturnCode(TInt aErr)
052078dda061 201025_01
hgs
parents:
diff changeset
   147
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   148
		iReturnCode = aErr;
052078dda061 201025_01
hgs
parents:
diff changeset
   149
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   150
052078dda061 201025_01
hgs
parents:
diff changeset
   151
	/**
052078dda061 201025_01
hgs
parents:
diff changeset
   152
	Callback from activity timer
052078dda061 201025_01
hgs
parents:
diff changeset
   153
	*/
052078dda061 201025_01
hgs
parents:
diff changeset
   154
	void CheckSubConnectionActivity();
052078dda061 201025_01
hgs
parents:
diff changeset
   155
052078dda061 201025_01
hgs
parents:
diff changeset
   156
	NONSHARABLE_CLASS(CActivityTimer) : public CTimer
052078dda061 201025_01
hgs
parents:
diff changeset
   157
	/**
052078dda061 201025_01
hgs
parents:
diff changeset
   158
	@internalComponent
052078dda061 201025_01
hgs
parents:
diff changeset
   159
	*/
052078dda061 201025_01
hgs
parents:
diff changeset
   160
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   161
	public:
052078dda061 201025_01
hgs
parents:
diff changeset
   162
		static CActivityTimer* NewL(CSubConnectionLinkShimClient* aOwner, TInt aPriority);
052078dda061 201025_01
hgs
parents:
diff changeset
   163
		virtual inline ~CActivityTimer() {};
052078dda061 201025_01
hgs
parents:
diff changeset
   164
		void RunL();
052078dda061 201025_01
hgs
parents:
diff changeset
   165
	private:
052078dda061 201025_01
hgs
parents:
diff changeset
   166
		inline CActivityTimer(CSubConnectionLinkShimClient* aOwner, TInt aPriority);
052078dda061 201025_01
hgs
parents:
diff changeset
   167
	private:
052078dda061 201025_01
hgs
parents:
diff changeset
   168
		CSubConnectionLinkShimClient* iOwner;
052078dda061 201025_01
hgs
parents:
diff changeset
   169
		};
052078dda061 201025_01
hgs
parents:
diff changeset
   170
052078dda061 201025_01
hgs
parents:
diff changeset
   171
052078dda061 201025_01
hgs
parents:
diff changeset
   172
private:
052078dda061 201025_01
hgs
parents:
diff changeset
   173
	const CConnection& iConnection;
052078dda061 201025_01
hgs
parents:
diff changeset
   174
	CNifManSubConnectionShim& iSubConnectionShim;
052078dda061 201025_01
hgs
parents:
diff changeset
   175
	
052078dda061 201025_01
hgs
parents:
diff changeset
   176
	TUint iUplinkDataVolume;
052078dda061 201025_01
hgs
parents:
diff changeset
   177
	TUint iDownlinkDataVolume;
052078dda061 201025_01
hgs
parents:
diff changeset
   178
	TUint iUplinkDataNotificationVolume;
052078dda061 201025_01
hgs
parents:
diff changeset
   179
	TUint iDownlinkDataNotificationVolume;
052078dda061 201025_01
hgs
parents:
diff changeset
   180
	TInt iRemainingUplinkGranularity;
052078dda061 201025_01
hgs
parents:
diff changeset
   181
	TInt iRemainingDownlinkGranularity;
052078dda061 201025_01
hgs
parents:
diff changeset
   182
052078dda061 201025_01
hgs
parents:
diff changeset
   183
	TBool iDataSentNotificationsInAbsoluteMode;
052078dda061 201025_01
hgs
parents:
diff changeset
   184
	TBool iDataReceivedNotificationsInAbsoluteMode;
052078dda061 201025_01
hgs
parents:
diff changeset
   185
052078dda061 201025_01
hgs
parents:
diff changeset
   186
	TNifProgress iCurrentProgress;
052078dda061 201025_01
hgs
parents:
diff changeset
   187
	TInt iLastProgressToClient;
052078dda061 201025_01
hgs
parents:
diff changeset
   188
	TInt iClientRequestedProgress;
052078dda061 201025_01
hgs
parents:
diff changeset
   189
	CActivityTimer* iActivityTimer;
052078dda061 201025_01
hgs
parents:
diff changeset
   190
	TInt iRequestedClientTimerPeriod;
052078dda061 201025_01
hgs
parents:
diff changeset
   191
	TBool iClientBelievesSubConnectionActive;
052078dda061 201025_01
hgs
parents:
diff changeset
   192
	TUint iPreviousUplinkDataVolume;
052078dda061 201025_01
hgs
parents:
diff changeset
   193
	TUint iPreviousDownlinkDataVolume;
052078dda061 201025_01
hgs
parents:
diff changeset
   194
052078dda061 201025_01
hgs
parents:
diff changeset
   195
	TBool iOutstandingProgressNotification:1;
052078dda061 201025_01
hgs
parents:
diff changeset
   196
	TBool iOutstandingDataSentNotification:1;
052078dda061 201025_01
hgs
parents:
diff changeset
   197
	TBool iOutstandingDataReceivedNotification:1;
052078dda061 201025_01
hgs
parents:
diff changeset
   198
	TBool iOutstandingSubConnectionActivity:1;
052078dda061 201025_01
hgs
parents:
diff changeset
   199
052078dda061 201025_01
hgs
parents:
diff changeset
   200
	RMessage2 iOutstandingProgressNotificationMessage;
052078dda061 201025_01
hgs
parents:
diff changeset
   201
	RMessage2 iOutstandingDataSentNotificationMessage;
052078dda061 201025_01
hgs
parents:
diff changeset
   202
	RMessage2 iOutstandingDataReceivedNotificationMessage;
052078dda061 201025_01
hgs
parents:
diff changeset
   203
	RMessage2 iOutstandingSubConnectionActivityMessage;
052078dda061 201025_01
hgs
parents:
diff changeset
   204
	
052078dda061 201025_01
hgs
parents:
diff changeset
   205
	TInt iReturnCode;
052078dda061 201025_01
hgs
parents:
diff changeset
   206
	};
052078dda061 201025_01
hgs
parents:
diff changeset
   207
052078dda061 201025_01
hgs
parents:
diff changeset
   208
inline CSubConnectionLinkShimClient::CActivityTimer::CActivityTimer(CSubConnectionLinkShimClient* aOwner, TInt aPriority) 
052078dda061 201025_01
hgs
parents:
diff changeset
   209
: CTimer(aPriority), iOwner(aOwner)
052078dda061 201025_01
hgs
parents:
diff changeset
   210
/**
052078dda061 201025_01
hgs
parents:
diff changeset
   211
Set up the activity timer for subconnection activity
052078dda061 201025_01
hgs
parents:
diff changeset
   212
052078dda061 201025_01
hgs
parents:
diff changeset
   213
@param aOwner, The owing subconnection
052078dda061 201025_01
hgs
parents:
diff changeset
   214
@param aPriority, The priority of the active object
052078dda061 201025_01
hgs
parents:
diff changeset
   215
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   216
	{ CActiveScheduler::Add(this); };
052078dda061 201025_01
hgs
parents:
diff changeset
   217
	
052078dda061 201025_01
hgs
parents:
diff changeset
   218
#endif
052078dda061 201025_01
hgs
parents:
diff changeset
   219
// __SHIMNIFMANSCONN_H__