-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathFidoURL.txt
More file actions
6239 lines (4888 loc) · 280 KB
/
FidoURL.txt
File metadata and controls
6239 lines (4888 loc) · 280 KB
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
**********************************************************************
FGHI FIDONET GLOBAL HYPERTEXT INTERFACE
**********************************************************************
Status: draft
Revision: 0.5pre
Title: FGHI URL, the set of Uniform Resource Locators
for Fidonet objects and services
Author: Mithgol the Webmaster (Sergey Sokoloff, 2:50/88)
Special thanks to: Shannar (Boris Kassal, 2:463/587)
Trooper (Alexey Bezugly, 2:5030/1520.9)
NoSFeRaTU (Konstantin Kuzov, 2:5019/40.1)
Inity (Tanya Matveeva, 2:5030/1400)
Revision Date: 8 Apr 2010
-+--------------------------------------------------------------------
Contents:
1. Status of this document
2. Introduction
3. Key words to indicate requirement levels
4. Changelog of this document
5. General Fidonet URL syntax
5.1. The main parts of URLs
5.1.1. Conformance note
5.1.2. Delimiter guidelines
5.2. URL character encoding
5.2.1. Encoding of original characters
5.2.2. Encoding of octets
5.2.2.1. No corresponding graphic 7-bit character
5.2.2.2. Unsafe characters
5.2.2.3. Reserved characters
5.2.2.3.1 Using domain suffixes in areatags
5.2.2.4. The plus ("+") and the encoding of white spaces
5.2.2.4.1. Specificity note
5.2.2.4.2. Internet practice note
5.2.2.5. URLs that span several lines of text in Fidonet
5.3. Parsing the scheme-specific part of URL
5.3.1. Dealing with inappropriate reserved characters
6. Fidonet URL schemes designating actions
6.1. "netmail:" scheme
6.1.1. Optional parameter "to"
6.1.2. Optional parameter "subject"
6.1.3. Optional parameter "from"
6.1.4. Optional parameter "body"
6.2. "areafix:" scheme
6.2.1. Optional parameter "uplink"
6.2.2. Optional parameter "leave"
6.2.3. Optional parameter "fecho"
6.2.4. Future optional parameters
6.2.5. Relative "areafix:" URLs
6.3. "echomail:" scheme
6.3.1. Optional parameter "to"
6.3.2. Optional parameter "subject"
6.3.3. Optional parameter "from"
6.3.4. Optional parameter "body"
7. Fidonet URL schemes designating objects
7.1. The <object-path> part of URL. Possible forms of the path
7.1.1. The leading slash and the trailing slash
7.1.2. Dealing with unknown containers
7.2. "area://" scheme
7.2.1. Message filters
7.2.1.1. Filters of "msgid" type
7.2.1.2. Filters of "time" type
7.2.1.2.1. Single moment
7.2.1.2.1.1. Empty values
7.2.1.2.2. Upper limit
7.2.1.2.2.1. Empty leftmost values
7.2.1.2.2.2. Empty rightmost values
7.2.1.2.3. Lower limit
7.2.1.2.3.1. Empty leftmost values
7.2.1.2.3.2. Empty rightmost values
7.2.1.2.4. Interval of time
7.2.1.2.4.1. Empty rightmost values
7.2.1.2.4.2. Empty leftmost values
7.2.1.2.5. Complex filter
7.2.1.2.6. The type-total set for "time" filters
7.2.1.2.7. Ordinal day number in the year
7.2.1.2.8. Using current date and time
7.2.1.2.9. TrueTime kludge
7.2.1.2.10. Optional parameter "usetz"
7.2.1.2.11. Future variants of "time" filters
7.2.1.3. Filters of "from" type
7.2.1.3.1. Filters of "twit" type
7.2.1.4. Filters of "find" type
7.2.1.4.1. Similar filters:
"subj", "findsb", "to", "sender"
7.2.1.5. Geographically referenced echomail
7.2.1.5.1. GEO kludge
7.2.1.5.2. GEOBOX kludge
7.2.1.5.3. GEOKML kludge
7.2.1.5.4. Coordinates in nodelists and pointlists
7.2.1.5.5. ORIGEO kludge
7.2.1.5.6. Filters of "geomark" type
7.2.1.5.7. Filters of "geofrom" type
7.2.1.6. Tagged echomail
7.2.1.6.1. TAG kludge
7.2.1.6.2. Filters of "tag" type
7.2.1.7. Filters of "ttop" type
7.2.1.8. Future message filters
7.2.2. Encoded objects within echomail messages
7.2.2.1. Names of encoded objects
7.2.2.2. How the designated object is determined
7.2.2.2.1. Possible applications
7.2.3. View of the rendered messages
7.2.3.1. Optional parameter "view"
7.2.3.2. Single message
7.2.3.3. List of messages
7.2.3.4. Tree of replies
7.2.3.5. Branch of replies
7.2.3.6. List of trees
7.2.3.7. Reel of messages
7.2.3.8. Reel of the tops of the trees
7.2.3.9. List of the tops of the trees
7.2.3.10. Expanded tree
7.2.3.11. Expanded branch
7.2.3.12. Flat tree
7.2.3.13. Flat branch
7.2.3.14. Calendar
7.2.3.15. Map of messages
7.2.3.16. Map of senders
7.2.3.17. Globe of messages
7.2.3.18. Globe of senders
7.2.3.19. List of encoded objects
7.2.3.20. Echolist
7.2.4. Controlling the visibility of kludges and hidden lines
7.2.4.1. Optional parameter "kl"
7.2.5. Optional parameter "full"
7.2.6. Sorting order of messages
7.2.6.1. Optional parameter "sort"
7.2.6.2. Unsorted (message base order)
7.2.6.3. Chronological sorting
7.2.6.4. Sorting by relevance
7.2.6.5. Sorting by subject
7.2.6.6. Sorting by size
7.2.6.7. Sorting by addressee's name
7.2.6.8. Sorting by sender's name
7.2.6.9. Sorting by sender's address
7.2.6.10. Sorting by sender's whereabouts
7.2.6.11. Sorting by areatag
7.2.7. Optional parameter "leaf"
7.3. "faqserv://" scheme
7.3.1. Optional parameter "time"
7.3.2. Optional parameter "bot"
7.3.3. Optional parameter "loc"
7.3.4. Future optional parameters
7.4. "fecho://" scheme
7.4.1. Optional parameter "time"
7.4.2. Future optional parameters
7.5. "freq://" scheme
7.5.1. Optional parameter "time"
7.5.2. Optional parameter "size"
7.5.3. Optional parameter "ed2k"
7.5.4. Optional parameter "aich"
7.5.5. Optional parameter "fecho"
7.5.6. URL-based extension for WaZOO file requests
7.5.7. FGHI URLs of file responses (.FUF index)
7.5.8. Nodelist flags indicating FGHI freq capabilities
7.5.9. Future optional parameters
Appendix A. Regular expressions
Appendix B. Known implementations
B.1. HellEd
B.2. FGHI URL gate
B.3. NoSFeRaTU's GoldED+
Appendix C. Foreseen future technologies
C.1. XML echolists
C.2. FFF (FGHI fidosphere features)
C.2.1. Social file (SOCFILE kludge)
-+--------------------------------------------------------------------
1. Status of this document
-+------------------------
This document is a draft of a Fidonet Standards Proposal (FSP).
This document specifies an optional Fidonet standard
that can be used both in the Fidonet community and in the Web,
and requests discussion and suggestions for improvements.
Implementation of the protocols defined in this document is not
mandatory, but all implementations of these protocols are expected
to adhere to this standard.
Distribution of this document is unlimited,
provided that its text is not altered without notice.
"Revision 0.5pre" is a nightly build of the draft, released for most
of the developers (who are subscribed to Ru.FTN.Develop) to be aware
of the very latest changes of this document. It may contain some
unfinished and/or unpolished sections. Eventually (finally) it will
become a serious release (0.5 or 1.0rc). If you find any bugs in
the 0.5pre, inform the author.
2. Introduction
-+-------------
This document specifies several Fidonet schemes of Uniform Resource
Locators (URL), providing both syntax and semantics of formalized
information for location and access of resources and services
via Fidonet.
It is designed to conform with the specifications of RFC 1738, thus
hyperlinks specified according to this document could be used both
in Fidonet (echomail, netmail) and in the traditional HTML hypertext
environment of the Web and Internet e-mail (where standards of URLs
are mostly backwards-compatible with RFC 1738).
By giving each Fidonet resource it own URL (the uniform address),
this standard renders the following two tasks effortless:
1) Pointing to a resource is now effortless: just give out the URL
instead of taking the trouble of explaining how to find that
resource.
2) Finding a resource is now effortless: just follow the URL
(i.e. click on a hyperlink) instead of taking the trouble
of manual search.
Note that the URL may be copied from one program and then pasted
to another, if they both support the standard. See Appendix B for
the list of implementations of the previous versions of this
document.
Besides its independent significance, this document will serve as
the first and the most basic part of FGHI (pronounced 'fig-high',
stands for 'Fidonet Global Hypertext Interface'), aimed for further
hypertext automation of some currently manual Fidonet operations,
delivery and browsing of illustrated hypermedia over the
traditional set of echomail and netmail plain-text connections,
and probably some other elements of the hypertext Fidonet.
2.1. List of introduced Fidonet features
-+--------------------------------------
This document defines seven new URL schemes:
*) netmail: (in section 6.1)
*) areafix: (in section 6.2)
*) echomail: (in section 6.3)
*) area:// (in section 7.2)
*) faqserv:// (in section 7.3)
*) fecho:// (in section 7.4)
*) freq:// (in section 7.5)
This document defines six new optional kludges:
*) TrueTime (in section 7.2.1.2.9)
*) GEO (in section 7.2.1.5.1)
*) GEOBOX (in section 7.2.1.5.2)
*) GEOKML (in section 7.2.1.5.3)
*) ORIGEO (in section 7.2.1.5.5)
*) TAG (in section 7.2.1.6.1)
This document defines eight new optional nodelist flags:
*) LONE, LONW, LATN, LATS (in section 7.2.1.5.4)
*) FUF, FUFME, FUFP, FUFD (in section 7.5.8)
This document defines a backwards-compatible URL-based extension
for WaZOO file requests (in section 7.5.6). A response index file
(.FUF file), similar to previously known request index file (.REQ
file), is introduced (in section 7.5.7).
3. Key words to indicate requirement levels
-+-----------------------------------------
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY",
and "OPTIONAL" in this document are to be interpreted as described
in FTA-1006 (based on RFC 2119).
4. Changelog of this document
-+---------------------------
The section numbers in this changelog may correspond to the former
versions of this document; the actual numbers are sometimes altered
without notice when new sections are introduced.
In version 0.5pre: [8 Apr 2010]
*) optional parameter "loc" is now used to specify whether
the request to a FAQ server is sent in the subject line of
netmail or in the message body (section 7.3.3)
*) optional parameters "subj" are no longer part of the standard:
section 5.2.2.5 defines URLs that span several lines of text,
so it is now always safe to use "subject" optional parameters
*) optional parameter "unsubscribe" is also gone, use "leave"
(section 6.2.2)
*) added a brief list of introduced Fidonet features (section 2.1)
*) optional parameter "fecho" (section 6.2.3) in "areafix:" URLs
may now be used to alter fileechomail subscription
*) echomail may now be tagged and filtered by tags (section 7.2.1.6)
*) the values of "find" filters may now contain plain text, not only
regular expressions (section 7.2.1.4)
*) added more filters ("subj", "findsb", "to", "sender") to perform
searches in different elements of the message (section 7.2.1.4.1)
*) added several optional parameters in "freq://" URLs
(sections 7.5.2, 7.5.3, 7.5.4, 7.5.5) so if the files are already
available in file echoes and/or in ed2k/Kad network, they may be
requested from an alternative source (or, quite the contrary,
a freq server may act as a proxy for alternative file sources)
*) single "fecho://" URL may contain several areatags (section 7.4)
to designate a file cross-posted in several file echoes
*) added optional parameter "time" in "faqserv://" URLs
(section 7.3.1), and in "fecho://" URLs (section 7.4.1),
and in "freq://" URLs (section 7.5.1), in order to assist
in caching of objects
*) added ORIGEO kludge (section 7.2.1.5.5) to contain sender's
coordinates if (and when) they are not present in the nodelist
or in the pointlist
*) added an optional FGHI URL as an element of WaZOO file requests
(section 7.5.6)
*) optional parameter "view" added to contain information about the
recommended view mode of the rendered messages (section 7.2.3)
*) optional parameter "usetz" now also controls which messages
correspond to which dates in the calendar view (section 7.2.3.14)
and whether UTC is used during the chronological sorting (section
7.2.6.3)
*) added RFC 4395 conformity note in section 5.1.2
*) added optional parameter "full" to expand contracted messages
(section 7.2.5)
*) added a clarification in section 5.3:
if the default value for a parameter is not given in this
standard, then it's defined either by user settings or by design
of a Fidonet browser
*) added three examples of possible applications of permanent URLs
for content updated via Fidonet (in section 7.2.2.2.1)
*) added new optional parameter "sort" to control order of messages
(section 7.2.6)
*) extended format of the WaZOO file request (.REQ file), specified
how it may contain FGHI URLs (section 7.5.6)
*) added new freq server response (.FUF file), it contains FGHI URLs
which may be accumulated during the caching of the requested
files (section 7.5.7)
*) geographical coordinates in nodelists and pointlists now must be
separated from the corresponding flag by a semicolon, and a dot
must be used to separate the integral and the fractional parts
of a decimal numeral (section 7.2.1.5.4)
*) added two nodelist flags indicating FGHI freq capabilities
(section 7.5.8)
*) added new filter "ttop" (section 7.2.1.7) in order to select only
those messages that are starting new threads of discussion (i.e.
are not replies to any messages of the same echomail area)
*) added new filter ("twit", section 7.2.1.3.1) in order to provide
lists of twits
*) added Inity to the list of special thanks (the brainstorming was
really great)
*) FGHI now stands for Fidonet Global Hypertext Interface
*) added Appendix B (list of known implementations of FGHI URLs)
In version 0.4: [13 Oct 2007]
*) renamed message-identifying optional parameters;
now they are called message filters (see sections 7.2.1, 7.2.2.2
and their subsections)
*) several filters of the same type may now be used
simultaneously
*) the "/m" flag is now always implied in regular expressions
(appendix A), thus it can be omitted when searching for kludges
(section 7.2.1.4)
*) now default requests can't be implied in "faqserv://" URLs
(section 7.3)
*) optional suffix "@domain" added to areatags to distinguish
between different FTNs (requested by Scott Little)
in "area://" URLs (section 7.2), in "areafix:" URLs (section
6.2), and in "fecho://" URLs (section 7.4); the character "@"
is now a reserved character inside areatags (section 5.2.2.3.1)
*) added a paragraph to clarify the difference between undecodable
objects and unknown containers (in section 7.2.2.2)
*) several uplinks and/or lists of uplinks can be specified
in "areafix:" URLs (section 6.2.1)
*) single "areafix:" URL may contain several areatags (section 6.2),
so it should be possible now to subscribe to several echoes
with single mouse click (requested by Dmitry Gaivoronsky)
*) single "echomail:" URL may contain several areatags (section 6.3)
to support cross-posting of messages (i.e. messages are sent
to several echoes with single mouse click)
*) single "area://" URL may contain several areatags (section 7.2)
to designate a set of messages from several echomail areas
*) multi-line URLs (requested by Alex Kocharin) are now possible
(section 5.2.2.5)
*) filters of "mid" type are no longer needed, use "msgid" instead
(the corresponding section is deleted)
*) new message filter "time" (section 7.2.1.2) and TrueTime kludge
(subsection 7.2.1.2.9)
*) echomail may contain geographic references (section 7.2.1.5) and
be filtered geographically
In version 0.3: [10 Feb 2007]
*) started this changelog
*) added subsection 7.2.1.3 (Optional parameter "from")
*) added subsection 7.2.1.4 (Optional parameter "find")
*) edited the surrounding subsection 7.2 to reflect the fact that
now several messages can be identified, not only a single message
*) added special thanks to NoSFeRaTU
*) edited subsection 5.2.2.4.2, RFC 1630 is mentioned
*) edited the list of examples in section 5
*) added appendix A (Regular expressions)
*) added subsection 7.2.4 (Controlling the visibility of kludges
and hidden lines)
*) edited subsection 5.2.2.2, the word "Origin" in not unsafe now
*) edited the subsection 7.5.1 to reflect the fact that requests
may be delayed
5. General Fidonet URL syntax
-+---------------------------
Just as there are many different types of Fido objects and services,
there are several URL schemes for describing the location of such
resources.
The generic syntax for URLs provides a framework for new schemes
to be established using protocols other than those defined in this
document.
URLs are used to 'locate' resources, by providing an abstract
identification of the resource location. Having located a resource,
a Fidonet system may perform a variety of operations on the resource
(as might be characterized by such words as 'access', 'subscribe',
'unsubscribe', 'send', 'request', 'show attributes').
5.1. The main parts of URLs
-+-------------------------
In general, Fidonet URLs are written as follows:
<scheme>:<scheme-specific-part>
Any URL contains the name of the scheme being used (<scheme>)
followed by a colon and then a string (the <scheme-specific-part>)
whose interpretation depends on the scheme.
Scheme names consist of a sequence of characters. The lower case
letters "a"--"z", digits, and the characters plus ("+"), period
("."), and hyphen ("-") are allowed. For the sake of resiliency,
programs interpreting Fidonet URLs SHOULD treat upper case letters
in scheme names as equivalent to the corresponding lower case
letters (e.g., allow "AREA" scheme name as well as "area").
Only the first colon of the URL plays the role of delimiter
between <scheme> and <scheme-specific-part>. The scheme-specific
part of any URL MAY contain other colons.
The colon delimiter between <scheme> and <scheme-specific-part>
MAY be immediately followed by an optional double slash ("//").
Fidonet programs interpreting URLs MUST treat the delimiter "://"
as equivalent to the simple colon before <scheme-specific-part>.
5.1.1. Conformance note
-+---------------------
This subsection is informative.
The Fidonet URL schemes defined in this document consist of
lower case letters "a"--"z" only. However, digits, and the
characters plus ("+"), period ("."), and hyphen ("-") MUST also
be allowed in scheme names, so that Internet schemes conforming
with the specifications of RFC 1738 are correctly dealt with.
5.1.2. Delimiter guidelines
-+-------------------------
In current Internet practice they distinguish between delimiters
":" and "://". The delimiter "://" is often used after scheme
names that designate objects and resources ("http://", "ftp://",
"gopher://", "nntp://", "ed2k://", "file://", etc.).
The delimiter ":" is often used after scheme names that
designate actions (e.g. "mailto:", "skype:").
The same difference exists between Fidonet resources (objects)
and actions. That's why, though these delimiters MUST always
be interpreted as equivalent, it is still RECOMMENDED that ":"
SHOULD be used after schemes that designate actions ("netmail:",
"echomail:", "areafix:") and "://" SHOULD be used after schemes
that designate resources ("area://", "freq://", "fecho://",
"faqserv://").
This RECOMMENDATION also conforms to RFC 4395 section 2.2, since
each of the Fidonet resource URLs MAY contain a hierarchical
structure of directories and containers (see section 7.1 below),
so the use of double slashes indicates that what follows is
the top hierarchical element.
5.2. URL character encoding
-+-------------------------
URLs are sequences of characters (i.e., letters, digits, and/or
special characters). URLs may be represented in a variety of ways:
e.g., ink on paper, or a sequence of octets in a coded character
set. The interpretation of URL depends only on the identity of the
characters used.
It is useful to distinguish between a "character" (distinguishable
semantic entity) and an "octet" (an 8-bit byte).
In most URL schemes, the character sequences in different parts
of a URL are used to represent sequences of octets used in Fidonet
services. For example, in the "netmail:" scheme, the Fidonet
address, netmail subject and addressee name are such sequences of
octets, represented by parts of the URL. That sequences of octets,
in turn, represent the original characters (of subject line, or of
sysop's name, etc.); each original character is represented by one
or more octets.
So there are always two mappings, one from URL characters to
octets, and the second from octets to original characters:
URL character sequence<->octet sequence<->original character sequence
5.2.1. Encoding of original characters
-+------------------------------------
The following paragraph is informative.
The sequence of octets defined by a component of the URL
is subsequently used to represent a sequence of original
characters. That process could have a very volatile nature.
Being an international network, Fidonet always needs to deal
with hundreds of national characters, with dozens of available
encoding traditions and character sets. There is a number of
FSC (Fidonet Standard Proposal documents) suggesting several
kludge-based methods to define which character set is used.
However, it is not wise to implement any equivalents to kludges
as a required part of every Fidonet URL; and it could be hard to
mantain complete lists of all possible character sets inside all
programs interpreting Fidonet URLs. (Remember, it should be also
made possible for Fidonet URLs to appear and be well interpreted
in traditional HTML hypertext environment of the Web, Internet
e-mail, instant messaging, etc.) That's why only one encoding,
with large enough character set, has to be chosen.
The following paragraphs of this subsection are normative.
The sequence of octets used in Fidonet URLs MUST always contain
UTF-8 encoded representation of original characters.
ISO/IEC 10646-1 defines a multi-octet character set called the
Universal Character Set (UCS), which encompasses most of the
world's writing systems. And UTF-8, one of a few so-called UCS
transformation formats (UTF), preserves the 7-bit ASCII range,
thus providing some compatibility with file systems, parsers and
other software elements that rely on 7-bit ASCII values but are
transparent to other values.
UTF-8 is defined in RFC 2279. Its description can also be found
in Unicode Technical Report #4 and in the Unicode Standard,
version 2.0.
5.2.2. Encoding of octets
-+-----------------------
The character sequences in different parts of a URL are used
to represent sequences of octets.
It is possible to represent an octet by the chararacter
which has that octet as its code within the pure 7-bit ASCII
character set. However, there are some exceptions (see below).
Alternatively, octets MAY be encoded by a character triplet
consisting of the character "%" followed by the two hexadecimal
digits (from "0123456789ABCDEF") which form the hexadecimal
value of the octet. (The characters "abcdef" MAY also be used in
hexadecimal encodings.)
Hexadecimal encoding of any octet MAY be used even when it is
not REQUIRED or RECOMMENDED. However, it is RECOMMENDED to avoid
unnecessary hexadecimal encoding, thus keeping URLs reasonably
short.
It is either REQIRED or RECOMMENDED to use the hexadecimal
encoding of octets if they have no corresponding graphic
character within the 7-bit ASCII character set, or if the use
of the corresponding character is unsafe, or if the
corresponding character is reserved for some other
interpretation within the particular URL scheme. These
requirements and recommendations are detailed below.
5.2.2.1. No corresponding graphic 7-bit character
-+-----------------------------------------------
URLs are written only with the graphic printable characters
of the 7-bit ASCII coded character set.
The octets 80-FF hexadecimal do not belong to 7-bit ASCII,
and the octets 00-1F and 7F hexadecimal represent control
characters; these octets MUST be encoded.
5.2.2.2. Unsafe characters
-+------------------------
Characters can be unsafe for a number of reasons.
The space character is unsafe because significant spaces may
disappear and insignificant spaces may be introduced when URLs
are transcribed or typeset or subjected to the treatment of
word-processing programs. The octet 20 hexadecimal MUST always
be encoded.
The characters "<" and ">" are unsafe because they are used
as the delimiters around tags in HTML hypertext and XML data.
The octets 3C and 3E hexadecimal MUST always be encoded.
The quote mark (""") is used to delimit URLs in some systems,
including valid XHTML and XML. The octet 22 hexadecimal
MUST always be encoded.
The character "#" is unsafe because it is used in World Wide
Web and in other systems to delimit a URL from a fragment or
anchor identifier that might follow it.
The octet 23 hexadecimal MUST always be encoded.
The character "%" is unsafe because it is used for encodings
of other characters. The octet 25 hexadecimal MUST always be
encoded.
The character sequence of triple minus ("-" repeated thrice)
has a special meaning in Fidonet and can accidentally start
a tearline in some cases (e.g. when a line is wrapped).
At least one of the three corresponding octets
(2D 2D 2D hexadecimal) MUST be encoded if they follow
each other in a sequence.
Other characters were declared unsafe in RFC 1738 because some
gateways and other transport agents were known to sometimes
modify such characters. These characters are "{", "}", "|",
"\", "^", "~", "[", "]", and "`". The corresponding octets
(7B 7D 7C 5C 5E 7E 5B 5D 60 hexadecimal) MUST always be
encoded for the sake of Internet compatibility.
All unsafe characters MUST always be encoded within a URL.
For example, the character "#" MUST be encoded within URLs
even in software programs that do not normally deal with
fragment or anchor identifiers, so that if the URL is copied
into another program that does use them, it will not be
necessary to change the URL encoding.
5.2.2.3. Reserved characters
-+--------------------------
Many URL schemes reserve certain characters for a special
meaning: appearance of that characters in the scheme-specific
part of the URL (in <scheme-specific-part> after scheme name)
has a designated semantics.
Usually a URL has the same interpretation when an octet is
represented by a character and when it is encoded. However,
this is not true for reserved characters: encoding a character
that is reserved for a particular scheme may cause harm to
the meaning of a URL, if the character is used according
to its designated semantics. And vice versa.
The character "?" is used as the delimiter between required
and optional parts of the URL. The delimiter itself MUST NOT
be encoded. If the character "?" appears in any other part of
a URL, it MUST be encoded, so it won't be confused with the
delimiter.
The character "=" is used as the delimiter between parameter
names and parameter values. The delimiters themselves MUST NOT
be encoded. If the character "=" appears in any other part
of a URL, it MUST be encoded, so it won't be confused with
any of the delimiters.
The character "&" is used as the delimiter between
"parameter=value" pairs. The delimiters themselves MUST NOT
be encoded. If the character "&" appears in any other part
of a URL, it MUST be encoded, so it won't be confused with
any of the delimiters.
The character "@" is used as the delimiter between an areatag
and its suffix, or between suffixes (see subsection 5.2.2.3.1
for details). The delimiters themselves MUST NOT be encoded.
If the character "@" appears inside the areatag itself (or
inside a suffix), it MUST be encoded, so it won't be confused
with any of the delimiters. In any latter part of the URL
(where areatags and suffixes are not expected to appear) this
character MAY be left as it is.
The character "/" is scheme-specific:
*) In some schemes ("netmail:", for example) the character "/"
has its own (literal) meaning, as it is widely used
in standard Fidonet addressing notation
<zone>:<net>/<node>.<point> (see FSP-1004 for details).
*) In some other schemes the character "/" is reserved
to be used in the file path
(<directory>/<directory>/...<directory>/<filename>),
and its corresponding octet (2F hexadecimal)
MUST be encoded if it does not delimit parts of the path.
See the scheme-specific details below (in scheme sections).
5.2.2.3.1 Using domain suffixes in areatags
-+-----------------------------------------
Different domains of Fidonet (in "@<domain>" sense,
see FSP-1004 for details), also known as Fidonet Technology
Networks, MAY have common echomail areas (i.e. areas that
are gated between some of FTNs) and MAY have internal
echomail areas (i.e. areas distributed only inside
the domain).
If a Fidonet station has access to echomail areas in
dirrerent domains, it MAY encounter areas of the same name
(of the same areatag) in different FTN domains. It's OK
if it is the same common area; however, even if they are
different internal areas that just have the same name
by coincidence, the Uniform Resource Locator MAY contain
an optional "@<domain>" suffix after the areatag, and thus
distinguish between different areas. The suffix contains
the domain name of the FTN of the designated echo area and
the preceding "@" symbol.
The same rule applies to areatags of file echoes.
Examples:
area://jabber@fidonet
area://jabber@othernet
areafix:sysop.talks@fidonet
areafix:sysop.talks@othernet
fecho://common.files@fidonet
fecho://common.files@othernet
Domain suffixes are intentionally OPTIONAL, because FTNs
generally have their own means to ensure that the names of
echomail areas are unique. Some FTNs, for example, use
their domain names as prefixes or suffixes for echomail area
names (i.e. othernet.areaname, or areaname.othernet), thus
eliminating the need of a special URL element, that
otherwise would be needed for the same purpose.
The character "@" is a reserved character. When it is used
as the delimiter between an areatag and its FTN domain
name, the character "@" MUST NOT be encoded. However,
if the character "@" appears inside the areatag itself (e.g.
when the area name is something like SETI@home), then
the character MUST be encoded, so it won't be confused with
the delimiters.
But outside of the areatags the character "@" is not
reserved, so it MAY be either encoded or left intact in any
other part of the URL (e.g. in object's path, in parameter's
name, in parameter's value, etc.).
5.2.2.4. The plus ("+") and the encoding of white spaces
-+------------------------------------------------------
White spaces (octets 20 hexadecimal) are the most common
unsafe characters in Fidonet, and so they play a significant
role in some scheme-specific parts of the URL: they appear in
MSGID kludges, they are used as delimiters between words
in lines of text, etc.
To enhance human readability of Fidonet URLs, and to make them
shorter, a new shorter synonym for "%20" hexadecimal triplet
is available. It is the plus sign ("+").
Programs interpreting scheme-specific part of Fidonet URL
MUST treat the character plus ("+") there as equivalent
to the white space hexadecimal triplet ("%20").
Because of that, the plus character itself is reserved, and
its own corresponding octet (2B hexadecimal) MUST be encoded
if it appears in scheme-specific part of Fidonet URL.
5.2.2.4.1. Specificity note
-+-------------------------
The rule of equivalence between "+" and "%20" does not apply
outside of the scheme-specific part of URL; the plus sign
has no special meaning in scheme name, since white spaces
are not allowed in scheme names.
5.2.2.4.2. Internet practice note
-+-------------------------------
The same shortening already happens in Internet. Open
http://www.google.ru/search?q=Fidonet+URL URL, and you'll
get the Google search for "Fidonet URL" (not "Fidonet+URL");
http://www.google.ru/search?hl=ru&q=Fidonet%2BURL is needed
if you're looking for "Fidonet+URL".
This practice is not documented in RFC 1738. It is, however,
documented in RFC 1630.
5.2.2.5. URLs that span several lines of text in Fidonet
-+------------------------------------------------------
Some Fidonet mail editors and other units of software do not
permit lines of text to be longer than some limit, e.g. longer
than 78 or 80 characters (or a lesser limit, especially inside
quotes). If text is longer than limit, it spans several lines
(usually a line break is inserted instead of a white space;
however, if more than 80 successive characters do not contain
white spaces, the line MAY be broken anyway. Or less than 80:
the limit MAY vary.)
Sometimes it MAY become necessary for a long enough URL
to span several lines as well. To distinguish between URLs
that span several lines and URLs that just end (by chance)
before some end of line, a special mark is needed.
Two successive "%" characters MUST NOT appear in URLs (because
"%" MUST be followed by two hexadecimal digits), and they are
also rare in ordinary text. That's why "%%" character sequence
MUST be used before and after a line break in URL, to mark
that the line break does not end the URL.
If an URL parser encounters "%%" character sequence in the URL
it parses, then the parser MUST skip the "%%" sequence, and
all characters after it and before the line break, and
the line break, and all characters after the line break
and before the next "%%" sequence, and that "%%" sequence.
Then the URL continues.
Quote decoration MAY be encountered after the line break and
before the "%%" sequence marking the place where the URL
resumes. Fidonet mail editors MAY rearrange the "%%" sequences
and line breaks when quoting the quotes.
Example:
MtW>> To track Fidonet software development in Russian,
MtW>> a newsreel like area://Ru.FTN.Develop+Ru.FTN.Win%%
MtW>> %%Soft+Ru.FIPS/ is often used.
MtW>>>>> To track Fidonet software development in Russian,
MtW>>>>> a newsreel like area://Ru.FTN.Develop+Ru.FTN.W%%
MtW>>>>> %%inSoft+Ru.FIPS/ is often used.
The URL used in this example:
area://Ru.FTN.Develop+Ru.FTN.WinSoft+Ru.FIPS/
(the meaning of area:// URLs is explained in section 7.2)
Frame decoration MAY be encountered after the line break and
before the "%%" sequence marking the place where the URL
resumes, or before the line break and after the "%%" sequence
marking the place where the URL pauses.
Example:
+==========================================================+
+ +
+ To track Fidonet software development in Russian, +
+ a newsreel like area://Ru.FTN.Develop+Ru.FTN.Win%% +
+ %%Soft+Ru.FIPS/ is often used. +
+ +
+==========================================================+
Any other decoration is also possible, so the URL parser MUST
expect it. For example, the URL parser MUST allow more than
one line break between the URL-pausing "%%" and the next "%%",
because additional line breaks MAY be introduced by quoting.
Example:
***********************************************************
***********************************************************
** **
** ATTENTION! Grab the N5019 pointlist at fecho://p%% **
** %%ntlist/pnt5019.zip **
** **
***********************************************************
***********************************************************
MtW> ******************************************************
MtW> *****
MtW> ******************************************************
MtW> *****
MtW> **
MtW> **
MtW> ** ATTENTION! Grab the N5019 pointlist at fecho://p%%
MtW> **
MtW> ** %%ntlist/pnt5019.zip
MtW> **
MtW> **
MtW> **
MtW> ******************************************************
MtW> *****
MtW> ******************************************************
MtW> *****
The URL used in this example:
fecho://pntlist/pnt5019.zip
(the meaning of fecho:// URLs is explained in section 7.4)
To avoid the ambiguity of "%%%", an URL MUST NOT be broken
immediately after or immediately before any of "%" characters
that belong to the URL.
Good example:
fecho://example/%D0%A4%D0%B8%D0%B4%D0%BE%D0%BD%D0%B5%D%%
%%1%82.txt
Examples of mistakes:
fecho://example/%D0%A4%D0%B8%D0%B4%D0%BE%D0%BD%D0%B5%D1%%
%%%82.txt
fecho://example/%D0%A4%D0%B8%D0%B4%D0%BE%D0%BD%D0%B5%%%
%%D1%82.txt
The URL parser MUST be allowed to find where an URL starts.
In order to fulfil this expectation, an URL MUST NOT be broken
before the first colon (not only immediately before the first
colon, but anywhere in the scheme name as well), unless
the URL is written somewhere in the place where an URL is
always expected (for example, in HREF="..." attribute of
a LINK element in HTML echomail).
Fidonet URL parsers SHOULD allow the same "%%"-marked
line breaks even in the URLs that are based on schemes
not defined in FGHI URL standard; for example, in traditional
Internet URLs (http://, ftp://, mailto:, news:, nntp://, etc.)
and in modern URLs (like ed2k://, file://, skype:, etc.). This
is RECOMMENDED to satisfy the general need for linebreaking in
URLs in Fidonet mail, not only in Fidonet-related URLs.
Example:
ed2k://|file|fidopoyka_24_09_06(DivX5_512x384).avi|871219%%
%%20|8A706F58C5C7CF6EBA28561A53D60E70|/
Though other schemes generally have other sets of reserved and
unsafe characters (for example, in ed2k:// URLs the character
"|" is not treated as unsafe, and in Skype URLs like
"skype:+79184436168" the character "+" is not reserved),
the character "%" is widely used in "%xx" hexadecimal encoding
of octets. This means that "%%" sequence is always unsafe in
such URLs, and thus always MAY be used as our own line break
marker; this also means that the ambiguity of "%%%" MAY always
be avoided as described above.
5.3. Parsing the scheme-specific part of URL
-+------------------------------------------
As it was stated above, Fidonet URLs are written as follows:
<scheme><scheme-delimiter><scheme-specific-part>
where <scheme-delimiter> is either ":" or "://".
The <scheme-specific-part> uses the reserved character "?"
as the delimiter between required and optional part or URL:
<scheme><scheme-delimiter><required-part>?<optional-part>
The required part is REQUIRED. The optional part MAY be empty;
if the optional part is empty, the "?" character before it MAY
be omitted. If the optional part is empty and the "?" character
is present, then the "?" character MUST be ignored.
If the optional part is not empty, it consists of one or more
"parameter=value" settings, delimited by the reserved "&"
character as follows:
<setting1>&<setting2>&<setting3>&<setting4>& ... &<settingN>
However, the optional part MAY have the "&" character on URL's end
as follows:
<setting1>&<setting2>&<setting3>&<setting4>& ... &<settingN>&
(in this case the last "&" character MUST be ignored).
Each of these settings is expected to appear in "parameter=value"
form:
<parameter's name>=<parameter's value>
If the value part is omitted, then the corresponding parameter
is assigned an empty value. In this case the "=" character MAY
also be omitted. Example of such an optional part of URL:
subject=Test&path=&subscribe&to=Test+Robot
In this example, parameters "path" and "subscribe" become empty,
the parameter "subject" becomes equal to "Test" value, and the
parameter "to" becomes equal to "Test Robot" value (because "+"
represents the white space, see the corresponding section above).
Parameters specified in the optional part of URL are also optional
by nature. If a certain parameter does not appear in the given URL
at all, it takes a default value; and if the default value for
a parameter is not given in this standard, then it's defined
either by user settings or by design of a Fidonet browser.
The "parameter=value" pairs MAY have an arbitrary order
of appearance in an optional part of URL.
For example, this optional part of URL:
to=Test+Robot&path=&subject=Test&subscribe