realtimenetprots/sipfw/SampleApp/socketengine/Src/SIPExSocketWriter.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SampleApp/socketengine/Src/SIPExSocketWriter.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,144 @@
+
+// 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:
+//
+
+
+
+// INCLUDES
+#include    "SIPExSocketWriter.h"
+#include    "SIPExWriterNotifier.h"
+#include    <in_sock.h>
+
+// -----------------------------------------------------------------------------
+// CSIPExSocketWriter::NewL
+// Static constructor
+// -----------------------------------------------------------------------------
+//
+CSIPExSocketWriter* CSIPExSocketWriter::NewL( 
+    RSocket& aSocket, 
+    MSIPExWriterNotifier& aNotifier )
+    {
+    CSIPExSocketWriter* self = NewLC( aSocket, aNotifier );
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPExSocketWriter::NewLC
+// Static constructor
+// -----------------------------------------------------------------------------
+//    
+CSIPExSocketWriter* CSIPExSocketWriter::NewLC( 
+    RSocket& aSocket, 
+    MSIPExWriterNotifier& aNotifier )
+    {
+    CSIPExSocketWriter* self = new (ELeave) CSIPExSocketWriter( aSocket, aNotifier );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPExSocketWriter::CSIPExSocketWriter
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CSIPExSocketWriter::CSIPExSocketWriter( 
+    RSocket& aSocket, 
+    MSIPExWriterNotifier& aNotifier )
+    : CActive(CActive::EPriorityStandard), 
+      iNotifier( aNotifier ), 
+      iSocket( aSocket )
+    {
+    CActiveScheduler::Add(this);
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPExSocketWriter::~CSIPExSocketWriter
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSIPExSocketWriter::~CSIPExSocketWriter()
+    {
+    Cancel();
+    delete iBuffer;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPExSocketWriter::ConstructL
+// 2nd phase constructor
+// -----------------------------------------------------------------------------
+//
+void CSIPExSocketWriter::ConstructL()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPExSocketWriter::DoCancel
+// From CActive
+// -----------------------------------------------------------------------------
+//
+void CSIPExSocketWriter::DoCancel()
+    {
+    iSocket.CancelWrite();
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPExSocketWriter::RunL
+// From CActive
+// -----------------------------------------------------------------------------
+//
+void CSIPExSocketWriter::RunL()
+    {
+    if( iBuffer )
+        {
+        delete iBuffer;
+        iBuffer = NULL;
+        }
+
+    if( iStatus.Int() == KErrNone )
+        {
+        iNotifier.WriteDone();
+        }
+    else
+        {
+        iNotifier.ErrorInWriting( iStatus.Int() );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPExSocketWriter::Write
+// Asynchronous
+// Copy the parameter to the member variable and start asynchronous writing.
+// -----------------------------------------------------------------------------
+//
+void CSIPExSocketWriter::Write( const TDesC8& aBuffer )
+    {
+    if( iBuffer )
+        {
+        delete iBuffer;
+        iBuffer = NULL;
+        }
+
+    TRAPD( err, iBuffer = aBuffer.AllocL() );
+
+    if( !IsActive() && err == KErrNone )
+        {
+        iSocket.Write( *iBuffer, iStatus );
+        SetActive();
+        }
+    }
+
+// End of file