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

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

Initial import of bbftp source

Line 
1BBFTP protocol version 2
2------------------------
3
4Started to be used with version 2.0.0.
5
6Connection and Login
7--------------------
8
9    1a) Standard 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) Standard 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
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_V2
167    MSG_TRANS_SIMUL
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_V2
197    MSG_TRANS_SIMUL
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_V2,                                   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                                                            if MSG_TRANS_OK_V2 is send
269                                                            set the state to
270                                                            S_WAITING_STORE_START.
271                                 MSG_TRANS_OK_V2 MSG_OK
272                                 <----------------------
273                                 MSG_BAD MSG_BAD_NO_RETRY
274
275If the file length was zero                                 Wait for MSG_TRANS_START_V2 or
276and MSG_OK is received                                      MSG_ABORT. Any other message will
277then                                                        break the control connection
278   execute next command
279else
280   do checking. Get the sockets.
281   Start the children.
282   In case of error send a
283   MSG_ABORT.
284                                    MSG_TRANS_START_V2
285                                  --------------------->
286                                        MSG_ABORT
287
288Wait for MSG_BAD,BAD_NO_RETRY                               Fork all children and start them.
289,MSG_OK or MSG_INFO.
290Any other message lead to the break                         set the state to S_RECEIVING.
291of the control connection.
292                                                            In case of error send MSG_BAD or
293The children are waiting for a                              MSB_BAD_NO_RETRY.
294connection.
295                                                            Any message except MSG_ABORT
296                                                            received during this phase
297                                                            interrupt the transfer and
298                                                            the control connection is closed.
299                                                           
300                                        MSG_OK
301                                 <----------------------
302                                MSG_BAD MSG_BAD_NO_RETRY
303
304
305
306The MSG_RETR_V2 message
307------------------------
308
309       Client Side                                                       Server Side
310
311Do checking.
312                                       MSG_RETR_V2
313                                  --------------------->
314
315                                                            Get the message and read it.
316                                                            In case of error break the
317                                       MSG_FILENAME         connection.
318                                  --------------------->
319
320Wait for MSG_TRANS_OK_V2,                                   Get the message and read it.
321MSG_BAD or MSG_BAD_NO_RETRY. Any                            In case of error break the
322other message will lead to break                            connection.
323the control connection.                                     Do some checks, if they fail return
324                                                            MSG_BAD or MSB_BAD_NO_RETRY
325
326                                                            If the filelen is zero then send
327                                                            MSG_TRANS_OK_V2 and set state to
328                                                            S_WAITING_CREATE_ZERO.
329                                                           
330                                                            Check the negotiated paremeters
331                                                            and resend the structure with the
332                                                            accepted parameters. Any unkown
333                                                            parameter will be reset to zero.
334                                                           
335                                                            Send MSG_TRANS_OK_V2 and
336                                                            set the state to
337                                                            S_WAITING_RETR_START.
338                                     MSG_TRANS_OK_V2
339                                 <----------------------
340                                 MSG_BAD MSG_BAD_NO_RETRY
341
342If the file length is zero                                  Wait for MSG_TRANS_START_V2,
343then                                                        MSG_ABORT or MSG_CREATE_ZERO.
344   if creation is successfull
345      send MSG_CREATE_ZERO                                  Any other message will
346   else                                                     break the control connection
347      send MSG_ABORT                                           
348else                                                         
349   do checking. Get the sockets.
350   Start the children.
351   In case of error send a
352   MSG_ABORT.
353
354                                    MSG_TRANS_START_V2
355                                  --------------------->
356                                MSG_CREATE_ZERO MSG_ABORT
357
358Wait for MSG_BAD,BAD_NO_RETRY                               Fork all children and start them.
359,MSG_OK or MSG_INFO.
360Any other message lead to the                               set the state to S_SENDING.
361break of the control connection.                           
362The children are waiting for a                              In case of error send MSG_BAD or
363connection.                                                 MSB_BAD_NO_RETRY.
364                                                           
365                                                            Any message except MSG_ABORT
366                                                            received during this phase
367                                                            interrupt the transfer and
368                                                            the control connection is closed.
369                                        MSG_OK
370                                 <----------------------
371                                MSG_BAD MSG_BAD_NO_RETRY
372
373
374
375
376The MSG_MKDIR message
377---------------------
378
379Do checking.
380                                       MSG_MKDIR
381                                  --------------------->
382
383Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Get the message and read it.
384or MSG_OK. Any other message will                           In case of error break the
385lead to break the control connection.                       connection.
386                                                            Create the directory
387                                        MSG_OK
388                                 <----------------------
389                                MSG_BAD MSG_BAD_NO_RETRY
390
391
392
393
394The MSG_CHDIR message
395---------------------
396
397Do checking.
398                                       MSG_CHDIR
399                                  --------------------->
400
401Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Get the message and read it.
402or MSG_OK. Any other message will                           In case of error break the
403lead to break the control connection                        connection.
404                                                            Change to directory
405                                        MSG_OK
406                                 <----------------------
407                                MSG_BAD MSG_BAD_NO_RETRY
408
409                                                           
410The MSG_LIST message
411---------------------
412
413Do checking.
414                                       MSG_LIST
415                                  --------------------->
416
417Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Get the message and read it.
418or MSG_LIST_REPL. Any other message will                    In case of error break the
419lead to break the control connection                        connection.
420                                                            Get the file list and send it
421                                                            back
422                                      MSG_LIST_REPL
423                                 <----------------------
424                                MSG_BAD MSG_BAD_NO_RETRY
425
426The MSG_CHUMASK message
427---------------------
428
429Do checking.
430                                       MSG_CHUMASK
431                                  --------------------->
432
433Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Get the message and read it.
434or MSG_OK. Any other message will                           In case of error break the
435lead to break the control connection                        connection.
436                                                            Change umask
437                                        MSG_OK
438                                 <----------------------
439                                MSG_BAD MSG_BAD_NO_RETRY
440
441                               
442                               
443                     +----------------------------------------------------+
444                     | ZIP Option compatibility between client and server |
445                     +----------------------------------------------------+
446
447
448  1) Client and server compiled with ZIP option
449     ------------------------------------------
450     * get command with zip option: files compressed
451     * put command with zip option: files compressed
452
453  2) Server compiled with ZIP option but not client
454     ----------------------------------------------
455     * get command with zip option: client error: option not available
456     * put command with zip option: client error: option not available
457
458  3) Client compiled with ZIP option but not server
459     ----------------------------------------------
460     * get command with zip option: transfer OK but files not compressed
461     * put command with zip option: server warning: option turned off and files are
462                                    transferred non-compressed
463
464  4) Client and server compiled without ZIP option
465     ---------------------------------------------
466     * get command with zip option: client error: option not available
467     * put command with zip option: client error: option not available
468
Note: See TracBrowser for help on using the repository browser.