40 // ----------------------------------------------------------------------------- |
40 // ----------------------------------------------------------------------------- |
41 // CCPServerSession::NewL |
41 // CCPServerSession::NewL |
42 // Two-phased constructor. |
42 // Two-phased constructor. |
43 // ----------------------------------------------------------------------------- |
43 // ----------------------------------------------------------------------------- |
44 // |
44 // |
45 CCPServerSession* CCPServerSession::NewL( TPointersForSession& aPasser ) |
45 CCPServerSession* CCPServerSession::NewL(TPointersForSession& aPasser) |
46 { |
46 { |
47 CCPServerSession* self = CCPServerSession::NewLC( aPasser ); |
47 CCPServerSession* self = CCPServerSession::NewLC(aPasser); |
48 CleanupStack::Pop( self ) ; |
48 CleanupStack::Pop( self ) ; |
49 return self; |
49 return self; |
50 } |
50 } |
51 |
51 |
52 // ----------------------------------------------------------------------------- |
52 // ----------------------------------------------------------------------------- |
53 // CCPServerSession::NewLC |
53 // CCPServerSession::NewLC |
54 // Two-phased constructor. |
54 // Two-phased constructor. |
55 // ----------------------------------------------------------------------------- |
55 // ----------------------------------------------------------------------------- |
56 // |
56 // |
57 CCPServerSession* CCPServerSession::NewLC( TPointersForSession& aPasser ) |
57 CCPServerSession* CCPServerSession::NewLC(TPointersForSession& aPasser) |
58 { |
58 { |
59 CCPServerSession* self = new ( ELeave ) CCPServerSession(); |
59 CCPServerSession* self = new (ELeave) CCPServerSession(); |
60 CleanupStack::PushL( self ); |
60 CleanupStack::PushL( self ); |
61 self->ConstructL( aPasser ) ; |
61 self->ConstructL( aPasser ) ; |
62 return self; |
62 return self; |
63 } |
63 } |
64 |
64 |
127 aMessage.Complete( KErrLocked ); |
127 aMessage.Complete( KErrLocked ); |
128 } |
128 } |
129 else |
129 else |
130 { |
130 { |
131 TInt err(KErrNone); |
131 TInt err(KErrNone); |
132 TBool panicedClient(EFalse); |
132 TBool completeRequest( ETrue ); |
133 TRAP( err , DispatchMessageL( aMessage, panicedClient ) ); |
133 //complete request by default |
|
134 //not applicable when client panicked or |
|
135 //in case of ECpServerExecuteMultipleActions |
|
136 TRAP( err , DispatchMessageL( aMessage, completeRequest ) ); |
134 if ( (!(aMessage.Function( ) == ECpServerRegisterObserver ) |
137 if ( (!(aMessage.Function( ) == ECpServerRegisterObserver ) |
135 || err == KErrInUse) && !panicedClient ) |
138 || err == KErrInUse) && completeRequest ) |
136 { |
139 { |
137 aMessage.Complete( err ); |
140 if( !aMessage.IsNull() ) |
|
141 { |
|
142 aMessage.Complete( err ); |
|
143 } |
138 } |
144 } |
139 } |
145 } |
140 } |
146 } |
141 |
147 |
142 // ----------------------------------------------------------------------------- |
148 // ----------------------------------------------------------------------------- |
143 // CCPServerSession::ServiceL |
149 // CCPServerSession::ServiceL |
144 // Handle client requests. |
150 // Handle client requests. |
145 // ----------------------------------------------------------------------------- |
151 // ----------------------------------------------------------------------------- |
146 // |
152 // |
147 void CCPServerSession::DispatchMessageL( const RMessage2& aMessage, TBool& aPanicedClient ) |
153 void CCPServerSession::DispatchMessageL( const RMessage2& aMessage, |
|
154 TBool& aCompleteRequest ) |
148 { |
155 { |
149 CP_DEBUG( _L8("CCPServerSession::DispatchMessageL()" ) ); |
156 CP_DEBUG( _L8("CCPServerSession::DispatchMessageL()" ) ); |
150 switch ( aMessage.Function( ) ) |
157 switch ( aMessage.Function( ) ) |
151 { |
158 { |
152 case ECpServerAddData: |
159 case ECpServerAddData: |
182 case ECpServerExecuteAction: |
189 case ECpServerExecuteAction: |
183 ExecuteActionL( aMessage ); |
190 ExecuteActionL( aMessage ); |
184 break; |
191 break; |
185 case ECpServerExecuteMultipleActions: |
192 case ECpServerExecuteMultipleActions: |
186 ExecuteMultipleActionsL( aMessage ); |
193 ExecuteMultipleActionsL( aMessage ); |
|
194 aCompleteRequest = EFalse; |
187 break; |
195 break; |
188 default: |
196 default: |
189 iServer->PanicClient( aMessage, ECPServerBadRequest ); |
197 iServer->PanicClient( aMessage, ECPServerBadRequest ); |
190 aPanicedClient = ETrue; |
198 aCompleteRequest = EFalse; |
191 break; |
199 break; |
192 } |
200 } |
193 } |
201 } |
194 |
202 |
195 // ----------------------------------------------------------------------------- |
203 // ----------------------------------------------------------------------------- |
323 { |
331 { |
324 CP_DEBUG( _L8("CCPServerSession::ExecuteMultipleActionsL()" ) ); |
332 CP_DEBUG( _L8("CCPServerSession::ExecuteMultipleActionsL()" ) ); |
325 |
333 |
326 CLiwGenericParamList* genericList = UnpackForMultiExecuteLC(aMessage); |
334 CLiwGenericParamList* genericList = UnpackForMultiExecuteLC(aMessage); |
327 TUint options = static_cast<TUint> (aMessage.Int2()); // 2 == KOptionsPosition |
335 TUint options = static_cast<TUint> (aMessage.Int2()); // 2 == KOptionsPosition |
328 |
336 //complete message in order to unblock HS |
|
337 aMessage.Complete( KErrNone ); |
|
338 |
329 const TLiwGenericParam* param = NULL; |
339 const TLiwGenericParam* param = NULL; |
330 TInt pos(0); |
340 TInt pos(0); |
331 param = genericList->FindFirst(pos, KFilters); |
341 param = genericList->FindFirst(pos, KFilters); |
332 const CLiwList* maps = param->Value().AsList(); |
342 const CLiwList* maps = param->Value().AsList(); |
333 CLiwDefaultList* cpMaps = CheckValidityLC(maps); |
343 CLiwDefaultList* cpMaps = CheckValidityLC(maps); |
334 |
|
335 //execute actions |
344 //execute actions |
336 for (TInt i = 0; i < cpMaps->Count(); i++) |
345 for (TInt i = 0; i < cpMaps->Count(); i++) |
337 { |
346 { |
338 TLiwVariant mapVariant; |
347 TLiwVariant mapVariant; |
339 mapVariant.PushL(); |
348 mapVariant.PushL(); |
385 } |
394 } |
386 isRegister = ETrue; |
395 isRegister = ETrue; |
387 if ( !iNotificationHandler ) |
396 if ( !iNotificationHandler ) |
388 { |
397 { |
389 iNotificationHandler = CCPNotificationHandler::NewL( |
398 iNotificationHandler = CCPNotificationHandler::NewL( |
390 iServer->GetNotifications()); |
399 iServer->GetNotifications(), iServer->GetDataMapCache()); |
391 iDataManager->AddObserverL( iNotificationHandler ); |
400 iDataManager->AddObserverL( iNotificationHandler ); |
392 } |
401 } |
393 iNotificationHandler->SaveMessageL( aMessage ); |
402 iNotificationHandler->SaveMessageL( aMessage ); |
394 } |
403 } |
395 else |
404 else |