diff -r e5618cc85d74 -r 6c158198356e javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/Args.java --- 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); + } + } + } + } }