diff -r 000000000000 -r 29b1cd4cb562 bluetooth/gavdp/test/tavsrcSock.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/gavdp/test/tavsrcSock.cpp Fri Jan 15 08:13:17 2010 +0200 @@ -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()); + }