telephonyprotocols/rawipnif/rawipnif2/src/RawIP2Flow.cpp
changeset 44 8b72faa1200f
parent 0 3553901f7fa8
child 66 07a122eea281
equal deleted inserted replaced
39:2473f5e227f9 44:8b72faa1200f
     1 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
     1 // Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
    18 //
    18 //
    19 
    19 
    20 /**
    20 /**
    21  @file
    21  @file
    22 */
    22 */
       
    23 
       
    24 
       
    25 #include "OstTraceDefinitions.h"
       
    26 #ifdef OST_TRACE_COMPILER_IN_USE
       
    27 #include "RawIP2FlowTraces.h"
       
    28 #endif
    23 
    29 
    24 #include <f32file.h>
    30 #include <f32file.h>
    25 #include <nifman.h>
    31 #include <nifman.h>
    26 #include <nifmbuf.h>
    32 #include <nifmbuf.h>
    27 #include <in_iface.h>
    33 #include <in_iface.h>
    38 #include <comms-infras/ss_nodemessages_flow.h>
    44 #include <comms-infras/ss_nodemessages_flow.h>
    39 
    45 
    40 using namespace Messages;
    46 using namespace Messages;
    41 using namespace MeshMachine;
    47 using namespace MeshMachine;
    42 
    48 
    43 #ifdef __FLOG_ACTIVE
    49 
    44 //These variables are used only if flog is active.
    50 CRawIP2Flow::CRawIP2Flow(ESock::CSubConnectionFlowFactoryBase& aFactory, const Messages::TNodeId& aSubConnId, ESock::CProtocolIntfBase* aProtocolIntf)
    45 _LIT8(KTcpDumpFirstTag,"TcpDump");
       
    46 static const TUint16 KTcpDumpLinkType = 12;
       
    47 #endif
       
    48 
       
    49 CRawIP2Flow::CRawIP2Flow(ESock::CSubConnectionFlowFactoryBase& aFactory, const Messages::TNodeId& aSubConnId, ESock::CProtocolIntfBase* aProtocolIntf, CBttLogger* aTheLogger)
       
    50 /**
    51 /**
    51  * Constructor.
    52  * Constructor.
    52  *
    53  *
    53  * @param aFactory Reference to the factory which created this object.
    54  * @param aFactory Reference to the factory which created this object.
    54  * @param aSubConnId Reference to the node id for sub connection.
    55  * @param aSubConnId Reference to the node id for sub connection.
    55  * @param aProtocolIntf pointer to the CProtocolIntfBase
    56  * @param aProtocolIntf pointer to the CProtocolIntfBase
    56  * @param aTheLogger The logging object, ownership is passed to this object
       
    57  */
    57  */
    58 	: CSubConnectionFlowBase(aFactory, aSubConnId, aProtocolIntf),
    58 	: CSubConnectionFlowBase(aFactory, aSubConnId, aProtocolIntf),
    59 	  iTheLogger(aTheLogger),
       
    60 	  iInitError(KErrNone),
    59 	  iInitError(KErrNone),
    61 	  iStarted(EFalse),
    60 	  iStarted(EFalse),
    62 	  iStopping(EFalse)
    61 	  iStopping(EFalse)
    63 	{
    62 	{
    64 	LOG_NODE_CREATE(KNifSubDir, CRawIP2Flow);
    63 	LOG_NODE_CREATE(KNifSubDir, CRawIP2Flow);
    70  * control engine
    69  * control engine
    71  *
    70  *
    72  * @param aName The name of the NIF (unused)
    71  * @param aName The name of the NIF (unused)
    73  */
    72  */
    74 	{
    73 	{
    75 	_LOG_L1C2(_L8("CRawIP2Flow %08x:\tConstructL()"), this);
    74 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_CONSTRUCTL_1, "CRawIP2Flow %08x:\tConstructL()", this);
    76 	
    75 	
    77     iBinderControl = new (ELeave) TBinderControlProxy(*this);
    76     iBinderControl = new (ELeave) TBinderControlProxy(*this);
    78 	iBcaController = CBcaController::NewL(*this, iTheLogger);
    77 	iBcaController = CBcaController::NewL(*this);
    79 	}
    78 	}
    80 
    79 
    81 CRawIP2Flow::~CRawIP2Flow()
    80 CRawIP2Flow::~CRawIP2Flow()
    82 /**
    81 /**
    83  * Destructor. Cancels and deletes all owned active objects.
    82  * Destructor. Cancels and deletes all owned active objects.
    84  */
    83  */
    85 	{
    84 	{
    86 	// Note that we don't delete iBinder because it's not owned by us.
    85 	// Note that we don't delete iBinder because it's not owned by us.
    87 	delete iBcaController;
    86 	delete iBcaController;
    88 	// This class also deletes the logging object
       
    89 	delete iTheLogger;
       
    90 
    87 
    91 	ASSERT(iBinder == NULL);
    88 	ASSERT(iBinder == NULL);
    92 	
    89 	
    93 	delete iBinderControl;	
    90 	delete iBinderControl;	
    94 	LOG_NODE_DESTROY(KNifSubDir, CRawIP2Flow);
    91 	LOG_NODE_DESTROY(KNifSubDir, CRawIP2Flow);
    95 	// Cleanup when stop was not called - harmless as it null's the pointer
       
    96 	__PACKETLOG_DELETE;
       
    97 	}
    92 	}
    98 
    93 
    99 void CRawIP2Flow::StartFlowL()
    94 void CRawIP2Flow::StartFlowL()
   100 /**
    95 /**
   101  * Starts the Flow up. This process involves connecting to the BCA.  
    96  * Starts the Flow up. This process involves connecting to the BCA.  
   105  * @return Allways KErrNone
   100  * @return Allways KErrNone
   106  */
   101  */
   107 	{
   102 	{
   108 	ASSERT(iStarting==EFalse);
   103 	ASSERT(iStarting==EFalse);
   109 	iStarting = ETrue;
   104 	iStarting = ETrue;
   110 	_LOG_L1C2(_L8("CRawIP2Flow %08x:\tStartFlowL()"), this);
   105 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_STARTFLOWL_1, "CRawIP2Flow %08x:\tStartFlowL()", this);
   111 
   106 
   112 	// If there were any errors during earlier processing of the ProvisionConfig message
   107 	// If there were any errors during earlier processing of the ProvisionConfig message
   113 	// then send an Error message in response to the StartFlow (because ProvisionConfig
   108 	// then send an Error message in response to the StartFlow (because ProvisionConfig
   114 	// does not have a response code).
   109 	// does not have a response code).
   115 	if (iProvisionError != KErrNone)
   110 	if (iProvisionError != KErrNone)
   122 	InitialiseL();
   117 	InitialiseL();
   123 	
   118 	
   124 	// associate the binder object with the lowersender
   119 	// associate the binder object with the lowersender
   125 	iBinder->SetSender(&(iBcaController->Bca()->GetSender()));
   120 	iBinder->SetSender(&(iBcaController->Bca()->GetSender()));
   126 	//the name calculation should be done only if logging is enabled
   121 	//the name calculation should be done only if logging is enabled
   127 #ifdef __FLOG_ACTIVE
   122 #if (OST_TRACE_CATEGORY & OST_TRACE_CATEGORY_DEBUG)
   128 	const TUint KModemNameLen = KCommsDbSvrMaxColumnNameLength + 10;  // need enough for ppp-XXX.txt - e.g. ppp-comm-1.txt, ppp-btcomm-10.txt etc
   123 	const TUint KModemNameLen = KCommsDbSvrMaxColumnNameLength + 10;  // need enough for ppp-XXX.txt - e.g. ppp-comm-1.txt, ppp-btcomm-10.txt etc
   129 	TBuf8<KModemNameLen> modemName;
   124 	TBuf8<KModemNameLen> modemName;
   130 
   125 
   131 	_LIT8(KDoubleColon, "::");
   126 	_LIT8(KDoubleColon, "::");
   132 
   127 
   143 
   138 
   144 	_LIT8(KTimeFormat, "%08X");
   139 	_LIT8(KTimeFormat, "%08X");
   145 	TUint32 counter = User::FastCounter();
   140 	TUint32 counter = User::FastCounter();
   146 	logFileName.Format(KTimeFormat, counter);
   141 	logFileName.Format(KTimeFormat, counter);
   147 
   142 
   148 	TRAPD(err,__PACKETLOG_NEWL(KTcpDumpFirstTag, logFileName, CPacketLogger::ETcpDump, KTcpDumpLinkType));
   143 	
   149 	if (err)
       
   150 		{
       
   151 		_LOG_L1C1(_L8("Trapped leave from __PACKETLOG_NEWL"));
       
   152 		}
       
   153 
       
   154 	const TUint KLogTextLen = KModemNameLen+KTimeStampLen+30;
   144 	const TUint KLogTextLen = KModemNameLen+KTimeStampLen+30;
   155 	TBuf8<KLogTextLen> logText;
   145 	TBuf8<KLogTextLen> logText;
   156 	_LIT8(KLogTimeText, "TcpDump log file time stamp:");
   146 	_LIT8(KLogTimeText, "TcpDump log file time stamp:");
   157 	_LIT8(KLogModemText, " for modem:");
   147 	_LIT8(KLogModemText, " for modem:");
   158 	logText.Append(KLogTimeText);
   148 	logText.Append(KLogTimeText);
   159 	logText.Append(logFileName);
   149 	logText.Append(logFileName);
   160 	logText.Append(KLogModemText);
   150 	logText.Append(KLogModemText);
   161 	logText.Append(modemName);
   151 	logText.Append(modemName);
   162 	_LOG_L1C1(logText);
   152 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_STARTFLOWL_3, logText);
   163 #endif
   153 #endif
   164 	}
   154 	}
   165 
   155 
   166 
   156 
   167 void CRawIP2Flow::LinkLayerUp()
   157 void CRawIP2Flow::LinkLayerUp()
   169  * This function is called when initialisation is complete and the Flow is
   159  * This function is called when initialisation is complete and the Flow is
   170  * ready to send/receive data. It notifies NifMan and the IP interface that it's
   160  * ready to send/receive data. It notifies NifMan and the IP interface that it's
   171  * ready to go.
   161  * ready to go.
   172  */
   162  */
   173 	{
   163 	{
   174 	_LOG_L1C2(_L8("CRawIP2Flow %08x:\tLinkLayerUp()"), this);
   164 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_LINKLAYERUP_1, "CRawIP2Flow %08x:\tLinkLayerUp()", this);
   175 
   165 
   176 	iLastRequestOriginator.ReplyTo(Id(), ESock::TCFDataClient::TStarted().CRef());
   166 	iLastRequestOriginator.ReplyTo(Id(), ESock::TCFDataClient::TStarted().CRef());
   177 	
   167 	
   178 	iStarted = ETrue;
   168 	iStarted = ETrue;
   179 	iStarting = EFalse;
   169 	iStarting = EFalse;
   186  * notify NifMan that the link has gone down, so it can delete the NIF.
   176  * notify NifMan that the link has gone down, so it can delete the NIF.
   187  *
   177  *
   188  * @param aError An error code to propagate to NifMan
   178  * @param aError An error code to propagate to NifMan
   189  */
   179  */
   190 	{
   180 	{
   191 	_LOG_L1C3(_L8("CRawIP2Flow %08x:\tLinkLayerDown(aError %d)"), this, aError);
   181 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_LINKLAYERDOWN_1, "CRawIP2Flow %08x:\tLinkLayerDown(aError %d)", (TUint)this, aError);
   192 	__PACKETLOG_DELETE;
   182 
   193 
   183 
   194 	if (iStopping)
   184 	if (iStopping)
   195 		{
   185 		{
   196 		iLastRequestOriginator.ReplyTo(Id(), ESock::TCFDataClient::TStopped(aError).CRef());
   186 		iLastRequestOriginator.ReplyTo(Id(), ESock::TCFDataClient::TStopped(aError).CRef());
   197 		}
   187 		}
   217  *
   207  *
   218  * @param aError A code specifying why the link is to be brought down
   208  * @param aError A code specifying why the link is to be brought down
   219  * @param aAction The action to take: disconnect or reconnect
   209  * @param aAction The action to take: disconnect or reconnect
   220  */
   210  */
   221 	{
   211 	{
   222 	_LOG_L1C3(_L8("CRawIP2Flow %08x:\tStopFlow(aError %d)"), this, aError);
   212 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_STOPFLOW_1, "CRawIP2Flow %08x:\tStopFlow(aError %d)",(TUint) this, aError);
   223 	__PACKETLOG_DELETE;
       
   224 	iStopping = ETrue;
   213 	iStopping = ETrue;
   225 	ShutDown(aError);
   214 	ShutDown(aError);
   226 	}
   215 	}
   227 
   216 
   228 
   217 
   235  *
   224  *
   236  * @param aState The current initialisation step
   225  * @param aState The current initialisation step
   237  * @param aError A possible error
   226  * @param aError A possible error
   238  */
   227  */
   239 	{
   228 	{
   240 	_LOG_L1C2(_L8("CRawIPFlow %08x:\tInitialiseL"),this);		
   229 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_INITIALISEL_1, "CRawIPFlow %08x:\tInitialiseL",this);
   241 
   230 
   242 	// Update local state from TSY information originally from Agent.
   231 	// Update local state from TSY information originally from Agent.
   243 	GetBinder()->UpdateContextConfigL(*iAgentProvision->iGprsConfig);
   232 	GetBinder()->UpdateContextConfigL(*iAgentProvision->iGprsConfig);
   244 	GetBinder()->UpdateConnectionSpeed(iAgentProvision->iConnectionSpeed);
   233 	GetBinder()->UpdateConnectionSpeed(iAgentProvision->iConnectionSpeed);
   245 
   234 
   256  *
   245  *
   257  * @param aState The current state
   246  * @param aState The current state
   258  * @param aError A possible error (only during initialisation)
   247  * @param aError A possible error (only during initialisation)
   259  */
   248  */
   260 	{
   249 	{
   261 	_LOG_L1C3(_L8("CRawIPFlow %08x:\tShutDown(aError %d)"),this, aError);	
   250 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_SHUTDOWN_1, "CRawIPFlow %08x:\tShutDown(aError %d)",(TUint)this, aError);
   262 			
   251 			
   263 	if (aError != KErrNone)
   252 	if (aError != KErrNone)
   264 		{
   253 		{
   265 		// Flow is shutting down due to an error.
   254 		// Flow is shutting down due to an error.
   266 		// The error code must be stored in order to call linklayer down
   255 		// The error code must be stored in order to call linklayer down
   299  *
   288  *
   300  * @param aState The new state
   289  * @param aState The new state
   301  * @param aError A possible error
   290  * @param aError A possible error
   302  */
   291  */
   303 	{
   292 	{
   304 	_LOG_L1C3(_L8("CRawIP2Flow %08x:\tUpdateContextState(aState %d)"), this, aState);
   293 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_UPDATECONTEXTSTATE_1, "CRawIP2Flow %08x:\tUpdateContextState(aState %d)", (TUint)this, aState);
   305 
   294 
   306 	// Note that we do not need to close the Flow down if there's been an
   295 	// Note that we do not need to close the Flow down if there's been an
   307 	// error, as the context state machine will do this for us.
   296 	// error, as the context state machine will do this for us.
   308 
   297 
   309 	iContextStatus = aState;
   298 	iContextStatus = aState;
   324 // MFlowBinderControl methods
   313 // MFlowBinderControl methods
   325 //
   314 //
   326 
   315 
   327 ESock::MLowerControl* CRawIP2Flow::GetControlL(const TDesC8& aProtocol)
   316 ESock::MLowerControl* CRawIP2Flow::GetControlL(const TDesC8& aProtocol)
   328 	{
   317 	{
   329 #ifdef __BTT_LOGGING__
   318 
   330 	//TBuf8<256> debugBuffer;
   319 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_GETCONTROLL_1, "CRawIP2Flow %08x:\tGetControlL(aProtocol %s)", (TUint) this, aProtocol);
   331 	//debugBuffer.Copy(aProtocol);
       
   332 	_LOG_L1C3(_L8("CRawIP2Flow %08x:\tGetControlL(aProtocol %S)"), this, &aProtocol);
       
   333 #endif
       
   334 
   320 
   335 	// IPv4 and ICMP Protocols
   321 	// IPv4 and ICMP Protocols
   336 	if (aProtocol.CompareF(KDescIp()) == 0 || aProtocol.CompareF(KDescIcmp()) == 0)
   322 	if (aProtocol.CompareF(KDescIp()) == 0 || aProtocol.CompareF(KDescIcmp()) == 0)
   337 		{
   323 		{
   338 		if (!iBinder)
   324 		if (!iBinder)
   339 			{
   325 			{
   340 			iBinder = new (ELeave) CIPv4Binder(*this, iTheLogger);
   326 			iBinder = new (ELeave) CIPv4Binder(*this);
   341 #ifdef RAWIP_HEADER_APPENDED_TO_PACKETS			
   327 #ifdef RAWIP_HEADER_APPENDED_TO_PACKETS			
   342  			iBinder->SetType(KIp4FrameType);
   328  			iBinder->SetType(KIp4FrameType);
   343 #endif // RAWIP_HEADER_APPENDED_TO_PACKETS			
   329 #endif // RAWIP_HEADER_APPENDED_TO_PACKETS			
   344 			}
   330 			}
   345 		else
   331 		else
   346 			{
   332 			{
   347 			_LOG_L1C2(_L8("CRawIP2Flow %08x:\tGetControlL(): IPv4 binder already exists"), this);
   333 			OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_GETCONTROLL_2, "CRawIP2Flow %08x:\tGetControlL(): IPv4 binder already exists", this);
   348 			}
   334 			}
   349 		}
   335 		}
   350 	// IPv6 Protocol
   336 	// IPv6 Protocol
   351 	else if (aProtocol.CompareF(KDescIp6()) == 0)
   337 	else if (aProtocol.CompareF(KDescIp6()) == 0)
   352 		{
   338 		{
   353 		if (!iBinder)
   339 		if (!iBinder)
   354 			{
   340 			{
   355 			iBinder = new (ELeave) CIPv6Binder(*this, iTheLogger);
   341 			iBinder = new (ELeave) CIPv6Binder(*this);
   356 #ifdef RAWIP_HEADER_APPENDED_TO_PACKETS			
   342 #ifdef RAWIP_HEADER_APPENDED_TO_PACKETS			
   357  			iBinder->SetType(KIp6FrameType);
   343  			iBinder->SetType(KIp6FrameType);
   358 #endif // RAWIP_HEADER_APPENDED_TO_PACKETS						
   344 #endif // RAWIP_HEADER_APPENDED_TO_PACKETS						
   359 			}
   345 			}
   360 		else
   346 		else
   361 			{
   347 			{
   362 			_LOG_L1C2(_L8("CRawIP2Flow %08x:\tGetControlL(): IPv6 binder already exists"), this);
   348 			OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_GETCONTROLL_3, "CRawIP2Flow %08x:\tGetControlL(): IPv6 binder already exists", this);
   363 			}
   349 			}
   364 		}		
   350 		}		
   365 	else
   351 	else
   366 		{
   352 		{
   367 		User::Leave(KErrNotSupported);
   353 		User::Leave(KErrNotSupported);
   390 	return iBinder->Bind(aReceiver, aControl);
   376 	return iBinder->Bind(aReceiver, aControl);
   391 	}
   377 	}
   392 
   378 
   393 void CRawIP2Flow::Unbind(ESock::MUpperDataReceiver* aUpperReceiver, ESock::MUpperControl* aUpperControl)
   379 void CRawIP2Flow::Unbind(ESock::MUpperDataReceiver* aUpperReceiver, ESock::MUpperControl* aUpperControl)
   394     {
   380     {
   395     _LOG_L1C2(_L8("CRawIP2Flow %08x:\tUnbind()"), this);
   381     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_UNBIND_1, "CRawIP2Flow %08x:\tUnbind()", this);
   396 
   382 
   397 	ASSERT(iBinder);
   383 	ASSERT(iBinder);
   398 	iBinder->Unbind(aUpperReceiver, aUpperControl);
   384 	iBinder->Unbind(aUpperReceiver, aUpperControl);
   399 
   385 
   400     delete iBinder;
   386     delete iBinder;
   503 			//to the flow representing the default, the datapath needs
   489 			//to the flow representing the default, the datapath needs
   504 			//to perform a transparent swap too, so that the upper layer
   490 			//to perform a transparent swap too, so that the upper layer
   505 			//doesn't notice anything. It does that by swapping the
   491 			//doesn't notice anything. It does that by swapping the
   506 			//flows below the binders.
   492 			//flows below the binders.
   507 			CBinderBase* localBinder = iBinder;
   493 			CBinderBase* localBinder = iBinder;
   508 			CBttLogger* logger = localBinder->iTheLogger;
       
   509 
   494 
   510 			TBinderControlProxy* localBinderControl = iBinderControl;
   495 			TBinderControlProxy* localBinderControl = iBinderControl;
   511 			iBinder = otherFlow->iBinder;
   496 			iBinder = otherFlow->iBinder;
   512 			otherFlow->iBinder->ChangeFlow(*this);
   497 			otherFlow->iBinder->ChangeFlow(*this);
   513 			localBinder->ChangeFlow(*otherFlow);
   498 			localBinder->ChangeFlow(*otherFlow);
   515 			iBinderControl = otherFlow->iBinderControl;
   500 			iBinderControl = otherFlow->iBinderControl;
   516 			otherFlow->iBinderControl = localBinderControl;
   501 			otherFlow->iBinderControl = localBinderControl;
   517 			otherFlow->iBinderControl->iFlow = otherFlow;
   502 			otherFlow->iBinderControl->iFlow = otherFlow;
   518 			iBinderControl->iFlow = this;
   503 			iBinderControl->iFlow = this;
   519 
   504 
   520 			iBinder->iTheLogger = logger;
       
   521 
   505 
   522 			iSubConnectionProvider.Close();
   506 			iSubConnectionProvider.Close();
   523 			iSubConnectionProvider.Open(address_cast<TNodeId>(rejoinMsg.iNodeId));
   507 			iSubConnectionProvider.Open(address_cast<TNodeId>(rejoinMsg.iNodeId));
   524 			}
   508 			}
   525 			break;
   509 			break;
   575 Just save the pointer for now - validate it later on StartFlow.
   559 Just save the pointer for now - validate it later on StartFlow.
   576 
   560 
   577 @param aData provisioning pointer from message
   561 @param aData provisioning pointer from message
   578 */
   562 */
   579 	{
   563 	{
   580 	_LOG_L1C2(_L8("CRawIP2Flow %08x:\tProvisionConfig()"), this);
   564 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_PROVISIONCONFIG_1, "CRawIP2Flow %08x:\tProvisionConfig()", this);
   581 	iProvisionError = KErrNone;
   565 	iProvisionError = KErrNone;
   582 
   566 
   583 	AccessPointConfig().Close();
   567 	AccessPointConfig().Close();
   584 	AccessPointConfig().Open(aConfigData);
   568 	AccessPointConfig().Open(aConfigData);
   585 
   569 
   586 	ASSERT(iBCAProvisionConfig == NULL);
   570 	ASSERT(iBCAProvisionConfig == NULL);
   587     iBCAProvisionConfig = static_cast<const CBCAProvision*>(AccessPointConfig().FindExtension(STypeId::CreateSTypeId(CBCAProvision::EUid, CBCAProvision::ETypeId)));
   571     iBCAProvisionConfig = static_cast<const CBCAProvision*>(AccessPointConfig().FindExtension(STypeId::CreateSTypeId(CBCAProvision::EUid, CBCAProvision::ETypeId)));
   588 
   572 
   589     if (iBCAProvisionConfig == NULL)
   573     if (iBCAProvisionConfig == NULL)
   590         {
   574         {
   591         _LOG_L1C1(_L8("CRawIP2Flow:\tProvisionConfigL() - CBCAProvision config incomplete"));
   575         OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_PROVISIONCONFIG_2, "CRawIP2Flow:\tProvisionConfigL() - CBCAProvision config incomplete");
   592 		iProvisionError = KErrCorrupt;
   576 		iProvisionError = KErrCorrupt;
   593 		return;
   577 		return;
   594         }
   578         }
   595 	}
   579 	}
   596 
   580 
   608     	}
   592     	}
   609 
   593 
   610     const CIPConfig* wcdmaIpProvision = static_cast<const CIPConfig*>(AccessPointConfig().FindExtension(STypeId::CreateSTypeId(CIPConfig::EUid, CIPConfig::ETypeId)));
   594     const CIPConfig* wcdmaIpProvision = static_cast<const CIPConfig*>(AccessPointConfig().FindExtension(STypeId::CreateSTypeId(CIPConfig::EUid, CIPConfig::ETypeId)));
   611     if (wcdmaIpProvision == NULL)
   595     if (wcdmaIpProvision == NULL)
   612         {
   596         {
   613         _LOG_L1C2(_L8("CRawIP2Flow %08x:\tDynamicProvisionConfigL() - WCDMA config incomplete"), this);
   597         OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CRAWIP2FLOW_DYNAMICPROVISIONCONFIGL_1, "CRawIP2Flow %08x:\tDynamicProvisionConfigL() - WCDMA config incomplete", this);
   614 		iProvisionError = KErrCorrupt;
   598 		iProvisionError = KErrCorrupt;
   615 		return;
   599 		return;
   616         }
   600         }
   617    	// Pass pointer to binder specific provisioning information to binder
   601    	// Pass pointer to binder specific provisioning information to binder
   618 	if (iBinder)
   602 	if (iBinder)