wip bigfix
This commit is contained in:
@@ -14,81 +14,86 @@ pub fn parse_received_datum(
|
||||
let value = &recevied_datum[32..recevied_datum.len()];
|
||||
let value_slice = value.to_vec();
|
||||
println!("valueslice: {:?}, {}", value_slice, value_slice.len());
|
||||
let datum_type = value_slice[0];
|
||||
match datum_type {
|
||||
CHUNK => Some((
|
||||
hash_name,
|
||||
MerkleNode::Chunk(crate::ChunkNode { data: value_slice }),
|
||||
)),
|
||||
DIRECTORY => {
|
||||
let mut dir_entries = Vec::new();
|
||||
let mut offset = 1 as usize;
|
||||
for i in 0..((value_slice.len() - 1) / 64) as u8 {
|
||||
offset = (1 + 64 * i as usize) as usize;
|
||||
println!("offset:{}, i:{}", offset, i);
|
||||
let name = &value_slice[offset..offset + 32];
|
||||
let mut hash = [0u8; 32];
|
||||
hash.copy_from_slice(&value_slice[offset + 32..offset + 64]);
|
||||
let dp_name = String::from_utf8(name.to_vec()).expect("err");
|
||||
println!("name:{}", dp_name);
|
||||
|
||||
// envoyer un datum request
|
||||
dir_entries.push(DirectoryEntry {
|
||||
filename: name.try_into().expect("incorrect size"),
|
||||
content_hash: hash,
|
||||
});
|
||||
}
|
||||
|
||||
let current = DirectoryNode::new(dir_entries);
|
||||
match current {
|
||||
Ok(current_node) => Some((hash_name, MerkleNode::Directory(current_node))),
|
||||
Err(e) => {
|
||||
println!("{}", e);
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
BIG => {
|
||||
let mut bigdir_entries: Vec<NodeHash> = Vec::new();
|
||||
let mut offset = 1 as usize;
|
||||
for i in 0..((value_slice.len() - 1) / 32) as u8 {
|
||||
offset = (1 + 32 * i as usize) as usize;
|
||||
println!("offset:{}, i:{}", offset, i);
|
||||
let hash = &value_slice[offset..offset + 32];
|
||||
|
||||
// envoyer un datum request
|
||||
bigdir_entries.push(hash.try_into().expect("incorrect size"));
|
||||
}
|
||||
|
||||
println!("its a BIG bro");
|
||||
Some((
|
||||
let digest = Sha256::digest(&value);
|
||||
if digest.to_vec() != hash_name.to_vec() {
|
||||
None
|
||||
} else {
|
||||
let datum_type = value_slice[0];
|
||||
match datum_type {
|
||||
CHUNK => Some((
|
||||
hash_name,
|
||||
MerkleNode::Big(crate::BigNode {
|
||||
children_hashes: bigdir_entries,
|
||||
}),
|
||||
))
|
||||
}
|
||||
BIGDIRECTORY => {
|
||||
let mut bigdir_entries: Vec<NodeHash> = Vec::new();
|
||||
let mut offset = 1 as usize;
|
||||
for i in 0..((value_slice.len() - 1) / 32) as u8 {
|
||||
offset = (1 + 32 * i as usize) as usize;
|
||||
println!("offset:{}, i:{}", offset, i);
|
||||
let hash = &value_slice[offset..offset + 32];
|
||||
MerkleNode::Chunk(crate::ChunkNode { data: value_slice }),
|
||||
)),
|
||||
DIRECTORY => {
|
||||
let mut dir_entries = Vec::new();
|
||||
let mut offset = 1 as usize;
|
||||
for i in 0..((value_slice.len() - 1) / 64) as u8 {
|
||||
offset = (1 + 64 * i as usize) as usize;
|
||||
println!("offset:{}, i:{}", offset, i);
|
||||
let name = &value_slice[offset..offset + 32];
|
||||
let mut hash = [0u8; 32];
|
||||
hash.copy_from_slice(&value_slice[offset + 32..offset + 64]);
|
||||
let dp_name = String::from_utf8(name.to_vec()).expect("err");
|
||||
println!("name:{}", dp_name);
|
||||
|
||||
// envoyer un datum request
|
||||
bigdir_entries.push(hash.try_into().expect("incorrect size"));
|
||||
}
|
||||
// envoyer un datum request
|
||||
dir_entries.push(DirectoryEntry {
|
||||
filename: name.try_into().expect("incorrect size"),
|
||||
content_hash: hash,
|
||||
});
|
||||
}
|
||||
|
||||
let current = BigDirectoryNode::new(bigdir_entries);
|
||||
match current {
|
||||
Ok(current_node) => Some((hash_name, MerkleNode::BigDirectory(current_node))),
|
||||
Err(e) => {
|
||||
println!("{}", e);
|
||||
None
|
||||
let current = DirectoryNode::new(dir_entries);
|
||||
match current {
|
||||
Ok(current_node) => Some((hash_name, MerkleNode::Directory(current_node))),
|
||||
Err(e) => {
|
||||
println!("{}", e);
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
BIG => {
|
||||
let mut bigdir_entries: Vec<NodeHash> = Vec::new();
|
||||
let mut offset = 1 as usize;
|
||||
for i in 0..((value_slice.len() - 1) / 32) as u8 {
|
||||
offset = (1 + 32 * i as usize) as usize;
|
||||
println!("offset:{}, i:{}", offset, i);
|
||||
let hash = &value_slice[offset..offset + 32];
|
||||
|
||||
// envoyer un datum request
|
||||
bigdir_entries.push(hash.try_into().expect("incorrect size"));
|
||||
}
|
||||
|
||||
println!("its a BIG bro");
|
||||
Some((
|
||||
hash_name,
|
||||
MerkleNode::Big(crate::BigNode {
|
||||
children_hashes: bigdir_entries,
|
||||
}),
|
||||
))
|
||||
}
|
||||
BIGDIRECTORY => {
|
||||
let mut bigdir_entries: Vec<NodeHash> = Vec::new();
|
||||
let mut offset = 1 as usize;
|
||||
for i in 0..((value_slice.len() - 1) / 32) as u8 {
|
||||
offset = (1 + 32 * i as usize) as usize;
|
||||
println!("offset:{}, i:{}", offset, i);
|
||||
let hash = &value_slice[offset..offset + 32];
|
||||
|
||||
// envoyer un datum request
|
||||
bigdir_entries.push(hash.try_into().expect("incorrect size"));
|
||||
}
|
||||
|
||||
let current = BigDirectoryNode::new(bigdir_entries);
|
||||
match current {
|
||||
Ok(current_node) => Some((hash_name, MerkleNode::BigDirectory(current_node))),
|
||||
Err(e) => {
|
||||
println!("{}", e);
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user