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 + -
显示快捷键?