Skip to content

Commit 07f075a

Browse files
authored
Merge pull request #503 from Stella-sea/allow-domain-direct-connect
feat(proxy): allow domain names in direct connect
2 parents 2d820fc + 1864181 commit 07f075a

3 files changed

Lines changed: 35 additions & 16 deletions

File tree

noita_proxy/src/app.rs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use std::{
22
fmt::Display,
33
fs, mem,
4-
net::IpAddr,
54
net::SocketAddr,
65
path::PathBuf,
76
process::exit,
@@ -47,6 +46,7 @@ use crate::{
4746
omni::{OmniPeerId, PeerVariant},
4847
steam_networking,
4948
},
49+
parse_connect_addr,
5050
paths::{self, Paths},
5151
player_cosmetics::{PlayerPngDesc, display_player_skin},
5252
steam_helper,
@@ -784,19 +784,15 @@ impl App {
784784
}
785785

786786
ui.text_edit_singleline(&mut self.app_saved_state.addr);
787-
let addr = self.app_saved_state.addr.parse();
788-
789-
let ip: Result<IpAddr, _> = self.app_saved_state.addr.parse();
790-
let addr2 = ip.map(|ip| SocketAddr::new(ip, DEFAULT_PORT));
791-
792-
let addr = addr.or(addr2);
793-
794-
ui.add_enabled_ui(addr.is_ok(), |ui| {
795-
if ui.button(tr("ip_connect")).clicked()
796-
&& let Ok(addr) = addr
797-
{
798-
self.set_settings();
799-
self.start_connect(addr);
787+
ui.add_enabled_ui(!self.app_saved_state.addr.trim().is_empty(), |ui| {
788+
if ui.button(tr("ip_connect")).clicked() {
789+
match parse_connect_addr(&self.app_saved_state.addr) {
790+
Ok(addr) => {
791+
self.set_settings();
792+
self.start_connect(addr);
793+
}
794+
Err(err) => self.notify_error(err),
795+
}
800796
}
801797
});
802798
}

noita_proxy/src/cli.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::{
1010
lobby_code::{LobbyCode, LobbyKind},
1111
mod_manager,
1212
net::{NetManager, NetManagerInit, NetManagerPaths, omni::PeerVariant, steam_networking},
13-
paths,
13+
parse_connect_addr, paths,
1414
player_cosmetics::PlayerPngDesc,
1515
steam_helper,
1616
util::steam_helper::LobbyExtraData,
@@ -167,7 +167,7 @@ fn cli_setup(
167167
pub fn connect_cli(lobby: String, args: Args) {
168168
let (state, netmaninit, kind, audio, _, _) = cli_setup(args);
169169
let variant = if lobby.contains(':') {
170-
let p = Peer::connect(lobby.parse().unwrap(), None).unwrap();
170+
let p = Peer::connect(parse_connect_addr(&lobby).unwrap(), None).unwrap();
171171
while p.my_id().is_none() {
172172
sleep(Duration::from_millis(100))
173173
}

noita_proxy/src/lib.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use std::{
2+
net::{IpAddr, SocketAddr, ToSocketAddrs},
23
ops::Deref,
34
sync::{Arc, atomic::Ordering},
45
thread::JoinHandle,
@@ -33,6 +34,28 @@ mod cli;
3334

3435
const DEFAULT_PORT: u16 = 5123;
3536

37+
pub(crate) fn parse_connect_addr(raw: &str) -> eyre::Result<SocketAddr> {
38+
let addr = raw.trim();
39+
40+
if let Ok(addr) = addr.parse::<SocketAddr>() {
41+
return Ok(addr);
42+
}
43+
44+
if let Ok(ip) = addr.parse::<IpAddr>() {
45+
return Ok(SocketAddr::new(ip, DEFAULT_PORT));
46+
}
47+
48+
let mut addrs = if addr.contains(':') {
49+
addr.to_socket_addrs()?
50+
} else {
51+
(addr, DEFAULT_PORT).to_socket_addrs()?
52+
};
53+
54+
addrs
55+
.next()
56+
.ok_or_else(|| eyre::eyre!("could not resolve address: {addr}"))
57+
}
58+
3659
pub struct NetManStopOnDrop(pub Arc<net::NetManager>, Option<JoinHandle<()>>);
3760

3861
impl Deref for NetManStopOnDrop {

0 commit comments

Comments
 (0)