javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/gcf/protocol/http/Protocol.java
branchRCL_3
changeset 19 04becd199f91
child 34 71c436fe3ce0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/gcf/protocol/http/Protocol.java	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2009 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.http;
+
+import java.io.IOException;
+import com.nokia.mj.impl.rt.support.Jvm;
+import com.nokia.mj.impl.utils.Logger;
+import com.nokia.mj.impl.rt.support.ApplicationUtils;
+import com.nokia.mj.impl.http.HttpConnectionNative;
+import com.nokia.mj.impl.gcf.utils.URI;
+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;
+
+public class Protocol
+{
+    int iNativeHttpSessionHandle = 0;
+    private String iFullUrl = null;
+
+    public Protocol()
+    {
+        Logger.LOG(Logger.ESOCKET, Logger.EInfo, "+Http::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;
+        int responsetimeout = -1;
+        ConnectionManager cminstance = null;
+        AccessPoint apn = null;
+        iFullUrl = "http:" + aUri;
+        Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+                   "http +openConnection - aURi = " + iFullUrl);
+
+        // security related stuff
+        ApplicationUtils appUtils = ApplicationUtils.getInstance();
+        HttpPermissionImpl per = new HttpPermissionImpl("http://*");
+        appUtils.checkPermission(per);
+        // security related stuff
+
+
+        // Setting of response timeout using ";nokia_timeout=" parameter at the end of the url (even after IAP/SNAP id)
+        // specific scenario identified only for java intaller
+        // format : http://www.google.co.in/index.html;nokia_apnid=11;nokia_timeout=10
+        if (ApplicationInfo.getInstance().getRuntimeType() == ApplicationInfo.RUNTIME_INSTALLER)
+        {
+            index = aUri.indexOf(";nokia_timeout=");
+            if (index != -1)
+            {
+                String timeoutString = aUri.substring(index);
+                int equalindex = timeoutString.indexOf('=');
+                String temp = timeoutString.substring(equalindex + 1);
+                try
+                {
+                    responsetimeout = Integer.parseInt(temp);
+                }
+                catch (NumberFormatException e)
+                {
+                    throw new IllegalArgumentException("Invalid url: "
+                                                       + iFullUrl);
+                }
+                urls = aUri.substring(0, index);
+                aUri = urls;
+            }
+        }
+
+
+
+        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: "
+                                                       + iFullUrl);
+                }
+            }
+            else
+            {
+                throw new IllegalArgumentException("Invalid url: " + iFullUrl);
+            }
+            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: "
+                                                           + iFullUrl);
+                    }
+                }
+                else
+                {
+                    throw new IllegalArgumentException("Invalid url: "
+                                                       + iFullUrl);
+                }
+                urls = aUri.substring(0, index);
+            }
+            else
+            {
+                urls = aUri;
+            }
+        }
+
+
+        Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+                   "http +openConnection -after removing nokia_apnid : " + urls);
+        // final int handle = _createHttpSession(0, 0, 0);
+        // Logger.LOG(Logger.ESOCKET, Logger.EInfo,"Http Protocol - after
+        // createSession");
+
+        cminstance = ConnectionManager.getInstance();
+        Logger.LOG(Logger.ESOCKET, Logger.EInfo, "33");
+        // get application suite uid
+        try
+        {
+            Uid appSuite = ApplicationInfo.getInstance().getSuiteUid();
+            try
+            {
+                apn = cminstance.getNetworkAccessPoint(appSuite, aUri);
+            }
+            catch (Exception e)
+            {
+                Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+                           "+http 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 ");
+        }
+
+        Logger.LOG(Logger.ESOCKET, Logger.EInfo, "appending http to uri");
+        String uri = "http:" + urls;
+        return new HttpConnectionNative(0, uri, aMode, aTimeouts, cminstance,
+                                        apn, responsetimeout);
+    }
+
+    public void temp(int a)
+    {
+        Logger.LOG(Logger.ESOCKET, Logger.EInfo, "temp()");
+    }
+
+    private void ensureValidURI(URI aUri) throws IOException
+    {
+
+        Logger.LOG(Logger.ESOCKET, Logger.EInfo, "+ensureValidURI " + aUri);
+
+        // host analyse:
+        String host = aUri.getHost();
+
+        if (host == null || host.length() == 0)
+        {
+            // Invalid host
+            throw new IllegalArgumentException("Invalid url: " + iFullUrl);
+        }
+
+        if (host.indexOf(' ') > -1)
+        {
+            // Invalid host
+            throw new IllegalArgumentException("Invalid url: " + iFullUrl);
+        }
+
+        // port analyse
+        String port = aUri.getPort();
+        Logger.LOG(Logger.ESOCKET, Logger.EInfo, "*ensureValidURI " + port);
+        // getPort() returns empty string ("") if URI doesn't contain port
+
+        if (port != null && port.length() != 0)
+        {
+            // are there digits only?
+            // (if there is invalid char then Long.parseLong() method gives
+            // "FormatNumberException" automatically)
+            for (int i = 0; i < port.length(); i++)
+            {
+                if (!Character.isDigit(port.charAt(i)))
+                {
+                    throw new IllegalArgumentException("Invalid url: "
+                                                       + iFullUrl);
+                }
+            }
+
+            long portL = Long.parseLong(port);
+            // TCP port is 16-bit number
+            if (portL > 65535)
+            {
+                throw new IllegalArgumentException("Invalid url: " + iFullUrl);
+            }
+        }
+        Logger.LOG(Logger.ESOCKET, Logger.EInfo, "- ensureValidURI");
+    }
+}