bluetooth/btexample/example/btsocket/inc/cbtclient.h
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btexample/example/btsocket/inc/cbtclient.h	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,118 @@
+/*
+* Copyright (c) 2004-2009 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:
+* Name     : CBtClient.h
+* Part of  : ex_btsocket
+* Created  : 17/11/2004 by Shane Kearns
+* Client "smart connector" class
+* Version  :
+* 
+*
+*/
+
+
+
+#ifndef CBTCLIENT_H
+#define CBTCLIENT_H
+
+#include <e32std.h>
+#include <bt_sock.h>
+#include <btsdp.h>
+#include "exbtutil.h"
+#include "mconnectionobserver.h"
+
+/**
+A helper class for parsing the protocol descriptor list SDP attribute,
+in order to retrieve the protocol and port required for connecting
+*/
+class TBtClientSdpProtocolListParser : public MSdpAttributeValueVisitor
+	{
+	public:
+		TBtClientSdpProtocolListParser();
+	private:
+		//virtual functions from MSdpAttributeValueVisitor
+		virtual void VisitAttributeValueL(CSdpAttrValue &aValue, TSdpElementType aType);
+		virtual void StartListL(CSdpAttrValueList &aList);
+		virtual void EndListL();
+
+	public:
+		//data members
+		TUint iPort;
+		TUUID iProtocol;
+		enum
+			{
+			EFoundPort = 0x1,
+			EFoundProtocol = 0x2,
+			};
+		TUint iFoundFlags;
+	};
+
+/**
+This class implements a simple bluetooth application client.
+Its responsibility is to make outgoing bluetooth connections.
+Most of the complexity in this class deals with using the SDP agent API to 
+retrieve connection parameters from the remote device.
+*/
+class CBtClient : public CActive, MSdpAgentNotifier
+	{
+	public:
+		IMPORT_C static CBtClient* NewL(const TUUID& aServiceUUID, RSocketServ& aSocketServer, MConnectionObserver& aOwner, TBTServiceSecurity* aSecurityRequirements = NULL);
+		IMPORT_C ~CBtClient();
+
+		IMPORT_C void ConnectToRemoteDeviceL(MBluetoothSocketNotifier& aSocketOwner);
+		IMPORT_C void ConnectToRemoteDeviceL(TBTDevAddr& aAddr, MBluetoothSocketNotifier& aSocketOwner);
+	private:
+		void ConstructL(TBTServiceSecurity* aSecurityRequirements);
+		CBtClient(const TUUID& aServiceUUID, RSocketServ& aSocketServer, MConnectionObserver& aOwner);
+
+		void ConnectFailed(TInt aError);
+		void NewConnection();
+		void AttemptConnection(TUUID aProtocol, TUint16 aPort);
+
+		void CallOut(TInt aErr);
+		//virtual functions from CActive
+		virtual void RunL();
+		virtual void DoCancel();
+
+		//Virtual functions from MSdpAgentNotifier
+		virtual void NextRecordRequestComplete(TInt aError, TSdpServRecordHandle aHandle, TInt aTotalRecordsCount);
+		virtual void AttributeRequestResult(TSdpServRecordHandle aHandle, TSdpAttributeID aAttrID, CSdpAttrValue* aAttrValue);
+		virtual void AttributeRequestComplete(TSdpServRecordHandle, TInt aError);
+
+		//Data members
+		/** A socket created in order to make a connection */
+		CBluetoothSocket *iConnectionSocket;
+		/** Handle to the socket server*/
+		RSocketServ& iSocketServer;
+		/** SDP UUID of the service to find */
+		TUUID iServiceUUID;
+		/** SDP agent for performing service search */
+		CSdpAgent *iSdpAgent;
+		/** 48 bit Bluetooth address of the device selected to connect to */
+		TBTDevAddr iConnectingToDevice;
+		/** Security requirements specified by the application */
+		TBTServiceSecurity iSecurityRequirements;
+		/** Handle to an application object - callbacks are sent here */
+		MConnectionObserver& iOwner;
+		/** Helper class for parsing SDP results */
+		TBtClientSdpProtocolListParser iParser;
+		/** Handle to an application object - the socket is created with this as owner*/
+		MBluetoothSocketNotifier* iSocketOwner; //not owned
+		/** Buffer for formatting a socket address*/
+		TL2CAPSockAddr iAddrL2CAP;
+		/** Buffer for formatting a socket address*/
+		TRfcommSockAddr iAddrRFCOMM;
+	};
+
+#endif //CBTCLIENT_H