Package freenet.clients.fcp

Source Code of freenet.clients.fcp.RemovePersistentRequest

/* 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.support.Logger;
import freenet.support.SimpleFieldSet;
import freenet.support.io.NativeThread;

/**
* Client telling node to remove a (completed or not) persistent request.
*/
public class RemovePersistentRequest extends FCPMessage {

  final static String NAME = "RemoveRequest";
  final static String ALT_NAME = "RemovePersistentRequest";
 
  final String identifier;
  final boolean global;
 
  public RemovePersistentRequest(SimpleFieldSet fs) throws MessageInvalidException {
    this.global = fs.getBoolean("Global", false);
    this.identifier = fs.get("Identifier");
    if(identifier == null)
      throw new MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "Must have Identifier", null, global);
  }

  @Override
  public SimpleFieldSet getFieldSet() {
    SimpleFieldSet fs = new SimpleFieldSet(true);
    fs.putSingle("Identifier", identifier);
    return fs;
  }

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

  @Override
  public void run(final FCPConnectionHandler handler, Node node)
      throws MessageInvalidException {
    ClientRequest req = handler.removePersistentRebootRequest(global, identifier);
    if(req == null && !global) {
      req = handler.removeRequestByIdentifier(identifier, true);
    }
    if(req == null) {
        try {
                handler.server.core.clientContext.jobRunner.queue(new PersistentJob() {
                   
                    @Override
                    public boolean run(ClientContext context) {
                        try {
                            ClientRequest req = handler.removePersistentForeverRequest(global, identifier);
                            if(req == null) {
                                Logger.error(this, "Huh ? the request is null!");
                                return false;
                            }
                            return true;
                        } catch (MessageInvalidException e) {
                            FCPMessage err = new ProtocolErrorMessage(e.protocolCode, false, e.getMessage(), e.ident, e.global);
                            handler.outputHandler.queue(err);
                            return false;
                        }
                    }
                   
                }, NativeThread.HIGH_PRIORITY);
            } catch (PersistenceDisabledException e) {
                FCPMessage err = new ProtocolErrorMessage(ProtocolErrorMessage.PERSISTENCE_DISABLED, false, "Persistence disabled and non-persistent request not found", identifier, global);
                handler.outputHandler.queue(err);
            }
    }
  }

}
TOP

Related Classes of freenet.clients.fcp.RemovePersistentRequest

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.