From 5b02197c3b928beb7b2de297df05a299ff188765 Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Sun, 24 Jan 2021 12:30:27 -0700 Subject: gmi2email: handle redirects Signed-off-by: Sean Whitton --- gmi2email | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/gmi2email b/gmi2email index d0b2fa9..8510643 100755 --- a/gmi2email +++ b/gmi2email @@ -182,8 +182,16 @@ sub gemini_fetch { ); print $cl "$uri\r\n"; - my ($status, $meta) = <$cl> =~ /^([0-9]+) (.+)/; - 20 <= $status and $status < 30 or die "gemini error: $status $meta"; + my ($status, $meta) = <$cl> =~ /^([0-9]+) (\V+)/; + if (30 <= $status and $status < 40) { + $opts{orig_uri} = $uri unless $opts{redirects}; + die "too many redirects while fetching $opts{orig_uri}" + if $opts{redirects} and $opts{redirects} > 5; + $opts{redirects}++; + return gemini_fetch($meta, %opts); + } elsif ($status < 20 or $status >= 40) { + die "gemini error: $status $meta"; + } if ($meta =~ "^text/gemini") { my @lines; -- cgit v1.2.3