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