diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/inc/bt/DunBtListen.h --- /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 +#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