Package freenet.pluginmanager

Source Code of freenet.pluginmanager.PluginReplySender

/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.pluginmanager;

import freenet.clients.fcp.FCPConnectionInputHandler;
import freenet.clients.fcp.FCPPluginMessage;
import freenet.support.SimpleFieldSet;
import freenet.support.api.Bucket;
import freenet.support.io.ArrayBucket;

public abstract class PluginReplySender {
 
  final String pluginname;
   
    /**
     * Identifier of the connection to the client. Randomly chosen for each connection.
     */
    final String clientIdentifier;
 
  /**
     * Specified by the client through FCP via the "Identifier" field.
     * As the client can specify this freely, it is not sufficient as an ID. Thats why there also is another {@link #clientIdentifier}.
   */
  final String clientSideIdentifier;
   
 
    /**
     * @param clientIdentifier Identifier of the particular network connection to the client. Should be a random UUID chosen for each network connection.
     * @param clientSideIdentifier Specified by the client through FCP via the "Identifier" field. As the client can specify this freely, it is not sufficient
     *                             as an ID. Thats why there also is another parameter clientIdentifier.
     */
  public PluginReplySender(String pluginname2, String clientIdentifier, String clientSideIdentifier) {
    pluginname = pluginname2;
    this.clientIdentifier = clientIdentifier;
    this.clientSideIdentifier = clientSideIdentifier;
  }
 
  public String getPluginName() {
    return pluginname;
  }
 
  /**
     * @return An identifier of the connection specified by the client through FCP via the "Identifier" field.
     *         As the client can specify this freely, it is not sufficient as an ID. Thats why there also is {@link #getConnectionIdentifier()}.
   */
  public String getIdentifier() {
    return clientSideIdentifier;
  }

  public void send(SimpleFieldSet params) throws PluginNotFoundException {
    send(params, (Bucket)null);
  }
 
  public void send(SimpleFieldSet params, byte[] data) throws PluginNotFoundException {
    if (data == null)
      send(params, (Bucket)null);
    else
      send(params, new ArrayBucket(data));
  }
 
  public abstract void send(SimpleFieldSet params, Bucket bucket) throws PluginNotFoundException;

    /**
     * <p>Gets an unique identifier of the connection to the client.</p>
     * <p><b>Notice:</b> The client can cause one network connection to appear with different connection IDs by setting a different <i>Identifier</i> field in
     * the contents of multiple FCP messages: The <i>Identifier</i> set by the client is part of the returned connection ID. See {@link #getIdentifier()}.</p>
     *
     * <p>This allows you to identify whether two PluginReplySender objects which you received through multiple callbacks of
     * {@link FredPluginFCP#handle(PluginReplySender, SimpleFieldSet, Bucket, int)} belong to the same client connection:<br/>
     * If the connection is the same, and the FCP field <i>Identifier</i> by the client is the same, the return value of this function is
     * {@link String#equals(Object)}.<br/>
     * If the return value is not equals(), then the PlugplinReplySenders belong to a different client, to a different connection of the same client, or
     * to a different <i>Identifier</i> specified by the client.<br/></p>
     *
     * <p>This mechanism is necessary because the {@link FCPConnectionInputHandler} will create a fresh PluginReplySender for each message it receives from
     * the same client. <br/>Therefore, object identity of the PluginReplySender is not sufficient for identifying connections.<br/>
     * (Actually it creates a fresh {@link FCPPluginMessage} for every processes message, which in turn creates a fresh PluginReplySender).</p>
     */
    public final String getConnectionIdentifier() {
        return clientIdentifier + ":" + clientSideIdentifier;
    }
}
TOP

Related Classes of freenet.pluginmanager.PluginReplySender

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.