source: TI05-delivery/trunk/src/bbftp-server-3.2.0/doc/PROTO_V3 @ 773

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI05-delivery/trunk/src/bbftp-server-3.2.0/doc/PROTO_V3
Revision 773, 20.8 KB checked in by spascoe, 14 years ago (diff)

Initial import of bbftp source

Line 
1BBFTP protocol version 3
2------------------------
3
4Started to be used with version 3.0.0.
5
6Connection and Login
7--------------------
8
9    1a) Standart method (client and server compiled with SSL option)
10        ------------------------------------------------------------
11       
12       Client Side                                                       Server Side
13
14                                        connection
15                                 --------------------->
16Wait for MSG_CRYPT and                                      Generate RSA key
17a known crypt type. In case
18of error the control connection
19has to be closed
20                                        MSG_CRYPT
21                                 <----------------------
22
23Use the RSA pub key to encrypt                              Wait for MSG_LOG. All errors
24username and password.                                      generate the death of the process
25Send MSG_LOG plus the
26encrypted username and password.
27                                        MSG_LOG
28                                  --------------------->
29 
30Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Check username and password.
31or MSG_OK. In case of error the                             All errors generate the death
32control connection has to be closed                         of the process.
33                                        MSG_OK
34                                 <----------------------
35                                MSG_BAD MSG_BAD_NO_RETRY
36
37If MSG_OK can start command                                 if MSG_OK set the state to
38else retry connection.                                      S_PROTWAIT.
39
40    1b) Standart method (server compiled with SSL option, but not client)
41        -----------------------------------------------------------------
42       
43       Client Side                                                       Server Side
44
45                                        connection
46                                 --------------------->
47Wait for MSG_CRYPT and                                      Generate RSA key
48a known crypt type. In case
49of error the control connection
50has to be closed
51                                        MSG_CRYPT
52                                 <----------------------
53Cannot encrypt so send the                                 
54message back with NO_CRYPT
55                                        MSG_CRYPT
56                                 ---------------------->
57Wait for MSG_BAD, MSG_BAD_NO_RETRY                          If server has been launched with -u
58or MSG_OK. In case of error the                             option, send MSG_OK, else MSG_BAD
59control connection has to be closed
60                                        MSG_OK
61                                 <----------------------
62                                MSG_BAD MSG_BAD_NO_RETRY
63If MSG_OK                                                   Wait for MSG_LOG. All errors
64Send MSG_LOG + username & password                          generate the death of the process
65                                        MSG_LOG
66                                  --------------------->
67 
68Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Check username and password.
69or MSG_OK. In case of error the                             All errors generate the death
70control connection has to be closed                         of the process.
71                                        MSG_OK
72                                 <----------------------
73                                MSG_BAD MSG_BAD_NO_RETRY
74
75If MSG_OK can start command                                 if MSG_OK set the state to
76else retry connection.                                      S_PROTWAIT.
77
78
79    2) Remotly started DAEMON
80       ----------------------
81
82       Client Side                                                       Server Side
83
84The client start the remote daemon
85with the method of his choice. Care
86is to be taken if this remote start
87fails. The control socket will be
88replaced by stdin and stdout.
89
90                                        connection
91                                 --------------------->
92Wait for MSG_LOGGED_STDIN.                                  The daemon is started with
93In case of error the control                                stdin and stdout as control
94connection has to be closed.                                connection.
95Care has to be taken because
96control socket is stdin and
97stdout.....
98                                     MSG_LOGGED_STDIN
99                                 <----------------------
100
101                                                           
102                                                            Wait for a connection on the
103                                                            port send with MSG_LOGGED_STDIN
104                                     connection
105                                 --------------------->
106                            MSG_IPADDR (on the new connection)
107                                 --------------------->
108
109                         MSG_IPADDR_OK (on the control connection)
110                                 <----------------------
111                                                            Set the state to S_PROTWAIT
112                                                           
113
114
115
116                                 +-------------------+
117                                 | The daemon states |
118                                 +-------------------+
119
120The S_PROTWAIT State
121--------------------
122
123In this state the server is expecting the following messages.
124
125    MSG_PROT
126    or
127    MSG_STORE
128    MSG_STORE_C
129    MSG_RETR
130    MSG_RETR_C
131    MSG_RETR_RFIO
132    MSG_RETR_RFIO_C
133    MSG_MKDIR
134    MSG_CHDIR
135    MSG_LIST
136
137From the server side
138
139    If the first received message is not MSG_PROT. Then that means that the client is using
140    protocol version 1. So the state will be change to S_LOGGED.
141
142From the client side
143   
144    Send the MSG_PROT message with protocol version
145
146
147The S_LOGGED State
148-------------------
149
150In this state the server is expecting the following messages.
151
152    MSG_CHDIR
153    MSG_CHUMASK   
154    MSG_LIST_V2
155    MSG_MKDIR_V2
156    MSG_RETR_V2
157    MSG_STORE_V2
158
159Any other message will be read, discarded and will generate a MSG_BAD_NO_RETRY message.
160   
161The S_WAITING_STORE_START State
162-------------------------------
163
164In this state the server is expecting the following messages.
165
166    MSG_TRANS_START_V3
167    MSG_TRANS_SIMUL_V3
168    MSG_ABORT
169   
170Any other message will break the control connection.
171
172The S_RECEIVING State
173---------------------
174
175In this state the server is expecting the following messages.
176
177    MSG_ABORT
178   
179Any other message will break the control connection.
180
181The S_WAITING_CREATE_ZERO State
182-------------------------------
183
184In this state the server is expecting the following messages.
185
186    MSG_CREATE_ZERO
187    MSG_ABORT
188   
189Any other message will break the control connection.
190
191The S_WAITING_RETR_START State
192------------------------------
193
194In this state the server is expecting the following messages.
195
196    MSG_TRANS_START_V3
197    MSG_TRANS_SIMUL_V3
198    MSG_ABORT
199   
200Any other message will break the control connection.
201
202The S_SENDING State
203---------------------
204
205In this state the server is expecting the following messages.
206
207    MSG_ABORT
208   
209Any other message will break the control connection.
210
211                                 +--------------+
212                                 | The messages |
213                                 +--------------+
214The MSG_PROT message
215--------------------
216
217       Client Side                                                       Server Side
218                                       MSG_PROT
219                                  --------------------->
220
221Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Look at his own proto and send
222or MSG_PROT_ANS. If the answer                              it. The lowest will be chosen.
223is MSG_BAD or MSG_BAD_NO_RETRY
224that means that the server is using
225protocol version 1.
226Any other answer will close the
227connection.
228                                     MSG_PROT_ANS
229                                 <----------------------
230                                 MSG_BAD MSG_BAD_NO_RETRY
231If the message is MSG_PROT_ANS
232Look at his own proto and send                              Wait for MSG_PROT_ANS. All errors
233it. The lowest will be chosen.                              generate the death of the process
234                                      MSG_PROT_ANS
235                                  --------------------->
236
237                                                            Set the state to S_LOGGED
238               
239               
240The MSG_STORE_V2 message
241------------------------
242
243       Client Side                                                       Server Side
244
245Do checking.
246                                       MSG_STORE_V2
247                                  --------------------->
248                                                            Get the message and read it.
249                                                            In case of error break the
250                                       MSG_FILENAME         connection.
251                                  --------------------->
252
253Wait for MSG_TRANS_OK_V3,                                   Get the message and read it.
254MSG_BAD or MSG_BAD_NO_RETRY. Any                            In case of error break the
255other message will lead to break                            connection.
256the control connection.                                     Do some checks, if they fail return
257                                                            MSG_BAD or MSB_BAD_NO_RETRY
258In case of zero length file
259wait for MSG_OK, MSG_BAD or                                 If the filelen is zero and the
260MSG_BAD_NO_RETRY.                                           creation succeeded then send
261                                                            MSG_OK and set state to S_LOGGED
262                                                           
263                                                            Check the negotiated paremeters
264                                                            and resend the structure with the
265                                                            accepted parameters. Any unkown
266                                                            parameter will be reset to zero.
267                                                           
268                                                            Get the sockets and send the ports.
269
270                                                            if MSG_TRANS_OK_V3 is send
271                                                            set the state to
272                                                            S_WAITING_STORE_START.
273                                 MSG_TRANS_OK_V3 MSG_OK
274                                 <----------------------
275                                 MSG_BAD MSG_BAD_NO_RETRY
276
277If the file length was zero                                 Wait for MSG_TRANS_START_V3 or
278and MSG_OK is received                                      MSG_ABORT. Any other message will
279then                                                        break the control connection
280   execute next command
281else
282   do checking.
283   Start the children.
284   In case of error send a
285   MSG_ABORT.
286                                    MSG_TRANS_START_V3
287                                  --------------------->
288                                        MSG_ABORT
289
290Wait for MSG_BAD,BAD_NO_RETRY                               Fork all children and start them.
291,MSG_OK or MSG_INFO.
292Any other message lead to the break                         set the state to S_RECEIVING.
293of the control connection.
294                                                            In case of error send MSG_BAD or
295Each child connects to a port                               MSB_BAD_NO_RETRY.
296 
297                                                            Any message except MSG_ABORT
298                                                            received during this phase
299                                                            interrupt the transfer and
300                                                            the control connection is closed.
301                                                           
302                                        MSG_OK
303                                 <----------------------
304                                MSG_BAD MSG_BAD_NO_RETRY
305
306
307
308The MSG_RETR_V2 message
309------------------------
310
311       Client Side                                                       Server Side
312
313Do checking.
314                                       MSG_RETR_V2
315                                  --------------------->
316
317                                                            Get the message and read it.
318                                                            In case of error break the
319                                       MSG_FILENAME         connection.
320                                  --------------------->
321
322Wait for MSG_TRANS_OK_V3,                                   Get the message and read it.
323MSG_BAD or MSG_BAD_NO_RETRY. Any                            In case of error break the
324other message will lead to break                            connection.
325the control connection.                                     Do some checks, if they fail return
326                                                            MSG_BAD or MSB_BAD_NO_RETRY
327
328                                                            If the filelen is zero then send
329                                                            MSG_TRANS_OK_V3 and set state to
330                                                            S_WAITING_CREATE_ZERO.
331                                                           
332                                                            Check the negotiated paremeters
333                                                            and resend the structure with the
334                                                            accepted parameters. Any unkown
335                                                            parameter will be reset to zero.
336                                                           
337                                                            Get the sockets and send the ports.
338
339                                                            Send MSG_TRANS_OK_V2 and
340                                                            set the state to
341                                                            S_WAITING_RETR_START.
342                                     MSG_TRANS_OK_V3
343                                 <----------------------
344                                 MSG_BAD MSG_BAD_NO_RETRY
345
346If the file length is zero                                  Wait for MSG_TRANS_START_V3,
347then                                                        MSG_ABORT or MSG_CREATE_ZERO.
348   if creation is successfull
349      send MSG_CREATE_ZERO                                  Any other message will
350   else                                                     break the control connection
351      send MSG_ABORT                                           
352else                                                         
353   do checking.
354   Start the children.
355   In case of error send a
356   MSG_ABORT.
357
358                                    MSG_TRANS_START_V3
359                                  --------------------->
360                                MSG_CREATE_ZERO MSG_ABORT
361
362Wait for MSG_BAD,BAD_NO_RETRY                               Fork all children and start them.
363,MSG_OK or MSG_INFO.
364Any other message lead to the                               set the state to S_SENDING.
365break of the control connection.                           
366Each child connects to a port                               In case of error send MSG_BAD or
367                                                            MSB_BAD_NO_RETRY.
368                                                           
369                                                            Any message except MSG_ABORT
370                                                            received during this phase
371                                                            interrupt the transfer and
372                                                            the control connection is closed.
373                                        MSG_OK
374                                 <----------------------
375                                MSG_BAD MSG_BAD_NO_RETRY
376
377
378
379
380The MSG_MKDIR message
381---------------------
382
383Do checking.
384                                       MSG_MKDIR
385                                  --------------------->
386
387Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Get the message and read it.
388or MSG_OK. Any other message will                           In case of error break the
389lead to break the control connection.                       connection.
390                                                            Create the directory
391                                        MSG_OK
392                                 <----------------------
393                                MSG_BAD MSG_BAD_NO_RETRY
394
395
396
397
398The MSG_CHDIR message
399---------------------
400
401Do checking.
402                                       MSG_CHDIR
403                                  --------------------->
404
405Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Get the message and read it.
406or MSG_OK. Any other message will                           In case of error break the
407lead to break the control connection                        connection.
408                                                            Change to directory
409                                        MSG_OK
410                                 <----------------------
411                                MSG_BAD MSG_BAD_NO_RETRY
412
413                                                           
414The MSG_LIST message
415---------------------
416
417Do checking.
418                                       MSG_LIST
419                                  --------------------->
420
421Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Get the message and read it.
422or MSG_LIST_REPL. Any other message will                    In case of error break the
423lead to break the control connection                        connection.
424                                                            Get the file list and send it
425                                                            back
426                                      MSG_LIST_REPL
427                                 <----------------------
428                                MSG_BAD MSG_BAD_NO_RETRY
429
430The MSG_CHUMASK message
431---------------------
432
433Do checking.
434                                       MSG_CHUMASK
435                                  --------------------->
436
437Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Get the message and read it.
438or MSG_OK. Any other message will                           In case of error break the
439lead to break the control connection                        connection.
440                                                            Change umask
441                                        MSG_OK
442                                 <----------------------
443                                MSG_BAD MSG_BAD_NO_RETRY
444
445                               
446                     +----------------------------------------------------+
447                     | V2-V3 compatibility between client and server      |
448                     +----------------------------------------------------+
449                               
450  1) Client V2 (<3.0.0) and server V3 (>=3.0.0)
451     ------------------------------------------
452     * Work in non-passive mode
453
454  2) Client V3 (>=3.0.0) and server V2 (<3.0.0)
455     ------------------------------------------
456     * Work in non-passive mode
457
458  3) Client V3 (>=3.0.0) and server V3 (>=3.0.0)
459     -------------------------------------------
460     * Work in passive mode
461
462                     +----------------------------------------------------+
463                     | ZIP Option compatibility between client and server |
464                     +----------------------------------------------------+
465
466
467  1) Client and server compiled with ZIP option
468     ------------------------------------------
469     * get command with zip option: files compressed
470     * put command with zip option: files compressed
471
472  2) Server compiled with ZIP option but not client
473     ----------------------------------------------
474     * get command with zip option: client error: option not available
475     * put command with zip option: client error: option not available
476
477  3) Client compiled with ZIP option but not server
478     ----------------------------------------------
479     * get command with zip option: transfer OK but files not compressed
480     * put command with zip option: server warning: option turned off and files are
481                                    transferred non-compressed
482
483  4) Client and server compiled without ZIP option
484     ---------------------------------------------
485     * get command with zip option: client error: option not available
486     * put command with zip option: client error: option not available
487
Note: See TracBrowser for help on using the repository browser.