javacommons/gcfprotocols/socket/socket/javasrc.s60/com/nokia/mj/impl/gcf/protocol/socket/Protocol.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/gcfprotocols/socket/socket/javasrc.s60/com/nokia/mj/impl/gcf/protocol/socket/Protocol.java Thu May 27 12:49:31 2010 +0300
@@ -0,0 +1,207 @@
+/*
+* 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.gcf.protocol.socket;
+
+import java.io.IOException;
+import com.nokia.mj.impl.rt.support.Jvm;
+import com.nokia.mj.impl.gcf.utils.*;
+import com.nokia.mj.impl.socket.SocketConnectionImpl;
+import com.nokia.mj.impl.socket.ServerSocketConnectionImpl;
+import com.nokia.mj.impl.rt.support.ApplicationUtils;
+import com.nokia.mj.impl.gcf.utils.UrlParser;
+import com.nokia.mj.impl.utils.Logger;
+import com.nokia.mj.impl.connectionmanager.ConnectionManager;
+import com.nokia.mj.impl.connectionmanager.AccessPoint;
+import com.nokia.mj.impl.rt.support.ApplicationInfo;
+import com.nokia.mj.impl.utils.Uid;
+
+/*
+ * Implementation of Connector class of GCF framework The protocol class is the
+ * entry point for connection types When connector.open is called, the VM finds
+ * the com.nokia.mj.impl.gcf.protocol."scheme".Protocol class which implements
+ * openConnection method which is called by the Vm.
+ */
+
+public class Protocol
+{
+
+ static
+ {
+ try
+ {
+ Jvm.loadSystemLibrary("javasocket");
+ }
+ catch (Exception e)
+ {
+ Logger.ELOG(Logger.ESOCKET, e.toString());
+ }
+ }
+
+ public Protocol()
+ {
+
+ }
+
+ public javax.microedition.io.Connection openConnection(String aUri,
+ int aMode, boolean aTimeouts) throws IOException
+ {
+
+ String apnstring = null;
+ String urls = null;
+ int apnid = -1;
+ int index = -1;
+ String fullurl = "socket:" + aUri;
+ ConnectionManager cminstance = null;
+ AccessPoint apn = null;
+ index = aUri.indexOf(";nokia_netid=");
+ if (index != -1)
+ {
+ apnstring = aUri.substring(index);
+ int equalindex = apnstring.indexOf('=');
+ if (equalindex != -1)
+ {
+ String temp = apnstring.substring(equalindex + 1);
+ try
+ {
+ apnid = Integer.parseInt(temp);
+ }
+ catch (NumberFormatException e)
+ {
+ throw new IllegalArgumentException("Invalid URL: "
+ + fullurl);
+ }
+ }
+ else
+ {
+ throw new IllegalArgumentException("Invalid URL: " + fullurl);
+ }
+ urls = aUri.substring(0, index);
+ }
+ else
+ {
+ index = aUri.indexOf(";nokia_apnid=");
+ if (index != -1)
+ {
+ apnstring = aUri.substring(index);
+ int equalindex = apnstring.indexOf('=');
+ if (equalindex != -1)
+ {
+ String temp = apnstring.substring(equalindex + 1);
+ try
+ {
+ apnid = Integer.parseInt(temp);
+ }
+ catch (NumberFormatException e)
+ {
+ throw new IllegalArgumentException("Invalid URL: "
+ + fullurl);
+ }
+ }
+ else
+ {
+ throw new IllegalArgumentException("Invalid URL: "
+ + fullurl);
+ }
+ urls = aUri.substring(0, index);
+ }
+ else
+ {
+ urls = aUri;
+ }
+ }
+ Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+ "socket +openConnection -after removing nokia_apnid : " + urls);
+
+ UrlParser SocURL = new UrlParser("socket", urls);
+ Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+ "socket - protocol class : port = " + SocURL.port);
+ if (SocURL.getPort() == 8080 || SocURL.getPort() == 443
+ || SocURL.getPort() == 80)
+ {
+ if (ApplicationInfo.getInstance().getRuntimeType().equals(
+ ApplicationInfo.RUNTIME_MIDP) == true)
+ {
+ if ((ApplicationInfo.getInstance().getProtectionDomain()
+ .equals(ApplicationInfo.UNIDENTIFIED_THIRD_PARTY_DOMAIN)) == true)
+ {
+ Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+ "Throwing security exception for restricted port");
+ throw new SecurityException("Unable to open socket connection: port "+SocURL.getPort()+" is restricted");
+ }
+ }
+ }
+ if (SocURL.host == null)
+ {
+ Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+ "socket - protocol class : server connection");
+ ApplicationUtils appUtils = ApplicationUtils.getInstance();
+ SocketPermissionImpl per = new SocketPermissionImpl("socket://");
+ appUtils.checkPermission(per);
+ /* security related stuff */
+ Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+ "socket - protocol class : after security check");
+ return new ServerSocketConnectionImpl(SocURL, aMode);
+ }
+ else
+ {
+ Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+ "socket - protocol class : client connection");
+ if (SocURL.port == -1)
+ {
+ /* client connecction should have a port number */
+ throw new IllegalArgumentException("Invalid URL: " + fullurl);
+ }
+ ApplicationUtils appUtils = ApplicationUtils.getInstance();
+ SocketPermissionImpl per = new SocketPermissionImpl("socket://*");
+ appUtils.checkPermission(per);
+ /* security related stuff */
+ Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+ "socket - protocol class : after security check");
+
+ // remove comments if open c patch available
+ cminstance = ConnectionManager.getInstance();
+ Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+ "after getting ConnectionManager instance");
+ // get application suite uid
+ try
+ {
+ Uid appSuite = ApplicationInfo.getInstance().getSuiteUid();
+ try
+ {
+ // remove comments if open c patch available
+ apn = cminstance.getNetworkAccessPoint(appSuite, aUri);
+ }
+ catch (Exception e)
+ {
+ Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+ "+secureconnection Protocol getNetworkAccessPoint threw Exception");
+ }
+ Logger.LOG(Logger.ESOCKET, Logger.EInfo, "apn.getType = "
+ + apn.getType() + " apn.getNapId= " + apn.getNapId());
+ }
+ catch (Exception e)
+ {
+ Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+ "getSuiteUid exception ");
+ }
+
+ return new SocketConnectionImpl(SocURL, aMode, -1, cminstance, apn);
+ }
+ }
+}