diff -r 000000000000 -r 8e480a14352b messagingfw/biomsgfw/IACPSRC/gprsp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/biomsgfw/IACPSRC/gprsp.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,361 @@ +// Copyright (c) 1998-2009 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: +// Internet Service Provider Settings +// +// + +#include "BSP.H" +#include "IACP.H" +#include "gprsp.h" +#include "IACPDEF.H" +#include "IACPERR.H" + +//#include "t_tabdef.h" + + +#include + +_LIT(KGPRSDefaultIpAddress, "0.0.0.0"); + +CGprsParser::CGprsParser() + { + } + +CGprsParser* CGprsParser::NewLC() + { + CGprsParser* self=new (ELeave) CGprsParser(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CGprsParser* CGprsParser::NewL() + { + CGprsParser* self=CGprsParser::NewLC(); + CleanupStack::Pop(); + return self; + } + +void CGprsParser::ConstructL() + { + iLoginPrompt=ETrue; //Mandatory Data + iDnsFromServer= ETrue; + + iPdpAddress = CIpAddress::NewL(KGPRSDefaultIpAddress); + + iDbSession = CMDBSession::NewL(CMDBSession::LatestVersion()); + } + +CGprsParser::~CGprsParser() + { + + delete iName; + delete iApn; + delete iPdpAddress; + delete iIfName; + delete iLoginName; + delete iLoginPass; + delete iAddr; + delete iNetMask; + delete iDNS1; + delete iDNS2; + + delete iDbSession; + } + + +void CGprsParser::CheckMandatoryFieldsL(CParsedFieldCollection& aIacpFields) + { + if (aIacpFields.GetFieldValue(GPRSS_APN).Length()==0) + User::Leave(KIacpMandatoryDataNotSet); + } + +void CGprsParser::ParseL(CParsedFieldCollection& aIacpFields) + { + TPtrC aFieldValueBuf; + + if (aIacpFields.GetFieldValueAndLength(GPRSS_NAME, aFieldValueBuf) != 0) + { + delete iName; + iName = NULL; + iName = aFieldValueBuf.AllocL(); + } + + if (aIacpFields.GetFieldValueAndLength(GPRSS_APN, aFieldValueBuf) != 0) + { + delete iApn; + iApn = NULL; + iApn= aFieldValueBuf.AllocL(); + } + + if (aIacpFields.GetFieldValueAndLength(GPRSS_PDP_TYPE, aFieldValueBuf) != 0) + { + aIacpFields.GetTUint32NumL(aFieldValueBuf,iPdpType); + } + + if (aIacpFields.GetFieldValueAndLength(GPRSS_PDP_ADDRESS, aFieldValueBuf) != 0) + { + delete iPdpAddress; + iPdpAddress = NULL; + iPdpAddress = CIpAddress::NewL(aFieldValueBuf); + } + + if (aIacpFields.GetFieldValueAndLength(GPRSS_IF_NAME, aFieldValueBuf) != 0) + { + delete iIfName; + iIfName = NULL; + iIfName= CIpAddress::NewL(aFieldValueBuf); + } + + if (aIacpFields.GetFieldValueAndLength(GPRSS_LOGIN_NAME, aFieldValueBuf) != 0) + { + delete iLoginName; + iLoginName = NULL; + iLoginName= aFieldValueBuf.AllocL(); + } + + if (aIacpFields.GetFieldValueAndLength(GPRSS_LOGIN_PASS, aFieldValueBuf) != 0) + { + delete iLoginPass; + iLoginPass = NULL; + iLoginPass= aFieldValueBuf.AllocL(); + } + + if (aIacpFields.GetFieldValueAndLength(SMS_PROMPT_FOR_LOGIN, aFieldValueBuf) != 0) + aIacpFields.GetTBoolL(aFieldValueBuf,iLoginPrompt); + + else if((iLoginName) || (iLoginPass) ) + iLoginPrompt=EFalse; // if login Name or password is specified then this should be set to EFalse + + if (aIacpFields.GetFieldValueAndLength(GPRSS_IP_ADDR, aFieldValueBuf) != 0) + { + delete iAddr; + iAddr = NULL; + iAddr = CIpAddress::NewL(aFieldValueBuf); + } + + if (aIacpFields.GetFieldValueAndLength(GPRSS_IP_NETMASK, aFieldValueBuf) != 0) + { + delete iNetMask; + iNetMask = NULL; + iNetMask = CIpAddress::NewL(aFieldValueBuf); + } + + if (aIacpFields.GetFieldValueAndLength(GPRSS_IP_NAME_SERVER1, aFieldValueBuf) != 0) + { + delete iDNS1; + iDNS1 = NULL; + iDNS1 = CIpAddress::NewL(aFieldValueBuf); + } + + if (aIacpFields.GetFieldValueAndLength(GPRSS_IP_NAME_SERVER2, aFieldValueBuf) != 0) + { + delete iDNS2; + iDNS2 = NULL; + iDNS2 = CIpAddress::NewL(aFieldValueBuf); + } + } + +void CGprsParser::ProcessL(CIacSettingsParser::TIacpConnectionPreferenceFlag& aConnectionPreference) + { + iNoExistingDNS = ETrue; + + + WriteToGPRSTableL(EOutgoing); + WriteToGPRSTableL(EIncoming); + + WriteToIAPTableL(); + + if(aConnectionPreference == CIacSettingsParser::EIacpAttempCreateAsFirstRank || + aConnectionPreference == CIacSettingsParser::EIacpAttempCreateAsSecondRank) + CreatePreferencesTableL(ECommDbConnectionDirectionOutgoing,aConnectionPreference); + + } + +void CGprsParser::WriteToIAPTableL() + { + CCDIAPRecord* iapRecord = static_cast(CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord)); + CleanupStack::PushL(iapRecord); + iapRecord->iRecordName.SetMaxLengthL(iName->Length()); + iapRecord->iRecordName = iName->Des(); + TBool recordExist = FALSE; + if(!(iapRecord->FindL(*iDbSession))) + { + iapRecord->SetRecordId(KCDNewRecordRequest); + } + else + { + recordExist = TRUE; + } + iapRecord->iServiceType.SetMaxLengthL(((TPtrC)KCDTypeNameOutgoingWCDMA).Length()); + iapRecord->iServiceType = TPtrC(KCDTypeNameOutgoingWCDMA); + iapRecord->iService = GetIapIdL(TPtrC(KCDTypeNameOutgoingWCDMA)); + iapRecord->iBearerType.SetMaxLengthL(((TPtrC)KCDTypeNameModemBearer).Length()); + iapRecord->iBearerType = TPtrC(KCDTypeNameModemBearer); + //there are 7 fields in IAP table which cannot have null values, and so when creating an IAP record we were only filling in one of the fields which meant we were submitting a record with lots of null values which can't be handled. + iapRecord->iBearer = 2; + iapRecord->iNetwork = 1; + iapRecord->iNetworkWeighting = 0; + iapRecord->iLocation = 4; + if (!recordExist) + { + iapRecord->StoreL(*iDbSession); + } + else + { + iapRecord->ModifyL(*iDbSession); + } + CleanupStack::PopAndDestroy(iapRecord); + + } + +void CGprsParser::CreatePreferencesTableL(TCommDbConnectionDirection aDirection, CIacSettingsParser::TIacpConnectionPreferenceFlag& aConnectionPreference) + { + CCDConnectionPrefsRecord* connectionPrefsRecord = static_cast(CCDRecordBase::RecordFactoryL(KCDTIdConnectionPrefsRecord)); + CleanupStack::PushL(connectionPrefsRecord); + connectionPrefsRecord->iRanking = aConnectionPreference; + connectionPrefsRecord->iDirection = aDirection; + connectionPrefsRecord->iDialogPref = ECommDbDialogPrefPrompt; + connectionPrefsRecord->iBearerSet = ECommDbBearerWcdma; + connectionPrefsRecord->SetRecordId(iRecordId); + if ( connectionPrefsRecord->FindL(*iDbSession) ) + { + aConnectionPreference = CIacSettingsParser::EIacpDoNotCreatePreference; + } + else + { + connectionPrefsRecord->StoreL(*iDbSession); + } + CleanupStack::PopAndDestroy(connectionPrefsRecord); + } + + +// +// Get COMMDB_ID from table that matches the COMMDB_NAME extracted from BioMsg +// +TUint32 CGprsParser::GetIapIdL(const TDesC& aTableName) + { + const TPtrC KNameFieldToken(iName->Des()); + + + TUint32 ret = 0; + if (aTableName.CompareF(TPtrC(KCDTypeNameOutgoingWCDMA)) == KErrNone) + { + CCDOutgoingGprsRecord* gprsRecord = static_cast(CCDRecordBase::RecordFactoryL(KCDTIdOutgoingGprsRecord)); + CleanupStack::PushL(gprsRecord); + gprsRecord->iRecordName.SetMaxLengthL(KNameFieldToken.Length()); + gprsRecord->iRecordName = KNameFieldToken; + if (gprsRecord->FindL(*iDbSession)) + { + ret = gprsRecord->iRecordTag.RecordId(); + } + else + { + User::Leave(KErrNotFound); + } + CleanupStack::PopAndDestroy(gprsRecord); + } + return ret; + } + +void CGprsParser::WriteToGPRSTableL(TDirection aDir) + { + CCDWCDMAPacketServiceRecord* gprsRecord = NULL; + if (aDir == EOutgoing) + { + gprsRecord = static_cast(CCDRecordBase::RecordFactoryL(KCDTIdOutgoingGprsRecord)); + } + else + { + gprsRecord = static_cast(CCDRecordBase::RecordFactoryL(KCDTIdIncomingGprsRecord)); + } + CleanupStack::PushL(gprsRecord); + gprsRecord->iRecordName.SetMaxLengthL(iName->Length()); + gprsRecord->iRecordName = iName->Des(); + TBool recordExist = FALSE; + if(!(gprsRecord->FindL(*iDbSession))) + { + gprsRecord->SetRecordId(KCDNewRecordRequest); + } + else + { + recordExist = TRUE; + } + gprsRecord->iGPRSAPN.SetMaxLengthL(iApn->Length()); + gprsRecord->iGPRSAPN = *iApn; + gprsRecord->iGPRSPDPType = iPdpType; + gprsRecord->iGPRSPDPAddress.SetMaxLengthL(KCommsDbSvrMaxFieldLength); + gprsRecord->iGPRSPDPAddress = iPdpAddress->Addr(); + gprsRecord->iGPRSIfPromptForAuth = iLoginPrompt; + if(iLoginName != NULL) + { + gprsRecord->iGPRSIfAuthName.SetMaxLengthL(iLoginName->Length()); + gprsRecord->iGPRSIfAuthName = *iLoginName; + } + if(iLoginPass != NULL) + { + gprsRecord->iGPRSIfAuthPass.SetMaxLengthL(iLoginPass->Length()); + gprsRecord->iGPRSIfAuthPass = *iLoginPass; + } + if(iNetMask != NULL) + { + gprsRecord->iGPRSIPNetMask.SetMaxLengthL(KCommsDbSvrMaxFieldLength); + gprsRecord->iGPRSIPNetMask = iNetMask->Addr(); + } + if(iDNS1 != NULL) + { + gprsRecord->iGPRSIPNameServer1.SetMaxLengthL(KCommsDbSvrMaxFieldLength); + gprsRecord->iGPRSIPNameServer1 = iDNS1->Addr(); + } + if(iDNS2 != NULL) + { + gprsRecord->iGPRSIPNameServer2.SetMaxLengthL(KCommsDbSvrMaxFieldLength); + gprsRecord->iGPRSIPNameServer2 = iDNS2->Addr(); + } + if(!iDNS1 && !iDNS2 && iNoExistingDNS) + { + gprsRecord->iGPRSIPDNSAddrFromServer = EFalse; + } + else + { + gprsRecord->iGPRSIPDNSAddrFromServer = ETrue; + } + gprsRecord->iGPRSDisablePlainTextAuth = EFalse; + if (!recordExist) + { + gprsRecord->StoreL(*iDbSession); + } + else + { + gprsRecord->ModifyL(*iDbSession); + } + iNoExistingDNS = gprsRecord->iGPRSIPDNSAddrFromServer; + CleanupStack::PopAndDestroy(gprsRecord); + } + +TPtrC CGprsParser::LimitStringSize(const TDesC& aString) + { + if (aString.Length() < KCommsDbSvrMaxFieldLength) + return aString; + else + return aString.Left(KCommsDbSvrMaxFieldLength); + } + +TPtrC8 CGprsParser::LimitStringSize(const TDesC8& aString) + { + if (aString.Length() < KCommsDbSvrMaxFieldLength) + return aString; + else + return aString.Left(KCommsDbSvrMaxFieldLength); + }