sdkcreationmw/sdkruntimes/loggingapi/src/EcmtClient.cpp
author Shabe Razvi <shaber@symbian.org>
Thu, 04 Nov 2010 17:22:05 +0000
changeset 4 b3b823debf08
parent 0 b26acd06ea60
permissions -rw-r--r--
Workaround for Bug 3917 - CWinsockInterface::DataSent calls NotifyDataSent which is not implemented.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     1
/*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     2
* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     3
* All rights reserved.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     4
* This component and the accompanying materials are made available
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     6
* which accompanies this distribution, and is available
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     8
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     9
* Initial Contributors:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    11
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    12
* Contributors:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    13
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    14
* Description:  Client interface for EcmtServer
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    15
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    16
*/
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    17
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    18
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    19
// INCLUDE FILES
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    20
#include <e32svr.h>
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    21
#include "EcmtClient.h"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    22
#include "EcmtUids.h"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    23
#include "EcmtClientServerCommon.h"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    24
#include "EcmtServerListener.h"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    25
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    26
_LIT(KEcmtServerFilename, "\\sys\\bin\\EcmtCore.exe");
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    27
const TInt KServerStartTimeout = 30000000; // 30 sec
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    28
const TInt KServerCheckTimeout = 1000000;  // 1 sec
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    29
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    30
// ============================= LOCAL FUNCTIONS =============================
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    31
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    32
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    33
// StartServer
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    34
// Starts the Ecmt server if it is not yet running.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    35
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    36
static TInt StartServer()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    37
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    38
    TFindServer findServer( KEcmtServerName );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    39
    TFullName name;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    40
    // Try to find Ecmt server
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    41
    TInt result = findServer.Next( name );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    42
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    43
    if ( result != KErrNone )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    44
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    45
        // Server not yet running, so must launch it.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    46
        // Create a semaphore that will be signaled by server when
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    47
        // it has completed its "boot" sequence.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    48
        RSemaphore semaphore;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    49
        result = semaphore.CreateGlobal( KEcmtSemaphoreName, 0 );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    50
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    51
        if ( result == KErrNone || result == KErrAlreadyExists )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    52
        {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    53
            // Semaphore created succesfully (or it existed already)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    54
            // so launch the server process.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    55
            RProcess server;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    56
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    57
            const TUid KEcmtServerUid = { KECMT_SERVER_UID };
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    58
            const TUidType serverUid( KNullUid, KNullUid, KEcmtServerUid );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    59
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    60
            result = server.Create(KEcmtServerFilename, KNullDesC, serverUid);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    61
            if (result == KErrNone)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    62
            {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    63
                server.Resume();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    64
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    65
                TTime now, deadline;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    66
                now.HomeTime();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    67
                deadline.HomeTime();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    68
                deadline += TTimeIntervalMicroSeconds32(KServerStartTimeout);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    69
                result = KErrTimedOut;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    70
                while (result == KErrTimedOut && now < deadline)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    71
                {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    72
                    result = (server.ExitType() == EExitPending) ?
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    73
                        semaphore.Wait(KServerCheckTimeout) : 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    74
                        KErrGeneral;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    75
                }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    76
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    77
                server.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    78
            }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    79
        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    80
        else
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    81
        {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    82
            semaphore.Wait(KServerStartTimeout);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    83
        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    84
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    85
        semaphore.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    86
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    87
    return result;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    88
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    89
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    90
// ============================ MEMBER FUNCTIONS =============================
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    91
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    92
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    93
// REcmt::REcmt
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    94
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    95
EXPORT_C REcmt::REcmt( ) : iServerListener(0)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    96
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    97
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    98
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    99
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   100
// REcmt::~REcmt
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   101
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   102
EXPORT_C REcmt::~REcmt( )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   103
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   104
    delete iServerListener;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   105
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   106
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   107
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   108
// REcmt::Connect
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   109
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   110
EXPORT_C TInt REcmt::Connect( )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   111
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   112
    // Start server (unless it is already running)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   113
    TInt error = StartServer();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   114
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   115
    if (KErrNone == error)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   116
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   117
        error = CreateSession( KEcmtServerName,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   118
                               TVersion( KEcmtServerMajorVersionNumber,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   119
                                         KEcmtServerMinorVersionNumber,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   120
                                         KEcmtServerBuildVersionNumber ) );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   121
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   122
    return error;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   123
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   124
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   125
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   126
// REcmt::Close
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   127
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   128
EXPORT_C void REcmt::Close( )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   129
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   130
    if ( iServerListener )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   131
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   132
        delete iServerListener;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   133
        iServerListener = 0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   134
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   135
    RHandleBase::Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   136
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   137
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   138
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   139
// REcmt::SetServerObserver
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   140
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   141
EXPORT_C void REcmt::SetServerObserverL( MEcmtServerObserver* /* aObserver */ )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   142
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   143
    User::Leave( KErrNotSupported );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   144
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   145
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   146
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   147
// REcmt::SetServerObserver
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   148
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   149
EXPORT_C void REcmt::SetServerObserverL( TUid aUid, MEcmtServerObserver* aObserver )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   150
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   151
    iServerListener = new (ELeave) CEcmtServerListener( aObserver, *this ); 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   152
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   153
    TIpcArgs messageParameters( aUid.iUid );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   154
    SendReceive( EEcmtNotifyUid, messageParameters ); // ignore return code
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   155
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   156
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   157
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   158
// REcmt::RequestServerNotification
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   159
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   160
void REcmt::RequestServerNotification( TDes8& aDes, TRequestStatus& aStatus )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   161
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   162
    TIpcArgs messageParameters( &aDes );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   163
    SendReceive( EEcmtRequestServerNotification, messageParameters, aStatus );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   164
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   165
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   166
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   167
// REcmt::CancelRequestServerMessage
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   168
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   169
void REcmt::CancelRequestServerNotification( )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   170
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   171
    SendReceive( EEcmtCancelRequestServerNotification, TIpcArgs( ) );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   172
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   173
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   174
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   175
// REcmt::Send
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   176
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   177
EXPORT_C void REcmt::Send( const TUint uid, const TDesC8& aData )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   178
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   179
    TIpcArgs messageParameters( uid, &aData );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   180
    SendReceive( EEcmtRequestSendData, messageParameters );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   181
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   182
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   183
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   184
// REcmt::Write
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   185
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   186
EXPORT_C void REcmt::Write( const TDesC16& aText )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   187
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   188
    TIpcArgs messageParameters( &aText );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   189
    SendReceive( EEcmtRequestSendText, messageParameters );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   190
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   191
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   192
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   193
// REcmt::WriteFormat
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   194
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   195
EXPORT_C void REcmt::WriteFormat( TRefByValue<const TDesC16> aFmt, ... )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   196
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   197
    VA_LIST list;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   198
    VA_START( list, aFmt );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   199
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   200
    TBuf16<KFormatMaxSize> buf;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   201
    buf.FormatList( aFmt, list );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   202
    Write( buf );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   203
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   204
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   205
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   206
// REcmt::GetServer
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   207
// Returns thread local instance of REcmt client
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   208
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   209
REcmt* REcmt::GetServer()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   210
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   211
    // Create a new REcmt reference for the static write functions, if a
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   212
    // reference has not been created earlier.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   213
    REcmt* r = static_cast<REcmt*>(UserSvr::DllTls(KECMT_SERVER_UID));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   214
    if (!r)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   215
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   216
        r = new REcmt();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   217
        if (r)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   218
        {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   219
            TInt err = UserSvr::DllSetTls(KECMT_SERVER_UID, r);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   220
            if (err == KErrNone)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   221
            {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   222
                r->Connect();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   223
                if (err == KErrNone)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   224
                {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   225
                    return r;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   226
                }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   227
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   228
                // Cleanup
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   229
                UserSvr::DllSetTls(KECMT_SERVER_UID, NULL);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   230
            }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   231
            delete r;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   232
            r = NULL;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   233
        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   234
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   235
    
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   236
    return r;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   237
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   238
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   239
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   240
// REcmt::SWrite
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   241
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   242
EXPORT_C void REcmt::SWrite(const TDesC16& aText)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   243
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   244
    REcmt* r = GetServer();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   245
    if (r)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   246
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   247
        r->Write(aText);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   248
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   249
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   250
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   251
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   252
// REcmt::SWriteFormat
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   253
// ---------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   254
EXPORT_C void REcmt::SWriteFormat(TRefByValue<const TDesC16> aFmt, ...)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   255
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   256
    REcmt* r = GetServer();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   257
    if (r)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   258
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   259
        VA_LIST list;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   260
        VA_START( list, aFmt );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   261
        r->WriteFormat(aFmt, list);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   262
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   263
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   264
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   265
// -----------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   266
// REcmt::SClose
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   267
// Deallocates thread local instance of REcmt client
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   268
// -----------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   269
EXPORT_C void REcmt::SClose()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   270
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   271
    // Don't use GetServer() here because it may create a new REcmt instance,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   272
    // which would be exactly opposite to what we are trying to do here.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   273
    REcmt* r = static_cast<REcmt*>(UserSvr::DllTls(KECMT_SERVER_UID));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   274
    if (r)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   275
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   276
        r->Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   277
        delete r;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   278
        UserSvr::DllSetTls(KECMT_SERVER_UID, NULL);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   279
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   280
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   281
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   282
//  End of File