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

📄 secureinputpipeimpl.java

📁 jxme的一些相关程序,主要是手机上程序开发以及手机和计算机通信的一些程序资料,程序编译需要Ant支持
💻 JAVA
字号:
/*
 *  $Id: SecureInputPipeImpl.java,v 1.2 2002/03/04 21:42:59 echtcherbina Exp $
 *
 *  Copyright (c) 2001 Sun Microsystems, Inc.  All rights
 *  reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *
 *  1. Redistributions of source code must retain the above copyright
 *  notice, this list of conditions and the following disclaimer.
 *
 *  2. Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in
 *  the documentation and/or other materials provided with the
 *  distribution.
 *
 *  3. The end-user documentation included with the redistribution,
 *  if any, must include the following acknowledgment:
 *  "This product includes software developed by the
 *  Sun Microsystems, Inc. for Project JXTA."
 *  Alternately, this acknowledgment may appear in the software itself,
 *  if and wherever such third-party acknowledgments normally appear.
 *
 *  4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must
 *  not be used to endorse or promote products derived from this
 *  software without prior written permission. For written
 *  permission, please contact Project JXTA at http://www.jxta.org.
 *
 *  5. Products derived from this software may not be called "JXTA",
 *  nor may "JXTA" appear in their name, without prior written
 *  permission of Sun.
 *
 *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 *  DISCLAIMED.  IN NO EVENT SHALL SUN MICROSYSTEMS OR
 *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 *  SUCH DAMAGE.
 *  ====================================================================
 *
 *  This software consists of voluntary contributions made by many
 *  individuals on behalf of Project JXTA.  For more
 *  information on Project JXTA, please see
 *  <http://www.jxta.org/>.
 *
 *  This license is based on the BSD license adopted by the Apache Foundation.
 *
 *  $Id: SecureInputPipeImpl.java,v 1.2 2002/03/04 21:42:59 echtcherbina Exp $
 */
package net.jxta.impl.pipe;
import java.io.*;
import org.apache.log4j.Category; import org.apache.log4j.Priority;

import net.jxta.endpoint.*;
import net.jxta.impl.endpoint.*;
import net.jxta.peergroup.*;
import net.jxta.impl.peergroup.*;
import net.jxta.pipe.*;

/**
 * This class implements the Input Secure PipeServiceImpl.
 *
 */

public class SecureInputPipeImpl implements InputPipe, EndpointListener {

    private final static Category LOG = Category.getInstance(SecureInputPipeImpl.class.getName());

    private EndpointReceiveQueue queue = null;
    private String pipeId = null;
    private RefPeerGroup myGroup = null;
    private PipeResolver myPipeResolver = null;
    private boolean closed = false;
    private boolean lflag = false;
    PipeMsgListener listener= null;


    /**
     *Constructor for the InputPipeImpl object
     *
     * @param  g     Description of Parameter
     * @param  r     Description of Parameter
     * @param  ipId  Description of Parameter
     * @since 1.0
     */
    public SecureInputPipeImpl(PeerGroup g,
			       PipeResolver r,
			       PipeID ipId) {

        myGroup = (RefPeerGroup) g;
        pipeId = ipId.toString();
        myPipeResolver = r;

        if (LOG.isEnabledFor(Priority.DEBUG)) LOG.debug("Constructor:");
        if (LOG.isEnabledFor(Priority.DEBUG)) LOG.debug("    pipeId = " + ipId);

        // Initialize the user queue
        queue = new EndpointReceiveQueue();

        // Register this InputPipe with the endpoint's general
        // demux mechanism.
        try {
            myGroup.getEndpointService().addListener("PipeService" + ipId, this);
        } catch (Exception e) {
            if (LOG.isEnabledFor(Priority.DEBUG)) LOG.debug("Constructor failed with " + e);
            // XXX: something should maybe be done here
        }

        // Register this input pipe
        myPipeResolver.register(pipeId, this);
    }

  /**
     *Constructor for the InputPipeImpl object
     *
     * @param  g     Description of Parameter
     * @param  r     Description of Parameter
     * @param  ipId  Description of Parameter
     * @since 1.0
     */
    public SecureInputPipeImpl(PeerGroup g,
			       PipeResolver r,
			       PipeID ipId,
			       PipeMsgListener listener) {

        // listener based inputpipe
        lflag = true ;
        this.listener = listener;
        myGroup = (RefPeerGroup) g;
        pipeId = ipId.toString();
        myPipeResolver = r;

        if ( LOG.isDebugEnabled() ) {
         if (LOG.isEnabledFor(Priority.DEBUG)) LOG.debug("Constructor:");
         if (LOG.isEnabledFor(Priority.DEBUG)) LOG.debug("    pipeId = " + ipId);
        }

        // Register this InputPipe with the endpoint's general
        // demux mechanism.
        try {
            myGroup.getEndpointService().addListener("PipeService" + ipId, this);
        } catch (Exception e) {
            if (LOG.isEnabledFor(Priority.DEBUG)) LOG.debug("Constructor failed with " + e);
            // XXX: something should maybe be done here
        }

        // Register this input pipe
        myPipeResolver.register(pipeId, this);
    }


  /**
     * wait for a message
     *
     * @return                           Message  message received
     * @exception  InterruptedException  Description of Exception
     * @since 1.0
     */

    public Message waitForMessage() throws InterruptedException {

        if ( ! lflag ) {
         return queue.waitForMessage();
        } else {
         return null;
        }
    }


  /**
     * Poll for a message from the pipe
     *
     * FIXME bondolo@jxta.org 20010606    This should be calling queue.next
     * and not waiting at all. waitForMessage should be the method to call
     * with a timeout per normal java behaivour and with zero meaning wait
     * forever.
     *
     * @param  timeout                   Description of Parameter
     * @return                           Message message received
     * @exception  InterruptedException  Description of Exception
     * @since 1.0
     */
    public Message poll(int timeout) throws InterruptedException {

        if ( ! lflag ) {
           return queue.poll(timeout);
        } else {
            return null;
        }
    }


  /**
     * close the the pipe
     *
     * @since 1.0
     */
    public synchronized void close() {

        // First remove the queue for the general demux
        // XXX: what to do if unregister fails ?

        boolean res =
                myGroup.getEndpointService().removeListener("PipeService" + pipeId, this);

        // Remove the input pipe from the pipe resolver.
        myPipeResolver.forget(pipeId);

        // Close the queue
        if ( ! lflag ) {
            queue.close();
        }
        closed = true;
    }


 /** 
     * EndpointListener API
     *
     * @param  msg      Description of Parameter
     * @param  srcAddr  Description of Parameter
     * @param  dstAddr  Description of Parameter
     * @since 1.0
     */
    public void processIncomingMessage(
            Message msg,
            EndpointAddress srcAddr,
            EndpointAddress dstAddr
            ) {

        if (LOG.isEnabledFor(Priority.DEBUG)) LOG.debug("Receive message from " + srcAddr.toString());
        if (LOG.isEnabledFor(Priority.DEBUG)) LOG.debug("                  to " + dstAddr.toString());

	
        // header check, security and such should be done here
        // before pushing the message onto the queue.
	String proto = dstAddr.getProtocolName();

	if (!proto.equals ("jxtatls")) {
	    // This message was not sent to the TLS transport. It is not secured.
	    // SecureInputPipe will allow the incoming message only if it originated 
	    // locally
	    if (!srcAddr.getProtocolAddress().equals (dstAddr.getProtocolAddress())) {
		// Different source. Discard message.
		return;
	    }
	}

        // determine where demux the msg, to listener, or onto the queue
        if ( lflag) {
            PipeMsgEvent event = new PipeMsgEvent (this, msg);
            listener.pipeMsgEvent ( event );
        } else {
         queue.push(msg);
        }
    }


  /**
     * close the queue
     *
     * @exception  Throwable  Description of Exception
     * @since 1.0
     */
    protected void finalize() throws Throwable {
        if ( !closed ) {
            close();
        }
    }
}

⌨️ 快捷键说明

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