localconnectivityservice/dun/plugins/inc/bt/DunBtListen.h
branchRCL_3
changeset 19 0aa8cc770c8a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/dun/plugins/inc/bt/DunBtListen.h	Tue Aug 31 16:03:15 2010 +0300
@@ -0,0 +1,261 @@
+/*
+* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  DUN Bluetooth plugin's listener
+*
+*/
+
+
+#ifndef C_CDUNBTLISTEN_H
+#define C_CDUNBTLISTEN_H
+
+#include <btengdiscovery.h>
+#include "DunPlugin.h"
+#include "DunTransporter.h"
+
+class TBtPortEntity;
+
+enum TBtListenState
+    {
+    EBtListenStateIdle,
+    EBtListenStateListening
+    };
+
+/**
+ *  DUN Bluetooth plugin's listener class
+ *  This class starts listening on a created BT RFComm channel and notifies
+ *  parent (CDunBtPlugin) when new connection is detected. Also registers and
+ *  unregisters DUN SDP record.
+ *
+ *  @lib dunbt.lib
+ *  @since S60 v3.2
+ */
+NONSHARABLE_CLASS( CDunBtListen ) : public CActive,
+                                    public MDunServAdvMon
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     * @param aServer Server
+     * @param aParent Callback interface to parent
+     * @param aTransporter Transporter
+     * @param aEntity Data socket entity
+     * @return Instance of self
+     */
+    static CDunBtListen* NewL( MDunServerCallback* aServer,
+                               MDunListenCallback* aParent,
+                               CDunTransporter* aTransporter,
+                               TBtPortEntity& aEntity );
+
+    /**
+    * Destructor.
+    */
+    virtual ~CDunBtListen();
+
+    /**
+     * Resets data to initial values
+     *
+     * @since S60 3.2
+     * @return None
+     */
+    void ResetData();
+
+    /**
+     * Registers DUN and starts to listen.
+     * Registers itself to SDP and BT manager, opens a socket
+     * and starts to listen it.
+     *
+     * @since S60 3.2
+     * @return None
+     */
+    void IssueRequestL();
+
+    /**
+     * Stops listening
+     *
+     * @since S60 3.2
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    TInt Stop();
+
+private:
+
+    CDunBtListen( MDunServerCallback* aServer,
+                  MDunListenCallback* aParent,
+                  CDunTransporter* aTransporter,
+                  TBtPortEntity& aEntity );
+
+    void ConstructL();
+
+    /**
+     * Initializes this class
+     *
+     * @since S60 3.2
+     * @return None
+     */
+    void Initialize();
+
+    /**
+     * Starts dialup service advertisement
+     *
+     * @since S60 3.2
+     * @param aInUse ETrue is returned if all RFCOMM channels in use.
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    TInt StartServiceAdvertisement( TBool& aInUse );
+
+    /**
+     * Stops dialup service advertisement
+     *
+     * @since S60 3.2
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    TInt StopServiceAdvertisement();
+
+    /**
+     * Method which reserves local RFCOMM channel (from possible channels 1-30)
+     * and returns it to client.
+     *
+     * @since S60 3.2
+     * @param aSocketServer Handle to connected socket server.
+     * @param aListenSocket Socket which is initiated for listening.
+     * @param aChannelNum RFCOMM channel which is reserved for listening.
+     * @param aInUse ETrue is returned if all RFCOMM channels in use.
+     * @return KErrNone if OK, else value indicating error situation.
+     */
+    TInt ReserveLocalChannel( RSocketServ& aSocketServ,
+                              RSocket& aListenSocket,
+                              TUint& aChannelNum,
+                              TBool& aInUse );
+
+    /**
+     * Tries to bind to a fixed port and if that fails with
+     * KRfcommPassiveAutoBind. This is for spec breaking solutions like the
+     * OSX Leopard.
+     *
+     * @since S60 5.0
+     * @param aListenSocket Listen socket for Bind()
+     * @param aSockAddr Address for the socket
+     *                 (must be set for KRfcommPassiveAutoBind)
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    TInt DoExtendedBind( RSocket& aListenSocket, TRfcommSockAddr& aSockAddr );
+
+// from base class CActive
+
+    /**
+     * From CActive.
+     * Called when a service is requested via BT.
+     *
+     * @since S60 3.2
+     * @return None
+     */
+    void RunL();
+
+    /**
+     * From CActive.
+     * Cancel current activity.
+     *
+     * @since S60 3.2
+     * @return None
+     */
+    void DoCancel();
+
+// from base class MDunServAdvMon
+
+    /**
+     * From MDunServAdvMon.
+     * Gets called when advertisement status changes to start
+     *
+     * @since S60 5.0
+     * @param aCreation ETrue if channel creation
+     *                  EFalse if channel free
+     * @return None
+     */
+    void NotifyAdvertisementStart( TBool aCreation );
+
+    /**
+     * From MDunServAdvMon.
+     * Gets called when advertisement status changes to end
+     *
+     * @since S60 5.0
+     * @return None
+     */
+    void NotifyAdvertisementEnd();
+
+private:  // data
+
+    /**
+     * Callback to call when notification via MDunServerCallback to be made
+     * Not own.
+     */
+    MDunServerCallback* iServer;
+
+    /**
+     * Callback to call when notification via MDunListenCallback to be made
+     * Not own.
+     */
+    MDunListenCallback* iParent;
+
+    /**
+     * Transporter to use for network side communication
+     * Not own.
+     */
+    CDunTransporter* iTransporter;
+
+    /**
+     * Data socket entity for actual data transfer
+     * This will be valid after CDunBtListen reacts to new data in
+     * listener socket
+     */
+    TBtPortEntity& iEntity;
+
+    /**
+     * Current state of listening: active or inactive
+     */
+    TBtListenState iListenState;
+
+    /**
+     * Listener socket that will listen for activity in RFComm channel
+     */
+    RSocket iListenSocket;
+
+    /**
+     * Socket server used to reserve RFComm channel and creating data socket
+     */
+    RSocketServ iSockServer;
+
+    /**
+     * BT engine's Bluetooth discovery functionality
+     * Used for registering/unregistering SDP record
+     * Own.
+     */
+    CBTEngDiscovery* iDiscovery;
+
+    /**
+     * Local BT channel number
+     * Set to reserved RFComm channel and used to register SDP record
+     */
+    TUint iChannelNum;
+
+    /**
+     * Handle to the reserver SDP channel
+     * Set when SDP record registered
+     */
+    TSdpServRecordHandle iSDPHandleDun;
+
+    };
+
+#endif  // C_CDUNBTLISTEN_H