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 @@
1609900445316
+
+
+
+
+
+
+
\ 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 0000000..fb9b7f0
Binary files /dev/null and b/hole.db differ
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();