58 lines
1.6 KiB
C
58 lines
1.6 KiB
C
/***
|
|
* IPFS has the notion of storage blocks.
|
|
* Raw data with a multihash key (the Cid)
|
|
*/
|
|
|
|
#ifndef __IPFS_BLOCKS_BLOCK_H__
|
|
#define __IPFS_BLOCKS_BLOCK_H__
|
|
|
|
#include "ipfs/cid/cid.h"
|
|
|
|
struct Block {
|
|
struct Cid* cid;
|
|
unsigned char* data;
|
|
size_t data_length;
|
|
};
|
|
|
|
/***
|
|
* Create a new block
|
|
* @returns a new allocated Block struct
|
|
*/
|
|
struct Block* ipfs_blocks_block_new();
|
|
|
|
int ipfs_blocks_block_add_data(const unsigned char* data, size_t data_size, struct Block* block);
|
|
|
|
/***
|
|
* Free resources used by the creation of a block
|
|
* @param block the block to free
|
|
* @returns true(1) on success
|
|
*/
|
|
int ipfs_blocks_block_free(struct Block* block);
|
|
|
|
/**
|
|
* Determine the approximate size of an encoded block
|
|
* @param block the block to measure
|
|
* @returns the approximate size needed to encode the protobuf
|
|
*/
|
|
size_t ipfs_blocks_block_protobuf_encode_size(const struct Block* block);
|
|
|
|
/**
|
|
* Encode the Block into protobuf format
|
|
* @param block the block to encode
|
|
* @param buffer the buffer to fill
|
|
* @param max_buffer_size the max size of the buffer
|
|
* @param bytes_written the number of bytes used
|
|
* @returns true(1) on success
|
|
*/
|
|
int ipfs_blocks_block_protobuf_encode(const struct Block* block, unsigned char* buffer, size_t max_buffer_size, size_t* bytes_written);
|
|
|
|
/***
|
|
* Decode from a protobuf stream into a Block struct
|
|
* @param buffer the buffer to pull from
|
|
* @param buffer_length the length of the buffer
|
|
* @param block the block to fill
|
|
* @returns true(1) on success
|
|
*/
|
|
int ipfs_blocks_block_protobuf_decode(const unsigned char* buffer, const size_t buffer_length, struct Block** block);
|
|
|
|
#endif
|