diff -r 43d09473c595 -r 128eb6a32b84 mmserv/tms/tmsproxy/src/tmsproxy.cpp --- a/mmserv/tms/tmsproxy/src/tmsproxy.cpp Fri May 14 16:22:35 2010 +0300 +++ b/mmserv/tms/tmsproxy/src/tmsproxy.cpp Thu May 27 13:20:50 2010 +0300 @@ -36,43 +36,45 @@ // ----------------------------------------------------------------------------- // StartServer -// Static function to start the server process thread. -// Start the server process/thread which lives in an EPOCEXE object. -// Returns: gint: TMS_RESULT_SUCCESS (0) if no error +// +// Function that will launch TMS server executable in it its own process. +// Start the server process/thread, which lives in an EPOCEXE object. +// Returns: gint: TMS_RESULT_SUCCESS (0) if no error. // ----------------------------------------------------------------------------- // -static gint StartServer() +gint TMSProxy::StartServer() { const TUidType serverUid(KNullUid, KNullUid, KTMSServerUid3); // Only one instance of the server is allowed. Attempt of launching // second instance of the server will fail with KErrAlreadyExists. RProcess server; - gint r = server.Create(KTMSServerName, KNullDesC, serverUid); + gint ret = server.Create(KTMSServerFile, KNullDesC, serverUid); + + if (ret == TMS_RESULT_SUCCESS) + { + TRequestStatus stat; + server.Rendezvous(stat); - if (r != TMS_RESULT_SUCCESS) - { - return r; + if (stat != KRequestPending) + { + server.Kill(0); // abort startup + } + else + { + server.Resume(); // logon OK - start the server + } + + User::WaitForRequest(stat); // wait for start or death + + // We can't use the 'exit reason' if the server panicked, as '0' is a + // valid panic 'reason', which cannot be distinguished from + // TMS_RESULT_SUCCESS. + ret = (server.ExitType() == EExitPanic) ? KErrGeneral : stat.Int(); + server.Close(); } - TRequestStatus stat; - server.Rendezvous(stat); - - if (stat != KRequestPending) - { - server.Kill(0); // abort startup - } - else - { - server.Resume(); // logon OK - start the server - } - - User::WaitForRequest(stat); // wait for start or death - - // Panic reason cannot be '0' as it would conflict with TMS_RESULT_SUCCESS - r = (server.ExitType() == EExitPanic) ? KErrGeneral : stat.Int(); - server.Close(); - return r; + return ret; } // ----------------------------------------------------------------------------- @@ -439,7 +441,7 @@ gint unilen = str->len / KUTF8Multiply; TRAP(status, buf = HBufC::NewL(unilen)); - if (status == KErrNone) + if (buf && status == KErrNone) { TPtr p = buf->Des(); p.Copy((TUint16*) str->str, unilen); @@ -475,7 +477,7 @@ HBufC8* buf(NULL); gint len = str->len; TRAP(status, buf = HBufC8::NewL(len)); - if (status == KErrNone) + if (buf && status == KErrNone) { TPtr8 p = buf->Des(); p.Copy((TUint8*) str->str, len); @@ -538,8 +540,9 @@ EXPORT_C gint TMSProxy::StartDTMF(TMSStreamType streamtype, GString* tone) { TRACE_PRN_FN_ENT; + __ASSERT_ALWAYS(tone, PANIC(TMS_RESULT_NULL_ARGUMENT)); + gint status(TMS_RESULT_SUCCESS); - HBufC* buf(NULL); TRAP(status, buf = HBufC::NewL(tone->len)); if (status == KErrNone) @@ -555,10 +558,8 @@ args.Set(1, &p1); status = RSessionBase::SendReceive(ETMSStartDTMF, args); } - delete buf; buf = NULL; - TRACE_PRN_FN_EXT; return TMSRESULT(status); } @@ -965,7 +966,7 @@ { TMSSignalEvent event = {}; //all elements initialized to zeros event.type = aEventType; - event.reason = aError; + event.reason = TMSRESULT(aError); event.user_data = NULL; //use only to return data passed in by the user switch (aEventType)