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". |
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) |