bluetoothengine/btmac/src/btmac/btmsyncsock.cpp
changeset 0 f63038272f30
child 57 5ebadcda06cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btmac/src/btmac/btmsyncsock.cpp	Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2005-2006 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:  BT sync socket
+*  Version     : %version: 4.2.4 %
+*
+*/
+
+
+#include <es_sock.h>
+#include "btmsyncsock.h"
+#include "btmsockobserver.h"
+#include "btmdefs.h"
+#include "debug.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+CBtmSyncSock* CBtmSyncSock::NewL(MBtmSockObserver& aNotifier, RSocketServ& aSockServ)
+    {
+    CBtmSyncSock* self = new (ELeave) CBtmSyncSock(aNotifier, aSockServ);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CBtmSyncSock::~CBtmSyncSock()
+    {
+    TRACE_FUNC_ENTRY
+    delete iSco;
+    delete iEScoLink;
+    TRACE_FUNC_EXIT
+    }
+
+void CBtmSyncSock::SetupL(const TBTDevAddr& aAddr, const TBTSyncPackets& aPackets)
+    {
+    TRACE_FUNC_ENTRY
+	iSco->SetupConnection(aAddr, aPackets);
+    TRACE_FUNC_EXIT
+    }
+
+void CBtmSyncSock::CancelSetup()
+    {
+    TRACE_FUNC_ENTRY
+	iSco->CancelSetup();
+	iSco->Disconnect();
+    TRACE_FUNC_EXIT
+    }
+    
+void CBtmSyncSock::DisconnectL()
+    {
+    TRACE_FUNC_ENTRY
+    if (iConnectedLink)
+        iConnectedLink->Disconnect();
+    TRACE_FUNC_EXIT
+    }
+
+void CBtmSyncSock::AcceptL(TBool aAllowEsco)
+    {
+    TRACE_FUNC_ENTRY
+    iScoAcceptor = TScoAcceptor(this);
+    iSco->SetNotifier(iScoAcceptor);
+    iSco->AcceptConnection(TBTSyncPackets(KScoPacketTypeSpec));
+    if (aAllowEsco)
+        {
+        iESco_Acceptor = TScoAcceptor(this);
+        iEScoLink = CBluetoothSynchronousLink::NewL(iESco_Acceptor, iServer);
+        iEScoLink->AcceptConnection(TBTSyncPackets(KEscoPacketTypeSpec));
+        }
+    TRACE_FUNC_EXIT    
+    }
+
+void CBtmSyncSock::CancelAccept()
+    {
+    TRACE_FUNC_ENTRY
+    if (iSco)
+        {
+        iSco->CancelAccept();
+        }
+    if (iEScoLink)
+        {
+        iEScoLink->CancelAccept();
+        }
+    TRACE_FUNC_EXIT    
+    }
+
+void CBtmSyncSock::SetMaxLatency(TUint16 aLatency)
+    {
+    iSco->SetMaxLatency(aLatency);
+    if (iEScoLink)
+        iEScoLink->SetMaxLatency(aLatency);
+    }
+    
+void CBtmSyncSock::SetRetransmissionEffort(TBTeSCORetransmissionTypes aRetransmissionEffort)
+    {
+    iSco->SetRetransmissionEffort(aRetransmissionEffort);
+    if (iEScoLink)
+        iEScoLink->SetRetransmissionEffort(aRetransmissionEffort);
+    }
+
+void CBtmSyncSock::Reset()
+    {
+    TRACE_FUNC_ENTRY
+    
+    TRACE_FUNC_EXIT    
+    }
+    
+void CBtmSyncSock::SetObserver(MBtmSockObserver& aObserver)
+    {
+    iObserver = &aObserver;
+    }
+
+TInt CBtmSyncSock::Latency()
+    {
+    TRACE_FUNC
+    return TInt(iSco->Latency());
+    }
+
+void CBtmSyncSock::HandleSetupConnectionCompleteL(TInt aErr)
+    {
+    TRACE_FUNC
+    iConnectedLink = iSco;
+    iObserver->SyncLinkSetupCompleteL(aErr);
+    }
+
+void CBtmSyncSock::HandleDisconnectionCompleteL(TInt aErr)
+    {
+    TRACE_FUNC_ENTRY
+    iConnectedLink = NULL;
+    iObserver->SyncLinkDisconnectCompleteL(aErr);
+    TRACE_FUNC_EXIT    
+    }
+
+void CBtmSyncSock::HandleAcceptConnectionCompleteL(TInt /*aErr*/)
+    {
+    TRACE_FUNC
+    }
+
+void CBtmSyncSock::HandleSendCompleteL(TInt aErr)
+    {
+    iObserver->SyncLinkSendCompleteL(aErr);
+    }
+
+void CBtmSyncSock::HandleReceiveCompleteL(TInt aErr)
+    {
+    TRACE_ERROR(_L("CBtmSyncSock::HandleReceiveCompleteL"))
+    iObserver->SyncLinkReceiveCompleteL(aErr);
+    }
+
+CBtmSyncSock::CBtmSyncSock(MBtmSockObserver& aObserver, RSocketServ& aSockServ)
+    : iObserver(&aObserver), iServer(aSockServ)
+    {
+    }
+
+void CBtmSyncSock::ConstructL()
+    {
+    TRACE_FUNC
+    iSco = CBluetoothSynchronousLink::NewL(*this, iServer);
+    }
+
+void CBtmSyncSock::AcceptRedirectL(TInt aErr, TScoAcceptor& aAcceptor)
+    {
+    TRACE_FUNC
+    if (&aAcceptor == &iScoAcceptor)
+        {
+        TRACE_INFO((_L("Sync link type SCO")))
+        iConnectedLink = iSco;
+        if (iEScoLink)
+            iEScoLink->CancelAccept();
+        }
+    else
+        {
+        TRACE_INFO((_L("Sync link type ESCO")))
+        iConnectedLink = iEScoLink;
+        iSco->CancelAccept();
+        }
+    iConnectedLink->SetNotifier(*this);
+    iObserver->SyncLinkAcceptCompleteL(aErr);
+    }
+
+CBtmSyncSock::TScoAcceptor::TScoAcceptor()
+    {
+    TScoAcceptor(NULL);
+    }
+
+CBtmSyncSock::TScoAcceptor::TScoAcceptor(CBtmSyncSock* aParent)
+    : iParent(aParent)
+    {
+    }
+
+void CBtmSyncSock::TScoAcceptor::HandleSetupConnectionCompleteL(TInt /*aErr*/)
+    {
+    TRACE_FUNC
+    }
+    
+void CBtmSyncSock::TScoAcceptor::HandleDisconnectionCompleteL(TInt /*aErr*/)
+    {
+    TRACE_FUNC
+    }
+void CBtmSyncSock::TScoAcceptor::HandleAcceptConnectionCompleteL(TInt aErr)
+    {
+    TRACE_FUNC
+    iParent->AcceptRedirectL(aErr, *this);
+    }
+    
+void CBtmSyncSock::TScoAcceptor::HandleSendCompleteL(TInt /*aErr*/)
+    {
+    TRACE_FUNC
+    }
+void CBtmSyncSock::TScoAcceptor::HandleReceiveCompleteL(TInt /*aErr*/)
+    {
+    TRACE_FUNC
+    }