voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlparamhandler.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 00:05:57 +0200
changeset 2 7b872347d83b
child 8 7117cbf1600a
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2009-2010 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:  VoIP settings XML parameter handler.
*
*/


#include "voipxmlparamhandler.h"
#include "voipxmlsiphandler.h"
#include "voipxmlvoiphandler.h"
#include "voipxmlxdmhandler.h"
#include "voipxmlpresencehandler.h"
#include "voipxmlnatfwhandler.h"
#include "voipxmliaphandler.h"
#include "voipxmlprocessordefaults.h"

// ---------------------------------------------------------------------------
// Default constructor.
// ---------------------------------------------------------------------------
//
CVoipXmlParamHandler::CVoipXmlParamHandler()
    {
    }

// ---------------------------------------------------------------------------
// ConstructL
// ---------------------------------------------------------------------------
//
void CVoipXmlParamHandler::ConstructL()
    {
    iSettingsType         = EUnknown;
    iPreviousSettingsType = EUnknown;
    iSipHandler      = CVoipXmlSipHandler::NewL();
    iVoipHandler     = CVoipXmlVoipHandler::NewL();
    iXdmHandler      = CVoipXmlXdmHandler::NewL();
    iPresenceHandler = CVoipXmlPresenceHandler::NewL();
    iNatFwHandler    = CVoipXmlNatFwHandler::NewL();
    iIapHandler      = CVoipXmlIapHandler::NewL();
    }

// ---------------------------------------------------------------------------
// NewL
// ---------------------------------------------------------------------------
//
CVoipXmlParamHandler* CVoipXmlParamHandler::NewL()
    {
    CVoipXmlParamHandler* self = CVoipXmlParamHandler::NewLC();
    CleanupStack::Pop( self );
    return self;
    }

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

// ---------------------------------------------------------------------------
// Destructor.
// ---------------------------------------------------------------------------
//
CVoipXmlParamHandler::~CVoipXmlParamHandler()
    {
    delete iSipHandler;
    delete iVoipHandler;
    delete iXdmHandler;
    delete iPresenceHandler;
    delete iNatFwHandler;
    delete iIapHandler;
    }

// ---------------------------------------------------------------------------
// Marks the currently deployed settings.
// ---------------------------------------------------------------------------
//
void CVoipXmlParamHandler::SettingsStart( const TDesC& aType )
    {
    TBuf<KMaxNodeNameLength> type( KNullDesC );
    type.Copy( aType );
    type.LowerCase();
    iPreviousSettingsType = iSettingsType;
    if ( KSettingsTypeVoip() == type )
        {
        iSettingsType = EVoip;
        }
    else if ( KSettingsTypeSip() == type )
        {
        iSettingsType = ESip;
        }
    else if ( KSettingsTypePresence() == type )
        {
        iSettingsType = EPresence;
        }
    else if ( KSettingsTypeXdm() == type )
        {
        iSettingsType = EXdm;
        }
    else if ( KSettingsTypeNatFw() == type )
        {
        iSettingsType = ENatFw;
        }
    else if ( KSettingsTypeCodec() == type )
        {
        iSettingsType = ECodec;
        }
    else if ( KSettingsTypeVmbx() == type )
        {
        iSettingsType = EVmbx;
        }
    else if ( KSettingsTypeProxy() == type )
        {
        iSettingsType = EProxy;
        }
    else if ( KSettingsTypeRegistrar() == type )
        {
        iSettingsType = ERegistrar;
        }
    else if ( KSettingsTypeAdditionalStun() == type )
        {
        iSettingsType = EAdditionalStun;
        }
    else if ( KSettingsTypeWlan() == type )
        {
        iSettingsType = EWlan;
        }
    else if ( KSettingsTypeWepKey() == type )
        {
        iSettingsType = EWepKey;
        }
    else if ( KSettingsTypeDestination() == type )
        {
        iSettingsType = EDestination;
        }
    else
        {
        iSettingsType = EUnknown;
        }
    }

// ---------------------------------------------------------------------------
// Marks the currently deployed settings as 'ready', i.e. sets current
// settings type to previous one and informs settings handlers.
// ---------------------------------------------------------------------------
//
void CVoipXmlParamHandler::SettingsEnd()
    {
    iVoipHandler->SettingsEnd( iSettingsType );
    iNatFwHandler->SettingsEnd( iSettingsType );
    iIapHandler->SettingsEnd( iSettingsType );
    iSettingsType = iPreviousSettingsType;
    iPreviousSettingsType = EUnknown;
    }

// ---------------------------------------------------------------------------
// Handles XML parameters, i.e. converts parameter names to enum and sets
// the values to setting handlers.
// ---------------------------------------------------------------------------
//
void CVoipXmlParamHandler::HandleParameter( const TDesC& aParam, 
    const TDesC& aValue )
    {
    switch ( iSettingsType )
        {
        case EVoip:
        case EVmbx:
        case ECodec:
            {
            TInt param = ConvertParameter( aParam );
            iVoipHandler->SetSetting( iSettingsType, param, aValue );
            }
            break;
        case ESip:
        case EProxy:
        case ERegistrar:
            {
            TInt param = ConvertParameter( aParam );
            TBuf8<KMaxNodeValueLength> value;
            value.Copy( aValue );
            iSipHandler->SetSetting( iSettingsType, param, value );
            }
            break;
        case EPresence:
            {
            TInt param = ConvertParameter( aParam );
            iPresenceHandler->SetSetting( param, aValue );
            }
            break;
        case EXdm:
            {
            TInt param = ConvertParameter( aParam );
            iXdmHandler->SetSetting( param, aValue );
            }
            break;
        case ENatFw:
        case EAdditionalStun:
            {
            TInt param = ConvertParameter( aParam );
            TBuf8<KMaxNodeValueLength> value;
            value.Copy( aValue );
            iNatFwHandler->SetSetting( iSettingsType, param, value );
            }
            break;
        case EWlan:
        case EWepKey:
        case EDestination:
            {
            TInt param = ConvertParameter( aParam );
            iIapHandler->SetSetting( iSettingsType, param, aValue );
            }
            break;
        default:
            break;
        }
    }

// ---------------------------------------------------------------------------
// Stores settings, i.e. sends store commands to settings handlers.
// ---------------------------------------------------------------------------
//
TInt CVoipXmlParamHandler::StoreSettings()
    {
    // First send 'basic' store commands.
    TInt err( KErrNone );
    err = iSipHandler->StoreSettings();
    if ( KErrNone != err )
        {
        return err;
        }
    err = iVoipHandler->StoreSettings();
    if ( KErrNone != err )
        {
        return err;
        }
    err = iXdmHandler->StoreSettings();
    // If there were no settings, ignore error code.
    if ( KErrNotSupported == err )
        {
        err = KErrNone;
        }
    err = iPresenceHandler->StoreSettings();
    // If there were no settings, ignore error code.
    if ( KErrNotSupported == err )
        {
        err = KErrNone;
        }

    err = iNatFwHandler->StoreSettings();
    // If there were no settings, ignore error code.
    if ( KErrNotSupported == err )
        {
        err = KErrNone;
        }

    err = iIapHandler->StoreSettings();
    // If there were no settings, ignore error code.
    if ( KErrNotSupported == err )
        {
        err = KErrNone;
        }

    // Send linkage information.
    iSipHandler->LinkSettings( EDestination, iIapHandler->SettingsId() );
    iVoipHandler->LinkSettings( ESip, iSipHandler->SettingsId() );
    iVoipHandler->LinkSettings( EPresence, iPresenceHandler->SettingsId() );
    iVoipHandler->LinkSettings( EDestination, iIapHandler->SettingsId() );
    iPresenceHandler->LinkSettings( ESip, iSipHandler->SettingsId() );
    iPresenceHandler->LinkSettings( EXdm, iXdmHandler->SettingsId() );

    // Send finalizing commands.
    iSipHandler->FinalizeSettings(); // Ignore error code.
    err = iVoipHandler->FinalizeSettings();
    iPresenceHandler->FinalizeSettings(); // Ignore error code.
    return err;
    }

// ---------------------------------------------------------------------------
// Returns the VoIP service ID.
// ---------------------------------------------------------------------------
//
TUint32 CVoipXmlParamHandler::ServiceTabId()
    {
    TUint32 tabId( KErrNone );
    TRAP_IGNORE( tabId = iVoipHandler->ServiceTabIdL() );
    return tabId;
    }

// ---------------------------------------------------------------------------
// Converts parameter name to enumerated parameter.
// ---------------------------------------------------------------------------
//
TInt CVoipXmlParamHandler::ConvertParameter( const TDesC& aParam )
    {
    TBuf<KMaxNodeNameLength> name( KNullDesC );
    name.Copy( aParam );
    name.LowerCase();
    // ==============================
    // Generic parameters.
    // ==============================
    //
    if ( KParamValueName() == name )
        {
        return EName;
        }
    else if ( KParamValueUri() == name )
        {
        return EUri;
        }
    else if ( KParamValueTransport() == name )
        {
        return ETransport;
        }
    else if ( KParamValuePort() == name )
        {
        return EPort;
        }
    else if ( KParamValueUsername() == name )
        {
        return EUsername;
        }
    else if ( KParamValuePassword() == name )
        {
        return EPassword;
        }
    else if ( KParamValueType() == name )
        {
        return EType;
        }
    else if ( KParamValueDomain() == name )
        {
        return EDomain;
        }
    else if ( KParamValueStartPort() == name )
        {
        return EStartPort;
        }
    else if ( KParamValueEndPort() == name )
        {
        return EEndPort;
        }
    // ==============================
    // VoIP 'core' parametes.
    // ==============================
    //
    else if ( KParamValueMediaQos() == name )
        {
        return EMediaQos;
        }
    else if ( KParamValueDtmfInband() == name )
        {
        return EDtmfInband;
        }
    else if ( KParamValueDtmfOutband() == name )
        {
        return EDtmfOutband;
        }
    else if ( KParamValueSecureCallPref() == name )
        {
        return ESecureCallPreference;
        }
    else if ( KParamValueVoipOverWcdma() == name )
        {
        return EAllowVoipOverWcdma;
        }
    else if ( KParamValueRtcp() == name )
        {
        return ERtcp;
        }
    else if ( KParamValueUserAgentTerminalType() == name )
        {
        return EUserAgentHeaderTerminalType;
        }
    else if ( KParamValueUserAgentWlanMac() == name )
        {
        return EUserAgentHeaderWlanMac;
        }
    else if ( KParamValueUserAgentFreeString() == name )
        {
        return EUserAgentHeaderFreeString;
        }
    else if ( KParamValueCallerIdDigits() == name )
        {
        return ECallerIdDigits;
        }
    else if ( KParamValueIgnoreDomainPart() == name )
        {
        return EIgnoreDomainPart;
        }
    else if ( KParamValueAutoAcceptBuddyRequests() == name )
        {
        return EAutoAcceptBuddyRequests;
        }
    else if ( KParamValueAddUserPhone() == name )
        {
        return EAddUserPhone;
        }
    else if ( KParamValueProviderUrl() == name )
        {
        return EProviderUrl;
        }
    else if ( KParamValueMinSessionInterval() == name )
        {
        return EMinSessionInterval;
        }
    else if ( KParamValueSessionInterval() == name )
        {
        return ESessionInterval;
        }
    else if ( KParamValueBrandingUri() == name )
        {
        return EBrandingUri;
        }
    else if ( KParamValueAutoEnable() == name )
        {
        return EAutoEnable;
        }
    else if ( KParamValueEnableSipIm() == name )
        {
        return EEnableSipIm;
        }
    else if ( KParamValueBrandId() == name )
        {
        return EBrandId;
        }
    // ==============================
    // VoIP voicemailbox parameters.
    // ==============================
    //
    else if ( KParamValueMwiUri() == name )
        {
        return EMwiUri;
        }
    else if ( KParamValueListeningUri() == name )
        {
        return EListeningUri;
        }
    else if ( KParamValueReSubscribeInterval() == name )
        {
        return EReSubscribeInterval;
        }
    // ==============================
    // VoIP codec parameters.
    // ==============================
    //
    else if ( KParamValueJitterBuffer() == name )
        {
        return EJitterBuffer;
        }
    else if ( KParamValueOctetAlign() == name )
        {
        return EOctetAlign;
        }
    else if ( KParamValuePTime() == name )
        {
        return EPTime;
        }
    else if ( KParamValueMaxPTime() == name )
        {
        return EMaxPTime;
        }
    else if ( KParamValueModeSet() == name )
        {
        return EModeSet;
        }
    else if ( KParamValueModeChangePeriod() == name )
        {
        return EModeChangePeriod;
        }
    else if ( KParamValueModeChangeNeighbor() == name )
        {
        return EModeChangeNeighbor;
        }
    else if ( KParamValueMaxRed() == name )
        {
        return EMaxRed;
        }
    else if ( KParamValueVad() == name )
        {
        return EVad;
        }
    else if ( KParamValueAnnexB() == name )
        {
        return EAnnexb;
        }
    // ==============================
    // SIP parameters.
    // ==============================
    //
    else if ( KParamValueSignalingQos() == name )
        {
        return ESignalingQos;
        }
    else if ( KParamValuePublicUserId() == name )
        {
        return EPublicUserId;
        }
    else if ( KParamValueSignalCompression() == name )
        {
        return ESignalCompression;
        }
    else if ( KParamValueSecurityNegotiation() == name )
        {
        return ESecurityNegotiation;
        }
    else if ( KParamValueProfileLock() == name )
        {
        return EProfileLock;
        }
    else if ( KParamValueAutoRegistration() == name )
        {
        return EAutoRegistration;
        }
    else if ( KParamValueLooseRouting() == name )
        {
        return ELooseRouting;
        }
    // ==============================
    // Presence parameters.
    // ==============================
    //
    else if ( KParamValueMaxObjectSize() == name )
        {
        return EMaxObjectSize;
        }
    else if ( KParamValuePublishInterval() == name )
        {
        return EPublishInterval;
        }
    else if ( KParamValueMaxSubscriptions() == name )
        {
        return EMaxSubscriptions;
        }
    else if ( KParamValueMaxContacts() == name )
        {
        return EMaxContacts;
        }
    else if ( KParamValueDomainSyntax() == name )
        {
        return EDomainSyntax;
        }
    // ==============================
    // NAT/Firewall parameters.
    // ==============================
    //
    else if ( KParamValueTcpRefreshInterval() == name )
        {
        return ETcpRefreshInterval;
        }
    else if ( KParamValueUdpRefreshInterval() == name )
        {
        return EUdpRefreshInterval;
        }
    else if ( KParamValueCrlfRefresh() == name )
        {
        return ECrlfRefresh;
        }
    else if ( KParamValueStunSharedSecret() == name )
        {
        return EStunSharedSecret;
        }
    // ==============================
    // WLAN IAP parameters.
    // ==============================
    //
    else if ( KParamSsid() == name )
        {
        return ESsid;
        }
    else if ( KParamHidden() == name )
        {
        return EHidden;
        }
    else if ( KParamNetworkMode() == name )
        {
        return ENetworkMode;
        }
    else if ( KParamPreSharedKey() == name )
        {
        return EPreSharedKey;
        }
    else if ( KParamWepAuthMode() == name )
        {
        return EWepAuthMode;
        }
    else if ( KParamLength() == name )
        {
        return ELength;
        }
    else if ( KParamData() == name )
        {
        return EData;
        }
    // ==============================
    // Not supported.
    // ==============================
    //
    else
        {
        return EUnSupported;
        }
    }

// End of file.