Package freenet.store

Source Code of freenet.store.CHKStore

package freenet.store;

import java.io.IOException;

import freenet.crypt.DSAPublicKey;
import freenet.keys.CHKBlock;
import freenet.keys.CHKVerifyException;
import freenet.keys.KeyVerifyException;
import freenet.keys.NodeCHK;
import freenet.support.Logger;

public class CHKStore extends StoreCallback<CHKBlock> {

  @Override
  public boolean collisionPossible() {
    return false;
  }

  @Override
  public CHKBlock construct(byte[] data, byte[] headers,
      byte[] routingKey, byte[] fullKey, boolean canReadClientCache, boolean canReadSlashdotCache, BlockMetadata meta, DSAPublicKey ignored) throws KeyVerifyException {
    if(data == null || headers == null) throw new CHKVerifyException("Need either data and headers");
    return CHKBlock.construct(data, headers, NodeCHK.cryptoAlgorithmFromFullKey(fullKey));
  }

  public CHKBlock fetch(NodeCHK chk, boolean dontPromote, boolean ignoreOldBlocks, BlockMetadata meta) throws IOException {
    // FIXME optimize: change API so we can just pass in the crypto algorithm rather than having to construct the full key???
    return store.fetch(chk.getRoutingKey(), chk.getFullKey(), dontPromote, false, false, ignoreOldBlocks, meta);
  }
 
  public void put(CHKBlock b, boolean isOldBlock) throws IOException {
    try {
      store.put(b, b.getRawData(), b.getRawHeaders(), false, isOldBlock);
    } catch (KeyCollisionException e) {
      Logger.error(this, "Impossible for CHKStore: "+e, e);
    }
  }
 
  @Override
  public int dataLength() {
    return CHKBlock.DATA_LENGTH;
  }

  @Override
  public int fullKeyLength() {
    return NodeCHK.FULL_KEY_LENGTH;
  }
  @Override
  public int headerLength() {
    return CHKBlock.TOTAL_HEADERS_LENGTH;
  }

  @Override
  public int routingKeyLength() {
    return NodeCHK.KEY_LENGTH;
  }

  @Override
  public boolean storeFullKeys() {
    // Worth the extra two file descriptors, because if we have the keys we can do lazy
    // reconstruction i.e. don't construct each block, just transcode from the .keys file
    // straight into the database.
    return true;
  }

  @Override
  public boolean constructNeedsKey() {
    return false;
  }

  @Override
  public byte[] routingKeyFromFullKey(byte[] keyBuf) {
    return NodeCHK.routingKeyFromFullKey(keyBuf);
  }

}
TOP

Related Classes of freenet.store.CHKStore

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.