--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/IMPSengine/client/src/impscdatautils.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,1056 @@
+/*
+* Copyright (c) 2003-2005 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:
+* imps data util class.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <miutconv.h>
+#include "impskey.h"
+#include "impscdatautils.h"
+#include "impsdataaccessor.h"
+#include "impsgrouppropsint.h"
+#include "impsservices.h"
+#include "impsliterals.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+TImpsCDataUtils::TImpsCDataUtils()
+ {
+ }
+
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::GetRecipientsL
+// ----------------------------------------------------------------------------
+void TImpsCDataUtils::GetRecipientsL(
+ MImpsKey* aKey,
+ MImpsDataAccessor* aAc,
+ CPtrC16Array* aGroups,
+ CPtrC16Array* aUsers,
+ CPtrC16Array* aSnGroups, // ScreenName( GroupId )
+ CPtrC16Array* aScreenNs ) // ScreenName( SName );
+ {
+
+ aKey->AddL( CREATEKEY( EImpsKeyRecipient, 0 ) );
+
+ // Get User*:UserID
+ TBool more(ETrue);
+ TDesC* myPtr;
+ TInt i = 0; // aux index
+ for ( i = 0; more; i++)
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyUser, i ) );
+ aKey->AddL( CREATEKEY( EImpsKeyUserID, 0 ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ aUsers->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ aKey->PopL( 2 );
+ }
+
+ // get Group*:GroupID
+ more = ETrue;
+ for ( i = 0; more; i++)
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyGroup, i ) );
+ aKey->AddL( CREATEKEY( EImpsKeyGroupID, 0 ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ aGroups->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ aKey->PopL( 2 );
+ }
+
+ // Group*:ScreenName
+ more = ETrue;
+ for ( i = 0; more; i++)
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyGroup, i ) );
+ aKey->AddL( CREATEKEY( EImpsKeyScreenName, 0 ) );
+ aKey->AddL( CREATEKEY( EImpsKeySName, 0 ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ aScreenNs->AppendL( *myPtr );
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyGroupID, 0 ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ aSnGroups->AppendL( *myPtr );
+ } // else error in data!
+ }
+
+ {
+ more = EFalse;
+ }
+ aKey->PopL( 3 );
+ }
+
+ aKey->PopL();
+
+ // notice: no contact list supported yet
+
+ }
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::SetRecipientsL
+// ----------------------------------------------------------------------------
+void TImpsCDataUtils::SetRecipientsL(
+ MImpsKey* aKey,
+ MImpsDataAccessor* aAc,
+ const MDesC16Array* aGroups,
+ const MDesC16Array* aUserIds,
+ const MDesC16Array* aSnGroups, // ScreenName( GroupId )
+ const MDesC16Array* aScreenNames ) // ScreenName( SName );
+ {
+
+ aKey->AddL( CREATEKEY( EImpsKeyRecipient, 0 ) );
+
+ TInt i = 0;
+
+ // User recipients
+ if ( aUserIds )
+ {
+ TInt count = aUserIds->MdcaCount();
+
+
+ for ( i = 0; i < count; i++ )
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyUser, i ) );
+ aKey->AddL( CREATEKEY( EImpsKeyUserID, 0 ) );
+ aAc->StoreDescL( aKey, aUserIds->MdcaPoint( i ) );
+ aKey->PopL( 2 );
+ }
+ } // userids
+
+ if ( aGroups )
+ {
+ TInt count = aGroups->MdcaCount();
+
+ for ( i = 0; i < count; i++ )
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyGroup, i ) );
+ aKey->AddL( CREATEKEY( EImpsKeyGroupID, 0 ) );
+ aAc->StoreDescL( aKey, aGroups->MdcaPoint( i ) );
+ aKey->PopL( 2 );
+ }
+ } // groupid
+
+ if ( aScreenNames )
+ {
+ TInt count = aScreenNames->MdcaCount();
+
+ for ( i = 0; i < count; i++ )
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyGroup, i ) );
+ aKey->AddL( CREATEKEY( EImpsKeyScreenName, 0 ) );
+ aKey->AddL( CREATEKEY( EImpsKeySName, 0 ) );
+ aAc->StoreDescL( aKey, aScreenNames->MdcaPoint( i ) );
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyGroupID, 0 ) );
+ // myAccess->StoreDescL( aKey, *aGroupId );
+ aAc->StoreDescL( aKey, aSnGroups->MdcaPoint( i ) );
+ aKey->PopL( 3 );
+ }
+ } // screenNames
+
+ aKey->PopL(); // EImpsKeyRecipient
+
+ }
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::SetSenderL
+// ----------------------------------------------------------------------------
+void TImpsCDataUtils::SetSenderL(
+ MImpsKey* aKey,
+ MImpsDataAccessor* aAc,
+ const TDesC* aSender,
+ const TDesC* aGroupId )
+ {
+ aKey->AddL( CREATEKEY( EImpsKeySender, 0 ) );
+
+ if ( aSender && !aGroupId )
+ {
+ // Pure UserID
+ aKey->AddL( CREATEKEY( EImpsKeyUser, 0 ) );
+ aKey->AddL( CREATEKEY( EImpsKeyUserID, 0 ) );
+ aAc->StoreDescL( aKey, *aSender );
+ aKey->PopL( 2 );
+ }
+ else if ( aSender && aGroupId )
+ {
+ // Screen Name
+ aKey->AddL( CREATEKEY( EImpsKeyGroup, 0 ) );
+ aKey->AddL( CREATEKEY( EImpsKeyScreenName, 0 ) );
+ aKey->AddL( CREATEKEY( EImpsKeySName, 0 ) );
+ aAc->StoreDescL( aKey, *aSender );
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyGroupID, 0 ) );
+ aAc->StoreDescL( aKey, *aGroupId );
+ aKey->PopL( 3 );
+ }
+ else if ( !aSender && aGroupId )
+ {
+ // Sender is Group, well ... maybe it is possible in principle
+ aKey->AddL( CREATEKEY( EImpsKeyGroup, 0 ) );
+ aKey->AddL( CREATEKEY( EImpsKeyGroupID, 0 ) );
+ aAc->StoreDescL( aKey, *aGroupId );
+ aKey->PopL( 2 );
+ }
+
+ aKey->PopL();
+ }
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::GetUserListL
+// ----------------------------------------------------------------------------
+void TImpsCDataUtils::GetUserListL(
+ MImpsKey* aPredecessor,
+ MImpsDataAccessor* aAc,
+ CDesCArray* aUsers,
+ CDesCArray* aScreenNames )
+ {
+ // Get first the users
+ TBool more(ETrue);
+ TDesC* myPtr;
+ TInt i = 0; // aux index
+ for ( i = 0; more; i++)
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUser, i ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUserID, 0 ) );
+ if ( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ aUsers->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ aPredecessor->PopL( 2 );
+ }
+ // Then get the screennames
+ more = ETrue;
+ for ( i = 0; more; i++)
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyScreenName, i ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeySName, 0 ) );
+ if ( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ aScreenNames->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ aPredecessor->PopL( 2 );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::GetUrlListL
+// ----------------------------------------------------------------------------
+void TImpsCDataUtils::GetUrlListL(
+ MImpsDataAccessor* aAc,
+ CDesCArray* aUrlList )
+ {
+ CImpsKey* myKey = CImpsKey::NewLC(); // << myKey
+ TImpsDataUtils::AddValuesFromArrayL(
+ myKey,
+ KInviteUserRequestElements,
+ sizeof( KInviteUserRequestElements ) /
+ sizeof( KInviteUserRequestElements[0] ) );
+
+ myKey->AddL( CREATEKEY( EImpsKeyURLList, 0 ) );
+
+ // Get the urls
+ TBool more( ETrue );
+ TDesC* myPtr;
+ TInt i = 0; // aux index
+ for ( i = 0; more; i++)
+ {
+ myKey->AddL( CREATEKEY( EImpsKeyURL, i ) );
+ if ( aAc->RestoreDescL( myKey, myPtr ) )
+ {
+ aUrlList->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ myKey->PopL( );
+ }
+ CleanupStack::PopAndDestroy();
+ }
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::GetModAndAdmL
+// ----------------------------------------------------------------------------
+void TImpsCDataUtils::GetModAndAdmL(
+ MImpsKey* aPredecessor,
+ MImpsDataAccessor* aAc,
+ CDesCArray* aModerators,
+ CDesCArray* aAdmins )
+ {
+ // Get first the moderators
+ TBool more(ETrue);
+ TDesC* myPtr;
+ TInt i = 0; // aux index
+
+ aPredecessor->AddL( CREATEKEY( EImpsKeyMod, 0 ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUserList, 0 ) );
+ for ( i = 0; more; i++)
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUser, i ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUserID, 0 ) );
+ if ( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ aModerators->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ aPredecessor->PopL( 2 );
+ }
+ aPredecessor->PopL( 2 ); // Pop out UserList,Pop out mod
+ // Then get the admins
+ aPredecessor->AddL( CREATEKEY( EImpsKeyAdmin, 0 ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUserList, 0 ) );
+ more = ETrue;
+ for ( i = 0; more; i++)
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUser, i ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUserID, 0 ) );
+ if ( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ aAdmins->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ aPredecessor->PopL( 2 );
+ }
+ aPredecessor->PopL( 2 ); // Pop out UserList,out Admin
+ }
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::GetUsersL
+// ----------------------------------------------------------------------------
+void TImpsCDataUtils::GetUsersL(
+ MImpsKey* aPredecessor,
+ MImpsDataAccessor* aAc,
+ CDesCArray* aUsers )
+ {
+ // Get first the moderators
+ TBool more(ETrue);
+ TDesC* myPtr;
+ TInt i = 0; // aux index
+
+ for ( i = 0; more; i++)
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUser, i ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUserID, 0 ) );
+ if ( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ aUsers->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ aPredecessor->PopL( 2 );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::GetGroupPropertiesL
+// ----------------------------------------------------------------------------
+void TImpsCDataUtils::GetGroupPropertiesL(
+ MImpsKey* aPredecessor,
+ MImpsDataAccessor* aAc,
+ CImpsCommonGroupPropsInt* aCommonP,
+ CImpsPrivateGroupPropsInt* aPrivateP )
+ {
+ // Get first the common properties
+ TBool more(ETrue);
+ TDesC* myPtr;
+ TInt i = 0; // aux index
+
+ aPredecessor->AddL( CREATEKEY( EImpsKeyGroupProperties, 0 ) );
+ for ( i = 0; more; i++)
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyProperty, i ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeyName, 0 ) );
+ if ( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ aPredecessor->PopL( ); // Pop out Name
+ HBufC* newString = myPtr->AllocLC( );
+ HBufC* mystring = newString;
+ mystring->Des( ).UpperCase( );
+ if( mystring->CompareF( KImpsName ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ aCommonP->SetGroupNameL( *myPtr );
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ if( mystring->CompareF( KImpsAccessType ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ HBufC* newString = myPtr->AllocLC( );
+ HBufC* mystring = newString;
+ mystring->Des( ).UpperCase( );
+ if( mystring->CompareF( KImpsOpen ) == 0 )
+ aCommonP->SetOpen( EImpsPropYes );
+ else
+ aCommonP->SetOpen( EImpsPropNo );
+ CleanupStack::PopAndDestroy(1);
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ if( mystring->CompareF( KImpsPrivateMessaging ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ if( myPtr->CompareF( KImpsTrue ) == 0 )
+ aCommonP->SetPrivateAllowed( EImpsPropYes );
+ else
+ aCommonP->SetPrivateAllowed( EImpsPropNo );
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ if( mystring->CompareF( KImpsType ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ HBufC* newString = myPtr->AllocLC( );
+ HBufC* mystring = newString;
+ mystring->Des( ).UpperCase( );
+ if( mystring->CompareF( KImpsPublic ) == 0 )
+ aCommonP->SetPublic( EImpsPropYes );
+ else
+ aCommonP->SetPublic( EImpsPropNo );
+ CleanupStack::PopAndDestroy(1);
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ if( mystring->CompareF( KImpsSearchable ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ if( myPtr->CompareF( KImpsTrue ) == 0 )
+ aCommonP->SetSearchable( EImpsPropYes );
+ else
+ aCommonP->SetSearchable( EImpsPropNo );
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ if( mystring->CompareF( KImpsTopic ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ aCommonP->SetTopicL( *myPtr );
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ if( mystring->CompareF( KImpsMaxActiveUsers ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ TLex lex;
+ TUint32 myValue = 0;
+
+ lex.Assign( *myPtr );
+ lex.Val(myValue, EDecimal, 100000);
+ aCommonP->SetMaxNbrOfUsers( myValue );
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ if( mystring->CompareF( KImpsNumberOfUsers ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ TLex lex;
+ TUint32 myValue = 0;
+
+ lex.Assign( *myPtr );
+ lex.Val(myValue, EDecimal, 100000);
+ aCommonP->SetNbrOfUsers( myValue );
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ // AutoDelete
+ if( mystring->CompareF( KImpsAutoDelete ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ if( myPtr->CompareF( KImpsTrue ) == 0 )
+ aCommonP->SetAutoDelete( EImpsPropYes );
+ else
+ aCommonP->SetAutoDelete( EImpsPropNo );
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ CleanupStack::PopAndDestroy(1);
+ }
+ else
+ {
+ more = EFalse;
+ aPredecessor->PopL( ); // PopOut Name
+ }
+ aPredecessor->PopL( ); // Popout EImpsKeyProperty
+ }
+ aPredecessor->AddL( CREATEKEY( EImpsKeyWelcomeNote, 0 ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeyContentData, 0 ) );
+ TDesC* myPtrWelcome;
+ if( aAc->RestoreDescL( aPredecessor, myPtrWelcome ) )
+ {
+ aCommonP->SetWelcomeL( *myPtrWelcome );
+ }
+ aPredecessor->PopL( 3 ); // Popout EImpsKeyGroupProperties
+
+ // Get own properties
+ more = ETrue ;
+ aPredecessor->AddL( CREATEKEY( EImpsKeyOwnProperties, 0 ) );
+ for ( i = 0; more; i++)
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyProperty, i ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeyName, 0 ) );
+ if ( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ aPredecessor->PopL( ); // Pop out Name
+ HBufC* newString = myPtr->AllocLC( );
+ HBufC* mystring = newString;
+ mystring->Des( ).UpperCase( );
+ if( mystring->CompareF( KImpsPrivateMessaging ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ if( myPtr->CompareF( KImpsTrue ) == 0 )
+ aPrivateP->SetPrivateAllowed( EImpsPropYes );
+ else
+ aPrivateP->SetPrivateAllowed( EImpsPropNo );
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ if( mystring->CompareF( KImpsIsMember ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ if( myPtr->CompareF( KImpsTrue ) == 0 )
+ aPrivateP->SetMember( EImpsPropYes );
+ else
+ aPrivateP->SetMember( EImpsPropNo );
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ if( mystring->CompareF( KImpsPriviledgeLevel ) == 0 )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyValue, 0 ) );
+ if( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ HBufC* newString = myPtr->AllocLC( );
+ HBufC* mystring = newString;
+ mystring->Des( ).UpperCase( );
+ if( mystring->CompareF( KImpsUser ) == 0 )
+ aPrivateP->SetPrivileges( EImpsOrdinary );
+ if( mystring->CompareF( KImpsMod ) == 0 )
+ aPrivateP->SetPrivileges( EImpsModerator );
+ if( mystring->CompareF( KImpsAdmin ) == 0 )
+ aPrivateP->SetPrivileges( EImpsAdmin );
+ CleanupStack::PopAndDestroy(1);
+ }
+ aPredecessor->PopL( ); // Pop out Value
+ }
+ CleanupStack::PopAndDestroy(1);
+ }
+ else
+ {
+ more = EFalse;
+ aPredecessor->PopL( ); // PopOut Name
+ }
+ aPredecessor->PopL( ); // Popout EImpsKeyProperty
+ }
+ aPredecessor->PopL( ); // Popout EImpsKeyOwnProperties
+ }
+
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::GetBlockedListResponseL
+// ----------------------------------------------------------------------------
+//
+void TImpsCDataUtils::GetBlockedListResponseL(
+ MImpsKey* aKey,
+ MImpsDataAccessor* aAc,
+ CPtrC16Array* blockedList,
+ TBool& blockedInUse,
+ CPtrC16Array* grantedList,
+ TBool& grantedInUse
+ )
+ {
+ aKey->Reset();
+ blockedList->Reset();
+ grantedList->Reset();
+ blockedInUse = EFalse;
+ grantedInUse = EFalse;
+
+ TImpsCDataUtils::AddValuesFromArrayL(
+ aKey,
+ KTransContentElements,
+ sizeof( KTransContentElements ) /
+ sizeof( KTransContentElements[0] ) );
+ aKey->AddL( CREATEKEY( EImpsKeyGetBlockedList_Response, 0 ) );
+ aKey->AddL( CREATEKEY( EImpsKeyBlockList, 0 ) );
+ if ( aAc->CheckBranchExistenceL( aKey ) )
+ {
+ // CSP says this is mandatory, DTD not
+ aKey->AddL( CREATEKEY( EImpsKeyInUse, 0 ) );
+ aAc->RestoreBooleanL( aKey, blockedInUse );
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyEntityList, 0 ) );
+ // Search only UserIDs here in this version!!!
+ // Get User*:UserID
+ TBool more(ETrue);
+ TDesC* myPtr;
+ TInt i = 0; // aux index
+ for ( i = 0; more; i++)
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyUserID, i ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ blockedList->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ aKey->PopL();
+ }
+ aKey->PopL();
+ } // EImpsKeyBlockList
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyGrantList, 0 ) );
+
+ if ( aAc->CheckBranchExistenceL( aKey ) )
+ {
+ // CSP says this is mandatory, DTD not
+ aKey->AddL( CREATEKEY( EImpsKeyInUse, 0 ) );
+ aAc->RestoreBooleanL( aKey, grantedInUse );
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyEntityList, 0 ) );
+ // Search only UserIDs here in this version!!!
+ // Get User*:UserID
+ TBool more(ETrue);
+ TDesC* myPtr;
+ TInt i = 0; // aux index
+ for ( i = 0; more; i++)
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyUserID, i ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ grantedList->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ aKey->PopL();
+ }
+ aKey->PopL();
+ } // EImpsKeyGrantList
+
+
+ }
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::SetBlockedListRequestL
+// ----------------------------------------------------------------------------
+//
+void TImpsCDataUtils::SetBlockedListRequestL(
+ MImpsKey* aKey,
+ MImpsDataAccessor* aAc,
+ const MDesCArray* aBlockEntity,
+ const MDesCArray* aUnBlockEntity,
+ TBool aBlockedListInUse,
+ const MDesCArray* aGrantedEntityList,
+ const MDesCArray* aUnGrantEntity,
+ TBool aGrantedListInUse
+ )
+ {
+
+ TImpsCDataUtils::AddValuesFromArrayL(
+ aKey,
+ KTransContentElements,
+ sizeof( KTransContentElements ) /
+ sizeof( KTransContentElements[0] ) );
+ aKey->AddL( CREATEKEY( EImpsKeyBlockEntity_Request, 0 ) );
+ aKey->AddL( CREATEKEY( EImpsKeyBlockList, 0 ) ); // blocklist
+ aKey->AddL( CREATEKEY( EImpsKeyInUse, 0 ) ); // inuse
+ aAc->StoreBooleanL( aKey, aBlockedListInUse );
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyAddList, 0 ) ); // block: addlist
+ TInt i = 0;
+ TInt count = 0;
+ if ( aBlockEntity )
+ {
+ count = aBlockEntity->MdcaCount();
+ }
+ for ( i = 0; i < count; i++ )
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyUserID, i ) );
+ aAc->StoreDescL( aKey, aBlockEntity->MdcaPoint( i ) );
+ aKey->PopL();
+ }
+ // block: renovelist
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyRemoveList, 0 ) );
+ count = 0;
+ if ( aUnBlockEntity )
+ {
+ count = aUnBlockEntity->MdcaCount();
+ }
+ for ( i = 0; i < count; i++ )
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyUserID, i ) );
+ aAc->StoreDescL( aKey, aUnBlockEntity->MdcaPoint( i ) );
+ aKey->PopL();
+ }
+ aKey->PopL(); // addlist
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyGrantList, 0 ) ); // grantList
+ aKey->AddL( CREATEKEY( EImpsKeyInUse, 0 ) );
+ aAc->StoreBooleanL( aKey, aGrantedListInUse );
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyAddList, 0 ) ); // grant:addlist
+ count = 0;
+ if ( aGrantedEntityList )
+ {
+ count = aGrantedEntityList->MdcaCount();
+ }
+ for ( i = 0; i < count; i++ )
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyUserID, i ) );
+ aAc->StoreDescL( aKey, aGrantedEntityList->MdcaPoint( i ) );
+ aKey->PopL();
+ }
+
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyRemoveList, 0 ) ); // grant: removelist
+ count = 0;
+ if ( aUnGrantEntity )
+ {
+ count = aUnGrantEntity->MdcaCount();
+ }
+ for ( i = 0; i < count; i++ )
+ {
+ aKey->AddL( CREATEKEY( EImpsKeyUserID, i ) );
+ aAc->StoreDescL( aKey, aUnGrantEntity->MdcaPoint( i ) );
+ aKey->PopL();
+ }
+ }
+
+
+
+
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::GetDetailedResultL
+// ----------------------------------------------------------------------------
+//
+TBool TImpsCDataUtils::GetDetailedResultL(
+ MImpsKey* aKey,
+ MImpsDataAccessor* aAc,
+ TPtrC& aDescription,
+ CImpsDetailed*& aDetailed )
+ {
+
+ TImpsCDataUtils::AddValuesFromArrayL(
+ aKey,
+ KTransContentElements,
+ sizeof( KTransContentElements ) /
+ sizeof( KTransContentElements[0] ) );
+
+ TBool ret(EFalse);
+ TInt enumi(0);
+ TInt index(0);
+ TInt error(0);
+ TImpsKeyType type;
+ if( aAc->RestoreAlternativeL( aKey, enumi, index, type ) )
+ {
+ switch ( enumi )
+ {
+ case EImpsKeyStatus:
+ case EImpsKeyLogin_Response:
+ case EImpsKeyDisconnect:
+ case EImpsKeyKeepAlive_Response:
+ case EImpsKeyGetPresence_Response:
+ case EImpsKeyListManage_Response:
+ case EImpsKeyGetAttributeList_Response:
+ case EImpsKeySendMessage_Response:
+ case EImpsKeyDeliveryReport_Request:
+ case EImpsKeyLeaveGroup_Response:
+ aKey->AddL( enumi, type );
+ aKey->AddL( EImpsKeyResult );
+ aKey->AddL( EImpsKeyCode );
+ if( aAc->RestoreIntegerL( aKey, error ) )
+ ret = ETrue;
+ break;
+ default:
+ break;
+ }
+ }
+ if( ret )
+ {
+ // Key allready contains code and result
+ // Pop out the code
+ aKey->PopL( );
+
+ TDesC* myPtr;
+ aKey->AddL( CREATEKEY( EImpsKeyDescription, 0 ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ // description found
+ aDescription.Set( *myPtr );
+ }
+
+ // Handle actual detailed part on if
+ // error is 201 or 900
+
+ if ( error == 201 || error == 900 )
+ {
+ TBool more(ETrue);
+ TInt myInt;
+ for ( TInt i = 0; more; i++ )
+ {
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyDetailedResult, i ) );
+ if ( aAc->CheckBranchExistenceL( aKey ) )
+ {
+ CImpsDetailedResult* oneRes = CImpsDetailedResult::NewL();
+ CleanupStack::PushL( oneRes ); // <<< oneRes
+ // Code
+ aKey->AddL( CREATEKEY( EImpsKeyCode, 0 ) );
+ // Notice: if we have validator then we do not need to check that
+ if ( aAc->RestoreIntegerL( aKey, myInt ) )
+ {
+ oneRes->SetCode( myInt );
+ }
+ // Description?
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyDescription, 0 ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ oneRes->SetDescriptorL( *myPtr );
+ }
+ // UserID*
+ TBool more2(ETrue);
+
+ TInt j = 0;
+ for ( j = 0; more2; j++ )
+ {
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyUserID, j ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ CPtrC16Array* users = oneRes->UserIds();
+ users->AppendL( *myPtr );
+ }
+ else
+ {
+ more2 = EFalse;
+ }
+ }
+
+ // GroupId*
+ more2 = ETrue;
+ for ( j = 0; more2; j++ )
+ {
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyGroupID, j ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ CPtrC16Array* grs = oneRes->GroupIds();
+ grs->AppendL( *myPtr );
+ }
+ else
+ {
+ more2 = EFalse;
+ }
+ }
+
+ // ScreenName*
+ more2 = ETrue;
+ for ( j = 0; more2; j++ )
+ {
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyScreenName, j ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ // This bastard has two elements SName, GroupId
+ CPtrC16Array* sn = oneRes->SNames();
+ CPtrC16Array* sng = oneRes->SNameGroups();
+ aKey->AddL( CREATEKEY( EImpsKeySName, 0 ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ))
+ {
+ sn->AppendL( *myPtr );
+ }
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyGroupID, 0 ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ sng->AppendL( *myPtr );
+ }
+ aKey->PopL();
+ }
+ else
+ {
+ more2 = EFalse;
+ }
+ }
+
+ // MessageId*
+ more2 = ETrue;
+ for ( j = 0; more2; j++ )
+ {
+ aKey->ReplaceLastL( CREATEKEY( EImpsKeyMessageID, j ) );
+ if ( aAc->RestoreDescL( aKey, myPtr ) )
+ {
+ CPtrC16Array* msgs = oneRes->MessageIds();
+ msgs->AppendL( *myPtr );
+ }
+ else
+ {
+ more2 = EFalse;
+ }
+ }
+
+ aDetailed->AppendL( oneRes ); // myDet destructor should delete oneRes
+ CleanupStack::Pop(1); // >>> oneRes
+ // Pop out the lasd one
+ aKey->PopL( );
+ }
+ else
+ {
+ more = EFalse;
+ break;
+ }
+ } // for
+ } // 201/900
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// TImpsCDataUtils::SetContentTypeL
+// -----------------------------------------------------------------------------
+//
+void TImpsCDataUtils::SetContentTypeL(
+ MImpsDataAccessor* aAc,
+ TPtrC& aContentType )
+ {
+ CImpsKey* myKey = CImpsKey::NewLC(); // << myKey
+ TImpsDataUtils::AddValuesFromArrayL(
+ myKey,
+ KSendMessageElements,
+ sizeof( KSendMessageElements ) /
+ sizeof( KSendMessageElements[0] ) );
+
+ myKey->AddL( CREATEKEY( EImpsKeyMessageInfo, 0 ) );
+ myKey->AddL( CREATEKEY( EImpsKeyContentType, 0 ) );
+ aAc->StoreDescL( myKey, aContentType );
+ CleanupStack::PopAndDestroy(); // >>> myKey
+ }
+
+// -----------------------------------------------------------------------------
+// TImpsCDataUtils::GetContentEncodingL
+// -----------------------------------------------------------------------------
+//
+void TImpsCDataUtils::GetContentEncodingL(
+ MImpsDataAccessor* aAc,
+ TInt& aEncoding )
+ {
+ CImpsKey* myKey = CImpsKey::NewLC(); // << myKey
+ TImpsDataUtils::AddValuesFromArrayL(
+ myKey,
+ KNewMessageElements,
+ sizeof( KNewMessageElements ) /
+ sizeof( KNewMessageElements[0] ) );
+
+ myKey->AddL( CREATEKEY( EImpsKeyMessageInfo, 0 ) );
+ myKey->AddL( CREATEKEY( EImpsKeyContentEncoding, 0 ) );
+ aAc->RestoreIntegerL( myKey, aEncoding );
+ CleanupStack::PopAndDestroy(); // >>> myKey
+ }
+
+// ----------------------------------------------------------------------------
+// TImpsCDataUtils::GetUserMapListL
+// ----------------------------------------------------------------------------
+void TImpsCDataUtils::GetUserMapListL(
+ MImpsKey* aPredecessor,
+ MImpsDataAccessor* aAc,
+ CDesCArray* aUsers,
+ CDesCArray* aScreenNames )
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUserMapping, 0 ) );
+ // Get first the users
+ TBool more(ETrue);
+ TDesC* myPtr;
+ TInt i = 0; // aux index
+ for ( i = 0; more; i++)
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyMapping, i ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeyUserID, 0 ) );
+ if ( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ aUsers->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ aPredecessor->PopL( 2 );
+ }
+ // Then get the screennames
+ more = ETrue;
+ for ( i = 0; more; i++)
+ {
+ aPredecessor->AddL( CREATEKEY( EImpsKeyMapping, i ) );
+ aPredecessor->AddL( CREATEKEY( EImpsKeySName, 0 ) );
+ if ( aAc->RestoreDescL( aPredecessor, myPtr ) )
+ {
+ aScreenNames->AppendL( *myPtr );
+ }
+ else
+ {
+ more = EFalse;
+ }
+ aPredecessor->PopL( 2 );
+ }
+ aPredecessor->PopL( ); // UserMapping
+ }
+
+// End of File
+