00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00035 #include "secureclientandserver.h"
00036 #include "secureserver.h"
00037
00047 TInt CSecureServer::ThreadFunction(TAny* )
00048 {
00049 TInt err;
00050 CTrapCleanup* cleanup = CTrapCleanup::New();
00051 if (cleanup == NULL)
00052 {
00053 PanicServer(ECreateTrapCleanup);
00054 }
00055
00056 CActiveScheduler* pScheduler=new CActiveScheduler;
00057 __ASSERT_ALWAYS(pScheduler,PanicServer(EMainSchedulerError));
00058 CActiveScheduler::Install(pScheduler);
00059
00060 CSecureServer* pServer = NULL;
00061 TRAP(err,pServer = CSecureServer::NewL(EPriorityStandard));
00062 __ASSERT_ALWAYS(!err,CSecureServer::PanicServer(EServerCreateServer));
00063
00064 err = pServer->Start(KSecureServerName);
00065 if (err != KErrNone)
00066 {
00067 CSecureServer::PanicServer(EServerStartServer);
00068 }
00069
00070 RThread::Rendezvous(KErrNone);
00071 CActiveScheduler::Start();
00072
00073 delete pServer;
00074 delete pScheduler;
00075 delete cleanup;
00076
00077 return KErrNone;
00078 }
00079
00087 EXPORT_C TInt StartThread(RThread& aServerThread)
00088 {
00089 TInt res=KErrNone;
00090 TFindServer findCountServer(KSecureServerName);
00091 TFullName name;
00092 if (findCountServer.Next(name)!=KErrNone)
00093 {
00094 res=aServerThread.Create(KSecureServerName,
00095 CSecureServer::ThreadFunction,
00096 KDefaultStackSize,
00097 KDefaultHeapSize,
00098 KDefaultHeapSize,
00099 NULL
00100 );
00101 if (res==KErrNone)
00102 {
00103 TRequestStatus rendezvousStatus;
00104 aServerThread.SetPriority(EPriorityNormal);
00105 aServerThread.Rendezvous(rendezvousStatus);
00106 aServerThread.Resume();
00107 User::WaitForRequest(rendezvousStatus);
00108 }
00109 else
00110 {
00111 aServerThread.Close();
00112 }
00113 }
00114 return res;
00115 }