/
244.txt
159 lines (146 loc) · 8.32 KB
/
244.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
;; [6] [[FTP]]、[CODE(URI)@en[ftp:]]、[[HTTP接続の処理]]も合わせて参照。
[1] [CODE(URI)@en[ftp:]] [[URL record]] [VAR[URL]] と、
[[利用者名]]と[[合言葉]]の組 [VAR[credentials]] と、
ブラウザー [VAR[UA]] について、次のようにします。
[FIG(steps)[
= [VAR[利用者名]]を、 [[null]] に設定します。
= [VAR[合言葉]]を、 [[null]] に設定します。
= [VAR[credentials]] が [[null]] でなければ、
== [VAR[UA]] が [[IE]] で [VAR[credentials]] が[[匿名]]なら、
=== [VAR[利用者名]]を [CODE[Anonymous]] に設定します。
=== [VAR[合言葉]]を [CODE[ieuser@microsoft.com]] に設定します。
== それ以外なら、
=== [VAR[利用者名]]を、 [VAR[credentials]] の[F[利用者名]]に設定します。
=== [VAR[合言葉]]を、 [VAR[credentials]] の[F[合言葉]]に設定します。
= それ以外で、 [VAR[URL]] の[F[利用者名]]が[[空文字列]]でなければ、
== [VAR[利用者名]]を、[VAR[URL]] の[F[利用者名]]に設定します。
== [VAR[合言葉]]を、 [VAR[URL]] の[F[合言葉]]に設定します。
= それ以外なら、
== [VAR[利用者名]]を、 [CODE[anonymous]] に設定します。
== [VAR[合言葉]]を、 [VAR[UA]] により次の値に設定します。
[FIG(switch)[
: [[Firefox]] : [CODE[mozilla@example.com]]
: [[Chrome]] : [CODE[chrome@example.com]]
: [[IE]] : [CODE[User@]]
]FIG]
= [VAR[型]]を、 [CODE[I]] に設定します。
= [VAR[パス接頭辞]]を、[[空文字列]]に設定します。
= [VAR[パス]]を、 [VAR[URL]] の[F[パス]]に設定します。
= [VAR[パス]]に [CODE[;]] が含まれるなら、
== [VAR[引数]]を、[VAR[パス]]のうち、 [CODE[;]] とそれ以降に設定します。
== [VAR[パス]]から[VAR[引数]]を削除します。
== [VAR[UA]] が [[Firefox]] なら、
=== [VAR[URL]] の[F[パス]]を、 [VAR[パス]]に設定します。
=== [VAR[URL]] への[[リダイレクト]]を返し、ここで停止します。
== [VAR[UA]] が [[IE]] なら、
=== [VAR[引数]]が [CODE[;type=A]] から始まる ([[ASCII大文字・小文字不区別]]) なら、
==== [VAR[型]]を、[CODE[A]] に設定します。
=== それ以外で、[VAR[引数]]が [CODE[;type=I]] から始まる ([[ASCII大文字・小文字不区別]]) なら、
==== [VAR[型]]を、[CODE[I]] に設定します。
=== それ以外なら、
==== [[ネットワークエラー]]を返し、ここで停止します。
= [VAR[パス]]から、先頭の [CODE[/]] を除去します。
= 再利用できる接続がなければ、接続を確立します。
= [VAR[UA]] が [[IE]] なら、
== 命令を送信します。 [CODE[TYPE]]、[VAR[型]]を引数とします。
== [VAR[返答]]を、返答の取得の結果に設定します。
== [VAR[返答]]の[F[符号]]の先頭が [CODE[2]] 以外なら、
=== [[ネットワークエラー]]を返してここで停止します。
=
@@
= [VAR[UA]] が [[Chrome]] なら、
== [CODE[SIZE]]
== [CODE[CWD]]
= [CODE[PASV]]
= [VAR[UA]] が [[Firefox]] か [[IE]] なら、
== [CODE[SIZE]]
= [VAR[UA]] が [[Firefox]] なら、
== [CODE[MDTM]]
= [CODE[RETR]]
= [VAR[UA]] が [[Chrome]] なら、
== [CODE[QUIT]]
== ここで停止します。
]FIG]
[2] 返答の取得は、次のようにします。
[FIG(steps)[
= [VAR[改行]]を、[VAR[UA]] が [[Chrome]] なら [CODE[0x0D]] [CODE[0x0A]]、
それ以外なら省略可能な [CODE[0x0D]] と必須の [CODE[0x0A]] に設定します。
= 接続から[VAR[改行]]に一致するバイト列が送られるのを待ちます。
= [VAR[行]]を、[VAR[改行]]に最初に一致する直前までに設定します。
= 接続のうち[VAR[改行]]に最初に一致する部分までを既読として除去します。
= [VAR[行]]が3つの[[ASCII数字]]の後に [CODE[0x20]] から始まるなら、
== [VAR[UA]] が [[Chrome]] でないか、先頭の[[ASCII数字]]が [1, 5] の範囲内なら、
=== [VAR[返答]]を、返答とします。
=== [VAR[返答]]の[F[符号]]を、[VAR[行]]の先頭の3つの[[ASCII数字]]の列とします。
=== [VAR[返答]]の[F[残り]]を、[VAR[行]]の [CODE[0x20]] の直後より後すべてとします。
=== [VAR[返答]]を返します。
= 最初に戻ります。
]FIG]
[3] 接続の確立は、次のようにします。
[FIG(steps)[
= [VAR[返答]]を、返答の取得の結果に設定します。
= [VAR[UA]] が [[IE]] で、 [VAR[返答]]の[F[符号]]の先頭が [CODE[2]] 以外なら、
== [CODE[401]] [[応答]]を返し、ここで停止します。
= [[命令]]を送信します。[CODE[USER]]、[VAR[利用者名]]を[[UTF-8符号化]]した結果を引数とします。
= [VAR[返答]]を、返答の取得の結果に設定します。
= [VAR[返答]]の[F[符号]]の先頭が [CODE[1]] なら、
== [VAR[UA]] が [[IE]] なら、
=== [CODE[401]] [[応答]]を返し、ここで停止します。
== [VAR[UA]] が [[Chrome]] なら、
=== 命令を送信します。 [CODE[QUIT]]、[[null]] を引数とします。
== ここで停止します。
= それ以外で、[VAR[返答]]の[F[符号]]の先頭が [CODE[4]] か [CODE[5]] なら、
== [VAR[UA]] が [[IE]] なら、
=== [[ネットワークエラー]]を返し、ここで停止します。
== [VAR[UA]] が [[Chrome]] なら、
=== 命令を送信します。 [CODE[QUIT]]、[[null]] を引数とします。
== [CODE[401]] [[応答]]を返し、ここで停止します。
= それ以外で、[VAR[返答]]の[F[符号]]の先頭が [CODE[3]] なら、
== [VAR[合言葉]]が [[null]] なら、
=== [VAR[UA]] が [[Firefox]] なら、
==== [VAR[合言葉]]を、モーダルダイアログの結果に設定します。
==== [VAR[合言葉]]が [[null]] なら、
===== 接続を閉じて、ここで停止します。
=== [VAR[UA]] が [[Chrome]] なら、
==== [VAR[合言葉]]を、 [[空文字列]]に設定します。
== [[命令]]を送信します。 [CODE[PASS]]、[VAR[合言葉]]を[[UTF-8符号化]]した結果を引数とします。
== [VAR[返答]]を、返答の取得の結果に設定します。
== [VAR[返答]]の[F[符号]]の先頭が [CODE[1]] か [CODE[3]] で [VAR[UA]] が [[Chrome]] なら、
=== 命令を送信します。 [CODE[QUIT]]、[[null]] を引数とします。
=== [[ネットワークエラー]]を返し、ここで停止します。
== [VAR[返答]]の[F[符号]]の先頭が [CODE[3]] で [VAR[UA]] が [[Firefox]] なら、
=== 命令を送信します。 [CODE[ACCT]]、[CODE[noaccount]] を引数とします。
===
@@@
== [VAR[返答]]の[F[符号]]の先頭が [CODE[2]] 以外なら、
=== [CODE[401]] [[応答]]を返し、ここで停止します。
= [VAR[UA]] が [[Firefox]] か [[Chrome]] なら、
== [CODE[SYST]]
== [VAR[返答]]を、返答の取得の結果に設定します。
== [VAR[返答]]の[F[符号]]の先頭が [CODE[2]] でも [CODE[5]] でもないなら、
=== [VAR[UA]] が [[Chrome]] なら、
==== 命令を送信します。 [CODE[QUIT]]、[[null]] を引数とします。
==== [[ネットワークエラー]]を返します。
=== [VAR[UA]] が [[Firefox]] なら、
==== [CODE[401]] [[応答]]を返します。
=== ここで停止します。
= [VAR[UA]] が [[Firefox]] なら、
== 命令を送信します。 [CODE[FEAT]]、[[null]] を引数とします。
==
@@
= [VAR[UA]] が [[Firefox]] か [[Chrome]] なら、
== 命令を送信します。 [CODE[PWD]]、[[null]] を引数とします。
== [VAR[返答]]を、返答の取得の結果に設定します。
== [VAR[UA]] が [[Chrome]] なら、
=== [VAR[返答]]の[F[符号]]の先頭が [CODE[2]] 以外なら、
==== 命令を送信します。 [CODE[QUIT]]、[[null]] を引数とします。
==== [[ネットワークエラー]]を返してここで停止します。
=== それ以外なら、
==== [VAR[パス接頭辞]]を、[VAR[返答]]の[F[残り]]に設定します。
== 命令を送信します。 [CODE[TYPE]]、[VAR[型]]を引数とします。
== [VAR[返答]]を、返答の取得の結果に設定します。
== [VAR[返答]]の[F[符号]]の先頭が [CODE[2]] 以外なら、
=== [VAR[UA]] が [[Chrome]] なら、
==== 命令を送信します。 [CODE[QUIT]]、[[null]] を引数とします。
=== [[ネットワークエラー]]を返してここで停止します。
]FIG]