--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/common/sosserver/src/nsmlsosserver.cpp Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Symbian OS Server source.
+*
+*/
+
+
+#include <f32file.h>
+#include <e32math.h>
+
+#include <nsmldebug.h>
+#include "nsmlsosserver.h"
+
+GLDEF_C TInt E32Main() // main function called by E32
+ {
+ return LaunchServer();
+ }
+
+// --------------------------------------------------------------------------
+// EXPORT_C TInt LaunchServer()
+// --------------------------------------------------------------------------
+//
+TInt LaunchServer()
+ {
+ // check server not already started
+ TFindServer findSOSServer( KSOSServerName );
+ TFullName name;
+ if ( findSOSServer.Next(name) == KErrNone )
+ { // found server already
+ return KErrGeneral;
+ }
+
+ // create server thread
+ RSemaphore signal;
+ signal.CreateLocal(0);
+
+ // randomize server thread's name
+ TName threadName( KSOSServerThread );
+ threadName.AppendNum( Math::Random(), EHex );
+
+ RThread thread;
+ TInt res = thread.Create( threadName, // name of thread
+ CNSmlSOSServer::ThreadFunction, // thread function
+ KDefaultStackSize, NULL,
+ &signal ); // parameter to thread function
+
+ if ( res != KErrNone )
+ {
+ thread.Close();
+ return res;
+ }
+ // start thread
+ thread.SetPriority(EPriorityMuchMore); // set priority
+ thread.Resume();
+ thread.Close();
+ signal.Wait();
+ signal.Close();
+
+ return res;
+ }
+
+// --------------------------------------------------------------------------
+// void CNSmlSOSServer::PanicServer( TNSmlSOSServerPanic aPanic )
+// --------------------------------------------------------------------------
+//
+void CNSmlSOSServer::PanicServer( TNSmlSOSServerPanic aPanic )
+ {
+ _LIT(KTxtSOSServer,"SOSServer");
+ User::Panic(KTxtSOSServer,aPanic);
+ }
+
+// --------------------------------------------------------------------------
+// TInt CNSmlSOSServer::ThreadFunction(TAny* aStarted)
+// --------------------------------------------------------------------------
+//
+TInt CNSmlSOSServer::ThreadFunction( TAny* aStarted )
+ {
+#ifdef __CLIENT_API_MT_
+ __UHEAP_MARK;
+#endif // __CLIENT_API_MT_
+
+ // create cleanup stack
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ if ( !cleanup )
+ {
+ PanicServer(ECleanupCreateError);
+ }
+
+ DBG_BEGIN();
+ _DBG_FILE("CNSmlSOSServer::ThreadFunction(): CleanupStack created.");
+
+ // convert argument to semaphore
+ RSemaphore& started= *(RSemaphore*) aStarted;
+
+ // construct and install active scheduler
+ CActiveScheduler* scheduler = new CActiveScheduler;
+ __ASSERT_ALWAYS( scheduler,PanicServer(EMainSchedulerError) );
+ CActiveScheduler::Install( scheduler );
+
+ // construct server
+ CNSmlSOSServer* server = NULL;
+ TRAPD( err, server = CNSmlSOSServer::NewL());
+
+ RProcess::Rendezvous( err );
+
+ // start handling requests
+ CActiveScheduler::Start();
+
+ started.Signal();
+
+ _DBG_FILE("CNSmlSOSServer::ThreadFunction(): CActiveScheduler stopped");
+
+ delete server;
+ delete scheduler;
+ delete cleanup;
+
+#ifdef __CLIENT_API_MT_
+ __UHEAP_MARKEND;
+#endif // __CLIENT_API_MT_
+
+ return err;
+ }
+
+// --------------------------------------------------------------------------
+// CNSmlSOSServer* CNSmlSOSServer::NewL()
+// --------------------------------------------------------------------------
+//
+CNSmlSOSServer* CNSmlSOSServer::NewL()
+ {
+ _DBG_FILE("CNSmlSOSServer::NewL(): begin");
+
+ CNSmlSOSServer* self = new (ELeave) CNSmlSOSServer();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ self->StartL(KSOSServerName);
+ CleanupStack::Pop(); // self
+
+ _DBG_FILE("CNSmlSOSServer::NewL(): end");
+
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CNSmlSOSServer::CNSmlSOSServer()
+// --------------------------------------------------------------------------
+//
+CNSmlSOSServer::CNSmlSOSServer() : CServer2(EPriorityStandard, ESharableSessions)
+ {
+ }
+
+// --------------------------------------------------------------------------
+// void CNSmlSOSServer::ConstructL()
+// --------------------------------------------------------------------------
+//
+void CNSmlSOSServer::ConstructL()
+ {
+ iHandler = CNSmlSOSHandler::NewL();
+ iBackup = CNSmlSOSBackup::NewL(iHandler);
+ iObjConIndex = CObjectConIx::NewL();
+ }
+
+// --------------------------------------------------------------------------
+// CNSmlSOSServer::~CNSmlSOSServer()
+// --------------------------------------------------------------------------
+//
+CNSmlSOSServer::~CNSmlSOSServer()
+ {
+ delete iBackup;
+ delete iHandler;
+ delete iObjConIndex;
+ }
+
+// --------------------------------------------------------------------------
+// CSession2* CNSmlSOSServer::NewSessionL( const TVersion& aVersion, const RMessage2& aMessage ) const
+// --------------------------------------------------------------------------
+//
+CSession2* CNSmlSOSServer::NewSessionL( const TVersion& aVersion, const RMessage2& /*aMessage*/ ) const
+ {
+ _DBG_FILE("CNSmlSOSServer::NewSessionL(): begin");
+ TVersion v(KNSmlSOSServerVersionMajor, KNSmlSOSServerVersionMinor, 0);
+ if( !User::QueryVersionSupported(v,aVersion) )
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ iBackup->Subscribe();
+
+ _DBG_FILE("CNSmlSOSServer::NewSessionL(): end");
+ return CNSmlSOSSession::NewL( (CNSmlSOSServer*)this, iHandler );
+ }
+
+// --------------------------------------------------------------------------
+// CObjectCon* CNSmlSOSServer::NewContainerL()
+// --------------------------------------------------------------------------
+//
+CObjectCon* CNSmlSOSServer::NewContainerL()
+ {
+ return iObjConIndex->CreateL();
+ }
+
+//End of File
+