wapstack/wapmessageapi/sws/WapMessageApiAgent.cpp
author hgs
Tue, 22 Jun 2010 11:02:32 +0100
changeset 44 8b72faa1200f
child 45 28dbf5a297f4
permissions -rw-r--r--
201024_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
44
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     2
// All rights reserved.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     7
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     8
// Initial Contributors:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    10
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    11
// Contributors:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    12
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    13
// Description:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    14
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    15
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    16
#include "WapMessageApiAgent.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    17
#include "WapMsgUtils.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    18
#include "CLWSPPduHandler.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    19
#include <es_wsms.h>
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    20
#include <wapmsgerr.h>
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    21
#include "WapSwsLog.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    22
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    23
CWapAsyncCallBack::CWapAsyncCallBack( const TCallBack& aCallBack, TInt aPriority )
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    24
:   CActive( aPriority ), iCallBack( aCallBack )
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    25
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    26
	CActiveScheduler::Add( this );
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    27
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    28
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    29
CWapAsyncCallBack::~CWapAsyncCallBack()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    30
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    31
	Cancel();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    32
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    33
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    34
void CWapAsyncCallBack::CallBack()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    35
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    36
	if  ( !IsActive() )
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    37
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    38
		TRequestStatus* status = &iStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    39
		User::RequestComplete( status, KErrNone );
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    40
		SetActive();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    41
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    42
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    43
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    44
void CWapAsyncCallBack::RunL()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    45
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    46
	iCallBack.CallBack();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    47
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    48
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    49
void CWapAsyncCallBack::DoCancel()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    50
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    51
	// Empty - request already completed in CallBack()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    52
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    53
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    54
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    55
//CWapMessageApiAgent class Method
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    56
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    57
CWapMessageApiAgent::CWapMessageApiAgent(TWapMessageType aMessageType):iMessageType(aMessageType)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    58
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    59
Constuctor.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    60
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    61
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    62
@param aMessageType the message type that handled by this agent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    63
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    64
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    65
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    66
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    67
CWapMessageApiAgent::~CWapMessageApiAgent()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    68
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    69
Destrutor
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    70
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    71
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    72
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    73
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    74
	TInt count=iBearers.Count();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    75
	for (TInt i=0; i<count; i++)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    76
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    77
		iBearers[i]->Cancel();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    78
		iBearers[i]->CleanUpData();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    79
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    80
	iBearers.ResetAndDestroy();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    81
	iSocketServ.Close();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    82
	if (iTimeoutTimer)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    83
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    84
		iTimeoutTimer->Cancel();		
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    85
		delete iTimeoutTimer;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    86
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    87
	if (iAsyncReadCompletion)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    88
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    89
		delete iAsyncReadCompletion;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    90
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    91
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    92
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    93
TInt CWapMessageApiAgent::CompleteReading(TAny* aAgent)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    94
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    95
	CWapMessageApiAgent* agent = reinterpret_cast<CWapMessageApiAgent*>(aAgent);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    96
	return agent->DoCompleteReading();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    97
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    98
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    99
TInt CWapMessageApiAgent::DoCompleteReading()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   100
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   101
	iRequestActive=EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   102
	User::RequestComplete(iRequestStatus, iLastReadingError);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   103
	return KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   104
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   105
void CWapMessageApiAgent::ConstructL()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   106
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   107
Second Phase Constructor
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   108
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   109
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   110
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   111
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   112
	iTimeoutTimer = CTimeOutTimer::NewL(*this);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   113
	TCallBack callback = TCallBack(CompleteReading, this);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   114
	iAsyncReadCompletion = new (ELeave) CWapAsyncCallBack(callback, CActive::EPriorityHigh);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   115
	User::LeaveIfError(iSocketServ.Connect());
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   116
 	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   117
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   118
CActiveSocket* CWapMessageApiAgent::GetActiveSocketByBearer(Wap::TBearer aBearer)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   119
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   120
To Get the CActiveSocket from the Array by Bearer type. 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   121
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   122
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   123
@param aBearer (in)the bearer type of the CActiveSocket
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   124
@returns the pointer of CAtiveSocket
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   125
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   126
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   127
	TInt count=iBearers.Count();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   128
	for (TInt i=0; i<count; i++)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   129
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   130
		Wap::TBearer bearer=iBearers[i]->GetBearerType();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   131
		if (bearer==aBearer)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   132
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   133
			return iBearers[i];
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   134
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   135
		else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   136
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   137
			if ((aBearer>=Wap::ESMS7 && aBearer<=Wap::EWAPSMS) && (bearer>=Wap::ESMS7 && bearer<=Wap::EWAPSMS))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   138
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   139
				return iBearers[i];
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   140
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   141
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   142
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   143
	return NULL;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   144
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   145
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   146
CActiveSocket* CWapMessageApiAgent::GetActiveSocketByStatus(TWapMessageState aState)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   147
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   148
To Get the CActiveSocket from the Array by Data State. 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   149
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   150
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   151
@param aState (in)the Data state of the CActiveSocket
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   152
@returns the pointer of CAtiveSocket
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   153
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   154
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   155
	TInt count=iBearers.Count();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   156
	for (TInt i=0; i<count; i++)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   157
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   158
		if (iBearers[i]->GetDataState()==aState)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   159
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   160
			return iBearers[i];
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   161
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   162
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   163
	return NULL;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   164
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   165
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   166
void CWapMessageApiAgent::TimerExpired()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   167
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   168
To handle the receive time out.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   169
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   170
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   171
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   172
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   173
	TInt count=iBearers.Count();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   174
	for (TInt i=0; i<count; i++)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   175
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   176
		iBearers[i]->Cancel();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   177
		iBearers[i]->CleanUpData();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   178
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   179
	iRequestActive=EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   180
	User::RequestComplete(iRequestStatus, KErrTimedOut);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   181
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   182
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   183
TInt CWapMessageApiAgent::GetLocalPort(Wap::TPort& aLocalPort)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   184
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   185
To Get local port of the last received packet
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   186
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   187
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   188
@param aLocalPort (out)the reference of the localPort.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   189
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   190
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   191
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   192
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   193
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   194
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::GetLocalPort: Trying to GetLocalPort on unconnected API."));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   195
		return KErrNotReady;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   196
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   197
	CActiveSocket* sock=GetActiveSocketByBearer(iLastPduBearer);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   198
	if (!sock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   199
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   200
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::GetLocalPort: Can not find Last Bearer."));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   201
		return Wap::EBearerError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   202
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   203
	sock->GetLocalPort(aLocalPort);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   204
	return KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   205
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   206
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   207
TInt CWapMessageApiAgent::GetLocalAddress(HBufC8*& aLocalHost)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   208
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   209
To Get local Address of the last received Packet
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   210
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   211
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   212
@param aLocalHost (out)the reference of the localHost.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   213
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   214
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   215
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   216
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   217
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   218
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::GetLocalAddress: Trying to GetLocalAddress on unconnected API."));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   219
		return KErrNotReady;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   220
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   221
	CActiveSocket* sock=GetActiveSocketByBearer(iLastPduBearer);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   222
	if (!sock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   223
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   224
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::GetLocalAddress: Can not find Last Bearer"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   225
		return Wap::EBearerError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   226
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   227
	TSockAddr& localHost=sock->GetLocalAddress();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   228
	TInt err=KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   229
	TRAP(err, aLocalHost=localHost.AllocL())
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   230
	if (err)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   231
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   232
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::GetLocalAddress: Alloc Memory Err=%d"), err);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   233
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   234
	return err;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   235
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   236
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   237
TInt CWapMessageApiAgent::GetBearer(Wap::TBearer& aBearer)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   238
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   239
To Get Bearer of the last received packet
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   240
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   241
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   242
@param aBearer (out)the reference of the Bearer.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   243
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   244
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   245
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   246
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   247
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   248
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::GetBearer: Trying to GetBearer on unconnected API."));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   249
		return KErrNotReady;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   250
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   251
	aBearer=iLastPduBearer;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   252
	return KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   253
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   254
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   255
TInt CWapMessageApiAgent::GetServerAddress(HBufC8*& aServerHost)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   256
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   257
To Get Server Host of the last received packet
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   258
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   259
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   260
@param aServerHost (out)the reference of the Server Host.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   261
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   262
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   263
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   264
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   265
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   266
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::GetServerAddress: Trying to GetServerAddress on unconnected API."));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   267
		return KErrNotReady;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   268
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   269
	CActiveSocket* sock=GetActiveSocketByBearer(iLastPduBearer);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   270
	if (!sock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   271
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   272
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::GetServerAddress: Can not find last error."));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   273
		return Wap::EBearerError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   274
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   275
	return sock->GetRemoteAddress(aServerHost);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   276
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   277
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   278
void CWapMessageApiAgent::CancelRequest()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   279
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   280
To Cancel the client's request
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   281
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   282
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   283
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   284
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   285
	if (iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   286
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   287
		TInt count=iBearers.Count();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   288
		for (TInt i=0; i<count; i++)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   289
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   290
			iBearers[i]->Cancel();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   291
			iBearers[i]->CleanUpData();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   292
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   293
		iTimeoutTimer->Cancel();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   294
		if (iRequestActive)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   295
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   296
			iRequestActive=EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   297
			iAsyncReadCompletion->Cancel();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   298
			User::RequestComplete(iRequestStatus, KErrCancel);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   299
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   300
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   301
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   302
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   303
TInt CWapMessageApiAgent::Connect(Wap::TBearer aBearer, Wap::TPort aPort, TBool aSecure)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   304
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   305
Opening an endpoint that can be used to listen for subsequent incoming datagrams.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   306
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   307
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   308
@param aBearer (In) the bearer to listen on
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   309
@param aPort (In) the port to listen on.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   310
@param aSecure (In) security flag indicates whether WTLS will be used or not (Not Supported)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   311
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   312
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   313
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   314
	TInetAddr inetAddr( KInetAddrAny, 0);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   315
	return (Connect(aBearer, aPort, aSecure, inetAddr));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   316
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   317
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   318
TInt CWapMessageApiAgent::Connect(Wap::TBearer aBearer, Wap::TPort aPort, TBool /*aSecure*/, TInetAddr /*aInetAddr*/)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   319
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   320
Opening an endpoint that can be used to listen for subsequent incoming datagrams.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   321
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   322
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   323
@param aBearer (In) the bearer to listen on
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   324
@param aPort (In) the port to listen on.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   325
@param aSecure (In) security flag indicates whether WTLS will be used or not (Not Supported)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   326
@param aInetAddr (In) Not In Use.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   327
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   328
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   329
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   330
	TInt ret=KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   331
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   332
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   333
		TRAP(ret, CActiveSocket::NewL(iSocketServ, iBearers, aBearer, iMessageType, this, aPort))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   334
		if (ret!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   335
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   336
			LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect: CActiveSocket Instantiate err=%d."),ret);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   337
			return ret;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   338
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   339
		iIsOpen=ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   340
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   341
	else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   342
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   343
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect:Trying Connect twice to the API."));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   344
		ret=KErrInUse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   345
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   346
	return ret;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   347
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   348
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   349
TInt CWapMessageApiAgent::Connect(Wap::TBearer aBearer, Wap::TPort aPort, TBool /*aSecure*/, TInt aSocketServHandle, RConnection* aConnection)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   350
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   351
Opening an endpoint that can be used to listen for subsequent incoming datagrams.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   352
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   353
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   354
@param aBearer (In) the bearer to listen on
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   355
@param aPort (In) the port to listen on.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   356
@param aSecure (In) security flag indicates whether WTLS will be used or not (Not Supported)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   357
@param aSocketServHandle (In) The Socket Server ID.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   358
@param aConnection (In) The RConnection that shared with the client.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   359
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   360
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   361
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   362
	if (aSocketServHandle==0 || !aConnection)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   363
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   364
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect:Parameter Error"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   365
		return KErrArgument;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   366
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   367
	TInt ret=KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   368
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   369
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   370
		iSocketServ.SetHandle(aSocketServHandle);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   371
		TRAP(ret, CActiveSocket::NewL(iSocketServ, iBearers, aBearer, iMessageType, this, aPort, aConnection))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   372
		if (ret!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   373
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   374
			LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect: CActiveSocket Instantiate err=%d."), ret);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   375
			return ret;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   376
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   377
		iIsOpen=ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   378
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   379
	else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   380
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   381
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect:Trying to Connect twice to the API."));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   382
		ret=KErrInUse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   383
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   384
	return ret;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   385
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   386
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   387
TInt CWapMessageApiAgent::Connect(const TDesC8& aRemoteHost, Wap::TPort aRemotePort, Wap::TBearer aBearer, TBool /*aSecure*/, TInetAddr /*aInetAddr*/)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   388
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   389
Opens a socket which is to be used only with a single, named remote host.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   390
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   391
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   392
@param aRemoteHost (In) the name of the remote host to connect.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   393
@param aRemotePort (In) the port of the remote host to connect.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   394
@param aBearer (In) the bearer to be used
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   395
@param aSecure (In) security flag indicates whether WTLS will be used or not (Not Supported)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   396
@param aInetAddr (In) Not In Use
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   397
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   398
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   399
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   400
	if (aBearer==Wap::EAll)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   401
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   402
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::SendWspMessage:Connect to EAll Error"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   403
		return Wap::EBearerError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   404
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   405
	TInt ret=KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   406
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   407
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   408
		TSockAddr remoteAddr;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   409
		TRAP(ret, CSWSWapMsgUtils::BuildAddrL(remoteAddr, aBearer, aRemoteHost, aRemotePort))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   410
		if (ret!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   411
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   412
			LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect: BuildAddress err=%d."), ret);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   413
			return ret;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   414
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   415
		TRAP(ret, CActiveSocket::NewL(iSocketServ, iBearers, aBearer, iMessageType, this, remoteAddr))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   416
		if (ret!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   417
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   418
			LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect: CActiveSocket Instantiate err=%d."), ret);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   419
			return ret;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   420
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   421
		iIsOpen=ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   422
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   423
	else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   424
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   425
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect:Trying to Connect twice to the API."));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   426
		ret=KErrInUse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   427
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   428
	return ret;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   429
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   430
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   431
TInt CWapMessageApiAgent::Connect(const TDesC8& aRemoteHost, Wap::TPort aRemotePort, Wap::TBearer aBearer, TBool aSecure)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   432
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   433
Opens a socket which is to be used only with a single, named remote host.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   434
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   435
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   436
@param aRemoteHost (In) the name of the remote host to connect.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   437
@param aRemotePort (In) the port of the remote host to connect.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   438
@param aBearer (In) the bearer to be used
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   439
@param aSecure (In) security flag indicates whether WTLS will be used or not (Not Supported)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   440
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   441
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   442
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   443
	TInetAddr inetAddr( KInetAddrAny, 0);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   444
	return (Connect(aRemoteHost, aRemotePort, aBearer, aSecure, inetAddr));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   445
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   446
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   447
TInt CWapMessageApiAgent::Connect(const TDesC8& aRemoteHost, Wap::TPort aRemotePort, Wap::TBearer aBearer, TBool /*aSecure*/, TInt aSocketServHandle, RConnection* aConnection)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   448
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   449
Opens a socket which is to be used only with a single, named remote host.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   450
@internalComponent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   451
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   452
@param aRemoteHost (In) the name of the remote host to connect.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   453
@param aRemotePort (In) the port of the remote host to connect.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   454
@param aBearer (In) the bearer to be used
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   455
@param aSecure (In) security flag indicates whether WTLS will be used or not (Not Supported)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   456
@param aSocketServHandle (In) The Socket Server ID.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   457
@param aConnection (In) The RConnection that shared with the client.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   458
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   459
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   460
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   461
	if (aBearer==Wap::EAll)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   462
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   463
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::SendWspMessage:Connect to EAll Error"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   464
		return Wap::EBearerError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   465
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   466
	if (aSocketServHandle==0 || !aConnection)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   467
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   468
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect:Parameter Error"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   469
		return KErrArgument;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   470
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   471
	TInt ret=KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   472
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   473
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   474
		iSocketServ.SetHandle(aSocketServHandle);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   475
		TSockAddr remoteAddr;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   476
		TRAP(ret, CSWSWapMsgUtils::BuildAddrL(remoteAddr, aBearer, aRemoteHost, aRemotePort))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   477
		if (ret!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   478
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   479
			LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect: BuildAddress err=%d."),ret);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   480
			return ret;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   481
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   482
		TRAP(ret, CActiveSocket::NewL(iSocketServ, iBearers, aBearer, iMessageType, this, remoteAddr, aConnection))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   483
		if (ret!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   484
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   485
			LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect: CActiveSocket Instantiate err=%d."),ret);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   486
			return ret;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   487
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   488
		iIsOpen=ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   489
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   490
	else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   491
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   492
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::Connect:Connect to a connected API."));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   493
		ret=KErrInUse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   494
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   495
	return ret;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   496
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   497
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   498
//CWspMessageApiAgent class Methods
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   499
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   500
CWspMessageApiAgent* CWspMessageApiAgent::NewL()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   501
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   502
Static NEWL()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   503
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   504
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   505
@returns CWspMessageApiAgent instance.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   506
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   507
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   508
	CWspMessageApiAgent* me = new(ELeave) CWspMessageApiAgent();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   509
	CleanupStack::PushL(me);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   510
	me->ConstructL();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   511
	CleanupStack::Pop(me);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   512
	return me;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   513
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   514
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   515
CWspMessageApiAgent::CWspMessageApiAgent():CWapMessageApiAgent(EWapWsp)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   516
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   517
Constructor
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   518
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   519
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   520
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   521
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   522
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   523
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   524
CWspMessageApiAgent::~CWspMessageApiAgent()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   525
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   526
Destructor
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   527
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   528
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   529
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   530
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   531
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   532
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   533
void CWspMessageApiAgent::ConstructL()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   534
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   535
Second Phase Constructor
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   536
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   537
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   538
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   539
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   540
	CWapMessageApiAgent::ConstructL();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   541
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   542
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   543
TInt CWspMessageApiAgent::SendWspMessage(Wap::TBearer aBearer, const TDesC8& aRemoteHost, Wap::TPort aRemotePort, TUint aMethod, const TDesC& aURI, const TDesC8& aReqHeaders, const TDesC8& aReqBody, TUint8 aTransactionId)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   544
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   545
Send Wsp Message to a remote host
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   546
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   547
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   548
@param aBearer (in) the bearer to be used
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   549
@param aRemoteHost (in) The remote host to be sent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   550
@param aRemotePort (in) The remote port to be sent.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   551
@param aMethod (in) The method to be invoked.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   552
@param aURI (in) The destination URI.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   553
@param aReqHeaders (in) The Wsp header of WSP message.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   554
@param aReqBody (in) The Wsp body of WSP message.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   555
@param aTransactionId (in) The transaction ID of WSP message.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   556
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   557
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   558
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   559
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   560
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   561
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::SendWspMessage:Tryig to send to unconnected API"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   562
		return KErrNotReady;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   563
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   564
	if (aBearer==Wap::EAll)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   565
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   566
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::SendWspMessage:Send to EAll Error"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   567
		return Wap::EBearerError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   568
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   569
	HBufC8* sendBuf=NULL;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   570
	TInt err=KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   571
	TSockAddr remoteAddr;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   572
	TRAP(err, CSWSWapMsgUtils::BuildAddrL(remoteAddr, aBearer, aRemoteHost, aRemotePort))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   573
	if (err!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   574
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   575
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::SendWspMessage: BuildAddress err=%d."),err);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   576
		return err;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   577
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   578
	TRAP(err, CCLWSPPduHandler::PackWSPPduL(sendBuf, TWSPPduType(aMethod), aURI, aReqHeaders, aReqBody, aTransactionId))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   579
	if (err!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   580
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   581
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::SendWspMessage:Pack Wsp Packet Error=%d"),err);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   582
		return err;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   583
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   584
	CActiveSocket* sendSock=GetActiveSocketByBearer(aBearer);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   585
	if (sendSock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   586
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   587
		if (aBearer==Wap::ESMS||aBearer==Wap::EWAPSMS)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   588
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   589
			TWapSmsDataCodingScheme codingScheme = EWapSms8BitDCS;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   590
			sendSock->Socket().SetOpt(KWapSmsOptionNameDCS,KWapSmsOptionLevel,codingScheme);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   591
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   592
		TRequestStatus status;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   593
		sendSock->Socket().SendTo(*sendBuf, remoteAddr, 0, status);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   594
		User::WaitForRequest(status);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   595
		err=status.Int();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   596
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   597
	else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   598
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   599
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::SendWspMessage: Can not find Bearer"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   600
		err=Wap::EBearerError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   601
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   602
	delete sendBuf;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   603
	return err;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   604
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   605
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   606
TInt CWspMessageApiAgent::SendWspMessage(TUint aMethod, const TDesC& aURI, const TDesC8& aReqHeaders, const TDesC8& aReqBody, TUint8 aTransactionId)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   607
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   608
Send Wsp Message to a remote host for fulluSpecified Interface
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   609
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   610
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   611
@param aMethod (in) The method to be invoked.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   612
@param aURI (in) The destination URI.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   613
@param aReqHeaders (in) The Wsp header of WSP message.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   614
@param aReqBody (in) The Wsp body of WSP message.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   615
@param aTransactionId (in) The transaction ID of WSP message.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   616
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   617
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   618
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   619
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   620
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   621
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::SendWspMessage:Trying to send to unconnected API"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   622
		return KErrNotReady;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   623
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   624
	if (!iBearers[0])
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   625
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   626
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::SendWspMessage:No Bearer"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   627
		return Wap::EBearerError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   628
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   629
	HBufC8* sendBuf=NULL;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   630
	TInt err=KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   631
	TRAP(err, CCLWSPPduHandler::PackWSPPduL(sendBuf, TWSPPduType(aMethod), aURI, aReqHeaders, aReqBody, aTransactionId))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   632
	if (err!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   633
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   634
		LOG(SwsLog::Printf(_L("CWapMessageApiAgent::SendWspMessage:Pack Wsp Packet Error=%d"),err);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   635
		return err;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   636
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   637
	Wap::TBearer bearer=iBearers[0]->GetBearerType();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   638
	if (bearer==Wap::ESMS||bearer==Wap::EWAPSMS)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   639
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   640
		TWapSmsDataCodingScheme codingScheme = EWapSms8BitDCS;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   641
		iBearers[0]->Socket().SetOpt(KWapSmsOptionNameDCS,KWapSmsOptionLevel,codingScheme);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   642
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   643
	TSockAddr& remoteAddr=iBearers[0]->GetRemoteAddress();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   644
	TRequestStatus status;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   645
	iBearers[0]->Socket().SendTo(*sendBuf, remoteAddr, 0, status);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   646
	User::WaitForRequest(status);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   647
	delete sendBuf;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   648
	return status.Int();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   649
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   650
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   651
TInt CWspMessageApiAgent::ReceiveWspMessage(TDes8& aWspHeaders, TDes8& aWspBody, TPckgBuf<TUint8>& aTransactionIdPckg, TWSPStatus& aWspStatus, TRequestStatus& aReqStatus, TUint32 aTimeout)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   652
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   653
Receive the Wsp Message to a remote host for fulluSpecified Interface
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   654
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   655
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   656
@param aWspHeaders (out) The Wsp header to be received
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   657
@param aWspBody (out) The Wsp body to be received.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   658
@param aTransactionIdPckg (out) The received transaction ID buffer
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   659
@param aWspStatus (out) The Wsp status for Method Result.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   660
@param aReqStatus (out) The request status of the WAP message API
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   661
@param aTimeout (in) The timer out value.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   662
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   663
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   664
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   665
	TRequestStatus* reqStatus=NULL;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   666
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   667
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   668
		reqStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   669
		User::RequestComplete(reqStatus, KErrNotReady);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   670
		LOG(SwsLog::Printf(_L("CWspMessageApiAgent::ReceiveWspMessage: Trying to recvive from unconnected API"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   671
		return KErrNotReady;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   672
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   673
	if (iRequestActive)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   674
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   675
		reqStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   676
		User::RequestComplete(reqStatus, KErrInUse);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   677
		LOG(SwsLog::Printf(_L("CWspMessageApiAgent::ReceiveWspMessage:Outstanding Receive exist"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   678
		return KErrInUse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   679
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   680
	//Record the client buffer
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   681
	iClientReqHeaders=&aWspHeaders;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   682
	iClientReqBody=&aWspBody;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   683
	iClientTransactionId=(TUint8*)aTransactionIdPckg.Ptr();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   684
	iClientWspStatus=&aWspStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   685
	//if there are data are being reading
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   686
	CActiveSocket* readingSock=GetActiveSocketByStatus(EReading);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   687
	if (readingSock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   688
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   689
		iRequestStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   690
		*iRequestStatus = KRequestPending;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   691
		iRequestActive=ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   692
		iLastReadingError=readingSock->GetWspData(*iClientReqHeaders, *iClientReqBody, *iClientTransactionId, *iClientWspStatus);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   693
		if (iLastReadingError==KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   694
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   695
			iLastPduBearer=readingSock->GetBearerType();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   696
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   697
		iAsyncReadCompletion->CallBack();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   698
		return iLastReadingError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   699
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   700
	//if there are pending data.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   701
	CActiveSocket* pendingSock=GetActiveSocketByStatus(EPendingData);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   702
	if (pendingSock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   703
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   704
		iRequestStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   705
		*iRequestStatus = KRequestPending;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   706
		iRequestActive=ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   707
		iLastReadingError=pendingSock->GetWspData(*iClientReqHeaders, *iClientReqBody, *iClientTransactionId, *iClientWspStatus);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   708
		if (iLastReadingError==KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   709
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   710
			iLastPduBearer=pendingSock->GetBearerType();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   711
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   712
		iAsyncReadCompletion->CallBack();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   713
		return iLastReadingError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   714
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   715
	// Issue request in Idle socket
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   716
	CActiveSocket* sock=GetActiveSocketByStatus(EIdle);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   717
	if (sock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   718
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   719
		iRequestStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   720
		*iRequestStatus = KRequestPending;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   721
		iRequestActive=ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   722
		for (TInt i=0; i<iBearers.Count(); i++)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   723
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   724
			if (iBearers[i]->GetDataState()==EIdle)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   725
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   726
				iBearers[i]->AwaitRecvDataSize();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   727
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   728
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   729
		if (aTimeout>0)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   730
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   731
			iTimeoutTimer->After(aTimeout);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   732
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   733
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   734
	return KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   735
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   736
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   737
void CWspMessageApiAgent::Notification(TInt aMessage, const TDesC8& aData)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   738
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   739
Notification of PDU size or PDU data
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   740
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   741
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   742
@param aMessage (in) The Event Type received by the ActiveSocket
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   743
@param aData (in)The Event received by the ActiveSocket.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   744
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   745
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   746
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   747
	LOG(SwsLog::Printf(_L("CWspMessageApiAgent::Notification is called"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   748
	TWapNotificationInfo& info=*(reinterpret_cast<TWapNotificationInfo*>(const_cast<TUint8*>(aData.Ptr())));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   749
	Wap::TBearer bearer=info.iBearer;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   750
	CActiveSocket* currentSocket=GetActiveSocketByBearer(bearer);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   751
	ASSERT(currentSocket!=NULL);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   752
	if (!currentSocket)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   753
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   754
		return;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   755
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   756
	TInt err=info.iError;		
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   757
	switch (TWapNotificationEvent(aMessage))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   758
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   759
	case EPduLengthReceived:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   760
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   761
			if (err!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   762
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   763
				LOG(SwsLog::Printf(_L("CWspMessageApiAgent::Notification PDU length err status:%d"), err);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   764
				currentSocket->CleanUpData();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   765
				if (iRequestActive)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   766
					{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   767
					iTimeoutTimer->Cancel();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   768
					User::RequestComplete(iRequestStatus, err);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   769
					iRequestActive=EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   770
					}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   771
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   772
			else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   773
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   774
				LOG(SwsLog::Printf(_L("CWspMessageApiAgent::Notification PDU length is received"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   775
				if ((err=currentSocket->Receive())!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   776
					{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   777
					currentSocket->CleanUpData();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   778
					if (iRequestActive)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   779
						{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   780
						iTimeoutTimer->Cancel();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   781
						User::RequestComplete(iRequestStatus, err);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   782
						iRequestActive=EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   783
						}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   784
					}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   785
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   786
			break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   787
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   788
	case EPduReceived:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   789
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   790
			CActiveSocket* sock=GetActiveSocketByStatus(EReading);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   791
			if (err!=KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   792
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   793
				LOG(SwsLog::Printf(_L("CWspMessageApiAgent::Notification PDU data is received with Err status:%d"), err);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   794
				currentSocket->CleanUpData();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   795
				if (iRequestActive && !sock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   796
					{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   797
					iTimeoutTimer->Cancel();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   798
					User::RequestComplete(iRequestStatus, err);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   799
					iRequestActive=EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   800
					}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   801
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   802
			else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   803
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   804
				LOG(SwsLog::Printf(_L("CWspMessageApiAgent::Notification PDU data is received"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   805
				if (!sock && iRequestActive)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   806
					{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   807
					iTimeoutTimer->Cancel();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   808
					iRequestActive=EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   809
					TRAP(err, currentSocket->UnpackPduToWspDataL())
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   810
					if (err)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   811
						{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   812
						currentSocket->CleanUpData();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   813
						User::RequestComplete(iRequestStatus, err);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   814
						return;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   815
						}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   816
					err=currentSocket->GetWspData(*iClientReqHeaders, *iClientReqBody, *iClientTransactionId, *iClientWspStatus);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   817
					if (err==KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   818
						iLastPduBearer=bearer;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   819
					User::RequestComplete(iRequestStatus, err);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   820
					}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   821
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   822
			break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   823
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   824
	default:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   825
		LOG(SwsLog::Printf(_L("CWspMessageApiAgent::Notification() Unknown Event From Bearer"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   826
		;	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   827
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   828
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   829
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   830
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   831
//CWdpMessageApiAgent class Method
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   832
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   833
CWdpMessageApiAgent* CWdpMessageApiAgent::NewL()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   834
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   835
The static funtion to new a wdp message API agent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   836
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   837
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   838
@returns the CWdpMessageApiAgent instance
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   839
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   840
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   841
	CWdpMessageApiAgent* me = new(ELeave) CWdpMessageApiAgent();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   842
	CleanupStack::PushL(me);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   843
	me->ConstructL();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   844
	CleanupStack::Pop(me);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   845
	return me;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   846
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   847
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   848
CWdpMessageApiAgent::CWdpMessageApiAgent():CWapMessageApiAgent(EWapWdp)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   849
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   850
Constructor
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   851
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   852
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   853
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   854
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   855
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   856
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   857
CWdpMessageApiAgent::~CWdpMessageApiAgent()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   858
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   859
Destructor
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   860
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   861
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   862
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   863
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   864
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   865
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   866
void CWdpMessageApiAgent::ConstructL()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   867
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   868
Second Phase Constructor
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   869
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   870
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   871
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   872
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   873
	CWapMessageApiAgent::ConstructL();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   874
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   875
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   876
TInt CWdpMessageApiAgent::ReceiveWdpMessage(TDes8& aRemoteHost, Wap::TPort& aRemotePort, TDes8& aBuffer, TBool& aTruncated, TRequestStatus& aReqStatus, TUint32 aTimeout)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   877
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   878
Receive WDP message from a remote host
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   879
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   880
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   881
@param aRemoteHost (out) the remote host from which the WDP is sent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   882
@param aRemotePort (out) the remote port from which the WDP is sent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   883
@param aBuffer (out) the buffer to contain the received the WDP pdu
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   884
@param aTruncated (out) the flag to show if the WDP PDU is trucated ot not
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   885
@param aReqStatus (out) the client request status.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   886
@param aTimeOut (in) the time out value
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   887
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   888
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   889
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   890
	TRequestStatus* reqStatus=NULL;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   891
	TInt err=KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   892
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   893
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   894
		reqStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   895
		User::RequestComplete(reqStatus, KErrNotReady);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   896
		LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::ReceiveWdpMessage:Recv From unconnected API"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   897
		return KErrNotReady;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   898
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   899
	//if the length has been read
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   900
	CActiveSocket* sock=GetActiveSocketByStatus(EGotLength);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   901
	CActiveSocket* sock1=GetActiveSocketByStatus(EReading);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   902
	if (iRequestActive || (!sock && !sock1))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   903
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   904
		reqStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   905
		User::RequestComplete(reqStatus, KErrInUse);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   906
		LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::ReceiveWdpMessage:in wrong state"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   907
		return KErrInUse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   908
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   909
	if (sock1)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   910
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   911
		Wap::TBearer bearer=sock1->GetBearerType();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   912
		TSockAddr& remoteAddr=sock1->GetRemoteAddress();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   913
		TRAP(err, CSWSWapMsgUtils::AnalyseAddrL(remoteAddr, bearer, *iClientRemoteHost, *iClientRemotePort))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   914
		if (err)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   915
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   916
			reqStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   917
			User::RequestComplete(reqStatus, err);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   918
			return err;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   919
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   920
		iRequestStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   921
		*iRequestStatus = KRequestPending;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   922
		iRequestActive=ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   923
		iLastReadingError=sock1->GetPduData(*iClientPduBuffer, *iClientTruncated);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   924
		if (!iLastReadingError)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   925
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   926
			iLastPduBearer=bearer;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   927
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   928
		iAsyncReadCompletion->CallBack();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   929
		return iLastReadingError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   930
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   931
	if (sock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   932
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   933
		if ((err=sock->Receive())==KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   934
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   935
			iClientPduBuffer=&aBuffer;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   936
			iClientRemoteHost=&aRemoteHost;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   937
			iClientRemotePort=&aRemotePort;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   938
			iClientTruncated=&aTruncated;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   939
			iRequestStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   940
			*iRequestStatus = KRequestPending;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   941
			iRequestActive=ETrue;		
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   942
			if (aTimeout)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   943
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   944
				iTimeoutTimer->After(aTimeout);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   945
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   946
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   947
		else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   948
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   949
			reqStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   950
			User::RequestComplete(reqStatus, err);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   951
			LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::ReceiveWdpMessage:err=%d"), err);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   952
			return err;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   953
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   954
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   955
	return KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   956
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   957
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   958
TInt CWdpMessageApiAgent::AwaitRecvDataSize(TPckg<TUint16>& aDataSizePckg, TRequestStatus& aReqStatus)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   959
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   960
Receive WDP message PDU length from a remote host
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   961
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   962
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   963
@param aDataSizePckg (out) the length of the PDU
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   964
@param aReqStatus (out) the client request status.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   965
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   966
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   967
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   968
	TRequestStatus* reqStatus=NULL;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   969
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   970
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   971
		reqStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   972
		User::RequestComplete(reqStatus, KErrNotReady);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   973
		LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::AwaitRecvDataSize:Wait For Data length From unconnected API"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   974
		return KErrNotReady;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   975
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   976
	//if the length has been read or there is some data pending, then error completion
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   977
	CActiveSocket* sock=GetActiveSocketByStatus(EGotLength);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   978
	CActiveSocket* sock1=GetActiveSocketByStatus(ERequestingData);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   979
	CActiveSocket* sock2=GetActiveSocketByStatus(EReading);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   980
	if (iRequestActive||sock||sock1||sock2)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   981
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   982
		reqStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   983
		User::RequestComplete(reqStatus, KErrInUse);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   984
		LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::AwaitRecvDataSize:in wrong state"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   985
		return KErrInUse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   986
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   987
	//if there is a pending length, then get it
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   988
	sock=GetActiveSocketByStatus(EPendingLength);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   989
	if (sock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   990
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   991
		iClientDataSize=&aDataSizePckg;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   992
		iRequestStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   993
		*iRequestStatus = KRequestPending;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   994
		iRequestActive=ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   995
		TUint16 length=(TUint16)sock->GetPduSize();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   996
		TPckg<TUint16> des(length);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   997
		iClientDataSize->Copy(des);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   998
		iLastReadingError=KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   999
		iAsyncReadCompletion->CallBack();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1000
		return KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1001
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1002
	//if there is some idle socket, then wait for length
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1003
	sock=GetActiveSocketByStatus(EIdle);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1004
	if (sock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1005
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1006
		iRequestActive=ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1007
		iClientDataSize=&aDataSizePckg;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1008
		iRequestStatus=&aReqStatus;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1009
		*iRequestStatus = KRequestPending;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1010
		//Wait for length on the idle socket
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1011
		for (TInt i=0; i<iBearers.Count(); i++)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1012
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1013
			if (iBearers[i]->GetDataState()==EIdle)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1014
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1015
				iBearers[i]->AwaitRecvDataSize();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1016
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1017
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1018
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1019
	return KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1020
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1021
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1022
TInt CWdpMessageApiAgent::SendWdpMessage(const TDesC8& aBuffer, const TDesC8& aRemoteHost, Wap::TPort aRemotePort, Wap::TBearer aBearer)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1023
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1024
Send WDP message to a remote host
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1025
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1026
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1027
@param aBuffer (in) the data to be sent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1028
@param aRemoteHost (in) the remote host to be sent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1029
@param aRemotePort (in) the remote port to be sent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1030
@param aBearer (in) the Bearer to be used
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1031
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1032
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1033
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1034
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1035
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1036
		LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::SendWdpMessage:Send WDP to unconnected API"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1037
		return KErrNotReady;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1038
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1039
	if (aBearer==Wap::EAll)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1040
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1041
		LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::SendWdpMessage:Wrong Bearer"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1042
		return Wap::EBearerError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1043
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1044
	TSockAddr remoteAddr;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1045
	TInt err=KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1046
	TRAP(err, CSWSWapMsgUtils::BuildAddrL(remoteAddr, aBearer, aRemoteHost, aRemotePort))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1047
	if (err)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1048
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1049
		LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::SendWdpMessage:BuildAddrL Err=%d"), err);)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1050
		return err;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1051
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1052
	CActiveSocket* sendSock=GetActiveSocketByBearer(aBearer);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1053
	if (sendSock)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1054
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1055
		if (aBearer==Wap::ESMS||aBearer==Wap::EWAPSMS)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1056
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1057
			TWapSmsDataCodingScheme codingScheme = EWapSms8BitDCS;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1058
			sendSock->Socket().SetOpt(KWapSmsOptionNameDCS,KWapSmsOptionLevel,codingScheme);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1059
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1060
		TRequestStatus status;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1061
		sendSock->Socket().SendTo(aBuffer, remoteAddr, 0, status);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1062
		User::WaitForRequest(status);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1063
		err=status.Int();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1064
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1065
	else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1066
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1067
		LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::SendWdpMessage:No Bearer"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1068
		err=Wap::EBearerError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1069
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1070
	return err;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1071
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1072
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1073
TInt CWdpMessageApiAgent::SendWdpMessage(const TDesC8& aBuffer)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1074
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1075
Send WDP message to a remote host
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1076
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1077
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1078
@param aBuffer (in) the data to be sent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1079
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1080
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1081
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1082
	if (!iIsOpen)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1083
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1084
		LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::SendWdpMessage:Send WDP to unconnected API"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1085
		return KErrNotReady;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1086
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1087
	if (!iBearers[0])
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1088
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1089
		LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::SendWdpMessage:No Bearer"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1090
		return Wap::EBearerError;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1091
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1092
	Wap::TBearer bearer=iBearers[0]->GetBearerType();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1093
	if (bearer==Wap::ESMS||bearer==Wap::EWAPSMS)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1094
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1095
		TWapSmsDataCodingScheme codingScheme = EWapSms8BitDCS;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1096
		iBearers[0]->Socket().SetOpt(KWapSmsOptionNameDCS,KWapSmsOptionLevel,codingScheme);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1097
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1098
	TSockAddr& remoteAddr=iBearers[0]->GetRemoteAddress();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1099
	TRequestStatus status;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1100
	iBearers[0]->Socket().SendTo(aBuffer, remoteAddr, 0, status);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1101
	User::WaitForRequest(status);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1102
	return status.Int();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1103
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1104
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1105
void CWdpMessageApiAgent::Notification(TInt aMessage, const TDesC8& aData)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1106
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1107
Notification from the ActiveSocket
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1108
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1109
@released since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1110
@param aMessage (in) the Event Type
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1111
@param aData (in) the Event
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1112
@returns KErrNone on successful completion, or one of the system error codes on failure.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1113
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1114
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1115
	TWapNotificationInfo& info=*(reinterpret_cast<TWapNotificationInfo*>(const_cast<TUint8*>(aData.Ptr())));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1116
	Wap::TBearer bearer=info.iBearer;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1117
	CActiveSocket* currentSocket=GetActiveSocketByBearer(bearer);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1118
	ASSERT(currentSocket!=NULL);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1119
	if (!currentSocket)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1120
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1121
		return;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1122
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1123
	TInt err=info.iError;		
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1124
	switch (TWapNotificationEvent(aMessage))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1125
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1126
	case EPduLengthReceived:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1127
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1128
			CActiveSocket* sock1=GetActiveSocketByStatus(ERequestingData);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1129
			CActiveSocket* sock2=GetActiveSocketByStatus(EGotLength);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1130
			CActiveSocket* sock3=GetActiveSocketByStatus(EReading);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1131
			if (!sock1 && !sock2 && !sock3 && iRequestActive)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1132
				// Read pdu length from this socket
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1133
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1134
				iRequestActive=EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1135
				if (err==KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1136
					{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1137
					TUint16 length=(TUint16)currentSocket->GetPduSize();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1138
					TPckg<TUint16> des(length);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1139
					iClientDataSize->Copy(des);	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1140
					}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1141
				else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1142
					{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1143
					currentSocket->CleanUpData();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1144
					}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1145
				User::RequestComplete(iRequestStatus, err);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1146
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1147
			break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1148
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1149
	case EPduReceived:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1150
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1151
			ASSERT(iRequestActive);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1152
			if (iRequestActive)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1153
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1154
				// Read pdu from this socket
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1155
				iRequestActive=EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1156
				iTimeoutTimer->Cancel();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1157
				if (err==KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1158
					{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1159
					TSockAddr& remoteAddr=currentSocket->GetRemoteAddress();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1160
					TRAP(err, CSWSWapMsgUtils::AnalyseAddrL(remoteAddr, bearer, *iClientRemoteHost, *iClientRemotePort))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1161
					if (!err)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1162
						{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1163
						err=currentSocket->GetPduData(*iClientPduBuffer, *iClientTruncated);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1164
						if (!err)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1165
							iLastPduBearer=bearer;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1166
						}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1167
					else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1168
						{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1169
						currentSocket->SetDataState(EReading);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1170
						}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1171
					}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1172
				else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1173
					{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1174
					currentSocket->CleanUpData();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1175
					}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1176
				User::RequestComplete(iRequestStatus, err);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1177
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1178
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1179
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1180
	default:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1181
		LOG(SwsLog::Printf(_L("CWdpMessageApiAgent::Notification() Unknown Event From Bearer"));)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1182
		;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1183
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
  1184
	}