bluetoothengine/headsetsimulator/core/src/RemoteControl/hsremotecontrolserver.cpp
author michal.sulewski
Wed, 15 Sep 2010 15:59:44 +0200
branchheadsetsimulator
changeset 60 90dbfc0435e3
permissions -rw-r--r--
source code commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
60
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     1
/*
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     2
 * Component Name: Headset Simulator
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     3
 * Author: Comarch S.A.
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     4
 * Version: 1.0
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     5
 * Copyright (c) 2010 Comarch S.A.
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     6
 *  
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     7
 * This Software is submitted by Comarch S.A. to Symbian Foundation Limited on 
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     8
 * the basis of the Member Contribution Agreement entered between Comarch S.A. 
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     9
 * and Symbian Foundation Limited on 5th June 2009 (“Agreement”) and may be 
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    10
 * used only in accordance with the terms and conditions of the Agreement. 
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    11
 * Any other usage, duplication or redistribution of this Software is not 
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    12
 * allowed without written permission of Comarch S.A.
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    13
 * 
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    14
 */
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    15
#include "hsremotecontrolserver.h"
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    16
#include "hscore.h" 
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    17
#include "hsremotecontroldatahandler.h"
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    18
#include "hsremotecontroltools.h"
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    19
#include "debug.h"
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    20
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    21
_LIT8(KHsATVGS,"AT+VGS=");
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    22
_LIT8(KHsATCommandEnding,"\r\n");
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    23
_LIT8(KHsATVGM,"AT+VGM=");
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    24
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    25
CHsControlServer* CHsControlServer::NewL( RSocketServ& aSocketServ,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    26
        CHsCore* aHsCore )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    27
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    28
    CHsControlServer* self = CHsControlServer::NewLC( aSocketServ, aHsCore );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    29
    CleanupStack::Pop( self );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    30
    return self;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    31
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    32
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    33
CHsControlServer* CHsControlServer::NewLC( RSocketServ& aSocketServ,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    34
        CHsCore* aHsCore )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    35
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    36
    CHsControlServer* self = new ( ELeave ) CHsControlServer( aSocketServ,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    37
            aHsCore );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    38
    CleanupStack::PushL( self );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    39
    self->ConstructL();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    40
    return self;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    41
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    42
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    43
CHsControlServer::CHsControlServer( RSocketServ& aSocketServ, CHsCore* aHsCore ) :
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    44
    iState( ENone ), iSocketServ( aSocketServ ), iHsCore( aHsCore )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    45
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    46
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    47
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    48
void CHsControlServer::ConstructL()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    49
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    50
    iDataHandler = CHsRemoteControlDataHandler::NewL();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    51
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    52
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    53
CHsControlServer::~CHsControlServer()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    54
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    55
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    56
    CancelListen();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    57
    if ( iSocket )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    58
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    59
        delete iSocket;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    60
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    61
    if ( iListenSocket )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    62
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    63
        delete iListenSocket;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    64
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    65
    if ( iDataHandler )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    66
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    67
        delete iDataHandler;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    68
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    69
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    70
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    71
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    72
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    73
void CHsControlServer::StartRemoteControlServerL()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    74
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    75
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    76
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    77
    if ( iState != ENone )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    78
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    79
        TRACE_INFO (_L("ControlServer is already listening"))
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    80
        TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    81
        User::Leave( KErrInUse );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    82
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    83
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    84
    iState = EConnecting;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    85
    TProtocolDesc ProtocolDesc;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    86
    User::LeaveIfError( iSocketServ.FindProtocol( KHsRFComm(), ProtocolDesc ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    87
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    88
    if ( iListenSocket )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    89
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    90
        // Return value may be ignored
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    91
        iListenSocket->Shutdown( RSocket::EImmediate );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    92
        delete iListenSocket;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    93
        iListenSocket = NULL;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    94
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    95
    iListenSocket = CBluetoothSocket::NewL( *this, iSocketServ,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    96
            ProtocolDesc.iSockType, ProtocolDesc.iProtocol );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    97
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    98
    User::LeaveIfError( iListenSocket->GetOpt(
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    99
            KRFCOMMGetAvailableServerChannel, KSolBtRFCOMM, iServerPort ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   100
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   101
    TBTSockAddr btSockAddr;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   102
    btSockAddr.SetPort( iServerPort );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   103
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   104
    RegisterSdpL( iServerPort );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   105
    User::LeaveIfError( iListenSocket->Bind( btSockAddr ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   106
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   107
    TRACE_INFO( ( _L("Control Server port =  %d"), iServerPort) )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   108
    User::LeaveIfError( iListenSocket->Listen( KHsSizeOfListenQueue ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   109
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   110
    TBTServiceSecurity secSettings;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   111
    TUid settingsUID = TUid::Uid( (TInt) KHsRemoteControlServiceID );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   112
    secSettings.SetUid( settingsUID );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   113
    secSettings.SetAuthentication( EFalse );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   114
    secSettings.SetAuthorisation( EFalse );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   115
    secSettings.SetEncryption( EFalse );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   116
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   117
    btSockAddr.SetSecurity( secSettings );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   118
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   119
    if ( iSocket )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   120
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   121
        // Return value may be ignored
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   122
        iSocket->Shutdown( RSocket::EImmediate );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   123
        delete iSocket;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   124
        iSocket = NULL;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   125
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   126
    iSocket = CBluetoothSocket::NewL( *this, iSocketServ );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   127
    User::LeaveIfError( iListenSocket->Accept( *iSocket ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   128
    iInitialized = ETrue;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   129
    TRACE_INFO( _L("CHSControlServer::Listen() status = OK" ) )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   130
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   131
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   132
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   133
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   134
void CHsControlServer::CancelListen()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   135
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   136
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   137
   
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   138
    if ( iState == EWaiting )//Client is connected to socket
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   139
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   140
        iSocket->CancelAll();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   141
        // Return value may be ignored
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   142
        iSocket->Shutdown( RSocket::EImmediate );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   143
        delete iSocket;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   144
        iSocket = NULL;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   145
        iListenSocket->CancelAll();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   146
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   147
        // Return value may be ignored
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   148
        iListenSocket->Shutdown( RSocket::EImmediate );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   149
        delete iListenSocket;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   150
        iListenSocket = NULL;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   151
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   152
    else
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   153
        { //Sockets are ready, but client is not connected
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   154
        delete iSocket;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   155
        iSocket = NULL;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   156
        delete iListenSocket;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   157
        iListenSocket = NULL;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   158
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   159
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   160
    DeleteRecordSdp();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   161
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   162
    iInitialized = EFalse;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   163
    iState = ENone;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   164
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   165
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   166
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   167
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   168
void CHsControlServer::SetConnectionObserver(
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   169
        MRemoteControllerConnectionObserver &aRemoteControllerObserver )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   170
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   171
    iConnectionObserver = &aRemoteControllerObserver;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   172
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   173
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   174
void CHsControlServer::HandleConnectCompleteL( TInt aErr )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   175
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   176
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   177
    TRACE_INFO( ( _L("aErr = %d"), aErr) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   178
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   179
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   180
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   181
void CHsControlServer::HandleAcceptCompleteL( TInt aErr )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   182
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   183
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   184
    TRACE_INFO( ( _L("aErr = %d"), aErr) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   185
    iState = EWaiting;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   186
    Receive();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   187
    if ( iConnectionObserver )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   188
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   189
        iConnectionObserver->HandleRemoteControllerConnected( aErr );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   190
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   191
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   192
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   193
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   194
void CHsControlServer::HandleShutdownCompleteL( TInt aErr )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   195
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   196
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   197
    TRACE_INFO( ( _L("aErr = %d"), aErr) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   198
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   199
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   200
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   201
void CHsControlServer::HandleSendCompleteL( TInt aErr )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   202
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   203
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   204
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   205
    TRACE_INFO( ( _L8("ControlServer sent %d bytes of data: [%S] with err [%d]")
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   206
            ,iSendDataBuffer.Length(), &iSendDataBuffer, aErr) )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   207
    
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   208
    TInt error = KErrNone;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   209
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   210
    if ( aErr == KErrNone )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   211
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   212
        iSendDataBuffer.Zero();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   213
        if ( iTempDataBuffer.Length() > 0 )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   214
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   215
            iSendDataBuffer.Append( iTempDataBuffer );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   216
            iTempDataBuffer.Zero();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   217
            error = iSocket->Write( iSendDataBuffer );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   218
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   219
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   220
    Receive();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   221
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   222
    User::LeaveIfError( error );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   223
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   224
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   225
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   226
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   227
void CHsControlServer::HandleReceiveCompleteL( TInt aErr )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   228
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   229
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   230
    TRACE_INFO( ( _L8("[ControlServer] received %d bytes of data: [%S]"
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   231
            "with err [%d]"), iReceiveDataBuffer.Length(), &iReceiveDataBuffer,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   232
            aErr) )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   233
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   234
    if ( aErr == KErrNone )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   235
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   236
        TInt error = KErrNone;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   237
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   238
        if ( iSendDataBuffer.Length() > 0 )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   239
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   240
            error = iSocket->Write( iSendDataBuffer );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   241
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   242
        else if ( iTempDataBuffer.Length() > 0 )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   243
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   244
            iSendDataBuffer.Append( iTempDataBuffer );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   245
            iTempDataBuffer.Zero();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   246
            error = iSocket->Write( iSendDataBuffer );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   247
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   248
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   249
        TRAP_IGNORE( HandleRequestL( iReceiveDataBuffer ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   250
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   251
        Receive();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   252
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   253
        User::LeaveIfError( error );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   254
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   255
    else
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   256
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   257
        TRACE_INFO( _L("ControlClient is disconnected") )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   258
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   259
        if ( iConnectionObserver )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   260
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   261
            iConnectionObserver->HandleRemoteControllerDisconnected( aErr );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   262
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   263
        CancelListen();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   264
        StartRemoteControlServerL();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   265
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   266
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   267
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   268
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   269
void CHsControlServer::HandleIoctlCompleteL( TInt /*aErr*/)
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   270
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   271
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   272
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   273
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   274
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   275
void CHsControlServer::HandleActivateBasebandEventNotifierCompleteL(
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   276
        TInt /*aErr*/, TBTBasebandEventNotification& /*aEventNotification*/)
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   277
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   278
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   279
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   280
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   281
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   282
TInt CHsControlServer::Send( const TDesC8& aData )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   283
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   284
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   285
    TInt error = KErrNone;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   286
    if ( iState != EWaiting )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   287
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   288
        error = KErrNotReady;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   289
        TRACE_INFO( _L("ControlServer not ready") )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   290
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   291
        return error;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   292
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   293
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   294
    if ( iSendDataBuffer.Length() == 0 )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   295
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   296
        iSendDataBuffer.Append( iTempDataBuffer );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   297
        iTempDataBuffer.Zero();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   298
        iSendDataBuffer.Append( aData );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   299
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   300
    else
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   301
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   302
        iTempDataBuffer.Append( aData );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   303
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   304
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   305
    if ( iSendDataBuffer.Length() > 0 )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   306
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   307
        iSocket->CancelRecv();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   308
        error = iSocket->Write( iSendDataBuffer );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   309
        Receive();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   310
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   311
    else
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   312
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   313
        Receive();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   314
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   315
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   316
    return error;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   317
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   318
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   319
void CHsControlServer::Receive()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   320
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   321
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   322
    // Return value may be ignored, 
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   323
    // error will be notified to HandleReceiveCompleteL
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   324
    iSocket->RecvOneOrMore( iReceiveDataBuffer, 0, iDataLength );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   325
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   326
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   327
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   328
void CHsControlServer::RegisterSdpL( TInt aChannel )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   329
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   330
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   331
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   332
    User::LeaveIfError( iSdpServer.Connect() );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   333
    User::LeaveIfError( iSdpDB.Open( iSdpServer ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   334
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   335
    TUUID serviceUUID( KHsRemoteControlServiceID );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   336
    iSdpDB.CreateServiceRecordL( serviceUUID, iSdpRecordHandle );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   337
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   338
    CSdpAttrValueDES* valDES = CSdpAttrValueDES::NewDESL( NULL );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   339
    CleanupStack::PushL( valDES );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   340
    valDES->StartListL()->BuildDESL()->StartListL()->BuildUUIDL( TUUID(
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   341
            KL2CAPUUID ) )->EndListL()->BuildDESL()->StartListL()->BuildUUIDL(
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   342
            TUUID( KRFCommUUID ) )->BuildUintL(
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   343
            TSdpIntBuf <TUint8> ( aChannel ) )->EndListL()->EndListL();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   344
    
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   345
    iSdpDB.UpdateAttributeL( iSdpRecordHandle,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   346
            KSdpAttrIdProtocolDescriptorList, *valDES );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   347
    
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   348
    CleanupStack::PopAndDestroy( valDES );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   349
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   350
    iSdpDB.UpdateAttributeL( iSdpRecordHandle, KSdpAttrIdBasePrimaryLanguage
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   351
            + KSdpAttrIdOffsetServiceName, KServiceName );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   352
    
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   353
    iSdpDB.UpdateAttributeL( iSdpRecordHandle, KSdpAttrIdBasePrimaryLanguage
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   354
            + KSdpAttrIdOffsetServiceDescription, KServiceDesc );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   355
    
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   356
    UpdateAvailabilityL( ETrue );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   357
    
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   358
    TRACE_INFO ( _L("CHsControlServer::RegisterSdpL, status = OK") )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   359
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   360
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   361
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   362
void CHsControlServer::UpdateAvailabilityL( TBool aAvailable )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   363
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   364
    TInt state = ( aAvailable ? KServicAvailable : KServiceUnavailable );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   365
    // Set availability
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   366
    iSdpDB.UpdateAttributeL( iSdpRecordHandle, KSdpAttrIdServiceAvailability,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   367
            state );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   368
    // Mark record changed
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   369
    iSdpDB.UpdateAttributeL( iSdpRecordHandle, KSdpAttrIdServiceRecordState,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   370
            ++iRecordState );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   371
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   372
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   373
void CHsControlServer::DeleteRecordSdp()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   374
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   375
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   376
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   377
    iSdpDB.DeleteRecord( iSdpRecordHandle );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   378
    iSdpRecordHandle = 0;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   379
    iSdpDB.Close();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   380
    iSdpServer.Close();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   381
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   382
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   383
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   384
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   385
void CHsControlServer::HandleRequestL( TDes8 &aRequest )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   386
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   387
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   388
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   389
    TBuf8 <KHsRemoteControlPackageLength> buf;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   390
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   391
    THsControlCommandData dummyBuf( KNullDesC8 );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   392
    THsRemoteControlCommand command( dummyBuf, EHsLast );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   393
    if ( iDataHandler )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   394
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   395
        TInt err = iDataHandler->RecognizeCommand( aRequest, command );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   396
        if ( KErrNone != err )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   397
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   398
            User::Leave( KErrArgument );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   399
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   400
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   401
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   402
    THsRemoteControlCommandType type = EHsLast;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   403
    command.GetType( type );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   404
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   405
    switch ( type )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   406
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   407
        case EHsTurnOn:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   408
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   409
            command.GetData( buf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   410
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   411
            RBuf8 cod;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   412
            RBuf8 sdp;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   413
            RBuf8 plugin;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   414
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   415
            cod.CleanupClosePushL();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   416
            sdp.CleanupClosePushL();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   417
            plugin.CleanupClosePushL();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   418
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   419
            RetrieveStartupParamsL( buf, cod, sdp, plugin );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   420
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   421
            iHsCore->StartSimulationL( cod, sdp, plugin );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   422
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   423
            CleanupStack::PopAndDestroy( 3 );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   424
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   425
            break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   426
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   427
        case EHsTurnOff:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   428
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   429
            iHsCore->StopSimulation();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   430
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   431
            break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   432
        case EHsConnectLastconnected:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   433
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   434
            iHsCore->ConnectWithLastConnectedL();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   435
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   436
            break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   437
        case EHsConnectDevAddress:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   438
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   439
            command.GetData( buf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   440
            iHsCore->ConnectWithDevAddress( buf.Expand() );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   441
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   442
            break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   443
        case EHsConnectName:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   444
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   445
            command.GetData( buf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   446
            iHsCore->ConnectWithName( buf.Expand() );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   447
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   448
            break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   449
        case EHsDisconnectAGs:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   450
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   451
            iHsCore->DisconnectClients();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   452
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   453
            break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   454
        case EHsAcceptCall:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   455
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   456
            User::LeaveIfError( iHsCore->AcceptIncomingCall() );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   457
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   458
            break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   459
        case EHsReleaseCall:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   460
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   461
            User::LeaveIfError( iHsCore->ReleaseOngoingCall() );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   462
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   463
            break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   464
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   465
        case EHsSetSpeakerVolume:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   466
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   467
            command.GetData( buf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   468
            RBuf8 tempBuf;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   469
            tempBuf.CreateL( buf.Length() + KHsATCommandEnding().Length()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   470
                    + KHsATVGS().Length() );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   471
            tempBuf.Copy( KHsATVGS );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   472
            tempBuf.Append( buf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   473
            tempBuf.Append( KHsATCommandEnding );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   474
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   475
            iHsCore->Send( tempBuf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   476
            tempBuf.Close();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   477
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   478
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   479
            break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   480
        case EHsSetMicVolume:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   481
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   482
            command.GetData( buf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   483
            RBuf8 tempBuf;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   484
            tempBuf.CreateL( buf.Length() + KHsATCommandEnding().Length()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   485
                    + KHsATVGM().Length() );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   486
            tempBuf.Copy( KHsATVGM );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   487
            tempBuf.Append( buf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   488
            tempBuf.Append( KHsATCommandEnding );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   489
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   490
            iHsCore->Send( tempBuf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   491
            tempBuf.Close();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   492
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   493
            break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   494
        case EHsSendAnyAt:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   495
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   496
            command.GetData( buf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   497
            User::LeaveIfError( iHsCore->Send( buf ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   498
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   499
            break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   500
        default:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   501
            User::Leave( KErrArgument );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   502
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   503
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   504
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   505
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   506
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   507
void CHsControlServer::RetrieveStartupParamsL( const TDesC8& aParams,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   508
        RBuf8& aPluginCod, RBuf8& aPluginSdp, RBuf8& aPluginProfile )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   509
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   510
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   511
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   512
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   513
    TInt sepPos = aParams.Find( KHsRemoteRequestParamSeparator );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   514
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   515
    User::LeaveIfError( sepPos );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   516
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   517
    aPluginCod.CreateL( aParams.Left( sepPos ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   518
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   519
    sepPos += 2;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   520
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   521
    TInt sepPos2 = aParams.Mid( sepPos, aParams.Length() - sepPos ).Find(
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   522
            KHsRemoteRequestParamSeparator );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   523
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   524
    User::LeaveIfError( sepPos2 );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   525
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   526
    aPluginSdp.CreateL( aParams.Mid( sepPos, sepPos2 ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   527
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   528
    sepPos += 2;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   529
    sepPos += sepPos2;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   530
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   531
    aPluginProfile.CreateL( aParams.Mid( sepPos, aParams.Length() - sepPos ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   532
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   533
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   534
    }