97 lines
3.1 KiB
C
97 lines
3.1 KiB
C
/***
|
|
* a thin wrapper over a datastore for getting and putting block objects
|
|
*/
|
|
|
|
#ifndef __IPFS_BLOCKS_BLOCKSTORE_H__
|
|
#define __IPFS_BLOCKS_BLOCKSTORE_H__
|
|
|
|
#include "ipfs/cid/cid.h"
|
|
#include "ipfs/repo/fsrepo/fs_repo.h"
|
|
|
|
struct BlockstoreContext {
|
|
const struct FSRepo* fs_repo;
|
|
};
|
|
|
|
struct Blockstore {
|
|
struct BlockstoreContext* blockstoreContext;
|
|
int (*Delete)(const struct BlockstoreContext* context, struct Cid* cid);
|
|
int (*Has)(const struct BlockstoreContext* context, struct Cid* cid);
|
|
/**
|
|
* Retrieve a block from the blockstore
|
|
*/
|
|
int (*Get)(const struct BlockstoreContext* context, struct Cid* cid, struct Block** block);
|
|
int (*Put)(const struct BlockstoreContext* context, struct Block* block, size_t* bytes_written);
|
|
};
|
|
|
|
/***
|
|
* Create a new Blockstore struct
|
|
* @param fs_repo the FSRepo to use
|
|
* @returns the new Blockstore struct, or NULL if there was a problem.
|
|
*/
|
|
struct Blockstore* ipfs_blockstore_new(const struct FSRepo* fs_repo);
|
|
|
|
/**
|
|
* Release resources of a Blockstore struct
|
|
* @param blockstore the struct to free
|
|
* @returns true(1)
|
|
*/
|
|
int ipfs_blockstore_free(struct Blockstore* blockstore);
|
|
|
|
/**
|
|
* Delete a block based on its Cid
|
|
* @param context the context
|
|
* @param cid the Cid to look for
|
|
* @param returns true(1) on success
|
|
*/
|
|
int ipfs_blockstore_delete(const struct BlockstoreContext* context, struct Cid* cid);
|
|
|
|
/***
|
|
* Determine if the Cid can be found
|
|
* @param context the context
|
|
* @param cid the Cid to look for
|
|
* @returns true(1) if found
|
|
*/
|
|
int ipfs_blockstore_has(const struct BlockstoreContext* context, struct Cid* cid);
|
|
|
|
/***
|
|
* Find a block based on its Cid
|
|
* @param context the context
|
|
* @param cid the Cid to look for
|
|
* @param block where to put the data to be returned
|
|
* @returns true(1) on success
|
|
*/
|
|
int ipfs_blockstore_get(const struct BlockstoreContext* context, struct Cid* cid, struct Block** block);
|
|
|
|
/***
|
|
* Put a block in the blockstore
|
|
* @param block the block to store
|
|
* @returns true(1) on success
|
|
*/
|
|
int ipfs_blockstore_put(const struct BlockstoreContext* context, struct Block* block, size_t* bytes_written);
|
|
|
|
/***
|
|
* Put a struct UnixFS in the blockstore
|
|
* @param unix_fs the structure
|
|
* @param fs_repo the repo to place the strucure in
|
|
* @param bytes_written the number of bytes written to the blockstore
|
|
* @returns true(1) on success
|
|
*/
|
|
int ipfs_blockstore_put_unixfs(const struct UnixFS* unix_fs, const struct FSRepo* fs_repo, size_t* bytes_written);
|
|
|
|
/***
|
|
* Find a UnixFS struct based on its hash
|
|
* @param hash the hash to look for
|
|
* @param hash_length the length of the hash
|
|
* @param unix_fs the struct to fill
|
|
* @param fs_repo where to look for the data
|
|
* @returns true(1) on success
|
|
*/
|
|
int ipfs_blockstore_get_unixfs(const unsigned char* hash, size_t hash_length, struct UnixFS** block, const struct FSRepo* fs_repo);
|
|
|
|
/**
|
|
* Put a struct Node in the blockstore
|
|
*/
|
|
int ipfs_blockstore_put_node(const struct HashtableNode* node, const struct FSRepo* fs_repo, size_t* bytes_written);
|
|
int ipfs_blockstore_get_node(const unsigned char* hash, size_t hash_length, struct HashtableNode** node, const struct FSRepo* fs_repo);
|
|
|
|
#endif
|