--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commsconfig/commsdatabaseshim/commdbshim/SCDB/CDBOVER.CPP Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,972 @@
+// Copyright (c) 2006-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:
+// CCommDbOverrideSettings class defintions
+//
+//
+
+/**
+ @file
+ @deprecated since v9.1. Functionality is replaced with commsdat.
+*/
+
+#include "cdbover.h"
+#include "OVERRIDE.H"
+#include "CDBSTD.H"
+#include <commsdattypeinfov1_1.h>
+
+EXPORT_C CCommDbOverrideSettings* CCommDbOverrideSettings::NewL(TParamList aParamList)
+/** Allocates and constructs an override settings object.
+
+The construction process automatically opens the communications database and
+connects to the DBMS. The database is closed and the connection to the DBMS
+is severed when this override object is destroyed.
+
+This function was withdrawn in 6.0, but reintroduced in 7.0.
+
+@param aParamList Unused except when comparing two sets.
+@return A pointer to the new override settings object. */
+ {
+ CCommDbOverrideSettings* r=new(ELeave) CCommDbOverrideSettings(aParamList);
+ CleanupStack::PushL(r);
+ r->ConstructL();
+ CleanupStack::Pop(r);
+ return r;
+ }
+
+EXPORT_C CCommDbOverrideSettings* CCommDbOverrideSettings::NewL(TParamList aParamList, TCommDbDatabaseType /*aDbType*/)
+/** @deprecated 7.0
+
+Allocates and constructs an override settings object.
+The construction process automatically opens the communications database and connects to the DBMS.
+The database is closed and the connection to the DBMS is severed when this override object is destroyed.
+Re-instated override variant of NewL function in order to maintain BC with 6.1
+
+@param aParamList Parameter list.
+@param aDbType Whether Database is IAP or ISP version. All Db's are IAP type now.
+@return CCommDbOverrideSettings* the calling function takes ownership of the returned object.
+*/
+ {
+ return CCommDbOverrideSettings::NewL(aParamList);
+ }
+
+CCommDbOverrideSettings::CCommDbOverrideSettings(TParamList aParamList)
+ : iPartialFull(aParamList)
+/**
+Constructor
+
+@param aParamList An enumerator which indicates whether the override settings are partial or full.
+*/
+ {}
+
+void CCommDbOverrideSettings::ConstructL()
+ {
+ iDb=CCommsDatabase::NewL();
+ }
+
+EXPORT_C CCommDbOverrideSettings::~CCommDbOverrideSettings()
+/** Frees all resources owned by this object, prior to its destruction. Specifically,
+it closes the communications database and severs the connection with the DBMS. */
+ {
+ iOverrides.ResetAndDestroy();
+ iIapOverrides.Reset();
+
+ delete iDb;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::SetIntOverride(const TDesC& aTableName, const TDesC& aColumnName, TUint32 aValue)
+/** Sets an override value for the specified unsigned integer type column in the specified table in the
+communications database.
+If the column name is empty, i.e. the length of the descriptor aColumnName is zero, then the override
+value is assumed to be the overriding ID for the default record for table aTableName. This means that
+the table must be one which supports default records.
+
+For the function to succeed:
+The column must exist
+The column type must be an unsigned integer
+An override for this column (or the overriding default record ID) for this table must not already exist
+The table must be one which supports override settings
+
+@param aTableName A reference to a descriptor containing the name of a table in the
+communications database.
+@param aColumnName A reference to a descriptor containing the name of a column in table
+aTableName. If this descriptor is empty, i.e. its length is zero, then aValue is assumed to be the
+overriding ID for the default record.
+@param aValue The override value.
+
+@return KErrNone on success; KErrNotSupported if the specified table does not have a default (when overriding the
+default) or the table does not support overrides; KErrNotFound if the specified table and/or column does not exist;
+KErrAlreadyExists if the specified column is already overridden. */
+ {
+ TRAPD(ret,CheckL(aTableName,aColumnName,EIntValue));
+ if (ret!=KErrNone)
+ return ret;
+
+ ret = FindOverride(aTableName,aColumnName,EIntValue);
+ if (ret >= 0)
+ {
+ ret = KErrAlreadyExists;
+ }
+ else if (ret == KErrNotFound)
+ {
+ CCommDbOverride* override = new CCommDbIntOverride(aTableName,aColumnName);
+ if (override != 0)
+ {
+ ((CCommDbIntOverride*) override)->iValue = aValue;
+ ret = iOverrides.Append(override);
+ }
+ else
+ ret = KErrNoMemory;
+ }
+
+ return ret;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::SetBoolOverride(const TDesC& aTableName, const TDesC& aColumnName, TBool aValue)
+/** Sets an override value for a boolean type column in the specified table in the communications database.
+For the function to succeed:
+The column must exist
+The column type must be boolean
+An override for this column for this table must not already exist
+The table must be one which supports override settings
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications
+database.
+@param aColumnName A reference to a descriptor containing the name of a column in table aTableName.
+@param aValue The override value.
+
+@return KErrNone on success; KErrNotSupported if the specified table does not have a default (when overriding the
+default) or the table does not support overrides; KErrNotFound if the specified table and/or column does not exist;
+KErrAlreadyExists if the specified column is already overridden. */
+ {
+ TRAPD(ret,CheckL(aTableName,aColumnName,EBoolValue));
+ if (ret!=KErrNone)
+ return ret;
+
+ ret = FindOverride(aTableName,aColumnName,EBoolValue);
+ if (ret >= 0)
+ {
+ ret = KErrAlreadyExists;
+ }
+ else if (ret == KErrNotFound)
+ {
+ CCommDbOverride* override = new CCommDbBoolOverride(aTableName,aColumnName);
+ if (override != 0)
+ {
+ ((CCommDbBoolOverride*) override)->iValue = aValue;
+ ret = iOverrides.Append(override);
+
+ // if Append failed delete override
+ if ( ret != KErrNone ) delete override;
+
+ }
+ else
+ ret = KErrNoMemory;
+ }
+ return ret;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::SetDesOverride(const TDesC& aTableName, const TDesC& aColumnName, const TDesC8& aValue)
+/** Sets an override value for an 8 bit descriptor text type column in the specified table in the communications
+database.
+
+For the function to succeed:
+The column must exist
+The column type must be narrow (ASCII) text
+An override for this column for this table must not already exist.
+The table must be one which supports override settings
+
+In addition, the maximum length of text expected by this function is the value of the constant
+KCommsDbSvrMaxFieldLength. The length of aValue supplied by the caller cannot be greater than this value.
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications
+database.
+@param aColumnName A reference to a descriptor containing the name of a column in table aTableName.
+@param aValue The override value.
+
+@return KErrNone on success; KErrNotSupported if the specified table does not have a default (when overriding the
+default) or the table does not support overrides; KErrNotFound if the specified table and/or column does not exist;
+KErrAlreadyExists if the specified column is already overridden.*/
+ {
+ TRAPD(ret,CheckL(aTableName,aColumnName,EDes8Value));
+ if (ret!=KErrNone)
+ return ret;
+
+ TInt fieldWidth(0);
+ CCommsDbTableView* tableView = 0;
+ TRAP(ret, tableView = iDb->OpenTableLC(aTableName); CleanupStack::Pop(tableView));
+ if (ret != KErrNone)
+ {
+ return ret;
+ }
+
+ TRAP(ret, tableView->ReadColumnMaxLengthL(aColumnName, fieldWidth));
+ if (ret != KErrNone)
+ {
+ delete tableView;
+ return ret;
+ }
+
+ if (aValue.Length()< fieldWidth)
+ {
+ ret = FindOverride(aTableName,aColumnName,EDes8Value);
+ if (ret >= 0)
+ {
+ ret = KErrAlreadyExists;
+ }
+ else if (ret == KErrNotFound)
+ {
+ CCommDbOverride* override = new CCommDbDes8Override(aTableName,aColumnName);
+ if (override != 0)
+ {
+ ((CCommDbDes8Override*) override)->iValue.Copy(aValue);
+ ret = iOverrides.Append(override);
+
+ // if Append failed delete override
+ if ( ret != KErrNone ) delete override;
+ }
+ else
+ {
+ ret = KErrNoMemory;
+ }
+ }
+ }
+ else
+ {
+ ret = KErrOverflow;
+ }
+
+ delete tableView;
+ return ret;
+
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::SetDesOverride(const TDesC& aTableName, const TDesC& aColumnName, const TDesC16& aValue)
+/** Sets an override value for a 16 bit descriptor text type column in the specified table in the communications
+database.
+
+For the function to succeed:
+The column must exist
+The column type must be wide (UNICODE) text
+An override for this column for this table must not already exist
+The table must be one which supports override settings
+
+In addition, the maximum length of text expected by this function is the value of the constant
+KCommsDbSvrMaxFieldLength. The length of aValue supplied by the caller cannot be greater than this value.
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications database.
+@param aColumnName A reference to a descriptor containing the name of a column in table aTableName.
+@param aValue The override value.
+
+
+@return KErrNone on success; KErrNotSupported if the specified table does not have a default (when overriding the
+default) or the table does not support overrides; KErrNotFound if the specified table and/or column does not exist;
+KErrAlreadyExists if the specified column is already overridden. */
+ {
+ TRAPD(ret,CheckL(aTableName,aColumnName,EDes16Value));
+ if (ret!=KErrNone)
+ return ret;
+
+ TInt fieldWidth(0);
+ CCommsDbTableView* tableView = 0;
+ TRAP(ret, tableView = iDb->OpenTableLC(aTableName); CleanupStack::Pop(tableView));
+ if (ret != KErrNone)
+ {
+ return ret;
+ }
+
+ TRAP(ret, tableView->ReadColumnMaxLengthL(aColumnName, fieldWidth));
+ if (ret != KErrNone)
+ {
+ delete tableView;
+ return ret;
+ }
+
+ if (aValue.Length()< fieldWidth)
+ {
+ ret = FindOverride(aTableName,aColumnName,EDes16Value);
+ if (ret >= 0)
+ {
+ ret = KErrAlreadyExists;
+ }
+ else if (ret == KErrNotFound)
+ {
+ CCommDbOverride* override = new CCommDbDes16Override(aTableName,aColumnName);
+ if (override != 0)
+ {
+ ((CCommDbDes16Override*) override)->iValue.Copy(aValue);
+ ret = iOverrides.Append(override);
+
+ // if Append failed delete override
+ if ( ret != KErrNone ) delete override;
+ }
+ else
+ {
+ ret = KErrNoMemory;
+ }
+ }
+ }
+ else
+ {
+ ret = KErrOverflow;
+ }
+
+ delete tableView;
+ return ret;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::SetLongDesOverride(const TDesC& aTableName, const TDesC& aColumnName, const TDesC& aValue)
+/** Sets an override value for a long text type column in a specified table in the communications database.
+
+For the function to succeed:
+The column must exist
+The column type is assumed to be arbitrarily long text (within the limits defined by descriptors)
+An override for this column for this table must not already exist
+The table must be one which supports override settings
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications
+database.
+@param aColumnName A reference to a descriptor containing the name of a column in table aTableName.
+@param aValue The override value.
+
+@return KErrNone on success; KErrNotSupported if the specified table does not have a default (when overriding the
+default) or the table does not support overrides; KErrNotFound if the specified table and/or column does not exist;
+KErrAlreadyExists if the specified column is already overridden. */
+ {
+ TRAPD(ret,CheckL(aTableName,aColumnName,ELongDesValue));
+ if (ret!=KErrNone)
+ return ret;
+
+ ret = FindOverride(aTableName,aColumnName,ELongDesValue);
+ if (ret >= 0)
+ {
+ ret = KErrAlreadyExists;
+ }
+ else if (ret == KErrNotFound)
+ {
+ CCommDbOverride* override = 0;
+ TRAP(ret,(override=CCommDbLongDesOverride::NewL(aTableName,aColumnName,aValue)));
+ if (ret==KErrNone)
+ {
+ ret = iOverrides.Append(override);
+
+ // if Append failed delete override
+ if ( ret != KErrNone ) delete override;
+ }
+ }
+ return ret;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::GetIntOverride(const TDesC& aTableName, const TDesC& aColumnName, TUint32& aValue)
+/** Gets an override value for an unsigned integer type column in the specified table in the communications
+database.
+
+If the column name is empty, i.e. the length of the descriptor aColumnName is zero, then the override
+value is assumed to be the overriding Id for the default record for table aTableName.
+
+For this function to succeed:
+An override for this column (or the the overriding default record Id) for this table must exist
+The table must be one which supports override settings
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications
+database.
+@param aColumnName A reference to a descriptor containing the name of a column in table aTableName.
+@param aValue An unsigned integer type passed by the caller. On successful return from this function, it
+contains the override value.
+
+@return KErrNone on success; KErrNotFound if the specified table and/or column has not been overridden or does not
+exist */
+ {
+ TInt index=FindOverride(aTableName,aColumnName,EIntValue);
+ if (index < 0)
+ return KErrNotFound;
+
+ aValue=((CCommDbIntOverride*)(iOverrides[index]))->iValue;
+ return KErrNone;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::GetBoolOverride(const TDesC& aTableName, const TDesC& aColumnName, TBool& aValue)
+/** Gets an override value for a boolean type column in the specified table in the communications database.
+
+For this function to succeed:
+An override for this column for this table must exist
+The table must be one which supports override settings
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications
+database.
+@param aColumnName A reference to a descriptor containing the name of a column in table aTableName.
+@param aValue A boolean type passed by the caller. On successful return from this function, it contains
+the override value.
+
+@return KErrNone on success; KErrNotFound if the specified table and/or column has not been overridden or does not
+exist. */
+ {
+ TInt index=FindOverride(aTableName,aColumnName,EBoolValue);
+ if (index < 0)
+ return KErrNotFound;
+
+ aValue=((CCommDbBoolOverride*)(iOverrides[index]))->iValue;
+ return KErrNone;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::GetDesOverride(const TDesC& aTableName, const TDesC& aColumnName, TDes8& aValue)
+/** Gets an override value for an 8 bit descriptor text type column in the specified table in the communications
+ database.
+
+For this function to succeed:
+An override for this column for this table must exist
+The table must be one which supports override settings
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications
+database.
+@param aColumnName A reference to a descriptor containing the name of a column in table aTableName.
+@param aValue An 8 bit type descriptor passed by the caller. On successful return from this function, it
+contains the override value. This parameter must be as long as KCommsDbSvrMaxFieldLength or the function will fail.
+
+@return KErrNone on success; KErrNotFound if the specified table and/or column has not been overridden or does not
+exist; KErrOverflow if the aValue parameter was too small.*/
+ {
+ TInt fieldWidth(0);
+ TInt returnValue = KErrNone;
+ CCommsDbTableView* tableView = 0;
+ TRAP(returnValue, tableView = iDb->OpenTableLC(aTableName); CleanupStack::Pop(tableView));
+ if (returnValue != KErrNone)
+ {
+ return returnValue;
+ }
+
+ TRAP(returnValue, tableView->ReadColumnMaxLengthL(aColumnName, fieldWidth));
+ if (returnValue != KErrNone)
+ {
+ delete tableView;
+ return returnValue;
+ }
+
+ //TG-hack to restrict OutgoingGPRS/APN to 252 chars to avoid overflow
+ TInt maxLength = aValue.MaxLength();
+ if((aTableName.CompareF(TPtrC(KCDTypeNameOutgoingWCDMA)) == 0 || aTableName.CompareF(TPtrC(KCDTypeNameIncomingWCDMA)) == 0 )
+ && aColumnName.CompareF(TPtrC(KCDTypeNameGPRSAPN)) == 0)
+ {
+ fieldWidth = 252; // KGSNNameLength from etelpckt.h
+ }
+
+ if (aValue.MaxLength() >= fieldWidth)
+ {
+ TInt index=FindOverride(aTableName,aColumnName,EDes8Value);
+ if (index >= 0)
+ {
+ aValue.Copy(((CCommDbDes8Override*)(iOverrides[index]))->iValue);
+ }
+ else
+ {
+ returnValue = KErrNotFound;
+ }
+ }
+ else
+ {
+ returnValue = KErrOverflow;
+ }
+
+ delete tableView;
+ return returnValue ;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::GetDesOverride(const TDesC& aTableName, const TDesC& aColumnName, TDes16& aValue)
+/**Gets an override value for a 16 bit descriptor text type column in the specified table in the communications
+database.
+
+For this function to succeed:
+An override for this column for this table must exist
+The table must be one which supports override settings
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications
+database.
+@param aColumnName A reference to a descriptor containing the name of a column in table aTableName.
+@param aValue A 16 bit type descriptor passed by the caller. On successful return from this function, it
+contains the override value. This parameter must be as long as KCommsDbSvrMaxFieldLength or the function will fail.
+
+@return KErrNone on success; KErrNotFound if the specified table and/or column has not been overridden or does not
+exist; KErrOverflow if the aValue parameter was too small.*/
+ {
+ TInt fieldWidth(0);
+ TInt returnValue = KErrNone;
+ CCommsDbTableView* tableView = 0;
+ TRAP(returnValue, tableView = iDb->OpenTableLC(aTableName); CleanupStack::Pop(tableView));
+ if (returnValue != KErrNone)
+ {
+ return returnValue;
+ }
+
+ TRAP(returnValue, tableView->ReadColumnMaxLengthL(aColumnName, fieldWidth));
+ if (returnValue != KErrNone)
+ {
+ delete tableView;
+ return returnValue;
+ }
+
+ if (aValue.MaxLength() >= fieldWidth)
+ {
+ TInt index=FindOverride(aTableName,aColumnName,EDes16Value);
+ if (index >= 0)
+ {
+ aValue.Copy(((CCommDbDes16Override*)(iOverrides[index]))->iValue);
+ }
+ else
+ {
+ returnValue = KErrNotFound;
+ }
+ }
+ else
+ {
+ returnValue = KErrOverflow;
+ }
+
+ delete tableView;
+ return returnValue ;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::GetLongDesOverride(const TDesC& aTableName, const TDesC& aColumnName, TDes& aValue)
+/**Gets the override value for a column in the specified table in the communications database.
+
+For this function to succeed:
+An override for this column for this table must exist
+The table must be one which supports override settings
+Notes:
+The maximum length of the descriptor aValue must be large enough to contain the override text.
+Use the GetLongDesOverrideLength() function to find the length of this text.
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications
+database.
+@param aColumnName A reference to a descriptor containing the name of a column in table aTableName.
+@param aValue A descriptor passed by the caller. On successful return from this function, it contains the
+override value.
+
+@return KErrNone on success; KErrNotFound if the specified table and/or column has not been overridden or does not
+exist. */
+ {
+ TInt index=FindOverride(aTableName,aColumnName,ELongDesValue);
+ if (index < 0)
+ return KErrNotFound;
+
+ TPtr ptr(((CCommDbLongDesOverride*)(iOverrides[index]))->iValue->Des());
+
+ if (aValue.MaxLength() < ptr.Length())
+ {
+ return KErrOverflow;
+ }
+
+ aValue.Copy(ptr);
+ return KErrNone;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::GetLongDesOverrideLength(const TDesC& aTableName, const TDesC& aColumnName, TInt& aLength)
+/**Gets the length of the long text override value for a column in the specified table in the communications database.
+
+For this function to succeed:
+An override for this column for this table must exist
+The table must be one which supports override settings
+
+@param aTableName A reference to a descriptor containing the name of a table in
+the communications database.
+@param aColumnName A reference to a descriptor containing the name of a column in
+table aTableName.
+@param aLength A signed integer type passed by the caller. On successful return from
+this function, it contains the override value.
+
+@return KErrNone on success; KErrNotFound if the specified table and/or column has not been overridden or does not exist;
+KErrOverflow if the aValue parameter was too small.*/
+ {
+ TInt index=FindOverride(aTableName,aColumnName,ELongDesValue);
+ if (index < 0)
+ return KErrNotFound;
+
+ aLength=((CCommDbLongDesOverride*)(iOverrides[index]))->iValue->Des().Length();
+ return KErrNone;
+ }
+
+EXPORT_C TBool CCommDbOverrideSettings::Compare(CCommDbOverrideSettings* aOverrides) const
+/** Compares aOverrides with this class.
+
+@param aOverrides Overrides.
+@return ETrue if aOverrides has the same as this object; EFalse if not. */
+ {
+ //Compare *this override values with the passed override values and
+ //return true if all fields match else return false
+
+ //compare override count
+ TInt overrideCount = iOverrides.Count();
+ if(overrideCount != aOverrides->iOverrides.Count())
+ return EFalse;
+
+ //If everything else checks out then compare override types and values
+ TInt i;
+ for(i = 0; i < overrideCount; ++i)
+ {
+ const CCommDbOverride* myOverride = iOverrides[i];
+
+ TInt found = aOverrides->FindOverride(myOverride->iTableName,
+ myOverride->iColumnName, myOverride->iType);
+ if (found < 0)
+ return EFalse;
+
+ // have found one now check its value
+ const CCommDbOverride* argOverride = aOverrides->iOverrides[found];
+
+ switch (myOverride->iType)
+ {
+ case EIntValue:
+ if (((CCommDbIntOverride*) myOverride)->iValue !=
+ ((CCommDbIntOverride*) argOverride)->iValue)
+ return EFalse;
+ break;
+ case EBoolValue:
+ if (((CCommDbBoolOverride*) myOverride)->iValue !=
+ ((CCommDbBoolOverride*) argOverride)->iValue)
+ return EFalse;
+ break;
+ case EDes8Value:
+ if (((CCommDbDes8Override*) myOverride)->iValue !=
+ ((CCommDbDes8Override*) argOverride)->iValue)
+ return EFalse;
+ break;
+ case EDes16Value:
+ if (((CCommDbDes16Override*) myOverride)->iValue !=
+ ((CCommDbDes16Override*) argOverride)->iValue)
+ return EFalse;
+ break;
+ case ELongDesValue:
+ if (*((CCommDbLongDesOverride*) myOverride)->iValue !=
+ *((CCommDbLongDesOverride*) argOverride)->iValue)
+ return EFalse;
+ break;
+ default:
+ return EFalse;
+ }
+ }
+
+ // compare connection preference override count
+ overrideCount = iIapOverrides.Count();
+ if(overrideCount != aOverrides->iIapOverrides.Count())
+ return EFalse;
+
+ // compare connection preference override setting
+ for(i = 0; i < overrideCount; ++i)
+ {
+ // Compare value of override parameter with that which was passed in
+ if((aOverrides->iIapOverrides.Find(iIapOverrides[i], MatchIapOverride)) < 0)
+ {
+ return EFalse;
+ }
+ }
+
+ return ETrue;
+ }
+
+TBool CCommDbOverrideSettings::MatchIapOverride(const TCommDbIapConnectionPrefOverride& aFirst,
+ const TCommDbIapConnectionPrefOverride& aSecond)
+/**
+Checks if the dialog preference fields in the passed objects of TCommDbIapConnectionPrefOverride are equal.
+
+@param aFirst A reference to TCommDbIapConnectionPrefOverride class
+@param aSecond A reference to TCommDbIapConnectionPrefOverride class
+@return ETrue if the dialog preferences are equal else EFalse
+*/
+ {
+ return aFirst.iPref == aSecond.iPref;
+ }
+
+EXPORT_C TBool CCommDbOverrideSettings::IsOverridden(const TDesC& aTableName, const TDesC& aColumnName, TValueType aType)
+/** Tests whether an override value of a specified type exists in the communications
+database.
+
+@param aTableName A reference to a descriptor containing the name of a table
+in the communications database.
+@param aColumnName A reference to a descriptor containing the name of a column
+in table aTableName which is to be overridden.
+@param aType An enumeration which indicates the type of data in column aType
+which is to be overridden.
+@return ETrue if an override has been set for `aColumnName`; EFalse otherwise. */
+ {
+ // If Find returns an index then it `IsOverridden`
+ return FindOverride(aTableName,aColumnName,aType) >= 0;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::SetConnectionPreferenceOverride(const CCommsDbConnectionPrefTableView::TCommDbIapConnectionPref& aPref)
+
+/** Sets overrides for a record in the Connection preferences table.
+
+The rank (CONNECT_PREF_RANKING and the direction (CONNECTION_PREF_DIRECTION
+part of the aPref parameter must be filled in to indicate which connection
+preference is to be overridden. It is therefore not possible to override the
+rank or direction of a connection preference.
+
+The other fields should be filled in one of the following ways to override
+the other settings:
+
+ Only dialog preference (CONNECT_PREF_DIALOG_PREF) is filled in to override
+ this field (all others should have zero value).
+
+ Only bearer set and IAP ID (CONNECT_PREF_BEARER_SET) are filled in to override
+ these fields (all other fields should have zero value).
+
+ The bearer set, IAP ID and the dialog preference are filled in to override
+ these fields.
+
+CommDb treats zero values as fields that the client does not wish to override.
+
+
+A note on overriding connection preferences. This is clearly a desirable thing
+to be able to do, so that the application may choose its own particular first
+and second preference for a connection. However, at the moment it is only
+possible to override one row of settings per table, i.e. it would only be
+possible to override the first ranked connection preferences or the second
+ranked connection preferences, but not both. To solve this problem, two API
+functions are added to the CCommDbOverrideSettings class specifically for
+overriding connection preferences.
+
+@param aPref Connection preference settings by which to override.
+@return An error code from an override setting function, e.g. SetIntOverride(),
+as documented above. */
+ {
+ if (aPref.iRanking == 0 || aPref.iDirection == ECommDbConnectionDirectionUnknown)
+ return KErrNotSupported;
+
+ if (aPref.iBearer.iIapId == 0 &&
+ aPref.iDialogPref == ECommDbDialogPrefUnknown &&
+ aPref.iBearer.iBearerSet == 0)
+ return KErrArgument;
+
+ for (TInt count = iIapOverrides.Count() - 1; count >= 0; count--)
+ {
+ CCommsDbConnectionPrefTableView::TCommDbIapConnectionPref& currentPref = iIapOverrides[count].iPref;
+
+ if (aPref.iRanking == currentPref.iRanking && aPref.iDirection == currentPref.iDirection)
+ return KErrAlreadyExists;
+ }
+
+ TCommDbIapConnectionPrefOverride override;
+ override.iPref = aPref;
+ return iIapOverrides.Append(override);
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::SetConnectionPreferenceOverride(const CCommsDbConnectionPrefTableView::TCommDbIspConnectionPref& /*aPref*/)
+/**
+@deprecated 7.0
+
+Framework left in place for 6.1 compatibility purposes.
+@param aPref Not supported.
+@return KErrNotSupported*/
+ {
+ return KErrNotSupported;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::GetConnectionPreferenceOverride(CCommsDbConnectionPrefTableView::TCommDbIapConnectionPref& aPref)
+/** Gets the overrides for a record in the Connection preferences table
+filtered by the contents of `aPref`. Any field in `aPref` may be ignored in the filter by
+initialising with the following values:
+aPref.iRanking == 0,
+aPref.iDirection == ECommDbConnectionDirectionUnknown,
+aPref.iDialogPref == ECommDbDialogPrefUnknown,
+aPref.iBearer.iBearerSet == 0,
+aPref.iBearer.iIapId == 0
+The client should set the ranking and the direction of the aPref parameter to the values
+to be matched when getting the override, e.g. set the iRanking member to 1
+and iDirection to ECommDbConnectionDirectionOutgoing to retrieve the overrides
+for the outgoing connection preference with ranking 1.
+
+@param aPref Initially specifies the record for which to get the overrides
+(the record is matched against the settings in aPref). On return, the override
+settings for that record.
+@return KErrArgument if all the members of aPref are zero; KErrNotFound if
+no matching override is found. */
+ {
+ if (aPref.iRanking == 0 &&
+ aPref.iDirection == ECommDbConnectionDirectionUnknown &&
+ aPref.iDialogPref == ECommDbDialogPrefUnknown &&
+ aPref.iBearer.iBearerSet == 0)
+ return KErrArgument;
+
+ for (TInt count = iIapOverrides.Count() - 1; count >= 0; count--)
+ {
+ CCommsDbConnectionPrefTableView::TCommDbIapConnectionPref pref = iIapOverrides[count].iPref;
+
+ if ((aPref.iRanking == 0 || aPref.iRanking == pref.iRanking) &&
+ (aPref.iDirection == ECommDbConnectionDirectionUnknown || aPref.iDirection == pref.iDirection) &&
+ (aPref.iDialogPref == ECommDbDialogPrefUnknown || aPref.iDialogPref == pref.iDialogPref) &&
+ (aPref.iBearer.iBearerSet == 0 || aPref.iBearer.iBearerSet == pref.iBearer.iBearerSet) &&
+ (aPref.iBearer.iIapId == 0 || aPref.iBearer.iIapId == pref.iBearer.iIapId))
+ {
+ aPref = pref;
+ return KErrNone;
+ }
+ }
+
+ return KErrNotFound;
+ }
+
+EXPORT_C TInt CCommDbOverrideSettings::GetConnectionPreferenceOverride(CCommsDbConnectionPrefTableView::TCommDbIspConnectionPref& /*aPref*/)
+/** @deprecated v7.0S
+
+Left in place for 6.1 BC purposes.
+
+@param aPref Connection preference settings.
+@return KErrNotSupported. */
+ {
+ return KErrNotSupported;
+ }
+
+TInt CCommDbOverrideSettings::FindOverride(const TDesC& aTableName, const TDesC& aColumnName, TValueType aType) const
+/**
+Checks whether the given table, column are overridden for the given type.
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications database.
+@param aColumnName A reference to a descriptor containing the name of a column in table aTableName.
+@param aType The override type.
+@return The index in the table if the values are matched else KErrNotFound
+*/
+ {
+ if (IllegalOverride(aTableName,aColumnName))
+ return KErrNotSupported;
+
+ TInt index;
+ CCommDbOverride toMatch(aType);
+ toMatch.iColumnName.Copy(aColumnName);
+ toMatch.iTableName.Copy(aTableName);
+ index = iOverrides.Find(&toMatch, toMatch.MatchOverrides);
+
+ if (index < 0)
+ index = KErrNotFound;
+
+ return index;
+ }
+
+TBool CCommDbOverrideSettings::IllegalOverride(const TDesC& aTableName, const TDesC& aColumnName) const
+/**
+Checks whether the overrides are legal or not.
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications database.
+@param aColumnName A reference to a descriptor containing the name of a column in table aTableName.
+@return ETrue if the override is legal else EFalse
+*/
+ {
+ if (aTableName.CompareF(TPtrC(MODEM_BEARER)) == 0 && aColumnName.CompareF(TPtrC(MODEM_TSY_NAME)) != 0)
+ return ETrue;
+
+ // required for BC purposes - check for the old name for the ModemBearer table
+ if (aTableName.CompareF(TPtrC(OLD_MODEM_TABLE)) == 0 && aColumnName.CompareF(TPtrC(MODEM_TSY_NAME)) != 0)
+ return ETrue;
+
+ if (aTableName.CompareF(TPtrC(PROXIES)) == 0)
+ return ETrue;
+
+ if (aTableName.CompareF(TPtrC(WAP_ACCESS_POINT)) == 0)
+ return ETrue;
+
+ if (aTableName.CompareF(TPtrC(WAP_IP_BEARER)) == 0)
+ return ETrue;
+
+ if (aTableName.CompareF(TPtrC(WAP_SMS_BEARER)) == 0)
+ return ETrue;
+
+ if (aTableName.CompareF(TPtrC(DEFAULT_GPRS)) == 0)
+ return ETrue;
+
+ // Globals that may not be overriden
+ if (aColumnName.Length() == 0)
+ {
+ return (aTableName.CompareF(TPtrC(WAP_ACCESS_POINT)) == 0 ||
+ aTableName.CompareF(TPtrC(CLIENT_TIMEOUT)) == 0 ||
+ aTableName.CompareF(TPtrC(ROUTE_TIMEOUT)) == 0 ||
+ aTableName.CompareF(TPtrC(REDIAL_ATTEMPTS)) == 0 ||
+ aTableName.CompareF(TPtrC(SMS_BEARER)) == 0 ||
+ aTableName.CompareF(TPtrC(SMS_RECEIVE_MODE)) == 0 ||
+ aTableName.CompareF(TPtrC(GPRS_ATTACH_MODE)) == 0 ||
+ aTableName.CompareF(TPtrC(ACCEPT_INCOMING_GPRS)) == 0 ||
+ aTableName.CompareF(TPtrC(GPRS_CLASS_C_BEARER)) == 0 ||
+ aTableName.CompareF(TPtrC(MODEM_DATA_FAX)) == 0 ||
+ aTableName.CompareF(TPtrC(MODEM_PHONE_SERVICES_SMS)) == 0 ||
+ aTableName.CompareF(TPtrC(LOCATION_DATA_FAX)) == 0 ||
+ aTableName.CompareF(TPtrC(LOCATION_PHONE_SERVICES_SMS)) == 0
+ );
+ }
+
+ return EFalse;
+ }
+
+void CCommDbOverrideSettings::CheckL(const TDesC& aTableName, const TDesC& aColumnName, TValueType aType) const
+/**
+Checks whether the column aColumnName of type aType in the table aTableName exists.
+Panic if the column doesn't exist in the table, otherwise leave with KErrNotFound.
+
+@param aTableName A reference to a descriptor containing the name of a table in the communications database.
+@param aType The override type.
+*/
+ {
+ if (aColumnName.Length()!=0)
+ {
+ CCommsDbTableView* table=iDb->OpenTableLC(aTableName);
+ TDbColType colType;
+ TUint32 attrib;
+ table->ReadTypeAttribL(aColumnName,colType,attrib); // checks column exists (cannot leave)
+ CleanupStack::PopAndDestroy(table);
+
+// check the correct type
+ switch (aType)
+ {
+ case EIntValue:
+ if ((colType!=EDbColUint32) && (colType!=EDbColUint8))
+ User::Leave(KErrNotFound);
+ break;
+ case EBoolValue:
+ if (colType!=EDbColBit)
+ User::Leave(KErrNotFound);
+ break;
+ case EDes8Value:
+ if (colType!=EDbColText8)
+ User::Leave(KErrNotFound);
+ break;
+ case EDes16Value:
+ if (colType!=EDbColText16)
+ User::Leave(KErrNotFound);
+ break;
+ case ELongDesValue:
+ if (colType!=EDbColLongText)
+ User::Leave(KErrNotFound);
+ break;
+ default:
+ User::Leave(KErrNotFound);
+ break;
+ }
+ }
+ else // global setting
+ {
+ if (aType==EIntValue)
+ {
+ TUint32 val=0; // ignore this
+ TRAPD(ret,iDb->GetGlobalSettingL(aTableName,val));
+ if (ret==KErrNotSupported)
+ User::Leave(KErrNotFound);
+ }
+ else if (aType==EDes16Value)
+ {
+ HBufC16* bufHeap = HBufC::NewLC(KCommsDbSvrRealMaxFieldLength) ;
+ TPtr buf = bufHeap->Des() ;
+ TRAPD(ret,iDb->GetGlobalSettingL(aTableName,buf));
+ CleanupStack::PopAndDestroy(bufHeap) ; // bufHeap
+ if (ret==KErrNotSupported)
+ User::Leave(KErrNotFound);
+ }
+ else // all global settings are one of these
+ User::Leave(KErrNotFound);
+ }
+ }