]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Remove support for Gopher protocol (#1092)
authorAlex Rousskov <rousskov@measurement-factory.com>
Tue, 26 Jul 2022 15:05:54 +0000 (15:05 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Wed, 27 Jul 2022 01:47:01 +0000 (01:47 +0000)
Gopher code quality remains too low for production use in most
environments. The code is a persistent source of vulnerabilities and
fixing it requires significant effort. We should not be spending scarce
Project resources on improving that code, especially given the lack of
strong demand for Gopher support.

With this change, Gopher requests will be handled like any other request
with an unknown (to Squid) protocol. For example, HTTP requests with
Gopher URI scheme result in ERR_UNSUP_REQ.

Default Squid configuration still considers TCP port 70 "safe". The
corresponding Safe_ports ACL rule has not been removed for consistency
sake: We consider WAIS port safe even though Squid refuses to forward
WAIS requests:

    acl Safe_ports port 70          # gopher
    acl Safe_ports port 210         # wais

69 files changed:
doc/Programming-Guide/Groups.dox
doc/debug-sections.txt
doc/manuals/de.po
doc/manuals/en.po
doc/manuals/en_AU.po
doc/manuals/es.po
doc/manuals/fr.po
doc/manuals/it.po
errors/af.po
errors/az.po
errors/bg.po
errors/ca.po
errors/cs.po
errors/da.po
errors/de.po
errors/el.po
errors/en.po
errors/errorpage.css
errors/es-mx.po
errors/es.po
errors/et.po
errors/fi.po
errors/fr.po
errors/he.po
errors/hu.po
errors/hy.po
errors/it.po
errors/ja.po
errors/ko.po
errors/lt.po
errors/lv.po
errors/nl.po
errors/pl.po
errors/pt-br.po
errors/pt.po
errors/ro.po
errors/ru.po
errors/sk.po
errors/sl.po
errors/sr-latn.po
errors/sv.po
errors/templates/ERR_UNSUP_REQ
errors/tr.po
errors/uk.po
errors/vi.po
errors/zh-hans.po
errors/zh-hant.po
src/FwdState.cc
src/HttpRequest.cc
src/IoStats.h
src/Makefile.am
src/adaptation/ecap/Host.cc
src/adaptation/ecap/MessageRep.cc
src/anyp/ProtocolType.h
src/anyp/Uri.cc
src/anyp/UriScheme.cc
src/cf.data.pre
src/client_side_request.cc
src/error/forward.h
src/gopher.cc [deleted file]
src/gopher.h [deleted file]
src/http/Message.h
src/mgr/IoAction.cc
src/mgr/IoAction.h
src/squid.8.in
src/stat.cc
src/tests/Stub.am
src/tests/stub_gopher.cc [deleted file]
test-suite/squidconf/regressions-3.4.0.1

index e115be0b0f96b06e9f9624fd942f00761f753a45..b56feb4bcbd4d4cb1ebb1d7b1dbc9a3055e884c1 100644 (file)
  *   caches.
  *   All requests to other proxies are sent as HTTP requests.
  *   All requests to origin-server are sent in that servers protocol.
- *
- \par
- *   Wais and Gopher don't receive much
- *   attention because they comprise a relatively insignificant
- *   portion of Internet traffic.
  */
 
 /**
index 6569e3a05f08104b2a2c87c3072f5f8f34f2d8bf..686e90dc858074af70f35dbed6a935f2674545b5 100644 (file)
@@ -27,7 +27,6 @@ section 06    Disk I/O Routines
 section 07    Multicast
 section 08    Swap File Bitmap
 section 09    File Transfer Protocol (FTP)
-section 10    Gopher
 section 11    Hypertext Transfer Protocol (HTTP)
 section 12    Internet Cache Protocol (ICP)
 section 13    High Level Memory Pool Management
index dc3d5c2d8e85feee323fa8360c1f06e7b66ee256..9eb319be3292015c892ab2cddb7cdcc15e95d659 100644 (file)
@@ -3868,7 +3868,7 @@ msgid ""
 "blocking process."
 msgstr ""
 "B<squid> ist ein leistungsfähiger Proxy caching Server für Web Clients, "
-"welcher FTP, gopher, ICAP, ICP, HTCP and HTTP Data Objects unterstützt. Im "
+"welcher FTP, ICAP, ICP, HTCP and HTTP Data Objects unterstützt. Im "
 "Unterschied zu traditioneller caching Software verarbeitet B<squid> alle "
 "Anfragen in einem einzigen non-blocking Prozess."
 
index ff93ca08083b9bfe027465123089331b8c16ac6d..68bcb7b4ee703b7e0bfcdc04c61b7f724e217a3c 100644 (file)
@@ -4262,7 +4262,7 @@ msgid ""
 "blocking process."
 msgstr ""
 "B<squid> is a high-performance proxy caching server for web clients, "
-"supporting FTP, gopher, ICAP, ICP, HTCP and HTTP data objects.  Unlike "
+"supporting FTP, ICAP, ICP, HTCP and HTTP data objects.  Unlike "
 "traditional caching software, Squid handles all requests in a single, non-"
 "blocking process."
 
index ca719bb9112606f8fd51256a22ca2bc248168a0c..e8ec8e02b9c1feedf4f8a5b56743e47dc5c00177 100644 (file)
@@ -4060,7 +4060,7 @@ msgid ""
 "blocking process."
 msgstr ""
 "B<squid> is a high-performance proxy caching server for web clients, "
-"supporting FTP, gopher, ICAP, ICP, HTCP and HTTP data objects.  Unlike "
+"supporting FTP, ICAP, ICP, HTCP and HTTP data objects.  Unlike "
 "traditional caching software, Squid handles all requests in a single, non-"
 "blocking process."
 
index 563d07afb4159945f49dc25c333118bffb9d9304..bf5f9881ef85413030d144fdd774797a3af75120 100644 (file)
@@ -2562,7 +2562,7 @@ msgid ""
 "blocking process."
 msgstr ""
 "B<squid> es servidor proxy-caché de alto rendimiento para clientes web que "
-"soporta FTP, gopher, ICAP, ICP, HTCP y objetos de datos HTTP. A diferencia "
+"soporta FTP, ICAP, ICP, HTCP y objetos de datos HTTP. A diferencia "
 "del software de caché tradicional, Squid maneja todas las solicitudes en un "
 "único proceso asíncrono"
 
index a8e001f61438ff8772a12476dd924cdda8bcd7e8..df7455d508a7adb50925ade0810d9b4132aa197e 100644 (file)
@@ -1495,7 +1495,7 @@ msgid ""
 "non-blocking process."
 msgstr ""
 "B<squid> est un serveur proxy de haute performance cachant les clients sur "
-"le web, il supporte les protocoles FTP, Gopher, ICAP, ICP, HTCP et HTTP pour "
+"le web, il supporte les protocoles FTP, ICAP, ICP, HTCP et HTTP pour "
 "le transfert des données. Contrairement aux logiciels de mise en cache "
 "traditionnelle, Squid gère toutes les requêtes en un seul processus non-"
 "bloquant."
index 43238ae053755dec4812afa1fb5fc77d7c2e5710..e46fa8f883abc1ba739c68bbc82104a21f42b3a2 100644 (file)
@@ -1485,7 +1485,7 @@ msgid ""
 "non-blocking process."
 msgstr ""
 "B<squid> è un server proxy con cache ad alte prestazioni per client WWW, con "
-"supporto supporta i protocolli FTP, gopher, ICAP, ICP, HTCP e HTTP. A "
+"supporto supporta i protocolli FTP, ICAP, ICP, HTCP e HTTP. A "
 "differenza di altri software, Squid gestisce tutte operazioni all'interno di "
 "un singolo processo con I/O non bloccante."
 
index 6247a0f83d6cb45c12db7ba38db02f91cc3f0fc3..91c538d4462f81ab33f75ef31a983f062e6ef135 100644 (file)
@@ -809,8 +809,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid ondersteun nie alle navraagmetodes vir alle toegangsprotokolle nie. "
-"Mens kan by voorbeeld nie 'n Gopher-navraag POST nie."
+"Squid ondersteun nie alle navraagmetodes vir alle toegangsprotokolle nie."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -818,8 +817,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid ondersteun nie alle navraagmetodes vir alle toegangsprotokolle nie. "
-"Mens kan by voorbeeld nie 'n Gopher-navraag POST nie."
+"Squid ondersteun nie alle navraagmetodes vir alle toegangsprotokolle nie."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index c02f78690e989373d17e9e082aa06cea16774348..ad85365422d6e1b0b8df04b61a83322d72826faa 100644 (file)
@@ -836,8 +836,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid bütün sorğu metodları və bütün protokollardəstəkləmir. Məsələn, Gopher "
-"protokolu üzrə siz POST sorğu metodunu yerinə yetirə bilməzsiniz."
+"Squid bütün sorğu metodları və bütün protokollardəstəkləmir."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -845,8 +844,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid bütün sorğu metodları və bütün protokollardəstəkləmir. Məsələn, Gopher "
-"protokolu üzrə siz POST sorğu metodunu yerinə yetirə bilməzsiniz."
+"Squid bütün sorğu metodları və bütün protokollardəstəkləmir."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 #, fuzzy
index 0e9f720ee3ba5a7858d2e6655c3208c634bf998f..14dd150196058d10b5f1bc8c5ee33b9ae663979e 100644 (file)
@@ -840,8 +840,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Кеш сървърът не поддържа всички методи на заявка за всички протоколи. "
-"Например, не можете да заявите метод POST за протокол Gopher."
+"Кеш сървърът не поддържа всички методи на заявка за всички протоколи."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -849,8 +848,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Кеш сървърът не поддържа всички методи на заявка за всички протоколи. "
-"Например, не можете да заявите метод POST за протокол Gopher."
+"Кеш сървърът не поддържа всички методи на заявка за всички протоколи."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 9c747a7b4df30c16cf69f579de70e0731c1b1c74..80a193504b8281ffd40351a592537397de53feef 100644 (file)
@@ -834,8 +834,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "La <i>cache</i> no admet tots els tipus de petici&oacute; per a tots els "
-"protocols. Per exemple, no es pot fer una petici&oacute; tipus POST en el "
-"protocol Gopher."
+"protocols."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -844,8 +843,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "La <i>cache</i> no admet tots els tipus de petici&oacute; per a tots els "
-"protocols. Per exemple, no es pot fer una petici&oacute; tipus POST en el "
-"protocol Gopher."
+"protocols."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 #, fuzzy
index be8600674dc405ba2fb38dd4fa1e805d130ab8a8..066893051c98ce5f28dfe0879a465a116e363785 100644 (file)
@@ -831,8 +831,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid nepodporuje všechny typy metod u všech protokolů. Např. není možno "
-"použit metodu POST u služby GOPHER."
+"Squid nepodporuje všechny typy metod u všech protokolů."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -840,8 +839,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid nepodporuje všechny typy metod u všech protokolů. Např. není možno "
-"použit metodu POST u služby GOPHER."
+"Squid nepodporuje všechny typy metod u všech protokolů."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 5724aa395ac3e568abe751f6df37595879e1eb6d..1ecad0e01303065c7f5b689767984b3c79e98a33 100644 (file)
@@ -829,8 +829,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Proxy'en Squid underst&oslash;tter ikke alle foresp&oslash;rgselsmetoder for "
-"alle adgangs protokoller. For eksempel kan du ikke POST en Gopher "
-"foresp&oslash;rgsel."
+"alle adgangs protokoller."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -839,8 +838,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "Proxy'en Squid underst&oslash;tter ikke alle foresp&oslash;rgselsmetoder for "
-"alle adgangs protokoller. For eksempel kan du ikke POST en Gopher "
-"foresp&oslash;rgsel."
+"alle adgangs protokoller."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index bb6c51d1ab083db2ea9ca6af71c061c1a741a98b..794991b0320de70f69efd103aa11ba85a856f327 100644 (file)
@@ -832,8 +832,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid unterstützt nicht alle Anfragemethoden für alle Protokolle. Sie können "
-"zum Beispiel keine POST Anfrage über das Gopher Protokoll senden."
+"Squid unterstützt nicht alle Anfragemethoden für alle Protokolle."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -841,8 +840,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid unterstützt nicht alle Anfragemethoden für alle Protokolle. Sie können "
-"zum Beispiel keine POST Anfrage über das Gopher Protokoll senden."
+"Squid unterstützt nicht alle Anfragemethoden für alle Protokolle."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 5182951cb25d51cd63827750f6dc6ddda5dc1bd8..64f5a02a536ec6cab84c73370481d0544d88c455 100644 (file)
@@ -843,7 +843,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Το Squid δεν υποστηρίζει όλες τις μεθόδους αιτήσεων για όλα τα πρωτόκολλα "
-"πρόσβασης. Για παράδειγμα, το POST για Gopher δεν υποστηρίζεται."
+"πρόσβασης."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -852,7 +852,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "Το Squid δεν υποστηρίζει όλες τις μεθόδους αιτήσεων για όλα τα πρωτόκολλα "
-"πρόσβασης. Για παράδειγμα, το POST για Gopher δεν υποστηρίζεται."
+"πρόσβασης."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 8b186cd9f0269f77c85e2014974551deb0953211..48f3356730e828eb11d140f0e7f284f9c23ea0fd 100644 (file)
@@ -832,8 +832,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid does not support all request methods for all access protocols. For "
-"example, you can not POST a Gopher request."
+"Squid does not support all request methods for all access protocols."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -841,8 +840,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid does not support all request methods for all access protocols. For "
-"example, you can not POST a Gopher request."
+"Squid does not support all request methods for all access protocols."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 5e4fd4750cbd7eccab0d392f914da3db295eb307..5f12619a62c657eac8fa54fb6882dc7d7a27aa78 100644 (file)
@@ -73,7 +73,7 @@ p {
 pre {
 }
 
-/* special event: FTP / Gopher directory listing */
+/* special event: FTP directory listing */
 #dirmsg {
     font-family: courier, monospace;
     color: black;
index b3152bb80818f82d870676b5846687ee8fcf415e..30898670321dfcca9bd3a90a1280392185a05fad 100644 (file)
@@ -843,8 +843,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Squid no soporta todos los métodos de solicitud para algunos protocolos de "
-"acceso. Por ejemplo, no es posible hacer una solcitud POST a un servidor "
-"Gopher."
+"acceso."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 msgid ""
index 0f9ea201317b7185f85ced1ef75ae44a54348217..3ed1d3101a28a66dea54a12f79cc55d5651bdb17 100644 (file)
@@ -850,7 +850,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Squid no admite todos los m&eacute;todos para todos los protocolos de "
-"acceso. Por ejemplo, no se puede hacer un POST a un servidor Gopher."
+"acceso."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -859,7 +859,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "Squid no admite todos los m&eacute;todos para todos los protocolos de "
-"acceso. Por ejemplo, no se puede hacer un POST a un servidor Gopher."
+"acceso."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index c1347bb595afe84d317b1a2fc2494a2fb3983c38..1ee068d0f3c78ec960183d7abf053f5b6e6beb3c 100644 (file)
@@ -838,8 +838,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Squid ei toeta k&otilde;iki p&auml;ringu meetodeid k&otilde;ikide "
-"protokollidega. N&auml;iteks, te ei saa teha POST operatsiooni Gopher p&auml;"
-"ringus."
+"protokollidega."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -848,8 +847,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "Squid ei toeta k&otilde;iki p&auml;ringu meetodeid k&otilde;ikide "
-"protokollidega. N&auml;iteks, te ei saa teha POST operatsiooni Gopher p&auml;"
-"ringus."
+"protokollidega."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index bd7d74ecf9596d25d08a33c8a575e17aadf14000..1e9ad8ad0a67c8466f79136e7f809c03034bb4f0 100644 (file)
@@ -823,8 +823,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid ei tue kaikkia hakupyynnon tyyppejä kaikilla protokollilla. Et voi "
-"esimerkiksi käyttää POST-pyyntöä gopherilla."
+"Squid ei tue kaikkia hakupyynnon tyyppejä kaikilla protokollilla."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -832,8 +831,8 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid ei tue kaikkia hakupyynnon tyyppejä kaikilla protokollilla. Et voi "
-"esimerkiksi käyttää POST-pyyntöä gopherilla."
+"Squid ei tue kaikkia pääsyprotokollia. Esimerkiksi SSH-protokolla "
+"ei ole tällä hetkellä tuettu."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index cdc84d8e466f728d553fe44f687ddc843fd534f2..0093fa98b03a65ee00fb737e996940c348045d89 100644 (file)
@@ -852,8 +852,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Squid ne prend pas en charge tous les types de requêtes par rapport à tous "
-"les protocoles d'accès. Vous ne pouvez pas par exemple utiliser une requête "
-"POST avec le protocole Gopher."
+"les protocoles d'accès."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -862,8 +861,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "Squid ne prend pas en charge tous les types de requêtes par rapport à tous "
-"les protocoles d'accès. Vous ne pouvez pas par exemple utiliser une requête "
-"POST avec le protocole Gopher."
+"les protocoles d'accès."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index ccb27a39286d2449c0bcf860025ca8bafa523cb3..8ab0ee912876d7095297d0933408ba482084116b 100644 (file)
@@ -827,8 +827,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"שרת ה Squid אינו תומך בכל שיטות הבקשה לכל הפרוטוקולים. לדוגמא אינך יכול "
-"לשלוח בקשת POST ב-Gopher."
+"שרת ה Squid אינו תומך בכל שיטות הבקשה לכל הפרוטוקולים."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -836,8 +835,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"שרת ה Squid אינו תומך בכל שיטות הבקשה לכל הפרוטוקולים. לדוגמא אינך יכול "
-"לשלוח בקשת POST ב-Gopher."
+"שרת ה Squid אינו תומך בכל שיטות הבקשה לכל הפרוטוקולים."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 6e634b255849670d99e22cd03cbf96da273b5f48..f6e8ecbbf7f8caf807b38510124c211e702e74b6 100644 (file)
@@ -836,8 +836,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "A proxyszerver nem támogat minden létező kéréstípus és protokoll "
-"kombinációt, így pl. nem lehet POST kéréstípust használni egy Gopher "
-"kérésben."
+"kombinációt."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -846,8 +845,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "A proxyszerver nem támogat minden létező kéréstípus és protokoll "
-"kombinációt, így pl. nem lehet POST kéréstípust használni egy Gopher "
-"kérésben."
+"kombinációt."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 446707cb6fe4e5f160b25f627d80eef56db714c8..7365c13ac6b5b69fd58f4ce827f7393bada0559a 100644 (file)
@@ -824,8 +824,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid-ը բոլոր արձանագրությունների համար բոլոր հարցման մեթոդները չի աջակցում. "
-"Օրինակ, Gopher արձանագրության համար չեք կարող POST հարցում կատարել."
+"Squid-ը բոլոր արձանագրությունների համար բոլոր հարցման մեթոդները չի աջակցում."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -833,8 +832,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid-ը բոլոր արձանագրությունների համար բոլոր հարցման մեթոդները չի աջակցում. "
-"Օրինակ, Gopher արձանագրության համար չեք կարող POST հարցում կատարել."
+"Squid-ը բոլոր արձանագրությունների համար բոլոր հարցման մեթոդները չի աջակցում."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index b6ca112800f947adb178b775b2ad5a511cc317d1..7b44d360ec7f3fd03fb4895a9dcaf1a82cca797f 100644 (file)
@@ -853,7 +853,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Squid non consente di utilizzare qualsiasi tipo di richiesta per qualsiasi "
-"protocollo (a esempio non consente una richiesta POST su protocollo Gopher)."
+"protocollo."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -862,7 +862,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "Squid non consente di utilizzare qualsiasi tipo di richiesta per qualsiasi "
-"protocollo (a esempio non consente una richiesta POST su protocollo Gopher)."
+"protocollo."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 6664e40d85ee49867f1a08b3c603933ebff66fa1..beb06def92176d2032edad6c795a17f0212c917d 100644 (file)
@@ -837,8 +837,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Squidはすべてのアクセス・プロトコルに対して、すべてのリクエストメソッドをサ"
-"ポートしているわけではありません。例えば、POSTをGopherのリクエストで行うこと"
-"はできません。"
+"ポートしているわけではありません。"
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -847,8 +846,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "Squidはすべてのアクセス・プロトコルに対して、すべてのリクエストメソッドをサ"
-"ポートしているわけではありません。例えば、POSTをGopherのリクエストで行うこと"
-"はできません。"
+"ポートしているわけではありません。"
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 049c8ae1f035a9bacd72b2d0cb94687eb35466a7..829aebd8e6d3efc3940544ab7f64f51327ca2f03 100644 (file)
@@ -827,8 +827,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid는 모든 접속 프로토콜에 대한 request method를 지원하지 않습니다. 한가지 "
-"예로, Gopher에서 POST request를 사용할 수 없습니다."
+"Squid는 모든 접속 프로토콜에 대한 request method를 지원하지 않습니다."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -836,8 +835,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid는 모든 접속 프로토콜에 대한 request method를 지원하지 않습니다. 한가지 "
-"예로, Gopher에서 POST request를 사용할 수 없습니다."
+"Squid는 모든 접속 프로토콜에 대한 request method를 지원하지 않습니다."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 85fdaa9d77a3df70b06aa9458cde64acc146d58b..8c0993f82384c7339c4bd57b2ef3dd914b6487e2 100644 (file)
@@ -836,8 +836,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid palaiko ne visus užklausos metodus daliai protokolų. Pavyzdžiui, jūs "
-"negalite vykdyti POST Gopher tipo užklausoje."
+"Squid palaiko ne visus užklausos metodus daliai protokolų."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -845,8 +844,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid palaiko ne visus užklausos metodus daliai protokolų. Pavyzdžiui, jūs "
-"negalite vykdyti POST Gopher tipo užklausoje."
+"Squid palaiko ne visus užklausos metodus daliai protokolų."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index d9d6dfe8dbdc6d4c4e1c9eb1d1a516803deaa14f..eab4677983dd501cf2dea18673c791774a82942b 100644 (file)
@@ -840,8 +840,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid neatbalsta visas pieprasījuma metodes visiem protokoliem. Piemēram, "
-"Jūs nevarat veikt POST pieprasījumu izmantojot Gopher protokolu."
+"Squid neatbalsta visas pieprasījuma metodes visiem protokoliem."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -849,8 +848,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid neatbalsta visas pieprasījuma metodes visiem protokoliem. Piemēram, "
-"Jūs nevarat veikt POST pieprasījumu izmantojot Gopher protokolu."
+"Squid neatbalsta visas pieprasījuma metodes visiem protokoliem."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index fcc71949d12f243e80ecfa16af174b9ac9b4d056..93197e5ae8fd1321932e64488e0b6deaedf76dc3 100644 (file)
@@ -842,8 +842,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid ondersteunt niet alle verzoekmethoden voor alle toegangsprotocollen. U "
-"kunt bijvoorbeeld geen Gopher verzoek POSTen."
+"Squid ondersteunt niet alle verzoekmethoden voor alle toegangsprotocollen."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -851,8 +850,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid ondersteunt niet alle verzoekmethoden voor alle toegangsprotocollen. U "
-"kunt bijvoorbeeld geen Gopher verzoek POSTen."
+"Squid ondersteunt niet alle verzoekmethoden voor alle toegangsprotocollen."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 3400ff443dd7d7d06c8c2e648a09db2a6b6571c8..e4104d17ad440144d6958c47339144fc5dceca5d 100644 (file)
@@ -831,8 +831,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid nie wspiera wszystkich metod we wszystkich protokołach. Na przykład "
-"nie możesz użyć metody POST w żądaniu skierowanym do usługi Gopher."
+"Squid nie wspiera wszystkich metod we wszystkich protokołach."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -840,8 +839,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid nie wspiera wszystkich metod we wszystkich protokołach. Na przykład "
-"nie możesz użyć metody POST w żądaniu skierowanym do usługi Gopher."
+"Squid nie wspiera wszystkich metod we wszystkich protokołach."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index b13c2ab736468c09ba3cf19ec1494afa4e44c349..77eb19025d47c3d76844382b05c4d71685bfef50 100644 (file)
@@ -842,8 +842,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Squid não suporta todos os métodos de requisição para todos os protocolos de "
-"acesso. Por exemplo, você não pode emitir uma requisição POST ao protocolo "
-"Gopher."
+"acesso."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -852,8 +851,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "Squid não suporta todos os métodos de requisição para todos os protocolos de "
-"acesso. Por exemplo, você não pode emitir uma requisição POST ao protocolo "
-"Gopher."
+"acesso."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 3d6e5cb08f6cf4b181f303c5b96323d2bcc1f4af..3e576bf11f46cb2b6ff7643cb53a63858b6764a6 100644 (file)
@@ -840,8 +840,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid não suporta todos os métodos para todos os protocolos. Por exemplo: "
-"você não pode fazer cache de Gopher."
+"Squid não suporta todos os métodos para todos os protocolos."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -849,8 +848,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid não suporta todos os métodos para todos os protocolos. Por exemplo: "
-"você não pode fazer cache de Gopher."
+"Squid não suporta todos os métodos para todos os protocolos."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index fff40e46053dc85103b692507c69114081185609..9aa730146017e76217afdfe1fd01cb1ff58b1857 100644 (file)
@@ -848,7 +848,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Squid nu suportă toate metodele de cerere pentru toate protocoalele de "
-"acces. De exemplu, nu puteţi face o cerere de tip POST pentru Gopher."
+"acces."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -857,7 +857,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "Squid nu suportă toate metodele de cerere pentru toate protocoalele de "
-"acces. De exemplu, nu puteţi face o cerere de tip POST pentru Gopher."
+"acces."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index d9c21c08b32abdf8128ee01bea3373c2d682ed36..f000ecb8c213872b666c5dc50fdb2dc83afc1502 100644 (file)
@@ -825,8 +825,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid не поддерживает все методы запросов для всех протоколов. К примеру, "
-"для протокола Gopher Вы не можете выполнить запрос POST."
+"Squid не поддерживает все методы запросов для всех протоколов."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -834,8 +833,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid не поддерживает все методы запросов для всех протоколов. К примеру, "
-"для протокола Gopher Вы не можете выполнить запрос POST."
+"Squid не поддерживает все методы запросов для всех протоколов."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 44a2a1c5ac46e0e7c18452c4f4e800ca8d0e3c59..df3bffe8b3cc6828c8da182ae10f48dcdb396bce 100644 (file)
@@ -837,8 +837,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid nepodporuje všetky typy metód pri všetkých protokoloch. Napríklad: nie "
-"je možné použiť metódu POST pri službe Gopher."
+"Squid nepodporuje všetky typy metód pri všetkých protokoloch."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -846,8 +845,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid nepodporuje všetky typy metód pri všetkých protokoloch. Napríklad: nie "
-"je možné použiť metódu POST pri službe Gopher."
+"Squid nepodporuje všetky typy metód pri všetkých protokoloch."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 31860264d4a47188acea19400eb002669bf47979..0f7ff9f2184274e2408e74e1668bba1a5609cbca 100644 (file)
@@ -827,8 +827,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid ne podpira vseh metod zahtev za vse protokole dostopa. Tako npr. "
-"metode POST ne morete uporabiti za zahtevo Gopher."
+"Squid ne podpira vseh metod zahtev za vse protokole dostopa."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -836,8 +835,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid ne podpira vseh metod zahtev za vse protokole dostopa. Tako npr. "
-"metode POST ne morete uporabiti za zahtevo Gopher."
+"Squid ne podpira vseh metod zahtev za vse protokole dostopa."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index c85fae5e91d4911306f25de5072d1d1efd995a07..2ab43f5668b41130f9c33999acb1ca50039b6f97 100644 (file)
@@ -835,7 +835,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Squid Proksi server ne podržava sve metode zahteva za sve moguæe pristupne "
-"protokole. Na primer ne možete da uradite POST na Gopher zahtev."
+"protokole."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -844,7 +844,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "Squid Proksi server ne podržava sve metode zahteva za sve moguæe pristupne "
-"protokole. Na primer ne možete da uradite POST na Gopher zahtev."
+"protokole."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index fe32b666e002f1cba0871de191790af904dec4d8..0f4d2ac4a5c67e58f7d6cfcbdc1ddf5c70602d8d 100644 (file)
@@ -845,8 +845,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid st&ouml;djer inte alla fr&aring;gemetoder f&ouml;r alla protokoll. "
-"Till exempel, Ni kan inte POST'a en Gopher f&ouml;rfr&aring;gan."
+"Squid st&ouml;djer inte alla fr&aring;gemetoder f&ouml;r alla protokoll."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -854,8 +853,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid st&ouml;djer inte alla fr&aring;gemetoder f&ouml;r alla protokoll. "
-"Till exempel, Ni kan inte POST'a en Gopher f&ouml;rfr&aring;gan."
+"Squid st&ouml;djer inte alla fr&aring;gemetoder f&ouml;r alla protokoll."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index b2310ae2039032964a2fcc9a54a819e1620282fd..7cc4e20b48011a7a949b28e728bb9b3d88d03837 100644 (file)
@@ -24,7 +24,7 @@ body
 <p><b>Unsupported Request Method and Protocol</b></p>
 </blockquote>
 
-<p>Squid does not support all request methods for all access protocols. For example, you can not POST a Gopher request.</p>
+<p>Squid does not support all request methods for all access protocols.</p>
 
 <p>Your cache administrator is <a href="mailto:%w%W">%w</a>.</p>
 <br>
index 4abf5bfc0a67d9fa4f9f91fa88db0684fa232c72..ed437f7b2d67f1206795b4341565017eedd24758 100644 (file)
@@ -829,8 +829,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid, bazı erişim protokollerin, bazı istek yöntemlerini desteklemiyor. "
-"Örneğin Gopher isteğinizde POST yapamazsınız."
+"Squid, bazı erişim protokollerin, bazı istek yöntemlerini desteklemiyor."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -838,8 +837,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid, bazı erişim protokollerin, bazı istek yöntemlerini desteklemiyor. "
-"Örneğin Gopher isteğinizde POST yapamazsınız."
+"Squid, bazı erişim protokollerin, bazı istek yöntemlerini desteklemiyor."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 692d8fc555e36b2ce5f54adb010c369adee2a4d6..b8f0c0dbc915a26d4827e2da27cd7d51245b02cf 100644 (file)
@@ -839,8 +839,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid не підтримує всі методи запитів для всіх наявних протоколів. Як "
-"приклад, Ви не можете виконати запит POST для протоколу Gopher."
+"Squid не підтримує всі методи запитів для всіх наявних протоколів."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -848,8 +847,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid не підтримує всі методи запитів для всіх наявних протоколів. Як "
-"приклад, Ви не можете виконати запит POST для протоколу Gopher."
+"Squid не підтримує всі методи запитів для всіх наявних протоколів."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index fad4262a717bda50f41ee1f36a2dde17f0b9c067..ec82cc4340e9d6add0e862f44fd26193867ad4fa 100644 (file)
@@ -823,7 +823,7 @@ msgid ""
 "example, you can not POST a Gopher request."
 msgstr ""
 "Squid không hỗ trợ tất cả các phương pháp yêu cầu cho mỗi giao thức truy "
-"cập. Chẳng hạn, bạn không có khả năng POST một yêu cầu Gopher."
+"cập."
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -832,7 +832,7 @@ msgid ""
 "is currently not supported."
 msgstr ""
 "Squid không hỗ trợ tất cả các phương pháp yêu cầu cho mỗi giao thức truy "
-"cập. Chẳng hạn, bạn không có khả năng POST một yêu cầu Gopher."
+"cập."
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 5974020c76166d66039c87417b5e52880a68edd0..268921f26a94ce61d7cf86468ad3ab9ac67c7ced 100644 (file)
@@ -814,8 +814,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"Squid (缓存服务器)不能对所有的存取协议支持所有的请求方式。比如说,你不能对 "
-"GOPHER 进行一个 POST 请求。"
+"Squid (缓存服务器)不能对所有的存取协议支持所有的请求方式。"
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -823,8 +822,7 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"Squid (缓存服务器)不能对所有的存取协议支持所有的请求方式。比如说,你不能对 "
-"GOPHER 进行一个 POST 请求。"
+"Squid (缓存服务器)不能对所有的存取协议支持所有的请求方式。"
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 0aaeceb43d47a53faec7e0d445a9418d12035a5a..4b9dadd3ef00e38a34a9926dc345903ebfcfd900 100644 (file)
@@ -822,8 +822,7 @@ msgid ""
 "Squid does not support all request methods for all access protocols. For "
 "example, you can not POST a Gopher request."
 msgstr ""
-"因為 Squid (網路快取程式)並未支援所有的連結要求方式在各式通訊協定上。比如"
-"說,你不能要求一個 GOPHER 的 POST 連結要求。"
+"因為 Squid (網路快取程式)並未支援所有的連結要求方式在各式通訊協定上。"
 
 #: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
 #, fuzzy
@@ -831,8 +830,8 @@ msgid ""
 "Squid does not support some access protocols. For example, the SSH protocol "
 "is currently not supported."
 msgstr ""
-"因為 Squid (網路快取程式)並未支援所有的連結要求方式在各式通訊協定上。比如"
-"說,你不能要求一個 GOPHER 的 POST 連結要求。"
+"Squid 不支持某些訪問協議。例如 SSH 協議 "
+"目前不支持。"
 
 #: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
 msgid ""
index 42098a8b88e4a541bef734795a5684184ada8b5f..3f6f9a933e43373f4d8ac6c8dd7be58e0f119c5d 100644 (file)
@@ -29,7 +29,6 @@
 #include "fde.h"
 #include "FwdState.h"
 #include "globals.h"
-#include "gopher.h"
 #include "HappyConnOpener.h"
 #include "hier_code.h"
 #include "http.h"
@@ -1284,10 +1283,6 @@ FwdState::dispatch()
             httpStart(this);
             break;
 
-        case AnyP::PROTO_GOPHER:
-            gopherStart(this);
-            break;
-
         case AnyP::PROTO_FTP:
             if (request->flags.ftpNative)
                 Ftp::StartRelay(this);
index f7543c7d747e978e8d47c87cbaae81f4ecbe34ae..0920f08a0c441278e9f3eaf469e60fa09f9645ef 100644 (file)
@@ -19,7 +19,6 @@
 #include "Downloader.h"
 #include "error/Detail.h"
 #include "globals.h"
-#include "gopher.h"
 #include "http.h"
 #include "http/ContentLengthInterpreter.h"
 #include "http/one/RequestParser.h"
@@ -561,11 +560,6 @@ HttpRequest::maybeCacheable()
             return false;
         break;
 
-    case AnyP::PROTO_GOPHER:
-        if (!gopherCachable(this))
-            return false;
-        break;
-
     case AnyP::PROTO_CACHE_OBJECT:
         return false;
 
index 96f64f523cc2d920428b35c8123fedb1b4dec5b2..886607a512054e7db3786f444ef55f4f7eda08c3 100644 (file)
@@ -22,7 +22,7 @@ public:
         int writes;
         int write_hist[histSize];
     }
-    Http, Ftp, Gopher;
+    Http, Ftp;
 };
 
 #endif /* SQUID_IOSTATS_H_ */
index d337695b0b996a8ff92f232a50473d0bdb04aba1..ef54d01f74f98d9d2f6d91bbaed1b73d1430739e 100644 (file)
@@ -369,8 +369,6 @@ squid_SOURCES = \
        fs_io.cc \
        fs_io.h \
        globals.h \
-       gopher.cc \
-       gopher.h \
        helper.cc \
        helper.h \
        hier_code.h \
@@ -1850,8 +1848,6 @@ tests_test_http_range_SOURCES = \
        fqdncache.h \
        fs_io.cc \
        fs_io.h \
-       tests/stub_gopher.cc \
-       gopher.h \
        helper.cc \
        hier_code.h \
        http.cc \
@@ -2235,8 +2231,6 @@ tests_testHttpRequest_SOURCES = \
        fqdncache.h \
        fs_io.cc \
        fs_io.h \
-       tests/stub_gopher.cc \
-       gopher.h \
        helper.cc \
        hier_code.h \
        http.cc \
@@ -2535,8 +2529,6 @@ tests_testCacheManager_SOURCES = \
        fqdncache.h \
        fs_io.cc \
        fs_io.h \
-       tests/stub_gopher.cc \
-       gopher.h \
        helper.cc \
        hier_code.h \
        http.cc \
index 6202a5f14d38e5c01d6c738d9c287b264aad55e9..411cac21a64fd72df42b340a5ed9ae607e5beaf8 100644 (file)
@@ -49,7 +49,6 @@ Adaptation::Ecap::Host::Host()
     libecap::protocolHttp.assignHostId(AnyP::PROTO_HTTP);
     libecap::protocolHttps.assignHostId(AnyP::PROTO_HTTPS);
     libecap::protocolFtp.assignHostId(AnyP::PROTO_FTP);
-    libecap::protocolGopher.assignHostId(AnyP::PROTO_GOPHER);
     libecap::protocolWais.assignHostId(AnyP::PROTO_WAIS);
     libecap::protocolUrn.assignHostId(AnyP::PROTO_URN);
     libecap::protocolWhois.assignHostId(AnyP::PROTO_WHOIS);
index 9e9ae699c35f8f1c79459ea8408f8714e7a176d2..82d35b038bf891dcece0346089fb733ec96a4266 100644 (file)
@@ -140,8 +140,6 @@ Adaptation::Ecap::FirstLineRep::protocol() const
         return libecap::protocolHttps;
     case AnyP::PROTO_FTP:
         return libecap::protocolFtp;
-    case AnyP::PROTO_GOPHER:
-        return libecap::protocolGopher;
     case AnyP::PROTO_WAIS:
         return libecap::protocolWais;
     case AnyP::PROTO_WHOIS:
index e736c19a3941d51b57f10da2162584a2cab5b1d0..a233da5b88820e80534a4692fec23a2133e7e532 100644 (file)
@@ -27,7 +27,6 @@ typedef enum {
     PROTO_HTTPS,
     PROTO_COAP,
     PROTO_COAPS,
-    PROTO_GOPHER,
     PROTO_WAIS,
     PROTO_CACHE_OBJECT,
     PROTO_ICP,
index a0ad40ce0292be6fd9b5256048fde0590b0304b5..d84b84390f7c7d8fa4cca2eeebb6f4f2898a48a7 100644 (file)
@@ -869,7 +869,6 @@ urlCheckRequest(const HttpRequest * r)
             return true;
         return false;
 
-    case AnyP::PROTO_GOPHER:
     case AnyP::PROTO_WAIS:
     case AnyP::PROTO_WHOIS:
         if (r->method == Http::METHOD_GET ||
index ef8c71cc28d2933cb052bf469f813d32a1c13ae9..1a26faeab81d9c64fb7cac29881bcd509201dc9a 100644 (file)
@@ -87,9 +87,6 @@ AnyP::UriScheme::defaultPort() const
         // Assuming IANA policy of allocating same port for base and TLS protocol versions will occur.
         return 5683;
 
-    case AnyP::PROTO_GOPHER:
-        return 70;
-
     case AnyP::PROTO_WAIS:
         return 210;
 
index 6d22533682b1bf3af56c6c8c7b208caa14453e4f..63bfa3d2cbc32150ef2d74e04bb3b86a9d758b63 100644 (file)
@@ -4862,7 +4862,7 @@ DOC_START
                [http::]<bs     Number of HTTP-equivalent message body bytes
                                received from the next hop, excluding chunked
                                transfer encoding and control messages.
-                               Generated FTP/Gopher listings are treated as
+                               Generated FTP listings are treated as
                                received bodies.
 
            TIMING
@@ -6476,7 +6476,6 @@ CONFIG_START
 # Add any of your own refresh_pattern entries above these.
 #
 refresh_pattern ^ftp:          1440    20%     10080
-refresh_pattern ^gopher:       1440    0%      1440
 refresh_pattern -i (/cgi-bin/|\?) 0    0%      0
 refresh_pattern .              0       20%     4320
 CONFIG_END
@@ -9215,7 +9214,7 @@ DOC_START
        client IP can use. Any more than this and Squid will begin to drop
        new connections from the client until it closes some links.
 
-       Note that this is a global limit. It affects all HTTP, HTCP, Gopher and FTP
+       Note that this is a global limit. It affects all HTTP, HTCP, and FTP
        connections from the client. For finer control use the ACL access controls.
 
        Requires client_db to be enabled (the default).
index aa9d6ec7dba00843cdecb5b9576e206002c98856..3247d793cb9be83074290835282439ce7e5a20d4 100644 (file)
@@ -34,7 +34,6 @@
 #include "fde.h"
 #include "format/Token.h"
 #include "FwdState.h"
-#include "gopher.h"
 #include "helper.h"
 #include "helper/Reply.h"
 #include "http.h"
@@ -907,9 +906,6 @@ clientHierarchical(ClientHttpRequest * http)
     if (request->url.getScheme() == AnyP::PROTO_HTTP)
         return method.respMaybeCacheable();
 
-    if (request->url.getScheme() == AnyP::PROTO_GOPHER)
-        return gopherCachable(request);
-
     if (request->url.getScheme() == AnyP::PROTO_CACHE_OBJECT)
         return 0;
 
index 6caa4cf5dcac159f8fdea2163276705c7ff1d043..798e8534575112f6e8f0110564177de60f6f29cc 100644 (file)
@@ -67,7 +67,7 @@ typedef enum {
     ERR_GATEWAY_FAILURE,
 
     /* Special Cases */
-    ERR_DIR_LISTING,            /* Display of remote directory (FTP, Gopher) */
+    ERR_DIR_LISTING,            /* Display of remote directory (FTP) */
     ERR_SQUID_SIGNATURE,        /* not really an error */
     ERR_SHUTTING_DOWN,
     ERR_PROTOCOL_UNKNOWN,
diff --git a/src/gopher.cc b/src/gopher.cc
deleted file mode 100644 (file)
index 0d882a2..0000000
+++ /dev/null
@@ -1,993 +0,0 @@
-/*
- * Copyright (C) 1996-2022 The Squid Software Foundation and contributors
- *
- * Squid software is distributed under GPLv2+ license and includes
- * contributions from numerous individuals and organizations.
- * Please see the COPYING and CONTRIBUTORS files for details.
- */
-
-/* DEBUG: section 10    Gopher */
-
-#include "squid.h"
-#include "base/AsyncCbdataCalls.h"
-#include "comm.h"
-#include "comm/Read.h"
-#include "comm/Write.h"
-#include "errorpage.h"
-#include "fd.h"
-#include "FwdState.h"
-#include "globals.h"
-#include "gopher.h"
-#include "html_quote.h"
-#include "HttpReply.h"
-#include "HttpRequest.h"
-#include "MemBuf.h"
-#include "mime.h"
-#include "parser/Tokenizer.h"
-#include "rfc1738.h"
-#include "SquidConfig.h"
-#include "StatCounters.h"
-#include "Store.h"
-#include "tools.h"
-
-#if USE_DELAY_POOLS
-#include "DelayPools.h"
-#include "MemObject.h"
-#endif
-
-// RFC 1436 section 3.8 gopher item-type codes
-#define GOPHER_FILE         '0'
-#define GOPHER_DIRECTORY    '1'
-#define GOPHER_CSO          '2'
-#define GOPHER_ERROR        '3'
-#define GOPHER_MACBINHEX    '4'
-#define GOPHER_DOSBIN       '5'
-#define GOPHER_UUENCODED    '6'
-#define GOPHER_INDEX        '7'
-#define GOPHER_TELNET       '8'
-#define GOPHER_BIN          '9'
-#define GOPHER_REDUNT       '+'
-#define GOPHER_3270         'T'
-#define GOPHER_GIF          'g'
-#define GOPHER_IMAGE        'I'
-
-// Gopher+ section 2.9 extension types
-// https://github.com/jgoerzen/pygopherd/blob/master/doc/standards/Gopher%2B.txt
-#define GOPHER_PLUS_IMAGE   ':'
-#define GOPHER_PLUS_MOVIE   ';'
-#define GOPHER_PLUS_SOUND   '<'
-
-// non-standard item-type codes
-#define GOPHER_HTML         'h'
-#define GOPHER_INFO         'i'
-#define GOPHER_WWW          'w'
-#define GOPHER_SOUND        's'
-
-#define GOPHER_PORT         70
-
-#define TAB                 '\t'
-
-// TODO CODE: should this be a protocol-specific thing?
-#define TEMP_BUF_SIZE       4096
-
-#define MAX_CSO_RESULT      1024
-
-/**
- * Gopher Gateway Internals
- *
- * Gopher is somewhat complex and gross because it must convert from
- * the Gopher protocol to HTTP.
- */
-class GopherStateData
-{
-    CBDATA_CLASS(GopherStateData);
-
-public:
-    GopherStateData(FwdState *aFwd) :
-        entry(aFwd->entry),
-        conversion(NORMAL),
-        HTML_header_added(0),
-        HTML_pre(0),
-        type_id(GOPHER_FILE /* '0' */),
-        overflowed(false),
-        cso_recno(0),
-        len(0),
-        buf(nullptr),
-        fwd(aFwd)
-    {
-        *request = 0;
-        buf = (char *)memAllocate(MEM_4K_BUF);
-        entry->lock("gopherState");
-        *replybuf = 0;
-    }
-
-    ~GopherStateData();
-
-    /// queues or defers a read call
-    static void DelayAwareRead(GopherStateData *);
-
-    /// URL for icon to display (or nil), given the Gopher item-type code.
-    /// The returned c-string is invalidated by the next call to this function.
-    const char *iconUrl(char);
-
-public:
-    StoreEntry *entry;
-    enum {
-        NORMAL,
-        HTML_DIR,
-        HTML_INDEX_RESULT,
-        HTML_CSO_RESULT,
-        HTML_INDEX_PAGE,
-        HTML_CSO_PAGE
-    } conversion;
-    int HTML_header_added;
-    int HTML_pre;
-    char type_id;
-    char request[MAX_URL];
-
-    /// some received bytes ignored due to internal buffer capacity limits
-    bool overflowed;
-
-    int cso_recno;
-
-    /// the number of not-yet-parsed Gopher line bytes in this->buf
-    int len;
-
-    char *buf;          /* pts to a 4k page */
-    Comm::ConnectionPointer serverConn;
-    FwdState::Pointer fwd;
-    HttpReply::Pointer reply_;
-    char replybuf[BUFSIZ];
-};
-
-CBDATA_CLASS_INIT(GopherStateData);
-
-static CLCB gopherStateFree;
-static void gopherMimeCreate(GopherStateData *);
-static void gopher_request_parse(const HttpRequest * req,
-                                 char *type_id,
-                                 char *request);
-static void gopherEndHTML(GopherStateData *);
-static void gopherToHTML(GopherStateData *, char *inbuf, int len);
-static CTCB gopherTimeout;
-static IOCB gopherReadReply;
-static IOCB gopherSendComplete;
-static PF gopherSendRequest;
-
-static char def_gopher_bin[] = "www/unknown";
-
-static char def_gopher_text[] = "text/plain";
-
-static void
-gopherStateFree(const CommCloseCbParams &params)
-{
-    GopherStateData *gopherState = (GopherStateData *)params.data;
-    // Assume that FwdState is monitoring and calls noteClosure(). See XXX about
-    // Connection sharing with FwdState in gopherStart().
-    delete gopherState;
-}
-
-GopherStateData::~GopherStateData()
-{
-    if (entry)
-        entry->unlock("gopherState");
-
-    if (buf)
-        memFree(buf, MEM_4K_BUF);
-}
-
-const char *
-GopherStateData::iconUrl(const char gtype)
-{
-    switch (gtype) {
-
-    case GOPHER_DIRECTORY:
-        return mimeGetIconURL("internal-menu");
-
-    case GOPHER_HTML:
-    case GOPHER_FILE:
-        return mimeGetIconURL("internal-text");
-
-    case GOPHER_INDEX:
-    case GOPHER_CSO:
-        return mimeGetIconURL("internal-index");
-
-    case GOPHER_IMAGE:
-    case GOPHER_GIF:
-    case GOPHER_PLUS_IMAGE:
-        return mimeGetIconURL("internal-image");
-
-    case GOPHER_SOUND:
-    case GOPHER_PLUS_SOUND:
-        return mimeGetIconURL("internal-sound");
-
-    case GOPHER_PLUS_MOVIE:
-        return mimeGetIconURL("internal-movie");
-
-    case GOPHER_TELNET:
-    case GOPHER_3270:
-        return mimeGetIconURL("internal-telnet");
-
-    case GOPHER_BIN:
-
-    case GOPHER_MACBINHEX:
-    case GOPHER_DOSBIN:
-    case GOPHER_UUENCODED:
-        return mimeGetIconURL("internal-binary");
-
-    case GOPHER_INFO:
-        return nullptr;
-
-    case GOPHER_WWW:
-        return mimeGetIconURL("internal-link");
-
-    default:
-        return mimeGetIconURL("internal-unknown");
-    }
-}
-
-/**
- * Create MIME Header for Gopher Data
- */
-static void
-gopherMimeCreate(GopherStateData * gopherState)
-{
-    StoreEntry *entry = gopherState->entry;
-    const char *mime_type = nullptr;
-    const char *mime_enc = nullptr;
-
-    switch (gopherState->type_id) {
-
-    case GOPHER_DIRECTORY:
-
-    case GOPHER_INDEX:
-
-    case GOPHER_HTML:
-
-    case GOPHER_WWW:
-
-    case GOPHER_CSO:
-        mime_type = "text/html";
-        break;
-
-    case GOPHER_GIF:
-
-    case GOPHER_IMAGE:
-
-    case GOPHER_PLUS_IMAGE:
-        mime_type = "image/gif";
-        break;
-
-    case GOPHER_SOUND:
-
-    case GOPHER_PLUS_SOUND:
-        mime_type = "audio/basic";
-        break;
-
-    case GOPHER_PLUS_MOVIE:
-        mime_type = "video/mpeg";
-        break;
-
-    case GOPHER_MACBINHEX:
-
-    case GOPHER_DOSBIN:
-
-    case GOPHER_UUENCODED:
-
-    case GOPHER_BIN:
-        /* Rightnow We have no idea what it is. */
-        mime_enc = mimeGetContentEncoding(gopherState->request);
-        mime_type = mimeGetContentType(gopherState->request);
-        if (!mime_type)
-            mime_type = def_gopher_bin;
-        break;
-
-    case GOPHER_FILE:
-
-    default:
-        mime_enc = mimeGetContentEncoding(gopherState->request);
-        mime_type = mimeGetContentType(gopherState->request);
-        if (!mime_type)
-            mime_type = def_gopher_text;
-        break;
-    }
-
-    assert(entry->isEmpty());
-
-    HttpReply *reply = new HttpReply;
-    entry->buffer();
-    reply->setHeaders(Http::scOkay, "Gatewaying", mime_type, -1, -1, -2);
-    if (mime_enc)
-        reply->header.putStr(Http::HdrType::CONTENT_ENCODING, mime_enc);
-
-    entry->replaceHttpReply(reply);
-    gopherState->reply_ = reply;
-}
-
-/**
- * Parse a gopher request into components.  By Anawat.
- */
-static void
-gopher_request_parse(const HttpRequest * req, char *type_id, char *request)
-{
-    ::Parser::Tokenizer tok(req->url.path());
-
-    if (request)
-        *request = 0;
-
-    tok.skip('/'); // ignore failures? path could be ab-empty
-
-    if (tok.atEnd()) {
-        *type_id = GOPHER_DIRECTORY;
-        return;
-    }
-
-    static const CharacterSet anyByte("UTF-8",0x00, 0xFF);
-
-    SBuf typeId;
-    (void)tok.prefix(typeId, anyByte, 1); // never fails since !atEnd()
-    *type_id = typeId[0];
-
-    if (request) {
-        SBufToCstring(request, tok.remaining().substr(0, MAX_URL-1));
-        /* convert %xx to char */
-        rfc1738_unescape(request);
-    }
-}
-
-/**
- * Parse the request to determine whether it is cachable.
- *
- * \param req   Request data.
- * \retval 0    Not cachable.
- * \retval 1    Cachable.
- */
-int
-gopherCachable(const HttpRequest * req)
-{
-    int cachable = 1;
-    char type_id;
-    /* parse to see type */
-    gopher_request_parse(req,
-                         &type_id,
-                         nullptr);
-
-    switch (type_id) {
-
-    case GOPHER_INDEX:
-
-    case GOPHER_CSO:
-
-    case GOPHER_TELNET:
-
-    case GOPHER_3270:
-        cachable = 0;
-        break;
-
-    default:
-        cachable = 1;
-    }
-
-    return cachable;
-}
-
-static void
-gopherHTMLHeader(StoreEntry * e, const char *title, const char *substring)
-{
-    storeAppendPrintf(e, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n");
-    storeAppendPrintf(e, "<HTML><HEAD><TITLE>");
-    storeAppendPrintf(e, title, substring);
-    storeAppendPrintf(e, "</TITLE>");
-    storeAppendPrintf(e, "<STYLE type=\"text/css\"><!--BODY{background-color:#ffffff;font-family:verdana,sans-serif}--></STYLE>\n");
-    storeAppendPrintf(e, "</HEAD>\n<BODY><H1>");
-    storeAppendPrintf(e, title, substring);
-    storeAppendPrintf(e, "</H1>\n");
-}
-
-static void
-gopherHTMLFooter(StoreEntry * e)
-{
-    storeAppendPrintf(e, "<HR noshade size=\"1px\">\n");
-    storeAppendPrintf(e, "<ADDRESS>\n");
-    storeAppendPrintf(e, "Generated %s by %s (%s)\n",
-                      Time::FormatRfc1123(squid_curtime),
-                      getMyHostname(),
-                      visible_appname_string);
-    storeAppendPrintf(e, "</ADDRESS></BODY></HTML>\n");
-}
-
-static void
-gopherEndHTML(GopherStateData * gopherState)
-{
-    StoreEntry *e = gopherState->entry;
-
-    if (!gopherState->HTML_header_added) {
-        gopherHTMLHeader(e, "Server Return Nothing", nullptr);
-        storeAppendPrintf(e, "<P>The Gopher query resulted in a blank response</P>");
-    } else if (gopherState->HTML_pre) {
-        storeAppendPrintf(e, "</PRE>\n");
-    }
-
-    gopherHTMLFooter(e);
-}
-
-/**
- * Convert Gopher to HTML.
- *
- * Borrow part of code from libwww2 came with Mosaic distribution.
- */
-static void
-gopherToHTML(GopherStateData * gopherState, char *inbuf, int len)
-{
-    char *pos = inbuf;
-    char *lpos = nullptr;
-    char *tline = nullptr;
-    LOCAL_ARRAY(char, line, TEMP_BUF_SIZE);
-    char *name = nullptr;
-    char *selector = nullptr;
-    char *host = nullptr;
-    char *port = nullptr;
-    char *escaped_selector = nullptr;
-    char gtype;
-    StoreEntry *entry = nullptr;
-
-    memset(line, '\0', TEMP_BUF_SIZE);
-
-    entry = gopherState->entry;
-
-    if (gopherState->conversion == GopherStateData::HTML_INDEX_PAGE) {
-        char *html_url = html_quote(entry->url());
-        gopherHTMLHeader(entry, "Gopher Index %s", html_url);
-        storeAppendPrintf(entry,
-                          "<p>This is a searchable Gopher index. Use the search\n"
-                          "function of your browser to enter search terms.\n"
-                          "<ISINDEX>\n");
-        gopherHTMLFooter(entry);
-        /* now let start sending stuff to client */
-        entry->flush();
-        gopherState->HTML_header_added = 1;
-
-        return;
-    }
-
-    if (gopherState->conversion == GopherStateData::HTML_CSO_PAGE) {
-        char *html_url = html_quote(entry->url());
-        gopherHTMLHeader(entry, "CSO Search of %s", html_url);
-        storeAppendPrintf(entry,
-                          "<P>A CSO database usually contains a phonebook or\n"
-                          "directory.  Use the search function of your browser to enter\n"
-                          "search terms.</P><ISINDEX>\n");
-        gopherHTMLFooter(entry);
-        /* now let start sending stuff to client */
-        entry->flush();
-        gopherState->HTML_header_added = 1;
-
-        return;
-    }
-
-    SBuf outbuf;
-
-    if (!gopherState->HTML_header_added) {
-        if (gopherState->conversion == GopherStateData::HTML_CSO_RESULT)
-            gopherHTMLHeader(entry, "CSO Search Result", nullptr);
-        else
-            gopherHTMLHeader(entry, "Gopher Menu", nullptr);
-
-        outbuf.append ("<PRE>");
-
-        gopherState->HTML_header_added = 1;
-
-        gopherState->HTML_pre = 1;
-    }
-
-    while (pos < inbuf + len) {
-        int llen;
-        int left = len - (pos - inbuf);
-        lpos = (char *)memchr(pos, '\n', left);
-        if (lpos) {
-            ++lpos;             /* Next line is after \n */
-            llen = lpos - pos;
-        } else {
-            llen = left;
-        }
-        if (gopherState->len + llen >= TEMP_BUF_SIZE) {
-            debugs(10, DBG_IMPORTANT, "GopherHTML: Buffer overflow. Lost some data on URL: " << entry->url()  );
-            llen = TEMP_BUF_SIZE - gopherState->len - 1;
-            gopherState->overflowed = true; // may already be true
-        }
-        if (!lpos) {
-            /* there is no complete line in inbuf */
-            /* copy it to temp buffer */
-            /* note: llen is adjusted above */
-            memcpy(gopherState->buf + gopherState->len, pos, llen);
-            gopherState->len += llen;
-            break;
-        }
-        if (gopherState->len != 0) {
-            /* there is something left from last tx. */
-            memcpy(line, gopherState->buf, gopherState->len);
-            memcpy(line + gopherState->len, pos, llen);
-            llen += gopherState->len;
-            gopherState->len = 0;
-        } else {
-            memcpy(line, pos, llen);
-        }
-        line[llen + 1] = '\0';
-        /* move input to next line */
-        pos = lpos;
-
-        /* at this point. We should have one line in buffer to process */
-
-        if (*line == '.') {
-            /* skip it */
-            memset(line, '\0', TEMP_BUF_SIZE);
-            continue;
-        }
-
-        switch (gopherState->conversion) {
-
-        case GopherStateData::HTML_INDEX_RESULT:
-
-        case GopherStateData::HTML_DIR: {
-            tline = line;
-            gtype = *tline;
-            ++tline;
-            name = tline;
-            selector = strchr(tline, TAB);
-
-            if (selector) {
-                *selector = '\0';
-                ++selector;
-                host = strchr(selector, TAB);
-
-                if (host) {
-                    *host = '\0';
-                    ++host;
-                    port = strchr(host, TAB);
-
-                    if (port) {
-                        char *junk;
-                        port[0] = ':';
-                        junk = strchr(host, TAB);
-
-                        if (junk)
-                            *junk++ = 0;    /* Chop port */
-                        else {
-                            junk = strchr(host, '\r');
-
-                            if (junk)
-                                *junk++ = 0;    /* Chop port */
-                            else {
-                                junk = strchr(host, '\n');
-
-                                if (junk)
-                                    *junk++ = 0;    /* Chop port */
-                            }
-                        }
-
-                        if ((port[1] == '0') && (!port[2]))
-                            port[0] = 0;    /* 0 means none */
-                    }
-
-                    /* escape a selector here */
-                    escaped_selector = xstrdup(rfc1738_escape_part(selector));
-
-                    const auto icon_url = gopherState->iconUrl(gtype);
-
-                    if ((gtype == GOPHER_TELNET) || (gtype == GOPHER_3270)) {
-                        if (strlen(escaped_selector) != 0)
-                            outbuf.appendf("<IMG border=\"0\" SRC=\"%s\"> <A HREF=\"telnet://%s@%s%s%s/\">%s</A>\n",
-                                           icon_url, escaped_selector, rfc1738_escape_part(host),
-                                           *port ? ":" : "", port, html_quote(name));
-                        else
-                            outbuf.appendf("<IMG border=\"0\" SRC=\"%s\"> <A HREF=\"telnet://%s%s%s/\">%s</A>\n",
-                                           icon_url, rfc1738_escape_part(host), *port ? ":" : "",
-                                           port, html_quote(name));
-
-                    } else if (gtype == GOPHER_INFO) {
-                        outbuf.appendf("\t%s\n", html_quote(name));
-                    } else {
-                        if (strncmp(selector, "GET /", 5) == 0) {
-                            /* WWW link */
-                            outbuf.appendf("<IMG border=\"0\" SRC=\"%s\"> <A HREF=\"http://%s/%s\">%s</A>\n",
-                                           icon_url, host, rfc1738_escape_unescaped(selector + 5), html_quote(name));
-                        } else if (gtype == GOPHER_WWW) {
-                            outbuf.appendf("<IMG border=\"0\" SRC=\"%s\"> <A HREF=\"gopher://%s/%c%s\">%s</A>\n",
-                                           icon_url, rfc1738_escape_unescaped(selector), html_quote(name));
-                        } else {
-                            /* Standard link */
-                            outbuf.appendf("<IMG border=\"0\" SRC=\"%s\"> <A HREF=\"gopher://%s/%c%s\">%s</A>\n",
-                                           icon_url, host, gtype, escaped_selector, html_quote(name));
-                        }
-                    }
-
-                    safe_free(escaped_selector);
-                } else {
-                    memset(line, '\0', TEMP_BUF_SIZE);
-                    continue;
-                }
-            } else {
-                memset(line, '\0', TEMP_BUF_SIZE);
-                continue;
-            }
-
-            break;
-            }           /* HTML_DIR, HTML_INDEX_RESULT */
-
-        case GopherStateData::HTML_CSO_RESULT: {
-            if (line[0] == '-') {
-                int code, recno;
-                char *s_code, *s_recno, *result;
-
-                s_code = strtok(line + 1, ":\n");
-                s_recno = strtok(nullptr, ":\n");
-                result = strtok(nullptr, "\n");
-
-                if (!result)
-                    break;
-
-                code = atoi(s_code);
-
-                recno = atoi(s_recno);
-
-                if (code != 200)
-                    break;
-
-                if (gopherState->cso_recno != recno) {
-                    outbuf.appendf("</PRE><HR noshade size=\"1px\"><H2>Record# %d<br><i>%s</i></H2>\n<PRE>", recno, html_quote(result));
-                    gopherState->cso_recno = recno;
-                } else {
-                    outbuf.appendf("%s\n", html_quote(result));
-                }
-
-                break;
-            } else {
-                int code;
-                char *s_code, *result;
-
-                s_code = strtok(line, ":");
-                result = strtok(nullptr, "\n");
-
-                if (!result)
-                    break;
-
-                code = atoi(s_code);
-
-                switch (code) {
-
-                case 200: {
-                    /* OK */
-                    /* Do nothing here */
-                    break;
-                }
-
-                case 102:   /* Number of matches */
-
-                case 501:   /* No Match */
-
-                case 502: { /* Too Many Matches */
-                    /* Print the message the server returns */
-                    outbuf.appendf("</PRE><HR noshade size=\"1px\"><H2>%s</H2>\n<PRE>", html_quote(result));
-                    break;
-                }
-
-                }
-            }
-
-            break;
-            }           /* HTML_CSO_RESULT */
-        default:
-            break;      /* do nothing */
-
-        }           /* switch */
-
-    }               /* while loop */
-
-    if (outbuf.length() > 0) {
-        entry->append(outbuf.rawContent(), outbuf.length());
-        /* now let start sending stuff to client */
-        entry->flush();
-    }
-
-    return;
-}
-
-static void
-gopherTimeout(const CommTimeoutCbParams &io)
-{
-    GopherStateData *gopherState = static_cast<GopherStateData *>(io.data);
-    debugs(10, 4, io.conn << ": '" << gopherState->entry->url() << "'" );
-
-    gopherState->fwd->fail(new ErrorState(ERR_READ_TIMEOUT, Http::scGatewayTimeout, gopherState->fwd->request, gopherState->fwd->al));
-
-    if (Comm::IsConnOpen(io.conn))
-        io.conn->close();
-}
-
-/**
- * This will be called when data is ready to be read from fd.
- * Read until error or connection closed.
- */
-static void
-gopherReadReply(const Comm::ConnectionPointer &conn, char *buf, size_t len, Comm::Flag flag, int xerrno, void *data)
-{
-    GopherStateData *gopherState = (GopherStateData *)data;
-    StoreEntry *entry = gopherState->entry;
-    int clen;
-    int bin;
-    size_t read_sz = BUFSIZ;
-#if USE_DELAY_POOLS
-    DelayId delayId = entry->mem_obj->mostBytesAllowed();
-#endif
-
-    /* Bail out early on Comm::ERR_CLOSING - close handlers will tidy up for us */
-
-    if (flag == Comm::ERR_CLOSING) {
-        return;
-    }
-
-    assert(buf == gopherState->replybuf);
-
-    // XXX: Should update delayId, statCounter, etc. before bailing
-    if (!entry->isAccepting()) {
-        debugs(10, 3, "terminating due to bad " << *entry);
-        // TODO: Do not abuse connection for triggering cleanup.
-        gopherState->serverConn->close();
-        return;
-    }
-
-#if USE_DELAY_POOLS
-    read_sz = delayId.bytesWanted(1, read_sz);
-#endif
-
-    /* leave one space for \0 in gopherToHTML */
-
-    if (flag == Comm::OK && len > 0) {
-#if USE_DELAY_POOLS
-        delayId.bytesIn(len);
-#endif
-
-        statCounter.server.all.kbytes_in += len;
-        statCounter.server.other.kbytes_in += len;
-    }
-
-    debugs(10, 5, conn << " read len=" << len);
-
-    if (flag == Comm::OK && len > 0) {
-        AsyncCall::Pointer nil;
-        commSetConnTimeout(conn, Config.Timeout.read, nil);
-        ++IOStats.Gopher.reads;
-
-        for (clen = len - 1, bin = 0; clen; ++bin)
-            clen >>= 1;
-
-        ++IOStats.Gopher.read_hist[bin];
-
-        HttpRequest *req = gopherState->fwd->request;
-        if (req->hier.bodyBytesRead < 0) {
-            req->hier.bodyBytesRead = 0;
-            // first bytes read, update Reply flags:
-            gopherState->reply_->sources |= Http::Message::srcGopher;
-        }
-
-        req->hier.bodyBytesRead += len;
-    }
-
-    if (flag != Comm::OK) {
-        debugs(50, DBG_IMPORTANT, "ERROR: " << MYNAME << "reading: " << xstrerr(xerrno));
-
-        if (ignoreErrno(xerrno)) {
-            AsyncCall::Pointer call = commCbCall(5,4, "gopherReadReply",
-                                                 CommIoCbPtrFun(gopherReadReply, gopherState));
-            comm_read(conn, buf, read_sz, call);
-        } else {
-            const auto err = new ErrorState(ERR_READ_ERROR, Http::scInternalServerError, gopherState->fwd->request, gopherState->fwd->al);
-            err->xerrno = xerrno;
-            gopherState->fwd->fail(err);
-            gopherState->serverConn->close();
-        }
-    } else if (len == 0 && entry->isEmpty()) {
-        gopherState->fwd->fail(new ErrorState(ERR_ZERO_SIZE_OBJECT, Http::scServiceUnavailable, gopherState->fwd->request, gopherState->fwd->al));
-        gopherState->serverConn->close();
-    } else if (len == 0) {
-        /* Connection closed; retrieval done. */
-        /* flush the rest of data in temp buf if there is one. */
-
-        if (gopherState->conversion != GopherStateData::NORMAL)
-            gopherEndHTML(gopherState);
-
-        entry->timestampsSet();
-        entry->flush();
-
-        if (!gopherState->len && !gopherState->overflowed)
-            gopherState->fwd->markStoredReplyAsWhole("gopher EOF after receiving/storing some bytes");
-
-        gopherState->fwd->complete();
-        gopherState->serverConn->close();
-    } else {
-        if (gopherState->conversion != GopherStateData::NORMAL) {
-            gopherToHTML(gopherState, buf, len);
-        } else {
-            entry->append(buf, len);
-        }
-        GopherStateData::DelayAwareRead(gopherState);
-    }
-}
-
-void
-GopherStateData::DelayAwareRead(GopherStateData *gopherState)
-{
-    const auto &conn = gopherState->serverConn;
-
-    if (!Comm::IsConnOpen(conn) || fd_table[conn->fd].closing()) {
-        debugs(10, 3, "will not read from " << conn);
-        return;
-    }
-
-    const auto amountToRead = gopherState->entry->bytesWanted(Range<size_t>(0, BUFSIZ));
-
-    if (amountToRead <= 0) {
-        AsyncCall::Pointer delayCall = asyncCall(10, 3, "GopherStateData::DelayAwareRead",
-                                       cbdataDialer(&GopherStateData::DelayAwareRead, gopherState));
-        gopherState->entry->mem().delayRead(delayCall);
-        return;
-    }
-
-    AsyncCall::Pointer readCall = commCbCall(5, 5, "gopherReadReply", CommIoCbPtrFun(gopherReadReply, gopherState));
-    comm_read(conn, gopherState->replybuf, amountToRead, readCall);
-}
-
-/**
- * This will be called when request write is complete. Schedule read of reply.
- */
-static void
-gopherSendComplete(const Comm::ConnectionPointer &conn, char *, size_t size, Comm::Flag errflag, int xerrno, void *data)
-{
-    GopherStateData *gopherState = (GopherStateData *) data;
-    StoreEntry *entry = gopherState->entry;
-    debugs(10, 5, conn << " size: " << size << " errflag: " << errflag);
-
-    if (size > 0) {
-        fd_bytes(conn->fd, size, FD_WRITE);
-        statCounter.server.all.kbytes_out += size;
-        statCounter.server.other.kbytes_out += size;
-    }
-
-    if (!entry->isAccepting()) {
-        debugs(10, 3, "terminating due to bad " << *entry);
-        // TODO: Do not abuse connection for triggering cleanup.
-        gopherState->serverConn->close();
-        return;
-    }
-
-    if (errflag) {
-        const auto err = new ErrorState(ERR_WRITE_ERROR, Http::scServiceUnavailable, gopherState->fwd->request, gopherState->fwd->al);
-        err->xerrno = xerrno;
-        err->port = gopherState->fwd->request->url.port();
-        err->url = xstrdup(entry->url());
-        gopherState->fwd->fail(err);
-        gopherState->serverConn->close();
-        return;
-    }
-
-    /*
-     * OK. We successfully reach remote site.  Start MIME typing
-     * stuff.  Do it anyway even though request is not HTML type.
-     */
-    entry->buffer();
-
-    gopherMimeCreate(gopherState);
-
-    switch (gopherState->type_id) {
-
-    case GOPHER_DIRECTORY:
-        /* we got to convert it first */
-        gopherState->conversion = GopherStateData::HTML_DIR;
-        gopherState->HTML_header_added = 0;
-        break;
-
-    case GOPHER_INDEX:
-        /* we got to convert it first */
-        gopherState->conversion = GopherStateData::HTML_INDEX_RESULT;
-        gopherState->HTML_header_added = 0;
-        break;
-
-    case GOPHER_CSO:
-        /* we got to convert it first */
-        gopherState->conversion = GopherStateData::HTML_CSO_RESULT;
-        gopherState->cso_recno = 0;
-        gopherState->HTML_header_added = 0;
-        break;
-
-    default:
-        gopherState->conversion = GopherStateData::NORMAL;
-        entry->flush();
-    }
-
-    GopherStateData::DelayAwareRead(gopherState);
-}
-
-/**
- * This will be called when connect completes. Write request.
- */
-static void
-gopherSendRequest(int, void *data)
-{
-    GopherStateData *gopherState = (GopherStateData *)data;
-    MemBuf mb;
-    mb.init();
-
-    if (gopherState->type_id == GOPHER_CSO) {
-        const char *t = strchr(gopherState->request, '?');
-
-        if (t)
-            ++t;        /* skip the ? */
-        else
-            t = "";
-
-        mb.appendf("query %s\r\nquit", t);
-    } else {
-        if (gopherState->type_id == GOPHER_INDEX) {
-            if (char *t = strchr(gopherState->request, '?'))
-                *t = '\t';
-        }
-        mb.append(gopherState->request, strlen(gopherState->request));
-    }
-    mb.append("\r\n", 2);
-
-    debugs(10, 5, gopherState->serverConn);
-    AsyncCall::Pointer call = commCbCall(5,5, "gopherSendComplete",
-                                         CommIoCbPtrFun(gopherSendComplete, gopherState));
-    Comm::Write(gopherState->serverConn, &mb, call);
-
-    if (!gopherState->entry->makePublic())
-        gopherState->entry->makePrivate(true);
-}
-
-void
-gopherStart(FwdState * fwd)
-{
-    GopherStateData *gopherState = new GopherStateData(fwd);
-
-    debugs(10, 3, gopherState->entry->url());
-
-    ++ statCounter.server.all.requests;
-
-    ++ statCounter.server.other.requests;
-
-    /* Parse url. */
-    gopher_request_parse(fwd->request,
-                         &gopherState->type_id, gopherState->request);
-
-    comm_add_close_handler(fwd->serverConnection()->fd, gopherStateFree, gopherState);
-
-    if (((gopherState->type_id == GOPHER_INDEX) || (gopherState->type_id == GOPHER_CSO))
-            && (strchr(gopherState->request, '?') == nullptr)) {
-        /* Index URL without query word */
-        /* We have to generate search page back to client. No need for connection */
-        gopherMimeCreate(gopherState);
-
-        if (gopherState->type_id == GOPHER_INDEX) {
-            gopherState->conversion = GopherStateData::HTML_INDEX_PAGE;
-        } else {
-            if (gopherState->type_id == GOPHER_CSO) {
-                gopherState->conversion = GopherStateData::HTML_CSO_PAGE;
-            } else {
-                gopherState->conversion = GopherStateData::HTML_INDEX_PAGE;
-            }
-        }
-
-        gopherToHTML(gopherState, (char *) nullptr, 0);
-        fwd->markStoredReplyAsWhole("gopher instant internal request satisfaction");
-        fwd->complete();
-        return;
-    }
-
-    // XXX: Sharing open Connection with FwdState that has its own handlers/etc.
-    gopherState->serverConn = fwd->serverConnection();
-    gopherSendRequest(fwd->serverConnection()->fd, gopherState);
-    AsyncCall::Pointer timeoutCall = commCbCall(5, 4, "gopherTimeout",
-                                     CommTimeoutCbPtrFun(gopherTimeout, gopherState));
-    commSetConnTimeout(fwd->serverConnection(), Config.Timeout.read, timeoutCall);
-}
-
diff --git a/src/gopher.h b/src/gopher.h
deleted file mode 100644 (file)
index f63504b..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 1996-2022 The Squid Software Foundation and contributors
- *
- * Squid software is distributed under GPLv2+ license and includes
- * contributions from numerous individuals and organizations.
- * Please see the COPYING and CONTRIBUTORS files for details.
- */
-
-/* DEBUG: section 10    Gopher */
-
-#ifndef SQUID_GOPHER_H_
-#define SQUID_GOPHER_H_
-
-class FwdState;
-class HttpRequest;
-
-/**
- \defgroup ServerProtocolGopherAPI Server-Side Gopher API
- \ingroup ServerProtocol
- */
-
-/// \ingroup ServerProtocolGopherAPI
-void gopherStart(FwdState *);
-
-/// \ingroup ServerProtocolGopherAPI
-int gopherCachable(const HttpRequest *);
-
-#endif /* SQUID_GOPHER_H_ */
-
index 11a9312140420ddb715ca78ad3b349f3834b2924..a06c34e6d9d3d4a54f378b919a275db7afe4f85c 100644 (file)
@@ -40,7 +40,6 @@ public:
         srcFtp = 1 << (16 + 1), ///< ftp_port or FTP server
         srcIcap = 1 << (16 + 2), ///< traditional ICAP service without encryption
         srcEcap = 1 << (16 + 3), ///< eCAP service that uses insecure libraries/daemons
-        srcGopher = 1 << (16 + 14), ///< Gopher server
         srcWhois = 1 << (16 + 15), ///< Whois server
         srcUnsafe = 0xFFFF0000,  ///< Unsafe sources mask
         srcSafe = 0x0000FFFF ///< Safe sources mask
index 5c3cedaf9082c08135039565a2c070d505ad1e23..ead2ef4fe53fa5aa74724895f31ca1995a132b16 100644 (file)
@@ -35,9 +35,6 @@ Mgr::IoActionData::operator += (const IoActionData& stats)
     ftp_reads += stats.ftp_reads;
     for (int i = 0; i < IoStats::histSize; ++i)
         ftp_read_hist[i] += stats.ftp_read_hist[i];
-    gopher_reads += stats.gopher_reads;
-    for (int i = 0; i < IoStats::histSize; ++i)
-        gopher_read_hist[i] += stats.gopher_read_hist[i];
 
     return *this;
 }
index 7e9ad1a7a6577f76b00a12ada8d1f2bcb2e742f2..dc4a3a5ebcf8cf002b02fec470ac0b9424637136 100644 (file)
@@ -27,10 +27,8 @@ public:
 public:
     double http_reads;
     double ftp_reads;
-    double gopher_reads;
     double http_read_hist[IoStats::histSize];
     double ftp_read_hist[IoStats::histSize];
-    double gopher_read_hist[IoStats::histSize];
 };
 
 /// implement aggregated 'io' action
index 7b5bd8ad0f54eb90247fbd5f1b79d02d83d536b4..9999e2e55ec7e337d61febc981e4bf2e235c59ee 100644 (file)
@@ -25,7 +25,7 @@ command\-line
 .PP
 .B squid
 is a high\-performance proxy caching server for web clients,
-supporting FTP, gopher, ICAP, ICP, HTCP and HTTP data objects.
+supporting FTP, ICAP, ICP, HTCP and HTTP data objects.
 Unlike traditional caching software, 
 Squid handles all requests in a single, non-blocking process.
 .PP
index 9e78a8620425c56a3ff0c83f8c4fda018527cf91..c17a50133fcfae159242a26e9346f403c3128b56 100644 (file)
@@ -200,12 +200,6 @@ GetIoStats(Mgr::IoActionData& stats)
     for (i = 0; i < IoStats::histSize; ++i) {
         stats.ftp_read_hist[i] = IOStats.Ftp.read_hist[i];
     }
-
-    stats.gopher_reads = IOStats.Gopher.reads;
-
-    for (i = 0; i < IoStats::histSize; ++i) {
-        stats.gopher_read_hist[i] = IOStats.Gopher.read_hist[i];
-    }
 }
 
 void
@@ -238,19 +232,6 @@ DumpIoStats(Mgr::IoActionData& stats, StoreEntry* sentry)
                           Math::doublePercent(stats.ftp_read_hist[i], stats.ftp_reads));
     }
 
-    storeAppendPrintf(sentry, "\n");
-    storeAppendPrintf(sentry, "Gopher I/O\n");
-    storeAppendPrintf(sentry, "number of reads: %.0f\n", stats.gopher_reads);
-    storeAppendPrintf(sentry, "Read Histogram:\n");
-
-    for (i = 0; i < IoStats::histSize; ++i) {
-        storeAppendPrintf(sentry, "%5d-%5d: %9.0f %2.0f%%\n",
-                          i ? (1 << (i - 1)) + 1 : 1,
-                          1 << i,
-                          stats.gopher_read_hist[i],
-                          Math::doublePercent(stats.gopher_read_hist[i], stats.gopher_reads));
-    }
-
     storeAppendPrintf(sentry, "\n");
 }
 
index 9df760ebb5cf4c12949ed4c656fc32bdb504034e..d7e5c10a4a877bea326a7fa5ba50c5160d146383 100644 (file)
@@ -47,7 +47,6 @@ STUB_SOURCE = \
        tests/stub_fatal.cc \
        tests/stub_fd.cc \
        tests/stub_fqdncache.cc \
-       tests/stub_gopher.cc \
        tests/stub_helper.cc \
        tests/stub_http.cc \
        tests/stub_icp.cc \
diff --git a/src/tests/stub_gopher.cc b/src/tests/stub_gopher.cc
deleted file mode 100644 (file)
index 2dc56b9..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright (C) 1996-2022 The Squid Software Foundation and contributors
- *
- * Squid software is distributed under GPLv2+ license and includes
- * contributions from numerous individuals and organizations.
- * Please see the COPYING and CONTRIBUTORS files for details.
- */
-
-#include "squid.h"
-
-#define STUB_API "gopher.cc"
-#include "tests/STUB.h"
-
-#include "gopher.h"
-void gopherStart(FwdState *) STUB
-int gopherCachable(const HttpRequest *) STUB
-
index 853a8488c9671dcc87bc07015b2038c9da8550fa..59238c6863a1cf8551612d5ee72ef864bdcb05fb 100644 (file)
@@ -44,6 +44,5 @@ refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 40320 75% 86400
 refresh_pattern -i \.(iso|avi|wav|mp3|mpeg|swf|flv|x-flv)$ 1440 40% 40320
 
 refresh_pattern ^ftp:           1440    20%     10080
-refresh_pattern ^gopher:        1440    0%      1440
 refresh_pattern -i (/cgi-bin/|\?)       0       0%      0
 refresh_pattern .       0       20%     4320