localconnectivityservice/obexserviceman/utils/src/obexutilsopaquedata.cpp
branchRCL_3
changeset 40 52a167391590
parent 0 c3e98f10fcf4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/obexserviceman/utils/src/obexutilsopaquedata.cpp	Wed Sep 01 12:20:40 2010 +0100
@@ -0,0 +1,141 @@
+/*
+* Copyright (c) 2002 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: 
+*
+*/
+
+
+// INCLUDE FILES
+#include "obexutilsopaquedata.h"
+
+// ================= MEMBER FUNCTIONS =======================
+EXPORT_C CObexUtilsOpaqueData::CObexUtilsOpaqueData(const TDesC8& aDes):iData(aDes)
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// GetString
+// Get string from current location. Return error code if invalid string format.
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CObexUtilsOpaqueData::GetString(TBuf8<KObexUtilsMaxOpaqueDataStringLen> &aString)
+    {
+    // reset the output string
+    aString.Zero();
+
+    if (iData.Eos())
+        return KErrNotFound ;
+    TChar c;
+    TInt ret;
+    while(c=iData.Get())
+        {
+        if(c=='\\')
+            {
+            switch(iData.Peek())
+                {
+            case 'x':
+            case 'X':
+                // parse hex number
+                TUint8 val;
+                iData.Inc();
+                ret=iData.Val(val,EHex);
+                if(ret == KErrNone)
+                    aString.Append(val);
+                else
+                    return ret;
+                break;
+            case '|':
+                iData.Inc();
+                aString.Append('|');
+                break;
+            case '\\':
+                iData.Inc();
+                aString.Append('\\');
+                break;
+            default:
+                // if not a decimal number, then bad format
+                TInt8 dval;
+                ret=iData.Val(dval);
+                if(ret == KErrNone)
+                    aString.Append(dval);
+                else
+                    return ret;
+                }
+            }
+        else if(c=='|')
+            {
+            if(iData.Peek()=='|')
+                {
+                // delimiter "||" found, end of the string
+                iData.Inc();
+                break;
+                }
+            else
+                aString.Append(c);
+            }
+        else
+            aString.Append(c);
+        }
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// GetNumber
+// Get number from current location. Return error code if invalid number format.
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CObexUtilsOpaqueData::GetNumber(TUint &aNumber)
+    {
+    if (iData.Eos())
+        return KErrNotFound ;
+
+    //  skip dilimiter
+    if(iData.Peek()=='|')
+        {
+        iData.Inc();
+        if(iData.Peek()=='|')
+            iData.Inc();
+        else
+            return KErrNotFound ;
+        }
+
+    if(iData.Peek()=='0')
+        {
+        iData.Inc();
+        if(iData.Peek()=='x' || iData.Peek()=='X')
+            {
+            iData.Inc();
+            return iData.Val(aNumber,EHex);
+            }
+        else
+            {
+            iData.UnGet();
+            return iData.Val(aNumber,EOctal);
+            }
+        }
+    else
+        {
+        return iData.Val(aNumber);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// IsString
+// Peek if next entry is string by looking for a '\'.
+// -----------------------------------------------------------------------------
+EXPORT_C TBool CObexUtilsOpaqueData::IsString()
+    {
+    return iData.Peek()=='\\';
+    }
+