os/ossrv/lowlevellibsandfws/apputils/bsul/test/t_clientmessage/t_clientmessagetestserver.cpp
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/ossrv/lowlevellibsandfws/apputils/bsul/test/t_clientmessage/t_clientmessagetestserver.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,878 @@
1.4 +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +//
1.18 +
1.19 +#include "t_clientmessagetestserver.h"
1.20 +
1.21 +
1.22 +_LIT(KServerName,"ClientMessageTestServer");
1.23 +_LIT(KServer2Name,"SecondTestServer");
1.24 +extern const BSUL::TClientMessageServerData KServerData;
1.25 +extern const BSUL::TClientMessageServerData KServer2Data;
1.26 +
1.27 +/* CClientMessageTestServer is a lightweight Server that is used to test
1.28 + * the CClientMessage framework. Clientside code sends messages to the
1.29 + * server which are processed and the client chceks the expected behaviour.
1.30 + * The server code does no testing itself.
1.31 + */
1.32 +CServer2* CClientMessageTestServer::NewLC()
1.33 + {
1.34 + CClientMessageTestServer* self = new(ELeave) CClientMessageTestServer(CActive::EPriorityStandard);
1.35 + CleanupStack::PushL(self);
1.36 + self->ConstructL();
1.37 + return self;
1.38 +
1.39 + }
1.40 +
1.41 +void CClientMessageTestServer::ConstructL()
1.42 + {
1.43 + BSUL::CClientMessage::InitialiseFrameworkL(KServerData);
1.44 + StartL(KServerName);
1.45 + }
1.46 +
1.47 +TInt CClientMessageTestServer::RunError(TInt aError)
1.48 + {
1.49 + Message().Complete(aError);
1.50 +
1.51 + ReStart();
1.52 + return KErrNone;
1.53 + }
1.54 +
1.55 +CClientMessageTestServer::CClientMessageTestServer(TInt aPriority):
1.56 + CServer2(aPriority)
1.57 + {
1.58 + }
1.59 +
1.60 +CSession2* CClientMessageTestServer::NewSessionL(const TVersion& /*aVersion*/, const RMessage2& /*aMessage*/) const
1.61 + {
1.62 +
1.63 + return new(ELeave)CClientMessageTestSession;
1.64 +
1.65 + }
1.66 +
1.67 +/* CClientMessageTestSession is a lightweight Session class processes
1.68 + * messages from the client using the CClientMessage framework
1.69 + */
1.70 +
1.71 +CClientMessageTestSession::~CClientMessageTestSession()
1.72 + {
1.73 + delete iClientMessage;
1.74 + }
1.75 +
1.76 +void CClientMessageTestSession::CreateL(const CServer2& /*aServer*/)
1.77 + {
1.78 +
1.79 + }
1.80 +
1.81 +
1.82 +void CClientMessageTestSession::ServiceL(const RMessage2& aMessage)
1.83 + {
1.84 +
1.85 + iClientMessage = BSUL::CClientMessage::NewL(aMessage);
1.86 +
1.87 + TRAPD(err, iClientMessage->ValidateL());
1.88 + if(err == KErrNone)
1.89 + {
1.90 + TRAP(err, DoServiceL());
1.91 + }
1.92 +
1.93 + iClientMessage->CompleteRequestL(err);
1.94 +
1.95 + delete iClientMessage;
1.96 + iClientMessage = NULL;
1.97 +
1.98 + }
1.99 +
1.100 +void CClientMessageTestSession::DoServiceL()
1.101 + {
1.102 +
1.103 +
1.104 + switch(iClientMessage->Function())
1.105 + {
1.106 + case ETestMessage0:
1.107 + case ETestMessage21:
1.108 + case ETestMessage23:
1.109 + {
1.110 + TestFunction0L();
1.111 + break;
1.112 + }
1.113 +
1.114 + case ETestMessage1:
1.115 + {
1.116 + TestFunction1L();
1.117 + break;
1.118 + }
1.119 +
1.120 + case ETestMessage4:
1.121 + {
1.122 + TestFunction4L();
1.123 + break;
1.124 + }
1.125 +
1.126 + case ETestMessage5:
1.127 + {
1.128 + TestFunction5L();
1.129 + break;
1.130 + }
1.131 +
1.132 + case ETestMessage6:
1.133 + {
1.134 + TestFunction6L();
1.135 + break;
1.136 + }
1.137 +
1.138 + case ETestMessage7:
1.139 + {
1.140 + TestFunction7L();
1.141 + break;
1.142 + }
1.143 +
1.144 + case ETestMessage9:
1.145 + {
1.146 + TestFunction9L();
1.147 + break;
1.148 + }
1.149 +
1.150 + case ETestMessage10:
1.151 + {
1.152 + TestFunction10L();
1.153 + break;
1.154 + }
1.155 +
1.156 + case ETestMessage11:
1.157 + {
1.158 + TestFunction11L();
1.159 + break;
1.160 + }
1.161 +
1.162 + case ETestMessage14:
1.163 + {
1.164 + TestFunction14L();
1.165 + break;
1.166 + }
1.167 +
1.168 + case ETestMessage15:
1.169 + {
1.170 + TestFunction15L();
1.171 + break;
1.172 + }
1.173 +
1.174 + case ETestMessage16:
1.175 + {
1.176 + TestFunction16L();
1.177 + break;
1.178 + }
1.179 +
1.180 + case ETestMessage17:
1.181 + {
1.182 + TestFunction17L();
1.183 + break;
1.184 + }
1.185 +
1.186 + case ETestMessage18:
1.187 + {
1.188 + TestFunction18L();
1.189 + break;
1.190 + }
1.191 +
1.192 + case ETestMessage19:
1.193 + {
1.194 + TestFunction19L();
1.195 + break;
1.196 + }
1.197 +
1.198 + case ETestMessage31:
1.199 + {
1.200 + TestFunction31L();
1.201 + break;
1.202 + }
1.203 +
1.204 + //Just testing the validation of these functions.
1.205 + //No action to be taken
1.206 + case ETestMessage12:
1.207 + case ETestMessage13:
1.208 + case ETestMessage25:
1.209 + case ETestMessage26:
1.210 + case ETestMessage27:
1.211 + case ETestMessage28:
1.212 + case ETestMessage29:
1.213 + case ETestMessage30:
1.214 + case ETestMessage32:
1.215 + {
1.216 + break;
1.217 + }
1.218 +
1.219 + //This should never happen because these functions have been
1.220 + //incorrectly defined in the message schema and calling these
1.221 + //functions should result in a server panic when creating the
1.222 + //CClientMessage object using the message.
1.223 + case ETestMessage2:
1.224 + case ETestMessage3:
1.225 + case ETestMessage8:
1.226 + //These messages should never be called as they have a failing security policy
1.227 + //for the client server
1.228 + case ETestMessage20:
1.229 + case ETestMessage22:
1.230 + case ETestMessage24:
1.231 + User::Panic(_L("ClientMessageTest"),0);
1.232 + break;
1.233 +
1.234 +
1.235 + }
1.236 + }
1.237 +
1.238 +
1.239 +/*The test functions below read from or write to the
1.240 + *clients message using the CCLientMessage framework.
1.241 + */
1.242 +
1.243 +/*
1.244 + * Int value tests
1.245 + */
1.246 +
1.247 +void CClientMessageTestSession::TestFunction0L()
1.248 + {
1.249 + TInt arg0;
1.250 + TInt arg1;
1.251 +
1.252 + //Validate the first parameter
1.253 + iClientMessage->ValidateL(0);
1.254 + iClientMessage->ValidateL(1);
1.255 +
1.256 + TRAPD(err,iClientMessage->ValidateL(2));
1.257 +
1.258 + if(err != KErrArgument)
1.259 + {
1.260 + User::Leave(KErrGeneral);
1.261 + }
1.262 +
1.263 + //read the data from the clients message
1.264 + arg0 = iClientMessage->GetIntL(0);
1.265 + arg1 = iClientMessage->GetIntL(1);
1.266 +
1.267 + TRAP(err,iClientMessage->GetIntL(-1));
1.268 +
1.269 + if(err != KErrArgument)
1.270 + {
1.271 + User::Leave(KErrGeneral);
1.272 + }
1.273 +
1.274 + TRAP(err,iClientMessage->GetIntL(34));
1.275 +
1.276 + if(err != KErrArgument)
1.277 + {
1.278 + User::Leave(KErrGeneral);
1.279 + }
1.280 +
1.281 + //Just use the variables to remove compiler warnings
1.282 + arg0 += arg1;
1.283 + }
1.284 +
1.285 +void CClientMessageTestSession::TestFunction1L()
1.286 + {
1.287 + TInt arg0;
1.288 + const TAny* ptr0;
1.289 +
1.290 + arg0 = iClientMessage->GetIntL(0);
1.291 + //Trying to read this argument for function 1 should fail as function 1
1.292 + //has been defined as having 2 int parameters
1.293 + ptr0 = iClientMessage->GetPtrL(1);
1.294 +
1.295 + //Just use the variables to remove compiler warnings
1.296 + if(ptr0!= NULL)
1.297 + {
1.298 + arg0++;
1.299 + }
1.300 + }
1.301 +
1.302 +
1.303 +/*
1.304 + * Read Only Descriptor tests
1.305 + */
1.306 +
1.307 +void CClientMessageTestSession::TestFunction4L()
1.308 + {
1.309 + TBuf8<16> des8;
1.310 + TBuf<32> des16;
1.311 +
1.312 + //Read the data from the clients message
1.313 + iClientMessage->ReadL(0,des8);
1.314 + iClientMessage->ReadL(1,des16);
1.315 + }
1.316 +
1.317 +void CClientMessageTestSession::TestFunction5L()
1.318 + {
1.319 + TBuf8<3> des8;
1.320 + TBuf<32> des16;
1.321 +
1.322 + //This buffer is not large enough to hold the client message
1.323 + //which has a defined length of 16. Attempting to read into this should fail
1.324 + iClientMessage->ReadL(0,des8);
1.325 + iClientMessage->ReadL(1,des16);
1.326 + }
1.327 +
1.328 +void CClientMessageTestSession::TestFunction6L()
1.329 + {
1.330 + TBuf8<16> des8;
1.331 + TBuf<32> des16;
1.332 + //This offset is negative. Attempting to read into this should fail
1.333 + iClientMessage->ReadL(0,des8,-1);
1.334 + iClientMessage->ReadL(1,des16);
1.335 + }
1.336 +
1.337 +void CClientMessageTestSession::TestFunction7L()
1.338 + {
1.339 + TBuf8<16> des8;
1.340 + TBuf<32> des16;
1.341 + //This offset is towards the end of the string - should be ok
1.342 + //but only a partial string should be returned
1.343 + iClientMessage->ReadL(0,des8,7);
1.344 + iClientMessage->ReadL(1,des16);
1.345 + }
1.346 +
1.347 +/*
1.348 + * Read\Write Descriptor tests
1.349 + */
1.350 +
1.351 +void CClientMessageTestSession::TestFunction9L()
1.352 + {
1.353 + _LIT8(KDes8,"CClientMessageTest");
1.354 + _LIT(KDes,"CClientMessageTest");
1.355 + TInt offSet0;
1.356 + TInt offSet1;
1.357 +
1.358 + //Read in the offets
1.359 + offSet0 = iClientMessage->GetIntL(1);
1.360 + offSet1 = iClientMessage->GetIntL(3);
1.361 +
1.362 + //Write the data to the clients message at the given offset
1.363 + iClientMessage->WriteL(0,KDes8,offSet0);
1.364 + iClientMessage->WriteL(2,KDes,offSet1);
1.365 + }
1.366 +
1.367 +void CClientMessageTestSession::TestFunction10L()
1.368 + {
1.369 + _LIT8(KDes8,"CClientMessageTest. This Descriptor is larger than the maximum allowed descriptor");
1.370 + _LIT(KDes,"CClientMessageTest");
1.371 + TInt offSet0;
1.372 + TInt offSet1;
1.373 +
1.374 + offSet0 = iClientMessage->GetIntL(1);
1.375 + offSet1 = iClientMessage->GetIntL(3);
1.376 +
1.377 + //Thi descriptor is too large and this should fail
1.378 + iClientMessage->WriteL(0,KDes8,offSet0);
1.379 + iClientMessage->WriteL(2,KDes,offSet1);
1.380 + }
1.381 +
1.382 +void CClientMessageTestSession::TestFunction11L()
1.383 + {
1.384 + TBuf8<32> des8;
1.385 + TBuf<128> des16;
1.386 +
1.387 + //This buffer is not large enough to hold the client message
1.388 + //which has a defined length of 64.
1.389 + //Attempting to read into this should fail on UDEB
1.390 + iClientMessage->ReadL(0,des8);
1.391 + iClientMessage->ReadL(2,des16);
1.392 + }
1.393 +
1.394 +void CClientMessageTestSession::TestFunction14L()
1.395 + {
1.396 + TInt offSet;
1.397 + TBuf8<16> des8;
1.398 +
1.399 + offSet = iClientMessage->GetIntL(1);
1.400 +
1.401 + //Read the data from the clients descriptor using the offset provided
1.402 + TInt length = iClientMessage->GetDesLengthL(0);
1.403 +
1.404 + //Get a reference to the local copy of the descriptor
1.405 + const TDesC8& aDes = iClientMessage->GetDes8L(0);
1.406 +
1.407 + //Just do a comparison here to sure the variables and avoid compiler warnings
1.408 + if((length == aDes.Length()) && (length <= des8.MaxLength()))
1.409 + {
1.410 + iClientMessage->ReadL(0,des8,offSet);
1.411 + }
1.412 +
1.413 + //Write what was read back to the client
1.414 + iClientMessage->WriteL(2,des8);
1.415 + }
1.416 +
1.417 +void CClientMessageTestSession::TestFunction15L()
1.418 + {
1.419 + TInt offSet;
1.420 + TBuf<16> des;
1.421 +
1.422 + offSet = iClientMessage->GetIntL(1);
1.423 +
1.424 + //read from the second descriptor
1.425 + TInt length = iClientMessage->GetDesLengthL(2);
1.426 + iClientMessage->ReadL(2,des,0);
1.427 +
1.428 + //Read the data from the clients descriptor using the offset provided
1.429 + length = iClientMessage->GetDesLengthL(0);
1.430 +
1.431 + //Get a reference to the local copy of the descriptor
1.432 + const TDesC& aDes = iClientMessage->GetDes16L(0);
1.433 +
1.434 + //Just do a comparison here to sure the variables and avoid compiler warnings
1.435 + if((length == aDes.Length()) && (length <= des.MaxLength()))
1.436 + {
1.437 + iClientMessage->ReadL(0,des,offSet);
1.438 +
1.439 + }
1.440 + //Write what was read back to the client
1.441 + if( length <= iClientMessage->GetDesMaxLengthL(2))
1.442 + {
1.443 + iClientMessage->WriteL(2,des);
1.444 + }
1.445 + }
1.446 +
1.447 +/*
1.448 + * Ptr tests
1.449 + */
1.450 +
1.451 +void CClientMessageTestSession::TestFunction16L()
1.452 + {
1.453 + const TAny* ptr;
1.454 +
1.455 + ptr = iClientMessage->GetPtrL(0);
1.456 +
1.457 + //Just use the variables to remove compiler warnings
1.458 + if(ptr != NULL)
1.459 + {
1.460 + ptr = NULL;
1.461 + }
1.462 +
1.463 + }
1.464 +
1.465 +void CClientMessageTestSession::TestFunction17L()
1.466 + {
1.467 + _LIT8(KDes8,"CClientMessageTest");
1.468 +
1.469 + //Ptr variables dont havea WriteL method so this should panic
1.470 + iClientMessage->WriteL(0,KDes8);
1.471 + }
1.472 +
1.473 +/*
1.474 + * Pckg tests
1.475 + */
1.476 +
1.477 +void CClientMessageTestSession::TestFunction18L()
1.478 + {
1.479 + CMTestStruct2 struct1;
1.480 + TPckg<CMTestStruct2> pData(struct1);
1.481 +
1.482 + TInt length = iClientMessage->GetDesLengthL(0);
1.483 +
1.484 + iClientMessage->ReadL(0,pData);
1.485 +
1.486 + if(length == sizeof(CMTestStruct2))
1.487 + {
1.488 + struct1.iCount--;
1.489 +
1.490 + struct1.iDes = _L("Message Handled");
1.491 +
1.492 + length = iClientMessage->GetDesMaxLengthL(0);
1.493 +
1.494 + if(length == sizeof(CMTestStruct2))
1.495 + {
1.496 + iClientMessage->WriteL(0,pData);
1.497 + }
1.498 + }
1.499 + }
1.500 +
1.501 +void CClientMessageTestSession::TestFunction19L()
1.502 + {
1.503 + CMTestStruct1 struct1;
1.504 + TPckg<CMTestStruct1> pData(struct1);
1.505 +
1.506 + iClientMessage->ReadL(0,pData);
1.507 + }
1.508 +
1.509 +
1.510 +void CClientMessageTestSession::TestFunction31L()
1.511 + {
1.512 + TInt function = iClientMessage->GetIntL(0);
1.513 +
1.514 + switch(function)
1.515 + {
1.516 + case EGetIntL:
1.517 + {
1.518 + function = iClientMessage->GetIntL(1);
1.519 + break;
1.520 + }
1.521 +
1.522 + case EGetDes8L:
1.523 + {
1.524 + const TDesC8& data = iClientMessage->GetDes8L(1);
1.525 + break;
1.526 + }
1.527 +
1.528 + case ERead8L:
1.529 + {
1.530 + TBuf8<16> buf;
1.531 + iClientMessage->ReadL(1,buf);
1.532 + break;
1.533 + }
1.534 +
1.535 + case EWrite8L:
1.536 + {
1.537 + iClientMessage->WriteL(1, _L8(""));
1.538 + break;
1.539 + }
1.540 +
1.541 + case EGetDes16L:
1.542 + {
1.543 + const TDesC& data = iClientMessage->GetDes16L(1);
1.544 + break;
1.545 + }
1.546 +
1.547 + case ERead16L:
1.548 + {
1.549 + TBuf<16> buf;
1.550 + iClientMessage->ReadL(1,buf);
1.551 + break;
1.552 + }
1.553 +
1.554 + case EWrite16L:
1.555 + {
1.556 + iClientMessage->WriteL(1, _L(""));
1.557 + break;
1.558 + }
1.559 +
1.560 + case EGetDesLengthL:
1.561 + {
1.562 + function = iClientMessage->GetDesLengthL(1);
1.563 + break;
1.564 + }
1.565 +
1.566 + case EGetDesMaxLengthL:
1.567 + {
1.568 + function = iClientMessage->GetDesMaxLengthL(1);
1.569 + break;
1.570 + }
1.571 + }
1.572 + }
1.573 +
1.574 +
1.575 +/* CClientMessageTestServer2 is a lightweight Server that is used to test
1.576 + * the CClientMessage framework. Client side code sends messages to the
1.577 + * server which are processed and the client chceks the expected behaviour.
1.578 + * The server code does no testing itself. The second server is used to
1.579 + * test the ClientMessage Frameworks handling of Tls data.
1.580 + */
1.581 +CServer2* CClientMessageTestServer2::NewLC()
1.582 + {
1.583 + CClientMessageTestServer2* self = new(ELeave) CClientMessageTestServer2(CActive::EPriorityStandard);
1.584 + CleanupStack::PushL(self);
1.585 + self->ConstructL();
1.586 + return self;
1.587 +
1.588 + }
1.589 +
1.590 +void CClientMessageTestServer2::ConstructL()
1.591 + {
1.592 + StartL(KServer2Name);
1.593 + }
1.594 +
1.595 +TInt CClientMessageTestServer2::RunError(TInt aError)
1.596 + {
1.597 + Message().Complete(aError);
1.598 +
1.599 + ReStart();
1.600 + return KErrNone;
1.601 + }
1.602 +
1.603 +CClientMessageTestServer2::CClientMessageTestServer2(TInt aPriority):
1.604 + CServer2(aPriority)
1.605 + {
1.606 +
1.607 + }
1.608 +
1.609 +CSession2* CClientMessageTestServer2::NewSessionL(const TVersion& /*aVersion*/, const RMessage2& /*aMessage*/) const
1.610 + {
1.611 +
1.612 + return new(ELeave)CClientMessageTestSession2;
1.613 +
1.614 + }
1.615 +
1.616 +/* CClientMessageTestSession2 is a lightweight Session class processes
1.617 + * messages from the client using the CClientMessage framework
1.618 + */
1.619 +
1.620 +CClientMessageTestSession2::~CClientMessageTestSession2()
1.621 + {
1.622 + delete iClientMessage;
1.623 + }
1.624 +
1.625 +void CClientMessageTestSession2::CreateL(const CServer2& /*aServer*/)
1.626 + {
1.627 +
1.628 + }
1.629 +
1.630 +
1.631 +void CClientMessageTestSession2::ServiceL(const RMessage2& aMessage)
1.632 + {
1.633 +
1.634 + TRAPD(err,iClientMessage = BSUL::CClientMessage::NewL(aMessage));
1.635 +
1.636 + if(err == BSUL::KErrNotInitialised)
1.637 + {
1.638 + BSUL::CClientMessage::InitialiseFrameworkL(KServer2Data);
1.639 +
1.640 + iClientMessage = BSUL::CClientMessage::NewL(aMessage);
1.641 + }
1.642 +
1.643 + TRAP(err, DoServiceL());
1.644 +
1.645 + iClientMessage->CompleteRequestL(err);
1.646 +
1.647 + delete iClientMessage;
1.648 + iClientMessage = NULL;
1.649 +
1.650 + }
1.651 +
1.652 +void CClientMessageTestSession2::DoServiceL()
1.653 + {
1.654 + //Just do this to test the ::Message API
1.655 + const RMessage2& message = iClientMessage->Message();
1.656 +
1.657 + switch(message.Function())
1.658 + {
1.659 + case ETestMessage0:
1.660 + {
1.661 + TRAPD(err,TestFunction0L());
1.662 + if(err != BSUL::KErrNotValidated)
1.663 + {
1.664 + User::Leave(KErrGeneral);
1.665 + }
1.666 + iClientMessage->ValidateL();
1.667 +
1.668 + TestFunction0L();
1.669 +
1.670 + break;
1.671 + }
1.672 +
1.673 + case ETestMessage1:
1.674 + {
1.675 + TestFunction1L();
1.676 + break;
1.677 + }
1.678 +
1.679 + case ETestMessage2:
1.680 + {
1.681 + iClientMessage->ValidateL();
1.682 +
1.683 + TestFunction2L();
1.684 + break;
1.685 + }
1.686 +
1.687 + default:
1.688 + {
1.689 + User::Leave(KErrNotFound);
1.690 + break;
1.691 + }
1.692 +
1.693 + }
1.694 + }
1.695 +
1.696 +/*The test function below reads from the clients message
1.697 + * using the CCLientMessage framework.
1.698 + */
1.699 +
1.700 +void CClientMessageTestSession2::TestFunction0L()
1.701 + {
1.702 + TInt arg0;
1.703 + TInt arg1;
1.704 +
1.705 + //read the data from the clients message
1.706 + arg0 = iClientMessage->GetIntL(0);
1.707 + arg1 = iClientMessage->GetIntL(1);
1.708 +
1.709 + //Just use the variables to remove compiler warnings
1.710 + arg0 += arg1;
1.711 + }
1.712 +
1.713 +/*The test function below reads the int parameter from the message
1.714 + * The parameter is validated through a custom validation function
1.715 + */
1.716 +
1.717 +void CClientMessageTestSession2::TestFunction1L()
1.718 + {
1.719 + TInt arg0;
1.720 +
1.721 + iClientMessage->ValidateL(0);
1.722 +
1.723 + //read the data from the clients message
1.724 + arg0 = iClientMessage->GetIntL(0);
1.725 +
1.726 + arg0++;
1.727 + }
1.728 +
1.729 +/*The test function below reads the descriptor from the clients message
1.730 + * The parameter is validated through a custom validation function
1.731 + */
1.732 +void CClientMessageTestSession2::TestFunction2L()
1.733 + {
1.734 + TBuf<32> data;
1.735 +
1.736 + //read the data from the clients message
1.737 + iClientMessage->ReadL(0,data,0);
1.738 +
1.739 + }
1.740 +
1.741 +
1.742 +
1.743 +static void DoRunServer1L()
1.744 + {
1.745 + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
1.746 + CleanupStack::PushL(scheduler);
1.747 + CActiveScheduler::Install(scheduler);
1.748 +
1.749 + CServer2* server = CClientMessageTestServer::NewLC();
1.750 +
1.751 + TInt err = User::RenameThread(KServerName);
1.752 +
1.753 + RProcess().Rendezvous(KErrNone);
1.754 +
1.755 + CActiveScheduler::Start();
1.756 +
1.757 + CleanupStack::PopAndDestroy(server);
1.758 +
1.759 + CleanupStack::PopAndDestroy(scheduler);
1.760 + }
1.761 +
1.762 +static TInt RunServer1(TAny*)
1.763 + {
1.764 + CTrapCleanup* cleanup=CTrapCleanup::New();
1.765 + TInt r=KErrNoMemory;
1.766 + if (cleanup)
1.767 + {
1.768 + TRAP(r,DoRunServer1L());
1.769 + delete cleanup;
1.770 + }
1.771 + return r;
1.772 + }
1.773 +
1.774 +static void DoRunServer2L()
1.775 + {
1.776 + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
1.777 + CleanupStack::PushL(scheduler);
1.778 + CActiveScheduler::Install(scheduler);
1.779 +
1.780 + CServer2* server = CClientMessageTestServer2::NewLC();
1.781 +
1.782 + TInt err = User::RenameThread(KServer2Name);
1.783 +
1.784 + RProcess().Rendezvous(KErrNone);
1.785 +
1.786 + CActiveScheduler::Start();
1.787 +
1.788 + CleanupStack::PopAndDestroy(server);
1.789 +
1.790 + CleanupStack::PopAndDestroy(scheduler);
1.791 + }
1.792 +
1.793 +static TInt RunServer2(TAny*)
1.794 + {
1.795 + CTrapCleanup* cleanup=CTrapCleanup::New();
1.796 + TInt r=KErrNoMemory;
1.797 + if (cleanup)
1.798 + {
1.799 + TRAP(r,DoRunServer2L());
1.800 + delete cleanup;
1.801 + }
1.802 + return r;
1.803 + }
1.804 +
1.805 +/*Launch 2 servers in seperate threads to allow testing of ClientMessage Frameworks
1.806 + * Tls handling
1.807 + */
1.808 +
1.809 +static void RunServersL()
1.810 + {
1.811 +
1.812 + RThread server1Thread;
1.813 + TInt err = server1Thread.Create(_L("Test Server 1"), &RunServer1, KDefaultStackSize, NULL, NULL);
1.814 +
1.815 + if(err != KErrAlreadyExists)
1.816 + {
1.817 + User::LeaveIfError(err);
1.818 + }
1.819 +
1.820 + RThread server2Thread;
1.821 + err = server2Thread.Create(_L("Test Server 2"), &RunServer2, KDefaultStackSize, NULL, NULL);
1.822 +
1.823 + if(err != KErrAlreadyExists)
1.824 + {
1.825 + User::LeaveIfError(err);
1.826 + }
1.827 +
1.828 + server1Thread.Resume();
1.829 +
1.830 + TRequestStatus thread1Stat;
1.831 + server1Thread.Logon(thread1Stat);
1.832 +
1.833 + server2Thread.Resume();
1.834 +
1.835 + TRequestStatus thread2Stat;
1.836 + server2Thread.Logon(thread2Stat);
1.837 +
1.838 + User::WaitForRequest(thread1Stat,thread2Stat);
1.839 +
1.840 + if(server1Thread.ExitType() != EExitPending)
1.841 + {
1.842 + User::Panic(server1Thread.ExitCategory(),server1Thread.ExitReason());
1.843 + }
1.844 +
1.845 + else
1.846 + {
1.847 + User::Panic(server2Thread.ExitCategory(),server2Thread.ExitReason());
1.848 + }
1.849 + }
1.850 +
1.851 +TInt E32Main()
1.852 + //
1.853 + // Server process entry-point
1.854 + //
1.855 + {
1.856 + CTrapCleanup* cleanup=CTrapCleanup::New();
1.857 + TInt r=KErrNoMemory;
1.858 + if (cleanup)
1.859 + {
1.860 + TRAP(r,RunServersL());
1.861 + delete cleanup;
1.862 + }
1.863 + return r;
1.864 + }
1.865 +
1.866 +
1.867 +
1.868 +
1.869 +
1.870 +
1.871 +
1.872 +
1.873 +
1.874 +
1.875 +
1.876 +
1.877 +
1.878 +
1.879 +
1.880 +
1.881 +