localconnectivityservice/dun/plugins/src/bt/DunBtListen.cpp
author hgs
Thu, 04 Nov 2010 15:31:42 +0800
changeset 60 841f70763fbe
parent 52 866b4af7ffbe
permissions -rw-r--r--
201044_04
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     1
/*
60
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
     2
* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
29
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:  DUN Bluetooth plugin's listener
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 <btsdp.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    20
#include <e32std.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    21
#include <bt_sock.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    22
#include <btengdiscovery.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    23
#include "DunPlugin.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    24
#include "DunBtListen.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    25
#include "DunBtPlugin.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    26
#include "DunDebug.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    27
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    28
const TInt KListenQueSize   = 1;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    29
const TInt KDunFixedChannel = 22;  // Hack/kludge for Apple Bug ID 6527598
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    30
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    31
//Service Class Bits supported by DUN
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    32
static const TUint16 KCoDDunServiceClass = EMajorServiceTelephony | EMajorServiceNetworking;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    33
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    34
// ======== MEMBER FUNCTIONS ========
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    35
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    36
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    37
// Two-phased constructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    38
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    39
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    40
CDunBtListen* CDunBtListen::NewL( MDunServerCallback* aServer,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    41
                                  MDunListenCallback* aParent,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    42
                                  CDunTransporter* aTransporter,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    43
                                  TBtPortEntity& aEntity )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    44
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    45
    CDunBtListen* self = new (ELeave) CDunBtListen( aServer,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    46
                                                    aParent,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    47
                                                    aTransporter,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    48
                                                    aEntity );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    49
    CleanupStack::PushL( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    50
    self->ConstructL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    51
    CleanupStack::Pop( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    52
    return self;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    53
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    54
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    55
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    56
// Destructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    57
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    58
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    59
CDunBtListen::~CDunBtListen()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    60
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    61
    FTRACE(FPrint( _L("CDunBtListen::~CDunBtListen()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    62
    ResetData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    63
    FTRACE(FPrint( _L("CDunBtListen::~CDunBtListen() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    64
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    65
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    66
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    67
// Resets data to initial values
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    68
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    69
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    70
void CDunBtListen::ResetData()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    71
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    72
    // APIs affecting this:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    73
    // IssueRequestL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    74
    Stop();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    75
    StopServiceAdvertisement();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    76
    // NewL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    77
    iTransporter->FreeAdvertisementMonitor( KDunBtPluginUid, this );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    78
    delete iDiscovery;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    79
    iDiscovery = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    80
    if ( iSockServer.Handle() != KNullHandle )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    81
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    82
        iSockServer.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    83
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    84
    // Internal
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    85
    Initialize();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    86
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    87
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    88
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    89
// Registers itself to SDP and BT manager, opens a socket
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    90
// and starts to listen it.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    91
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    92
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    93
void CDunBtListen::IssueRequestL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    94
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    95
    FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    96
60
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
    97
    if ( IsActive() )
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    98
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    99
        FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL() (already active) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   100
        User::Leave( KErrNotReady );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   101
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   102
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   103
    TBool advertise = iTransporter->AdvertisementStatus();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   104
    if ( !advertise )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   105
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   106
        // Return silently here as CDunTransporter will notify later
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   107
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   108
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   109
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   110
    TBool inUse = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   111
    TInt numOfChans = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   112
    TInt retTemp = StartServiceAdvertisement( inUse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   113
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   114
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   115
        if ( inUse )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   116
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   117
            numOfChans = iTransporter->GetNumberOfAllocatedChannelsByUid(
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   118
                KDunBtPluginUid );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   119
            if ( numOfChans == 0)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   120
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   121
                // No channels so parent can't reissue requests of this object
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   122
                // This is fatal case -> leave.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   123
                // NOTE: To add full support for this case a poller (timer) is
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   124
                // needed that polls for free RFCOMM channel by given interval.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   125
                User::Leave( retTemp );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   126
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   127
            // If in use and parent has channels then just fail silently.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   128
            // Let this object to wait until parent finds new resources.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   129
            FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   130
            return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   131
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   132
        FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL() (failed!) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   133
        User::Leave( retTemp );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   134
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   135
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   136
    // Not already active here so start listening
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   137
    // First open blank data socket
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   138
    retTemp = iEntity.iBTPort.Open( iSockServer );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   139
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   140
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   141
        FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL() (ERROR) complete (%d)" ), retTemp));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   142
        User::Leave( retTemp );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   143
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   144
    iListenSocket.Accept( iEntity.iBTPort, iStatus );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   145
    SetActive();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   146
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   147
    FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   148
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   149
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   150
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   151
// Stops listening
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   152
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   153
//
60
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   154
void CDunBtListen::Stop()
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   155
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   156
    FTRACE(FPrint( _L( "CDunBtListen::Stop()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   157
    Cancel();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   158
    FTRACE(FPrint( _L( "CDunBtListen::Stop() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   159
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   160
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   161
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   162
// CDunBtListen::CDunBtListen
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   163
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   164
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   165
CDunBtListen::CDunBtListen( MDunServerCallback* aServer,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   166
                            MDunListenCallback* aParent,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   167
                            CDunTransporter* aTransporter,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   168
                            TBtPortEntity& aEntity ) :
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   169
    CActive( EPriorityStandard ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   170
    iServer( aServer ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   171
    iParent( aParent ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   172
    iTransporter( aTransporter ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   173
    iEntity( aEntity )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   174
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   175
    Initialize();
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
// CDunBtListen::ConstructL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   180
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   181
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   182
void CDunBtListen::ConstructL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   183
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   184
    FTRACE(FPrint(_L("CDunBtListen::ConstructL()")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   185
    if ( !iServer || !iParent || !iTransporter )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   186
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   187
        User::Leave( KErrGeneral );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   188
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   189
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   190
    CBTEngDiscovery* discovery = CBTEngDiscovery::NewLC();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   191
    FTRACE(FPrint(_L("CDunBtListen::ConstructL: iSockServer.Connect")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   192
    User::LeaveIfError( iSockServer.Connect() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   193
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   194
    // Set advertisement monitor
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   195
    iTransporter->SetAdvertisementMonitorL( KDunBtPluginUid, this );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   196
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   197
    // Then we are ready to start listening and accepting incoming connection
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   198
    // requests.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   199
    CleanupStack::Pop( discovery );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   200
    iDiscovery = discovery;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   201
    CActiveScheduler::Add( this );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   202
    FTRACE(FPrint(_L("CDunBtListen::ConstructL() complete")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   203
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   204
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   205
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   206
// Initializes this class
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   207
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   208
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   209
void CDunBtListen::Initialize()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   210
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   211
    // Don't initialize iServer here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   212
    // Don't initialize iParent here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   213
    // Don't initialize iTransporter here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   214
    // Don't initialize iEntity here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   215
    iDiscovery = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   216
    iChannelNum = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   217
    iSDPHandleDun = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   218
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   219
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   220
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   221
// Starts dialup service advertisement
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   222
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   223
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   224
TInt CDunBtListen::StartServiceAdvertisement( TBool& aInUse )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   225
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   226
    FTRACE(FPrint( _L( "CDunBtListen::StartServiceAdvertisement()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   227
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   228
    TInt retTemp = ReserveLocalChannel( iSockServer,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   229
                                        iListenSocket,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   230
                                        iChannelNum,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   231
                                        aInUse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   232
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   233
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   234
        FTRACE(FPrint( _L( "CDunBtListen::StartServiceAdvertisement() (ERROR) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   235
        return retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   236
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   237
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   238
    // Now RFCOMM channel number of the next data socket must be the same as
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   239
    // the current listener's RFCOMM channel number. Set that now.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   240
    iEntity.iChannelNum = iChannelNum;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   241
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   242
    // Register SDP record
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   243
    iSDPHandleDun = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   244
    retTemp = iDiscovery->RegisterSdpRecord( KDialUpNetworkingUUID,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   245
                                             iChannelNum,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   246
                                             iSDPHandleDun );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   247
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   248
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   249
        FTRACE(FPrint( _L( "CDunBtListen::StartServiceAdvertisement() (failed!) complete (%d)" ), retTemp));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   250
        return retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   251
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   252
    FTRACE(FPrint( _L( "CDunBtListen::StartServiceAdvertisement() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   253
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   254
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   255
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   256
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   257
// Stops dialup service advertisement
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   258
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   259
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   260
TInt CDunBtListen::StopServiceAdvertisement()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   261
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   262
    FTRACE(FPrint( _L( "CDunBtListen::StopServiceAdvertisement()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   263
    if ( !iDiscovery )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   264
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   265
        FTRACE(FPrint( _L( "CDunBtListen::StopServiceAdvertisement() (iDiscovery) not initialized!" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   266
        return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   267
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   268
    if ( iSDPHandleDun != 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   269
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   270
        TInt retTemp = iDiscovery->DeleteSdpRecord( iSDPHandleDun );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   271
        FTRACE(FPrint( _L( "CDunBtListen::StopServiceAdvertisement() record closed (%d)" ), retTemp ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   272
        iSDPHandleDun = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   273
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   274
    if ( iListenSocket.SubSessionHandle() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   275
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   276
        iListenSocket.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   277
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   278
    FTRACE(FPrint( _L( "CDunBtListen::StopServiceAdvertisement() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   279
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   280
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   281
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   282
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   283
// Method which reserves local RFCOMM channel (from possible channels 1-30)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   284
// and returns it to client.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   285
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   286
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   287
TInt CDunBtListen::ReserveLocalChannel( RSocketServ& aSocketServ,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   288
                                        RSocket& aListenSocket,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   289
                                        TUint& aChannelNum,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   290
                                        TBool& aInUse )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   291
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   292
    FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel()")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   293
    aInUse = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   294
    if ( aListenSocket.SubSessionHandle() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   295
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   296
        FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() (open socket!) complete")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   297
        return KErrArgument;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   298
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   299
    TInt retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   300
    TProtocolDesc pInfo;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   301
    retTemp = aSocketServ.FindProtocol( TProtocolName(KRFCOMMDesC), pInfo );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   302
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   303
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   304
        FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() (FindProtocol failed) complete (%d)"), retTemp));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   305
        return retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   306
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   307
    retTemp = aListenSocket.Open( aSocketServ,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   308
                                  pInfo.iAddrFamily,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   309
                                  pInfo.iSockType,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   310
                                  pInfo.iProtocol );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   311
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   312
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   313
        FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() (Open failed) complete (%d)"), retTemp));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   314
        return retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   315
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   316
    TRfcommSockAddr addr;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   317
    TBTServiceSecurity sec;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   318
    sec.SetAuthentication( ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   319
    sec.SetAuthorisation( ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   320
    sec.SetEncryption( ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   321
    sec.SetPasskeyMinLength( 0 );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   322
    addr.SetSecurity( sec );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   323
    addr.SetPort( KRfcommPassiveAutoBind );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   324
    // When fix from Apple, replace the following with
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   325
    // "retTemp = aListenSocket.Bind( addr );"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   326
    retTemp = DoExtendedBind( aListenSocket, addr );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   327
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   328
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   329
        aListenSocket.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   330
        aInUse = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   331
        FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() Bind() complete (%d)"), retTemp));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   332
        return KErrInUse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   333
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   334
    aChannelNum = aListenSocket.LocalPort();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   335
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   336
    // We try to set the Telephony and Networking bits in our service class.  If this fails we
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   337
    // ignore it, as it's better to carry on without it than to fail to start listening.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   338
    aListenSocket.SetOpt(KBTRegisterCodService, KSolBtRFCOMM, KCoDDunServiceClass);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   339
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   340
    retTemp = aListenSocket.Listen( KListenQueSize );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   341
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   342
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   343
        aListenSocket.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   344
        FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() Listen() complete (%d)"), retTemp));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   345
        return retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   346
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   347
    FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() complete (%d)"), aChannelNum));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   348
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   349
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   350
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   351
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   352
// Tries to bind to a fixed port and if that fails with KRfcommPassiveAutoBind.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   353
// This is for spec breaking solutions like the OSX Leopard.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   354
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   355
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   356
TInt CDunBtListen::DoExtendedBind( RSocket& aListenSocket,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   357
                                   TRfcommSockAddr& aSockAddr )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   358
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   359
    FTRACE(FPrint(_L("CDunBtListen::DoExtendedBind()")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   360
    if ( !aListenSocket.SubSessionHandle() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   361
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   362
        FTRACE(FPrint(_L("CDunBtListen::DoExtendedBind() (closed socket!) complete")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   363
        return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   364
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   365
    TRfcommSockAddr fixedAddr = aSockAddr;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   366
    fixedAddr.SetPort( KDunFixedChannel );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   367
    TInt retTemp = aListenSocket.Bind( fixedAddr );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   368
    if ( retTemp == KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   369
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   370
        FTRACE(FPrint(_L("CDunBtListen::DoExtendedBind() complete")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   371
        return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   372
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   373
    TInt retVal = aListenSocket.Bind( aSockAddr );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   374
    FTRACE(FPrint(_L("CDunBtListen::DoExtendedBind() complete")));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   375
    return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   376
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   377
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   378
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   379
// From class CActive.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   380
// Called when a service is requested via BT.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   381
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   382
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   383
void CDunBtListen::RunL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   384
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   385
    FTRACE(FPrint( _L( "CDunBtListen::RunL()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   386
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   387
    StopServiceAdvertisement();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   388
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   389
    TInt retTemp = iStatus.Int();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   390
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   391
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   392
        FTRACE(FPrint( _L( "CDunBtListen::RunL() (ERROR) complete (%d)" ), retTemp));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   393
        iServer->NotifyPluginCloseRequest( KDunBtPluginUid, ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   394
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   395
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   396
    // Notify new connection
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   397
    TBool noFreeChans = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   398
    retTemp = iParent->NotifyChannelAllocate( noFreeChans );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   399
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   400
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   401
        FTRACE(FPrint( _L( "CDunBtListen::RunL() channel allocation failed! (%d)" ), retTemp));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   402
        // Other error than no free channels, close plugin now
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   403
        if ( !noFreeChans )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   404
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   405
            iServer->NotifyPluginCloseRequest( KDunBtPluginUid, ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   406
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   407
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   408
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   409
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   410
    // Don't restart listening here. Request is issued via
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   411
    // NotifyAdvertisementStart()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   412
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   413
    FTRACE(FPrint( _L( "CDunBtListen::RunL() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   414
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   415
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   416
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   417
// From class CActive.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   418
// Cancel current activity.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   419
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   420
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   421
void CDunBtListen::DoCancel()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   422
    {
60
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   423
    FTRACE(FPrint( _L( "CDunBtListen::DoCancel()" ) ));
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   424
    iListenSocket.CancelAccept();
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   425
    FTRACE(FPrint( _L( "CDunBtListen::DoCancel() complete" ) ));
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   426
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   427
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   428
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   429
// From class MDunServAdvMon.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   430
// Gets called when advertisement status changes to start.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   431
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   432
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   433
void CDunBtListen::NotifyAdvertisementStart( TBool aCreation )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   434
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   435
    FTRACE(FPrint( _L( "CDunBtListen::NotifyAdvertisementStart()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   436
    // Remove the "if" below when fix comes from Apple
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   437
    if ( !aCreation )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   438
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   439
        TRAP_IGNORE( IssueRequestL() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   440
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   441
    FTRACE(FPrint( _L( "CDunBtListen::NotifyAdvertisementStart() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   442
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   443
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   444
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   445
// From class MDunServAdvMon.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   446
// Gets called when advertisement status changes to end.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   447
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   448
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   449
void CDunBtListen::NotifyAdvertisementEnd()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   450
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   451
    FTRACE(FPrint( _L( "CDunBtListen::NotifyAdvertisementEnd()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   452
    Stop();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   453
    StopServiceAdvertisement();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   454
    FTRACE(FPrint( _L( "CDunBtListen::NotifyAdvertisementEnd() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   455
    }