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

📄 cbjxtransport.java

📁 JXTA&#8482 is a set of open, generalized peer-to-peer (P2P) protocols that allow any networked devi
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 2001-2007 Sun Microsystems, Inc.  All rights reserved. *   *  The Sun Project JXTA(TM) Software License *   *  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 Sun Microsystems, Inc. for JXTA(TM) technology."  *     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. *   *  JXTA is a registered trademark of Sun Microsystems, Inc. in the United  *  States and other countries. *   *  Please see the license information page at : *  <http://www.jxta.org/project/www/license.html> for instructions on use of  *  the license in source files. *   *  ==================================================================== *   *  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.  */package net.jxta.impl.endpoint.cbjx;import net.jxta.document.Advertisement;import net.jxta.document.MimeMediaType;import net.jxta.document.TextDocument;import net.jxta.endpoint.ByteArrayMessageElement;import net.jxta.endpoint.EndpointAddress;import net.jxta.endpoint.EndpointListener;import net.jxta.endpoint.EndpointService;import net.jxta.endpoint.Message;import net.jxta.endpoint.MessageElement;import net.jxta.endpoint.MessageFilterListener;import net.jxta.endpoint.MessageReceiver;import net.jxta.endpoint.MessageSender;import net.jxta.endpoint.Messenger;import net.jxta.endpoint.TextDocumentMessageElement;import net.jxta.endpoint.WireFormatMessage;import net.jxta.endpoint.WireFormatMessageFactory;import net.jxta.exception.PeerGroupException;import net.jxta.id.ID;import net.jxta.id.IDFactory;import net.jxta.impl.endpoint.JxtaMessageMessageElement;import net.jxta.impl.membership.pse.PSECredential;import net.jxta.impl.membership.pse.PSEMembershipService;import net.jxta.impl.membership.pse.PSEUtils;import net.jxta.logging.Logging;import net.jxta.membership.MembershipService;import net.jxta.peer.PeerID;import net.jxta.peergroup.PeerGroup;import net.jxta.platform.Module;import net.jxta.protocol.ModuleImplAdvertisement;import java.io.IOException;import java.security.cert.Certificate;import java.security.interfaces.RSAPublicKey;import java.util.Collections;import java.util.Iterator;import java.util.logging.Level;import java.util.logging.Logger;/** * A JXTA {@link net.jxta.endpoint.MessageTransport} implementation which * which provides message verification by examining message signatures. A * virtual transport, the messages are transfered between peers using some * other message transport. */public class CbJxTransport implements Module, MessageSender, MessageReceiver, EndpointListener {    /**     * Logger     */    private final static Logger LOG = Logger.getLogger(CbJxTransport.class.getName());    /**     * the name of the cbjx valid element     */    public static final String CBJX_MSG_NS = "cbjx";    /**     * the name of the cbjx crypto element     */    static final String CBJX_MSG_INFO = "CryptoInfo";    /**     * the name of the cbjx body element     */    static final String CBJX_MSG_BODY = "Body";    /**     * the name of the cbjx body element     */    static final String CBJX_MSG_SIG = "Signature";    /**     * the cbjx protocol name     */    static final String cbjxProtocolName = "cbjx";    /**     * the cbjx service name     */    static final String cbjxServiceName = "CbJxTransport";    /**     * the local peer ID     */    static PeerID localPeerID = null;    /**     * the endpoint address of this peer     */    static EndpointAddress localPeerAddr = null;    /**     * the peer group to which this module belongs     */    PeerGroup group = null;    /**     * the endpoint service in my group     */    EndpointService endpoint = null;    /**     * the membership service in my group     */    PSEMembershipService membership = null;    /**     * Default constructor     */    public CbJxTransport() {}    /**     * {@inheritDoc}     */    public void init(PeerGroup group, ID assignedID, Advertisement impl) throws PeerGroupException {        this.group = group;        ModuleImplAdvertisement implAdvertisement = (ModuleImplAdvertisement) impl;        localPeerID = group.getPeerID();        CbJxTransport.localPeerAddr = new EndpointAddress(cbjxProtocolName, group.getPeerID().getUniqueValue().toString(), null                ,                null);        if (Logging.SHOW_CONFIG && LOG.isLoggable(Level.CONFIG)) {            StringBuilder configInfo = new StringBuilder("Configuring CBJX Message Transport : " + assignedID);            if (implAdvertisement != null) {                configInfo.append("\n\tImplementation :");                configInfo.append("\n\t\tModule Spec ID: ").append(implAdvertisement.getModuleSpecID());                configInfo.append("\n\t\tImpl Description : ").append(implAdvertisement.getDescription());                configInfo.append("\n\t\tImpl URI : ").append(implAdvertisement.getUri());                configInfo.append("\n\t\tImpl Code : ").append(implAdvertisement.getCode());            }            configInfo.append("\n\tGroup Params :");            configInfo.append("\n\t\tGroup : ").append(group);            configInfo.append("\n\t\tPeer ID : ").append(group.getPeerID());            configInfo.append("\n\tConfiguration :");            configInfo.append("\n\t\tPublic Address : ").append(CbJxTransport.localPeerAddr);            LOG.config(configInfo.toString());        }    }    /**     * {@inheritDoc}     */    public int startApp(String[] arg) {        endpoint = group.getEndpointService();        if (null == endpoint) {            if (Logging.SHOW_WARNING && LOG.isLoggable(Level.WARNING)) {                LOG.warning("Stalled until there is an endpoint service");            }            return START_AGAIN_STALLED;        }        MembershipService groupMembership = group.getMembershipService();        if (null == groupMembership) {            if (Logging.SHOW_WARNING && LOG.isLoggable(Level.WARNING)) {                LOG.warning("Stalled until there is a membership service");            }            return START_AGAIN_STALLED;        }        if (!(groupMembership instanceof PSEMembershipService)) {            if (Logging.SHOW_SEVERE && LOG.isLoggable(Level.SEVERE)) {                LOG.severe("CBJX Transport requires PSE Membership Service");            }            return -1;        }        membership = (PSEMembershipService) groupMembership;        if (endpoint.addMessageTransport(this) == null) {            if (Logging.SHOW_SEVERE && LOG.isLoggable(Level.SEVERE)) {                LOG.severe("Transport registration refused");            }            return -1;        }        // XXX bondolo@jxta.org 20030526 check for errors        endpoint.addIncomingMessageListener(this, cbjxServiceName, null);        endpoint.addIncomingMessageFilterListener(new CbJxInputFilter(), null, null);        // endpoint.addOutgoingMessageFilterListener( new CbJxOutputFilter(), null, null );        if (Logging.SHOW_INFO && LOG.isLoggable(Level.INFO)) {            LOG.info("CbJxTransport started");        }        return 0;    }    /**     * {@inheritDoc}     */    public void stopApp() {        if (endpoint != null) {            // FIXME 20030516 bondolo@jxta.org remove filters and listener            endpoint.removeMessageTransport(this);            endpoint = null;        }        if (Logging.SHOW_INFO && LOG.isLoggable(Level.INFO)) {            LOG.info("CbJxTransport stopped");        }    }    /**     * {@inheritDoc}     */    public EndpointAddress getPublicAddress() {        return CbJxTransport.localPeerAddr;    }    /**     * {@inheritDoc}     */    public boolean isConnectionOriented() {        // since we rely on other endpoint protocol we are not connection oriented        return false;    }    /**     * {@inheritDoc}     */    public boolean allowsRouting() {        // since we are using the endpoint router        // the endpoint router cannot use our endpoint to send messages        return false;    }    /**     * {@inheritDoc}     */    public EndpointService getEndpointService() {        return (EndpointService) endpoint.getInterface();    }    /**     * {@inheritDoc}     */    public Object transportControl(Object operation, Object value) {        return null;    }    /**     * {@inheritDoc}     */    public Iterator getPublicAddresses() {        return Collections.singletonList(getPublicAddress()).iterator();    }    /**     * {@inheritDoc}     */    public String getProtocolName() {        return cbjxProtocolName;    }    /**     * {@inheritDoc}     */    public Messenger getMessenger(EndpointAddress dest, Object hintIgnored) {        try {            return new CbJxMessenger(this, dest, hintIgnored);        } catch (IOException failed) {            if (Logging.SHOW_WARNING && LOG.isLoggable(Level.WARNING)) {                LOG.log(Level.WARNING, "Failed to create cbjx messenger", failed);            }            return null;        }    }    /**     * {@inheritDoc}     */    @Deprecated

⌨️ 快捷键说明

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