--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpavcontroller/upnpxmlparser/src/upnpxmlstringutility.cpp Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,140 @@
+/*
+* 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: Utility for string operations in UpnpXmlParser component
+*
+*/
+
+
+
+
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include "upnpxmlstringutility.h"
+
+_LIT( KComponentLogfile, "upnpxmlstringutility.txt" );
+#include "upnplog.h"
+
+
+// CONSTANTS
+/**
+ * Range of control characters taken from http:
+ * //www.w3.org/International/questions/qa-controls.
+ * Remove characters that belong to "C0" range U+0000-U+001F
+ * (0-31) and also DEL (Delete) U+007F (127). C1 range U+0080-U+009F
+ * (128-159) is ignored for now because it seems to contain ok
+ * characters like € (euro sign).
+ * */
+
+const TInt KC0RangeStart = 0;
+const TInt KC0RangeEnd = 31;
+const TInt KDeleteChar = 127;
+
+// All control characters start with &#
+_LIT8( KXmlControlCharStart, "&#" );
+// All xml entities end with ; because they are of for &entityname;
+_LIT8( KXmlEntityEnd, ";" );
+
+// ============================ LOCAL FUNCTIONS =============================
+
+// --------------------------------------------------------------------------
+// UpnpXmlStringUtility::RemoveXmlControlCharactersL
+//---------------------------------------------------------------------------
+EXPORT_C HBufC8* UpnpXmlStringUtility::RemoveXmlControlCharactersL(
+ const TDesC8& aXmlData )
+ {
+ __LOG( "UpnpXmlStringUtility::RemoveXmlControlCharactersL Begin" );
+ HBufC8* filtrateBuf = NULL;
+ //if no data
+ if ( aXmlData.Length() != 0 )
+ {
+ //The offset of the KXmlControlCharStart from the beginning of \
+ this descriptor's data
+
+ TInt controlCharStartOffset = aXmlData.Find( KXmlControlCharStart );
+ // to make sure the data contain control character.
+ if ( controlCharStartOffset != KErrNotFound )
+ {
+ filtrateBuf = aXmlData.AllocL();
+ CleanupStack::PushL( filtrateBuf );
+ //The offset of the KXmlEntityEnd from the beginning of this \
+ descriptor's data
+ TInt controlCharEndOffset = 0;
+ //The offset of the buffer who not be checked
+ TInt partofBufferOffset = 0;
+
+ //circle find control character.
+ while( controlCharStartOffset != KErrNotFound )
+ {
+ controlCharStartOffset += partofBufferOffset;
+ partofBufferOffset = controlCharStartOffset;
+ controlCharEndOffset = ( filtrateBuf->Des().
+ Mid( controlCharStartOffset ).Find( KXmlEntityEnd ) );
+ if ( controlCharEndOffset != KErrNotFound )
+ {
+ TLex8 tempLex( filtrateBuf->Des().Mid( partofBufferOffset
+ + KXmlControlCharStart().Length() ,controlCharEndOffset
+ - KXmlControlCharStart().Length() ) );
+ //Parses the string to extract a signed 8-bit integer.
+ TInt tempNum;
+ User::LeaveIfError( tempLex.Val( tempNum ) );
+ if( ( tempNum >= KC0RangeStart && tempNum <= KC0RangeEnd )
+ || ( tempNum == KDeleteChar ) )
+ {
+ __LOG( "UpnpXmlStringUtility::\
+RemoveXmlControlCharactersL delete control character" );
+ TPtrC8 tmpBuf = filtrateBuf->Des().Mid(
+ partofBufferOffset, controlCharEndOffset +
+ KXmlEntityEnd().Length() );
+ __LOG8( tmpBuf);
+
+ filtrateBuf->Des().Delete( partofBufferOffset,
+ controlCharEndOffset + KXmlEntityEnd().Length() );
+ }
+ else
+ {
+ __LOG1( "UpnpXmlStringUtility::\
+RemoveXmlControlCharactersL between &# and; the Number is %d",tempNum );
+ }
+ controlCharStartOffset = partofBufferOffset;
+ controlCharStartOffset = ( filtrateBuf->Des().
+ Mid( controlCharStartOffset ).
+ Find( KXmlControlCharStart ) );
+ }
+ else
+ {
+ __LOG( "UpnpXmlStringUtility::RemoveXmlControlCharactersL\
+ Can not find EntityEnd" );
+ User::Leave( KErrArgument );
+ }
+ }
+ CleanupStack::Pop( filtrateBuf );
+ }
+ else
+ {
+ // not contains control character.
+ __LOG( "UpnpXmlStringUtility::RemoveXmlControlCharactersL Can \
+ not find control character!" );
+ }
+ }
+ else
+ {
+ //xml data is NULL
+ __LOG( "UpnpXmlStringUtility::RemoveXmlControlCharactersL the \
+ xml data is NULL" );
+ }
+ __LOG( "UpnpXmlStringUtility::RemoveXmlControlCharactersL End" );
+ return filtrateBuf;
+ }