--- 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)