diff --git a/src/client.rs b/src/client.rs index ec54d51..e94706c 100644 --- a/src/client.rs +++ b/src/client.rs @@ -65,7 +65,7 @@ impl Client { // Begin new connection // * [NetworkAddress](https://docs.gtk.org/gio/class.NetworkAddress.html) required for valid // [SNI](https://geminiprotocol.net/docs/protocol-specification.gmi#server-name-indication) - match request.to_network_address() { + match request.to_network_address(crate::DEFAULT_PORT) { Ok(network_address) => { self.socket .connect_async(&network_address.clone(), Some(&cancellable.clone()), { diff --git a/src/client/connection/request.rs b/src/client/connection/request.rs index 544f86f..4fa1afe 100644 --- a/src/client/connection/request.rs +++ b/src/client/connection/request.rs @@ -18,13 +18,19 @@ impl Request { // Getters /// Get [NetworkAddress](https://docs.gtk.org/gio/class.NetworkAddress.html) for `Self` - pub fn to_network_address(&self) -> Result { + pub fn to_network_address(&self, default_port: u16) -> Result { + let uri = match self { + Self::Gemini(ref request) => request.uri.clone(), + Self::Titan(ref request) => request.uri.clone(), + }; + let port = uri.port(); match crate::gio::network_address::from_uri( - &match self { - Self::Gemini(ref request) => request.uri.clone(), - Self::Titan(ref request) => request.uri.clone(), + &uri, + if port.is_positive() { + port as u16 + } else { + default_port }, - crate::DEFAULT_PORT, ) { Ok(network_address) => Ok(network_address), Err(e) => Err(Error::NetworkAddress(e)),