summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgmi2email12
1 files 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;