-- Leo's gemini proxy

-- Connecting to typed-hole.org:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

commit 6a55c22c88b4e3105053dceb7f9ae50ae498f2e3

Author: Julien Blanchard <julien@sideburns.eu>

Date: Fri Jan 3 17:59:25 2020 +0100


[gopher] can open links to finger on port 79


diff --git a/src/castor.glade b/src/castor.glade

index 75f4248..b5e1e84 100644

--- a/src/castor.glade

+++ b/src/castor.glade

@@ -22,6 +22,7 @@

<property name="stock">gtk-go-back</property>

</object>

<object class="GtkApplicationWindow" id="window">

+ <property name="name">window</property>

<property name="can_focus">False</property>

<property name="window_position">center</property>

<property name="default_width">800</property>

diff --git a/src/gopher/client.rs b/src/gopher/client.rs

index 894b083..5a3c03a 100644

--- a/src/gopher/client.rs

+++ b/src/gopher/client.rs

@@ -7,19 +7,28 @@ use crate::Protocol;

pub fn get_data<T: Protocol>(url: T) -> Result<(Option<Vec<u8>>, Vec<u8>), String> {

let url = url.get_source_url();

let host = url.host_str().unwrap().to_string();

- let urlf = format!("{}:70", host);

+ let port = match url.port() {

+ Some(port) => port,

+ None => 70

+ };

+ let urlf = format!("{}:{}", host, port);


match TcpStream::connect(&urlf) {

Ok(mut stream) => {

- let path = url.path().to_string().split_off(1);

+ let mut url_s = url.path().to_string();

+ let path = if url_s.starts_with("/") {

+ url_s.split_off(1)

+ } else {

+ url_s

+ };


let mut url = match url.query() {

Some(query) => format!("{}?{}\n", path, query),

None => format!("{}\n", path),

};


- let url = if url.starts_with("/0/") || url.starts_with("/1/") {

- url.split_off(2)

+ let url = if url.starts_with("0/") || url.starts_with("1/") {

+ url.split_off(1)

} else {

url

};

diff --git a/src/gopher/link.rs b/src/gopher/link.rs

index 4f91e6a..e9eb5ea 100644

--- a/src/gopher/link.rs

+++ b/src/gopher/link.rs

@@ -24,6 +24,7 @@ impl FromStr for Link {

let label = els.next().expect("no label");

let path = els.next();

let host = els.next();

+ let port = els.next();


if let Some(host) = host {

if let Some(p) = path {

@@ -36,12 +37,16 @@ impl FromStr for Link {

format!("/{}", p)

};


- match Url::parse(&format!("gopher://{}{}", host, path)) {

- Ok(url) => Ok(Link::Gopher(url, text)),

- Err(e) => {

- println!("ERR {:?}", e);

- Err(ParseError)

- }

+ if let Some(port) = port {

+ match Url::parse(&format!("gopher://{}:{}{}", host, port, path)) {

+ Ok(url) => Ok(Link::Gopher(url, text)),

+ Err(e) => {

+ println!("ERR {:?}", e);

+ Err(ParseError)

+ }

+ }

+ } else {

+ Err(ParseError)

}

} else {

Err(ParseError)



---

Served by Pollux Gemini Server.

-- Response ended

-- Page fetched on Sun May 19 06:34:58 2024