From 1ddc42721c1760efafa737dd3a68e73a1443e90c Mon Sep 17 00:00:00 2001 From: Horhik Date: Sun, 28 Feb 2021 00:58:55 +0300 Subject: [PATCH] separate some functions by folders. --- .cargo/config | 0 .idea/hole.iml | 13 ++++++ .idea/modules.xml | 8 ++++ .idea/vcs.xml | 6 +++ .idea/workspace.xml | 61 +++++++++++++++++++++++-- Cargo.lock | 93 ++++++++++++++++++++++++++++++--------- Cargo.toml | 6 ++- hole.db | Bin 0 -> 8192 bytes src/chat/front_conn.rs | 24 +++------- src/chat/mod.rs | 2 + src/chat/serv_conn.rs | 42 +++--------------- src/chat/serv_handler.rs | 30 +++++++++++++ src/chat/stay_awake.rs | 25 +++++++++++ src/chat/types.rs | 4 ++ src/db/mod.rs | 48 +++++++++++++++++++- src/lib.rs | 1 + src/main.rs | 2 + 17 files changed, 283 insertions(+), 82 deletions(-) create mode 100644 .cargo/config create mode 100644 .idea/hole.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 hole.db create mode 100644 src/chat/serv_handler.rs create mode 100644 src/chat/stay_awake.rs diff --git a/.cargo/config b/.cargo/config new file mode 100644 index 0000000..e69de29 diff --git a/.idea/hole.iml b/.idea/hole.iml new file mode 100644 index 0000000..a6b108e --- /dev/null +++ b/.idea/hole.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..a26b1f9 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 215332c..9650c16 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,15 +1,23 @@ + + + + + + + + + - - - + + @@ -18,19 +26,57 @@ + + + + + - + + + + + + + + + + + + + + + + + @@ -38,7 +84,14 @@ + + \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 660bf6e..8bc1967 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,20 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +[[package]] +name = "ahash" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" + +[[package]] +name = "aho-corasick" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +dependencies = [ + "memchr", +] + [[package]] name = "arc-swap" version = "0.4.7" @@ -346,6 +361,13 @@ dependencies = [ "instant", ] +[[package]] +name = "fcpv2" +version = "0.0.1" +dependencies = [ + "regex", +] + [[package]] name = "fnv" version = "1.0.7" @@ -528,6 +550,24 @@ dependencies = [ "web-sys", ] +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashlink" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d99cf782f0dc4372d26846bec3de7804ceb5df083c2d4462c0b8d2330e894fa8" +dependencies = [ + "hashbrown", +] + [[package]] name = "hermit-abi" version = "0.1.17" @@ -545,6 +585,7 @@ dependencies = [ "async-tls 0.10.0", "async-trait", "async-tungstenite", + "fcpv2", "futures", "futures-util", "log", @@ -651,20 +692,14 @@ checksum = "f2f96b10ec2560088a8e76961b00d47107b3a625fecb76dedb29ee7ccbf98235" [[package]] name = "libsqlite3-sys" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a245984b1b06c291f46e27ebda9f369a94a1ab8461d0e845e23f9ced01f5db" +checksum = "64d31059f22935e6c31830db5249ba2b7ecd54fd73a9909286f0a67aa55c2fbd" dependencies = [ "pkg-config", "vcpkg", ] -[[package]] -name = "linked-hash-map" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" - [[package]] name = "lock_api" version = "0.4.2" @@ -683,15 +718,6 @@ dependencies = [ "cfg-if 0.1.10", ] -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - [[package]] name = "matches" version = "0.1.8" @@ -1066,6 +1092,24 @@ version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" +[[package]] +name = "regex" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", +] + +[[package]] +name = "regex-syntax" +version = "0.6.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" + [[package]] name = "remove_dir_all" version = "0.5.3" @@ -1092,15 +1136,15 @@ dependencies = [ [[package]] name = "rusqlite" -version = "0.24.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c78c3275d9d6eb684d2db4b2388546b32fdae0586c20a82f3905d21ea78b9ef" +checksum = "d5f38ee71cbab2c827ec0ac24e76f82eca723cee92c509a65f67dee393c25112" dependencies = [ "bitflags", "fallible-iterator", "fallible-streaming-iterator", + "hashlink", "libsqlite3-sys", - "lru-cache", "memchr", "smallvec", ] @@ -1291,6 +1335,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "thread_local" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" +dependencies = [ + "once_cell", +] + [[package]] name = "tinyvec" version = "0.3.4" diff --git a/Cargo.toml b/Cargo.toml index 462cbdd..83bb5b9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" [dependencies] ntru = "0.5.6" -rusqlite = "0.24.0" +rusqlite = "0.24.2" toml = "0.5.6" tungstenite = "0.12.0" tokio = { version = "0.3.3", features = ["full"] } @@ -22,6 +22,10 @@ serde = "1.0.116" serde_derive = "1.0.116" async-trait = "0.1.42" +[dependencies.fcpv2] +path = "../FCPv2" + [dependencies.async-tungstenite] version = "0.11.0" features = ["tokio-runtime", "tokio-native-tls", "async-tls", "async-std"] + diff --git a/hole.db b/hole.db new file mode 100644 index 0000000000000000000000000000000000000000..fb9b7f0c5076b902a0f92071eb99925fb904b9e8 GIT binary patch literal 8192 zcmeI#y@~=c5C`zdA{+>Z*U5HMDu|6Q;I4#2jC!sSw2YVo;am?5b{6^sKCBO5bS)GY z#LnVBfPYndzVXx2yFs&BmaW$Vf}pQLH3q zIj$7>A?CCDRJ*6;w@mmaX?LS!!W}uO<&>pnVQ&ky9Bc0NeIF^6S1>cq+!n;DALra# t&Hm;`DjnaR9}k281Rwwb2tWV=5P$##AOHafK;Q*|q9{;ELuWTOJpsDoI6VLW literal 0 HcmV?d00001 diff --git a/src/chat/front_conn.rs b/src/chat/front_conn.rs index ae04b16..0fd0e90 100644 --- a/src/chat/front_conn.rs +++ b/src/chat/front_conn.rs @@ -1,4 +1,5 @@ use crate::chat::types::PackedMessage; +use crate::db; use async_std::{ io, net::{TcpListener, TcpStream}, @@ -13,6 +14,8 @@ use serde_derive::Deserialize; use std::env; use std::sync::mpsc::{Receiver, Sender}; +use super::stay_awake::request_repeater; + type SP = Sender; type RP = Receiver; @@ -28,25 +31,6 @@ pub fn listen_client(server_sender: SP, client_receiver: RP) -> io::Result<()> { task::block_on(connect_to_client(server_sender, client_receiver)) } -async fn request_repeater(ss: SP) -> io::Result<()> { - loop { - let time = std::time::Duration::from_millis(1000); - std::thread::sleep(time); - match ss.send(PackedMessage { - message: format!( - "ClientGet\n\ - URI=KSK@msg23.txt\n\ - Identifier=doesnt_matter?\n\ - Verbosity=0\n\ - ReturnType=direct\n\ - EndMessage\n\n" - ), - }) { - Ok(_) => {} - Err(e) => println!("{:?}", e), - } - } -} async fn connect_to_client(server_sender: SP, client_receiver: RP) -> io::Result<()> { let addr = env::args() @@ -110,6 +94,8 @@ async fn connection_for_sending( serde_json::from_str(jsoned.to_text().unwrap()); if let Ok(received_msg) = res { let msg = received_msg.message; + db::start_db().unwrap(); + server_sender.send(PackedMessage { message: msg }).unwrap(); /* message example { diff --git a/src/chat/mod.rs b/src/chat/mod.rs index 9d2d24f..bf8ad5f 100644 --- a/src/chat/mod.rs +++ b/src/chat/mod.rs @@ -1,4 +1,6 @@ pub mod chat_api_base; pub mod front_conn; pub mod serv_conn; +pub mod stay_awake; +pub mod serv_handler; pub mod types; diff --git a/src/chat/serv_conn.rs b/src/chat/serv_conn.rs index 444a603..3a42e55 100644 --- a/src/chat/serv_conn.rs +++ b/src/chat/serv_conn.rs @@ -1,20 +1,13 @@ -use crate::chat::types::PackedMessage; -use crate::fcpv2; +use super::serv_handler::to_server_sender; +use crate::chat::types::{PackedMessage, RP, SP}; use async_std::task; use serde_derive::Deserialize; use std::env; -use std::sync::mpsc::{Receiver, Sender}; use tokio::{ - io::{self, AsyncReadExt, AsyncWriteExt}, - net::{ - tcp::{OwnedReadHalf, OwnedWriteHalf}, - TcpStream, - }, + io::{self, AsyncReadExt}, + net::{tcp::OwnedReadHalf, TcpStream}, }; -type SP = Sender; -type RP = Receiver; - #[tokio::main] pub async fn listen_server(client_sender: SP, server_receiver: RP) -> io::Result<()> { task::block_on(connect_to_server(client_sender, server_receiver)) @@ -26,7 +19,7 @@ async fn connect_to_server(client_sender: SP, server_receiver: RP) -> io::Result .unwrap_or_else(|| "127.0.0.1:9481".to_string()); let stream = TcpStream::connect(&addr).await.expect("weeror here"); - let (mut receiver, mut sender) = stream.into_split(); + let (receiver, sender) = stream.into_split(); let t = task::spawn(server_responce_getter(receiver, client_sender)); to_server_sender(sender, server_receiver).await?; match t.await { @@ -50,31 +43,6 @@ async fn server_responce_getter(mut receiver: OwnedReadHalf, client_sender: SP) Err(e) => println!("Error: {} ", e), } } - Ok(()) -} -async fn to_server_sender(mut sender: OwnedWriteHalf, server_receiver: RP) -> io::Result<()> { - while let Ok(res) = server_receiver.recv() { - //TODO from_core_to_server_handler - if res.message == "STARTAPP!" { - let _ = sender - .write(("ClientHello\nName=ggg\nExpectedVersion=2.0\nEndMessage\n\n").as_bytes()) - .await?; - } else if res.message.lines().next() == Some("ClientGet") { - let _ = sender.write(res.message.as_bytes()).await?; - } else { - //println!("{:?}", res.message); - let _ = sender.write( - format!( - "ClientPut\nIdentifier=hello\nURI=KSK@msg23.txt\nDataLength={}\nUploadFrom=direct\nEndMessage\n{}\n\n", - res.message.len(), - res.message - ) - .as_bytes(), - ).await; - } - } - - Ok(()) } #[derive(Deserialize, Debug)] diff --git a/src/chat/serv_handler.rs b/src/chat/serv_handler.rs new file mode 100644 index 0000000..11794df --- /dev/null +++ b/src/chat/serv_handler.rs @@ -0,0 +1,30 @@ +use crate::chat::types::{RP, SP}; +use tokio::{ + io::{self, AsyncReadExt, AsyncWriteExt}, + net::{ + tcp::{OwnedReadHalf, OwnedWriteHalf}, + TcpStream, + }, +}; + +use fcpv2::client::fcp_types::{ClientHello, ClientPut, FcpParser, SSK}; +use fcpv2::client::types::FcpRequest; +pub async fn to_server_sender(mut sender: OwnedWriteHalf, server_receiver: RP) -> io::Result<()> { + while let Ok(res) = server_receiver.recv() { + //TODO from_core_to_server_handler + if res.message == "STARTAPP!" { + let _ = sender + .write((ClientHello::new("name".to_string(), 2.0).convert()).as_bytes()) + .await?; + } else if res.message.lines().next() == Some("ClientGet") { + let _ = sender.write(res.message.as_bytes()).await?; + } else { + //println!("{:?}", res.message); + let key = SSK::parse("KSK@msg23.txt").unwrap(); + let cp = ClientPut::new_default(key, "msg23.txt", "hello", &res.message[..]).convert(); + let _ = sender.write(cp.as_bytes()).await; + } + } + + Ok(()) +} diff --git a/src/chat/stay_awake.rs b/src/chat/stay_awake.rs new file mode 100644 index 0000000..a953994 --- /dev/null +++ b/src/chat/stay_awake.rs @@ -0,0 +1,25 @@ +use crate::chat::types::PackedMessage; +use async_std::io; +use std::sync::mpsc::Sender; + +type SP = Sender; + +pub async fn request_repeater(ss: SP) -> io::Result<()> { + loop { + let time = std::time::Duration::from_millis(1000); + std::thread::sleep(time); + match ss.send(PackedMessage { + message: format!( + "ClientGet\n\ + URI=KSK@msg23.txt\n\ + Identifier=doesnt_matter?\n\ + Verbosity=0\n\ + ReturnType=direct\n\ + EndMessage\n\n" + ), + }) { + Ok(_) => {} + Err(e) => println!("{:?}", e), + } + } +} diff --git a/src/chat/types.rs b/src/chat/types.rs index c0c9cda..647bc77 100644 --- a/src/chat/types.rs +++ b/src/chat/types.rs @@ -1,3 +1,4 @@ +use std::sync::mpsc::{Receiver, Sender}; //type Decoded = String; //type Encoded = String; @@ -34,3 +35,6 @@ pub struct PackedMessage { pub message: String, } + +pub type SP = Sender; +pub type RP = Receiver; diff --git a/src/db/mod.rs b/src/db/mod.rs index 58719f2..227fb3a 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -1,4 +1,50 @@ +use rusqlite::{params, Connection, Result}; pub mod messaging; -fn main () { +#[derive(Debug)] +pub struct Person { + id: i32, + name: String, + data: Option>, +} + +pub fn start_db() -> Result<()> { + let conn = Connection::open("../hole.db")?; + println!("{}", conn.is_autocommit()); + + match conn.execute( + "CREATE TABLE person ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + data BLOB + )", + params![], + ) { + Ok(_) => {} + Err(e) => println!("{:?}", e), + } + let me = Person { + id: 0, + name: "Steven".to_string(), + data: None, + }; + conn.execute( + "INSERT INTO person (name, data) VALUES (?1, ?2)", + params![me.name, me.data], + )?; + + let mut stmt = conn.prepare("SELECT id, name, data FROM person")?; + let person_iter = stmt.query_map(params![], |row| { + Ok(Person { + id: row.get(0)?, + name: row.get(1)?, + data: row.get(2)?, + }) + })?; + + for person in person_iter { + println!("Found person {:?}", person.unwrap()); + } + + Ok(()) } diff --git a/src/lib.rs b/src/lib.rs index 8202789..0057dbe 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,6 @@ mod chat; pub mod db; pub mod encrypting; + pub mod fcpv2; pub use chat::front_conn; diff --git a/src/main.rs b/src/main.rs index 8e46195..b05db65 100644 --- a/src/main.rs +++ b/src/main.rs @@ -43,6 +43,8 @@ use std::{ */ fn main() -> io::Result<()> { + db::start_db().unwrap(); + let (to_server_sender, server_receiver): (Sender, Receiver) = mpsc::channel();