--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CSocketOpt.cpp Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,146 @@
+// Copyright (c) 2005-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:
+// Name : CSocketOpt.cpp
+// Part of : ConnectionMgr
+// See class definition below.
+// Version : SIP/4.0
+//
+
+
+
+#include "CSocketOpt.h"
+#include "SipLogs.h"
+
+// -----------------------------------------------------------------------------
+// CSocketOpt::NewLC
+// -----------------------------------------------------------------------------
+//
+CSocketOpt* CSocketOpt::NewLC(
+ TUint aOptionName,
+ TUint aOptionLevel,
+ TInt aOption )
+ {
+ CSocketOpt* self =
+ new ( ELeave ) CSocketOpt( aOptionName, aOptionLevel, aOption );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSocketOpt::NewLC
+// -----------------------------------------------------------------------------
+//
+CSocketOpt* CSocketOpt::NewLC(
+ TUint aOptionName,
+ TUint aOptionLevel,
+ const TDesC8& aOption )
+ {
+ CSocketOpt* self =
+ new ( ELeave ) CSocketOpt( aOptionName, aOptionLevel );
+ CleanupStack::PushL( self );
+ self->ConstructL( aOption );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSocketOpt::~CSocketOpt
+// -----------------------------------------------------------------------------
+//
+CSocketOpt::~CSocketOpt()
+ {
+ delete iOptionBuf;
+ }
+
+// -----------------------------------------------------------------------------
+// CSocketOpt::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSocketOpt::ConstructL( const TDesC8& aOption )
+ {
+ if ( aOption != KNullDesC8 )
+ {
+ iOptionBuf = aOption.AllocL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSocketOpt::CSocketOpt
+// -----------------------------------------------------------------------------
+//
+CSocketOpt::CSocketOpt(
+ TUint aOptionName,
+ TUint aOptionLevel,
+ TInt aOption ) :
+ iOptionName( aOptionName ),
+ iOptionLevel( aOptionLevel ),
+ iOption( aOption )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CSocketOpt::SetOpt
+// -----------------------------------------------------------------------------
+//
+TUint CSocketOpt::OptionName() const
+ {
+ return iOptionName;
+ }
+
+// -----------------------------------------------------------------------------
+// CSocketOpt::SetOptL
+// -----------------------------------------------------------------------------
+//
+CSocketOpt* CSocketOpt::SetOptL( RSocket& aSocket )
+ {
+ __SIP_LOG( "CSocketOpt::SetOptL" )
+
+ CSocketOpt* previousOpt( NULL );
+ TInt err( KErrNone );
+
+ if ( iOptionBuf )
+ {
+ // Errors are ignored
+ HBufC8* optionBuf = HBufC8::NewLC( iOptionBuf->Des().MaxLength() * 2 );
+ TPtr8 optionBufPtr = optionBuf->Des();
+ err = aSocket.GetOpt( iOptionName, iOptionLevel, optionBufPtr );
+ if ( !err )
+ {
+ previousOpt = CSocketOpt::NewLC( iOptionName, iOptionLevel, *optionBuf );
+ CleanupStack::Pop( previousOpt );
+ }
+ __SIP_INT_LOG1( "CSocketOpt::SetOptL, previous opt read, err:", err )
+ CleanupStack::PopAndDestroy( optionBuf );
+ err = aSocket.SetOpt( iOptionName, iOptionLevel, *iOptionBuf );
+ }
+ else
+ {
+ // Errors are ignored
+ TInt optionVal( 0 );
+ err = aSocket.GetOpt( iOptionName, iOptionLevel, optionVal );
+ if ( !err )
+ {
+ previousOpt = CSocketOpt::NewLC( iOptionName, iOptionLevel, optionVal );
+ CleanupStack::Pop( previousOpt );
+ }
+ __SIP_INT_LOG1( "CSocketOpt::SetOptL, previous opt read, err:", err )
+ err = aSocket.SetOpt( iOptionName, iOptionLevel, iOption );
+ }
+
+ __SIP_INT_LOG1( "CSocketOpt::SetOptL, exit, err:", err )
+
+ return previousOpt;
+ }
+
+// end of file