/*
* Copyright (c) 2008 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:  
*
*/



#ifndef __CREATORCONNECTIONSETTINGS_H__
#define __CREATORCONNECTIONSETTINGS_H__

#include "creator_model.h"
#include "creator_modulebase.h"
#include "creator_connectionmethodbase.h"

#include <e32base.h>
#include <commdb.h>
#include <msvapi.h>
#include <mtclreg.h>
#include <mmsclient.h>

#include <cmconnectionmethoddef.h>
#include <cmmanagerext.h>
#include <cmpluginwlandef.h>
using namespace CMManager;

#include <etelpckt.h>//ETel Packet API needed for enums

class CCreatorEngine;
class CConnectionSettingsParameters;

class CCreatorConnectionSettings : public CCreatorConnectionSettingsBase, public MMsvSessionObserver
    {
public: 
    static CCreatorConnectionSettings* NewL(CCreatorEngine* aEngine);
    static CCreatorConnectionSettings* NewLC(CCreatorEngine* aEngine);
    ~CCreatorConnectionSettings();

private:
    CCreatorConnectionSettings();
    void ConstructL(CCreatorEngine* aEngine); // from MCreatorModuleBase

    void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3); // from MMsvSessionObserver
        
public:
    TBool AskDataFromUserL(TInt aCommand, TInt& aNumberOfEntries); // from MCreatorModuleBase
    
    TInt CreateConnectionSettingsEntryL(CCreatorModuleBaseParameters *aParameters);    
    TUint32 AccessPointNameToIdL(const TDesC& aAPName, TBool aAnyIfNotFound = EFalse );
    
    //Setting default connection method, if not set
    void SetDefaultCML(RCmConnectionMethodExt conMethod);
    //Set random parameters
    void SetRandomParametersL(CConnectionSettingsParameters& parameters);
    void SetRandomBearerTypeL(CConnectionSettingsParameters& parameters);
    void DeleteAllL();
    void DeleteAllCreatedByCreatorL();
private:
    void DeleteAllDestinationsL( TBool aOnlyCreatedWithCreator );
private:
    CCommsDatabase* iCommsDb;
    
    RCmManagerExt iCmManagerExt;

    CConnectionSettingsParameters* iParameters;
    
    RArray<TUint32> iEntryIds; // TUint32 RCmDestinationExt::Id()

public:
    };

   
class CConnectionSettingsParameters : public CCreatorModuleBaseParameters
    {
public: 
    HBufC*          iConnectionName; // connection name
    TUint           iBearerType; // bearer type
    HBufC*          iStartPage; // start page
    TWapWSPOption   iWapWspOption; // Indicating whether connection-oriented  or connectionless API should be used.
    
    RPacketContext::TProtocolType iProtocolType; //Type of protocol EPdpTypeIPv4 or EPdpTypeIPv4
    
    HBufC*          iLoginName; // username
    TBool           iSecureAuthentication; // password authentication
    HBufC*          iLoginPass; // password
    TBool           iPromptPassword; // prompt password
    HBufC*          iGatewayAddress; // gateway address
    HBufC*          iSubnetMask;  // subnet mask
    HBufC*          iIPAddr; // phone IP
    HBufC*          iIP4NameServer1;  // primary name server
    HBufC*          iIP4NameServer2;  // secondary name server
    HBufC*          iDefaultTelNumber; // datacall number
    TUint32         iBearerCallTypeIsdn; // datacall type
    TUint32         iBearerSpeed;  // max connection speed
    TBool           iUseProxy; //Use proxy or not
    HBufC*          iProxyServerAddress;  // proxy address
    TUint32         iProxyPortNumber; // proxy number
    HBufC*          iWLANName;//WLAN network name
    HBufC*          iWlanIpAddr;//IP address of EPOC.
    TWlanSecMode    iWLanSecMode;//WLAN security modes
    TWlanNetMode    iWlanNetMode;//WLAN connection mode. Ad-hoc or infrastructure.

    HBufC*          iIP6NameServer1;  // primary name server for IP v6
    HBufC*          iIP6NameServer2;  // secondary name server for IP v6
    TBool           iDisableTextAuth; // Disable plaintext authentication 
    
    CCreatorEngine* iEngine;
    
public:
    CConnectionSettingsParameters();
    ~CConnectionSettingsParameters();   
    
    void SetRandomCMNameL(CCreatorEngine& aEngine);
    void SetRandomWLANNameL(CCreatorEngine& aEngine);
    void SetRandomWLANNetModeL(CCreatorEngine& aEngine);
    void SetRandomWLANSecurityModeL(CCreatorEngine& aEngine);
    void SetRandomLoginNameL(CCreatorEngine& aEngine);
    void SetRandomLoginPassL(CCreatorEngine& aEngine);
    void SetRandomSecureAuthenticationL(CCreatorEngine& aEngine);
    void SetRandomPromptPasswordL(CCreatorEngine& aEngine);
    void SetRandomUseProxyL(CCreatorEngine& aEngine);
    void SetRandomProxyAddressL(CCreatorEngine& aEngine);
    void SetRandomProxyPortL(CCreatorEngine& aEngine);
    void SetRandomStartPageL(CCreatorEngine& aEngine);
    void SetRandomIPAddressL(CCreatorEngine& aEngine);
    void SetRandomIP4NameServer1L(CCreatorEngine& aEngine);
    void SetRandomIP4NameServer2L(CCreatorEngine& aEngine);
    void SetRandomProtocolTypeL(CCreatorEngine& aEngine);
    void SetRandomTelephoneNumberL(CCreatorEngine& aEngine);
    void SetRandomBearerTypeIsdnL(CCreatorEngine& aEngine);
    void SetRandomBearerSpeedL(CCreatorEngine& aEngine);
    void SetRandomWapWspOptionL(CCreatorEngine& aEngine);
    void SetRandomSubnetMaskL(CCreatorEngine& aEngine);
    void SetRandomGatewayAddressL(CCreatorEngine& aEngine);
    void SetRandomWlanIpAddrL(CCreatorEngine& aEngine);
    void SetRandomIPv6NameServer1L(CCreatorEngine& aEngine);
    void SetRandomIPv6NameServer2L(CCreatorEngine& aEngine);
    void SetRandomDisableTextAuthL(CCreatorEngine& aEngine);
    };



#endif // __CREATORCONNECTIONSETTINGS_H__
