javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/Args.java
branchRCL_3
changeset 60 6c158198356e
parent 19 04becd199f91
child 83 26b2b12093af
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/Args.java	Thu Jul 15 18:31:06 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/Args.java	Thu Aug 19 09:48:13 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -20,6 +20,7 @@
 
 import com.nokia.mj.impl.installer.utils.InstallerException;
 import com.nokia.mj.impl.installer.utils.Log;
+import com.nokia.mj.impl.utils.Base64;
 import com.nokia.mj.impl.utils.Tokenizer;
 
 import java.util.Hashtable;
@@ -59,6 +60,7 @@
                 //Log.log("Args: " + arg + "=" + value);
             }
         }
+        decodeBase64Args();
     }
 
     /**
@@ -203,7 +205,59 @@
             }
             drive = aDrive.toLowerCase().charAt(0) - 'a';
         }
-        Log.log("Parsed drive " + aDrive + " --> " + drive);
+        Log.log("Args: Parsed drive " + aDrive + " --> " + drive);
         return drive;
     }
+
+    /**
+     * Decodes base64 encoded arguments.
+     * In Symbian environment the decoded argument is UTF-16LE string.
+     *
+     * @see /sf/app/jrt/javacommons/utils/inc/javacommonutils.h,
+     *  wbase64encode()
+     */
+    private void decodeBase64Args()
+    {
+        String base64Value = get("base64");
+        if (base64Value == null || base64Value.length() == 0)
+        {
+            return;
+        }
+        String[] tokens = Tokenizer.split(base64Value, ",");
+        String name = null;
+        String value = null;
+        for (int i = 0; i < tokens.length; i++)
+        {
+            name = tokens[i];
+            value = null;
+            if (name != null && name.length() > 0)
+            {
+                value = get(name);
+            }
+            if (value != null && value.length() > 0)
+            {
+                try
+                {
+                    byte[] valueBytes = Base64.decode(value);
+                    if (valueBytes != null && valueBytes.length > 0)
+                    {
+                        value = new String(valueBytes, "UTF-16LE");
+                        Log.log("Args: Base64 decoded option " +
+                                name + "=" + value);
+                        iArgs.put(name, value);
+                    }
+                    else
+                    {
+                        Log.logError("Args: Base64 decoding failed for " +
+                                     name + "=" + value);
+                    }
+                }
+                catch (Throwable t)
+                {
+                    Log.logError("Args: Base64 decoding failed for " +
+                                 name + "=" + value, t);
+                }
+            }
+        }
+    }
 }