--- /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