--- /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