* 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.
*/
/**
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
"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."
"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."
"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."
"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"
"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."
"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."
"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
"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 ""
"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
"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
"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
"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 ""
"example, you can not POST a Gopher request."
msgstr ""
"La <i>cache</i> no admet tots els tipus de petició per a tots els "
-"protocols. Per exemple, no es pot fer una petició tipus POST en el "
-"protocol Gopher."
+"protocols."
#: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
#, fuzzy
"is currently not supported."
msgstr ""
"La <i>cache</i> no admet tots els tipus de petició per a tots els "
-"protocols. Per exemple, no es pot fer una petició tipus POST en el "
-"protocol Gopher."
+"protocols."
#: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
#, fuzzy
"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
"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 ""
"example, you can not POST a Gopher request."
msgstr ""
"Proxy'en Squid understøtter ikke alle forespørgselsmetoder for "
-"alle adgangs protokoller. For eksempel kan du ikke POST en Gopher "
-"forespørgsel."
+"alle adgangs protokoller."
#: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
#, fuzzy
"is currently not supported."
msgstr ""
"Proxy'en Squid understøtter ikke alle forespørgselsmetoder for "
-"alle adgangs protokoller. For eksempel kan du ikke POST en Gopher "
-"forespørgsel."
+"alle adgangs protokoller."
#: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
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
"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 ""
"example, you can not POST a Gopher request."
msgstr ""
"Το Squid δεν υποστηρίζει όλες τις μεθόδους αιτήσεων για όλα τα πρωτόκολλα "
-"πρόσβασης. Για παράδειγμα, το POST για Gopher δεν υποστηρίζεται."
+"πρόσβασης."
#: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
#, fuzzy
"is currently not supported."
msgstr ""
"Το Squid δεν υποστηρίζει όλες τις μεθόδους αιτήσεων για όλα τα πρωτόκολλα "
-"πρόσβασης. Για παράδειγμα, το POST για Gopher δεν υποστηρίζεται."
+"πρόσβασης."
#: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
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
"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 ""
pre {
}
-/* special event: FTP / Gopher directory listing */
+/* special event: FTP directory listing */
#dirmsg {
font-family: courier, monospace;
color: black;
"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 ""
"example, you can not POST a Gopher request."
msgstr ""
"Squid no admite todos los mé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
"is currently not supported."
msgstr ""
"Squid no admite todos los mé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 ""
"example, you can not POST a Gopher request."
msgstr ""
"Squid ei toeta kõiki päringu meetodeid kõikide "
-"protokollidega. Näiteks, te ei saa teha POST operatsiooni Gopher pä"
-"ringus."
+"protokollidega."
#: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
#, fuzzy
"is currently not supported."
msgstr ""
"Squid ei toeta kõiki päringu meetodeid kõikide "
-"protokollidega. Näiteks, te ei saa teha POST operatsiooni Gopher pä"
-"ringus."
+"protokollidega."
#: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"example, you can not POST a Gopher request."
msgstr ""
"Squidはすべてのアクセス・プロトコルに対して、すべてのリクエストメソッドをサ"
-"ポートしているわけではありません。例えば、POSTをGopherのリクエストで行うこと"
-"はできません。"
+"ポートしているわけではありません。"
#: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
#, fuzzy
"is currently not supported."
msgstr ""
"Squidはすべてのアクセス・プロトコルに対して、すべてのリクエストメソッドをサ"
-"ポートしているわけではありません。例えば、POSTをGopherのリクエストで行うこと"
-"はできません。"
+"ポートしているわけではありません。"
#: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"Squid does not support all request methods for all access protocols. For "
"example, you can not POST a Gopher request."
msgstr ""
-"Squid stödjer inte alla frågemetoder för alla protokoll. "
-"Till exempel, Ni kan inte POST'a en Gopher förfrågan."
+"Squid stödjer inte alla frågemetoder för alla protokoll."
#: templates/ERR_PROTOCOL_UNKNOWN+html.body.div.p:27-1
#, fuzzy
"Squid does not support some access protocols. For example, the SSH protocol "
"is currently not supported."
msgstr ""
-"Squid stödjer inte alla frågemetoder för alla protokoll. "
-"Till exempel, Ni kan inte POST'a en Gopher förfrågan."
+"Squid stödjer inte alla frågemetoder för alla protokoll."
#: templates/ERR_LIFETIME_EXP+html.body.div.p:27-1
msgid ""
<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>
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
"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
"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 ""
#include "fde.h"
#include "FwdState.h"
#include "globals.h"
-#include "gopher.h"
#include "HappyConnOpener.h"
#include "hier_code.h"
#include "http.h"
httpStart(this);
break;
- case AnyP::PROTO_GOPHER:
- gopherStart(this);
- break;
-
case AnyP::PROTO_FTP:
if (request->flags.ftpNative)
Ftp::StartRelay(this);
#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"
return false;
break;
- case AnyP::PROTO_GOPHER:
- if (!gopherCachable(this))
- return false;
- break;
-
case AnyP::PROTO_CACHE_OBJECT:
return false;
int writes;
int write_hist[histSize];
}
- Http, Ftp, Gopher;
+ Http, Ftp;
};
#endif /* SQUID_IOSTATS_H_ */
fs_io.cc \
fs_io.h \
globals.h \
- gopher.cc \
- gopher.h \
helper.cc \
helper.h \
hier_code.h \
fqdncache.h \
fs_io.cc \
fs_io.h \
- tests/stub_gopher.cc \
- gopher.h \
helper.cc \
hier_code.h \
http.cc \
fqdncache.h \
fs_io.cc \
fs_io.h \
- tests/stub_gopher.cc \
- gopher.h \
helper.cc \
hier_code.h \
http.cc \
fqdncache.h \
fs_io.cc \
fs_io.h \
- tests/stub_gopher.cc \
- gopher.h \
helper.cc \
hier_code.h \
http.cc \
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);
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:
PROTO_HTTPS,
PROTO_COAP,
PROTO_COAPS,
- PROTO_GOPHER,
PROTO_WAIS,
PROTO_CACHE_OBJECT,
PROTO_ICP,
return true;
return false;
- case AnyP::PROTO_GOPHER:
case AnyP::PROTO_WAIS:
case AnyP::PROTO_WHOIS:
if (r->method == Http::METHOD_GET ||
// 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;
[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
# 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
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).
#include "fde.h"
#include "format/Token.h"
#include "FwdState.h"
-#include "gopher.h"
#include "helper.h"
#include "helper/Reply.h"
#include "http.h"
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;
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,
+++ /dev/null
-/*
- * 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 ¶ms)
-{
- 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);
-}
-
+++ /dev/null
-/*
- * 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_ */
-
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
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;
}
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
.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
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
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");
}
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 \
+++ /dev/null
-/*
- * 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
-
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