supl/locationsuplfw/settingsapi/src/epos_csuplsettingextensionparams.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:06:48 +0200
changeset 0 667063e416a2
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2005 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 of class CServerExtensionParams with get and set methods for Server params
*
*/



// INCLUDE FILES

#include "epos_csuplsettingextensionparams.h"
#include "epos_csuplsettingsinternalconstants.h"
#include "epos_csuplsettingsconstants.h"

// CONSTANTS

// ==================== LOCAL FUNCTIONS ====================


// ================= MEMBER FUNCTIONS =======================

// C++ default constructor can NOT contain any code, that
// might leave.
//
CServerExtensionParams::CServerExtensionParams():iServerId(NULL),       
                                        		 iIap1(NULL),
                                        		 iIap2(NULL), 
                                                 iServerAddr(NULL),
                                                 iServerAddType(NULL),
                                                 iIsValueSet(EFalse)
                                       
    {
    }

EXPORT_C CServerExtensionParams* CServerExtensionParams::NewL()
    {
    CServerExtensionParams* self = new (ELeave) CServerExtensionParams();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop(self);
    return self;
    }

EXPORT_C CServerExtensionParams* CServerExtensionParams::NewLC()
    {
    CServerExtensionParams* self = new (ELeave) CServerExtensionParams();
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }


// EPOC default constructor can leave.
void CServerExtensionParams::ConstructL()
    {
      
    }

// Destructor
EXPORT_C  CServerExtensionParams::~CServerExtensionParams()
    {
    delete iServerId;
    iServerId = NULL;
    delete iIap1;
    iIap1 = NULL;
    delete iIap2;
    iIap2 = NULL;
    delete iServerAddr;
    iServerAddr = NULL;
    delete iServerAddType;
    iServerAddType = NULL;
   

    }
// ---------------------------------------------------------------------------
// CServerExtensionParams::Set()
//
// Sets server parameters.
// ---------------------------------------------------------------------------
EXPORT_C TInt CServerExtensionParams::Set( const TDesC& aServerId,
                						   const TDesC& aIap1,
                						   const TDesC& aIap2,
                						   const TDesC& aServerAddr,
                						   const TDesC& aServerAddType
                                         )
    {
    // Reset the state first
    delete iServerId;
    iServerId = NULL;
    delete iIap1;
    iIap1 = NULL;
    delete iIap2;
    iIap2 = NULL;
    delete iServerAddType;
    iServerAddType = NULL;
    delete iServerAddr;
    iServerAddr = NULL;
    
    if(aServerId.Length() > 0 && aServerId.Length() <= KMaxServerIdLen)
        {
        iServerId = HBufC::New(aServerId.Length());
        if(iServerId)
	        {
	        iServerId->Des().Copy(aServerId);
	        }
            
        else
	        {
	        return KErrNoMemory;
	        }
    	}
    
    else if(aServerId.Length() == 0)
	    {
	    iServerId = NULL;
	    }
       
    else
	    {
	    return KErrArgument;
	    }
        
        
    if(aIap1.Length() > 0 && aIap1.Length() <= KMaxIAPLen)
        {
        iIap1 = HBufC::New(aIap1.Length());
        if(iIap1)
	        {
	        iIap1->Des().Copy(aIap1);
	        }
            
        else
	        {
	        return KErrNoMemory;
	        }
    	}
    
    else if(aIap1.Length() == 0)
	    {
	    iIap1 = NULL;
	    }
       
    else
	    {
	    return KErrArgument;
	    }
	    
	if(aIap2.Length() > 0 && aIap2.Length() <= KMaxIAPLen)
        {
        iIap2 = HBufC::New(aIap2.Length());
        if(iIap2)
	        {
	        iIap2->Des().Copy(aIap2);
	        }
            
        else
	        {
	        return KErrNoMemory;
	        }
    	}
    else if(aIap2.Length() == 0)
	    {
	    iIap2 = NULL;
	    }
    else
	    {
	    return KErrArgument;
	    }
	    
	if(aServerAddType.Length() > 0 && aServerAddType.Length() <= KMaxServerAddTypeLen)
        {
        iServerAddType = HBufC::New(aServerAddType.Length());
        if(iServerAddType)
	        {
	        iServerAddType->Des().Copy(aServerAddType);
	        }
            
        else
	        {
	        return KErrNoMemory;
	        }
    	}
    
    else if(aServerAddType.Length() == 0)
	    {
	    iServerAddType = NULL;
	    }
    else
	    {
	    return KErrArgument;
	    }
	    
	if(aServerAddr.Length() > 0 && aServerAddr.Length() <= KMaxServerAddLen)
        {
        iServerAddr = HBufC::New(aServerAddr.Length());
        if(iServerAddr)
	        {
	        iServerAddr->Des().Copy(aServerAddr);
	        }
            
        else
	        {
	        return KErrNoMemory;
	        }
    	}
    
    else if(aServerAddr.Length() == 0)
	    {
	    iServerAddr = NULL;
	    }
    else
	    {
	    return KErrArgument;
	    }               
	
       
    iIsValueSet = ETrue;
    return KErrNone;            
    }
// ---------------------------------------------------------------------------
// CServerExtensionParams::Get()
//
// Returns server parameters.
// ---------------------------------------------------------------------------
EXPORT_C TInt CServerExtensionParams::Get( TPtr aServerId,
                						   TPtr aIap1,
                                           TPtr aIap2,
                                           TPtr aServerAddr,
                                           TPtr aServerAddType
                                         ) const
    {
    if(!iIsValueSet)
	    {
	    //if values were not set before using the Set method, return error
	    return KErrNotFound;
	    }
        
    if( iServerId )
        {
        if( aServerId.Ptr() == NULL )
            {
            return KErrArgument;
            }
        if( iServerId->Length() > aServerId.MaxLength() )
            {
            return KErrOverflow;
            }
        aServerId = iServerId->Des();
        }
    else
        {
        aServerId.Zero();
        }
        
    if( iIap1 )
        {
        if( aIap1.Ptr() == NULL )
            {
            return KErrArgument;
            }
        if( iIap1->Length() > aIap1.MaxLength() )
            {
            return KErrOverflow;
            }
        aIap1 = iIap1->Des();
        }
    else
        {
        aIap1.Zero();
        }
        
    if( iIap2 )
        {
        if( aIap2.Ptr() == NULL )
            {
            return KErrArgument;
            }
        if( iIap2->Length() > aIap2.MaxLength())
            {
            return KErrOverflow;
            }
        aIap2 = iIap2->Des();
        }
    else
        {
        aIap2.Zero();
        }
        
    if( iServerAddType )
        {
        if( aServerAddType.Ptr() == NULL )
            {
            return KErrArgument;
            }
        if( iServerAddType->Length() > aServerAddType.MaxLength() )
            {
            return KErrOverflow;
            }
        aServerAddType = iServerAddType->Des();
        }
    else
        {
        aServerAddType.Zero();
        }
        
    if( iServerAddr )
        {
        if( aServerAddr.Ptr() == NULL )
            {
            return KErrArgument;
            }
        if( iServerAddr->Length() > aServerAddr.MaxLength() )
            {
            return KErrOverflow;
            }
        aServerAddr = iServerAddr->Des();
        }
    else
        {
        aServerAddr.Zero();
        }                
    return KErrNone;            
    }
//  End of File