Package freenet.clients.fcp

Source Code of freenet.clients.fcp.SendPeerMessage

package freenet.clients.fcp;

import freenet.node.DarknetPeerNode;
import freenet.node.Node;
import freenet.node.PeerNode;
import freenet.support.SimpleFieldSet;

public abstract class SendPeerMessage extends DataCarryingMessage {

  protected final String identifier;
  protected final String nodeIdentifier;
  private final long dataLength;

  public SendPeerMessage(SimpleFieldSet fs) throws MessageInvalidException {
    identifier = fs.get("Identifier");
    nodeIdentifier = fs.get("NodeIdentifier");
    String dataLengthString = fs.get("DataLength");
    if(dataLengthString != null)
      try {
        //May throw NumberFormatException
        dataLength = Long.parseLong(dataLengthString, 10);
        if(dataLength < 0)
          throw new Exception();
      } catch (Exception e) {
        throw new MessageInvalidException(ProtocolErrorMessage.INVALID_FIELD, "Invalid DataLength field", identifier, false);
      }
    else
      dataLength = -1;
  }

  @Override
  public SimpleFieldSet getFieldSet() {
    SimpleFieldSet fs = new SimpleFieldSet(true);
    fs.putSingle("Identifier", identifier);
    fs.putSingle("NodeIdentifier", nodeIdentifier);
    if(dataLength >= 0)
      fs.put("DataLength", dataLength);
    return fs;
  }

  @Override
  public void run(FCPConnectionHandler handler, Node node) throws MessageInvalidException {
    PeerNode pn = node.getPeerNode(nodeIdentifier);
    if (pn == null) {
      FCPMessage msg = new UnknownNodeIdentifierMessage(nodeIdentifier, identifier);
      handler.outputHandler.queue(msg);
    } else if (!(pn instanceof DarknetPeerNode)) {
      throw new MessageInvalidException(ProtocolErrorMessage.DARKNET_ONLY,
          getName() + " only available for darknet peers", identifier, false);
    } else {
      int nodeStatus = handleFeed(((DarknetPeerNode) pn));
      handler.outputHandler.queue(new SentPeerMessage(identifier, nodeStatus));
    }
  }

  protected abstract int handleFeed(DarknetPeerNode pn) throws MessageInvalidException;

  @Override
  String getIdentifier() {
    return null;
  }

  @Override
  boolean isGlobal() {
    return false;
  }

  @Override
  long dataLength() {
    return dataLength;
  }
 
}
TOP

Related Classes of freenet.clients.fcp.SendPeerMessage

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.