omacpadapters/accesspointadapter/Src/CWPAPPhysicalProxy.cpp
changeset 42 aa33c2cb9a50
child 56 a9afc3a8dbfa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omacpadapters/accesspointadapter/Src/CWPAPPhysicalProxy.cpp	Tue Jul 06 14:06:19 2010 +0300
@@ -0,0 +1,349 @@
+/*
+* Copyright (c) 2002 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:    Defines a class, which holds physical proxy information.
+*
+*/
+
+
+
+
+
+// INCLUDE FILES
+
+#include "CWPAPPhysicalProxy.h"				// Own header
+#include <CWPCharacteristic.h>
+#include <CWPParameter.h>
+#include <WPAdapterUtil.h>
+#include <featmgr.h>
+#include "CWPAPLogicalProxy.h"
+#include "CWPAPPort.h"
+#include "CWPAPNapdef.h"
+#include "WPAPAdapter.pan"
+#include "CWPLog.h"
+#include "WPAPDefs.h"
+#include <cmconnectionmethodext.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CWPAPPhysicalProxy::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CWPAPPhysicalProxy* CWPAPPhysicalProxy::NewLC( 
+                                            const TDesC& aDefaultName, 
+                                            CWPCharacteristic& aCharacteristic, 
+    CWPCharacteristic& aLogicalCharacteristic,
+    CWPAPPort*& aPort )
+	{
+	CWPAPPhysicalProxy* self = new(ELeave) CWPAPPhysicalProxy( 
+	                                                    aDefaultName, 
+                                                        aLogicalCharacteristic,
+                                                        aPort ); 
+	CleanupStack::PushL( self );
+	self->ConstructL();
+    aCharacteristic.AcceptL( *self );
+	return self;
+	}
+	
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CWPAPPhysicalProxy::~CWPAPPhysicalProxy()
+	{
+	delete iPort;
+
+    iNapdefs.ResetAndDestroy();
+    iNapdefs.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CWPAPPhysicalProxy::ValidateL
+// -----------------------------------------------------------------------------
+//
+TBool CWPAPPhysicalProxy::ValidateL()
+	{
+	TBool isValid( EFalse );
+
+	// We must have proxy address otherwise this proxy isn't valid.
+	if ( iProxyAddr )
+		{
+		switch ( iPxAddrType )
+			{
+			case EPxAddrTypeIPv4:
+				{
+				isValid = WPAdapterUtil::CheckIPv4( iProxyAddr->Value() );
+				break;
+				}
+            case EPxAddrTypeIPv6:
+                {
+                isValid = FeatureManager::FeatureSupported( KFeatureIdIPv6 )
+                    && WPAdapterUtil::CheckIPv6( iProxyAddr->Value() );
+                break;
+                }
+			case EPxAddrTypeUnsupported:
+				{
+				isValid = EFalse;
+				break;
+				}
+			default: // default value is assumed to be EPxAddrTypeIPv4
+				{
+				isValid = WPAdapterUtil::CheckIPv4( iProxyAddr->Value() );
+				}
+			}
+		}
+	return isValid;
+	}
+
+// -----------------------------------------------------------------------------
+// CWPAPPhysicalProxy::AddDataL
+// -----------------------------------------------------------------------------
+//
+void CWPAPPhysicalProxy::AddDataL( RCmConnectionMethodExt& aCmItem )
+	{  
+	LOG("--CWPAP CWPAPPhysicalProxy::AddDataL begin--");	
+	TInt err(KErrNone);
+	
+	// CMManager
+	aCmItem.SetStringAttributeL( CMManager::ECmWapIPGatewayAddress, iProxyAddr->Value());
+	LOG2("CWPAP EApWapStartPage, value: %S, err: %d",
+	                                             &iProxyAddr->Value(), err);
+
+	//CMManager
+	aCmItem.SetStringAttributeL( CMManager::ECmIPGateway, iProxyAddr->Value());
+	LOG2("CWPAP EApIspIPGateway, value: %S, err: %d",
+	                                             &iProxyAddr->Value(), err);
+
+	//CMManager 
+	aCmItem.SetStringAttributeL( CMManager::ECmProxyServerName, iProxyAddr->Value() );
+	LOG2("CWPAP EApProxyServerAddress, value: %S, err: %d",
+	                                                &iProxyAddr->Value(), err);
+	                                               
+
+	// Store port data
+	if ( iPort )
+        {
+        iPort->AddDataL( aCmItem );
+        }
+    
+    if ( iLogicalPort)
+        {
+        iLogicalPort->AddDataL( aCmItem );
+        }
+    if ( err ) err = 0; // prevent compiler warning
+    
+	LOG("--CWPAP CWPAPPhysicalProxy::AddDataL end--");	
+	}
+
+// -----------------------------------------------------------------------------
+// CWPAPPhysicalProxy::AddItemsL
+// -----------------------------------------------------------------------------
+//
+TInt CWPAPPhysicalProxy::AddItemsL( RPointerArray<CWPAPAccesspointItem>& aItems,
+                                    CWPAPItemBase* iLogicalProxy, 
+                                    CWPAPItemBase* /*iPhysicalProxy*/ ) 
+	{
+    TInt count( 0 );
+    for( TInt i( 0 ); i < iNapdefs.Count(); i++ )
+        {
+        CWPAPNapdef* pp = iNapdefs[ i ];
+        if( pp->ValidateL() )
+            {
+            count += pp->AddItemsL( aItems, iLogicalProxy, this );
+            }
+        }
+
+    return count;
+    }
+
+// -----------------------------------------------------------------------------
+// CWPAPPhysicalProxy::Name
+// -----------------------------------------------------------------------------
+//
+const TDesC& CWPAPPhysicalProxy::Name()
+	{
+    if( iName )
+        {
+        return iName->Value();
+        }
+    else 
+        {
+        return KNullDesC;
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CWPAPPhysicalProxy::VisitL
+// -----------------------------------------------------------------------------
+//
+void CWPAPPhysicalProxy::VisitL( CWPCharacteristic& aCharacteristic )
+	{
+	TInt type = aCharacteristic.Type();
+	
+	// Accept only KWPPort characteristics
+	// One valid port is enough for us
+	if ( type == KWPPort && !iPort )
+		{
+        CWPAPPort* port = CWPAPPort::NewLC( aCharacteristic );
+
+		if ( port->ValidateL() )
+			{
+			iPort = port;
+			CleanupStack::Pop( port );
+			}
+		else // Data not valid.
+			{
+			CleanupStack::PopAndDestroy( port );
+			}
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CWPAPPhysicalProxy::VisitL
+// -----------------------------------------------------------------------------
+//
+void CWPAPPhysicalProxy::VisitL( CWPParameter& aParameter)
+	{
+	TInt id = aParameter.ID();
+	const TDesC& value = aParameter.Value();
+
+	if ( value.Length() == 0 )
+		{
+		// No use to store zero length value.
+		return;
+		}
+
+	switch ( id )
+		{
+		case EWPParameterPxAddrFQDN: // iGatewayIPAddress
+			{
+			// Implementation comments:
+			// The value of this field is a domain name but we can't 
+			// at the moment resolve this to IP address 
+			// (at least from this adapter).
+			// Therefore this field can't be used. 
+			// EWPParameterPxAddr is supported
+			// and should be used.
+
+			/// Validate the domain name
+			/// Resolve to IP address
+
+			/* // Uncomment if domain name can be validated and IP address resolved
+			// Add only if we haven't already received this field
+			if ( !IsReceived( EWPParameterPxAddrFQDN_id ))
+				{
+				iGatewayIPAddress = &aParameter;
+				MarkReceived( EWPParameterPxAddrFQDN_id );
+				}
+			*/
+			break;
+			}
+		case EWPParameterPxAddr: // iGatewayIPAddress
+			{
+			// Accept only first occurrence of either PxAddr or PxAddrFQDN
+			if ( IsReceived( EWPParameterPxAddrFQDN_id ) ||
+				IsReceived( EWPParameterPxAddr_id ) )
+				{
+				return;
+				}
+			else 
+				{
+				// The max allowed lenght for proxy address is 45 bytes. 
+				// Nothing is stored if max lenght is exceeded
+				if ( aParameter.Value().Length() < 46 )
+					{
+					iProxyAddr = &aParameter;
+					MarkReceived( EWPParameterPxAddr_id );
+					}
+				}
+			break;
+			}
+		case EWPParameterPxAddrType:
+			{
+			if ( !IsReceived( EWPParameterPxAddrType_id ) )
+				{
+				// Only IPv4 addresses are supported.
+				if ( value == KIPV4 )
+					{
+					iPxAddrType = EPxAddrTypeIPv4;
+					}
+                else if( value == KIPV6 )
+                    {
+                    iPxAddrType = EPxAddrTypeIPv6;
+                    }
+				else
+					{
+					iPxAddrType = EPxAddrTypeUnsupported;
+					}
+				MarkReceived( EWPParameterPxAddrType_id );
+				}
+			break;
+			}
+        case EWPParameterName:
+            {
+            if( !iName )
+                {
+                iName = &aParameter;
+                }
+            break;
+            }
+		default:
+			{
+			// Just let through
+			}
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CWPAPPhysicalProxy::VisitL
+// -----------------------------------------------------------------------------
+//
+void CWPAPPhysicalProxy::VisitLinkL( CWPCharacteristic& aLink )
+	{
+    CWPAPNapdef* item = CWPAPNapdef::NewLC( ETrue,
+                                            iDefaultName,
+                                            iLogicalCharacteristic,
+                                            aLink );
+    User::LeaveIfError( iNapdefs.Append( item ) );
+    CleanupStack::Pop( item ); // item
+    }
+
+// -----------------------------------------------------------------------------
+// CWPAPPhysicalProxy::CWPAPPhysicalProxy
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CWPAPPhysicalProxy::CWPAPPhysicalProxy( 
+                               const TDesC& aDefaultName, 
+                               CWPCharacteristic& aLogicalCharacteristic,
+                               CWPAPPort*& aPort ) 
+	                         : CWPAPItemBase( aDefaultName ), 
+                               iLogicalPort( aPort ),
+                               iNapdefs( KInitialArraySize ),
+                               iLogicalCharacteristic( aLogicalCharacteristic )
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CWPAPPhysicalProxy::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CWPAPPhysicalProxy::ConstructL()
+	{
+	}
+
+// End of File