source: TI05-delivery/trunk/src/bbftp-client-3.2.0/doc/PROTO_V1 @ 773

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

Initial import of bbftp source

Line 
1BBFTP protocol version 1
2------------------------
3
4This protocol is available starting with bbftp version 1.9.0 and will be supported
5by all version 1.9.x and 2.x.x. It describe the message handling and the structures
6used for the message exchange.
7
8
9Connection and Login
10--------------------
11
12
13Client Side                                                       Server Side
14
15                                        connection
16                                 --------------------->
17Wait for MSG_CRYPT and                                      Generate RSA key
18a known crypt type. In case
19of error the control connection
20has to be closed
21                                        MSG_CRYPT
22                                 <----------------------
23
24Use the RSA pub key to encrypt                              Wait for MSG_LOG. All errors
25username and password.                                      generate the death of the process
26Send MSG_LOG plus the
27encrypted username and password.
28                                        MSG_LOG
29                                  --------------------->
30 
31Wait for MSG_BAD, MSG_BAD_NO_RETRY                          Check username and password.
32or MSG_OK. In case of error the                             All errors generate the death
33control connection has to be closed                         of the process.
34                                        MSG_OK
35                                 <----------------------
36                                MSG_BAD MSG_BAD_NO_RETRY
37
38If MSG_OK can start command                                 if MSG_OK set the state to
39else retry connection.                                      S_LOGGED.
40
41
42
43The S_LOGGED State
44-------------------
45
46In this state the server is expecting the following messages.
47
48    MSG_STORE
49    MSG_STORE_C
50    MSG_RETR
51        MSG_RETR_C
52        MSG_RETR_RFIO
53        MSG_RETR_RFIO_C
54        MSG_MKDIR
55        MSG_CHDIR
56        MSG_LIST
57
58Within all version 1.9.X the server only reads eight bytes to know the message type
59and generate a MSG_BAD answer. After that it reads the following eight bytes ... etc,
60etc and that can lead to a stupid behaviour. (No new command can be implemented...)
61So starting with version 2.0.0 the server is going to read all the datas and generate
62a MSG_BAD_NO_RETRY. That allow further command to be accepted.
63
64
65The MSG_STORE and MSG_STORE_C message
66-------------------------------------
67
68           Client Side                                                       Server Side
69
70Do checking. Get the sockets.
71Start the children.
72                                       MSG_STORE
73                                  --------------------->
74                                                                          MSG_STORE_C
75Wait for MSG_BAD,BAD_NO_RETRY                                                           Get the message and read it.
76or MSG_OK. Any other message                                                            In case of error break the
77lead to the break of the control                                                        connection.
78connection.                                                                                                     Do some checks, if they fail return
79The children are waiting for a                                                          MSG_BAD or MSB_BAD_NO_RETRY
80connection.                                                                                                                     
81                                                                                                                        Fork all children and start them.
82                                                                                                                       
83                                                                                                                        set the state to S_RECEIVING.
84                                                                                                                       
85                                                                                                                        In case of error send MSG_BAD or
86                                                                                                                        MSB_BAD_NO_RETRY.
87                                                                                                                       
88                                                                                                                        Any message received during this
89                                                                                                                        phase interrupt the transfer and
90                                                                                                                        the control connection is closed.
91                                        MSG_OK
92                                 <----------------------
93                                MSG_BAD MSG_BAD_NO_RETRY
94
95
96The difference between MSG_STORE and MSG_STORE_C is that all data send by the children
97are starting with a header in MSG_STORE_C.
98
99The MSG_RETR and all related
100----------------------------
101
102           Client Side                                                       Server Side
103
104Do checking. Get the data sokets.
105                                       MSG_RETR
106                                  --------------------->
107
108
109Wait for MSG_RETR_OK,                                                                           Get the message and read it.
110MSG_BAD or MSG_BAD_NO_RETRY. Any                                                        In case of error break the
111other message will lead to break                                                        connection.
112the control connection.                                                                         Do some checks, if they fail return
113                                                                                                                        MSG_BAD or MSB_BAD_NO_RETRY
114                                                                                                                       
115                                                                                                                        Send MSG_RETR_OK
116                                     MSG_RETR_OK
117                                 <----------------------
118                                                                 MSG_BAD MSG_BAD_NO_RETRY
119
120If the file length is zero                                                                  Wait for MSG_RETR_START,
121then                                                                                                            MSG_ABR or MSG_CREATE_ZERO.
122   if creation is successfull
123      send MSG_CREATE_ZERO                                                                      Any other message will
124   else                                                                                                         break the control connection
125      send MSG_ABORT                                                                       
126else                                                                                                           
127   do checking. Get the sockets.
128   Start the children.
129   In case of error send a
130   MSG_ABR.
131
132                                    MSG_RETR_START
133                                  --------------------->
134                                                                 MSG_CREATE_ZERO MSG_ABR
135
136Wait for MSG_BAD,BAD_NO_RETRY                                                           Fork all children and start them.
137,MSG_OK.
138Any other message lead to the                                                           set the state to S_RECEIVING.
139break of the control connection.                                                       
140The children are waiting for a                                                          In case of error send MSG_BAD or
141connection.                                                                                                     MSB_BAD_NO_RETRY.
142                                                                                                                       
143                                                                                                                        Any message except MSG_ABR
144                                                                                                                        received during this phase
145                                                                                                                        interrupt the transfer and
146                                                                                                                        the control connection is closed.
147                                        MSG_OK
148                                 <----------------------
149                                MSG_BAD MSG_BAD_NO_RETRY
150
151
152                                                                       
153                                                                                                                       
154The MSG_MKDIR message
155---------------------
156
157Do checking.
158                                       MSG_MKDIR
159                                  --------------------->
160
161Wait for MSG_BAD, MSG_BAD_NO_RETRY                                                      Get the message and read it.
162or MSG_OK. Any other message will                                                       In case of error break the
163lead to break the control connection.                                           connection.
164                                                                                                                        Create the directory
165                                        MSG_OK
166                                 <----------------------
167                                MSG_BAD MSG_BAD_NO_RETRY
168
169
170
171
172The MSG_CHDIR message
173---------------------
174
175Do checking.
176                                       MSG_CHDIR
177                                  --------------------->
178
179Wait for MSG_BAD, MSG_BAD_NO_RETRY                                          Get the message and read it.
180or MSG_OK. Any other message will                                                   In case of error break the
181lead to break the control connection                                        connection.
182                                                                                                                    Change to directory
183                                        MSG_OK
184                                 <----------------------
185                                MSG_BAD MSG_BAD_NO_RETRY
186
187                                                                                                                       
188The MSG_LIST message
189---------------------
190
191Do checking.
192                                       MSG_LIST
193                                  --------------------->
194
195Wait for MSG_BAD, MSG_BAD_NO_RETRY                                          Get the message and read it.
196or MSG_LIST_REPL. Any other message will                                        In case of error break the
197lead to break the control connection                                        connection.
198                                                                                                                    Get the file list and send it
199                                                                                                                        back
200                                      MSG_LIST_REPL
201                                 <----------------------
202                                MSG_BAD MSG_BAD_NO_RETRY
203                                                                                                                       
204                                                                                                                       
Note: See TracBrowser for help on using the repository browser.