📄 dhblock.c
字号:
#include "dhash_common.h"#include <dhblock.h>#include <dhblock_chash.h>#include <dhblock_keyhash.h>#include <dhblock_replicated.h>#include <dhblock_noauth.h>#include <configurator.h>static struct dhblock_config_init { dhblock_config_init ();} dci;dhblock_config_init::dhblock_config_init (){ bool ok = true;#define set_int Configurator::only ().set_int /** MTU **/ ok = ok && set_int ("dhash.mtu", 1210); /** Number of fragments to encode each block into */ ok = ok && set_int ("dhash.efrags", 14); /** XXX Number of fragments needed to reconstruct a given block */ ok = ok && set_int ("dhash.dfrags", 7); /** XXX Number of replica for each mutable block **/ ok = ok && set_int ("dhash.replica", 5); assert (ok);#undef set_int}u_longdhblock::dhash_mtu (){ static bool initialized = false; static int v = 0; if (!initialized) { initialized = Configurator::only ().get_int ("dhash.mtu", v); assert (initialized); } return v;}bigintcompute_hash (const void *buf, size_t buflen){ char h[sha1::hashsize]; bzero(h, sha1::hashsize); sha1_hash (h, buf, buflen); bigint n; mpz_set_rawmag_be(&n, h, sha1::hashsize); // For big endian return n;}ptr<dhblock> allocate_dhblock (dhash_ctype c){ ptr<dhblock> ret = NULL; switch (c) { case DHASH_CONTENTHASH: ret = New refcounted<dhblock_chash> (); break; case DHASH_NOAUTH: ret = New refcounted<dhblock_replicated> (); break; case DHASH_KEYHASH: ret = New refcounted<dhblock_keyhash> (); break; default: warn << "unsupported block type " << c << "\n"; } return ret;}dhblock::~dhblock () {}vec<str>get_block_contents (str data, dhash_ctype c) { vec<str> ret; switch (c) { case DHASH_CONTENTHASH: ret = dhblock_chash::get_payload (data); break; case DHASH_NOAUTH: ret = dhblock_noauth::get_payload (data); break; case DHASH_KEYHASH: ret = dhblock_keyhash::get_payload (data); break; default: warn << "unsupported block type " << c << "\n"; } return ret;}boolverify (chordID key, str data, dhash_ctype c) { bool ret = false; switch (c) { case DHASH_CONTENTHASH: ret = dhblock_chash::verify (key, data); break; case DHASH_NOAUTH: return true; break; case DHASH_KEYHASH: ret = dhblock_keyhash::verify (key, data); break; default: warn << "unsupported block type " << c << "\n"; } return ret;}store_statusget_store_status (dhash_ctype c){ switch (c) { case DHASH_CONTENTHASH: return DHASH_FRAGMENT; break; case DHASH_KEYHASH: case DHASH_NOAUTH: return DHASH_REPLICA; break; default: fatal << "unknown ctype " << c << "\n"; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -