Package jade.imtp.leap.http

Source Code of jade.imtp.leap.http.HTTPServerConnection

/*--- formatted by Jindent 2.1, (www.c-lab.de/~jindent) ---*/
/**
* ***************************************************************
* The LEAP libraries, when combined with certain JADE platform components,
* provide a run-time environment for enabling FIPA agents to execute on
* lightweight devices running Java. LEAP and JADE teams have jointly
* designed the API for ease of integration and hence to take advantage
* of these dual developments and extensions so that users only see
* one development platform and a
* single homogeneous set of APIs. Enabling deployment to a wide range of
* devices whilst still having access to the full development
* environment and functionalities that JADE provides.
* Copyright (C) 2001 Telecom Italia LAB S.p.A.
* Copyright (C) 2001 Motorola.
*
* GNU Lesser General Public License
*
* 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,
* version 2.1 of the License.
*
* 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 jade.imtp.leap.http;

//#MIDP_EXCLUDE_FILE
import jade.imtp.leap.JICP.Connection;
import jade.imtp.leap.JICP.JICPPacket;
import jade.imtp.leap.JICP.JICPProtocol;

import java.io.*;
import java.net.*;

/**
* Connection class to handle HTTP requests/responses on
* the server side.
* Note that unlike the HTTPClientConnection that "looks
* like" a permanent pipe where several request/response sessions
* can occur, the HTTPServerConnection handles a single
* request/response session.
* @author Giovanni Caire - TILAB
*/
class HTTPServerConnection extends Connection {

    private Socket sc;
    private InputStream is;
    private OutputStream os;
    private boolean readAvailable;
    private boolean writeAvailable;

    /**
     * Constructor declaration
     */
    public HTTPServerConnection(Socket s) {
        sc = s;
        readAvailable = true;
        writeAvailable = false;
    }

    public JICPPacket readPacket() throws IOException {
        if (readAvailable) {
            JICPPacket pkt = HTTPHelper.readPacketFromHttp(sc.getInputStream());
            readAvailable = false;
            writeAvailable = true;
            return pkt;
        } else {
            throw new IOException("Read not available");
        }
    }

    public int writePacket(JICPPacket pkt) throws IOException {
        if (writeAvailable) {
            try {
                // Create an HTTPResponse and set the serialized JICPPacket as payload
                HTTPResponse response = HTTPHelper.wrapInHttp(pkt);
                // Write the HTTPResponse to os and close the connection
                os = sc.getOutputStream();
                response.writeTo(os);
                os.flush();
                readAvailable = true;
                writeAvailable = false;
                return response.getPayload().length;
            } finally {
                try {
                    close();
                } catch (Exception e) {
                }
            }
        } else {
            throw new IOException("Write not available");
        }
    }

    /**
     */
    public void close() throws IOException {
        readAvailable = false;
        writeAvailable = false;
        try {
            is.close();
        } catch (Exception e) {
        }
        is = null;
        try {
            os.close();
        } catch (Exception e) {
        }
        os = null;
        try {
            sc.close();
        } catch (Exception e) {
        }
        sc = null;
    }

    /**
     */
    public String getRemoteHost() throws Exception {
        return sc.getInetAddress().getHostAddress();
    }
}

TOP

Related Classes of jade.imtp.leap.http.HTTPServerConnection

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.