Introduction
Introduction Statistics Contact Development Disclaimer Help
gopherplus.txt - gopher-protocol - Gopher Protocol Extension Project
git clone git://bitreich.org/gopher-protocol git://enlrupgkhuxnvlhsf6lc3fziv5h2…
Log
Files
Refs
Tags
README
LICENSE
---
gopherplus.txt (34845B)
---
1
2 Gopher+
3
4
5 upward compatible enhancements to
6 the Internet Gopher protocol
7
8
9
10 Farhad Anklesaria, Paul Lindner, Mark P. McCahill,
11 Daniel Torrey, David Johnson, Bob Alberti
12
13 Microcomputer and Workstation Networks Center /
14 Computer and Information Systems
15 University of Minnesota
16
17 July 30, 1993
18
19
20
21 gopher+ n. 1. Hardier strains of mammals of the
22 family Geomyidae. 2. (Amer. colloq.) Native or
23 inhabitant of Minnesota, the Gopher state, in full
24 winter regalia (see PARKA). 3. (Amer. colloq.)
25 Executive secretary. 4. (computer tech.) Software
26 following a simple protocol for burrowing through a
27 TCP/IP internet, made more powerful by simple
28 enhancements (see CREEPING FEATURISM).
29
30
31 Abstract
32
33 The internet Gopher protocol was designed for
34 distributed document search and retrieval. The
35 documents "The internet Gopher protocol: a
36 distributed document search and retrieval protocol"
37 and internet RFC 1436 describe the basic protocol and
38 has an overview of how to implement new client and
39 server applications. This document describes a set of
40 enhancements to the syntax, semantics and
41 functionality of the original Gopher protocol.
42
43
44 Distribution of this document is unlimited. Please
45 send comments to the Gopher development team:
46 <[email protected]>. Implementation of
47 the mechanisms described here is encouraged.
48
49
50
51 1. Introduction
52
53 The Internet Gopher protocol was designed primarily to
54 act as a distributed document delivery system. It
55 has enjoyed increasing popularity, and is being used
56 for purposes that were not visualized when the
57 protocol was first outlined. The rest of this
58 document describes the Gopher+ enhancements in a non-
59 rigorous but easily read and understood way. There
60 is a short BNF-like section at the end for exact
61 syntax descriptions. Throughout the document, "F"
62 stands for the ASCII TAB character. There is an
63 implicit carriage return and linefeed at the ends of
64 lines; these will only be explicitly mentioned where
65 necessary to avoid confusion. To understand this
66 document, you really must be familiar with the basic
67 Gopher protocol.
68
69
70 Servers and clients understanding the Gopher+
71 extensions will transmit extra information at the ends
72 of list and request lines. Old, basic gopher clients
73 ignore such information. New Gopher+ aware servers
74 continue to work at their old level with unenhanced
75 clients. The extra information that can be
76 communicated by Gopher+ clients may be used to summon
77 new capabilities to bridge the most keenly felt
78 shortcomings of the venerable old Gopher.
79
80
81
82
83 2. How does Gopher+ work?
84
85 Gopher+ enhancements rely on transmitting an "extra"
86 tab delimited fields beyond what regular (old) Gopher
87 servers and clients now use. If most existing (old)
88 clients were to encounter extra stuff beyond the
89 "port" field in a list (directory), most would ignore
90 it. Gopher+ servers will return item descriptions in
91 this form:
92
93
94 1Display stringFselector stringFhostFportFextra
95 stuff<CRLF>
96
97
98 If an existing (old) client has problems with
99 additional information beyond the port, it should not
100 take much more than a simple tweak to have it discard
101 unneeded stuff.
102
103
104
105
106 2.1 Advisory issued to client maintainers.
107
108 If it does not do this already, your existing client
109 should be modified as soon as possible to ignore
110 extra fields beyond what it expects to find. This
111 will ensure thatyour clients does not break when it
112 encounters Gopher+ servers in gopherspace.
113
114
115 All the regular Gopher protocol info remains intact
116 except for:
117
118
119 (1) Instead of just a CRLF after the port field in
120 any item of a list (directory) there may be an
121 optional TAB followed by extra stuff as noted above
122 (explanation to follow).
123
124
125
126 (2) In the original Gopher protocol, there was
127 provision for a date-time descriptor (sec 3.6) to be
128 sent after the selector (for use by autoindexer
129 beasts). As far as we know, while the descriptor is
130 implemented in the Mac server, it is not in any other
131 server and no clients or daemons use it. This is a
132 good time to withdraw this feature. The basic gopher
133 protocol has been revised for the final time and will
134 be frozen.
135
136
137
138
139
140
141 2.2 Gopher+ item lists.
142
143 Gopher servers that can utilize the Gopher+
144 enhancements will send some additional stuff
145 (frequently the character "+") after the port field
146 describing any list item. eg:
147
148
149 1Some old directoryFfoo selectorFhost1Fport1
150
151 1Some new directoryFbar selectorFhost1Fport1F+
152
153 0Some file or otherFmoo selectorFhost2Fport2F+
154
155
156 The first line is the regular old gopher item
157 description. The second line is new Gopher+ item
158 description. The third line is a Gopher+ description
159 of a document. Old gopher clients can request the
160 latter two items using old format gopher selector
161 strings and retrieve the items. New, Gopher+ savvy
162 clients will notice the trailing + and know that they
163 can do extra things with these kinds of items.
164
165
166
167
168
169 2.3 Gopher+ data transfer.
170
171 If a client sends out a Gopher+ type request to a
172 server (by tagging on a tab and a "+" to the
173 request):
174
175
176 bar selectorF+
177
178
179 The server may return the response in one of three
180 ways; examples below:
181
182
183 +5340<CRLF><data>
184
185
186
187 +-1<CRLF><data><CRLF>.<CRLF>
188
189
190
191 +-2<CRLF><data>
192
193
194 The first response means: I am going to send exactly
195 5340 bytes at you and they will begin right after this
196 line. The second response means: I have no idea how
197 many bytes I have to send (or I am lazy), but I will
198 send a period on a line by itself when I am done.
199 The third means: I really have no idea how many
200 bytes I have to send, and what's more, they COULD
201 contain the <CRLF>.<CRLF> pattern, so just read until
202 I close the connection.
203
204
205 The first character of a response to a Gopher+ query
206 denotes success (+) or failure (-). Following that is
207 a token to be interpreted as a decimal number. If the
208 number is >= 0, it describes the length of the
209 dataBlock. If = -1, it means the data is period
210 terminated. If = -2, it means the data ends when the
211 connection closes.
212
213
214 The server may return an error also, as in:
215
216
217 --1<CRLF><data><CRLF>.<CRLF>
218
219
220 The (short!) error message will be in ASCII text in
221 the data part. The first token on the first line of
222 the error text (data) contains an error-code (an
223 integer). It is recommended that the first line also
224 contain the e-mail address of the administrator of
225 the server (in angle brackets). Both the error-code
226 and the email address may easily be extracted by the
227 client. Subsequent lines contain a short error
228 message that may be displayed to the user. Basic error
229 codes are:
230
231
232 1 Item is not available.
233
234 2 Try again later ("eg. My load is too high
235 right now.")
236
237 3 Item has moved. Following the error-code is
238 the gopher descriptor
239
240 of where it now lives.
241
242
243 More error codes may be defined as the need arises.
244
245
246
247 This should be obvious: if the client sends out an
248 "old" Gopher kind of request:
249
250
251
252 bar selector
253
254
255
256 the server will know that it is talking to an old
257 client and will respond in the old way. This means
258 that old gopher clients can still access information
259 on Gopher+ servers.
260
261
262
263
264 2.4 Gopher+ client requests.
265
266
267 Clients can send requests to retrieve the contents of
268 an item in this form:
269
270
271
272 selectorstringF+[representation][FdataFlag]<CRLF>[dat
273 ablock]
274
275
276 If dataFlag is '0', or nonexistent, then the client
277 will not send any data besides the selector string.
278 If the dataFlag is '1' then a block of data will
279 follow in the same format as Section 2.3. The client
280 can send a large amount of data to the server in the
281 dataBlock. Representations or alternative views of an
282 item's contents may be discovered by interrogating the
283 server about the item's attribute information; this is
284 explained below.
285
286
287 Note that in the original Gopher protocol, a query
288 submitted to an index server might have a selector
289 string followed by a TAB and the words for which the
290 index server was being asked to search. In Gopher+,
291 the extra TAB and Gopher+ information follow the words
292 for which the server is being asked to search. Gopher+
293 client have to be smart enough to know that in the
294 case of a type 7 item (an index server) they append
295 the Gopher+ information after the words being searched
296 for.
297
298
299
300 2.5 Gopher+ Item Attribute Information.
301
302
303 The most basic enhancement of Gopher+ items is the
304 ability to associate information about an item such
305 as size, alternative views, the administrator, an
306 abstract, etc. with the item. To get Attribute
307 Information, a client can send out a request to the
308 gopher server that looks like this:
309
310
311 selector stringF!<CRLF>
312
313
314 (think of "!" as an upside-down i for "information").
315 To the server this means "Instead of returning the
316 contents of the item, return the item's Attribute
317 Information". The Attribute Information is returned as
318 an ASCII text stream containing blocks of
319 information.For example, a server might return:
320
321
322 +INFO: 0Some file or otherFmoo
323 selectorFhost2Fport2F+
324
325 +ADMIN:
326
327 Admin: Frodo Gophermeister <[email protected]>
328
329 Mod-Date: Wed Jul 28 17:02:01 1993
330 <19930728170201>
331
332 +VIEWS:
333
334 Text/plain: <10k>
335
336 application/postscript: <100k>
337
338 Text/plain De_DE: <15k>
339
340 application/MacWriteII: <45K>
341
342 +ABSTRACT:
343
344 This is a short (but multi-line) abstract about
345 the
346
347 item. Two or three lines ought to be enough
348
349
350 The beginning of a block of information is denoted by
351 a "+" in column 1 of a line. Another way to think of
352 it is: the name of each block begins with a + and the
353 rest of the name cannot contain a +. Each line of
354 information within a block begins with a space so
355 that it is easy to locate the beginning of a block.
356
357
358 There can be multiple blocks of information about an
359 item, but the first block must be the one-line +INFO
360 block containing the keyword +INFO followed by the
361 gopher item description. This is done to make it easy
362 to associate informational attributes with the gopher
363 items to which they refer (see section 2.7 for some
364 good reasons for doing this). The very first line of
365 Attribute Information for an item contains a one-line
366 +INFO block containing the gopher descriptor for the
367 item. All Gopher+ servers must return an "+INFO"
368 block for all items listed by the server. Also
369 present may be an +ADMIN block that can be many lines
370 long. The server must also send an +ADMIN block when
371 asked to send all the item's attributes (as in the
372 example above). The +ADMIN block must contain at
373 least an Admin attribute and Mod-Date attributes,
374 though there may be many other administrative items
375 also present in the +ADMIN block. The Admin (the
376 administrator of the item) and Date (the date of the
377 item's last modification) attributes are required to
378 be returned by the server, and other optional
379 attributes may be returned as well. In this example,
380 there are two pieces of information within the +ADMIN
381 block (Admin and Mod-Date). The Admin attribute must
382 contain the e-mail address of an administrator inside
383 angle brackets. The Admin line might also contain the
384 administrator's name and phone number. The Date line
385 must contain the modification date in angle brackets.
386 The format of the date is <YYYYMMDDhhmmss> where YYYY
387 is year, MM is month, DD is day, hh is hours, mm is
388 minutes, and ss is seconds.
389
390
391 The third block in the example is the +VIEWS block.
392 This block lists different formats in which the
393 document can be retrieved. The first format listed is
394 what the server believes to be the preferred format.
395 A gopher client might display the list of possible
396 view labels of the item to the user and let the user
397 select the view they prefer. Alternatively, a smart
398 client might look at the content of the labels and
399 preferentially retrieve Postscript views of items.
400 Note that the view labels are structured. View labels
401 specify a Content-Type (application/Postscript,
402 Text/plain, etc.), an optional language (En_US, De_DE,
403 etc.) and an optional size. Note that the View labels
404 for content type use the MIME content types to specify
405 names of the variious views. The optional language
406 descriptors use the ISO-639 codes for representing
407 languages to name the language. Smart clients might
408 want to translate these rather cryptic codes into
409 something mere mortals can read and understand.
410
411
412 The client software can pick off the size of each
413 view IF there are any angle brackets on the line.
414 There might not be a size that the server cares to
415 tell you about. Also this might NOT be the exact size
416 that the server will wind up delivering to you if you
417 ask for it... but it should be reasonably close. This
418 information makes it possible for clever clients to
419 select views based on size, data representation, or
420 language. See section 2.6 for how alternate
421 representations (views) are retrieved.
422
423
424 The next block in the example is an (optional)
425 +ABSTRACT. Here the block consists of lines of text
426 that might be displayed to the user.
427
428
429 Other blocks of information can defined and added as
430 the need arises. For instance, a Neuromancer-esque 3-D
431 cyberspace attribute might be accommodated by
432 including a 3D-ICON block (with an image to display
433 in 3-space) and a 3D-COORDINATE block (with y,x, and
434 z coordinates). More immediate needs can also
435 addressed by defining other information blocks. For
436 instance, a SCRIPT block would be a natural place to
437 put information for scripting telnet sessions.
438 Information blocks give us an extensible way of
439 adding attributes (or what Macintosh programmers call
440 resources) to gopher items.
441
442
443 Some of the really cool ideas we have for information
444 attributes may require sending large amounts of data,
445 some of which may not be easily represented as ASCII
446 text, but the idea of the attributes information is
447 that it is a relatively compact list of attributes.
448 These somewhat conflicting desires can be reconciled
449 by allowing references to gopher items in an
450 attribute. For example, an +ABSTRACT block might be
451 returned this way:
452
453
454 +ABSTRACT: 0long abstractFselectorFhost2Fport2F+
455
456
457 In this example, the abstract is a document that
458 resides on a gopher server. By allowing references to
459 to gopher items, we can also accommodate data that
460 must be sent in an 8-bit clear stream by using the
461 Gopher+ methods for retrieving binary data.
462
463
464 If both a reference to an attribute and an explicit
465 value for the attribute are present in an attribute
466 list, the preferred version is the explicit value. In
467 the example below, the preferred version is "the
468 short abstract goes here".
469
470
471 +ABSTRACT: 0long abstractFselectorFhost2Fport2F+
472
473 the short abstract goes here
474
475
476 Note that if you want to have several views of (for
477 example) an +ABSTRACT this is possible by using a
478 reference to a item residing on a gopher server
479 because the item can have its own attributes.
480
481
482 Attributes names are case sensitive (easier to match
483 and more of them). There is no need to "preregister"
484 all possible attributes since we cannot anticipate
485 all possible future needs. However it would be
486 reasonable to maintain a registry for implementors
487 and administrators so duplication can be avoided.
488 Server implementors or administrators can request that
489 new attributes be included in the attribute registry.
490
491
492 Dream on: What gets us excited are alternate
493 representations for directory lists. Sure, the
494 standard representation for a gopher directory list
495 is known to us all. But isn't hypertext (in a WWW
496 sense) an alternate kind of directory list? We also
497 envisioned a "geographical view" (GView?) mapping
498 servers onto a map of the world (throw up a gif
499 picture and then overlay dots based on latitude and
500 longitude or xy coordinates). OK. Dream off.
501
502
503 Note that interested parties outside gopherspace have
504 long and complex wish-lists for "attributes" that all
505 well-dressed Internet citizens should have. We don't
506 want to comment on the use or value of these laundry-
507 lists. Suffice it to say that nothing precludes
508 server administrators from including whatever
509 attributes they see fit to include. Certainly IAFA
510 blocks are desirable, bearing UDIs, URL's or whatever
511 else is desired. The gopher community will probably
512 arrive at a list of "recommended" attributes that
513 server administrators should try to support. Because
514 not every server administrator sees advantage to
515 cluttering Attribute Info files with information
516 their primary users will never need, it does not seem
517 fair to "force" folks to include them; most will
518 just ignore the harsh protocol guideline and the
519 value of the protocol will be diminished. We want to
520 mandate as little as we possibly can.
521
522
523
524
525
526 2.6 Using Attribute Info: Alternate
527 representations (+VIEWS).
528
529
530 The user may locate a document and wonder if there are
531 representations of it besides, say, the standard Text.
532 Using the appropriate client incantation (Option
533 Double-Click? or whatever) the user indicates a wish
534 to see what's available. The client retrieves the
535 Attribute Information, displays the list of views to
536 the user in some kind of scrolling list dialog. User
537 selects a line and client now requests the document
538 in say, Postscript representation:
539
540
541 the selectorF+application/Postscript
542
543
544
545 Smart clients are not precluded from doing things like
546 "Always get Postscript if you can" or "Always get
547 Postscript if that is less than 700K in size." etc.
548 And the "smarter" you make it, the hairier your
549 client will become - unless you are a user interface
550 wizard of awesome proportions. While the example
551 above is of fetching a document's postscript view,
552 there is nothing precluding having different views
553 for directories. In the dream sequence earlier, we
554 imagined a geographic view of a directory. For a
555 client to fetch that view, it would say this:
556
557
558 the selectorF+GView
559
560
561
562 2.7 Getting attributes for all items in a
563 directory in one transaction.
564
565
566 Heavyweight/clever/special-purpose clients may want to
567 know all the attributes of items in a given directory
568 in one transaction. The "$" command is used to
569 request all the attributes of a directory at once.
570 For instance, a client might sent the request:
571
572
573 selector stringF$
574
575
576 and the server might return this:
577
578
579 +INFO: 0Salmon dogsFsome selectorFhost2Fport2F+
580
581 +ADMIN:
582
583 Admin: Frodo Gophermeister <[email protected]>
584
585 Mod-Date: August 15, 1992 <19920815185503>
586
587 +VIEWS:
588
589 Text/plain: <10k>
590
591 application/Postscript De_DE: <100k>
592
593 +ABSTRACT:
594
595 A great recipe for making salmon
596
597 +INFO: 0Hot pupsFother selectorFhost3Fport3F+
598
599 +ADMIN:
600
601 Admin: Bilbo Gophernovice <[email protected]>
602
603 Date: <19910101080003>
604
605
606 In this example, the server returned the attribute
607 lists for two items because there were only two items
608 in the directory.. The client software can easily
609 separate the attributes for the items since each
610 attribute list starts with "+INFO". It is also easy
611 for the client to use the "$" command to get
612 directory listings since the gopher item descriptor is
613 on the +INFO line for each item.
614
615
616 Note that the $ command is the only way to find the
617 administrator of a remote link. To get the full
618 attribute information for a link on another machine
619 may require asking the master machine for the item
620 information. It is possible to append which
621 attributes you are interested in retrieving after the
622 $, eg:
623
624
625 some directory selectorF$+VIEWS
626
627 or
628
629 other directory selectorF$+VIEWS+ABSTRACT
630
631
632
633 The $ command makes it possible for a client that does
634 not mind burning bandwidth to get attribute
635 information for all items as the user navigates
636 gopherspace. Clients using 2400 bps SLIP links will
637 probably not use this method... but clients on
638 Ethernet may not mind. This command may also be useful
639 for building smart indexes of items in gopherspace.
640 Note that the specific requested attributes are only
641 suggestions to the server that the client would like
642 less than a full set of attributes. The server may
643 choose to ignore the request (if it is not capable of
644 extracting the required attributes) and return the
645 client the full set anyway. Other caveats: even if
646 the attributes requested are not available, the
647 server WILL NOT return an error, but will send
648 whatever IS available. It is the client's
649 responsibility inspect the returned attributes.
650
651
652 Analogous to use of the $ command, the ! command can
653 also be used to request certain attribute blocks.
654
655
656
657
658 2.8 Gopher+ Interactive Query items.
659
660
661 The principle here is based on Roland Schemer's "Q/q"
662 type ideas. We're calling it the Interactive Query
663 enhancements...
664
665
666 The server may list items that have a "?" following
667 the port field:
668
669
670 0A fileFfile selectorFhostFportF?
671
672 1A directoryFdir selectorFhostFportF?
673
674
675 Now the fact that there's something after the port
676 field means that these are Gopher+ items. Old clients
677 will still be able to show such items in lists, but
678 if they simply send the old style plain selector
679 string to retrieve them, the server will respond with
680 an old style error telling them to get an updated
681 client. New clients will know that before getting one
682 of these items, it will be necessary to retrieve
683 questions from the server, have the user answer them,
684 and then feed the answers back to the server along
685 with the selector. The questions to be asked of the
686 user are retrieved from the server by looking at the
687 +ASK attribute in the item's attribute information.
688
689
690
691
692 When the user selects a query item, the client quickly
693 connects to the server and requests the Attribute
694 Information for the item. Then the client extracts
695 the information in the +ASK attribute block. Here's
696 an example:
697
698
699 +INFO: 0inquisitiveFmoo moo
700 selectorFhost2Fport2F+
701
702 +ADMIN
703
704 Admin: Frank Gophermeister <[email protected]>
705
706 Mod-Date: August 15, 1992 <19920815185503>
707
708 +ASK:
709
710 Ask: How many volts?
711
712 Choose: Deliver electric shock to administrator
713 now?FYesFNot!
714
715
716
717
718
719 The client will use all lines in the order they appear
720 in the +ASK attribute block. The content will be
721 presented to the user as questions or prompts or
722 dialogs or something like that.
723
724
725 The "Ask" presents the user with a question, supplies
726 a default text answer if it exists and allows the
727 user to enter a one-line responce.
728
729
730 The "AskP" presents the user with a question, and
731 bullets out the responce typed in by the user so that
732 someone watching over the user's sholder cannot read
733 the responce.
734
735
736 The "AskL" presents the user with a question, and
737 ideally should allo the user to enter several lines of
738 responce.
739
740
741 The "AskF" requests the user for a new local filename,
742 presumably for stashing the response returned by the
743 server. It may supply a default filename.
744
745
746 The "Select" presents the user with a set of options
747 from which the use can select one or many. This is
748 equivalent to Macintosh check boxes.
749
750
751 The "Choose" presents the user with a few short
752 choices only one of which may be selected at a time.
753 This is equivalent to Macintosh radio buttons.
754
755
756 The "ChooseF" requests that the user select an
757 existing local file, presumably for sending to the
758 server. On some systems, the client writer or
759 administrator might want to restrict the selection of
760 such files to the current directory (ie. not allow
761 paths in the filename to prevent sending things like
762 password files).
763
764
765 The n responses harvested from the user are sent on to
766 the server as the first n lines in the dataBlock.
767 There can only be one file sent, and it will be the
768 remainder of the dataBlock if any. If there is an
769 AskL the responce is returned with a count of the
770 number of lines entered by the user on a line by
771 itself, followed by the lines entered by the user.
772
773
774 Gopher was originally designed as an essentially
775 anonymous document retrieval protocol to facilitate
776 easy access to information rather than limited
777 access. Various kinds of restrictive mechanisms have
778 been implemented at the server end (for example,
779 access restriction by source IP address); however if
780 you have sensitive information, we emphasize that
781 putting it under a Gopher's nose is not a good idea.
782
783
784
785
786 The folks with a hirsute tendency will have noticed
787 that all these interactions are static rather than
788 truly dynamic and interactive. In other words, the
789 server cannot ask different questions in response to
790 different answers. +ASK does not constitute a
791 scripting language by any means.
792
793
794 To do "true" scripting, we have to do one of two
795 things
796
797
798 1. Write a full language parser/interpreter into
799 clients. The server loads a whole script into the
800 client's brain, and the client "runs" it. This
801 rather grossly violates the spirit of simplicity in
802 cross-platform gopher implementation. However, when
803 and if a standard scripting language is adopted,
804 there will be room for it in a SCRIPT attribute block.
805
806
807 2. Client enters a complex back-and-forth transaction
808 with the server. This requires the server, client, or
809 both to save rather a lot of state. NOPE! Server
810 saving state means holding open a connection or
811 (worse) the server retaining tokens between
812 connections. Client saving state means the server
813 has an even worse job to do.
814
815
816 As Opus the Penguin would say: a Hairball.
817
818
819
820 2.9 Gopher+ Pictures, Sounds, Movies.
821
822
823 A lot of folks need ability to retrieve and display
824 pictures, but there is no real consensus on ONE format
825 for these pictures. We don't want to define a type
826 character for every oddball picture type. Gopher+
827 handles Pictures, Movies, and Sounds by defining
828 three item types: ":" for bitmap images, ";" for
829 movies, and "<" for sounds (originally I, M, and S
830 were suggested, but they were informally in use in
831 other ways; the only thing magic about ":", ";", and
832 "<", is that they are the first characters after '9')
833
834
835 Note that there is NO default format for Pictures,
836 Movies and Sounds; the specific format of the image,
837 movie, or sound must be gleaned from the +VIEWS
838 information for the item (eg. Gif, PICT, TIFF, etc.).
839
840
841
842
843 Appendix I
844
845
846 Required attributes and suggested attributes.
847
848
849
850 A1.0 The +INFO attribute block
851
852
853 The +INFO atttribute block is sent whenever an item's
854 attributes are requested. It is required that the
855 Attribute Information list for an item must contain a
856 one-line +INFO attribute, and the +INFO attribute
857 must contain the gopher+ descriptor for the item.
858
859
860 +INFO: 1Nice stuffF/selectorFhostFportF+
861
862
863
864 A2.0 The +ADMIN attribute
865
866
867 A Gopher+ server is required to have an +ADMIN block
868 for every item and the +ADMIN block must contain
869 Admin and a Mod-Date lines:
870
871
872 +ADMIN:
873
874 Admin: [comments] <administrator e-mail address>
875
876 Mod-Date: [comments] <YYYYMMDDhhmmss>
877
878
879 In addition to the required lines, we recommend that
880 the +ADMIN attribute of items returned by a full-text
881 search engine contain a SCORE attribute. The SCORE
882 attribute should contain the relevance ranking (an
883 integer) of the item.
884
885
886 Score: relevance-ranking
887
888
889 We recommend that the +ADMIN attribute of a full-text
890 search engine contain a Score-Range attribute. This
891 attribute is used to specify the range of values
892 taken on by the relevance ranking scores of items
893 returned by the search engine. The Score-Range makes
894 it possible to normalize scores from different search
895 engine technologies. The first number is the lower
896 bound, the second number is the upper bound.
897
898
899 Score-range: lower-bound upper-bound
900
901
902 We also recommend that the +ADMIN attribute for the
903 root of the server (i.e. what you get back when you
904 ask for the attributes of the item with the empty
905 selector string) also contain these fields:
906
907
908 Site: the name of the site
909
910 Org: organization or group owning the site
911
912 Loc: city, state, country
913
914 Geog: latitude longitude
915
916 TZ: timezone as gmt-offset
917
918
919 Other useful attributes might include:
920
921
922 Provider: who provided this item
923
924 Author: who wrote this item
925
926 Creation-Date: when it was born <YYYYMMDDhhmmss>
927
928 Expiration-Date: when it expires <YYYYMMDDhhmmss>
929
930
931
932 A3.0 The +VIEWS attribute
933
934
935 The +VIEWS attribute is used to specify alternative
936 representations of an item. The form of the +VIEWS
937 attribute is:
938
939
940 +VIEWS: [gopher descriptor]
941
942 Content-Type[ viewLanguage]: [<56K>]
943
944 Content-Type[ viewLanguage]: [<93K>]
945
946 Content-Type[ viewLanguage]: [<77K>]
947
948
949 Some values for Content-Type are
950
951
952 Text/plain, application/Postscript, image/Gif,
953 image/jpeg,
954
955
956 Content Types are defined by the Internet Assigned
957 Numbers Authority (IANA). To register a new content
958 type send e-mail to [email protected]. For a
959 comprehensive list, consult the most up-to-date MIME
960 Request for Comments (RFC). A list of currently
961 defined views may be retrieved by anonymous ftp from
962 isi.edu in the directory
963
964
965 /pub/in-notes/MIME/mime-types
966
967
968 All gopher servers must support the Text/plain view
969 for readable documents and the application/gopher-
970 menu view (the basic Gopher+ directory list) for
971 directories. These are the views that must be
972 returned by default. If all a server supports is the
973 default views, then it may omit the +VIEWS attribute
974 block (although we suggest that it not do so).
975
976
977 The viewLanguage is defined as a concatanation of two
978 ISO standard values, the ISO 639 language code and
979 the ISO-3166 country code.
980
981
982 Some values for viewLanguage are:
983
984
985 En_US, De_DE, Es_ES, Se_SE
986
987
988
989 A4.0 The +ABSTRACT attribute
990
991
992 The +ABSTRACT attribute is used to specify a short
993 abstract for the item. The form of the +ABSTRACT
994 attribute is:
995
996
997 +ABSTRACT: [gopher reference]
998
999 A line of text<CRLF>
1000
1001 another line of text<CRLF>
1002
1003 still another line of text.<CRLF>
1004
1005
1006 We recommend that a description of the sorts of
1007 information at the site, a postal address, a phone
1008 number, and the administrator name for the site be
1009 included in the +ABSTRACT attribute for the server
1010 root (i.e. what you get when you ask for the
1011 attribute list of the server with no selector
1012 string).
1013
1014
1015
1016
1017
1018 Appendix II
1019
1020
1021 Paul's NQBNF (Not Quite BNF) for the Gopher+
1022 Enhancements.
1023
1024
1025
1026 Note: This is modified BNF (as used by the Pascal
1027 people) with a few English modifiers thrown in.
1028 Stuff enclosed in '{}' can be repeated zero or more
1029 times. Stuff in '[]' denotes a set of items. The '-
1030 ' operator denotes set subtraction.
1031
1032
1033 This section is not quite solid yet. Please send us
1034 information on any errors you might notice.
1035
1036
1037 Directory Entity
1038
1039
1040 CR-LF ::= Carriage Return Character followed by
1041 Line Feed character.
1042
1043 Tab ::= ASCII Tab character
1044
1045 NUL ::= ASCII NUL character
1046
1047 PLUS ::= ASCII '+' character
1048
1049 LEFT ::= ASCII '<' character
1050
1051 RIGHT ::= ASCII '>' character
1052
1053 OCTET ::= $00 -> $ff
1054
1055 UNASCII ::= OCTET - [Tab CR-LF NUL]
1056
1057 UNASCIINOPLUS ::= UNASCII - [PLUS]
1058
1059 UNASCIINOANGLE ::= UNASCII - [LEFT, RIGHT]
1060
1061 Lastline ::= '.'CR-LF
1062
1063 TextBlock ::= Block of ASCII text not containing
1064 Lastline pattern.
1065
1066 Type ::= UNASCII
1067
1068 DisplayString ::= {UNASCII}
1069
1070 Selector ::= {UNASCII}
1071
1072 Otherflds ::= {UNASCII + TAB}
1073
1074 Host ::= {{UNASCII - ['.']} '.'} {UNASCII -
1075 ['.']}
1076
1077
1078
1079 Note: This is a Fully Qualified Domain Name as defined
1080 in RFC 830. (e.g. gopher.micro.umn.edu) Hosts that
1081 have a CR-LF TAB or NUL in their name get what they
1082 deserve.
1083
1084
1085 Digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6'
1086 | '7' | '8' | '9'
1087
1088 DigitSeq ::= digit {digit}.
1089
1090 Port ::= DigitSeq.
1091
1092
1093 Note: Port corresponds the the TCP Port Number, its
1094 value should be in the range [0..65535]; port 70 is
1095 officially assigned to gopher.
1096
1097
1098
1099 Bool ::= '0' | '1'
1100
1101 G+Field ::= '+' | '?'
1102
1103
1104 Success ::= '+' | '-'.
1105
1106 Transfer ::= DigitSeq | '-1' | '-2'
1107
1108 DataHead ::= Success Transfer CR-LF
1109
1110 DataBlock ::= DataHead {OCTET}
1111
1112
1113
1114 G1DirEntity ::= Type DisplayString Tab Selector Tab
1115 Host Tab Port Tab Otherflds CR-LF
1116
1117 G+DirEntity ::= Type DisplayString Tab Selector Tab
1118 Host Tab Port Tab G+Field
1119
1120 CR-LF
1121
1122
1123
1124 Notes:
1125
1126 It is *highly* recommended that the DisplayString
1127 field contain only printable characters, since many
1128 different clients will be using it. However if eight
1129 bit characters are used, the characters should
1130 conform with the ISO-Latin1 Character Set. The length
1131 of the User displayable line should be less than 70
1132 Characters; longer lines may not fit across some
1133 screens. Warning! The Selector string can be longer
1134 than 255 characters.
1135
1136
1137 Menu Entity
1138
1139 Menu ::= DataHead {G+DirEntity}.
1140
1141
1142 Continues ::= Bool
1143
1144 Representation ::= 'Text' | 'List' | 'Postscript' |
1145 'MacWriteII' | 'RTF' |{UNASCII}
1146
1147
1148
1149 Retrieving a document/menu/etc.:
1150
1151
1152 C: Opens Connection
1153
1154 S: Accepts Connection
1155
1156 C: Sends Selector String Tab '+' Representation [Tab
1157 DataFlag]
1158
1159 C: [Optional] Client sends a DataBlock depending on
1160 value of DataFlag.
1161
1162 S: Sends DataBlock
1163
1164 Connection is closed by either client or server
1165 (typically server).
1166
1167
1168 Spaceline ::= ' ' {UNASCII} CR-LF
1169
1170 Blockname ::= '+' {UNASCIINOPLUS}
1171
1172 Attrblock ::= Blockname ' ' [G+Direntry] CR-LF
1173 {Spaceline}
1174
1175 Attrval ::= SPACE {UNASCII} CR-LF
1176
1177 E-Mail ::= {UNASCII} s.t. it conforms to RFC 822
1178
1179 Adminval ::= ' Admin:' {UNASCII} '<' E-Mailaddr
1180 '>' CR-LF
1181
1182 Dateval ::= ' Mod-Date:' {UNASCII} '<'
1183 YYYYMMDDhhmmss '>' CR-LF
1184
1185 AdminReq ::= AdminVal Dateval
1186
1187 Infoblock ::= '+INFO: ' G+Direntry CR-LF
1188
1189 AdminBlock ::= '+ADMIN: ' {G+Direntry} CR-LF
1190 AdminReq {Attrval}
1191
1192 Language ::= 'English' | 'French' | 'German' |
1193 {UNASCII}
1194
1195 ViewVal ::= ' ' Representation [' ' Language] ":"
1196 ASCIINOANGLE '<'
1197
1198 Size 'k>' CR-LF
1199
1200 ViewBlock ::= '+VIEWS: ' {G+Direntry} CR-LF
1201 {ViewVal}
1202
1203 AttrBlocks ::= InfoBlock ViewBlock {AttrBlock}
1204
1205
1206
1207 Retrieving item Information.
1208
1209
1210
1211 For non-index server (non-type 7 items)
1212
1213
1214 C: Opens Connection
1215
1216 S: Accepts Connection
1217
1218 C: Sends Selector String Tab '!' {BlockName}CR-LF
1219
1220 S: Sends DataBlock with data in AttrrBlocks format.
1221
1222 Connection is closed by either client or server
1223 (typically server).
1224
1225
1226
1227 For index server (type 7 items) the client asks the
1228 search engine to so a search for nothing
1229
1230 (i.e. the client does not provide any words to search
1231 for) and appends a TAB and a "!" after the null-
1232 search:
1233
1234
1235 C: Opens Connection
1236
1237 S: Accepts Connection
1238
1239 C: Sends Selector String Tab Tab '!' {BlockName}CR-LF
1240
1241 S: Sends DataBlock with data in AttrrBlocks format.
1242
1243 Connection is closed by either client or server
1244 (typically server).
1245
1246
1247 Attributes ::= {AttrBlocks}
1248
1249
1250
1251 Retrieving all Item Information entries for a
1252 directory.
1253
1254
1255 C: Opens Connection
1256
1257 S: Accepts Connection
1258
1259 C: Sends Selector String Tab '$'{BlockName} CR-LF
1260
1261 S: Sends DataBlock with data in Attributes format.
1262
1263 Connection is closed by either client or server
1264 (typically server).
1265
1266
1267 .
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.