Package freenet.clients.fcp

Source Code of freenet.clients.fcp.SubscribeUSKMessage

/* 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.clients.fcp;

import java.net.MalformedURLException;

import freenet.keys.FreenetURI;
import freenet.keys.USK;
import freenet.node.Node;
import freenet.node.RequestStarter;
import freenet.support.SimpleFieldSet;

/**
* Sent by a client to subscribe to a USK. The client will then be notified by a SubscribedUSKMessage that his
* request has been taken into account and whenever a new latest version of the USK is available.
* There is a flag for whether the node should actively probe for the USK.
*
* SubscribeUSK
* URI=USK@60I8H8HinpgZSOuTSD66AVlIFAy-xsppFr0YCzCar7c,NzdivUGCGOdlgngOGRbbKDNfSCnjI0FXjHLzJM4xkJ4,AQABAAE/index/4
* DontPoll=true // meaning passively subscribe, don't cause the node to actively probe for it
* Identifier=identifier
* End
*/
public class SubscribeUSKMessage extends FCPMessage {

  public static final String NAME = "SubscribeUSK";

  final USK key;
  final boolean dontPoll;
  final String identifier;
  final short prio;
  final short prioProgress;
  final boolean realTimeFlag;
  final boolean sparsePoll;
  final boolean ignoreUSKDatehints;
 
  public SubscribeUSKMessage(SimpleFieldSet fs) throws MessageInvalidException {
    this.identifier = fs.get("Identifier");
    if(identifier == null)
      throw new MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "No Identifier!", null, false);
    String suri = fs.get("URI");
    if(suri == null)
      throw new MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "Expected a URI on SubscribeUSK", identifier, false);
    FreenetURI uri;
    try {
      uri = new FreenetURI(suri);
      key = USK.create(uri);
    } catch (MalformedURLException e) {
      throw new MessageInvalidException(ProtocolErrorMessage.INVALID_FIELD, "Could not parse URI: "+e, identifier, false);
    }
    this.dontPoll = fs.getBoolean("DontPoll", false);
    if(!dontPoll)
      this.sparsePoll = fs.getBoolean("SparsePoll", false);
    else
      sparsePoll = false;
    prio = fs.getShort("PriorityClass", RequestStarter.BULK_SPLITFILE_PRIORITY_CLASS);
    prioProgress = fs.getShort("PriorityClassProgress", (short)Math.max(0, prio-1));
    realTimeFlag = fs.getBoolean("RealTimeFlag", false);
    ignoreUSKDatehints = fs.getBoolean("IgnoreUSKDatehints", false);
  }

  @Override
  public SimpleFieldSet getFieldSet() {
    SimpleFieldSet fs = new SimpleFieldSet(true);
    fs.putSingle("URI", key.getURI().toString());
    fs.put("DontPoll", dontPoll);
    return fs;
  }

  @Override
  public String getName() {
    return NAME;
  }

  @Override
  public void run(FCPConnectionHandler handler, Node node)
      throws MessageInvalidException {
    try {
      new SubscribeUSK(this, node.clientCore, handler);
    } catch (IdentifierCollisionException e) {
      handler.outputHandler.queue(new IdentifierCollisionMessage(identifier, false));
      return;
    }
    SubscribedUSKMessage reply = new SubscribedUSKMessage(this);
    handler.outputHandler.queue(reply);
  }

}
TOP

Related Classes of freenet.clients.fcp.SubscribeUSKMessage

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.