From f74e08fca8197c3b3227b6d5c1c9a4052cc6ad2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Fri, 25 Jul 2014 22:35:31 +0200 Subject: [PATCH] gopher: Handle info resources and add proper title We now create a proper title from the error message, or the TITLE resource if present. --- src/kits/network/libnetapi/GopherRequest.cpp | 22 +++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/kits/network/libnetapi/GopherRequest.cpp b/src/kits/network/libnetapi/GopherRequest.cpp index 26866182db..cbfaa61882 100644 --- a/src/kits/network/libnetapi/GopherRequest.cpp +++ b/src/kits/network/libnetapi/GopherRequest.cpp @@ -405,6 +405,7 @@ BGopherRequest::_ParseInput(bool last) fprintf(stderr, "type: '%c' name: '%s'\n", type, fields.StringAt(FIELD_NAME).String()); //fields.PrintToStream(); + BString pageTitle; BString item; BString title = fields.StringAt(FIELD_NAME); BString link("gopher://"); @@ -449,6 +450,19 @@ BGopherRequest::_ParseInput(bool last) case GOPHER_TYPE_ERROR: item << "" << title << "" "
\n"; + if (fPosition == 0 && pageTitle.Length() == 0) + pageTitle << "Error: " << title; + break; + case GOPHER_TYPE_INFO: + // TITLE resource, cf. + // gopher://gophernicus.org/0/doc/gopher/gopher-title-resource.txt + if (fPosition == 0 && pageTitle.Length() == 0 + && fields.StringAt(FIELD_SELECTOR) == "TITLE") { + pageTitle = title; + break; + } + item << "" << title << "" + "
\n"; break; default: item << "
" << fields.StringAt(FIELD_NAME) << "
"; @@ -456,7 +470,9 @@ BGopherRequest::_ParseInput(bool last) } if (fPosition == 0) { - BString title = "TITLE"; + if (pageTitle.Length() == 0) + pageTitle << "Index of " << Url(); + const char *uplink = "."; if (fPath.EndsWith("/")) uplink = ".."; @@ -473,14 +489,14 @@ BGopherRequest::_ParseInput(bool last) "type=\"text/css\" href=\"resource:internal.css\">\n" "\n" - "" << title << "\n" + "" << pageTitle << "\n" "\n" "\n" "\n" - "

" << title << "

\n"; + "

" << pageTitle << "

\n"; fListener->DataReceived(this, header.String(), fPosition, header.Length());