no_deadlocks wow
This commit is contained in:
parent
37103d4f62
commit
64a691ad8e
171
Cargo.lock
generated
171
Cargo.lock
generated
@ -2,12 +2,36 @@
|
|||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "addr2line"
|
||||||
|
version = "0.22.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
|
||||||
|
dependencies = [
|
||||||
|
"gimli",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "adler"
|
name = "adler"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "backtrace"
|
||||||
|
version = "0.3.73"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a"
|
||||||
|
dependencies = [
|
||||||
|
"addr2line",
|
||||||
|
"cc",
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"miniz_oxide",
|
||||||
|
"object",
|
||||||
|
"rustc-demangle",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "2.6.0"
|
version = "2.6.0"
|
||||||
@ -29,12 +53,29 @@ version = "1.5.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cc"
|
||||||
|
version = "1.1.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "contracts"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c9424f2ca1e42776615720e5746eed6efa19866fdbaac2923ab51c294ac4d1f2"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 1.0.109",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crc32fast"
|
name = "crc32fast"
|
||||||
version = "1.4.2"
|
version = "1.4.2"
|
||||||
@ -96,6 +137,23 @@ dependencies = [
|
|||||||
"miniz_oxide",
|
"miniz_oxide",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "getrandom"
|
||||||
|
version = "0.1.16"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"wasi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gimli"
|
||||||
|
version = "0.29.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hashbrown"
|
name = "hashbrown"
|
||||||
version = "0.14.5"
|
version = "0.14.5"
|
||||||
@ -148,6 +206,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"derivative",
|
"derivative",
|
||||||
"log",
|
"log",
|
||||||
|
"no_deadlocks",
|
||||||
"rust_mc_proto",
|
"rust_mc_proto",
|
||||||
"serde_yml",
|
"serde_yml",
|
||||||
"simplelog",
|
"simplelog",
|
||||||
@ -169,6 +228,16 @@ dependencies = [
|
|||||||
"adler",
|
"adler",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "no_deadlocks"
|
||||||
|
version = "1.3.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e0e0af0e4fcf0d695f224cafbf5e4fb750b85aa1cd1ad0b37d8d0d98c0d2ce5e"
|
||||||
|
dependencies = [
|
||||||
|
"backtrace",
|
||||||
|
"vector-map",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-conv"
|
name = "num-conv"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@ -184,12 +253,30 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "object"
|
||||||
|
version = "0.36.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "powerfmt"
|
name = "powerfmt"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
|
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ppv-lite86"
|
||||||
|
version = "0.2.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dee4364d9f3b902ef14fab8a1ddffb783a1cb6b4bba3bfc1fa3922732c7de97f"
|
||||||
|
dependencies = [
|
||||||
|
"zerocopy",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.86"
|
version = "1.0.86"
|
||||||
@ -208,6 +295,47 @@ dependencies = [
|
|||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand"
|
||||||
|
version = "0.7.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom",
|
||||||
|
"libc",
|
||||||
|
"rand_chacha",
|
||||||
|
"rand_core",
|
||||||
|
"rand_hc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_chacha"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
|
||||||
|
dependencies = [
|
||||||
|
"ppv-lite86",
|
||||||
|
"rand_core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_core"
|
||||||
|
version = "0.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_hc"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
|
||||||
|
dependencies = [
|
||||||
|
"rand_core",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rust_mc_proto"
|
name = "rust_mc_proto"
|
||||||
version = "0.1.15"
|
version = "0.1.15"
|
||||||
@ -219,6 +347,12 @@ dependencies = [
|
|||||||
"uuid",
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustc-demangle"
|
||||||
|
version = "0.1.24"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustix"
|
name = "rustix"
|
||||||
version = "0.38.34"
|
version = "0.38.34"
|
||||||
@ -385,6 +519,22 @@ version = "1.10.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314"
|
checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "vector-map"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "550f72ae94a45c0e2139188709e6c4179f0b5ff9bdaa435239ad19048b0cd68c"
|
||||||
|
dependencies = [
|
||||||
|
"contracts",
|
||||||
|
"rand",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasi"
|
||||||
|
version = "0.9.0+wasi-snapshot-preview1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winapi-util"
|
name = "winapi-util"
|
||||||
version = "0.1.8"
|
version = "0.1.8"
|
||||||
@ -466,3 +616,24 @@ name = "windows_x86_64_msvc"
|
|||||||
version = "0.52.6"
|
version = "0.52.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zerocopy"
|
||||||
|
version = "0.6.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "854e949ac82d619ee9a14c66a1b674ac730422372ccb759ce0c39cabcf2bf8e6"
|
||||||
|
dependencies = [
|
||||||
|
"byteorder",
|
||||||
|
"zerocopy-derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zerocopy-derive"
|
||||||
|
version = "0.6.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "125139de3f6b9d625c39e2efdd73d41bdac468ccd556556440e322be0e1bbd91"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.71",
|
||||||
|
]
|
||||||
|
@ -10,3 +10,4 @@ uuid = "1.10.0"
|
|||||||
log = "0.4.22"
|
log = "0.4.22"
|
||||||
simplelog = "0.12.2"
|
simplelog = "0.12.2"
|
||||||
derivative = "2.2.0"
|
derivative = "2.2.0"
|
||||||
|
no_deadlocks = "1.3.2"
|
||||||
|
@ -4,7 +4,7 @@ Proxy for minecraft servers on rust
|
|||||||
`in developement`
|
`in developement`
|
||||||
|
|
||||||
todo list: (✅ / ❌)
|
todo list: (✅ / ❌)
|
||||||
- ✅ (not tested) add methods `connect_to_ip`, `connect_to_server`, `connect_to_stream`
|
- ❌ (deadlock) add methods `connect_to_ip`, `connect_to_server`, `connect_to_stream`, `reconnect`
|
||||||
- ❌ make setting `no_pf_for_ip_connect` working
|
- ❌ make setting `no_pf_for_ip_connect` working
|
||||||
- ❌ make talk server
|
- ❌ make talk server
|
||||||
- ❌ create bukkit plugin for player formatting support and talking
|
- ❌ create bukkit plugin for player formatting support and talking
|
||||||
|
@ -6,7 +6,6 @@ use std::{
|
|||||||
sync::atomic::{AtomicBool, Ordering},
|
sync::atomic::{AtomicBool, Ordering},
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub enum ProxyEvent {
|
pub enum ProxyEvent {
|
||||||
/// client <- proxy <- server \
|
/// client <- proxy <- server \
|
||||||
/// | \
|
/// | \
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
use super::{EventListener, PlayerForwarding, ProxyConfig, ProxyError, ProxyEvent, ProxyServer};
|
use super::{EventListener, PlayerForwarding, ProxyConfig, ProxyError, ProxyEvent, ProxyServer};
|
||||||
use derivative::Derivative;
|
use derivative::Derivative;
|
||||||
use log::{debug, info};
|
use log::{debug, info};
|
||||||
|
use no_deadlocks::Mutex;
|
||||||
use rust_mc_proto::{
|
use rust_mc_proto::{
|
||||||
DataBufferReader, DataBufferWriter, MinecraftConnection, Packet, ProtocolError, Zigzag,
|
DataBufferReader, DataBufferWriter, MinecraftConnection, Packet, ProtocolError, Zigzag,
|
||||||
};
|
};
|
||||||
@ -9,7 +10,7 @@ use std::{
|
|||||||
net::{SocketAddr, TcpListener, TcpStream},
|
net::{SocketAddr, TcpListener, TcpStream},
|
||||||
sync::{
|
sync::{
|
||||||
atomic::{AtomicUsize, Ordering},
|
atomic::{AtomicUsize, Ordering},
|
||||||
Arc, Mutex,
|
Arc,
|
||||||
},
|
},
|
||||||
thread,
|
thread,
|
||||||
};
|
};
|
||||||
@ -61,7 +62,7 @@ impl ProxyPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn server_conn(&self) -> &MinecraftConnection<TcpStream> {
|
pub fn server_conn(&self) -> &MinecraftConnection<TcpStream> {
|
||||||
&self.client_conn
|
&self.server_conn
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn client_conn_mut(&mut self) -> &mut MinecraftConnection<TcpStream> {
|
pub fn client_conn_mut(&mut self) -> &mut MinecraftConnection<TcpStream> {
|
||||||
@ -69,7 +70,7 @@ impl ProxyPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn server_conn_mut(&mut self) -> &mut MinecraftConnection<TcpStream> {
|
pub fn server_conn_mut(&mut self) -> &mut MinecraftConnection<TcpStream> {
|
||||||
&mut self.client_conn
|
&mut self.server_conn
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn name(&self) -> Option<&String> {
|
pub fn name(&self) -> Option<&String> {
|
||||||
@ -191,27 +192,29 @@ impl ProxyPlayer {
|
|||||||
server_address: &str,
|
server_address: &str,
|
||||||
server_port: u16,
|
server_port: u16,
|
||||||
) -> Result<(), Box<dyn Error>> {
|
) -> Result<(), Box<dyn Error>> {
|
||||||
this.lock()
|
{
|
||||||
.unwrap()
|
let mut player = this.lock().unwrap();
|
||||||
.connection_id
|
player.connection_id.fetch_add(1, Ordering::Relaxed);
|
||||||
.fetch_add(1, Ordering::Relaxed);
|
player.server_conn.close();
|
||||||
|
|
||||||
this.lock().unwrap().server_conn.close();
|
let server_host = player.server().unwrap().host().to_string();
|
||||||
|
// println!("connect");
|
||||||
let server_host = this.lock().unwrap().server().unwrap().host().to_string();
|
player.server_conn = MinecraftConnection::connect(&server_host)?;
|
||||||
println!("connect");
|
// println!("connected");
|
||||||
this.lock().unwrap().server_conn = MinecraftConnection::connect(&server_host)?;
|
}
|
||||||
println!("connected");
|
|
||||||
|
|
||||||
thread::spawn({
|
thread::spawn({
|
||||||
println!("connecting1");
|
// println!("connecting1");
|
||||||
let player_forwarding = meexprox.lock().unwrap().config.player_forwarding().clone(); // deadlock here
|
let player_forwarding = {
|
||||||
println!("connecting2");
|
let meexprox_guard = meexprox.lock().unwrap();
|
||||||
|
meexprox_guard.config.player_forwarding().clone()
|
||||||
|
};
|
||||||
|
// println!("connecting2");
|
||||||
let server_address = server_address.to_string();
|
let server_address = server_address.to_string();
|
||||||
println!("connecting3");
|
// println!("connecting3");
|
||||||
|
|
||||||
move || {
|
move || {
|
||||||
println!("connecting4");
|
// println!("connecting4");
|
||||||
let _ = ProxyPlayer::connect(
|
let _ = ProxyPlayer::connect(
|
||||||
this,
|
this,
|
||||||
meexprox,
|
meexprox,
|
||||||
@ -298,13 +301,10 @@ impl ProxyPlayer {
|
|||||||
let mut client_conn = this.lock().unwrap().client_conn.try_clone().unwrap();
|
let mut client_conn = this.lock().unwrap().client_conn.try_clone().unwrap();
|
||||||
let mut server_conn = this.lock().unwrap().server_conn.try_clone().unwrap();
|
let mut server_conn = this.lock().unwrap().server_conn.try_clone().unwrap();
|
||||||
|
|
||||||
let server = this.lock().unwrap().server.clone();
|
|
||||||
|
|
||||||
let addr = client_conn.get_ref().peer_addr().unwrap();
|
let addr = client_conn.get_ref().peer_addr().unwrap();
|
||||||
let Some(name) = this.lock().unwrap().name.clone() else {
|
let Some(name) = this.lock().unwrap().name.clone() else {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
};
|
};
|
||||||
let server_config = meexprox.lock().unwrap().config.clone();
|
|
||||||
|
|
||||||
let atomic_connection_id = this.lock().unwrap().connection_id.clone();
|
let atomic_connection_id = this.lock().unwrap().connection_id.clone();
|
||||||
let connection_id = this.lock().unwrap().connection_id.load(Ordering::Relaxed);
|
let connection_id = this.lock().unwrap().connection_id.load(Ordering::Relaxed);
|
||||||
@ -347,7 +347,6 @@ impl ProxyPlayer {
|
|||||||
|
|
||||||
if packet.id() == 0x03 {
|
if packet.id() == 0x03 {
|
||||||
let threshold = packet.read_isize_varint()?;
|
let threshold = packet.read_isize_varint()?;
|
||||||
|
|
||||||
if threshold >= 0 {
|
if threshold >= 0 {
|
||||||
let threshold = threshold.zigzag();
|
let threshold = threshold.zigzag();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user