mmserv/tms/tmsproxy/src/tmsproxy.cpp
changeset 22 128eb6a32b84
parent 14 80975da52420
child 33 5e8b14bae8c3
child 42 1fa3fb47b1e3
--- 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)