change file structure
This commit is contained in:
parent
1627ccf362
commit
c3962d8808
1
.#README.md
Symbolic link
1
.#README.md
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
horhik@lap.15278:1615285836
|
|
@ -2,3 +2,8 @@
|
||||||
Library for freenet FCPv2 protocol
|
Library for freenet FCPv2 protocol
|
||||||
It's set of structures from [official FCPv2 wiki](https://github.com/freenet/wiki/wiki/FCPv2), their implementations, parse and convert functions
|
It's set of structures from [official FCPv2 wiki](https://github.com/freenet/wiki/wiki/FCPv2), their implementations, parse and convert functions
|
||||||
|
|
||||||
|
Open for contributig!!!
|
||||||
|
|
||||||
|
----
|
||||||
|
**DONT USE IT FOR PRODUCTION!!!** current versions is SO UNSTABLE!
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
use super::types::*;
|
use super::types::*;
|
||||||
|
use crate::types::traits::*;
|
||||||
|
use crate::types::{SSKKeypair, SSK, ReturnType};
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
impl ClientHello {
|
impl ClientHello {
|
||||||
|
@ -32,7 +34,7 @@ fn client_hello_converts() {
|
||||||
let hello = ClientHello::new("user name".to_string(), 2.0);
|
let hello = ClientHello::new("user name".to_string(), 2.0);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
hello.convert(),
|
hello.convert(),
|
||||||
"ClientHello\nName=user name\nExpectedVersion=2\nEndMessage\n\n"
|
"ClientHello\nName=user name\nExpectedVersion=2.0\nEndMessage\n\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,44 +106,6 @@ impl FcpRequest for GenerateSSK {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
|
||||||
pub struct SSK {
|
|
||||||
sign_key: String,
|
|
||||||
decrypt_key: String,
|
|
||||||
settings: Option<String>,
|
|
||||||
}
|
|
||||||
#[derive(Debug, PartialEq)]
|
|
||||||
pub struct USK {
|
|
||||||
ssk: SSK,
|
|
||||||
index: i32,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
|
||||||
pub struct SSKKeypair {
|
|
||||||
insert_uri: SSK,
|
|
||||||
request_uri: SSK,
|
|
||||||
identifier: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FcpParser<SSKKeypair> for SSKKeypair {
|
|
||||||
fn parse(plain: &str) -> Option<SSKKeypair> {
|
|
||||||
let reg = Regex::new(
|
|
||||||
r"^SSKKeypair\nIdentifier=(.*)\nInsertURI=(.*)\nRequestURI=(.*)\nEndMessage",
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
println!("{:?}", reg);
|
|
||||||
let res = reg.captures(plain).unwrap();
|
|
||||||
let identifier = res[1].to_string();
|
|
||||||
let insert_uri = SSK::parse(&res[2]).unwrap();
|
|
||||||
let request_uri = SSK::parse(&res[3]).unwrap();
|
|
||||||
return Some(SSKKeypair {
|
|
||||||
insert_uri: insert_uri,
|
|
||||||
request_uri: request_uri,
|
|
||||||
identifier: identifier,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//SSK@Rgt0qM8D24DltliV2-JE9tYLcrgGAKeDwkz41I3JBPs,p~c8c7FXcJjhcf2vA-Xm0Mjyw1o~xn7L2-T8zlBA1IU,AQECAAE/
|
//SSK@Rgt0qM8D24DltliV2-JE9tYLcrgGAKeDwkz41I3JBPs,p~c8c7FXcJjhcf2vA-Xm0Mjyw1o~xn7L2-T8zlBA1IU,AQECAAE/
|
||||||
//SSK@uKTwaQIXNgsCYKLekb51t3pZ6A~PTP7nuCxRVZEMtCQ,p~c8c7FXcJjhcf2vA-Xm0Mjyw1o~xn7L2-T8zlBA1IU,AQACAAE/
|
//SSK@uKTwaQIXNgsCYKLekb51t3pZ6A~PTP7nuCxRVZEMtCQ,p~c8c7FXcJjhcf2vA-Xm0Mjyw1o~xn7L2-T8zlBA1IU,AQACAAE/
|
||||||
/*
|
/*
|
||||||
|
@ -176,9 +140,6 @@ fn is_keypair_parsing() {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait FcpParser<T> {
|
|
||||||
fn parse(palin: &str) -> Option<T>;
|
|
||||||
}
|
|
||||||
impl FcpParser<SSK> for SSK {
|
impl FcpParser<SSK> for SSK {
|
||||||
fn parse(plain: &str) -> Option<SSK> {
|
fn parse(plain: &str) -> Option<SSK> {
|
||||||
let reg1 = Regex::new(r".*?SSK@([a-zA-z0-9~-]*),([a-zA-Z0-9-~]*),([A-Z]*)").unwrap();
|
let reg1 = Regex::new(r".*?SSK@([a-zA-z0-9~-]*),([a-zA-Z0-9-~]*),([A-Z]*)").unwrap();
|
||||||
|
@ -454,7 +415,6 @@ fn is_client_put_converting() {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ClientGet {
|
pub struct ClientGet {
|
||||||
message_name: String,
|
|
||||||
ignore_ds: Option<bool>,
|
ignore_ds: Option<bool>,
|
||||||
ds_only: Option<bool>,
|
ds_only: Option<bool>,
|
||||||
uri: String, //FIXME freenet uri type
|
uri: String, //FIXME freenet uri type
|
||||||
|
@ -496,10 +456,35 @@ BinaryBlob=false
|
||||||
FilterData=true
|
FilterData=true
|
||||||
EndMessage
|
EndMessage
|
||||||
*/
|
*/
|
||||||
|
impl ClientGet {
|
||||||
|
pub fn new_default(uri: SSK, identifier: &str, return_type: ReturnType) -> ClientGet {
|
||||||
|
ClientGet {
|
||||||
|
ignore_ds: None,
|
||||||
|
ds_only: None,
|
||||||
|
uri: uri.convert(), //FIXME freenet uri type
|
||||||
|
identifier: identifier.to_string(),
|
||||||
|
verbosity: None,
|
||||||
|
max_size: None,
|
||||||
|
max_temp_size: None,
|
||||||
|
max_retries: None,
|
||||||
|
priority_class: None,
|
||||||
|
persistence: None,
|
||||||
|
client_token: None,
|
||||||
|
global: None,
|
||||||
|
return_type: Some(return_type),
|
||||||
|
binary_blob: None,
|
||||||
|
filter_data: None,
|
||||||
|
allowed_mime_types: None,
|
||||||
|
filename: None,
|
||||||
|
temp_filename: None,
|
||||||
|
real_time_flag: None,
|
||||||
|
initial_metadata_data_length: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl FcpRequest for ClientGet {
|
impl FcpRequest for ClientGet {
|
||||||
fn convert(&self) -> String {
|
fn convert(&self) -> String {
|
||||||
unimplemented!();
|
|
||||||
format!(
|
format!(
|
||||||
"ClientGet\n\
|
"ClientGet\n\
|
||||||
{}\
|
{}\
|
|
@ -1,3 +1,4 @@
|
||||||
|
use crate::types::traits::*;
|
||||||
pub use std::ffi::OsStr;
|
pub use std::ffi::OsStr;
|
||||||
pub use std::net::Ipv4Addr;
|
pub use std::net::Ipv4Addr;
|
||||||
pub use std::path::Path;
|
pub use std::path::Path;
|
||||||
|
@ -153,19 +154,6 @@ fn is_upload_from_converting() {
|
||||||
);
|
);
|
||||||
assert_eq!(fcp_types_unwrap::<Persistence>(None), "".to_string());
|
assert_eq!(fcp_types_unwrap::<Persistence>(None), "".to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum ReturnType {
|
|
||||||
Direct,
|
|
||||||
None,
|
|
||||||
Disk,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FcpRequest for ReturnType {
|
|
||||||
fn convert(&self) -> String {
|
|
||||||
unimplemented!();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub enum NumOrNone {
|
pub enum NumOrNone {
|
||||||
None,
|
None,
|
||||||
Num(u32),
|
Num(u32),
|
||||||
|
@ -257,23 +245,3 @@ impl FcpRequest for bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait FcpRequest {
|
|
||||||
fn convert(&self) -> String;
|
|
||||||
|
|
||||||
fn fcp_wrap(&self, prefix: &str, postfix: &str) -> String {
|
|
||||||
format!("{}{}{}", prefix, self.convert(), postfix)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pub fn fcp_types_unwrap<T: FcpRequest>(fcp_type: Option<&T>) -> String {
|
|
||||||
match fcp_type {
|
|
||||||
Some(val) => val.convert(),
|
|
||||||
None => String::from(""),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pub fn to_fcp_unwrap<T: FcpRequest>(prefix: &str, fcp_type: &Option<T>, postfix: &str) -> String {
|
|
||||||
match fcp_type {
|
|
||||||
Some(val) => val.fcp_wrap(&prefix, &postfix),
|
|
||||||
None => String::from(""),
|
|
||||||
}
|
|
||||||
}
|
|
28
src/lib.rs
28
src/lib.rs
|
@ -1,25 +1,3 @@
|
||||||
mod types;
|
pub mod types;
|
||||||
pub use types::client;
|
pub mod client;
|
||||||
pub use types::node;
|
pub mod node;
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! vec {
|
|
||||||
( $( $x:expr ),* ) => {
|
|
||||||
{
|
|
||||||
let mut temp_vec = Vec::new();
|
|
||||||
$(
|
|
||||||
temp_vec.push($x);
|
|
||||||
)*
|
|
||||||
temp_vec
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn it_works() {
|
|
||||||
assert_eq!(2 + 2, 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,2 +1,55 @@
|
||||||
pub mod client;
|
pub mod traits;
|
||||||
pub mod node;
|
use traits::*;
|
||||||
|
use regex::Regex;
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
|
pub struct SSK {
|
||||||
|
pub sign_key: String,
|
||||||
|
pub decrypt_key: String,
|
||||||
|
pub settings: Option<String>,
|
||||||
|
}
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
|
pub struct USK {
|
||||||
|
pub ssk: SSK,
|
||||||
|
pub index: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
|
pub struct SSKKeypair {
|
||||||
|
pub insert_uri: SSK,
|
||||||
|
pub request_uri: SSK,
|
||||||
|
pub identifier: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FcpParser<SSKKeypair> for SSKKeypair {
|
||||||
|
fn parse(plain: &str) -> Option<SSKKeypair> {
|
||||||
|
let reg = Regex::new(
|
||||||
|
r"^SSKKeypair\nIdentifier=(.*)\nInsertURI=(.*)\nRequestURI=(.*)\nEndMessage",
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
println!("{:?}", reg);
|
||||||
|
let res = reg.captures(plain).unwrap();
|
||||||
|
let identifier = res[1].to_string();
|
||||||
|
let insert_uri = SSK::parse(&res[2]).unwrap();
|
||||||
|
let request_uri = SSK::parse(&res[3]).unwrap();
|
||||||
|
return Some(SSKKeypair {
|
||||||
|
insert_uri: insert_uri,
|
||||||
|
request_uri: request_uri,
|
||||||
|
identifier: identifier,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub enum ReturnType {
|
||||||
|
Direct,
|
||||||
|
None,
|
||||||
|
Disk,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FcpRequest for ReturnType {
|
||||||
|
fn convert(&self) -> String {
|
||||||
|
unimplemented!();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
28
src/types/traits.rs
Normal file
28
src/types/traits.rs
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
|
||||||
|
pub trait FcpRequest {
|
||||||
|
fn convert(&self) -> String;
|
||||||
|
|
||||||
|
fn fcp_wrap(&self, prefix: &str, postfix: &str) -> String {
|
||||||
|
format!("{}{}{}", prefix, self.convert(), postfix)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub trait FcpParser<T> {
|
||||||
|
fn parse(palin: &str) -> Option<T>;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn fcp_types_unwrap<T: FcpRequest>(fcp_type: Option<&T>) -> String {
|
||||||
|
match fcp_type {
|
||||||
|
Some(val) => val.convert(),
|
||||||
|
None => String::from(""),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn to_fcp_unwrap<T: FcpRequest>(prefix: &str, fcp_type: &Option<T>, postfix: &str) -> String {
|
||||||
|
match fcp_type {
|
||||||
|
Some(val) => val.fcp_wrap(&prefix, &postfix),
|
||||||
|
None => String::from(""),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue