⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cwspsession.java

📁 WAP Stack implementation jwap.sourceforge.net
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/** * JWAP - A Java Implementation of the WAP Protocols * Copyright (C) 2001-2004 Niko Bender * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package net.sourceforge.jwap.wsp;import java.net.InetAddress;import java.net.SocketException;import java.util.Vector;import net.sourceforge.jwap.util.Logger;import net.sourceforge.jwap.wsp.pdu.CWSPConnect;import net.sourceforge.jwap.wsp.pdu.CWSPConnectReply;import net.sourceforge.jwap.wsp.pdu.CWSPDisconnect;import net.sourceforge.jwap.wsp.pdu.CWSPGet;import net.sourceforge.jwap.wsp.pdu.CWSPHeaders;import net.sourceforge.jwap.wsp.pdu.CWSPPDU;import net.sourceforge.jwap.wsp.pdu.CWSPPost;import net.sourceforge.jwap.wsp.pdu.CWSPRedirect;import net.sourceforge.jwap.wsp.pdu.CWSPReply;import net.sourceforge.jwap.wsp.pdu.CWSPResume;import net.sourceforge.jwap.wsp.pdu.CWSPSuspend;import net.sourceforge.jwap.wsp.pdu.EWSPCorruptPDUException;import net.sourceforge.jwap.wtp.CWTPEvent;import net.sourceforge.jwap.wtp.CWTPSocket;import net.sourceforge.jwap.wtp.EWTPAbortedException;import net.sourceforge.jwap.wtp.IWTPTransaction;import net.sourceforge.jwap.wtp.IWTPUpperLayer;/** * This class implements the WSP state machine named "management entity" * in the Wireless Session Protocol Specification by the <a href="http://www.wapforum.org">WAP-forum</a>. * <br> * Using this class the programmer can use all methods of the WSP layer. * To use the WAP-Stack with a class corresponding to HttpURLConnection * please use WapURLConnection by calling<br> * <code><br> * URL example = new URL("wap://wap.nokia.com");<br> * URLConnection con = example.getConnection();<br> * </code> * @author Niko Bender */public class CWSPSession implements IWTPUpperLayer {    // SESSION states    public static final short STATE_NULL = 0;    public static final short STATE_CONNECTING = 1;    public static final short STATE_CONNECTED = 2;    public static final short STATE_SUSPENDED = 3;    public static final short STATE_RESUMING = 4;    // Abort reason code assignments    // Table 35 in spec.    public static final short ABORT_PROTOERR = 0xE0;    public static final short ABORT_DISCONNECT = 0xE1;    public static final short ABORT_SUSPEND = 0xE2;    public static final short ABORT_RESUME = 0xE3;    public static final short ABORT_CONGESTION = 0xE4;    public static final short ABORT_CONNECTERR = 0xE5;    public static final short ABORT_MRUEXCEEDED = 0xE6;    public static final short ABORT_MOREXCEEDED = 0xE7;    public static final short ABORT_PEERREQ = 0xE8;    public static final short ABORT_NETERR = 0xE9;    public static final short ABORT_USERREQ = 0xEA;    public static final short ABORT_USERRFS = 0xEB;    public static final short ABORT_USERPND = 0xEC;    public static final short ABORT_USERDCR = 0xED;    public static final short ABORT_USERDCU = 0xEE;    static Logger logger = Logger.getLogger(CWSPSession.class);    public String[] states = {        "STATE_NULL", "STATE_CONNECTING", "STATE_CONNECTED", "STATE_SUSPENDED",        "STATE_RESUMING"    };    private boolean isSuspended = false;    private short suspendCode;    private boolean isDisconnected = false;    private short disconnectCode;    /**     * the actual session state     */    private short state = STATE_NULL;    /**     * the acual transaction concering the session management     */    private IWTPTransaction wtp;    /**     * the Layer below     */    private CWTPSocket socket;    /**     * Holds all pending CWSPMethodManagers of this session     */    private Vector methods = new Vector();    /**     * Holds all pending CWSPPushManagers of this session     */    private Vector pushes = new Vector();    private IWSPUpperLayer upperlayer;    //////////////////////////////////////////////////////////////////////////////    ////////////////////////////// Protocol parameters and variables - sect. 7.1.3    /**     * Maximum Receive Unit (sect. 7.1.3.1)     */    private int MRU = 1400;    /**     * Maximum Outstanding Method Requests (sect. 7.1.3.2)     */    private int MOM = 1;    /**     * Maximum Outstanding Push Requests (sect. 7.1.3.3)     */    private int MOP = 1;    /**     * keeps track of the number of push transactions in process in the client     * (sect. 7.1.4.2)     */    // pushs.size();    /**     * saves the session identifier (sect. 7.1.4.3)     * We will get this from the ConnectReply by the Server     */    private long session_id = 0;        /**     * do we use IWSPUpperLayer2 or      */    private byte version = 0;    /**     * Construct a new WSP Session.     * @param toAddress address of the WAP gateway     * @param toPort WAP gateway port     * @param upperLayer WSP Upper Layer     * @param verbose verbose logging     * @throws SocketException if the underlying WTP socket cannot be created     *      */    public CWSPSession(InetAddress toAddress, int toPort,        IWSPUpperLayer upperLayer, boolean verbose) throws SocketException     {        this(toAddress, toPort, null, CWTPSocket.DEFAULT_PORT, upperLayer, verbose);    }        /**     * Construct a new WSP Session.     * @param toAddress address of the WAP gateway     * @param toPort WAP gateway port     * @param localAddress local address to bind to (null to let the OS decide)     * @param localPort local port to bind to (use 0 to let the OS pick a free port)     * @param upperLayer WSP Upper Layer     * @param verbose verbose logging     * @throws SocketException if the underlying WTP socket cannot be created     */    public CWSPSession(InetAddress toAddress, int toPort,         InetAddress localAddress, int localPort,        IWSPUpperLayer upperLayer, boolean verbose) throws SocketException     {        if ((upperLayer != null) && upperLayer instanceof IWSPUpperLayer2) {            this.version = 2;        } else {            this.version = 1;        }                // Make sure that the logging system is initialized        Logger.initLogSystem(verbose);        this.upperlayer = upperLayer;        socket = new CWTPSocket(toAddress, toPort, localAddress, localPort, this);        // there can not be any session with the same peer address quadruplet!    }    /**     * Construct a new WSP session.     * @param toAddress the address of the WAP gateway     * @param toPort WAP gateway port     * @param upperLayer WSP Upper Layer     * @throws SocketException if the underlying WTP socket cannot be created     */    public CWSPSession(InetAddress toAddress, int toPort,        IWSPUpperLayer upperLayer) throws SocketException {        this(toAddress, toPort, upperLayer, false);    }        /**     * Construct a new WSP session.     * @param toAddress the address and port of the WAP gateway     * @param upperLayer WSP Upper Layer     * @param verbose verbose logging     * @throws SocketException if the underlying WTP socket cannot be created     */    public CWSPSession(CWSPSocketAddress address, IWSPUpperLayer upperLayer,         boolean verbose) throws SocketException {        this(address, null, upperLayer, verbose);    }        /**     * Construct a new WSP session.      * @param address the address and port of the WAP gateway     * @param localAddress the local address and port or null     * @param upperLayer WSP Upper Layer     * @param verbose verbose logging     * @throws SocketException if the underlying WTP socket cannot be created     */    public CWSPSession(CWSPSocketAddress address, CWSPSocketAddress localAddress,        IWSPUpperLayer upperLayer, boolean verbose) throws SocketException {        this(address.getAddress(), address.getPort(),             localAddress==null?null:localAddress.getAddress(),            localAddress==null?CWTPSocket.DEFAULT_PORT:localAddress.getPort(),            upperLayer, verbose);    }    //////////////////////////////////////////////////////////////////////////////    /////////////////////////////////////////////// WSP service primitives - S-*.*    /**     * Establish a WSP connection.     */    public synchronized void s_connect() {      s_connect(null);    }        /**      * Establish a WSP connection using WSP headers     * @param headers the WSP headers to set or null     */    public synchronized void s_connect(CWSPHeaders headers) {        if (state == STATE_NULL) {            abortAllMethods(ABORT_DISCONNECT);            abortAllPushes(ABORT_DISCONNECT);            // prepare WSP Connect PDU            CWSPConnect pdu = new CWSPConnect();            pdu.setHeaders(headers);            // prepare WTP Service Primitive            CWTPEvent initPacket = new CWTPEvent(pdu.toByteArray(),                    CWTPEvent.TR_INVOKE_REQ);            // construct transaction with initPacket            wtp = socket.tr_invoke(this, initPacket, false,                    IWTPTransaction.CLASS_TYPE_2);            setState(STATE_CONNECTING);        }    }    /**     * S-Disconnect.req     * @return S-Disconnect.ind     */    public synchronized void s_disconnect() {        if (state == STATE_CONNECTING) {            wtp.abort(ABORT_DISCONNECT);            abortAllMethods(ABORT_DISCONNECT);            s_disconnect_ind(ABORT_USERREQ);            setState(STATE_NULL);        } else if (state == STATE_CONNECTED) {            abortAllMethods(ABORT_DISCONNECT);            abortAllPushes(ABORT_DISCONNECT);            CWSPDisconnect pdu = new CWSPDisconnect(session_id);            CWTPEvent initPacket = new CWTPEvent(pdu.toByteArray(),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -