bluetooth/gavdp/test/tavsrcSock.cpp
branchRCL_3
changeset 24 e9b924a62a66
parent 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/gavdp/test/tavsrcSock.cpp	Wed Sep 01 12:38:54 2010 +0100
@@ -0,0 +1,221 @@
+// Copyright (c) 2007-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:
+//
+
+#include "tavsrcSock.h"
+#include "tavsrc.h"
+
+#ifdef __WINS__
+static const TSize KReaderConsole(55,10);
+static const TSize KWriterConsole(55,12);
+#else
+static const TSize KReaderConsole(KConsFullScreen,KConsFullScreen);
+static const TSize KWriterConsole(KConsFullScreen,KConsFullScreen);
+#endif
+
+//
+// class CActivePacketDropIoctl
+//
+CActivePacketDropIoctl* CActivePacketDropIoctl::NewL(CActiveConsole* aLogConsole, RSocketArray aPendingSockets)
+	{
+	CActivePacketDropIoctl* self = new (ELeave) CActivePacketDropIoctl(aLogConsole, aPendingSockets);
+	return self;
+	}
+
+CActivePacketDropIoctl::CActivePacketDropIoctl(CActiveConsole* aLogConsole, RSocketArray aPendingSockets) : CActive(0)
+	{
+	iPendingSockets = aPendingSockets;
+	iLogConsole = aLogConsole;
+	CActiveScheduler::Add(this);
+	}
+
+CActivePacketDropIoctl::~CActivePacketDropIoctl()
+	{
+	}
+
+void CActivePacketDropIoctl::DoCancel()
+	{
+	Cancel();
+	}
+
+void CActivePacketDropIoctl::Start()
+	{
+	iPendingSockets[0].Ioctl(ENotifyAvdtpMediaPacketDropped, iStatus, &iPacketsLostPkgBuf, KSolBtAVDTPMedia);	
+	SetActive();
+	}
+
+void CActivePacketDropIoctl::RunL()
+	{
+	__LOG(_L("\n**Packets Dropped Notification! %d packets lost.\n"), iPacketsLostPkgBuf());		
+	}
+
+//
+// class CActiveSockReader
+//
+CActiveSockReader* CActiveSockReader::NewL(RSocket aSock, TAvdtpTransportSessionType aType)
+	{
+	CActiveSockReader* self = new (ELeave) CActiveSockReader(aSock);
+	CleanupStack::PushL(self);
+	self->ConstructL(aType);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CActiveSockReader::CActiveSockReader(RSocket aSock)
+: CActive(0), iSock(aSock), iBufferDes(NULL, NULL)
+	{
+	CActiveScheduler::Add(this);
+	}
+	
+void CActiveSockReader::Start()
+	{
+	iSock.Read(iBufferDes,iStatus);
+	SetActive();
+	}
+	
+void CActiveSockReader::ConstructL(TAvdtpTransportSessionType aType)
+	{
+	iType = aType;
+	switch (aType)
+		{
+	case EMedia:
+		iConsole = Console::NewL(_L("Incoming Sink Data"),KReaderConsole);
+		break;
+	case EReporting:
+		iConsole = Console::NewL(_L("Incoming Reporting Channel Data"),KReaderConsole);
+		break;
+	case ERecovery:
+		iConsole = Console::NewL(_L("Incoming Recovery Channel Data"),KReaderConsole);
+		break;
+		}
+
+	iBuffer = HBufC8::NewL(40);
+	iBuffer->Des().SetMax();
+	iBufferDes.Set(iBuffer->Des());
+	}
+
+CActiveSockReader::~CActiveSockReader()
+	{
+	Cancel();
+	delete iConsole;
+	iSock.Close();
+	}
+	
+void CActiveSockReader::DoCancel()
+	{
+	iSock.CancelAll();
+	}
+	
+void CActiveSockReader::RunL()
+	{
+	if (iStatus.Int()==KErrNone)
+		{
+		iConsole->Printf(_L("length: [%04d]\n"),iBufferDes.Length());
+		for (TInt i=0;i<=iBufferDes.Length()-1;i++)
+			{
+			iConsole->Printf(_L("%c"),iBufferDes[i]);
+			}
+		iConsole->Printf(_L("\n\n"));
+		iBuffer->Des().SetMax();
+		iBufferDes.Set(iBuffer->Des());
+		iSock.Read(iBufferDes,iStatus);
+		SetActive();
+		}
+	else
+		{
+		iConsole->Printf(_L("SOCKET ERROR: %d"),iStatus.Int());
+		}
+	
+	}
+
+//
+// class CActiveSockWriter
+//
+CActiveSockWriter* CActiveSockWriter::NewL(RSocket aSock,
+													TAvdtpTransportSessionType aType)
+	{
+	CActiveSockWriter* writer = new (ELeave) CActiveSockWriter(aSock);
+	CleanupStack::PushL(writer);
+	writer->ConstructL(aType);
+	CleanupStack::Pop();
+	return writer;
+	}
+
+CActiveSockWriter::~CActiveSockWriter()
+	{
+	delete iSendBuffer;
+	delete iConsole;
+	// test for normal shutdown on media socket
+	TRequestStatus stat;
+	iSock.Shutdown(RSocket::ENormal, stat);
+	User::WaitForRequest(stat);
+	iSock.Close();
+	}
+	
+void CActiveSockWriter::Send()
+	{
+	// periodic callback to send from app
+	if (IsActive())
+		{
+		iConsole->Printf(_L("Info: Transport session %d tried to send, but active\n"), iType);
+		}
+	else
+		{
+		iSock.Write(*iSendBuffer, iStatus);
+		SetActive();
+		}
+	}
+	
+CActiveSockWriter::CActiveSockWriter(RSocket aSock)
+: CActive(-1), iSock(aSock)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CActiveSockWriter::ConstructL(TAvdtpTransportSessionType aType)
+	{
+	//	Writer console to be used in the future if necessary for debugging
+	//	iConsole = Console::NewL(_L("Writer"), KWriterConsole);
+	
+	iSendBuffer = HBufC8::NewL(512);
+	TPtr8 des = iSendBuffer->Des();
+	iType = aType;
+	switch (aType)
+		{
+	case EMedia:
+		des.Copy(_L("Media channel connected!"));
+		break;
+	case EReporting:
+		des.Copy(_L("Reporting channel connected!"));
+		break;
+	case ERecovery:
+		des.Copy(_L("Recovery channel connected!"));
+		break;
+	default:
+		des.Copy(_L("Unknown channel "));
+		des.AppendNum(aType);
+		des.Append(_L(" connected!"));
+		break;
+		}
+	}
+	
+void CActiveSockWriter::DoCancel()
+	{
+	iSock.CancelWrite();
+	}
+	
+void CActiveSockWriter::RunL()
+	{
+	//	iConsole->Printf(_L("Info: Transport session %d SENT, result %d"), iType, iStatus.Int());
+	}