javaextensions/bluetooth/bluetoothplugins/btl2cappushplugin/inc.s60/btl2capserverconnection.h
changeset 21 2a9601315dfc
child 25 9ac0a0a7da70
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/bluetooth/bluetoothplugins/btl2cappushplugin/inc.s60/btl2capserverconnection.h	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+
+#ifndef BTL2CAPSERVERCONNECTION_H
+#define BTL2CAPSERVERCONNECTION_H
+
+#include <e32base.h>
+#include <bt_sock.h>
+#include <btsdp.h>
+
+#include "bluetoothfunctionserver.h"
+#include "bluetoothpusheventlistener.h"
+#include "monitor.h"
+#include "servicerecord.h"
+#include "bturlparams.h"
+
+namespace java
+{
+namespace bluetooth
+{
+
+class L2CAPServerConnection: public MBluetoothSocketNotifier
+{
+public:
+    OS_IMPORT L2CAPServerConnection(
+        java::bluetooth::BluetoothFunctionServer* server);
+    OS_IMPORT ~L2CAPServerConnection();
+
+    OS_IMPORT int openServer(bool authorize, bool authenticate, bool encrypt,
+                             bool master, int receiveMTU, int transmitMTU);
+
+    // To create and initializes the service record.
+    OS_IMPORT int initializeServiceRecord(
+        TInt aPsmValue, TUUID &aServiceUUID, TDesC8 &aServiceName);
+
+    // To create and initializes the service record.
+    OS_IMPORT int initializeServiceRecord(int aPsmValue,
+                                          std::wstring aServiceUUID, std::wstring aServiceName);
+
+    // Needed in case of push. Accept should not block.
+    OS_IMPORT int asyncAccept(
+        java::bluetooth::BluetoothPushEventListener* aEventListener,
+        BtUrlParams *aBtUrlParams);
+
+    // Needed in case of push. Restore the service updates from file.
+    OS_IMPORT int restorePersistentRecord();
+
+    // NOTE: We could still retain these methods. We can avoid double conversion
+    //      In case of push we need to use convertion from c++ to symbian c.
+    //      In case of Jni, we can still convert directly to symbian.
+    OS_IMPORT int ServerOpen(TBool authorize, TBool authenticate,
+                             TBool encrypt, TBool master, TInt receiveMTU, TInt transmitMTU);
+
+    OS_IMPORT int GetServerPSM();
+    OS_IMPORT long Accept();
+    OS_IMPORT int CloseServer();
+
+    OS_IMPORT ServiceRecord *getServiceRecordHandle();
+
+public:
+    // Methods from MBluetoothSocketNotifier
+
+    //Notification of an accept complete event
+    void HandleAcceptCompleteL(TInt err);
+
+    // Notification of a baseband event
+    void HandleActivateBasebandEventNotifierCompleteL(TInt aErr,
+            TBTBasebandEventNotification &aEventNotification);
+
+    //Notification of a connection complete event
+    void HandleConnectCompleteL(TInt err);
+
+    //Notification of a ioctl complete event
+    void HandleIoctlCompleteL(TInt err);
+
+    //Notification of a receive complete event
+    void HandleReceiveCompleteL(TInt err);
+
+    //Notification of a send complete event
+    void HandleSendCompleteL(TInt err);
+
+    //Notification of a shutdown complete event
+    void HandleShutdownCompleteL(TInt err);
+
+    void avoidFilter();
+
+private:
+    L2CAPServerConnection();
+
+    void ServerOpenL(TBool authorize, TBool authenticate, TBool encrypt,
+                     TBool master, TInt receiveMTU, TInt transmitMTU);
+
+    void BindL(TBool authorize, TBool authenticate, TBool encrypt,
+               TBool master, TInt receiveMTU, TInt transmitMTU);
+
+    void ListenL();
+
+    ServiceRecord *createServiceRecordL();
+
+    int GetServerPSMValue();
+
+    long AcceptL();
+
+    void DoCancel();
+
+    void Close();
+
+    bool isConnectionAllowed(TBTSockAddr aBtAddr);
+
+private:
+    java::util::Monitor *mAcceptMonitor;
+    int mAcceptStatus;
+    CBluetoothSocket * mAcceptedSocket;
+    TBool mMasterRoleRequested;
+
+    // Used in case of Push.
+    bool mAsyncAccept;
+    //
+    bool mAvoidFilter;
+
+    // To notify once client has connected to push server
+    BluetoothPushEventListener* mPushEventListener;
+
+    // In case of Push, Filter can be used. This parameters used
+    // to filter the incoming connections according to the Filter speicified
+    // while registering for Push.
+    BtUrlParams *mBtUrlParams;
+private:
+    BluetoothClientConnection *mBtClientConn;
+    java::bluetooth::BluetoothFunctionServer* mServer;
+
+    // Listening socket
+    CBluetoothSocket* mListenSock;
+
+    // Socket server handle
+    RSocketServ mSocketServ;
+
+    // Bluetooth socket address object
+    TBTSockAddr mBtSockAddr;
+
+    // Listener connection status
+    TBool mIsConnected;
+
+    // Service Record created for advertising the service
+    ServiceRecord *mServRec;
+
+    // State of the listener
+    enum TState
+    {
+        ENone = 1,
+        EConnecting,
+        EWaiting,
+        ESending
+    };
+    TState mState;
+};
+
+} //end namespace bluetooth
+} //end namespace java
+
+#endif // BTL2CAPSERVERCONNECTION_H