commsfwsupport/commselements/rootserver/inc/rscommon.h
changeset 0 dfb7c4ff071f
equal deleted inserted replaced
-1:000000000000 0:dfb7c4ff071f
       
     1 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 // rscommon.h
       
    16 //
       
    17 
       
    18 #ifndef RSCOMMON_H_
       
    19 #define RSCOMMON_H_
       
    20 #include <e32base.h>
       
    21 #include <rserror.h>
       
    22 #include <startup.hrh>
       
    23 #include <cfshared.h>
       
    24 
       
    25 
       
    26 class CRootServer;
       
    27 class CCommsProviderModule;
       
    28 
       
    29 namespace CommsFW
       
    30     {
       
    31     class TCFMessage;
       
    32     }
       
    33 
       
    34 namespace RootServer
       
    35     {
       
    36     class TRSStartModuleParams;
       
    37     }
       
    38 
       
    39 struct TRootServerStartupInfo;
       
    40 typedef CRootServer* (*TRootServerCtor)(const TRootServerStartupInfo&);
       
    41 typedef CCommsProviderModule* (*TCommsProviderModuleCtor)(CRootServer*, const RootServer::TRSStartModuleParams&, HBufC8*);
       
    42 
       
    43 struct TRootServerStartupInfo
       
    44 	{
       
    45 	TName iServerName;
       
    46 	TRootServerCtor iRootServerCtor;
       
    47 	TInt iPriority;
       
    48 	TUid iDeathKey;
       
    49 	TUid iLeakKey;
       
    50 	TUid iProcessKey;
       
    51 	};
       
    52 
       
    53 IMPORT_C TInt RunRootServer(const TRootServerStartupInfo& aRootServerStartupInfo);	// Rootserver thread function
       
    54 
       
    55 class MRootServerNotify
       
    56 /** Mixin abstract interface class providing the bindmanager's up-call to the
       
    57 RootServer.
       
    58  */
       
    59     {
       
    60 public:
       
    61 	virtual void ReceivedMessage(const CommsFW::TCFModuleName& aModule,
       
    62 							     const CommsFW::TCFMessage& aNewMsg)=0;
       
    63     };
       
    64 
       
    65 namespace RootServer
       
    66 /** Namespace encapsulating the Rootserver components
       
    67 @publishedPartner
       
    68 @released
       
    69 */
       
    70 {
       
    71 
       
    72 #undef	_DEBUG_ROOTSERVER_FUNCTIONS
       
    73 #if defined(_DEBUG)
       
    74 #define	_DEBUG_ROOTSERVER_FUNCTIONS
       
    75 #endif
       
    76 
       
    77 // The RootServer API and internals extend subtly to support the requirements
       
    78 // of the multithreaded socket server
       
    79 #define SYMBIAN_C32ROOT_API_V3
       
    80 
       
    81 
       
    82 
       
    83 /** Server entry ordinal.
       
    84 @internalComponent
       
    85 */
       
    86 const TInt KRunRootServerOrd = 1;
       
    87 
       
    88 
       
    89 /** Debug logging codes
       
    90 @internalComponent
       
    91 */
       
    92 _LIT8(KLogSubSysRSModule, "RSModule");	// major tag
       
    93 _LIT8(KLogRSLeakTag, "Leak");			// minor tag
       
    94 
       
    95 /** Rootserver panics
       
    96 @publishedPartner
       
    97 @released
       
    98 */
       
    99 enum TRootServerPanic
       
   100 	{
       
   101 	/** The server did not manage to create a new thread, possibly
       
   102 	   because the thread already existed.
       
   103 	 */
       
   104 	KRSPanicDuplicateThreadCreation,
       
   105 
       
   106 	/** When starting the system property signalling the existence
       
   107 	   of the server already was present.
       
   108 	 */
       
   109 	KRSPubSubFault,
       
   110 
       
   111 	/** The server entered a bad state.
       
   112 	 */
       
   113 	KRSBadState,
       
   114 
       
   115 	/** Unable to find a reference to the module although the module is know
       
   116 		to exist.
       
   117 	 */
       
   118 	KRSModuleRefMissing,
       
   119 
       
   120 	/** The Bind Manager had a critical error.
       
   121 	 */
       
   122 	KRSBindMgrError,
       
   123 
       
   124 	/** The active scheduler could not be created or the server left.
       
   125 	 */
       
   126 	KRSSchedulerError,
       
   127 
       
   128 	/** Out of memory when trying to initialize.
       
   129 	 */
       
   130 	KRSNoMemory,
       
   131 
       
   132 	/** CFlogIf interface could not be created.
       
   133 	 */
       
   134 	KRSCFlogIfCreationFailed
       
   135 	};
       
   136 
       
   137 /** Major version number of the Rootserver.
       
   138  @publishedPartner
       
   139  @released
       
   140   */
       
   141 const TUint KRProcRootMajorVersionNumber=1;
       
   142  
       
   143  /** Minor version number of the Rootserver
       
   144  @publishedPartner
       
   145  @released
       
   146   */
       
   147 const TUint KRProcRootMinorVersionNumber=1;
       
   148  
       
   149  /** Build version number of the Rootserver.
       
   150  @publishedPartner
       
   151  @released
       
   152   */
       
   153 const TUint KRProcRootBuildVersionNumber=1;
       
   154  
       
   155 
       
   156 
       
   157 /**
       
   158 @deprecated Obsolete, always use KUidCommsProviderModule.
       
   159 @internalComponent
       
   160 */
       
   161 const TInt32 KUidCommsServerModule=0x101f7417;
       
   162 
       
   163 /** DLL type of a Comms Provider Module (2nd UID).
       
   164 @publishedPartner
       
   165 @released
       
   166 */
       
   167 const TInt32 KUidCommsProviderModule=0x101f7418;
       
   168 /** The states which the Rootserver goes through while initialising.
       
   169 @publishedPartner
       
   170 @released
       
   171 */
       
   172 
       
   173 /** This Key is incremented when a leak is detected on thread shutdown.
       
   174 The category used in NOT the system cateory but rather KUidCommsProcess
       
   175 As required by Platsec
       
   176 @internalComponent
       
   177 @released
       
   178 */
       
   179 const TUint32 KUidCommsModuleLeakCounter = 0x102827D0;
       
   180 
       
   181 enum TRSStartState
       
   182 	{
       
   183 	/** The Rootserver is initialising.
       
   184 	 */
       
   185 	EInitialising = 0,
       
   186 	/** Core system components such as the socket server are running and configured.
       
   187 	 */
       
   188 	ECoreComponentsStarted = 10,
       
   189 	/** All configuration has been applied
       
   190 	 */
       
   191 	EConfigurationComplete = 32,
       
   192 	/** The Rootserver is configured and ready for normal operation.
       
   193 	@deprecated
       
   194 	 */
       
   195 	EConfigured = 1,
       
   196 	/** The Rootserver should be reconfigured by the configurator (aka warm booting)
       
   197 	 */
       
   198 	EReset = -1
       
   199 	};
       
   200 
       
   201 enum {
       
   202 	/** Staged Start-up State values are expanded by this factor to allow fine control
       
   203 	of start dependencies through .CMI files
       
   204 	*/
       
   205 	KC32StartupStateScalingFactor = 0x100,
       
   206 	/** Start sequence values less than this ceiling are converted into SSA state values by adding
       
   207 	them to KC32LowStartSequenceScaleBase.
       
   208 	@see KC32LowStartSequenceScaleBase
       
   209 	*/
       
   210 	KC32LowStartSequenceCeiling = 5,
       
   211 	/** Base for converting low start sequence values to Staged Start-up State values.
       
   212 	@see KC32LowStartSequenceCeiling
       
   213 	*/
       
   214 	KC32LowStartSequenceScaleBase = (EStartupStateCriticalStatic * KC32StartupStateScalingFactor) + 0x40,
       
   215 	/** Start sequence values greater than KC32LowStartSequenceCeiling and less than this ceiling are
       
   216 	converted into SSA state values by adding them to KC32MidStartSequenceScaleBase.
       
   217 	@see KC32MidStartSequenceScaleBase
       
   218 	@see KC32LowStartSequenceCeiling
       
   219 	*/
       
   220 	KC32MidStartSequenceCeiling = 10,
       
   221 	/** Base for converting mid start sequence values to Staged Start-up State values.
       
   222 	@see KC32MidStartSequenceCeiling
       
   223 	*/
       
   224 	KC32MidStartSequenceScaleBase = (EStartupStateCriticalStatic * KC32StartupStateScalingFactor) + 0x80,
       
   225 	/**  KC32HighStartSequenceScaleBase.
       
   226 	@see KC32HighStartSequenceScaleBase
       
   227 	@see KC32MidStartSequenceCeiling
       
   228 	*/
       
   229 	/** Start sequence values greater than KC32MidStartSequenceCeiling are
       
   230 	converted into SSA state values by adding them to this base.
       
   231 	@see KC32MidStartSequenceCeiling
       
   232 	*/
       
   233 	KC32HighStartSequenceScaleBase = (EStartupStateNonCritical * KC32StartupStateScalingFactor) + 0x40,
       
   234 	/** Scaled start sequence signalling that core Comms components have completed loading, used by some
       
   235 	servers to release blocked client connections.
       
   236 	@see TRSStartState::ECoreComponentsStarted
       
   237 	*/
       
   238 	KC32CoreComponentsStartedScaled = (EStartupStateCriticalStatic + 1) * KC32StartupStateScalingFactor - 1,
       
   239 	};
       
   240 
       
   241 /** The states of a Comms Provider Module.
       
   242 @publishedPartner
       
   243 @released
       
   244 */
       
   245 enum TRSModuleState
       
   246 	{
       
   247 	/** Not running, probably just instantiated.
       
   248 	 */
       
   249 	EIdle = 1,
       
   250 	/** Started, waiting for rendezvous.
       
   251 	 */
       
   252 	EStarting = 2,
       
   253 	/** Running normally.
       
   254 	 */
       
   255 	ERunning = 3,
       
   256 	/** In the process of shutting down but thread still alive.
       
   257 	 */
       
   258 	EStopping = 4,
       
   259 	/** Thread suddenly died, in the process of cleaning up.
       
   260 	 */
       
   261 	EZombie = 5,
       
   262 	/** Thread dead, in the process of being cleaned up.
       
   263 	 */
       
   264 	EDead = 6
       
   265 	};
       
   266 
       
   267 /** RootServer IPC numbers/messages
       
   268 @internalComponent
       
   269 */
       
   270 enum TRSMessages
       
   271 	{
       
   272 	RSIsCallerConfigurator = 1,
       
   273 	RSLoadModule = 2,
       
   274 	RSUnloadModule = 3,
       
   275 	RSBind = 4,
       
   276 	RSUnbind = 5,
       
   277 	RSGetModuleInfo = 6,
       
   278 	RSEnumerateModules = 7,
       
   279 	RSEnumerateSubModules = 8,
       
   280 	RSEnumerateBindings = 9,
       
   281 	RSCancelLoadModule = 10,
       
   282 	RSCancelUnloadModule = 11,
       
   283 	RSCancelBind = 12,
       
   284 	RSCancelUnbind = 13,
       
   285 	RSCloseSession = 14,
       
   286 	RSShutdown = 15,
       
   287 	RSSendMessage = 16,
       
   288 	RSDbgMarkHeap = 17,
       
   289 	RSDbgCheckHeap = 18,
       
   290 	RSDbgMarkEnd = 19,
       
   291 	RSDbgFailNext = 20
       
   292 	};
       
   293 
       
   294 /** Type of binding specified
       
   295 @publishedPartner
       
   296 @released
       
   297 */
       
   298  enum TRSBindType
       
   299 	 {
       
   300 	 /** Standard top-bottom binding. that doesn't allow server
       
   301 	 modules to be the lower part of the binding.
       
   302 	 */
       
   303 	 EHierarchical,
       
   304 	 /** Custom horizontal binding between Modules.
       
   305 	  */
       
   306 	 ECustom
       
   307 	 };
       
   308 
       
   309 /** Type of unload; send shutdown message or kill thread
       
   310 @publishedPartner
       
   311 @released
       
   312 */
       
   313 typedef CommsFW::TCFShutdownType TRSUnLoadType;
       
   314 
       
   315 /** Type of heap; default is process wide shared heap.
       
   316 @publishedPartner
       
   317 @released
       
   318 */
       
   319 enum TRSHeapType
       
   320 	{
       
   321 	/** Process wide shared heap.
       
   322 	 */
       
   323 	EDefaultHeap,
       
   324 	/** A heap shared with another module.
       
   325 	 */
       
   326 	EShareHeap,
       
   327 	/** A new heap for the module.
       
   328 	 */
       
   329 	ENewHeap
       
   330 	};
       
   331 
       
   332 // IPC Data holder
       
   333 class TRSStartModuleParamContainer
       
   334 /** Container for necessary parameters to start a CPM.
       
   335 @publishedPartner
       
   336 @released
       
   337 */
       
   338 	{
       
   339 	public:
       
   340 	inline TRSStartModuleParamContainer();
       
   341 
       
   342 	public:
       
   343     /** Name of the module and its thread.
       
   344 		@see TCFModuleName
       
   345 	 */
       
   346 	CommsFW::TCFModuleName iName;
       
   347     /** Filename of the Comms Provider Module DLL.
       
   348 		@see TFileName
       
   349 	 */
       
   350 	TFileName iFilename;
       
   351     /** Priority of the CPM thread.
       
   352 		@see TThreadPriority
       
   353 	 */
       
   354 	TThreadPriority iPriority;
       
   355     /** Initial size of the stack.
       
   356 	 */
       
   357 	TInt iStackSize;
       
   358     /** Type of the heap for the module.
       
   359 		@see TRSHeapType
       
   360 	 */
       
   361 	TRSHeapType iHeapType;
       
   362 	/** Minimum size of the heap for the module.
       
   363 	 */
       
   364 	TInt iMinHeapSize;
       
   365 	/** Maximum size of the heap for the module.
       
   366 	 */
       
   367 	TInt iMaxHeapSize;
       
   368 	/** If the module are to share the heap with
       
   369 		an existing module this must be the name
       
   370 		of the other module.
       
   371 	 */
       
   372 	CommsFW::TCFModuleName iShareHeapWith;
       
   373 	/** Ordinal of the CPM main thread function,
       
   374 		or entrypoint, in the DLL.
       
   375 	 */
       
   376 	TInt iThreadFunctionOrdinal;
       
   377 	/** If ETrue specifies that this module can ot be unloaded.
       
   378 	 */
       
   379 	TBool iIsSticky;
       
   380 	/** Specifies that this module is a server, maening that
       
   381 		it can only be on top in a EHierarchical binding.
       
   382 		@see TRSBindType
       
   383 	 */
       
   384 	TBool iIsServer;
       
   385 	/** Additional control flags, or'd together from the the KCF_ flags. All undefined bits
       
   386 		are reserved for future need and MUST be set to zero
       
   387 	 */
       
   388 	TUint32 iControlFlags;
       
   389 	/** Control flag masks; see individual bit descriptions.
       
   390 	 */
       
   391 	enum TControlFlags
       
   392 		{
       
   393 		/** Module thread is marked as System() - a panic will halt the device and launch the
       
   394 			crash debugger or reboot. The decision of action following a panic is normally left
       
   395 			to the configurator and so this flag should not be commonly set; its purpose is
       
   396 			to make debugging easier by halting at the source of failure.
       
   397 		*/
       
   398 		  KCF_ThreadAsSystem = 0x00000001
       
   399 #ifdef SYMBIAN_C32ROOT_API_V3
       
   400 		, KCF_UnstableModule = 0x00000002,
       
   401 		/** If we shut down a module with EImmediate og EUngraceful, this flag will cause
       
   402 		the rootserver to not check for memory leaks in the heap belonging to the module.
       
   403 		*/
       
   404 		  KCF_ModuleImmediateNoCheck = 0x00000004
       
   405 #endif
       
   406 		};
       
   407 
       
   408 	};
       
   409 
       
   410  class TRSStartModuleParams : public TPckg<TRSStartModuleParamContainer>
       
   411 /** Descriptor encapsulating the TRSModParamContainer for
       
   412 	IPC transfers.
       
   413 @publishedPartner
       
   414 @released
       
   415 */
       
   416     {
       
   417 	public:
       
   418 	TRSStartModuleParams():TPckg<TRSStartModuleParamContainer>(iParams) {};
       
   419 	inline TRSStartModuleParams(const CommsFW::TCFModuleName& aName, const TFileName& aFileName,
       
   420 								const TThreadPriority aPriority, TInt aStackSize, const TRSHeapType aHeapType,
       
   421 								TInt aMinHeapSize, TInt aMaxHeapSize, const CommsFW::TCFModuleName& aShareHeapWith,
       
   422 								TInt aThreadFunctionOrdinal=0, TBool aIsSticky=EFalse, TUint32 aControlFlags=0);
       
   423 
       
   424 	inline TRSStartModuleParams(const CommsFW::TCFModuleName& aName, const TFileName& aFileName,
       
   425 								const TThreadPriority aPriority, TInt aStackSize, const TRSHeapType aHeapType,
       
   426 								TInt aMinHeapSize, TInt aMaxHeapSize, TInt aThreadFunctionOrdinal=0,
       
   427 								TBool aIsSticky=EFalse, TUint32 aControlFlags=0);
       
   428 	inline TRSStartModuleParams(const CommsFW::TCFModuleName& aName, const TFileName& aFileName,
       
   429 								const TThreadPriority aPriority, TInt aStackSize, const TRSHeapType aHeapType,
       
   430 								TInt aThreadFunctionOrdinal=0, TBool aIsSticky=EFalse, TUint32 aControlFlags=0);
       
   431     private:
       
   432 	TRSStartModuleParams(const TRSStartModuleParams &aRef); //Never Implemented
       
   433 	public:
       
   434 	/** Structure containing the parameters for the request.
       
   435 	 */
       
   436 	TRSStartModuleParamContainer iParams;
       
   437 	};
       
   438 
       
   439  class TRSModuleInfoContainer
       
   440 /** Container for receiving information of a running CPM.
       
   441 @publishedPartner
       
   442 @released
       
   443 */
       
   444 	{
       
   445 	public:
       
   446 	/** Name of the module.
       
   447 	 */
       
   448 	CommsFW::TCFModuleName iName;
       
   449     /** Filename of the CPM DLL.
       
   450 	 */
       
   451 	TFileName iDll;
       
   452 	/** State of the CPM.
       
   453 	 */
       
   454 	TRSModuleState iState;
       
   455 	/** Number of submodules this module has reported.
       
   456 	 */
       
   457 	TInt iNumSubModules;
       
   458 	};
       
   459 
       
   460 class TRSModuleInfo : public TPckg<TRSModuleInfoContainer>
       
   461 /** Descriptor encapsulating the TRSModuleInfoContainer for
       
   462 IPC transfers.
       
   463 @publishedPartner
       
   464 @released
       
   465 */
       
   466 	{
       
   467 	public:
       
   468 	TRSModuleInfo():TPckg<TRSModuleInfoContainer>(iParams) {};
       
   469 	inline TRSModuleInfo(const CommsFW::TCFModuleName aName, const TFileName& aDll,
       
   470 						 const TRSModuleState aState, const TInt aNumSubModules);
       
   471     private:
       
   472 	TRSModuleInfo(const TRSModuleInfo &aRef); //Never implemented
       
   473 	public:
       
   474 	/** Structure containing the parameters for the request.
       
   475 	 */
       
   476 	TRSModuleInfoContainer iParams;
       
   477 	};
       
   478 
       
   479 class TRSSubModuleAddress : public TPckg<CommsFW::TCFSubModuleAddress>
       
   480 /** Descriptor encapsulating a TCFSubModuleAddress for
       
   481 IPC transfers.
       
   482 @publishedPartner
       
   483 @released
       
   484 */
       
   485 	{
       
   486 	public:
       
   487 	TRSSubModuleAddress():TPckg<CommsFW::TCFSubModuleAddress>(iAddress) {};
       
   488 		inline TRSSubModuleAddress(const CommsFW::TCFSubModuleAddress& aAddress);
       
   489 		inline TRSSubModuleAddress(const CommsFW::TCFModuleName& aModule, const CommsFW::TCFSubModuleName& aSubModule);
       
   490 
       
   491     private:
       
   492 	TRSSubModuleAddress(const TRSSubModuleAddress &aRef); //Never implemented
       
   493 	public:
       
   494 	/** Structure containing the parameters for the request.
       
   495 	 */
       
   496 	CommsFW::TCFSubModuleAddress iAddress;
       
   497 	};
       
   498 
       
   499 class TRSBindingInfoContainer
       
   500 /** Container for receiving binding information.
       
   501 @publishedPartner
       
   502 @released
       
   503 */
       
   504 	{
       
   505 	public:
       
   506 	inline TRSBindingInfoContainer& operator=(const TRSBindingInfoContainer& aInfo);
       
   507 	public:
       
   508 	/** Type of binding.
       
   509 		@see TRSBindType
       
   510 	*/
       
   511 	TRSBindType iType;
       
   512 	/** Fully qualified address of the first submodule.
       
   513 		@see TCFSubModuleAddress
       
   514 	*/
       
   515 	CommsFW::TCFSubModuleAddress iAddress1;
       
   516 	/** Fully qualified address of the second submodule.
       
   517 		@see TCFSubModuleAddress
       
   518 	*/
       
   519 	CommsFW::TCFSubModuleAddress iAddress2;
       
   520 	/** Status of the binding in reference to the first submodule.
       
   521 	 */
       
   522 	TInt iState1;
       
   523 	/** Status of the binding in reference to the seond submodule.
       
   524 	 */
       
   525 	TInt iState2;
       
   526 	/** The number of channels on the message queue going forward.
       
   527 	 */
       
   528 	TInt iForwardQLength;
       
   529 	/** The number of channels on the message queue going in the reverse direction.
       
   530 	 */
       
   531 	TInt iReverseQLength;
       
   532 	};
       
   533 
       
   534 class TRSBindingInfo : public TPckg<TRSBindingInfoContainer>
       
   535 /** Descriptor encapsulating a TRSBindingInfoContainer for
       
   536 IPC transfers.
       
   537 @publishedPartner
       
   538 @released
       
   539 */
       
   540 	{
       
   541 	public:
       
   542 	enum
       
   543 		{
       
   544 		EMaxQueueLength = KMaxTInt/2,
       
   545 		EMinQueueLength = 1
       
   546 		};
       
   547 
       
   548 	public:
       
   549 	TRSBindingInfo():TPckg<TRSBindingInfoContainer>(iParams) {};
       
   550 	inline TRSBindingInfo(const TRSBindType& aType, const CommsFW::TCFSubModuleAddress& aAddress1,
       
   551 						  const CommsFW::TCFSubModuleAddress& aAddress2,
       
   552 						  const TInt aForwardQLength = 1, const TInt aReverseQLength = 1);
       
   553 
       
   554 	inline TRSBindingInfo& operator=(const TRSBindingInfo& aInfo);
       
   555 	inline TRSBindingInfo(const TRSBindingInfo &aRef);
       
   556 
       
   557 	public:
       
   558 	/** Structure containing the parameters for the request.
       
   559 	 */
       
   560 	TRSBindingInfoContainer iParams;
       
   561 	};
       
   562 
       
   563 class TRSUnBindingInfoContainer
       
   564 /** Parameter container for unbinding request
       
   565 @publishedPartner.
       
   566 @released
       
   567 */
       
   568 	{
       
   569 	public:
       
   570 	/** Fully qualified address of the first submodule.
       
   571 		@see TCFSubModuleAddress
       
   572 	*/
       
   573 	CommsFW::TCFSubModuleAddress iAddress1;
       
   574 	/** Fully qualified address of the second submodule.
       
   575 		@see TCFSubModuleAddress
       
   576 	*/
       
   577 	CommsFW::TCFSubModuleAddress iAddress2;
       
   578 	/** Status of the binding in reference to the first submodule.
       
   579 	 */
       
   580 	TInt iState1;
       
   581 	/** Status of the binding in reference to the second submodule.
       
   582 	 */
       
   583 	TInt iState2;
       
   584 	};
       
   585 
       
   586 class TRSUnBindingInfo : public TPckg<TRSUnBindingInfoContainer>
       
   587 /** Descriptor encapsulating a TRSUnBindingInfoContainer for
       
   588 IPC transfers.
       
   589 @publishedPartner
       
   590 @released
       
   591 */
       
   592 	{
       
   593 	public:
       
   594 	TRSUnBindingInfo():TPckg<TRSUnBindingInfoContainer>(iParams) {};
       
   595 	inline TRSUnBindingInfo(const CommsFW::TCFSubModuleAddress aAddress1, const CommsFW::TCFSubModuleAddress aAddress2);
       
   596 
       
   597     private:
       
   598 	TRSUnBindingInfo(const TRSUnBindingInfo &aRef); //Never Implemented
       
   599 	public:
       
   600 	/** Structure containing the parameters for the request.
       
   601 	 */
       
   602 	TRSUnBindingInfoContainer iParams;
       
   603 	};
       
   604 
       
   605 class TRSIter
       
   606 /** Encapsulates the iterator position in a Root Server enumeration
       
   607 @publishedPartner.
       
   608 @released
       
   609 */
       
   610 	{
       
   611 	public:
       
   612 	inline TRSIter();
       
   613 	inline const TInt& operator()() const;
       
   614 	inline TInt& operator()();
       
   615 	inline void Reset();
       
   616 	private:
       
   617 	TInt iPosition;
       
   618 	};
       
   619 
       
   620 
       
   621 #include <rscommon.inl>
       
   622 
       
   623 } // namespace RootServer
       
   624 #endif /*RSCOMMON_H_*/
       
   625