protocolpush.java
来自「This is a resource based on j2me embedde」· Java 代码 · 共 217 行
JAVA
217 行
/* * * * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package com.sun.midp.io.j2me.push;import com.sun.midp.midlet.MIDletSuite;import java.io.IOException;import javax.microedition.io.ConnectionNotFoundException;import com.sun.midp.main.Configuration;import com.sun.midp.io.HttpUrl;/** * JSR's implementations will provide push behaviour. */public abstract class ProtocolPush { /** * Number of delimiter characters in IP v4 address */ protected static final int IP4_DELIMITER_COUNT = 3; /** * Get instance of this class. * @return class instance */ protected abstract ProtocolPush getInstance(); /** * Get instance of class depends on protocol. * @param connection generic connection <em>protocol</em>, <em>host</em> * and <em>port number</em> * (optional parameters may be included * separated with semi-colons (;)) * @return class instance * @exception IllegalArgumentException if the connection string is not * valid * @exception ConnectionNotFoundException if the protocol is not * supported or invalid */ public static ProtocolPush getInstance(String connection) throws IllegalArgumentException, ConnectionNotFoundException { /* Verify that the connection requested is valid. */ if (connection == null || connection.length() == 0) { throw new IllegalArgumentException("Connection is empty"); } int index = connection.indexOf(':'); if (index == -1) { throw new IllegalArgumentException("Protocol field is omitted"); } String className = Configuration.getProperty (connection.substring(0, index).toLowerCase()); if (className == null || className.length() == 0) { throw new ConnectionNotFoundException("Protocol is invalid " + "or not supported"); } try { ProtocolPush cl = (ProtocolPush)Class.forName(className).newInstance(); return cl.getInstance(); } catch (ClassNotFoundException exc) { throw new ConnectionNotFoundException("Protocol is not supported"); } catch (ClassCastException exc) { throw new RuntimeException( "System error loading class " + className + ": " + exc); } catch (IllegalAccessException exc) { throw new RuntimeException( "System error loading class " + className + ": " + exc); } catch (InstantiationException exc) { throw new RuntimeException( "System error loading class " + className + ": " + exc); } } /** * Called when registration is checked. * @param connection generic connection <em>protocol</em>, <em>host</em> * and <em>port number</em> * (optional parameters may be included * separated with semi-colons (;)) * @param midlet class name of the <code>MIDlet</code> to be launched, * when new external data is available * @param filter a connection URL string indicating which senders * are allowed to cause the MIDlet to be launched * @exception IllegalArgumentException if the connection string is not * valid * @exception ClassNotFoundException if the <code>MIDlet</code> class * name can not be found in the current * <code>MIDlet</code> suite */ public abstract void checkRegistration(String connection, String midlet, String filter); /** * Called when registration is established. * @param midletSuite MIDlet suite for the suite registering, * the suite only has to implement isRegistered, * checkForPermission, and getID. * @param connection generic connection <em>protocol</em>, <em>host</em> * and <em>port number</em> * (optional parameters may be included * separated with semi-colons (;)) * @param midlet class name of the <code>MIDlet</code> to be launched, * when new external data is available * @param filter a connection URL string indicating which senders * are allowed to cause the MIDlet to be launched * @exception IllegalArgumentException if the connection string is not * valid * @exception IOException if the connection is already * registered or if there are insufficient resources * to handle the registration request * @exception ClassNotFoundException if the <code>MIDlet</code> class * name can not be found in the current * <code>MIDlet</code> suite */ public abstract void registerConnection(MIDletSuite midletSuite, String connection, String midlet, String filter) throws IllegalArgumentException, IOException, ClassNotFoundException; /** * Check if host is not present. * @param connection generic connection <em>protocol</em>, <em>host</em> * and <em>port number</em> * (optional parameters may be included * separated with semi-colons (;)) * @param checkPort check if the port is not omitted * @exception IllegalArgumentException if the connection contains no port * value * @exception ConnectionNotFoundException if connection contains any host * name */ protected void checkIsNotHost(String connection, boolean checkPort) throws IllegalArgumentException, ConnectionNotFoundException { HttpUrl url = new HttpUrl(connection); // Server connections do not have a host if (url.host != null) { throw new ConnectionNotFoundException( "Connection not supported"); } if (checkPort && url.port == -1) { new IllegalArgumentException("Port missing"); } } /** * Check IP filter is valid. * @param filter a connection URL string indicating which senders * are allowed to cause the MIDlet to be launched * @exception IllegalArgumentException if the connection contains no port * value */ protected void checkIIPFilter(String filter) throws IllegalArgumentException { int len = filter.length(); int dotCount = 0; boolean dotUnexpected = true; boolean failed = false; /* IP address characters only for other connections. */ /* Check for special case - single * char. This is valid filter. */ if (!"*".equals(filter)) { /* All other filters shall be in IPv4 format. */ for (int i = 0; i < len && !failed; i++) { char c = filter.charAt(i); if (c == '.') { if (dotUnexpected || i == len-1) { failed = true; } else { dotCount++; if (dotCount > IP4_DELIMITER_COUNT) { failed = true; } dotUnexpected = true; } } else if (c != '?' && c != '*' && !('0' <= c && c <= '9')) { /* The only acceptable characters are [*?0-9] */ failed = true; } else { dotUnexpected = false; } } if (failed || dotCount < IP4_DELIMITER_COUNT) { throw new IllegalArgumentException("IP Filter \"" + filter + "\" is invalid"); } } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?