os/persistentdata/traceservices/commsdebugutility/SSVR/comsdbgstub.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright (c) 1997-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 // Implements the FLogger server process startup and stubs all functionality.
    15 // 
    16 //
    17 
    18 /**
    19  @file
    20  @internalComponent
    21 */
    22 
    23 #include "comsdbgstub.h"
    24 
    25 
    26 
    27 /********************************************************************************/
    28 //                      Stub Functionality from Flogsvr.cpp
    29 
    30 
    31 
    32 CFileLoggerServer* CFileLoggerServer::NewL()
    33 	{
    34 
    35 	CFileLoggerServer* r=new(ELeave) CFileLoggerServer();
    36 	CleanupStack::PushL(r);
    37 	r->ConstructL();
    38 	r->StartL(KFLoggerServerName);
    39 	CleanupStack::Pop();
    40 	return r;
    41 	}
    42 
    43 CFileLoggerServer::CFileLoggerServer()
    44 	: CServer2(EPriorityNormal,ESharableSessions)
    45 	{}
    46 
    47 void CFileLoggerServer::ConstructL()
    48 /**
    49  *
    50   @note Constructs the secondary thread, passing through a pointer to the log queue.
    51   Constructs the file parser object and parses the file, attempting to copy the
    52   file from the ROM if it is not found on C drive.
    53   Constructs the time beat.
    54   Performs the first UpdateMedia to ensure a media is set.
    55   Stubbed version does very little.
    56  */
    57 	{
    58 	}
    59 
    60 
    61 CFileLoggerServer::~CFileLoggerServer()
    62 	{
    63 	}
    64 
    65 
    66 CSession2* CFileLoggerServer::NewSessionL(const TVersion &aVersion ,const RMessage2& /*aMessage*/) const
    67 /**
    68  * Create a new server session. Check that client is using current or older interface and make a new session.
    69  * @note Called by kernel after RFileLogger::DoConnect().
    70  */
    71 	{
    72 	if (aVersion.iMajor == 1) {}
    73 	return CFileLogSession::NewL();
    74 	}
    75 
    76 
    77 
    78 TInt CFileLoggerServer::RunError(TInt aError)
    79 /**
    80  * Leave has occured in CFileLogSession::ServiceL.
    81  * Usually this is because the appending of the message to the queue has failed
    82  * due to the queue being filled.
    83  */
    84 	{
    85 	return CServer2::RunError(aError);
    86 	}
    87 
    88 //
    89 // CFileLogSession class definition
    90 //
    91 
    92 CFileLogSession* CFileLogSession::NewL()
    93 /**
    94  * Construct new server end of session.
    95  * @note Only called from CFileLoggerServer::NewSessionL()
    96  */
    97 	{
    98 
    99 	CFileLogSession* self = new(ELeave) CFileLogSession();
   100 	return self;
   101 	}
   102 
   103 CFileLogSession::CFileLogSession()
   104 	{}
   105 
   106 
   107 CFileLogSession::~CFileLogSession()
   108 	{
   109 	}
   110 
   111 void CFileLogSession::ServiceL(const RMessage2& aMessage)
   112 /**
   113  Processes message from client-side (RFileLogger)
   114  @note Most messages result in logs being added to the queue. If
   115  synchronous logging is on, this function will wait until the queue is then emptied.
   116  Slimline Stub version
   117  */
   118 	{
   119 	aMessage.Complete(KErrNone);
   120 	}
   121 
   122 
   123 
   124 /////////////////////////////////////////////////////////////////
   125 
   126 
   127 /********************************************************************************/
   128 //                      Stub Functionality from Flogthrd.cpp
   129 
   130 
   131 
   132 const TInt KFLoggerServerUid=0x10004ee0;
   133 
   134 _LIT(KFLoggerServerExecutable,"COMSDBGSVR");           ///< Filename of flogger server executable
   135 
   136 
   137 // only needed for EKA1:
   138 // END EKA1
   139 
   140 
   141 
   142 EXPORT_C TInt FLogger::Start()
   143 /**
   144  * Start the FLOGGER server - called by a hopeful client when they first connect.
   145  * @return TInt of (KErrorNone) if the server startup was successful, otherwise
   146  *         an error code.
   147  */
   148 	{
   149 
   150 	TRequestStatus stat;
   151 
   152 
   153 	TInt ret;
   154 // Different approaches for EKA1/EKA2:
   155 	//
   156 	// Target and EKA2 is easy, we just create a new server process. Simultaneous
   157 	// launching of two such processes should be detected when the second one
   158 	// attempts to create the server object, failing with KErrAlreadyExists.
   159 	//
   160 	RProcess server;
   161 	ret = server.Create(KFLoggerServerExecutable,KNullDesC,TUidType(KNullUid,KNullUid,TUid::Uid(KFLoggerServerUid)));
   162 // END EKA1/EKA2
   163 	
   164 	if (ret!=KErrNone)
   165 		{
   166 		return ret;
   167 		}
   168 
   169 	server.SetPriority(EPriorityHigh);
   170 
   171 	server.Rendezvous(stat);
   172 
   173 	server.Resume();
   174 	
   175 	// setting the server process priority is really just a formality since
   176 	// we set the server's thread priorities to absolute values later anyway.
   177 
   178 	server.Close();
   179 
   180 	User::WaitForRequest(stat);
   181 
   182 	return stat.Int();
   183 	}
   184 
   185 EXPORT_C TInt FLogger::Run()
   186 /**
   187  * Start the active scheduler and create the server. This is called from the DLL entry code.
   188  * @return TInt of (KErrorNone) if the server startup was successful, otherwise
   189  *         an error code.
   190 @internalComponent
   191  */
   192 	{
   193 
   194 	__UHEAP_MARK;
   195 	
   196 	RThread self;
   197 	self.SetPriority(EPriorityAbsoluteHigh); // was EPriorityMore
   198 	self.Close();
   199 	
   200 	TInt ret = KErrNone;
   201 
   202 	CTrapCleanup* cleanup=CTrapCleanup::New();
   203 	if (cleanup==NULL)
   204 		ret=KErrNoMemory;
   205 
   206 	CActiveScheduler* scheduler = NULL;
   207 	CFileLoggerServer* server = NULL;
   208 	if (ret==KErrNone)
   209 		{
   210 		scheduler = new CActiveScheduler;
   211 		if (scheduler == NULL)
   212 			ret = KErrNoMemory;
   213 		else
   214 			{
   215 			CActiveScheduler::Install(scheduler);
   216 			TRAP(ret, server = CFileLoggerServer::NewL());
   217 			}
   218 		}
   219 
   220 	RProcess::Rendezvous(ret);
   221 
   222 	if (ret==KErrNone)
   223 		CActiveScheduler::Start();
   224 
   225 	delete server;
   226 	delete scheduler;
   227 	delete cleanup;
   228 
   229 	__UHEAP_MARKEND;
   230 
   231 	return ret;
   232 	}
   233 
   234 
   235 
   236