-- 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