javaextensions/wma/sms_cbs/javasrc/com/nokia/mj/impl/smscbs/utils/WmaUrl.java
branchRCL_3
changeset 14 04becd199f91
child 24 6c158198356e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/wma/sms_cbs/javasrc/com/nokia/mj/impl/smscbs/utils/WmaUrl.java	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,244 @@
+/*
+* 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:
+*
+*/
+
+package com.nokia.mj.impl.smscbs.utils;
+
+/**
+ * Provides some utilities to: 1. Parse an URI to obtain it's main URI
+ * components. 2. Concatenates a base URI with a relative URI as specified.
+ *
+ * @author Nokia Corporation
+ */
+public final class WmaUrl
+{
+    public static final boolean SERVER_CONNECTION = true;
+
+    public static final boolean CLIENT_CONNECTION = false;
+
+    private static final String SMS_PROTOCOL = "sms";
+
+    private static final String CBS_PROTOCOL = "cbs";
+
+    private static final String INVALID_URL = "Invalid URL: ";
+
+    private static final int MAX_PORT = 65535;
+
+    private static final int[] RESTRICTED_PORTS =
+    {
+        2805, // WAP WTA secure connection-less session service
+        2923, // WAP WTA secure session service
+        2948, // WAP Push connectionless session service (client side)
+        2949, // WAP Push secure connectionless session service (client side)
+        5502, // Service Card reader
+        5503, // Internet access configuration reader
+        5508, // Dynamic Menu Control Protocol
+        5511, // Message Access Protocol
+        5512, // Simple Email Notification
+        9200, // WAP connectionless session service
+        9201, // WAP session service
+        9202, // WAP secure connectionless session service
+        9203, // WAP secure session service
+        9207, // WAP vCal Secure
+        49996,// SyncML OTA configuration
+        49999 // WAP OTA configuration
+    };
+
+    private int iPortVal;
+
+    private String iHost;
+
+    private String iPort;
+
+    private String iAbsoluteUri;
+
+    private String iProtocol;
+
+    public WmaUrl(String aUri)
+    {
+        iAbsoluteUri = aUri;
+    }
+
+    public WmaUrl(String aUri, String aProtocol)
+    {
+        iAbsoluteUri = aProtocol + aUri;
+    }
+
+    /**
+     * Method to retrieve the protocol
+     * @return the uri string
+     */
+    public String getProtocol()
+    {
+        return iProtocol;
+    }
+
+    /**
+     * Validates the Uri.
+     * @throws IllegalArgumentException it uri is not valid
+     */
+    public void validateUri() throws IllegalArgumentException
+    {
+        int index = iAbsoluteUri.indexOf("://");
+        int nameLength = iAbsoluteUri.length();
+        if ((index == -1) || (index != iAbsoluteUri.indexOf(':'))
+                || ((index + 3) > nameLength))
+        {
+            throw new IllegalArgumentException(INVALID_URL.concat(iAbsoluteUri));
+        }
+        iProtocol = iAbsoluteUri.substring(0, index);
+        if (iProtocol.compareTo(SMS_PROTOCOL) != 0
+                && iProtocol.compareTo(CBS_PROTOCOL) != 0)
+        {
+            throw new IllegalArgumentException(INVALID_URL
+                                               .concat(iAbsoluteUri));
+        }
+        String subUri = iAbsoluteUri.substring(index + 3, nameLength);
+        nameLength = subUri.length();
+        index = subUri.indexOf(':');
+        if (index >= 0)
+        {
+            iHost = subUri.substring(0, index);
+            iPort = subUri.substring(index + 1, nameLength);
+        }
+        else if (index < 0)
+        {
+            iHost = subUri;
+        }
+        if (0 != iHost.length())
+        {
+            if (0 == iProtocol.compareTo(CBS_PROTOCOL))
+            {
+                throw new IllegalArgumentException(INVALID_URL
+                                                   .concat(iAbsoluteUri));
+            }
+            nameLength = iHost.length();
+            validateHost(iHost, nameLength);
+        }
+        if ("".equals(iPort))
+        {
+            throw new IllegalArgumentException(INVALID_URL
+                                               .concat(iAbsoluteUri));
+        }
+        if (iPort != null)
+        {
+            validatePort(iPort);
+        }
+    }
+
+    public String getHost()
+    {
+        return iHost;
+    }
+
+    public String getPort()
+    {
+        return iPort;
+    }
+
+    public int getPortVal()
+    {
+        return iPortVal;
+    }
+
+    public String getAbsoluteUri()
+    {
+        return iAbsoluteUri;
+    }
+    /**
+    * Returns boolean value indicating whether it is a
+    * server/client connection.
+    */
+    public boolean isServerModeConnection()
+    {
+        if (iHost.length() == 0)
+        {
+            return SERVER_CONNECTION;
+        }
+        return CLIENT_CONNECTION;
+    }
+    /**
+     * Validates the Port
+     *
+     * @param aPort -Port that to be validated
+     * @throws IllegalArgumentException if the Port is invalid
+     * @throws SecurityException if the Port is restricted Port
+     * @see
+     */
+    private void validatePort(String aPort)
+    {
+        for (int p = 0; p < aPort.length(); p++)
+        {
+            if (!Character.isDigit(aPort.charAt(p)))
+            {
+                throw new IllegalArgumentException(INVALID_URL
+                                                   .concat(iAbsoluteUri));
+            }
+        }
+        iPortVal = Integer.parseInt(aPort);
+        if (iPortVal > MAX_PORT || iPortVal < 0)
+        {
+            throw new IllegalArgumentException("Invalid Port: ".concat(aPort));
+        }
+    }
+
+    public boolean isRestrictedPort()
+    {
+        final int aLength = RESTRICTED_PORTS.length;
+        if (iProtocol != CBS_PROTOCOL)
+        {
+            for (int p = 0; p < aLength; p++)
+            {
+                if (iPortVal < RESTRICTED_PORTS[p])
+                {
+                    break;
+                }
+                if (iPortVal == RESTRICTED_PORTS[p])
+                {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Validates the Host
+     *
+     * @param aHost - Host to be validated
+     * @param aLength - length of the Host
+     * @throws IllegalArgumentException if the Host is invalid
+     * @see
+     */
+    private void validateHost(String aHost, int aLength)
+    {
+        char ch;
+        for (int p = 0; p < aLength; p++)
+        {
+            ch = aHost.charAt(p);
+            if (p == 0 && ch == '+')
+            {
+                continue;
+            }
+            else if (!Character.isDigit(ch))
+            {
+                throw new IllegalArgumentException(INVALID_URL
+                                                   .concat(iAbsoluteUri));
+            }
+        }
+    }
+
+}
\ No newline at end of file