13 * |
13 * |
14 * Description: |
14 * Description: |
15 * |
15 * |
16 */ |
16 */ |
17 |
17 |
18 |
18 #include <pn_const.h> |
19 |
19 #include <iscnokiadefinitions.h> |
20 #include "cmodematsrv.h" |
20 #include "cmodematsrv.h" |
21 #include "modematclientsrv.h" |
21 #include "modematclientsrv.h" |
22 #include "modematsecpolicy.h" |
22 #include "modematsecpolicy.h" |
23 #include "cmodematsession.h" |
23 #include "cmodematsession.h" |
24 #include "cmodemathandler.h" |
24 #include "cmodemathandler.h" |
25 #include "modemattrace.h" |
25 #include "modemattrace.h" |
26 #include "catmessage.h" |
26 #include "catmessage.h" |
27 |
27 #include "cmodematpipecontroller.h" |
|
28 #include "OstTraceDefinitions.h" |
|
29 #ifdef OST_TRACE_COMPILER_IN_USE |
|
30 #include "cmodematsrvTraces.h" |
|
31 #endif |
|
32 |
|
33 _LIT8( KCursor, ">" ); |
|
34 _LIT8( KOkResponse, "OK" ); |
|
35 _LIT8( KErrorResponse, "ERROR" ); |
|
36 _LIT8( KOkResponseNoVerbose, "0" ); |
|
37 _LIT8( KErrorResponseNoVerbose, "4" ); |
|
38 |
|
39 _LIT8( KAtv, "ATV" ); |
|
40 _LIT8( KAtv1, "ATV1" ); |
|
41 _LIT8( KAtv0, "ATV0" ); |
|
42 _LIT8( KAtq, "ATQ" ); |
|
43 _LIT8( KAtq1, "ATQ1" ); |
|
44 _LIT8( KAtq0, "ATQ0" ); |
|
45 _LIT8( KAte, "ATE" ); |
|
46 _LIT8( KAte1, "ATE1" ); |
|
47 _LIT8( KAte0, "ATE0" ); |
|
48 |
|
49 _LIT8( KCmgs, "+CMGS" ); |
|
50 _LIT8( KCmgc, "+CMGC" ); |
|
51 _LIT8( KCmgsQuery, "+CMGS=?" ); |
|
52 _LIT8( KCmgcQuery, "+CMGC=?" ); |
|
53 |
|
54 // Carriage return needs to be checked from ATS3, or the following AT&V |
|
55 // fails, because its not yet informed to upper layers. |
|
56 _LIT8( KAts3, "ATS3=" ); |
|
57 const TUint8 KDefaultCarriageChar( 0xd ); // 13 |
|
58 |
|
59 const TUint8 KOff( 0x00 ); |
|
60 const TUint8 KOn( 0x01 ); |
|
61 |
|
62 const TInt KEchoOn( 1 ); |
|
63 const TInt KEchoOff( 2 ); |
|
64 const TInt KVerboseOn( 3 ); |
|
65 const TInt KVerboseOff( 4 ); |
|
66 const TInt KQuietOn( 5 ); |
|
67 const TInt KQuietOff( 6 ); |
|
68 const TInt KReplyTypeEditorStart( 1 ); |
|
69 const TInt KReplyTypeEditorEnd( 2 ); |
28 |
70 |
29 CModemAtSrv::CModemAtSrv( TInt aPriority ) : |
71 CModemAtSrv::CModemAtSrv( TInt aPriority ) : |
30 CPolicyServer( aPriority, KSrvPolicy ), |
72 CPolicyServer( aPriority, KSrvPolicy ), |
31 iHandler(NULL), |
73 iHandler(NULL), |
32 iDteId( 0 ) // iDteId defaults to 0 and it is updated by PNS_PIPE_CREATE_RESP |
74 iEcho( KOn ), |
33 { |
75 iEchoNotified( KInitialValue ), |
|
76 iEchoQueryIsOngoing( EFalse ), |
|
77 iVerbose( KOff ), |
|
78 iVerboseNotified( KInitialValue ), |
|
79 iVerboseQueryIsOngoing( EFalse ), |
|
80 iQuiet( KOff ), |
|
81 iQuietNotified( KInitialValue ), |
|
82 iQuietQueryIsOngoing( EFalse ), |
|
83 iCarriageReturn( KDefaultCarriageChar ), |
|
84 iCarriageReturnFound( EFalse ) |
|
85 { |
|
86 OstTrace0( TRACE_NORMAL, CMODEMATSRV_CMODEMATSRV, "CModemAtSrv::CModemAtSrv" ); |
34 } |
87 } |
35 |
88 |
36 CModemAtSrv::~CModemAtSrv() |
89 CModemAtSrv::~CModemAtSrv() |
37 { |
90 { |
|
91 OstTrace0( TRACE_NORMAL, DUP1_CMODEMATSRV_CMODEMATSRV, "CModemAtSrv::~CModemAtSrv" ); |
38 C_TRACE (( _L(">>CModemAtSrv::~CModemAtSrv()") )); |
92 C_TRACE (( _L(">>CModemAtSrv::~CModemAtSrv()") )); |
39 iAtMessageArray.ResetAndDestroy(); |
93 iAtMessageArray.ResetAndDestroy(); |
40 iAtMessageArray.Close(); |
94 iAtMessageArray.Close(); |
41 C_TRACE (( _L("<<CModemAtSrv::~CModemAtSrv()") )); |
95 C_TRACE (( _L("<<CModemAtSrv::~CModemAtSrv()") )); |
42 } |
96 } |
43 |
97 |
44 CModemAtSrv* CModemAtSrv::NewLC() |
98 CModemAtSrv* CModemAtSrv::NewLC() |
45 { |
99 { |
|
100 OstTrace0( TRACE_NORMAL, CMODEMATSRV_NEWLC, "CModemAtSrv::NewLC" ); |
46 CModemAtSrv* self = new (ELeave) CModemAtSrv( EPriorityNormal ); |
101 CModemAtSrv* self = new (ELeave) CModemAtSrv( EPriorityNormal ); |
47 CleanupStack::PushL( self ); |
102 CleanupStack::PushL( self ); |
48 self->ConstructL(); |
103 self->ConstructL(); |
49 self->StartL( KATExtSrvName ); |
104 self->StartL( KATExtSrvName ); |
50 RThread().SetPriority( EPriorityNormal ); |
105 RThread().SetPriority( EPriorityNormal ); |
51 return self; |
106 return self; |
52 } |
107 } |
53 |
108 |
54 void CModemAtSrv::RemovePipe() |
109 void CModemAtSrv::RemovePipe( CModemAtHandler* aHandler ) |
55 { |
110 { |
|
111 OstTrace0( TRACE_NORMAL, CMODEMATSRV_REMOVEPIPE, "CModemAtSrv::RemovePipe" ); |
56 C_TRACE((_L("CModemAtSrv::RemovePipe()") )); |
112 C_TRACE((_L("CModemAtSrv::RemovePipe()") )); |
57 iHandler->RemovePipe( iDteId ); |
113 ASSERT_PANIC_ALWAYS( NULL != aHandler ); |
|
114 aHandler->RemovePipe(); |
58 } |
115 } |
59 |
116 |
60 void CModemAtSrv::ClientClosed( CModemAtSession* aSession ) |
117 void CModemAtSrv::ClientClosed( CModemAtSession* aSession ) |
61 { |
118 { |
62 C_TRACE (( _L("CModemAtSrv::ClientClosed()") )); |
119 OstTrace0( TRACE_NORMAL, CMODEMATSRV_CLIENTCLOSED, "CModemAtSrv::ClientClosed" ); |
|
120 C_TRACE (( _L(">>CModemAtSrv::ClientClosed()") )); |
63 TInt index = iSessions.Find( aSession ); |
121 TInt index = iSessions.Find( aSession ); |
64 if( index >= 0 ) |
122 if( index >= 0 ) |
65 { |
123 { |
66 |
124 OstTrace1( TRACE_NORMAL, DUP1_CMODEMATSRV_CLIENTCLOSED, "CModemAtSrv::ClientClosed - Removing session;iSessions[index]->GetPluginType()=%d", iSessions[index]->GetPluginType() ); |
67 if( iSessions.Count() == 1 ) |
|
68 { |
|
69 C_TRACE((_L("Disconnecting ISI message handler ") )); |
|
70 iHandler->Disconnect( iDteId ); |
|
71 } |
|
72 |
|
73 C_TRACE((_L("Removing session (plugin type %d)"), iSessions[index]->GetPluginType() )); |
125 C_TRACE((_L("Removing session (plugin type %d)"), iSessions[index]->GetPluginType() )); |
74 iSessions.Remove( index ); |
126 iSessions.Remove( index ); |
|
127 |
|
128 if( ECommonPlugin == aSession->GetPluginType() ) |
|
129 { |
|
130 OstTrace0( TRACE_NORMAL, DUP2_CMODEMATSRV_CLIENTCLOSED, "CModemAtSrv::ClientClosed - Disconnecting ISI message handler" ); |
|
131 C_TRACE((_L("Disconnecting ISI message handler ") )); |
|
132 aSession->GetHandler()->Disconnect(); |
|
133 } |
|
134 |
|
135 for( int i = 0; i < iDteInfo.Count(); i++ ) |
|
136 { |
|
137 if( aSession == iDteInfo[i].iSession ) |
|
138 { |
|
139 OstTrace0( TRACE_NORMAL, DUP3_CMODEMATSRV_CLIENTCLOSED, "CModemAtSrv::ClientClosed - removing dte info" ); |
|
140 C_TRACE((_T("CModemAtSrv::ClientClosed() removing dte info") )); |
|
141 iDteInfo.Remove( i ); |
|
142 } |
|
143 } |
|
144 |
|
145 TBool pluginsFound( EFalse ); |
|
146 for( int i = 0; i < iSessions.Count(); i++ ) |
|
147 { |
|
148 if( 0 == iSessions[i]->GetName().Compare( aSession->GetName() ) ) |
|
149 { |
|
150 pluginsFound = ETrue; |
|
151 break; |
|
152 } |
|
153 } |
|
154 |
|
155 if( !pluginsFound && |
|
156 iHandler != aSession->GetHandler() ) |
|
157 { |
|
158 OstTrace0( TRACE_NORMAL, DUP4_CMODEMATSRV_CLIENTCLOSED, "CModemAtSrv::ClientClosed - Deleting handler" ); |
|
159 C_TRACE((_L("Deleting handler") )); |
|
160 iFreeChannels.Append( aSession->GetHandler()->GetChannelId() ); |
|
161 delete aSession->GetHandler(); |
|
162 } |
75 |
163 |
76 C_TRACE((_T("<<CModemAtSrv::ClientClosed()") )); |
164 C_TRACE((_T("<<CModemAtSrv::ClientClosed()") )); |
77 } |
165 } |
78 } |
166 } |
79 |
167 |
80 CSession2* CModemAtSrv::NewSessionL( const TVersion& aVersion, |
168 CSession2* CModemAtSrv::NewSessionL( const TVersion& aVersion, |
81 const RMessage2& /*aMessage*/ ) const |
169 const RMessage2& /*aMessage*/ ) const |
82 { |
170 { |
|
171 OstTrace0( TRACE_NORMAL, CMODEMATSRV_NEWSESSIONL, "CModemAtSrv::NewSessionL" ); |
83 C_TRACE (( _T("CModemAtSrv::NewSessionL()") )); |
172 C_TRACE (( _T("CModemAtSrv::NewSessionL()") )); |
84 CModemAtSrv& thisServer = const_cast<CModemAtSrv&>( *this ); |
173 CModemAtSrv& thisServer = const_cast<CModemAtSrv&>( *this ); |
85 CModemAtSession* session = CModemAtSession::NewL( thisServer, aVersion ); |
174 CModemAtSession* session = CModemAtSession::NewL( thisServer, aVersion ); |
86 CleanupStack::PushL( session ); |
175 CleanupStack::PushL( session ); |
87 thisServer.iSessions.AppendL( session ); |
176 thisServer.iSessions.AppendL( session ); |
140 void CModemAtSrv::HandleIntermediateDataInd( const TUint8 aDteId, |
288 void CModemAtSrv::HandleIntermediateDataInd( const TUint8 aDteId, |
141 const TATPluginInterface aPluginType, |
289 const TATPluginInterface aPluginType, |
142 const TDesC8& aResponse, |
290 const TDesC8& aResponse, |
143 const TUint8 aCommand ) |
291 const TUint8 aCommand ) |
144 { |
292 { |
|
293 OstTraceExt2( TRACE_NORMAL, CMODEMATSRV_HANDLEINTERMEDIATEDATAIND, "CModemAtSrv::HandleIntermediateDataInd;aDteId=%d;iSessions.Count()=%d", aDteId, iSessions.Count() ); |
145 C_TRACE ((_T("CModemAtSrv::HandleIntermediateDataInd aDteId = %d sessions = %d "), aDteId, iSessions.Count() )); |
294 C_TRACE ((_T("CModemAtSrv::HandleIntermediateDataInd aDteId = %d sessions = %d "), aDteId, iSessions.Count() )); |
146 C_TRACE ((_T("plugintype = %d command = %d"), (TInt)aPluginType, aCommand )); |
295 C_TRACE ((_T("plugintype = %d command = %d"), (TInt)aPluginType, aCommand )); |
147 |
296 |
148 if ( iAtMessageArray.Count() > 0 ) |
297 if ( iAtMessageArray.Count() > 0 ) |
149 { |
298 { |
|
299 OstTrace0( TRACE_NORMAL, DUP1_CMODEMATSRV_HANDLEINTERMEDIATEDATAIND, "CModemAtSrv::HandleIntermediateDataInd - iAtMessageArray[0]->ReceiveATResponse Intermediate data" ); |
150 C_TRACE((_L("iAtMessageArray[0]->ReceiveATResponse Intermediate data"))); |
300 C_TRACE((_L("iAtMessageArray[0]->ReceiveATResponse Intermediate data"))); |
151 iAtMessageArray[0]->ReceiveATResponse( aResponse, EFalse ); |
301 iAtMessageArray[0]->ReceiveATResponse( aResponse, EFalse, KErrNone ); |
152 } |
302 } |
153 else |
303 else |
154 { |
304 { |
|
305 OstTrace0( TRACE_NORMAL, DUP2_CMODEMATSRV_HANDLEINTERMEDIATEDATAIND, "CModemAtSrv::HandleIntermediateDataInd - INTERMEDIATE DATA received but no request active" ); |
155 C_TRACE ((_T("CModemAtSrv::HandleIntermediateDataInd INTERMEDIATE DATA received but no request active") )); |
306 C_TRACE ((_T("CModemAtSrv::HandleIntermediateDataInd INTERMEDIATE DATA received but no request active") )); |
156 } |
307 HandleUnsolicitedData( aDteId, aResponse); |
157 } |
308 } |
158 |
309 } |
159 void CModemAtSrv::HandleATResponse( const TUint8 aDteId, const TDesC8& aResponse, const TUint8 aCommand ) |
310 |
160 { |
311 void CModemAtSrv::HandleATResponse( |
|
312 const TUint8 aDteId, |
|
313 CModemAtHandler* aHandler, |
|
314 const TDesC8& aResponse, |
|
315 const TUint8 aCommand ) |
|
316 { |
|
317 OstTraceExt2( TRACE_NORMAL, CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse;aDteId=%d;iSessions.Count()=%d", aDteId, iSessions.Count() ); |
161 C_TRACE ((_T(">>CModemAtSrv::HandleATResponse aDteId = %d sessions = %d "), aDteId, iSessions.Count() )); |
318 C_TRACE ((_T(">>CModemAtSrv::HandleATResponse aDteId = %d sessions = %d "), aDteId, iSessions.Count() )); |
162 C_TRACE ((_T("CModemAtSrv::HandleATResponse command = %d"), aCommand )); |
319 C_TRACE ((_T("CModemAtSrv::HandleATResponse command = %d"), aCommand )); |
163 |
320 TRACE_ASSERT( NULL != aHandler ) |
|
321 TInt completeCode( KErrNone ); |
|
322 if( IsTextMessageMode( aHandler ) ) |
|
323 { |
|
324 OstTrace0( TRACE_NORMAL, DUP1_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Text message mode is on" ); |
|
325 C_TRACE(_L("Text message mode is on")); |
|
326 if( aResponse.Find( KCursor ) != KErrNotFound ) |
|
327 { |
|
328 OstTrace0( TRACE_NORMAL, DUP2_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - detected during text message mode" ); |
|
329 C_TRACE(_L("> detected during text message mode")); |
|
330 completeCode = KReplyTypeEditorStart; // replace later with EReplyTypeEditorStart |
|
331 } |
|
332 else if( aResponse.Find( KOkResponse ) != KErrNotFound || |
|
333 aResponse.Find( KErrorResponse ) != KErrNotFound || |
|
334 aResponse.Find( KOkResponseNoVerbose ) != KErrNotFound || |
|
335 aResponse.Find( KErrorResponseNoVerbose ) != KErrNotFound ) |
|
336 { |
|
337 OstTrace0( TRACE_NORMAL, DUP3_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Response detected after text message mode" ); |
|
338 C_TRACE(_L("Response detected after text message mode")); |
|
339 aHandler->SetTextMessageMode( EFalse ); |
|
340 completeCode = KReplyTypeEditorEnd; // replace later with EReplyTypeEditorEnd |
|
341 } |
|
342 if( completeCode == KErrNone ) |
|
343 { |
|
344 OstTrace0( TRACE_NORMAL, DUP4_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Response detected after text message mode (quiet mode)" ); |
|
345 C_TRACE(_L("Response detected after text message mode (quiet mode)")); |
|
346 aHandler->SetTextMessageMode( EFalse ); |
|
347 completeCode = KReplyTypeEditorEnd; |
|
348 } |
|
349 } |
|
350 |
|
351 if( iEchoQueryIsOngoing ) |
|
352 { |
|
353 OstTraceExt2( TRACE_NORMAL, DUP5_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Echo query ongoing.;iEcho=%d;iEchoNitified=%d", iEcho, iEchoNotified ); |
|
354 C_TRACE((_L("Echo query ongoing. current: %d, notified %d"), iEcho, iEchoNotified )); |
|
355 if( iEcho == KOff && iEchoNotified != KOff ) |
|
356 { |
|
357 OstTrace0( TRACE_NORMAL, DUP7_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Echo off, notify common plug-in." ); |
|
358 C_TRACE(_L("Echo off, notify common plug-in.")); |
|
359 HandleSignalInd( aDteId, KEchoOff ); |
|
360 iEchoNotified = KOff; |
|
361 } |
|
362 else if( iEcho == KOn && iEchoNotified != KOn ) |
|
363 { |
|
364 OstTrace0( TRACE_NORMAL, DUP8_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Echo on, notify common plug-in." ); |
|
365 C_TRACE(_L("Echo on, notify common plug-in.")); |
|
366 HandleSignalInd( aDteId, KEchoOn ); |
|
367 iEchoNotified = KOn; |
|
368 } |
|
369 iEchoQueryIsOngoing = EFalse; |
|
370 } |
|
371 else if( iVerboseQueryIsOngoing ) |
|
372 { |
|
373 OstTraceExt2( TRACE_NORMAL, DUP9_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Verbose query ongoing.;iVerbose=%d;iVerboseNotified=%d", iVerbose, iVerboseNotified ); |
|
374 C_TRACE((_L("Verbose query ongoing. current: %d, notified %d"), iVerbose, iVerboseNotified )); |
|
375 if( iVerbose == KOff && iVerboseNotified != KOff ) |
|
376 { |
|
377 OstTrace0( TRACE_NORMAL, DUP10_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Verbose off received, notify common plug-in." ); |
|
378 C_TRACE(_L("Verbose off received, notify common plug-in.")); |
|
379 HandleSignalInd( aDteId, KVerboseOff ); |
|
380 iVerboseNotified = KOff; |
|
381 } |
|
382 else if( iVerbose == KOn && iVerboseNotified != KOn ) |
|
383 { |
|
384 OstTrace0( TRACE_NORMAL, DUP11_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Verbose on received, notify common plug-in." ); |
|
385 C_TRACE(_L("Verbose on received, notify common plug-in.")); |
|
386 HandleSignalInd( aDteId, KVerboseOn ); |
|
387 iVerboseNotified = KOn; |
|
388 } |
|
389 iVerboseQueryIsOngoing = EFalse; |
|
390 } |
|
391 else if( iQuietQueryIsOngoing ) |
|
392 { |
|
393 OstTraceExt2( TRACE_NORMAL, DUP12_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Quiet query ongoing.;iQuiet=%d;iQuietNotified=%d", iQuiet, iQuietNotified ); |
|
394 C_TRACE((_L("Quiet query ongoing. current: %d, notified %d"), iQuiet, iQuietNotified )); |
|
395 if( iQuiet == KOff && iQuietNotified != KOff ) |
|
396 { |
|
397 OstTrace0( TRACE_NORMAL, DUP13_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Quiet off, notify common plug-in." ); |
|
398 C_TRACE(_L("Quiet off, notify common plug-in.")); |
|
399 HandleSignalInd( aDteId, KQuietOff ); |
|
400 iQuietNotified = KOff; |
|
401 } |
|
402 else if( iQuiet == KOn && iQuietNotified != KOn ) |
|
403 { |
|
404 OstTrace0( TRACE_NORMAL, DUP14_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Quiet on, notify common plug-in." ); |
|
405 C_TRACE(_L("Quiet on, notify common plug-in.")); |
|
406 HandleSignalInd( aDteId, KQuietOn ); |
|
407 iQuietNotified = KOn; |
|
408 } |
|
409 iQuietQueryIsOngoing = EFalse; |
|
410 } |
|
411 |
164 if ( iAtMessageArray.Count() > 0 ) |
412 if ( iAtMessageArray.Count() > 0 ) |
165 { |
413 { |
166 CAtMessage* tmp = iAtMessageArray[0]; |
414 CAtMessage* tmp = iAtMessageArray[0]; |
|
415 OstTrace1( TRACE_NORMAL, DUP15_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - iAtMessageArray[0]->ReceiveATResponse;tmp=%x", tmp ); |
167 C_TRACE((_L("iAtMessageArray[0]->ReceiveATResponse 0x%x"), tmp )); |
416 C_TRACE((_L("iAtMessageArray[0]->ReceiveATResponse 0x%x"), tmp )); |
168 tmp->ReceiveATResponse( aResponse, ETrue ); |
417 tmp->ReceiveATResponse( aResponse, ETrue, completeCode ); |
|
418 OstTrace0( TRACE_NORMAL, DUP16_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - Remove the first message in Fifo" ); |
169 C_TRACE((_L("CModemAtSrv::HandleATResponse Remove the first message in Fifo"))); |
419 C_TRACE((_L("CModemAtSrv::HandleATResponse Remove the first message in Fifo"))); |
170 RemoveFirstFromSendFifo(); |
420 RemoveFirstFromSendFifo(); |
|
421 OstTrace0( TRACE_NORMAL, DUP17_CMODEMATSRV_HANDLEATRESPONSE, "CModemAtSrv::HandleATResponse - SendNextFromFifo" ); |
171 C_TRACE((_L("CModemAtSrv::HandleATResponse SendNextFromFifo"))); |
422 C_TRACE((_L("CModemAtSrv::HandleATResponse SendNextFromFifo"))); |
172 SendNextFromFifo(); |
423 SendNextFromFifo(); |
173 } |
424 } |
174 else |
425 else |
175 { |
426 { |
176 HandleUnsolicitedData( aDteId, aResponse); |
427 HandleUnsolicitedData( aDteId, aResponse); |
177 } |
428 } |
178 C_TRACE ((_T("<<CModemAtSrv::HandleATResponse()") )); |
429 C_TRACE ((_T("<<CModemAtSrv::HandleATResponse()") )); |
179 } |
430 } |
180 |
431 |
181 TInt CModemAtSrv::ConnectToModem( CModemAtSession* aSession, TATPluginInterface aPluginType ) |
432 TInt CModemAtSrv::ConnectToModemL( CModemAtSession* aSession, TATPluginInterface aPluginType ) |
182 { |
433 { |
|
434 OstTrace1( TRACE_NORMAL, CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL;aSession=%x", aSession ); |
183 C_TRACE ((_T(">>CModemAtSrv::ConnectToModem 0x%x"), aSession)); |
435 C_TRACE ((_T(">>CModemAtSrv::ConnectToModem 0x%x"), aSession)); |
184 |
436 |
|
437 OstTraceExt2( TRACE_NORMAL, DUP1_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL;iSessions.Count()=%d;aPluginType=%d", iSessions.Count(), (TInt)aPluginType ); |
185 C_TRACE(( _L("session count: %d, type: %d"), iSessions.Count(), (TInt) aPluginType )); |
438 C_TRACE(( _L("session count: %d, type: %d"), iSessions.Count(), (TInt) aPluginType )); |
186 |
439 |
187 if( aPluginType == ECommonPlugin ) |
440 if( aPluginType == ECommonPlugin ) |
188 { |
441 { |
|
442 OstTrace1( TRACE_NORMAL, DUP2_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Common plug-in connecting;aSession=%x", aSession ); |
189 C_TRACE ((_T("Common plug-in connecting"))); |
443 C_TRACE ((_T("Common plug-in connecting"))); |
190 C_TRACE ((_T("<<CModemAtSrv::ConnectToModem iDteId: %d, session: 0x%x"), iDteId, aSession)); |
444 C_TRACE ((_T("<<CModemAtSrv::ConnectToModem session: 0x%x"), aSession)); |
191 return iHandler->Connect( iDteId ); |
445 |
|
446 if( KMaxDteCount >= GetDteCount() ) |
|
447 { |
|
448 TBool handlerAttached( EFalse ); |
|
449 for( TInt i = 0; i < iSessions.Count(); i++ ) |
|
450 { |
|
451 if( iHandler == iSessions[i]->GetHandler() ) |
|
452 { |
|
453 handlerAttached = ETrue; |
|
454 break; |
|
455 } |
|
456 } |
|
457 |
|
458 TUint8 devId( 0 ); |
|
459 TUint8 objId( 0 ); |
|
460 TBool dteFound( EFalse ); |
|
461 OstTrace1( TRACE_NORMAL, DUP3_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL;iDteInfo.Count()=%d", iDteInfo.Count() ); |
|
462 C_TRACE ((_T("iDteInfo.Count(): %d"), iDteInfo.Count())); |
|
463 for( TInt j = 0; j < iDteInfo.Count(); j++ ) |
|
464 { |
|
465 if( NULL == iDteInfo[j].iSession ) |
|
466 { |
|
467 dteFound = ETrue; |
|
468 CModemAtHandler* handler( NULL ); |
|
469 devId = iDteInfo[j].iDevId; |
|
470 objId = iDteInfo[j].iObjId; |
|
471 if( handlerAttached ) |
|
472 { |
|
473 OstTrace0( TRACE_NORMAL, DUP4_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Creating new handler" ); |
|
474 C_TRACE ((_T("Creating new handler"))); |
|
475 TUint8 channelId( 0 ); |
|
476 if( KErrNone == GetFreeChannelId( channelId ) ) |
|
477 { |
|
478 handler = CModemAtHandler::NewL( |
|
479 *this, |
|
480 channelId ); |
|
481 iDteInfo[j].iSession = aSession; |
|
482 aSession->SetHandler( handler ); |
|
483 } |
|
484 else |
|
485 { |
|
486 TRACE_ASSERT_ALWAYS; |
|
487 aSession->ModemConnected( KErrGeneral ); |
|
488 OstTrace0( TRACE_NORMAL, DUP14_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL No free channel id" ); |
|
489 C_TRACE ((_T("No free channel id"))); |
|
490 return KErrGeneral; |
|
491 } |
|
492 } |
|
493 else |
|
494 { |
|
495 OstTrace0( TRACE_NORMAL, DUP5_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Using already created handler" ); |
|
496 C_TRACE ((_T("Using already created handler"))); |
|
497 iDteInfo[j].iSession = aSession; |
|
498 aSession->SetHandler( iHandler ); |
|
499 } |
|
500 break; |
|
501 } |
|
502 } |
|
503 if( dteFound ) |
|
504 { |
|
505 return aSession->GetHandler()->Connect( devId, objId ); |
|
506 } |
|
507 else |
|
508 { |
|
509 OstTrace0( TRACE_NORMAL, DUP6_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - No dte info found. Possibly PNS_NAME_ADD_IND not received -> creating default pipe." ); |
|
510 C_TRACE ((_T("No dte info found. Possibly PNS_NAME_ADD_IND not received -> creating default pipe."))); |
|
511 |
|
512 CModemAtHandler* handler( NULL ); |
|
513 |
|
514 TUint KInitialDpObjId( 0x2f ); |
|
515 TUint dataportObjectid( KInitialDpObjId ); |
|
516 TBool found( EFalse ); |
|
517 |
|
518 if( !handlerAttached ) |
|
519 { |
|
520 OstTrace0( TRACE_NORMAL, DUP7_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Using already created handler" ); |
|
521 C_TRACE ((_T("Using already created handler"))); |
|
522 aSession->SetHandler( iHandler ); |
|
523 |
|
524 OstTrace0( TRACE_NORMAL, DUP8_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Calling GetDataportObjectId()" ); |
|
525 C_TRACE ((_T("Calling GetDataportObjectId()"))); |
|
526 aSession->GetHandler()->GetDataportObjectId( dataportObjectid ); |
|
527 |
|
528 OstTrace0( TRACE_NORMAL, DUP9_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Calling AddDevice()" ); |
|
529 C_TRACE ((_T("Calling AddDevice()"))); |
|
530 AddDevice( THIS_DEVICE, (TUint8)dataportObjectid ); |
|
531 |
|
532 OstTrace0( TRACE_NORMAL, DUP10_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Set session to this device" ); |
|
533 C_TRACE ((_T("Set session to this device"))); |
|
534 for( TInt j = 0; j < iDteInfo.Count(); j++ ) |
|
535 { |
|
536 if( NULL == iDteInfo[j].iSession ) // if iSession is NULL, the device handler is not attached |
|
537 { |
|
538 OstTrace0( TRACE_NORMAL, DUP11_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Device session found" ); |
|
539 C_TRACE ((_T("Device session found"))); |
|
540 iDteInfo[j].iSession = aSession; |
|
541 found = ETrue; |
|
542 } |
|
543 } |
|
544 if( !found ) |
|
545 { |
|
546 OstTrace0( TRACE_NORMAL, DUP12_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Device session not found" ); |
|
547 C_TRACE ((_T("Device session not found"))); |
|
548 if( iDteInfo.Count() == 1 ) |
|
549 { |
|
550 OstTrace0( TRACE_NORMAL, DUP13_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Set session to first device" ); |
|
551 C_TRACE ((_T("Set session to first device"))); |
|
552 iDteInfo[0].iSession = aSession; |
|
553 } |
|
554 } |
|
555 } |
|
556 else |
|
557 { |
|
558 // NOTE: It might be possible to have second device attached and then no pipe has been created |
|
559 // before this, EIscNokiaDataport2 has been used with first device. Now we need use |
|
560 // EIscNokiaDataport4. EIscNokiaDataport5 is not currently supported without PNS_NAME_ADD_IND. |
|
561 TUint8 channelId( 0 ); |
|
562 if( KErrNone == GetFreeChannelId( channelId ) ) |
|
563 { |
|
564 C_TRACE ((_T("Creating new handler"))); |
|
565 handler = CModemAtHandler::NewL( |
|
566 *this, |
|
567 channelId ); |
|
568 OstTrace0( TRACE_NORMAL, DUP15_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Using just created handler" ); |
|
569 C_TRACE ((_T("Using just created handler"))); |
|
570 aSession->SetHandler( handler ); |
|
571 |
|
572 OstTrace0( TRACE_NORMAL, DUP16_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Calling GetDataportObjectId()" ); |
|
573 C_TRACE ((_T("Calling GetDataportObjectId()"))); |
|
574 |
|
575 // Get dataport 4 |
|
576 aSession->GetHandler()->GetSecondaryDataportObjectId( dataportObjectid ); |
|
577 |
|
578 OstTrace0( TRACE_NORMAL, DUP17_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Calling AddDevice()" ); |
|
579 C_TRACE ((_T("Calling AddDevice()"))); |
|
580 AddDevice( THIS_DEVICE, (TUint8)dataportObjectid ); |
|
581 |
|
582 |
|
583 OstTrace0( TRACE_NORMAL, DUP18_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Set session to the second device" ); |
|
584 C_TRACE ((_T("Set session to the second device"))); |
|
585 |
|
586 for( TInt j = 0; j < iDteInfo.Count(); j++ ) |
|
587 { |
|
588 if( NULL == iDteInfo[j].iSession ) |
|
589 { |
|
590 OstTrace0( TRACE_NORMAL, DUP19_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Device session found" ); |
|
591 C_TRACE ((_T("Device session found"))); |
|
592 iDteInfo[j].iSession = aSession; |
|
593 found = ETrue; |
|
594 } |
|
595 } |
|
596 if( !found ) |
|
597 { |
|
598 OstTrace0( TRACE_NORMAL, DUP20_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Device 2 session not found" ); |
|
599 C_TRACE ((_T("Device 2 session not found"))); |
|
600 if( iDteInfo.Count() == 2 ) |
|
601 { |
|
602 OstTrace0( TRACE_NORMAL, DUP21_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Set session to second device" ); |
|
603 C_TRACE ((_T("Set session to second device"))); |
|
604 iDteInfo[1].iSession = aSession; |
|
605 } |
|
606 } |
|
607 } |
|
608 else |
|
609 { |
|
610 TRACE_ASSERT_ALWAYS; |
|
611 aSession->ModemConnected( KErrGeneral ); |
|
612 OstTrace0( TRACE_NORMAL, DUP26_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL No free channel id" ); |
|
613 C_TRACE ((_T("No free channel id"))); |
|
614 } |
|
615 } |
|
616 if( found ) |
|
617 { |
|
618 OstTrace0( TRACE_NORMAL, DUP22_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Calling Connect( THIS_DEVICE, dataportObjectid )" ); |
|
619 C_TRACE ((_T("Calling Connect( THIS_DEVICE, dataportObjectid )"))); |
|
620 return aSession->GetHandler()->Connect( THIS_DEVICE, dataportObjectid ); |
|
621 } |
|
622 else |
|
623 { |
|
624 C_TRACE ((_T("no dte info found, connect failed"))); |
|
625 OstTrace0( TRACE_NORMAL, DUP27_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL no dte info found, connect failed" ); |
|
626 aSession->ModemConnected( KErrGeneral ); |
|
627 } |
|
628 } |
|
629 } |
|
630 else |
|
631 { |
|
632 OstTrace0( TRACE_NORMAL, DUP23_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Too many connections, connect failed" ); |
|
633 C_TRACE ((_T("Too many connections, connect failed"))); |
|
634 aSession->ModemConnected( KErrGeneral ); |
|
635 } |
192 } |
636 } |
193 else |
637 else |
194 { |
638 { |
|
639 OstTrace0( TRACE_NORMAL, DUP24_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL - Atext plug-in connecting" ); |
195 C_TRACE ((_T("Atext plug-in connecting"))); |
640 C_TRACE ((_T("Atext plug-in connecting"))); |
196 |
641 |
|
642 for( TInt i = 0; i < iSessions.Count(); i++ ) |
|
643 { |
|
644 if( ECommonPlugin == iSessions[i]->GetPluginType() && |
|
645 0 == iSessions[i]->GetName().Compare( aSession->GetName() ) ) |
|
646 { |
|
647 aSession->SetDteId( iSessions[i]->GetDteId() ); |
|
648 aSession->SetHandler( iSessions[i]->GetHandler() ); |
|
649 break; |
|
650 } |
|
651 } |
197 aSession->ModemConnected( KErrNone ); |
652 aSession->ModemConnected( KErrNone ); |
|
653 |
|
654 OstTrace1( TRACE_NORMAL, DUP25_CMODEMATSRV_CONNECTTOMODEML, "CModemAtSrv::ConnectToModemL;aSession=%x", aSession ); |
198 C_TRACE ((_T("<<CModemAtSrv::ConnectToModem 0x%x"), aSession)); |
655 C_TRACE ((_T("<<CModemAtSrv::ConnectToModem 0x%x"), aSession)); |
199 return KErrNone; |
656 } |
200 } |
657 return KErrNone; |
201 |
|
202 } |
658 } |
203 |
659 |
204 void CModemAtSrv::AddToSendFifo( const TATPluginInterface aPluginType, CAtMessage* aMessage ) |
660 void CModemAtSrv::AddToSendFifo( const TATPluginInterface aPluginType, CAtMessage* aMessage ) |
205 { |
661 { |
|
662 OstTraceExt2( TRACE_NORMAL, CMODEMATSRV_ADDTOSENDFIFO, "CModemAtSrv::AddToSendFifo;aPluginType=%d;aMessage=%p", (TInt)aPluginType, aMessage ); |
206 C_TRACE (( _T("CModemAtSrv::AddToSendFifo( aPluginType: %d, aMessage: 0x%x)"), (TInt)aPluginType, aMessage)); |
663 C_TRACE (( _T("CModemAtSrv::AddToSendFifo( aPluginType: %d, aMessage: 0x%x)"), (TInt)aPluginType, aMessage)); |
207 |
664 |
208 iAtMessageArray.Append( aMessage ); // only one AT command at the time in modem |
665 iAtMessageArray.Append( aMessage ); // only one AT command at the time in modem |
209 |
666 |
210 if( iAtMessageArray.Count() == 1 ) //if empty Fifo send immediately |
667 if( iAtMessageArray.Count() == 1 ) //if empty Fifo send immediately |
211 { |
668 { |
|
669 OstTrace0( TRACE_NORMAL, DUP1_CMODEMATSRV_ADDTOSENDFIFO, "CModemAtSrv::AddToSendFifo - Sending message immediately" ); |
212 C_TRACE((_L("Sending message immediately"))); |
670 C_TRACE((_L("Sending message immediately"))); |
213 iHandler->SendATCommand( iDteId, |
671 CModemAtSession* session = aMessage->GetSession(); |
214 aPluginType, |
672 if( session ) |
215 aMessage->GetMessageType(), |
673 { |
216 aMessage->GetBuffer() ); |
674 CModemAtHandler* handler( session->GetHandler() ); |
|
675 PeekAtCommand( handler, aMessage->GetBuffer() ); |
|
676 |
|
677 handler->SendATCommand( |
|
678 aPluginType, |
|
679 aMessage->GetMessageType(), |
|
680 aMessage->GetBuffer() ); |
|
681 } |
|
682 else |
|
683 { |
|
684 OstTrace0( TRACE_NORMAL, DUP2_CMODEMATSRV_ADDTOSENDFIFO, "CModemAtSrv::AddToSendFifo - Session NULL" ); |
|
685 C_TRACE((_L("Session NULL"))); |
|
686 TRACE_ASSERT_ALWAYS; |
|
687 } |
217 } |
688 } |
218 } |
689 } |
219 |
690 |
220 void CModemAtSrv::RemoveFirstFromSendFifo() |
691 void CModemAtSrv::RemoveFirstFromSendFifo() |
221 { |
692 { |
|
693 OstTrace1( TRACE_NORMAL, CMODEMATSRV_REMOVEFIRSTFROMSENDFIFO, "CModemAtSrv::RemoveFirstFromSendFifo;iAtMessageArray.Count()=%d", iAtMessageArray.Count() ); |
222 C_TRACE(( _T("CModemAtSrv::RemoveFirstFromSendFifo iAtMessageArray.Count = %d"), iAtMessageArray.Count() )); |
694 C_TRACE(( _T("CModemAtSrv::RemoveFirstFromSendFifo iAtMessageArray.Count = %d"), iAtMessageArray.Count() )); |
223 if( iAtMessageArray.Count( ) > 0 ) |
695 if( iAtMessageArray.Count( ) > 0 ) |
224 { |
696 { |
|
697 OstTrace0( TRACE_NORMAL, DUP1_CMODEMATSRV_REMOVEFIRSTFROMSENDFIFO, "CModemAtSrv::RemoveFirstFromSendFifo - 1" ); |
225 C_TRACE (( _T("CModemAtSrv::RemoveFirstFromSendFifo 1") )); |
698 C_TRACE (( _T("CModemAtSrv::RemoveFirstFromSendFifo 1") )); |
226 CAtMessage* msg = iAtMessageArray[0]; |
699 CAtMessage* msg = iAtMessageArray[0]; |
|
700 OstTrace1( TRACE_NORMAL, DUP2_CMODEMATSRV_REMOVEFIRSTFROMSENDFIFO, "CModemAtSrv::RemoveFirstFromSendFifo - 2;msg=%x", msg ); |
227 C_TRACE (( _T("CModemAtSrv::RemoveFirstFromSendFifo 2 0x%x"), msg )); |
701 C_TRACE (( _T("CModemAtSrv::RemoveFirstFromSendFifo 2 0x%x"), msg )); |
228 iAtMessageArray.Remove(0); |
702 iAtMessageArray.Remove(0); |
229 if( msg ) |
703 if( msg ) |
230 { |
704 { |
|
705 OstTrace0( TRACE_NORMAL, DUP3_CMODEMATSRV_REMOVEFIRSTFROMSENDFIFO, "CModemAtSrv::RemoveFirstFromSendFifo - 3" ); |
231 C_TRACE (( _T("CModemAtSrv::RemoveFirstFromSendFifo 3") )); |
706 C_TRACE (( _T("CModemAtSrv::RemoveFirstFromSendFifo 3") )); |
232 delete msg; |
707 delete msg; |
233 } |
708 } |
234 else |
709 else |
235 { |
710 { |
236 TRACE_ASSERT_ALWAYS; |
711 TRACE_ASSERT_ALWAYS; |
237 } |
712 } |
|
713 OstTrace0( TRACE_NORMAL, DUP4_CMODEMATSRV_REMOVEFIRSTFROMSENDFIFO, "CModemAtSrv::RemoveFirstFromSendFifo - 4" ); |
238 C_TRACE (( _T("CModemAtSrv::RemoveFirstFromSendFifo 4") )); |
714 C_TRACE (( _T("CModemAtSrv::RemoveFirstFromSendFifo 4") )); |
239 } |
715 } |
|
716 OstTrace0( TRACE_NORMAL, DUP5_CMODEMATSRV_REMOVEFIRSTFROMSENDFIFO, "CModemAtSrv::RemoveFirstFromSendFifo - 5" ); |
240 C_TRACE (( _T("CModemAtSrv::RemoveFirstFromSendFifo 5") )); |
717 C_TRACE (( _T("CModemAtSrv::RemoveFirstFromSendFifo 5") )); |
241 } |
718 } |
242 |
719 |
243 void CModemAtSrv::SendNextFromFifo() |
720 void CModemAtSrv::SendNextFromFifo() |
244 { |
721 { |
|
722 OstTrace1( TRACE_NORMAL, CMODEMATSRV_SENDNEXTFROMFIFO, "CModemAtSrv::SendNextFromFifo - fifo message count;iAtMessageArray.Count()=%d", iAtMessageArray.Count() ); |
245 C_TRACE ((_T("CModemAtSrv::SendNextFromFifo fifo has %d message(s)"), iAtMessageArray.Count() )); |
723 C_TRACE ((_T("CModemAtSrv::SendNextFromFifo fifo has %d message(s)"), iAtMessageArray.Count() )); |
246 |
724 |
247 TPtr8 ptr(0,0); |
725 TPtr8 ptr( 0, 0 ); |
248 if( iAtMessageArray.Count() > 0 ) |
726 if( iAtMessageArray.Count() > 0 ) |
249 { |
727 { |
|
728 OstTrace0( TRACE_NORMAL, DUP1_CMODEMATSRV_SENDNEXTFROMFIFO, "CModemAtSrv::SendNextFromFifo - Messages in buffer... Sending message" ); |
250 C_TRACE((_L("Messages in buffer... Sending message"))); |
729 C_TRACE((_L("Messages in buffer... Sending message"))); |
251 ptr.Set( iAtMessageArray[0]->GetBuffer() ); |
730 ptr.Set( iAtMessageArray[0]->GetBuffer() ); |
252 |
731 |
253 C_TRACE (( _T("iHandler->SendATCommand()") )); |
732 CModemAtHandler* handler( iAtMessageArray[0]->GetSession()->GetHandler() ); |
254 iHandler->SendATCommand( iDteId, |
733 if( handler ) |
255 iAtMessageArray[0]->GetSession()->GetPluginType(), |
734 { |
256 iAtMessageArray[0]->GetMessageType(), |
735 OstTrace0( TRACE_NORMAL, DUP2_CMODEMATSRV_SENDNEXTFROMFIFO, "CModemAtSrv::SendNextFromFifo - iHandler->SendATCommand()" ); |
257 ptr ); |
736 C_TRACE (( _T("iHandler->SendATCommand()") )); |
|
737 PeekAtCommand( handler, ptr ); |
|
738 handler->SendATCommand( |
|
739 iAtMessageArray[0]->GetSession()->GetPluginType(), |
|
740 iAtMessageArray[0]->GetMessageType(), |
|
741 ptr ); |
|
742 } |
|
743 else |
|
744 { |
|
745 OstTrace0( TRACE_NORMAL, DUP3_CMODEMATSRV_SENDNEXTFROMFIFO, "CModemAtSrv::SendNextFromFifo - Handler NULL" ); |
|
746 C_TRACE((_L("Handler NULL"))); |
|
747 TRACE_ASSERT_ALWAYS; |
|
748 } |
258 } |
749 } |
259 } |
750 } |
260 |
751 |
261 void CModemAtSrv::CancelFifoRequests( const CModemAtSession* aSession ) |
752 void CModemAtSrv::CancelFifoRequests( const CModemAtSession* aSession ) |
262 { |
753 { |
|
754 OstTrace1( TRACE_NORMAL, CMODEMATSRV_CANCELFIFOREQUESTS, "CModemAtSrv::CancelFifoRequests;iAtMessageArray.Count()=%d", iAtMessageArray.Count() ); |
263 C_TRACE((_T(">>CModemAtSrv::CancelFifoRequests count: %d"), iAtMessageArray.Count() )); |
755 C_TRACE((_T(">>CModemAtSrv::CancelFifoRequests count: %d"), iAtMessageArray.Count() )); |
264 TInt messageCount = iAtMessageArray.Count(); |
756 TInt messageCount = iAtMessageArray.Count(); |
265 for( TInt i = 0; i < messageCount; i++ ) |
757 for( TInt i = 0; i < messageCount; i++ ) |
266 { |
758 { |
|
759 OstTrace1( TRACE_NORMAL, DUP1_CMODEMATSRV_CANCELFIFOREQUESTS, "CModemAtSrv::CancelFifoRequests - ;i=%d", i ); |
267 C_TRACE((_T("CancelFifoRequests %d"), i )); |
760 C_TRACE((_T("CancelFifoRequests %d"), i )); |
268 CAtMessage* msg = iAtMessageArray[ i ]; |
761 CAtMessage* msg = iAtMessageArray[ i ]; |
269 if( msg ) |
762 if( msg ) |
270 { |
763 { |
|
764 OstTrace1( TRACE_NORMAL, DUP2_CMODEMATSRV_CANCELFIFOREQUESTS, "CModemAtSrv::CancelFifoRequests - Found Request:;msg=%x", msg ); |
271 C_TRACE((_T("Found Request: 0x%x"),msg )); |
765 C_TRACE((_T("Found Request: 0x%x"),msg )); |
272 if( msg->GetSession() == aSession) |
766 if( msg->GetSession() == aSession) |
273 { |
767 { |
|
768 OstTrace0( TRACE_NORMAL, DUP3_CMODEMATSRV_CANCELFIFOREQUESTS, "CModemAtSrv::CancelFifoRequests - canceling request" ); |
274 C_TRACE((_T("CancelFifoRequests - canceling request") )); |
769 C_TRACE((_T("CancelFifoRequests - canceling request") )); |
275 msg->CancelRequest(); |
770 msg->CancelRequest(); |
|
771 OstTrace0( TRACE_NORMAL, DUP4_CMODEMATSRV_CANCELFIFOREQUESTS, "CModemAtSrv::CancelFifoRequests - delete msg" ); |
276 C_TRACE (( _T("CModemAtSrv::CancelFifoRequest delete msg") )); |
772 C_TRACE (( _T("CModemAtSrv::CancelFifoRequest delete msg") )); |
277 delete msg; |
773 delete msg; |
278 } |
774 } |
279 } |
775 } |
280 } |
776 } |
|
777 OstTrace1( TRACE_NORMAL, DUP5_CMODEMATSRV_CANCELFIFOREQUESTS, "CModemAtSrv::CancelFifoRequests - iAtMessageArray.Remove;messageCount=%d", messageCount ); |
281 C_TRACE (( _T("CModemAtSrv::CancelFifoRequest iAtMessageArray.Remove %d messages"), messageCount )); |
778 C_TRACE (( _T("CModemAtSrv::CancelFifoRequest iAtMessageArray.Remove %d messages"), messageCount )); |
282 for( TInt j = 0; j < messageCount && iAtMessageArray.Count() > 0; j++ ) |
779 for( TInt j = 0; j < messageCount && iAtMessageArray.Count() > 0; j++ ) |
283 { |
780 { |
284 iAtMessageArray.Remove( 0 ); |
781 iAtMessageArray.Remove( 0 ); |
285 } |
782 } |
286 C_TRACE(( _T("<<CModemAtSrv::CancelFifoRequests()") )); |
783 C_TRACE(( _T("<<CModemAtSrv::CancelFifoRequests()") )); |
287 } |
784 } |
288 |
785 |
289 TInt CModemAtSrv::SessionCount() |
786 TInt CModemAtSrv::SessionCount() |
290 { |
787 { |
|
788 OstTrace1( TRACE_NORMAL, CMODEMATSRV_SESSIONCOUNT, "CModemAtSrv::SessionCount;iSessions.Count()=%d", iSessions.Count() ); |
291 C_TRACE(( _T("CModemAtSrv::SessionCount() %d"), iSessions.Count() )); |
789 C_TRACE(( _T("CModemAtSrv::SessionCount() %d"), iSessions.Count() )); |
292 return iSessions.Count(); |
790 return iSessions.Count(); |
293 } |
791 } |
294 |
792 |
295 void CModemAtSrv::SetDteIdAndConnect( const TUint8 aDteId, const TInt aConnectionError ) |
793 void CModemAtSrv::SetDteIdAndConnect( const TUint8 aDteId, const TInt aConnectionError ) |
296 { |
794 { |
|
795 OstTrace1( TRACE_NORMAL, CMODEMATSRV_SETDTEIDANDCONNECT, "CModemAtSrv::SetDteIdAndConnect;aDteId=%d", aDteId ); |
297 C_TRACE(( _T("CModemAtSrv::SetDteIdAndConnect( %d )"), aDteId )); |
796 C_TRACE(( _T("CModemAtSrv::SetDteIdAndConnect( %d )"), aDteId )); |
298 iDteId = aDteId; |
797 OstTrace1( TRACE_NORMAL, DUP1_CMODEMATSRV_SETDTEIDANDCONNECT, "CModemAtSrv::SetDteIdAndConnect;iSessions.Count()=%d", iSessions.Count() ); |
299 |
|
300 C_TRACE ((_T("sessions = %d"), iSessions.Count() )); |
798 C_TRACE ((_T("sessions = %d"), iSessions.Count() )); |
|
799 |
301 for( TInt i = 0; i < iSessions.Count(); i++ ) |
800 for( TInt i = 0; i < iSessions.Count(); i++ ) |
302 { |
801 { |
303 if( iSessions[i]->IsConnectReqActive() ) |
802 if( iSessions[i]->IsConnectReqActive() ) |
304 { |
803 { |
|
804 OstTrace0( TRACE_NORMAL, DUP2_CMODEMATSRV_SETDTEIDANDCONNECT, "CModemAtSrv::SetDteIdAndConnect - set sessions to connected" ); |
305 C_TRACE (( _T("set sessions to connected") )); |
805 C_TRACE (( _T("set sessions to connected") )); |
|
806 iSessions[i]->SetDteId( aDteId ); |
306 iSessions[i]->ModemConnected( aConnectionError ); |
807 iSessions[i]->ModemConnected( aConnectionError ); |
307 } |
808 } |
308 } |
809 } |
309 } |
810 } |
310 |
811 |
|
812 TBool CModemAtSrv::IsPipeInDataMode( CModemAtHandler* aHandler ) |
|
813 { |
|
814 OstTrace1( TRACE_NORMAL, CMODEMATSRV_ISPIPEINDATAMODE, "CModemAtSrv::IsPipeInDataMode;aHandler=%x", aHandler ); |
|
815 C_TRACE(( _T("CModemAtSrv::IsPipeInDataMode() handler: 0x%x"), aHandler )); |
|
816 TRACE_ASSERT( NULL != aHandler ) |
|
817 return aHandler->IsPipeInDataMode(); |
|
818 } |
|
819 |
|
820 TBool CModemAtSrv::IsTextMessageMode( CModemAtHandler* aHandler ) |
|
821 { |
|
822 OstTrace1( TRACE_NORMAL, CMODEMATSRV_ISTEXTMESSAGEMODE, "CModemAtSrv::IsTextMessageMode;aHandler=%x", aHandler ); |
|
823 C_TRACE(( _T("CModemAtSrv::IsTextMessageMode() handler: 0x%x"), aHandler )); |
|
824 TRACE_ASSERT( NULL != aHandler ) |
|
825 return aHandler->IsTextMessageMode(); |
|
826 } |
|
827 |
|
828 void CModemAtSrv::PeekAtCommand( CModemAtHandler* aHandler, TDes8& aCmd ) |
|
829 { |
|
830 OstTrace1( TRACE_NORMAL, CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand;aHandler=%x", aHandler ); |
|
831 C_TRACE(( _T("CModemAtSrv::PeekAtCommand() handler: 0x%x"), aHandler )); |
|
832 TRACE_ASSERT( NULL != aHandler ) |
|
833 |
|
834 if( ( aCmd.Find( KCmgs ) != KErrNotFound || |
|
835 aCmd.Find( KCmgc ) != KErrNotFound ) && |
|
836 aCmd.Find( KCmgsQuery ) == KErrNotFound && |
|
837 aCmd.Find( KCmgcQuery ) == KErrNotFound ) |
|
838 { |
|
839 OstTrace0( TRACE_NORMAL, DUP1_CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand - +CMGS or +CMGC detected. The indications after this will be ignored." ); |
|
840 C_TRACE(_L("+CMGS or +CMGC detected. The indications after this will be ignored.")); |
|
841 aHandler->SetTextMessageMode( ETrue ); |
|
842 } |
|
843 // no else |
|
844 |
|
845 if( aCmd.Find( KAtv1 ) != KErrNotFound ) |
|
846 { |
|
847 OstTrace0( TRACE_NORMAL, DUP2_CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand - ATV1 received" ); |
|
848 C_TRACE(( _T("ATV1 received") )); |
|
849 iVerbose = KOn; |
|
850 iVerboseQueryIsOngoing = ETrue; |
|
851 } |
|
852 else if( aCmd.Find( KAtv0 ) != KErrNotFound || |
|
853 aCmd.Find( KAtv ) != KErrNotFound ) |
|
854 { |
|
855 OstTrace0( TRACE_NORMAL, DUP3_CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand - ATV0 received" ); |
|
856 C_TRACE(( _T("ATV(0) received") )); |
|
857 iVerbose = KOff; |
|
858 iVerboseQueryIsOngoing = ETrue; |
|
859 } |
|
860 else if( aCmd.Find( KAtq1 ) != KErrNotFound ) |
|
861 { |
|
862 OstTrace0( TRACE_NORMAL, DUP4_CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand - ATQ1 received" ); |
|
863 C_TRACE(( _T("ATQ1 received") )); |
|
864 iQuiet = KOn; |
|
865 iQuietQueryIsOngoing = ETrue; |
|
866 } |
|
867 else if( aCmd.Find( KAtq0 ) != KErrNotFound || |
|
868 aCmd.Find( KAtq ) != KErrNotFound ) |
|
869 { |
|
870 OstTrace0( TRACE_NORMAL, DUP5_CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand - ATQ0 received" ); |
|
871 C_TRACE(( _T("ATQ(0) received") )); |
|
872 iQuiet = KOff; |
|
873 iQuietQueryIsOngoing = ETrue; |
|
874 } |
|
875 else if( aCmd.Find( KAte1 ) != KErrNotFound ) |
|
876 { |
|
877 OstTrace0( TRACE_NORMAL, DUP6_CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand - ATE1 received" ); |
|
878 C_TRACE(( _T("ATE(1) received") )); |
|
879 iEcho = KOn; |
|
880 iEchoQueryIsOngoing = ETrue; |
|
881 } |
|
882 else if( aCmd.Find( KAte0 ) != KErrNotFound || |
|
883 aCmd.Find( KAte ) != KErrNotFound ) |
|
884 { |
|
885 OstTrace0( TRACE_NORMAL, DUP7_CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand - ATE0 received" ); |
|
886 C_TRACE(( _T("ATE(0) received") )); |
|
887 iEcho = KOff; |
|
888 iEchoQueryIsOngoing = ETrue; |
|
889 } |
|
890 else if( aCmd.Find( KAts3 ) != KErrNotFound ) |
|
891 { |
|
892 OstTrace0( TRACE_NORMAL, DUP8_CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand - ATS3 received" ); |
|
893 C_TRACE(( _T("ATS3= received, saving it for the next profile query") )); |
|
894 |
|
895 TInt valueLength = aCmd.Length() - KAts3().Length() - 1; |
|
896 OstTrace1( TRACE_NORMAL, DUP9_CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand;valueLength=%d", valueLength ); |
|
897 OstTrace1( TRACE_NORMAL, DUP10_CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand;KAts3Length=%d", KAts3().Length() ); |
|
898 C_TRACE(( _T("Reading %d char's starting from %d."), valueLength, KAts3().Length() )); |
|
899 if( valueLength > 0 ) |
|
900 { |
|
901 TLex8 lex( aCmd.Mid( KAts3().Length(), valueLength ) ); |
|
902 TInt value; |
|
903 if( lex.Val(value) == KErrNone ) |
|
904 { |
|
905 C_TRACE(( _T("iCarriageReturn 0x%x "), value )); |
|
906 iCarriageReturn = (TUint8)value; |
|
907 iCarriageReturnFound = ETrue; |
|
908 } |
|
909 } |
|
910 // no else |
|
911 } |
|
912 |
|
913 if( aCmd.Find( KAts3 ) == KErrNotFound && |
|
914 iCarriageReturnFound ) |
|
915 { |
|
916 OstTrace0( TRACE_NORMAL, DUP11_CMODEMATSRV_PEEKATCOMMAND, "CModemAtSrv::PeekAtCommand - ATE=? received" ); |
|
917 C_TRACE(( _T("ATS3 has set the carriage return, using it once for profile query that will notify it to upper layers") )); |
|
918 aCmd.Copy( aCmd.Mid( 0, aCmd.Length() - 1 ) ); |
|
919 aCmd.Append( iCarriageReturn ); |
|
920 iCarriageReturnFound = EFalse; |
|
921 } |
|
922 |
|
923 } |
|
924 |
|
925 TBool CModemAtSrv::IsEchoNotified( const TUint8 aEchoValue ) |
|
926 { |
|
927 OstTrace1( TRACE_NORMAL, CMODEMATSRV_ISECHONOTIFIED, "CModemAtSrv::IsEchoNotified;aEchoValue=%d", aEchoValue ); |
|
928 C_TRACE(( _T("CModemAtSrv::IsEchoNotified( %d )"), aEchoValue )); |
|
929 if( aEchoValue != iEchoNotified ) |
|
930 { |
|
931 OstTrace0( TRACE_NORMAL, DUP1_CMODEMATSRV_ISECHONOTIFIED, "CModemAtSrv::IsEchoNotified - Echo value is not notified yet." ); |
|
932 C_TRACE(( _T("Echo value is not notified yet.") )); |
|
933 return EFalse; |
|
934 } |
|
935 else |
|
936 { |
|
937 OstTrace0( TRACE_NORMAL, DUP2_CMODEMATSRV_ISECHONOTIFIED, "CModemAtSrv::IsEchoNotified - Echo value is the same as before" ); |
|
938 C_TRACE(( _T("Echo value is the same as before") )); |
|
939 return ETrue; |
|
940 } |
|
941 } |
|
942 |
|
943 TBool CModemAtSrv::IsSettingQueryOngoing() |
|
944 { |
|
945 OstTrace0( TRACE_NORMAL, CMODEMATSRV_ISSETTINGQUERYONGOING, "CModemAtSrv::IsSettingQueryOngoing" ); |
|
946 C_TRACE(( _T("CModemAtSrv::IsSettingQueryOngoing()") )); |
|
947 if ( iEchoQueryIsOngoing || iVerboseQueryIsOngoing || iQuietQueryIsOngoing ) |
|
948 { |
|
949 return ETrue; |
|
950 } |
|
951 else |
|
952 { |
|
953 return EFalse; |
|
954 } |
|
955 } |
|
956 |
|
957 |
|
958 void CModemAtSrv::AddDevice( TUint8 aDevId, TUint8 aObjId ) |
|
959 { |
|
960 OstTrace0( TRACE_NORMAL, CMODEMATSRV_ADDDEVICE, "CModemAtSrv::AddDevice" ); |
|
961 C_TRACE(( _T("CModemAtSrv::AddDevice()") )); |
|
962 TBool alreadyFound( EFalse ); |
|
963 |
|
964 for( int i = 0; i < iDteInfo.Count(); i++ ) |
|
965 { |
|
966 if( aDevId == iDteInfo[i].iDevId && aObjId == iDteInfo[i].iObjId ) |
|
967 { |
|
968 OstTrace0( TRACE_NORMAL, DUP1_CMODEMATSRV_ADDDEVICE, "CModemAtSrv::AddDevice - dte already found" ); |
|
969 C_TRACE(( _T("CModemAtSrv::AddDevice() dte already found") )); |
|
970 alreadyFound = ETrue; |
|
971 break; |
|
972 } |
|
973 } |
|
974 if( !alreadyFound ) |
|
975 { |
|
976 OstTrace0( TRACE_NORMAL, DUP2_CMODEMATSRV_ADDDEVICE, "CModemAtSrv::AddDevice - adding dte" ); |
|
977 C_TRACE(( _T("CModemAtSrv::AddDevice() adding dte") )); |
|
978 TDteInfo devInfo; |
|
979 devInfo.iDevId = aDevId; |
|
980 devInfo.iObjId = aObjId; |
|
981 devInfo.iSession = NULL; |
|
982 iDteInfo.Append( devInfo ); |
|
983 } |
|
984 } |
|
985 |
|
986 |
|
987 void CModemAtSrv::RemoveDevice( TUint8 aDevId, TUint8 aObjId ) |
|
988 { |
|
989 OstTrace0( TRACE_NORMAL, CMODEMATSRV_REMOVEDEVICE, "CModemAtSrv::RemoveDevice" ); |
|
990 C_TRACE(( _T("CModemAtSrv::RemoveDevice()") )); |
|
991 |
|
992 for( int i = 0; i < iDteInfo.Count(); i++ ) |
|
993 { |
|
994 if( aDevId == iDteInfo[i].iDevId && aObjId == iDteInfo[i].iObjId ) |
|
995 { |
|
996 OstTrace0( TRACE_NORMAL, DUP1_CMODEMATSRV_REMOVEDEVICE, "CModemAtSrv::RemoveDevice - CModemAtSrv::RemoveDevice() device found" ); |
|
997 C_TRACE(( _T("CModemAtSrv::RemoveDevice() device found") )); |
|
998 iDteInfo.Remove( i ); |
|
999 break; |
|
1000 } |
|
1001 } |
|
1002 } |
|
1003 |
|
1004 TUint8 CModemAtSrv::GetDteCount() |
|
1005 { |
|
1006 OstTrace0( TRACE_NORMAL, CMODEMATSRV_GETDTECOUNT, "CModemAtSrv::GetDteCount" ); |
|
1007 C_TRACE(( _T("CModemAtSrv::GetDteCount()") )); |
|
1008 TUint8 count( 0 ); |
|
1009 for( int i = 0; i < iSessions.Count(); i++ ) |
|
1010 { |
|
1011 if( ECommonPlugin == iSessions[i]->GetPluginType() ) |
|
1012 { |
|
1013 count++; |
|
1014 } |
|
1015 } |
|
1016 return count; |
|
1017 } |
|
1018 |
|
1019 // ----------------------------------------------------------------------------- |
|
1020 // CModemAtSrv::GetFreeChannelId |
|
1021 // Gets free ISC channel id for new connection |
|
1022 // ----------------------------------------------------------------------------- |
|
1023 // |
|
1024 TInt CModemAtSrv::GetFreeChannelId( TUint8& aChannel ) |
|
1025 { |
|
1026 OstTrace0( TRACE_NORMAL, CMODEMATSRV_GETFREECHANNELID, "CModemAtSrv::GetFreeChannelId" ); |
|
1027 C_TRACE(( _T("CModemAtSrv::GetFreeChannelId()") )); |
|
1028 TInt ret( KErrNotFound ); |
|
1029 |
|
1030 if( 0 < iFreeChannels.Size() ) |
|
1031 { |
|
1032 ret = KErrNone; |
|
1033 aChannel = iFreeChannels[0]; |
|
1034 iFreeChannels.Delete( 0, 1 ); |
|
1035 OstTrace1( TRACE_NORMAL, DUP1_CMODEMATSRV_GETFREECHANNELID, "CModemAtSrv::GetFreeChannelId free channel found: 0x%x", aChannel ); |
|
1036 C_TRACE(( _T("CModemAtSrv::GetFreeChannelId: free channel found: 0x%x"), aChannel )); |
|
1037 } |
|
1038 return ret; |
|
1039 } |