javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/gcf/protocol/http/Protocol.java
--- /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");
+ }
+}