javauis/m2g_qt/javasrc/com/nokia/microedition/m2g/connection/file/M2GConnectionPolicyImpl.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/m2g_qt/javasrc/com/nokia/microedition/m2g/connection/file/M2GConnectionPolicyImpl.java Fri Oct 15 12:29:39 2010 +0300
@@ -0,0 +1,302 @@
+/*
+* Copyright (c) 2005 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:
+*
+*/
+
+package com.nokia.microedition.m2g.connection.file;
+
+import java.io.IOException;
+import java.lang.NullPointerException;
+import java.lang.IllegalArgumentException;
+import java.lang.SecurityException;
+import com.nokia.microedition.m2g.connection.*;
+import com.nokia.microedition.m2g.M2GSVGConstants;
+import com.nokia.mj.impl.utils.Logger;
+
+/**
+ * Connection policy
+ * <b>DRM - DECRYPTED MODE</b>
+ * <p>
+ * <b>Description</b>
+ * <br>
+ * When a MIDlet tries to open a file using a URL that starts with file:// and
+ * ends either with ?drm=dec+display or with ?drm=dec+display+preview,
+ * this is interpreted as a request to open the file for reading of the
+ * content in the plaintext form.
+ * Example URLs:
+ * file:///E:/foo.svg?drm=dec+display
+ * file:///E:/foo.svg?drm=dec+display+preview
+ * <br>
+ * Supported only if the midlet belongs to MANUFACTURER DOMAIN otherwise
+ * java.lang.SecurityException is thrown.
+ * </p>
+ * <br>
+ * <br>
+ * <b>DRM - ENCRYPTED MODE</b>
+ * <p>
+ * <b>Description</b>
+ * <br>
+ * When a MIDlet tries to open a file using a URL that starts with file:// and
+ * ends with ?drm=enc, this is interpreted as a request to open the
+ * file for reading of the content in the encrypted form.
+ * Example URLs:
+ * file:///E:/foo.svg?drm=enc
+ * <br>
+ * Not supported, java.lang.IllegalArgumentException is thrown always.
+ * </p>
+ * <br>
+ * <br>
+ * <b>DRM - DEFAULT MODE</b>
+ * <p>
+ * <b>Description</b>
+ * <br>
+ * When a MIDlet tries to open a file using either a normal file URL or a
+ * file URL that ends with ?drm=preview, this is interpreted as a request to open the
+ * file for reading of the content in the decrypted form.
+ * NOTE: Preview mechanism is not available to MIDlets that don't
+ * belong to MANUFACTURER DOMAIN.
+ * Example URLs:
+ * file:///E:/foo.svg
+ * file:///E:/foo.svg?drm=preview
+ * <br>
+ * Access to SVG document via DOM API is NOT allowed, i.e. only rendering of the
+ * content is allowed if a MIDlet uses a default mode URL.
+ * If it's tryed to access to SVG document via DOM API then
+ * java.lang.SecurityException is thrown.
+ * </p>
+ */
+public class M2GConnectionPolicyImpl implements M2GConnectionPolicy
+{
+ //--------------------------------------------------
+ // STATIC CONSTANTS
+ //--------------------------------------------------
+ public static final String ENC_NOT_SUPPORTED_ESTR =
+ "A URL with an encrypted mode is not supported.";
+ public static final String DRM_PARAMETER =
+ "drm";
+ public static final String DECRYPTED_MODE =
+ "dec";
+ public static final String ENCRYPTED_MODE =
+ "enc";
+ public static final String DEFAULT_MODE =
+ "def";
+ public static final String DEFAULT_PREVIEW_MODE =
+ "def_preview";
+ public static final String DRM_PREVIEW_ATTRIBUTE =
+ "preview";
+ public static final String DRM_DEFAULT_VALUES =
+ "?drm=dec+display";
+ public static final String DRM_DEFAULT_VALUES_AND_PREVIEW =
+ "?drm=dec+display+preview";
+ public static final String DRM_FILE_SUFFIX =
+ "dcf";
+
+ //--------------------------------------------------
+ // VARIABLES
+ //--------------------------------------------------
+ private M2GUrlTokenizer iTokenizer;
+ private boolean iAccessRight = true;
+ private String iMode = null;
+
+ //--------------------------------------------------
+ // METHODS
+ //--------------------------------------------------
+ /**
+ * Ctor
+ */
+ public M2GConnectionPolicyImpl(M2GUrlTokenizer aTokenizer)
+ {
+ iTokenizer = aTokenizer;
+ }
+
+ /**
+ * Check domain
+ * @throws SecurityException if not access rights
+ */
+ public void checkDomain(boolean isManufacturerDomain) throws SecurityException
+ {
+ Logger.LOG(Logger.EJavaUI, Logger.EInfo,
+ "checkDomain(): manufacturer domain=" + isManufacturerDomain
+ + ", mode=" + iMode + ", access right=" + iAccessRight + " - begin");
+
+ // If drm mode then
+ if (iMode != null)
+ {
+ // If dec mode and not manufacturer domain
+ if (iMode.equals(DECRYPTED_MODE))
+ {
+ if (!isManufacturerDomain)
+ {
+ Logger.ELOG(Logger.EJavaUI,
+ "checkDomain() - Not manufacturer and dec: SecurityException");
+ throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
+ }
+ }
+ // If default + preview mode
+ else if (iMode.equals(DEFAULT_PREVIEW_MODE))
+ {
+ if (!isManufacturerDomain)
+ {
+ Logger.ELOG(Logger.EJavaUI,
+ "checkDomain() - Not manufacturer and def+preview: SecurityException");
+ throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
+ }
+ }
+ // If not default mode
+ else if (!iMode.equals(DEFAULT_MODE))
+ {
+ Logger.ELOG(Logger.EJavaUI,
+ "checkDomain() - Not def nor dec: SecurityException");
+ throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
+ }
+ }
+ }
+
+ /**
+ * Check protection type
+ * @param aType If type is null then file is not drm protected.
+ */
+ public void checkProtectionType(String aType)
+ {
+ Logger.LOG(Logger.EJavaUI, Logger.EInfo,
+ "checkProtectionType() type=" + aType + ", mode=" + iMode +
+ ", access right=" + iAccessRight + " - begin");
+
+ if ((aType != null) && (!aType.equals("")))
+ {
+ if (iMode == null)
+ {
+ iMode = DEFAULT_MODE;
+ iAccessRight = false;
+ }
+ }
+
+ Logger.LOG(Logger.EJavaUI, Logger.EInfo,
+ "checkProtectionType() mode=" + iMode + ", access right=" +
+ iAccessRight + " - end");
+ }
+
+ /**
+ * Get access rights
+ * @see M2GConnectionPolicy#getAccessRight()
+ */
+ public boolean getAccessRight()
+ {
+ return iAccessRight;
+ }
+
+ /**
+ * Initialize
+ * @param aTokenizer Tokenizer
+ * @throws IllegalArgumentException if drm with encrypted mode
+ */
+ public void initialize(M2GUrlTokenizer aTokenizer)
+ {
+ iAccessRight = true;
+ iMode = null; // no DRM at all
+ iTokenizer = aTokenizer;
+ String parameters = iTokenizer.getParameters();
+ int pos = -1;
+ // Check if a url is something more than just a normal url.
+ // Is the drm parameter within the parameters?
+ if ((parameters != null) && (pos = parameters.indexOf(DRM_PARAMETER)) != 1)
+ {
+ pos += DRM_PARAMETER.length();
+ // Encrypted mode?
+ if (parameters.indexOf(ENCRYPTED_MODE, pos) != -1)
+ {
+ Logger.ELOG(Logger.EJavaUI, "initialize(): drm - encrypted mode");
+ iAccessRight = false;
+ iMode = ENCRYPTED_MODE;
+ throw new IllegalArgumentException(ENC_NOT_SUPPORTED_ESTR);
+ }
+ // Decrypted mode?
+ else if (parameters.indexOf(DECRYPTED_MODE, pos) != -1)
+ {
+ Logger.LOG(Logger.EJavaUI, Logger.EInfo,
+ "initialize(): drm - decrypted mode");
+ iAccessRight = true;
+ iMode = DECRYPTED_MODE;
+ }
+ // Default + preview mode?
+ else if (parameters.indexOf(DRM_PREVIEW_ATTRIBUTE, pos) != -1)
+ {
+ Logger.LOG(Logger.EJavaUI, Logger.EInfo,
+ "initialize(): drm - decrypted mode");
+ iAccessRight = false;
+ iMode = DEFAULT_PREVIEW_MODE;
+ }
+ // Default mode
+ else
+ {
+ Logger.LOG(Logger.EJavaUI, Logger.EInfo,
+ "initialize(): drm - default mode");
+ iAccessRight = false;
+ iMode = DEFAULT_MODE;
+ }
+ }
+ Logger.LOG(Logger.EJavaUI, Logger.EInfo,
+ "initialize() mode=" + iMode + ", access right="
+ + iAccessRight + " - end");
+ }
+
+ /**
+ * Get drm mode
+ * @return mode. Null if no drm
+ */
+ public String getMode()
+ {
+ Logger.LOG(Logger.EJavaUI, Logger.EInfo,
+ "getMode(): " + iMode + "- begin");
+ return iMode;
+ }
+
+ /**
+ * Get url
+ * @return File url
+ */
+ public String getUrl()
+ {
+ Logger.LOG(Logger.EJavaUI, Logger.EInfo,
+ "getUrl() mode=" + iMode + ", access right=" + iAccessRight + " - begin");
+
+ String url = iTokenizer.getUrl();
+ String parameters = iTokenizer.getParameters();
+ // If normal url or default drm url
+ if ((iMode == null) ||
+ (iMode.equals(DEFAULT_MODE)) ||
+ (iMode.equals(DEFAULT_PREVIEW_MODE)))
+ {
+ Logger.LOG(Logger.EJavaUI, Logger.EInfo,
+ "getUrl() parse default url");
+ // Url with preview attribute?
+ if ((parameters != null) &&
+ (parameters.indexOf(DRM_PREVIEW_ATTRIBUTE) != -1))
+ {
+ url = (iTokenizer.getBasePart() + DRM_DEFAULT_VALUES_AND_PREVIEW);
+ }
+ // Normal file url?
+ else
+ {
+ // File API is able to open normal file without drm protection even
+ // when the url contains the drm parameter
+ url = (iTokenizer.getBasePart() + DRM_DEFAULT_VALUES);
+ }
+ }
+ Logger.LOG(Logger.EJavaUI, Logger.EInfo,
+ "getUrl(): " + url + " - end");
+ return url;
+ }
+}