diff -r abbed5a4b42a -r 8d540f55e491 networkcontrol/ipscpr/src/qos_msg.cpp --- a/networkcontrol/ipscpr/src/qos_msg.cpp Tue Aug 31 16:45:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,393 +0,0 @@ -// Copyright (c) 2004-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: -// Implementation file for the QoS Mapping Messages -// -// - -/** - @file qos_msg.cpp -*/ - -#include "pfqos_stream.h" -#include "pfqoslib.h" -#include "ipscpr.h" -#include "qos_msg.h" -#include "ipscprlog.h" - - -const TIp6Addr KInet6AddrMask = {{{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}}}; - -const TInt KQoSDefaultBufSize = 8000; - - -CQoSMsg* CQoSMsg::NewL( TPfqosMessages aMsgType ) -/** -Create a new QoS PRT Message - -@param aMsgType Message Type -*/ - { - CQoSMsg* msg = new (ELeave) CQoSMsg(); - - CleanupStack::PushL( msg ); - msg->ConstructL( aMsgType ); - CleanupStack::Pop(); - - return msg; - } - - -CQoSMsg::~CQoSMsg() -/** -Destructor -*/ - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsg::Destroy [%08x] Type=%d"), this, iType)); - - delete iMsg; - iMsg = NULL; - } - - -CQoSMsg::CQoSMsg() -/** -Constructor -*/ - { - } - - -void CQoSMsg::ConstructL( TPfqosMessages aMsgType ) -/** -QoS PRT Message second phase construction - -@param aMsgType Message Type -*/ - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsg::Construct [%08x] Type=%d"), this, aMsgType)); - - iMsg = CPfqosStream::NewL(KQoSDefaultBufSize); - iMsg->Init((TUint8)aMsgType); - iType = aMsgType; - } - - -void CQoSMsg::AddSrcAddr(const TInetAddr &aAddr) -/** -Adds Source Address Information to the QoS PRT Message - -@param aAddr Source Address -*/ - { - TInetAddr srcInetAddr(aAddr); - srcInetAddr.SetFamily(KAFUnspec); - srcInetAddr.SetAddress(KInet6AddrNone); - - TInetAddr mask; - mask.SetAddress(KInet6AddrMask); - iMsg->AddSrcAddress(srcInetAddr, mask, (TUint16)srcInetAddr.Port()); - } - - -void CQoSMsg::AddDstAddr(const TInetAddr &aAddr) -/** -Adds Destination Address Information to the QoS PRT Message - -@param aAddr Destination Address -*/ - { - TInetAddr dstInetAddr(aAddr); - if (dstInetAddr.Family() == KAfInet) - { - dstInetAddr.ConvertToV4Mapped(); - } - - TInetAddr mask; - mask.SetAddress(KInet6AddrMask); - iMsg->AddDstAddress(dstInetAddr, mask, (TUint16)dstInetAddr.Port()); - } - - -void CQoSMsg::AddExtensionPolicy(TQoSExtensionQueue& aExtensions) -/** -Add QoS Extension Parameters to the QoS Message - -@param aExtensions Collection of Extensions Parameters -*/ - { - TQoSExtensionQueueIter iter(aExtensions); - CExtensionBase* extension; - while ((extension=iter++) != NULL) - { - TDesC8& extData = extension->Data(); - iMsg->AddExtensionPolicy(extData); - } - } - - -void CQoSMsg::Send(RInternalSocket &aSocket, TRequestStatus& aStatus) -/** -Sends the current message to the QoS PRT - -@param aSocket Internal Socket over which to send a message -@param aStatus Request Status -*/ - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsg::Send [%08x] Type=%d"), this, iType)); - - iMsg->Send(aSocket, aStatus); - } - - -// ########################################################### - - -CQoSMsgWriter* CQoSMsgWriter::NewL(CIpSubConnectionProvider* aOwner, RInternalSocket& aSocket) -/** -Create QoS PRT Message Writer - -@param aOwner The IP SubConnection Provider that creates this object -@param aSocket reference to an Internal Socket owned by the IP SubConnection Provider -*/ - { - return new (ELeave) CQoSMsgWriter(aOwner, aSocket); - } - - -CQoSMsgWriter::CQoSMsgWriter(CIpSubConnectionProvider* aOwner, RInternalSocket& aSocket) -/** -Constructor - -@param aOwner The IP SubConnection Provider that creates this object -@param aSocket reference to an Internal Socket owned by the IP SubConnection Provider -*/ - : CActive(EPriorityStandard) - , iOwner(aOwner) - , iSocket(aSocket) - , iClosing(EFalse) - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgWriter::Construct [%08x]"), this)); - - CActiveScheduler::Add(this); - iPendingMsg.SetOffset(_FOFF(CQoSMsg, iLink)); - } - - -CQoSMsgWriter::~CQoSMsgWriter() -/** -Destructor -*/ - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgWriter::Destroy [%08x]"), this)); - - if (IsActive()) - { - Cancel(); - } - - iClosing = ETrue; - - if (iCurrentMsg) - { - delete iCurrentMsg; - iCurrentMsg = NULL; - } - - while (!iPendingMsg.IsEmpty()) - { - CQoSMsg* msg = iPendingMsg.First(); - iPendingMsg.Remove(*msg); - delete msg; - } - - iPendingMsg.Reset(); - } - - -void CQoSMsgWriter::Send(CQoSMsg* aMsg) -/** -Sends a Message to the QoS PRT - -@param aMsg The message to send -*/ - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgWriter::Send [%08x]"), this)); - - // Can only process one message at a time. - if (IsActive()) - { - iPendingMsg.AddLast(*aMsg); - } - else - { - iCurrentMsg = aMsg; - iCurrentMsg->Send(iSocket, iStatus); - SetActive(); - } - } - - -void CQoSMsgWriter::RunL() -/** -Active Object main processing function -*/ - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgWriter::RunL [%08x] - Enter"), this)); - - TInt err = iStatus.Int(); - if (err != KErrNone && iOwner) - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgWriter::RunL [%08x] - Process Error"), this)); -#ifdef _DEBUG - TInt msgType = EPfqosReserved; - if( iCurrentMsg ) - { - msgType = iCurrentMsg->iType; - } - iOwner->ProcessPRTError(msgType, err); -#endif - } - - delete iCurrentMsg; - iCurrentMsg = NULL; - - if (!iClosing && !iPendingMsg.IsEmpty()) - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgWriter::RunL [%08x] - Send next message"), this)); - CQoSMsg* msg = iPendingMsg.First(); - iPendingMsg.Remove(*msg); - iCurrentMsg = msg; - iCurrentMsg->Send(iSocket, iStatus); - SetActive(); - } - - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgWriter::RunL [%08x] - Exit"), this)); - } - - -// ########################################################### - - -CQoSMsgReader* CQoSMsgReader::NewL( CIpSubConnectionProvider *aOwner, RInternalSocket& aSocket) -/** -Create QoS PRT Message Reader - -@param aOwner The IP SubConnection Provider that creates this object -@param aSocket reference to an Internal Socket owned by the IP SubConnection Provider -*/ - { - CQoSMsgReader* reader = new (ELeave) CQoSMsgReader(aOwner, aSocket); - - CleanupStack::PushL( reader ); - reader->ConstructL(); - CleanupStack::Pop(); - - return reader; - } - - -CQoSMsgReader::CQoSMsgReader(CIpSubConnectionProvider *aOwner, RInternalSocket& aSocket) -/** -Constructor - -@param aOwner The IP SubConnection Provider that creates this object -@param aSocket reference to an Internal Socket owned by the IP SubConnection Provider -*/ - : CActive(EPriorityStandard) - , iOwner(aOwner) - , iSocket(aSocket) - , iRecvPtr(0,0) - , iClosing(EFalse) - { - CActiveScheduler::Add(this); - } - - -CQoSMsgReader::~CQoSMsgReader() -/** -Destructor -*/ - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgReader::Destruct [%08x]"), this)); - - if (IsActive()) - { - Cancel(); - } - - iClosing = ETrue; - - if (iRecvBuf) - { - delete iRecvBuf; - iRecvBuf = NULL; - } - } - - -void CQoSMsgReader::ConstructL() -/** -QoS PRT Message Reader second phase construction -*/ - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgReader::Construct [%08x]"), this)); - - iRecvBuf = HBufC8::NewL(KQoSDefaultBufSize); - TPtr8 tmp(iRecvBuf->Des()); - iRecvPtr.Set(tmp); - - iRecvPtr.Zero(); - iRecvPtr.SetLength(KQoSDefaultBufSize); - iSocket.Recv(iRecvPtr, 0, iStatus); - SetActive(); - } - - -void CQoSMsgReader::RunL() -/** -Active Object main processing function -*/ - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgReader::RunL [%08x] - Enter"), this)); - - if (iStatus.Int() == KErrNone && iRecvPtr.Length() > 0 ) - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgReader::RunL [%08x] - Process Response"), this)); - TPfqosMessage msg(iRecvPtr); - if (msg.iError == KErrNone) - { - iOwner->ProcessPRTMsg(msg); - } -#ifdef _DEBUG - else - { - TInt msgType = EPfqosReserved; - iOwner->ProcessPRTError(msgType, msg.iError); - } -#endif - } - - if (!iClosing) - { - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgReader::RunL [%08x] - Wait for next message"), this)); - iRecvPtr.Zero(); - iRecvPtr.SetLength(KQoSDefaultBufSize); - iSocket.Recv(iRecvPtr, 0, iStatus); - SetActive(); - } - - __IPCPRLOG(IpCprLog::Printf(_L("CQoSMsgReader::RunL [%08x] - Exit"), this)); - } -