diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyprotocols/rawipnif/src/Receiver.cpp --- a/telephonyprotocols/rawipnif/src/Receiver.cpp Mon May 03 13:37:20 2010 +0300 +++ b/telephonyprotocols/rawipnif/src/Receiver.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,168 +1,168 @@ -// Copyright (c) 2002-2010 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: -// Implements the active object that controls the Read() requests. -// -// - -/** - @file -*/ - -#include "Receiver.h" -#include "Constants.h" -#include - -const TUint KBufferIncreaseStep=500; -const TUint K64k=65535; - -CReceiver::CReceiver(CBcaIoController& aObserver, CBttLogger* aTheLogger, TUint aMaxPacketSize) -/** - * Constructor. Performs standard active object initialisation. - * - * @param aObserver Reference to the observer of this state machine - * @param aTheLogger The logging object - */ - : CActive(EPriorityHigh), - iObserver(aObserver), - iTheLogger(aTheLogger), - iMaxPacketSize(aMaxPacketSize) - { - CActiveScheduler::Add(this); - } - -CReceiver* CReceiver::NewL(CBcaIoController& aObserver, CBttLogger* aTheLogger, TUint aMaxPacketSize) -/** - * Two-phase constructor. Creates a new CBcaIoController object, performs - * second-phase construction, then returns it. - * - * @param aObserver The observer, to which events will be reported - * @param aTheLogger The logging object - * @return A newly constructed CBcaIoController object - */ - { - CReceiver* self = new (ELeave) CReceiver(aObserver, aTheLogger, aMaxPacketSize); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -void CReceiver::ConstructL() -/** - * Second-phase constructor. Creates all the state objects it owns. - */ - { - _LOG_L1C1(_L8("CReceiver::ConstructL")); - iData.CreateL(iMaxPacketSize); - } - -CReceiver::~CReceiver() -/** - * Destructor. - */ - { - iData.Close(); - Cancel(); - } - -void CReceiver::RunL() -/** - * Method called when read request completes. This will only be once the BCA has a full IP - * packet in its buffer. - */ - { - _LOG_L1C2(_L8("CReceiver::RunL [iStatus=%d]"), iStatus.Int()); - - if (iStatus != KErrNone) - { - if (iStatus == KErrNoMemory) - { - _LOG_L2C1( - _L8("WARNING! CReceiver: Read failed with KErrNoMemory. Increase buffer.")); - // Read operation failed!! Nif will re-issue the read request. Increase buffer. - if ((iMaxPacketSize + KBufferIncreaseStep) > K64k) - { - // In theory IP packet can't be bigger than 64k, so if we come here something is wrong so stop observer. - iObserver.Stop(KErrNoMemory); - } - else - { - iMaxPacketSize += KBufferIncreaseStep; - TInt err = iData.ReAlloc(iMaxPacketSize); - if (KErrNoMemory == err) - { - iObserver.Stop(KErrNoMemory); - } - else - { - (iObserver.Bca())->Read(iStatus, iData); - SetActive(); - } - } - } - else - { - _LOG_L2C1(_L8("WARNING! CReceiver: Read failed")); - iObserver.Stop(iStatus.Int()); - } - return; - } - else - { - _LOG_L1C1(_L8("CReceiver: Data Packet Received")); - - iRMBufPacket.CreateL(iData); - - // Immediately execute new read request. - (iObserver.Bca())->Read(iStatus, iData); - - SetActive(); - - iRMBufPacket.Pack(); - -#ifdef RAWIP_HEADER_APPENDED_TO_PACKETS - TUint16 protocolCode = iObserver.RemoveHeader(iRMBufPacket); -#else - TUint16 protocolCode = 0; -#endif // RAWIP_HEADER_APPENDED_TO_PACKETS - - // Process the packet - iObserver.GetObserver().Process(iRMBufPacket, protocolCode); - iRMBufPacket.Free(); - } - } - -void CReceiver::DoCancel() -/** - * Cancel active request - */ - { - _LOG_L1C1(_L8("CReceiver::DoCancel")); - - (iObserver.Bca())->CancelRead(); - } - -void CReceiver::StartListening() -/** - * This method issues a Read request. This is the API used to receive - * packets from BCA. - */ - { - _LOG_L1C1(_L8("CReceiver::StartListening")); - - // The BCA will complete this read once it has a full IP packet in its buffer. - (iObserver.Bca())->Read(iStatus, iData); - - SetActive(); - } +// Copyright (c) 2002-2010 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: +// Implements the active object that controls the Read() requests. +// +// + +/** + @file +*/ + +#include "Receiver.h" +#include "Constants.h" +#include + +const TUint KBufferIncreaseStep=500; +const TUint K64k=65535; + +CReceiver::CReceiver(CBcaIoController& aObserver, CBttLogger* aTheLogger, TUint aMaxPacketSize) +/** + * Constructor. Performs standard active object initialisation. + * + * @param aObserver Reference to the observer of this state machine + * @param aTheLogger The logging object + */ + : CActive(EPriorityHigh), + iObserver(aObserver), + iTheLogger(aTheLogger), + iMaxPacketSize(aMaxPacketSize) + { + CActiveScheduler::Add(this); + } + +CReceiver* CReceiver::NewL(CBcaIoController& aObserver, CBttLogger* aTheLogger, TUint aMaxPacketSize) +/** + * Two-phase constructor. Creates a new CBcaIoController object, performs + * second-phase construction, then returns it. + * + * @param aObserver The observer, to which events will be reported + * @param aTheLogger The logging object + * @return A newly constructed CBcaIoController object + */ + { + CReceiver* self = new (ELeave) CReceiver(aObserver, aTheLogger, aMaxPacketSize); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +void CReceiver::ConstructL() +/** + * Second-phase constructor. Creates all the state objects it owns. + */ + { + _LOG_L1C1(_L8("CReceiver::ConstructL")); + iData.CreateL(iMaxPacketSize); + } + +CReceiver::~CReceiver() +/** + * Destructor. + */ + { + iData.Close(); + Cancel(); + } + +void CReceiver::RunL() +/** + * Method called when read request completes. This will only be once the BCA has a full IP + * packet in its buffer. + */ + { + _LOG_L1C2(_L8("CReceiver::RunL [iStatus=%d]"), iStatus.Int()); + + if (iStatus != KErrNone) + { + if (iStatus == KErrNoMemory) + { + _LOG_L2C1( + _L8("WARNING! CReceiver: Read failed with KErrNoMemory. Increase buffer.")); + // Read operation failed!! Nif will re-issue the read request. Increase buffer. + if ((iMaxPacketSize + KBufferIncreaseStep) > K64k) + { + // In theory IP packet can't be bigger than 64k, so if we come here something is wrong so stop observer. + iObserver.Stop(KErrNoMemory); + } + else + { + iMaxPacketSize += KBufferIncreaseStep; + TInt err = iData.ReAlloc(iMaxPacketSize); + if (KErrNoMemory == err) + { + iObserver.Stop(KErrNoMemory); + } + else + { + (iObserver.Bca())->Read(iStatus, iData); + SetActive(); + } + } + } + else + { + _LOG_L2C1(_L8("WARNING! CReceiver: Read failed")); + iObserver.Stop(iStatus.Int()); + } + return; + } + else + { + _LOG_L1C1(_L8("CReceiver: Data Packet Received")); + + iRMBufPacket.CreateL(iData); + + // Immediately execute new read request. + (iObserver.Bca())->Read(iStatus, iData); + + SetActive(); + + iRMBufPacket.Pack(); + +#ifdef RAWIP_HEADER_APPENDED_TO_PACKETS + TUint16 protocolCode = iObserver.RemoveHeader(iRMBufPacket); +#else + TUint16 protocolCode = 0; +#endif // RAWIP_HEADER_APPENDED_TO_PACKETS + + // Process the packet + iObserver.GetObserver().Process(iRMBufPacket, protocolCode); + iRMBufPacket.Free(); + } + } + +void CReceiver::DoCancel() +/** + * Cancel active request + */ + { + _LOG_L1C1(_L8("CReceiver::DoCancel")); + + (iObserver.Bca())->CancelRead(); + } + +void CReceiver::StartListening() +/** + * This method issues a Read request. This is the API used to receive + * packets from BCA. + */ + { + _LOG_L1C1(_L8("CReceiver::StartListening")); + + // The BCA will complete this read once it has a full IP packet in its buffer. + (iObserver.Bca())->Read(iStatus, iData); + + SetActive(); + }