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