--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/authserverutil.h Tue Aug 31 17:00:08 2010 +0300
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* AuthServerUtil a utility class used by Authentication Server
+* implemented as static functions
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef __AUTHSERVERUTIL_H__
+#define __AUTHSERVERUTIL_H__
+
+#include <f32file.h>
+#include <s32mem.h>
+#include "arrayutils.h"
+
+namespace AuthServer
+{
+
+class AuthServerUtil
+ {
+public:
+ // IPC helper methods
+ template<class T>
+ static HBufC8* FlattenDataArrayLC(const RArray<T>& aArray);
+ template<class T>
+ static void SendDataArrayL(const RMessage2& aMessage, const RArray<T>& aArray, TInt aIpcIndx);
+
+ template<class T>
+ static HBufC8* FlattenDataPointerArrayLC(const RPointerArray<T>& aPointerArray);
+ template<class T>
+ static void SendDataPointerArrayL(const RMessage2& aMessage, const RPointerArray<T>& aPointerArray, TInt aIpcIndx);
+ };
+
+// Templated function definitions must appear in the header file
+
+template<class T>
+HBufC8* AuthServerUtil::FlattenDataArrayLC(const RArray<T>& aArray)
+ {
+ // dynamic buffer since we don't know in advance the size required
+ CBufFlat* tempBuffer = CBufFlat::NewL(KDefaultBufferSize);
+ CleanupStack::PushL(tempBuffer);
+
+ RBufWriteStream stream(*tempBuffer);
+ CleanupClosePushL(stream);
+
+ // externalise the array of objects
+ ExternalizeArrayL(aArray, stream);
+ stream.CommitL();
+
+ // Now, create an HBufC8 from the stream buf's length, and copy
+ // the stream buffer into this descriptor
+ HBufC8* buffer = HBufC8::NewL(tempBuffer->Size());
+ TPtr8 ptr(buffer->Des());
+ tempBuffer->Read(0, ptr, tempBuffer->Size());
+ CleanupStack::PopAndDestroy(2, tempBuffer); // tempBuffer, stream
+
+ CleanupStack::PushL(buffer);
+ return buffer;
+ }
+
+template<class T>
+void AuthServerUtil::SendDataArrayL(const RMessage2& aMessage,
+ const RArray<T>& aArray,
+ TInt aIpcIndx)
+ {
+ HBufC8* buffer = FlattenDataArrayLC(aArray);
+ TPtr8 pbuffer(buffer->Des());
+
+ if (aMessage.GetDesMaxLengthL(aIpcIndx) < buffer->Size())
+ {
+ TInt bufferSize = buffer->Size();
+ TPckgC<TInt> bufferSizePackage(bufferSize);
+ aMessage.WriteL(aIpcIndx, bufferSizePackage);
+ aMessage.Complete(KErrOverflow);
+ }
+ else
+ {
+ aMessage.WriteL(aIpcIndx, *buffer);
+ aMessage.Complete(KErrNone);
+ }
+
+ CleanupStack::PopAndDestroy(buffer);
+ }
+
+template<class T>
+HBufC8* AuthServerUtil::FlattenDataPointerArrayLC(const RPointerArray<T>& aPointerArray)
+ {
+ // dynamic buffer since we don't know in advance the size required
+ CBufFlat* tempBuffer = CBufFlat::NewL(KDefaultBufferSize);
+ CleanupStack::PushL(tempBuffer);
+
+ RBufWriteStream stream(*tempBuffer);
+ CleanupClosePushL(stream);
+
+ // externalise the pointer array
+ ExternalizePointerArrayL(aPointerArray, stream);
+ stream.CommitL();
+
+ // Create an HBufC8 from the stream buf's length, and copy
+ // the stream buffer into this descriptor
+ HBufC8* buffer = HBufC8::NewL(tempBuffer->Size());
+ TPtr8 ptr(buffer->Des());
+ tempBuffer->Read(0, ptr, tempBuffer->Size());
+ CleanupStack::PopAndDestroy(2, tempBuffer); // tempBuffer, stream,
+
+ CleanupStack::PushL(buffer);
+ return buffer;
+ }
+
+template<class T>
+void AuthServerUtil::SendDataPointerArrayL(const RMessage2& aMessage,
+ const RPointerArray<T>& aPointerArray,
+ TInt aIpcIndx)
+ {
+ HBufC8* buffer = FlattenDataPointerArrayLC(aPointerArray);
+ TPtr8 pbuffer(buffer->Des());
+
+ if (aMessage.GetDesMaxLengthL(aIpcIndx) < buffer->Size())
+ {
+ TInt bufferSize = buffer->Size();
+ TPckgC<TInt> bufferSizePackage(bufferSize);
+ aMessage.WriteL(aIpcIndx, bufferSizePackage);
+ aMessage.Complete(KErrOverflow);
+ }
+ else
+ {
+ aMessage.WriteL(aIpcIndx, *buffer);
+ aMessage.Complete(KErrNone);
+ }
+
+ CleanupStack::PopAndDestroy(buffer);
+ }
+
+} // namespace
+#endif //__AUTHSERVERUTIL_H__