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