Package freenet.clients.fcp

Source Code of freenet.clients.fcp.ModifyPersistentRequest

/* 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 freenet.client.async.ClientContext;
import freenet.client.async.PersistenceDisabledException;
import freenet.client.async.PersistentJob;
import freenet.node.Node;
import freenet.node.RequestStarter;
import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
import freenet.support.io.NativeThread;

/**
* FCP message: Modify a persistent request.
*
* ModifyPersistentRequest
* Identifier=request identifier
* Verbosity=1023 // change verbosity
* PriorityClass=1 // change priority class
* ClientToken=new client token // change client token
* MaxRetries=100 // change max retries
* Global=true
* EndMessage
*/
public class ModifyPersistentRequest extends FCPMessage {

  static final String NAME = "ModifyPersistentRequest";
 
  final String identifier;
  final boolean global;
  // negative means don't change
  final short priorityClass;
  final String clientToken;
 
  ModifyPersistentRequest(SimpleFieldSet fs) throws MessageInvalidException {
    this.global = fs.getBoolean("Global", false);
    this.identifier = fs.get("Identifier");
    this.clientToken = fs.get("ClientToken");
    if(identifier == null)
      throw new MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "Missing field: Identifier", null, global);
    String prio = fs.get("PriorityClass");
    if(prio != null) {
      try {
        priorityClass = Short.parseShort(prio);
        if(!RequestStarter.isValidPriorityClass(priorityClass))
          throw new MessageInvalidException(ProtocolErrorMessage.INVALID_FIELD, "Invalid priority class "+priorityClass+" - range is "+RequestStarter.PAUSED_PRIORITY_CLASS+" to "+RequestStarter.MAXIMUM_PRIORITY_CLASS, identifier, global);
      } catch (NumberFormatException e) {
        throw new MessageInvalidException(ProtocolErrorMessage.ERROR_PARSING_NUMBER, "Could not parse PriorityClass: "+e.getMessage(), identifier, global);
      }
    } else
      priorityClass = -1;
  }
 
  @Override
  public SimpleFieldSet getFieldSet() {
    SimpleFieldSet fs = new SimpleFieldSet(true);
    fs.putSingle("Identifier", identifier);
    fs.put("Global", global);
    fs.put("PriorityClass", priorityClass);
    if(clientToken != null)
      fs.putSingle("ClientToken", clientToken);
    return fs;
  }

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

  @Override
  public void run(final FCPConnectionHandler handler, Node node)
      throws MessageInvalidException {
   
    ClientRequest req = handler.getRebootRequest(global, handler, identifier);
    if(req == null) {
        try {
                node.clientCore.clientContext.jobRunner.queue(new PersistentJob() {
                   
                    @Override
                    public boolean run(ClientContext context) {
                        ClientRequest req = handler.getForeverRequest(global, handler, identifier);
                        if(req==null){
                            Logger.error(this, "Huh ? the request is null!");
                            ProtocolErrorMessage msg = new ProtocolErrorMessage(ProtocolErrorMessage.NO_SUCH_IDENTIFIER, false, null, identifier, global);
                            handler.outputHandler.queue(msg);
                            return false;
                        } else {
                            req.modifyRequest(clientToken, priorityClass, handler.server);
                        }
                        return true;
                    }
                   
                }, NativeThread.NORM_PRIORITY);
            } catch (PersistenceDisabledException e) {
                ProtocolErrorMessage msg = new ProtocolErrorMessage(ProtocolErrorMessage.NO_SUCH_IDENTIFIER, false, null, identifier, global);
                handler.outputHandler.queue(msg);
            }
    } else {
      req.modifyRequest(clientToken, priorityClass, node.clientCore.getFCPServer());
    }
  }

}
TOP

Related Classes of freenet.clients.fcp.ModifyPersistentRequest

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.