localconnectivityservice/dun/server/src/DunSession.cpp
author hgs
Fri, 20 Aug 2010 17:43:33 +0800
changeset 41 2c19c7cf5550
parent 29 3ae5cb0b4c02
permissions -rw-r--r--
201033_05
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     1
/*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     2
* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     3
* All rights reserved.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     8
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     9
* Initial Contributors:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    11
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    12
* Contributors:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    13
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    14
* Description:  The session object for DUN server
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    15
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    16
*/
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    17
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    18
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    19
#include <e32std.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    20
#include <c32comm.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    21
#include <f32file.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    22
#include <e32math.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    23
#include <locodbearer.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    24
#include <btfeaturescfg.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    25
#include "dunserverdef.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    26
#include "DunSession.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    27
#include "DunServer.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    28
#include "DunPlugin.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    29
#include "DunDebug.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    30
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    31
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    32
// ======== MEMBER FUNCTIONS ========
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    33
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    34
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    35
// CDunSession::CDunSession
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    36
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    37
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    38
CDunSession::CDunSession( CDunServer* aDunServer ) :
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    39
    CSession2(),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    40
    iDunServer( aDunServer )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    41
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    42
    FTRACE(FPrint( _L( "CDunSession::CDunSession()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    43
    iDunServer->IncRefCount();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    44
    FTRACE(FPrint( _L( "CDunSession::CDunSession() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    45
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    46
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    47
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    48
// Destructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    49
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    50
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    51
CDunSession::~CDunSession()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    52
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    53
    FTRACE(FPrint(_L("CDunSession::~CDunSession()")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    54
    if ( iDunServer )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    55
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    56
        iDunServer->DecRefCount();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    57
        iDunServer = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    58
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    59
    FTRACE(FPrint(_L("CDunSession::~CDunSession() complete")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    60
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    61
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    62
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    63
// Return the version number
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    64
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    65
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    66
TVersion CDunSession::Version(void) const
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    67
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    68
    return (TVersion( KDunServerMajorVersionNumber,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    69
                      KDunServerMinorVersionNumber,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    70
                      KDunServerBuildVersionNumber ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    71
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    72
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    73
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    74
// From class CSession2.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    75
// Handles the servicing of client requests passed to the server
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    76
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    77
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    78
void CDunSession::ServiceL( const RMessage2& aMessage )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    79
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    80
    FTRACE(FPrint(_L("CDunSession::ServiceL()")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    81
    TBool hasCapability = aMessage.HasCapability( ECapabilityLocalServices );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    82
    if ( !hasCapability )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    83
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    84
        aMessage.Complete( KErrPermissionDenied );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    85
        FTRACE(FPrint(_L("CDunSession::ServiceL() (no capability) complete")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    86
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    87
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    88
    TInt retVal = KErrNotSupported;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    89
    switch ( aMessage.Function() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    90
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    91
        case EDunFuncManageService:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    92
            retVal = DoService( aMessage );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    93
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    94
        case EDunFuncActiveConnection:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    95
            retVal = DoTestService( aMessage );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    96
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    97
        default:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    98
            FTRACE(FPrint(_L("CDunSession::ServiceL() (not supported) complete")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    99
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   100
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   101
    aMessage.Complete( retVal );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   102
    FTRACE(FPrint(_L("CDunSession::ServiceL() complete")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   103
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   104
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   105
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   106
// From class CSession2.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   107
// Return a reference to DUN server
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   108
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   109
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   110
CDunServer& CDunSession::Server() const
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   111
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   112
    return *iDunServer;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   113
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   114
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   115
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   116
// Handles incoming service messages
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   117
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   118
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   119
TInt CDunSession::DoService( const RMessage2& aMessage )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   120
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   121
    FTRACE(FPrint(_L("CDunSession::DoService()")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   122
    if ( !iDunServer )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   123
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   124
        FTRACE(FPrint(_L("CDunSession::DoService() (iDunServer) not initialized!")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   125
        return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   126
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   127
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   128
    TLocodBearer bearer = static_cast<TLocodBearer>( aMessage.Int0() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   129
    TBool bearerStatus = static_cast<TBool>( aMessage.Int1() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   130
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   131
    TUid pluginUid;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   132
    switch ( bearer )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   133
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   134
        case ELocodBearerBT:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   135
			{
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   136
            pluginUid = KDunBtPluginUid;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   137
            FTRACE(FPrint(_L("CDunSession::DoService() Managing service for BT, bearer status %d"), bearerStatus));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   138
			
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   139
			BluetoothFeatures::TEnterpriseEnablementMode mode = BluetoothFeatures::EDisabled;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   140
			TRAPD(err, mode = BluetoothFeatures::EnterpriseEnablementL());
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   141
			if ( err )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   142
				{
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   143
				FTRACE(FPrint(_L("CDunSession::DoService() complete: failed to get BluetoothFeatures::EnterpriseEnablementL")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   144
				return err;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   145
				}
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   146
			if ( mode != BluetoothFeatures::EEnabled )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   147
				{
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   148
				FTRACE(FPrint(_L("CDunSession::DoService() complete: !BluetoothFeatures::EEnabled")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   149
				return KErrNotSupported;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   150
				}
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   151
			}
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   152
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   153
        case ELocodBearerIR:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   154
            pluginUid = KDunIrPluginUid;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   155
            FTRACE(FPrint(_L("CDunSession::DoService() Managing service for IR, bearer status %d"), bearerStatus));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   156
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   157
        case ELocodBearerUSB:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   158
            pluginUid = KDunUsbPluginUid;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   159
            FTRACE(FPrint(_L("CDunSession::DoService() Managing service for USB, bearer status %d"), bearerStatus));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   160
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   161
        default:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   162
            FTRACE(FPrint(_L("CDunSession::DoService() Unknown service %d, bearer status %d!"), bearer, bearerStatus));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   163
            return KErrNotSupported;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   164
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   165
    TInt retVal = KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   166
    if ( bearerStatus )  // ON
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   167
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   168
        retVal = iDunServer->NotifyMediaOpenRequest( pluginUid );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   169
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   170
    else  // OFF
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   171
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   172
        retVal = iDunServer->NotifyMediaCloseRequest( pluginUid );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   173
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   174
    FTRACE(FPrint(_L("CDunSession::DoService() complete")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   175
    return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   176
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   177
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   178
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   179
// Handles incoming test service messages
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   180
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   181
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   182
TInt CDunSession::DoTestService( const RMessage2& aMessage )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   183
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   184
    FTRACE(FPrint(_L("CDunSession::DoTestService()")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   185
    if ( !iDunServer )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   186
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   187
        FTRACE(FPrint(_L("CDunSession::DoTestService() (iDunServer) not initialized!")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   188
        return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   189
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   190
    TConnId connId = iDunServer->ActiveConnection();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   191
    TPckgBuf<TConnId> connIdPckg( connId );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   192
    aMessage.Write( 0, connIdPckg );  // First argument in EDunFuncActiveConnection
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   193
    FTRACE(FPrint(_L("CDunSession::DoTestService() complete")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   194
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   195
    }