diff -r 000000000000 -r 3553901f7fa8 telephonyprotocols/rawipnif/src/RawIpAgentHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyprotocols/rawipnif/src/RawIpAgentHandler.cpp Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,88 @@ +// 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 // for TAgentToFlowEventType +#include +#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(aInfo); + break; + + case EAgentToFlowEventTsyConnectionSpeed: + if (aInfo != NULL) + iProvision->iConnectionSpeed = *reinterpret_cast(aInfo); + break; + + default: + // Default handling + return CAgentNotificationHandler::NotificationFromAgent(aEvent, aInfo); + } + + return KErrNone; + }