// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
// RawIPMCPR.CPP
// RawIP MCPR
//
//
/**
@file
@internalComponent
*/
#include <comms-infras/nifprvar.h> // for TAgentToFlowEventType
#include <comms-infras/linkprovision.h>
#include "RawIpAgentHandler.h"
using namespace ESock;
void CRawIpAgentHandler::ConnectCompleteL()
/**
RawIp handler called on Agent ConnectComplete().
Allocate and populate the provisioning structure.
*/
{
// If not already poresent, allocate and append the provisioning structure. Assumed to be
// cleaned up by CAccessPointConfig.
if (iProvision == NULL)
{
CRawIpAgentConfig* provision = new (ELeave) CRawIpAgentConfig();
CleanupStack::PushL(provision);
AppendExtensionL(provision);
CleanupStack::Pop(provision); // ownership given to CAccessPointConfig
iProvision = provision; // cache pointer to provisioning structure (no ownership)
}
// The following calls towards the Agent will trigger Notification() calls from Agent back
// towards us (in the same stack frame). These will be processed in NotificationFromAgent().
NotificationToAgent(EFlowToAgentEventTsyConfig, NULL);
NotificationToAgent(EFlowToAgentEventTsyConnectionSpeed, NULL);
}
TInt CRawIpAgentHandler::NotificationFromAgent(TAgentToFlowEventType aEvent, TAny* aInfo)
/**
RawIp handler called on Agent Notification() calls towards CFProtocol.
@param aEvent event type
@param aInfo free form data associated with event
*/
{
switch (aEvent)
{
case EAgentToFlowEventTsyConfig:
// NOTE:
// We are presuming that the object pointed to by "aInfo" is on the heap of the Agent and
// not on the stack. This sounds risky, but we are following the same conditions as
// with old Nifs and Agents - the Notification() method was used to communicate a pointer
// from Agent to Nif of a structure whose lifetime was guaranteed longer than that of the
// Nif. This hasn't changed with the introduction of CFProtocols. Alternatively, we would
// have allocate space for and copy the (very large - several K) TContextConfigGPRS.
iProvision->iGprsConfig = reinterpret_cast<const TPacketDataConfigBase*>(aInfo);
break;
case EAgentToFlowEventTsyConnectionSpeed:
if (aInfo != NULL)
iProvision->iConnectionSpeed = *reinterpret_cast<TUint*>(aInfo);
break;
default:
// Default handling
return CAgentNotificationHandler::NotificationFromAgent(aEvent, aInfo);
}
return KErrNone;
}