voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlparamhandler.cpp
branchRCL_3
changeset 21 f742655b05bf
parent 20 65a3ef1d5bd0
child 22 d38647835c2e
equal deleted inserted replaced
20:65a3ef1d5bd0 21:f742655b05bf
     1 /*
       
     2 * Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  VoIP settings XML parameter handler.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include "voipxmlparamhandler.h"
       
    20 #include "voipxmlsiphandler.h"
       
    21 #include "voipxmlvoiphandler.h"
       
    22 #include "voipxmlxdmhandler.h"
       
    23 #include "voipxmlpresencehandler.h"
       
    24 #include "voipxmlnatfwhandler.h"
       
    25 #include "voipxmliaphandler.h"
       
    26 #include "voipxmlprocessordefaults.h"
       
    27 
       
    28 // ---------------------------------------------------------------------------
       
    29 // Default constructor.
       
    30 // ---------------------------------------------------------------------------
       
    31 //
       
    32 CVoipXmlParamHandler::CVoipXmlParamHandler()
       
    33     {
       
    34     }
       
    35 
       
    36 // ---------------------------------------------------------------------------
       
    37 // ConstructL
       
    38 // ---------------------------------------------------------------------------
       
    39 //
       
    40 void CVoipXmlParamHandler::ConstructL()
       
    41     {
       
    42     iSettingsType         = EUnknown;
       
    43     iPreviousSettingsType = EUnknown;
       
    44     iSipHandler      = CVoipXmlSipHandler::NewL();
       
    45     iVoipHandler     = CVoipXmlVoipHandler::NewL();
       
    46     iXdmHandler      = CVoipXmlXdmHandler::NewL();
       
    47     iPresenceHandler = CVoipXmlPresenceHandler::NewL();
       
    48     iNatFwHandler    = CVoipXmlNatFwHandler::NewL();
       
    49     iIapHandler      = CVoipXmlIapHandler::NewL();
       
    50     }
       
    51 
       
    52 // ---------------------------------------------------------------------------
       
    53 // NewL
       
    54 // ---------------------------------------------------------------------------
       
    55 //
       
    56 CVoipXmlParamHandler* CVoipXmlParamHandler::NewL()
       
    57     {
       
    58     CVoipXmlParamHandler* self = CVoipXmlParamHandler::NewLC();
       
    59     CleanupStack::Pop( self );
       
    60     return self;
       
    61     }
       
    62 
       
    63 // ---------------------------------------------------------------------------
       
    64 // NewLC
       
    65 // ---------------------------------------------------------------------------
       
    66 //
       
    67 CVoipXmlParamHandler* CVoipXmlParamHandler::NewLC()
       
    68     {
       
    69     CVoipXmlParamHandler* self = new( ELeave ) CVoipXmlParamHandler;
       
    70     CleanupStack::PushL( self );
       
    71     self->ConstructL();
       
    72     return self;
       
    73     }
       
    74 
       
    75 // ---------------------------------------------------------------------------
       
    76 // Destructor.
       
    77 // ---------------------------------------------------------------------------
       
    78 //
       
    79 CVoipXmlParamHandler::~CVoipXmlParamHandler()
       
    80     {
       
    81     delete iSipHandler;
       
    82     delete iVoipHandler;
       
    83     delete iXdmHandler;
       
    84     delete iPresenceHandler;
       
    85     delete iNatFwHandler;
       
    86     delete iIapHandler;
       
    87     }
       
    88 
       
    89 // ---------------------------------------------------------------------------
       
    90 // Marks the currently deployed settings.
       
    91 // ---------------------------------------------------------------------------
       
    92 //
       
    93 void CVoipXmlParamHandler::SettingsStart( const TDesC& aType )
       
    94     {
       
    95     TBuf<KMaxNodeNameLength> type( KNullDesC );
       
    96     type.Copy( aType );
       
    97     type.LowerCase();
       
    98     iPreviousSettingsType = iSettingsType;
       
    99     if ( KSettingsTypeVoip() == type )
       
   100         {
       
   101         iSettingsType = EVoip;
       
   102         }
       
   103     else if ( KSettingsTypeSip() == type )
       
   104         {
       
   105         iSettingsType = ESip;
       
   106         }
       
   107     else if ( KSettingsTypePresence() == type )
       
   108         {
       
   109         iSettingsType = EPresence;
       
   110         }
       
   111     else if ( KSettingsTypeXdm() == type )
       
   112         {
       
   113         iSettingsType = EXdm;
       
   114         }
       
   115     else if ( KSettingsTypeNatFw() == type )
       
   116         {
       
   117         iSettingsType = ENatFw;
       
   118         }
       
   119     else if ( KSettingsTypeCodec() == type )
       
   120         {
       
   121         iSettingsType = ECodec;
       
   122         }
       
   123     else if ( KSettingsTypeVmbx() == type )
       
   124         {
       
   125         iSettingsType = EVmbx;
       
   126         }
       
   127     else if ( KSettingsTypeProxy() == type )
       
   128         {
       
   129         iSettingsType = EProxy;
       
   130         }
       
   131     else if ( KSettingsTypeRegistrar() == type )
       
   132         {
       
   133         iSettingsType = ERegistrar;
       
   134         }
       
   135     else if ( KSettingsTypeAdditionalStun() == type )
       
   136         {
       
   137         iSettingsType = EAdditionalStun;
       
   138         }
       
   139     else if ( KSettingsTypeWlan() == type )
       
   140         {
       
   141         iSettingsType = EWlan;
       
   142         }
       
   143     else if ( KSettingsTypeWepKey() == type )
       
   144         {
       
   145         iSettingsType = EWepKey;
       
   146         }
       
   147     else if ( KSettingsTypeDestination() == type )
       
   148         {
       
   149         iSettingsType = EDestination;
       
   150         }
       
   151     else if ( KSettingsTypeEap() == type )
       
   152         {
       
   153         iSettingsType = EEap;
       
   154         }
       
   155     else
       
   156         {
       
   157         iSettingsType = EUnknown;
       
   158         }
       
   159     }
       
   160 
       
   161 // ---------------------------------------------------------------------------
       
   162 // Marks the currently deployed settings as 'ready', i.e. sets current
       
   163 // settings type to previous one and informs settings handlers.
       
   164 // ---------------------------------------------------------------------------
       
   165 //
       
   166 void CVoipXmlParamHandler::SettingsEnd()
       
   167     {
       
   168     iVoipHandler->SettingsEnd( iSettingsType );
       
   169     iNatFwHandler->SettingsEnd( iSettingsType );
       
   170     iIapHandler->SettingsEnd( iSettingsType );
       
   171     iSettingsType = iPreviousSettingsType;
       
   172     iPreviousSettingsType = EUnknown;
       
   173     }
       
   174 
       
   175 // ---------------------------------------------------------------------------
       
   176 // Handles XML parameters, i.e. converts parameter names to enum and sets
       
   177 // the values to setting handlers.
       
   178 // ---------------------------------------------------------------------------
       
   179 //
       
   180 void CVoipXmlParamHandler::HandleParameter( const TDesC& aParam, 
       
   181     const TDesC& aValue )
       
   182     {
       
   183     switch ( iSettingsType )
       
   184         {
       
   185         case EVoip:
       
   186         case EVmbx:
       
   187         case ECodec:
       
   188             {
       
   189             TInt param = ConvertParameter( aParam );
       
   190             iVoipHandler->SetSetting( iSettingsType, param, aValue );
       
   191             }
       
   192             break;
       
   193         case ESip:
       
   194         case EProxy:
       
   195         case ERegistrar:
       
   196             {
       
   197             TInt param = ConvertParameter( aParam );
       
   198             TBuf8<KMaxNodeValueLength> value;
       
   199             value.Copy( aValue );
       
   200             iSipHandler->SetSetting( iSettingsType, param, value );
       
   201             }
       
   202             break;
       
   203         case EPresence:
       
   204             {
       
   205             TInt param = ConvertParameter( aParam );
       
   206             iPresenceHandler->SetSetting( param, aValue );
       
   207             }
       
   208             break;
       
   209         case EXdm:
       
   210             {
       
   211             TInt param = ConvertParameter( aParam );
       
   212             iXdmHandler->SetSetting( param, aValue );
       
   213             }
       
   214             break;
       
   215         case ENatFw:
       
   216         case EAdditionalStun:
       
   217             {
       
   218             TInt param = ConvertParameter( aParam );
       
   219             TBuf8<KMaxNodeValueLength> value;
       
   220             value.Copy( aValue );
       
   221             iNatFwHandler->SetSetting( iSettingsType, param, value );
       
   222             }
       
   223             break;
       
   224         case EWlan:
       
   225         case EWepKey:
       
   226         case EDestination:
       
   227         case EEap:
       
   228             {
       
   229             TInt param = ConvertParameter( aParam );
       
   230             iIapHandler->SetSetting( iSettingsType, param, aValue );
       
   231             }
       
   232             break;
       
   233         default:
       
   234             break;
       
   235         }
       
   236     }
       
   237 
       
   238 // ---------------------------------------------------------------------------
       
   239 // Stores settings, i.e. sends store commands to settings handlers.
       
   240 // ---------------------------------------------------------------------------
       
   241 //
       
   242 TInt CVoipXmlParamHandler::StoreSettings()
       
   243     {
       
   244     // First send 'basic' store commands.
       
   245     TInt err( KErrNone );
       
   246     err = iSipHandler->StoreSettings();
       
   247     if ( KErrNone != err )
       
   248         {
       
   249         return err;
       
   250         }
       
   251     err = iVoipHandler->StoreSettings();
       
   252     if ( KErrNone != err )
       
   253         {
       
   254         return err;
       
   255         }
       
   256     err = iXdmHandler->StoreSettings();
       
   257     // If there were no settings, ignore error code.
       
   258     if ( KErrNotSupported == err )
       
   259         {
       
   260         err = KErrNone;
       
   261         }
       
   262     err = iPresenceHandler->StoreSettings();
       
   263     // If there were no settings, ignore error code.
       
   264     if ( KErrNotSupported == err )
       
   265         {
       
   266         err = KErrNone;
       
   267         }
       
   268 
       
   269     err = iNatFwHandler->StoreSettings();
       
   270     // If there were no settings, ignore error code.
       
   271     if ( KErrNotSupported == err )
       
   272         {
       
   273         err = KErrNone;
       
   274         }
       
   275 
       
   276     err = iIapHandler->StoreSettings();
       
   277     // If there were no settings, ignore error code.
       
   278     if ( KErrNotSupported == err )
       
   279         {
       
   280         err = KErrNone;
       
   281         }
       
   282 
       
   283     // Send linkage information.
       
   284     iSipHandler->LinkSettings( EDestination, iIapHandler->SettingsId() );
       
   285     iVoipHandler->LinkSettings( ESip, iSipHandler->SettingsId() );
       
   286     iVoipHandler->LinkSettings( EPresence, iPresenceHandler->SettingsId() );
       
   287     iVoipHandler->LinkSettings( EDestination, iIapHandler->SettingsId() );
       
   288     iPresenceHandler->LinkSettings( ESip, iSipHandler->SettingsId() );
       
   289     iPresenceHandler->LinkSettings( EXdm, iXdmHandler->SettingsId() );
       
   290 
       
   291     // Send finalizing commands.
       
   292     iSipHandler->FinalizeSettings(); // Ignore error code.
       
   293     err = iVoipHandler->FinalizeSettings();
       
   294     iPresenceHandler->FinalizeSettings(); // Ignore error code.
       
   295     return err;
       
   296     }
       
   297 
       
   298 // ---------------------------------------------------------------------------
       
   299 // Returns the VoIP service ID.
       
   300 // ---------------------------------------------------------------------------
       
   301 //
       
   302 TUint32 CVoipXmlParamHandler::ServiceTabId()
       
   303     {
       
   304     TUint32 tabId( KErrNone );
       
   305     TRAP_IGNORE( tabId = iVoipHandler->ServiceTabIdL() );
       
   306     return tabId;
       
   307     }
       
   308 
       
   309 // ---------------------------------------------------------------------------
       
   310 // Converts parameter name to enumerated parameter.
       
   311 // ---------------------------------------------------------------------------
       
   312 //
       
   313 TInt CVoipXmlParamHandler::ConvertParameter( const TDesC& aParam )
       
   314     {
       
   315     TBuf<KMaxNodeNameLength> name( KNullDesC );
       
   316     name.Copy( aParam );
       
   317     name.LowerCase();
       
   318     // ==============================
       
   319     // Generic parameters.
       
   320     // ==============================
       
   321     //
       
   322     if ( KParamValueName() == name )
       
   323         {
       
   324         return EName;
       
   325         }
       
   326     else if ( KParamValueUri() == name )
       
   327         {
       
   328         return EUri;
       
   329         }
       
   330     else if ( KParamValueTransport() == name )
       
   331         {
       
   332         return ETransport;
       
   333         }
       
   334     else if ( KParamValuePort() == name )
       
   335         {
       
   336         return EPort;
       
   337         }
       
   338     else if ( KParamValueUsername() == name )
       
   339         {
       
   340         return EUsername;
       
   341         }
       
   342     else if ( KParamValuePassword() == name )
       
   343         {
       
   344         return EPassword;
       
   345         }
       
   346     else if ( KParamValueType() == name )
       
   347         {
       
   348         return EType;
       
   349         }
       
   350     else if ( KParamValueDomain() == name )
       
   351         {
       
   352         return EDomain;
       
   353         }
       
   354     else if ( KParamValueStartPort() == name )
       
   355         {
       
   356         return EStartPort;
       
   357         }
       
   358     else if ( KParamValueEndPort() == name )
       
   359         {
       
   360         return EEndPort;
       
   361         }
       
   362     // ==============================
       
   363     // VoIP 'core' parametes.
       
   364     // ==============================
       
   365     //
       
   366     else if ( KParamValueMediaQos() == name )
       
   367         {
       
   368         return EMediaQos;
       
   369         }
       
   370     else if ( KParamValueDtmfInband() == name )
       
   371         {
       
   372         return EDtmfInband;
       
   373         }
       
   374     else if ( KParamValueDtmfOutband() == name )
       
   375         {
       
   376         return EDtmfOutband;
       
   377         }
       
   378     else if ( KParamValueSecureCallPref() == name )
       
   379         {
       
   380         return ESecureCallPreference;
       
   381         }
       
   382     else if ( KParamValueVoipOverWcdma() == name )
       
   383         {
       
   384         return EAllowVoipOverWcdma;
       
   385         }
       
   386     else if ( KParamValueRtcp() == name )
       
   387         {
       
   388         return ERtcp;
       
   389         }
       
   390     else if ( KParamValueUserAgentTerminalType() == name )
       
   391         {
       
   392         return EUserAgentHeaderTerminalType;
       
   393         }
       
   394     else if ( KParamValueUserAgentWlanMac() == name )
       
   395         {
       
   396         return EUserAgentHeaderWlanMac;
       
   397         }
       
   398     else if ( KParamValueUserAgentFreeString() == name )
       
   399         {
       
   400         return EUserAgentHeaderFreeString;
       
   401         }
       
   402     else if ( KParamValueCallerIdDigits() == name )
       
   403         {
       
   404         return ECallerIdDigits;
       
   405         }
       
   406     else if ( KParamValueIgnoreDomainPart() == name )
       
   407         {
       
   408         return EIgnoreDomainPart;
       
   409         }
       
   410     else if ( KParamValueAutoAcceptBuddyRequests() == name )
       
   411         {
       
   412         return EAutoAcceptBuddyRequests;
       
   413         }
       
   414     else if ( KParamValueAddUserPhone() == name )
       
   415         {
       
   416         return EAddUserPhone;
       
   417         }
       
   418     else if ( KParamValueProviderUrl() == name )
       
   419         {
       
   420         return EProviderUrl;
       
   421         }
       
   422     else if ( KParamValueMinSessionInterval() == name )
       
   423         {
       
   424         return EMinSessionInterval;
       
   425         }
       
   426     else if ( KParamValueSessionInterval() == name )
       
   427         {
       
   428         return ESessionInterval;
       
   429         }
       
   430     else if ( KParamValueBrandingUri() == name )
       
   431         {
       
   432         return EBrandingUri;
       
   433         }
       
   434     else if ( KParamValueAutoEnable() == name )
       
   435         {
       
   436         return EAutoEnable;
       
   437         }
       
   438     else if ( KParamValueEnableSipIm() == name )
       
   439         {
       
   440         return EEnableSipIm;
       
   441         }
       
   442     else if ( KParamValueBrandId() == name )
       
   443         {
       
   444         return EBrandId;
       
   445         }
       
   446     else if ( KParamValueDefault() == name )
       
   447         {
       
   448         return EDefault;
       
   449         }
       
   450     // ==============================
       
   451     // VoIP voicemailbox parameters.
       
   452     // ==============================
       
   453     //
       
   454     else if ( KParamValueMwiUri() == name )
       
   455         {
       
   456         return EMwiUri;
       
   457         }
       
   458     else if ( KParamValueListeningUri() == name )
       
   459         {
       
   460         return EListeningUri;
       
   461         }
       
   462     else if ( KParamValueReSubscribeInterval() == name )
       
   463         {
       
   464         return EReSubscribeInterval;
       
   465         }
       
   466     // ==============================
       
   467     // VoIP codec parameters.
       
   468     // ==============================
       
   469     //
       
   470     else if ( KParamValueJitterBuffer() == name )
       
   471         {
       
   472         return EJitterBuffer;
       
   473         }
       
   474     else if ( KParamValueOctetAlign() == name )
       
   475         {
       
   476         return EOctetAlign;
       
   477         }
       
   478     else if ( KParamValuePTime() == name )
       
   479         {
       
   480         return EPTime;
       
   481         }
       
   482     else if ( KParamValueMaxPTime() == name )
       
   483         {
       
   484         return EMaxPTime;
       
   485         }
       
   486     else if ( KParamValueModeSet() == name )
       
   487         {
       
   488         return EModeSet;
       
   489         }
       
   490     else if ( KParamValueModeChangePeriod() == name )
       
   491         {
       
   492         return EModeChangePeriod;
       
   493         }
       
   494     else if ( KParamValueModeChangeNeighbor() == name )
       
   495         {
       
   496         return EModeChangeNeighbor;
       
   497         }
       
   498     else if ( KParamValueMaxRed() == name )
       
   499         {
       
   500         return EMaxRed;
       
   501         }
       
   502     else if ( KParamValueVad() == name )
       
   503         {
       
   504         return EVad;
       
   505         }
       
   506     else if ( KParamValueAnnexB() == name )
       
   507         {
       
   508         return EAnnexb;
       
   509         }
       
   510     // ==============================
       
   511     // SIP parameters.
       
   512     // ==============================
       
   513     //
       
   514     else if ( KParamValueSignalingQos() == name )
       
   515         {
       
   516         return ESignalingQos;
       
   517         }
       
   518     else if ( KParamValuePublicUserId() == name )
       
   519         {
       
   520         return EPublicUserId;
       
   521         }
       
   522     else if ( KParamValueSignalCompression() == name )
       
   523         {
       
   524         return ESignalCompression;
       
   525         }
       
   526     else if ( KParamValueSecurityNegotiation() == name )
       
   527         {
       
   528         return ESecurityNegotiation;
       
   529         }
       
   530     else if ( KParamValueProfileLock() == name )
       
   531         {
       
   532         return EProfileLock;
       
   533         }
       
   534     else if ( KParamValueAutoRegistration() == name )
       
   535         {
       
   536         return EAutoRegistration;
       
   537         }
       
   538     else if ( KParamValueLooseRouting() == name )
       
   539         {
       
   540         return ELooseRouting;
       
   541         }
       
   542     // ==============================
       
   543     // Presence parameters.
       
   544     // ==============================
       
   545     //
       
   546     else if ( KParamValueMaxObjectSize() == name )
       
   547         {
       
   548         return EMaxObjectSize;
       
   549         }
       
   550     else if ( KParamValuePublishInterval() == name )
       
   551         {
       
   552         return EPublishInterval;
       
   553         }
       
   554     else if ( KParamValueMaxSubscriptions() == name )
       
   555         {
       
   556         return EMaxSubscriptions;
       
   557         }
       
   558     else if ( KParamValueMaxContacts() == name )
       
   559         {
       
   560         return EMaxContacts;
       
   561         }
       
   562     else if ( KParamValueDomainSyntax() == name )
       
   563         {
       
   564         return EDomainSyntax;
       
   565         }
       
   566     // ==============================
       
   567     // NAT/Firewall parameters.
       
   568     // ==============================
       
   569     //
       
   570     else if ( KParamValueTcpRefreshInterval() == name )
       
   571         {
       
   572         return ETcpRefreshInterval;
       
   573         }
       
   574     else if ( KParamValueUdpRefreshInterval() == name )
       
   575         {
       
   576         return EUdpRefreshInterval;
       
   577         }
       
   578     else if ( KParamValueCrlfRefresh() == name )
       
   579         {
       
   580         return ECrlfRefresh;
       
   581         }
       
   582     else if ( KParamValueStunSharedSecret() == name )
       
   583         {
       
   584         return EStunSharedSecret;
       
   585         }
       
   586     // ==============================
       
   587     // WLAN IAP parameters.
       
   588     // ==============================
       
   589     //
       
   590     else if ( KParamSsid() == name )
       
   591         {
       
   592         return ESsid;
       
   593         }
       
   594     else if ( KParamHidden() == name )
       
   595         {
       
   596         return EHidden;
       
   597         }
       
   598     else if ( KParamNetworkMode() == name )
       
   599         {
       
   600         return ENetworkMode;
       
   601         }
       
   602     else if ( KParamPreSharedKey() == name )
       
   603         {
       
   604         return EPreSharedKey;
       
   605         }
       
   606     else if ( KParamWepAuthMode() == name )
       
   607         {
       
   608         return EWepAuthMode;
       
   609         }
       
   610     else if ( KParamLength() == name )
       
   611         {
       
   612         return ELength;
       
   613         }
       
   614     else if ( KParamData() == name )
       
   615         {
       
   616         return EData;
       
   617         }
       
   618     // ==============================
       
   619     // Not supported.
       
   620     // ==============================
       
   621     //
       
   622     else
       
   623         {
       
   624         return EUnSupported;
       
   625         }
       
   626     }
       
   627 
       
   628 // End of file.