stif/inc/TestServerModuleIf.h
changeset 0 a03f92240627
child 10 381827f66490
equal deleted inserted replaced
-1:000000000000 0:a03f92240627
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 * 
       
    14 * Description: This file contains the header file of the CTestExecution.
       
    15 *
       
    16 */
       
    17 
       
    18 #ifndef TEST_SERVER_MODULE_IF_H
       
    19 #define TEST_SERVER_MODULE_IF_H
       
    20 
       
    21 
       
    22 //  INCLUDES
       
    23 #include <e32std.h>
       
    24 #include <e32base.h>
       
    25 #include <StifTestModule.h>
       
    26 #include <StifTestInterface.h>
       
    27 #include "StifTFwIfProt.h"
       
    28 
       
    29 // CONSTANTS
       
    30 
       
    31 // MACROS
       
    32 
       
    33 // DATA TYPES
       
    34 
       
    35 // FUNCTION PROTOTYPES
       
    36 typedef CSTIFTestMeasurementImplementation*( 
       
    37         *CTestMeasurementFactory )( const TDesC&,
       
    38                                     CSTIFTestMeasurement::TSTIFMeasurementType );
       
    39 
       
    40 // FORWARD DECLARATIONS
       
    41 class TEvent;
       
    42 class CTestModule;
       
    43 class CTestModuleContainer;
       
    44 class CPrintQueue;
       
    45 class CPrintHandler;
       
    46 class CEventHandler;
       
    47 class CSndHandler;
       
    48 class CRcvHandler;
       
    49 class CErrorPrintHandler;
       
    50 class CInterferenceHandler;
       
    51 class CMeasurementHandler;
       
    52 class CCommandHandler;
       
    53 
       
    54 // CLASS DECLARATION
       
    55 
       
    56 // DESCRIPTION
       
    57 // TCmdDef represents remote command
       
    58 class TCmdDef
       
    59     {
       
    60     public:
       
    61         TStifCommand    iCommand;
       
    62         TParams         iParam;
       
    63         TInt            iLen;
       
    64         TRequestStatus* iStatus;
       
    65     };
       
    66 
       
    67 // TCommandDef represents command
       
    68 class TCommandDef
       
    69     {
       
    70     public:
       
    71         TCommand                       iCommand;
       
    72         TBuf8<KMaxCommandParamsLength2> iParamsPckg;
       
    73     };
       
    74     
       
    75 // DESCRIPTION
       
    76 // CCommandDef represents command
       
    77 class CCommandDef : public CBase
       
    78     {
       
    79     public: // Enumerations
       
    80 
       
    81     private: // Enumerations
       
    82         
       
    83     public:  // Constructors and destructor
       
    84     		static CCommandDef* NewL();
       
    85         	~CCommandDef();
       
    86 
       
    87     private:  // Constructors and destructor
       
    88     		CCommandDef();
       
    89         	void ConstructL();
       
    90 
       
    91     public: // New functions
       
    92           
       
    93     public: // Functions from base classes
       
    94         
       
    95     protected:  // New functions
       
    96         
       
    97     protected:  // Functions from base classes
       
    98         
       
    99     private:
       
   100         
       
   101     public:		//Data
       
   102             TCommand iCommand;
       
   103             TBuf8<KMaxCommandParamsLength2> iParamsPckg;
       
   104         
       
   105     protected:  // Data
       
   106         
       
   107     private:    // Data
       
   108         
       
   109     public:     // Friend classes
       
   110         
       
   111     protected:  // Friend classes
       
   112         
       
   113     private:    // Friend classes
       
   114         
       
   115     };
       
   116 
       
   117 // CLASS DECLARATION
       
   118 
       
   119 // DESCRIPTION
       
   120 // TCmdDef represents remote command
       
   121 class TEventDef
       
   122     {
       
   123     public:
       
   124         enum TEventCmdType
       
   125             {
       
   126             EEventCmd,
       
   127             EEventCmdCancel,
       
   128             };
       
   129     // Added constructor to TEventDef @js
       
   130         TEventDef():iStatus(NULL){};
       
   131             
       
   132     public:
       
   133         TEventCmdType   iType;
       
   134         TEventIf        iEvent;
       
   135         TRequestStatus* iStatus;
       
   136     };
       
   137 
       
   138 // DESCRIPTION
       
   139 // TTestInterference represents remote command
       
   140 class TTestInterference 
       
   141     {
       
   142     public:
       
   143         enum TOperation
       
   144             {
       
   145             EAppend,
       
   146             ERemove,
       
   147             };
       
   148     public:
       
   149         TTestInterference(){};
       
   150     public:
       
   151         // Thread id.
       
   152         TUint iThreadId;
       
   153         // Is operations append or remove.
       
   154         TOperation iOperation;
       
   155     };
       
   156 
       
   157 // DESCRIPTION
       
   158 // TTestMeasurement contains measurement related information
       
   159 // transfering between TestInterface and TestServer.
       
   160 class TTestMeasurement 
       
   161     {
       
   162     public:
       
   163         TTestMeasurement(){};
       
   164     public:
       
   165         // Struct for information.
       
   166         CSTIFTestMeasurement::TStifMeasurementStruct iMeasurementStruct;
       
   167 
       
   168     };
       
   169 
       
   170 // DESCRIPTION
       
   171 // TMeasurementHandling keeps information for measurement module
       
   172 // dynamic loading, types, etc.
       
   173 class TMeasurementHandling 
       
   174     {
       
   175     public:
       
   176         TMeasurementHandling() : iMeasurement( NULL ),
       
   177                                  iMeasurementModulePtr( NULL ){};
       
   178 
       
   179         ~TMeasurementHandling()
       
   180             { 
       
   181             delete iMeasurement;
       
   182             delete iMeasurementModulePtr;
       
   183             // After close test measurement's pointer is not valid anymore.
       
   184             if ( iMeasurementModule.Handle() )
       
   185                 { 
       
   186                 iMeasurementModule.Close(); 
       
   187                 }
       
   188             };
       
   189     public:
       
   190         RLibrary iMeasurementModule;
       
   191         CTestMeasurementFactory iMeasurementLibEntry;
       
   192         CSTIFTestMeasurementImplementation* iMeasurement;
       
   193         CSTIFTestMeasurement::TSTIFMeasurementType iMeasurementType;
       
   194         CSTIFTestMeasurementImplementation* iMeasurementModulePtr;
       
   195     };
       
   196 
       
   197 // CLASS DECLARATION
       
   198 
       
   199 // DESCRIPTION
       
   200 // CTestExecution represents a subsession object in the CTestServer.
       
   201 // A session may own any number of CTestExecution objects
       
   202 class CTestExecution
       
   203         :public CObject
       
   204     {
       
   205 
       
   206     public: // Enumerations
       
   207         enum TTestState
       
   208             {
       
   209             ENotStarted,
       
   210             EOnGoing,
       
   211             EFinished,
       
   212             ECancelled,
       
   213             };
       
   214         
       
   215         enum TRequestType
       
   216             {
       
   217             ERqPrint,
       
   218             ERqEvent,
       
   219             ERqSnd,
       
   220             ERqRcv,
       
   221             ERqInterference,
       
   222             ERqMeasurement,
       
   223             ERqCommand,
       
   224             };
       
   225 
       
   226         enum TTestThreadFailure
       
   227             {
       
   228             ETestThreadOk       = 0,
       
   229             ETestMemLeak        = 0x00000001,
       
   230             ETestRequestLeak    = 0x00000002,
       
   231             ETestHandleLeak     = 0x00000004,
       
   232             };
       
   233 
       
   234     private: // Enumerations
       
   235         // None
       
   236 
       
   237     public:  // Constructors and destructor
       
   238 
       
   239         /**
       
   240         * NewL is first phase of two-phased constructor.
       
   241         */
       
   242         static CTestExecution* NewL( CTestModule* aModuleSession, 
       
   243                                      TInt aCaseNumber, 
       
   244                                      const TFileName& aConfig
       
   245                                    );
       
   246 
       
   247         /**
       
   248         * Destructor
       
   249         */
       
   250         virtual ~CTestExecution();
       
   251 
       
   252     public: // New functions
       
   253 
       
   254         /**
       
   255         * Close Test Execution
       
   256         */
       
   257         TInt CloseTestExecution( const RMessage2& aMessage );
       
   258 
       
   259         /**
       
   260         * Run a test case
       
   261         */
       
   262         TInt RunTestCase( const RMessage2& aMessage );
       
   263 
       
   264         /**
       
   265         * Sets a print notification
       
   266         */
       
   267         TInt NotifyPrint( const RMessage2& aMessage );
       
   268 
       
   269         /**
       
   270         * Sets a event notification
       
   271         */
       
   272         TInt NotifyEvent( const RMessage2& aMessage );
       
   273 
       
   274         /**
       
   275         * Sets a RemoteCmd notification
       
   276         */
       
   277         TInt NotifyRemoteCmd( const RMessage2& aMessage );
       
   278 
       
   279         /**
       
   280         * Reads a RemoteCmd notification
       
   281         */
       
   282         TInt ReadRemoteCmdInfo( const RMessage2& aMessage );
       
   283 
       
   284         /**
       
   285         * Resumes a paused test case
       
   286         */
       
   287         TInt Resume( const RMessage2& aMessage );
       
   288 
       
   289         /**
       
   290         * Pauses ongoing test case
       
   291         */
       
   292         TInt Pause( const RMessage2& aMessage );
       
   293 
       
   294 
       
   295         /**
       
   296         * Cancels asynchronous request
       
   297         */
       
   298         TInt CancelRequestL( const RMessage2& aMessage );
       
   299 
       
   300 
       
   301         /**
       
   302         * Completes a print request. 
       
   303         */
       
   304         void DoNotifyPrint();
       
   305 
       
   306         /**
       
   307         * Completes a interference request. 
       
   308         */
       
   309         void DoNotifyInterference();
       
   310 
       
   311         /**
       
   312         * Completes a measurement request. 
       
   313         */
       
   314         TInt DoNotifyMeasurement();
       
   315 
       
   316         /**
       
   317         * Completes a print request. 
       
   318         */
       
   319         void DoErrorPrint();
       
   320 
       
   321         /**
       
   322         * Enables remote command receiving. 
       
   323         */
       
   324         void DoRemoteReceive();
       
   325 
       
   326         /**
       
   327         * Sends remote commands. 
       
   328         */
       
   329         void DoRemoteSend();
       
   330         
       
   331         /**
       
   332         * Completes a event request. 
       
   333         */
       
   334         TInt DoNotifyEvent();
       
   335 
       
   336         /**
       
   337         * Completes a event cancel request. 
       
   338         */
       
   339         void CancelEvent();
       
   340         
       
   341         /** 
       
   342         * Set thread State. 
       
   343         * This function can be called from test execution thread.
       
   344         */
       
   345         void SetThreadState( const TTestState aState );
       
   346         
       
   347         /**
       
   348         * Completes print request if print queue is empty
       
   349         */
       
   350         void CompletePrintRequestIfQueueEmpty();
       
   351 
       
   352         /**
       
   353         * Completes print request if print queue is empty
       
   354         */
       
   355         void CleanupEvents();
       
   356 
       
   357         /**
       
   358         * Completes test execution
       
   359         */
       
   360         void CompleteTestExecution( const TInt aCompletionCode, 
       
   361                                     const TFullTestResult::TCaseExecutionResult aCaseExecutionType,
       
   362                                     const TInt aCaseExecutionCode,
       
   363                                     const TInt aCaseResult,
       
   364                                     const TDesC& aText );
       
   365 
       
   366         /**
       
   367         * Unsets all pending state events.
       
   368         */
       
   369         void UnsetStateEvents();
       
   370 
       
   371         /**
       
   372         * Completes test execution
       
   373         */
       
   374         void CompleteTestExecution( const TInt aCompletionCode );
       
   375         
       
   376         /**
       
   377         * Current thread state.
       
   378         */
       
   379         TTestState ThreadState(){ return iThreadState; }
       
   380 
       
   381         /**
       
   382         * Cancels test(s) execution in special cases e.g. timeout, exit etc.
       
   383         */
       
   384         TInt CancelTestExecution();
       
   385 
       
   386         /**
       
   387         * Make sure that any of the test interference thread's won't stay
       
   388         * to run if test case is crashed of test interference object is not
       
   389         * deleted.
       
   390         */
       
   391         TInt KillTestinterferenceThread();
       
   392 
       
   393         /**
       
   394         * Make sure that any of the test measurement process's won't stay
       
   395         * to run if test case is crashed of test measurement object is not
       
   396         * deleted.
       
   397         */
       
   398         TInt KillTestMeasurement();
       
   399 
       
   400         /**
       
   401         * Executes command for ongoing test case.
       
   402         * Created to allow test case to kill itself.
       
   403         */
       
   404         TInt NotifyCommand(const RMessage2& aMessage);
       
   405 
       
   406         /**
       
   407         * Completes a command request.
       
   408         * Created to allow test case to kill itself.
       
   409         */
       
   410         TInt DoNotifyCommand();
       
   411 
       
   412         /**
       
   413         * Cancels command request.
       
   414         * Created to allow test case to kill itself.
       
   415         */
       
   416         TInt CancelCommandRequest();
       
   417 
       
   418     public: // Functions that are called from test thread
       
   419 
       
   420         /**
       
   421         * Get mutex handles.
       
   422         */
       
   423         TInt EventMutexHandle(){ return iEventMutex.Handle(); };
       
   424         TInt SndMutexHandle(){ return iSndMutex.Handle(); };
       
   425         TInt RcvMutexHandle(){ return iRcvMutex.Handle(); };
       
   426         TInt PrintMutexHandle(){ return iPrintMutex.Handle(); };
       
   427         TInt InterferenceMutexHandle(){ return iInterferenceMutex.Handle(); };
       
   428         TInt MeasurementMutexHandle(){ return iMeasurementMutex.Handle(); };
       
   429         TInt CommandMutexHandle(){ return iCommandMutex.Handle(); };
       
   430 
       
   431         /**
       
   432         * Get semaphore handles.
       
   433         */
       
   434         TInt EventSemHandle(){ return iEventSem.Handle(); };
       
   435         TInt SndSemHandle(){ return iSndSem.Handle(); };
       
   436         TInt RcvSemHandle(){ return iRcvSem.Handle(); };
       
   437         //TInt ReceiverSemHandle(){ return iReceiverSem.Handle(); };
       
   438         TInt PrintSemHandle(){ return iPrintSem.Handle(); };
       
   439         TInt InterferenceSemHandle(){ return iInterferenceSem.Handle(); };
       
   440         TInt MeasurementSemHandle(){ return iMeasurementSem.Handle(); };
       
   441         TInt CommandSemHandle(){ return iCommandSem.Handle(); };
       
   442 
       
   443         /**
       
   444         * Set execution test thread id.
       
   445         */ 
       
   446         void SetTestThread( TThreadId aThreadId ){ iTestThreadId = aThreadId; };
       
   447 
       
   448         /**
       
   449         * Access to "shared" memory.
       
   450         */
       
   451         TFullTestResult& FullResult(){ return iFullResult; };
       
   452         TTestProgress& TestProgress(){ return iProgress; };
       
   453         TEventDef& EventDef(){ return iEventDef; };
       
   454         TCmdDef& SndInfo(){ return iCmdDef; };
       
   455         TCmdDef& RcvInfo(){ return iRcvCmdDef; };
       
   456         TInt& TestThreadFailure(){ return iTestThreadFailure; };
       
   457         TTestInterference& TestInterference(){ return iTestInterference; };
       
   458         TTestMeasurement& TestMeasurement(){ return iTestMeasurement; };
       
   459         CCommandDef& CommandDef(){ return *iCommandDef; };
       
   460 
       
   461         /**
       
   462         * Get specific TRequestStatus variable.
       
   463         */
       
   464         TRequestStatus* GetRq( TRequestType aType );
       
   465 
       
   466         /**
       
   467         * Get mutex handle.
       
   468         * This mutex meaning is to make sure that test complete and test
       
   469         * case cancel operations are not executed at the same time.
       
   470         */
       
   471         TInt TestThreadMutexHandle() { return iTestThreadMutex.Handle(); };
       
   472 
       
   473     public: // Functions from base classes
       
   474         // None
       
   475 
       
   476     protected:  // New functions
       
   477         // None
       
   478 
       
   479     protected:  // Functions from base classes
       
   480         // None
       
   481 
       
   482     private:
       
   483 
       
   484         /** 
       
   485         * C++ default constructor.
       
   486         */
       
   487         CTestExecution(); 
       
   488 
       
   489         /**
       
   490         * By default Symbian OS constructor is private.
       
   491         */
       
   492         void ConstructL( CTestModule* aModuleSession,
       
   493                          TInt aCaseNumber,
       
   494                          const TFileName& aConfig );
       
   495 
       
   496         /**
       
   497         * Cancels print request.
       
   498         */
       
   499         TInt CancelPrintRequest();
       
   500 
       
   501         /**
       
   502         * Cancels test interference request.
       
   503         */
       
   504         TInt CancelInterferenceRequest();
       
   505 
       
   506         /**
       
   507         * Cancels test execution request
       
   508         */
       
   509         TInt CancelTestRequest();
       
   510 
       
   511         /**
       
   512         * Cancel event request.
       
   513         */
       
   514         TInt CancelEventRequest();
       
   515 
       
   516         /**
       
   517         * Cancel event request.
       
   518         */
       
   519         TInt CancelRemoteCmdRequest();
       
   520 
       
   521         /**
       
   522         * Writes a print notification to client memory space.
       
   523         */
       
   524         TInt WritePrint( TTestProgress& aProgress );
       
   525 
       
   526         /**
       
   527         * Complete event TRequestStatus if pending. 
       
   528         */
       
   529         void CompleteEvent( TInt aError );
       
   530 
       
   531         /**
       
   532         * Handle event unsets. 
       
   533         */
       
   534         TInt UnsetEvent( TEventIf& aEvent, const RMessage2& aMessage );
       
   535 
       
   536         /**
       
   537         * Handle event request. 
       
   538         */
       
   539         TInt RequestEvent( TEventIf& aEvent );
       
   540 
       
   541         /**
       
   542         * Wait event request. 
       
   543         */
       
   544         TInt WaitEvent( TEventIf& aEvent, TRequestStatus* aStatus );
       
   545 
       
   546         /**
       
   547         * Handle event releases. 
       
   548         */
       
   549         TInt ReleaseEvent( TEventIf& aEvent );
       
   550 
       
   551         /**
       
   552         * Handle state events. 
       
   553         */
       
   554         TInt EventStateChange( TEventIf& aEvent );
       
   555 
       
   556         /**
       
   557         * Complete request in test thread.
       
   558         */
       
   559         void TestThreadRequestComplete( TRequestStatus* aStatus, TInt aCode );
       
   560 
       
   561     public:     // Data
       
   562         // None
       
   563     protected:  // Data
       
   564         // None
       
   565 
       
   566     private:    // Data
       
   567 
       
   568         // Pointers to things around
       
   569         CTestModule* iModuleSession;             // Session owning us
       
   570         CTestModuleContainer* iModuleContainer;  // Container used to execute this case
       
   571 
       
   572         // Test execution related members
       
   573         TInt iCaseNumber;                        // Case to be executed
       
   574         TPtr iConfig;                            // Configuration file name
       
   575         HBufC* iConfigNameBuffer;                // HBuffer for configuration file;
       
   576         RMessage2 iTestExeMessage;               // Test execution message
       
   577         TTestState iThreadState;                 // Thread state
       
   578 
       
   579         // Print related members
       
   580         RMutex          iPrintMutex;             // For iPrintSem semaphore handling
       
   581         RSemaphore      iPrintSem;               // Synchonize print queue access
       
   582         CPrintQueue*    iPrintQueue;             // Print queue
       
   583         RMessage2 iNotifyPrintMessage;           // Print notification message
       
   584         TBool iPrintNotifyAvailable;             // Is print notification available?
       
   585 
       
   586         // Event related members
       
   587         RMessage2 iNotifyEventMessage;           // Event nofitication message
       
   588         TBool           iEventNotifyAvailable;   // Is event notification available?
       
   589         RMutex          iEventMutex;             // For iEventSem semaphore handling
       
   590         RSemaphore      iEventSem;               // Signal event request availability
       
   591         TEventDef       iEventDef;
       
   592 
       
   593         // Remote command protocol related stuff
       
   594         RMessage2       iNotifyRemoteCmdMessage;// RemoteCmd notication message
       
   595         TBool           iRemoteSendAvailable;    // Is RemoteSend available
       
   596         RMutex          iSndMutex;               // For iSndSem semaphore handling
       
   597         RSemaphore      iSndSem;                 // Signal RemoteCmd request availability
       
   598         TThreadId       iTestThreadId;           // Thread id for receiver 
       
   599         RThread         iTestThread;
       
   600         TBool           iTestThreadOpen;
       
   601         TBool           iRemoteReceiveAvailable; // Is RemoteReceive available
       
   602         RMutex          iRcvMutex;               // For iRcvSem semaphore handling
       
   603         RSemaphore      iRcvSem;                 // Signal RemoteCmd request availability
       
   604         //RSemaphore      iReceiverSem;            // Signal testmodule request availability
       
   605         RPointerArray<HBufC8> iMessageQueue;
       
   606         
       
   607         TCmdDef         iCmdDef;
       
   608         TCmdDef         iRcvCmdDef;  
       
   609         TTestProgress   iProgress;
       
   610                 
       
   611 
       
   612         // Result with timestamp information
       
   613         TFullTestResult iFullResult;    
       
   614         TInt            iTestThreadFailure;         
       
   615         
       
   616         // Event array        
       
   617         RPointerArray<TEvent>           iEventArray; 
       
   618         // State event array
       
   619         RPointerArray<TDesC>            iStateEvents;  
       
   620         
       
   621         // Event handlers
       
   622         CPrintHandler*          iPrintHandler;
       
   623         CEventHandler*          iEventHandler;
       
   624         CSndHandler*            iSndHandler;
       
   625         CRcvHandler*            iRcvHandler;
       
   626         CInterferenceHandler*   iInterferenceHandler;
       
   627         CMeasurementHandler*    iMeasurementHandler;
       
   628         CCommandHandler*        iCommandHandler;
       
   629         
       
   630         // Test Interface related members
       
   631         RMutex          iInterferenceMutex; // For iInterferenceMutex semaphore handling
       
   632         RSemaphore      iInterferenceSem;   // Synchronize interference queue access
       
   633         TBool           iInterferenceNotifyAvailable; // Is interference notification
       
   634                                                       //available?
       
   635         // Test measurement related members
       
   636         RMutex          iMeasurementMutex;  // For iMeasurementMutex semaphore handling
       
   637         RSemaphore      iMeasurementSem;    // Synchronize measurement queue access
       
   638         TBool           iMeasurementNotifyAvailable; // Is measurement notification
       
   639                                                       //available?
       
   640         RMessage2 iNotifyInterferenceMessage; // Interference notification message
       
   641 
       
   642         TTestInterference   iTestInterference; // Struct for information
       
   643         // Array for handling test interference thread's kill in
       
   644         // panic etc. cases
       
   645         RArray<RThread>  iSTIFTestInterferenceArray;
       
   646 
       
   647         RMessage2 iNotifyMeasurementMessage; // Measurement notification message
       
   648 
       
   649         // Struct for information
       
   650         TTestMeasurement   iTestMeasurement;
       
   651         // Array for handling measurement
       
   652         RPointerArray<TMeasurementHandling>  iMeasurementHandlingArray;
       
   653 
       
   654         // This mutex meaning is to make sure that test complete and test
       
   655         // case cancel operations are not executed at the same time.
       
   656         RMutex          iTestThreadMutex; 
       
   657 
       
   658         // Command related members
       
   659         CCommandDef*     iCommandDef;             // Command definition (content)
       
   660         RMessage2       iNotifyCommandMessage;   // Command nofitication message
       
   661         TBool           iCommandNotifyAvailable; // Is command notification available?
       
   662         RMutex          iCommandMutex;           // For iCommandSem semaphore handling
       
   663         RSemaphore      iCommandSem;             // Signal command request availability
       
   664         
       
   665     public:     // Friend classes
       
   666         // None
       
   667         
       
   668     protected:  // Friend classes
       
   669         // None
       
   670     	
       
   671     private:    // Friend classes
       
   672         friend class CUnderTaker;
       
   673         friend class CPrintHandler;
       
   674         friend class CEventHandler;
       
   675         friend class CSndHandler;
       
   676         friend class CRcvHandler;
       
   677         friend class TEvent;
       
   678         friend class CInterferenceHandler;
       
   679         friend class CMeasurementHandler;
       
   680         friend class CCommandHandler;
       
   681     };
       
   682 
       
   683 #endif // TEST_SERVER_MODULE_IF_H
       
   684 
       
   685 // End of File