diff -r 505ad3f0ce5c -r cdb720e67852 Msrp/MsrpServer/src/CMSRPWriter.cpp --- a/Msrp/MsrpServer/src/CMSRPWriter.cpp Sat Jun 12 14:30:11 2010 +0530 +++ b/Msrp/MsrpServer/src/CMSRPWriter.cpp Thu Nov 25 13:59:42 2010 +0200 @@ -104,6 +104,16 @@ void CMSRPWriter::RequestSendL(MMSRPWriterObserver& aMsg) { MSRPLOG( "CMSRPWriter::RequestSendL enter" ) + // making sure the msg is not already in queue + for ( TInt i = 0; i < iSendQueue.Count(); i++ ) + { + if ( iSendQueue[ i ] == &aMsg ) + { + // already included + return; + } + } + iSendQueue.AppendL(&aMsg); if(!IsActive()) { @@ -117,6 +127,26 @@ } // ----------------------------------------------------------------------------- +// CMSRPWriter::CancelSendingL +// ----------------------------------------------------------------------------- +// +void CMSRPWriter::CancelSendingL( const MMSRPWriterObserver* aMsg ) + { + MSRPLOG( "CMSRPWriter::CancelSendingL enter" ) + if ( iSendQueue.Count() ) + { + if ( iSendQueue[ 0 ] == aMsg ) + { + if( iWriteIssued ) + { + MSRPLOG( "CMSRPWriter::CancelSendingL Write Canceled" ) + iSocket.CancelWrite(); + } + } + } + } + +// ----------------------------------------------------------------------------- // CMSRPWriter::CancelReceiving // ----------------------------------------------------------------------------- // @@ -149,7 +179,8 @@ MMSRPWriterObserver::TMsgStatus msgState = MMSRPWriterObserver::EComplete; msgState = iSendQueue[0]->WriteDoneL(status); - if(msgState != MMSRPWriterObserver::EPending) + if( msgState != MMSRPWriterObserver::EPending && + msgState != MMSRPWriterObserver::ESendingReport ) { MMSRPWriterObserver* obs = iSendQueue[0]; iSendQueue.Remove(0); @@ -186,16 +217,14 @@ { TBool interruptSend = FALSE; - //while(iSendQueue.Count()) if(iSendQueue.Count()) { MMSRPWriterObserver::TWriteStatus ret = MMSRPWriterObserver::EMsrpSocketWrite; - TPtrC8 data(NULL,0); if(iSendQueue.Count()>1) interruptSend = TRUE; - ret = iSendQueue[0]->GetSendBufferL(data, interruptSend); + const TDesC8& writeBuffer = iSendQueue[0]->GetSendBufferL( ret, interruptSend); Deque(); CActiveScheduler::Add(this); @@ -203,7 +232,7 @@ if( ret == MMSRPWriterObserver::EMsrpSocketWrite ) //KErrNone == 0 { - iSocket.Write( data, iStatus ); + iSocket.Write( writeBuffer, iStatus ); iWriteIssued = TRUE; } else if (ret == MMSRPWriterObserver::EMsrpAvoidSocketWrite)//EAvoidSocketWrite