9 #ifndef GLOBUS_L_GASS_TRANSFER_FTP_H
10 #define GLOBUS_L_GASS_TRANSFER_FTP_H
20 static globus_mutex_t globus_l_gass_transfer_ftp_mutex;
21 static globus_cond_t globus_l_gass_transfer_ftp_cond;
23 #define globus_l_gass_transfer_ftp_lock() \
24 globus_mutex_lock(&globus_l_gass_transfer_ftp_mutex) \
26 #define globus_l_gass_transfer_ftp_unlock() \
28 globus_mutex_unlock(&globus_l_gass_transfer_ftp_mutex)
29 #define globus_l_gass_transfer_ftp_wait() \
30 globus_cond_wait(&globus_l_gass_transfer_ftp_cond, \
31 &globus_l_gass_transfer_ftp_mutex)
32 #define globus_l_gass_transfer_ftp_signal() \
33 globus_cond_signal(&globus_l_gass_transfer_ftp_cond)
35 #define GLOBUS_L_DEFAULT_FAILURE_CODE 400
36 #define GLOBUS_L_DEFAULT_FAILURE_REASON "Bad Request"
39 #define GLOBUS_L_PROTOCOL_FAILURE_CODE 416
40 #define GLOBUS_L_PROTOCOL_FAILURE_REASON "Protocol Error"
42 #define GLOBUS_L_MALLOC_FAILURE_CODE 417
43 #define GLOBUS_L_MALLOC_FAILURE_REASON "Malloc Error"
51 GLOBUS_GASS_TRANSFER_FTP_STATE_CONNECTING,
52 GLOBUS_GASS_TRANSFER_FTP_STATE_REQUESTING,
53 GLOBUS_GASS_TRANSFER_FTP_STATE_CLOSING,
54 GLOBUS_GASS_TRANSFER_FTP_STATE_REFERRED,
55 GLOBUS_GASS_TRANSFER_FTP_STATE_DENIED,
56 GLOBUS_GASS_TRANSFER_FTP_STATE_RESPONDING,
58 GLOBUS_GASS_TRANSFER_FTP_STATE_IDLE,
59 GLOBUS_GASS_TRANSFER_FTP_STATE_DONE,
60 GLOBUS_GASS_TRANSFER_FTP_STATE_PENDING
61 } globus_gass_transfer_ftp_state_t;
66 GLOBUS_GASS_TRANSFER_FTP_LISTENER_STARTING,
67 GLOBUS_GASS_TRANSFER_FTP_LISTENER_LISTENING,
68 GLOBUS_GASS_TRANSFER_FTP_LISTENER_READY,
69 GLOBUS_GASS_TRANSFER_FTP_LISTENER_ACCEPTING,
70 GLOBUS_GASS_TRANSFER_FTP_LISTENER_CLOSING1,
71 GLOBUS_GASS_TRANSFER_FTP_LISTENER_CLOSING2,
72 GLOBUS_GASS_TRANSFER_FTP_LISTENER_CLOSED
73 } globus_gass_transfer_listener_state_t;
76 GLOBUS_GASS_TRANSFER_FTP_RECV_STATE_UNTIL_EOF,
77 GLOBUS_GASS_TRANSFER_FTP_RECV_STATE_EOF,
78 GLOBUS_GASS_TRANSFER_FTP_RECV_STATE_ERROR
79 } globus_l_gass_transfer_ftp_recv_state_t;
90 globus_gass_transfer_listener_t listener;
91 globus_ftp_client_handle_t handle;
92 globus_url_scheme_t url_scheme;
94 globus_gass_transfer_listener_state_t state;
95 globus_bool_t destroy_called;
97 struct globus_gass_transfer_ftp_request_proto_s * request;
98 } globus_gass_transfer_ftp_listener_proto_t;
100 typedef struct globus_gass_transfer_ftp_request_proto_s
115 globus_ftp_client_handle_t handle;
118 volatile globus_bool_t oneshot_registered;
119 volatile globus_bool_t oneshot_active;
121 volatile globus_gass_transfer_ftp_state_t state;
125 globus_bool_t failure_occurred;
126 globus_bool_t destroy_called;
129 globus_url_t proxy_url;
130 globus_bool_t text_mode;
131 globus_size_t block_size;
145 globus_size_t length;
146 globus_size_t handled;
147 globus_bool_t chunked;
149 globus_bool_t last_data;
153 globus_bool_t client_side;
156 globus_size_t chunk_left;
157 globus_l_gass_transfer_ftp_recv_state_t recv_state;
158 globus_bool_t eof_read;
161 globus_byte_t * response_buffer;
162 globus_size_t response_buflen;
163 globus_size_t response_offset;
164 globus_size_t parsed_offset;
167 globus_bool_t parse_error;
173 globus_list_t * headers;
184 globus_byte_t * user_buffer;
185 globus_size_t user_buflen;
186 globus_size_t user_offset;
187 globus_size_t user_waitlen;
189 globus_gass_transfer_authorization_t authorization_mode;
190 char * authorized_subject;
191 char * connected_subject;
196 globus_bool_t proxy_connect;
197 globus_bool_t got_response;
198 globus_bool_t waiting_for_response;
199 } globus_gass_transfer_ftp_request_proto_t;
204 #if !defined(GLOBUS_GASS_TRANSFER_FTP_PARSER_TEST)
207 globus_l_gass_transfer_ftp_send(
210 globus_byte_t * buffer,
211 globus_size_t buffer_length,
212 globus_bool_t last_data);
216 globus_l_gass_transfer_ftp_receive(
219 globus_byte_t * buffer,
220 globus_size_t buffer_length,
221 globus_size_t wait_for_length);
225 globus_l_gass_transfer_ftp_writev_callback(
227 globus_io_handle_t * handle,
228 globus_result_t result,
230 globus_size_t iovcnt,
231 globus_size_t nbytes);
236 globus_l_gass_transfer_ftp_write_callback(
238 globus_ftp_client_handle_t * handle,
239 globus_object_t * error,
240 globus_byte_t * bytes,
241 globus_size_t nbytes,
249 globus_l_gass_transfer_ftp_write_response(
251 globus_io_handle_t * handle,
252 globus_result_t result,
254 globus_size_t nbytes);
260 globus_l_gass_transfer_ftp_proto_destroy(
261 globus_gass_transfer_ftp_request_proto_t * proto);
265 globus_l_gass_transfer_ftp_read_callback(
267 globus_ftp_client_handle_t * handle,
268 globus_object_t * error,
269 globus_byte_t * bytes,
270 globus_size_t nbytes,
275 globus_l_gass_transfer_ftp_get_done_callback(
277 globus_ftp_client_handle_t * handle,
278 globus_object_t * error);
281 globus_l_gass_transfer_ftp_put_done_callback(
283 globus_ftp_client_handle_t * handle,
284 globus_object_t * error);
289 globus_l_gass_transfer_ftp_read_buffered_callback(
291 globus_io_handle_t * handle,
292 globus_result_t result,
294 globus_size_t nbytes);
298 globus_l_gass_transfer_ftp_callback_read_buffered_callback(
299 globus_abstime_t * time_stop,
304 globus_l_gass_transfer_ftp_callback_ready_callback(
305 globus_abstime_t * time_stop,
311 globus_l_gass_transfer_ftp_fail(
317 globus_l_gass_transfer_ftp_close_callback(
319 globus_io_handle_t * handle,
320 globus_result_t result);
325 globus_l_gass_transfer_ftp_accept_callback(
327 globus_io_handle_t * handle,
328 globus_result_t result);
334 globus_l_gass_transfer_ftp_destroy(
340 globus_l_gass_transfer_ftp_new_request(
342 globus_gass_transfer_requestattr_t * attr);
346 globus_l_gass_transfer_ftp_new_requestattr(
352 globus_l_gass_transfer_ftp_new_listenerattr(
357 globus_l_gass_transfer_ftp_close_listener(
359 globus_gass_transfer_listener_t listener);
363 globus_l_gass_transfer_ftp_listen(
365 globus_gass_transfer_listener_t listener);
369 globus_l_gass_transfer_ftp_accept(
371 globus_gass_transfer_listener_t listener,
373 globus_gass_transfer_requestattr_t * attr);
377 globus_l_gass_transfer_ftp_authorization_callback(
379 globus_io_handle_t * handle,
380 globus_result_t result,
382 gss_ctx_id_t * context_handle);
386 globus_l_gass_transfer_ftp_listener_destroy(
388 globus_gass_transfer_listener_t listener);
392 globus_l_gass_transfer_ftp_new_listener(
393 globus_gass_transfer_listener_t listener,
394 globus_gass_transfer_listenerattr_t * attr,
401 globus_l_gass_transfer_ftp_connect_callback(
403 globus_io_handle_t * handle,
404 globus_result_t result);
408 globus_l_gass_transfer_ftp_command_callback(
410 globus_io_handle_t * handle,
411 globus_result_t result,
413 globus_size_t nbytes);
417 globus_l_gass_transfer_ftp_response_callback(
419 globus_io_handle_t * handle,
420 globus_result_t result,
422 globus_size_t nbytes);
426 globus_l_gass_transfer_ftp_listener_proto_destroy(
427 globus_gass_transfer_ftp_listener_proto_t *
431 globus_l_gass_transfer_ftp_callback_listen_callback(
432 globus_abstime_t * time_stop,
437 globus_l_gass_transfer_ftp_listen_callback(
439 globus_io_handle_t * handle,
440 globus_result_t result);
445 globus_l_gass_transfer_ftp_find_crlf(
446 globus_byte_t * bytes,
448 globus_size_t * crlf_offset);
452 globus_l_gass_transfer_ftp_parse_headers(
453 globus_gass_transfer_ftp_request_proto_t * proto);
457 globus_l_gass_transfer_ftp_parse_one_header(
458 globus_gass_transfer_ftp_request_proto_t * proto,
459 globus_bool_t * last_header);
463 globus_l_gass_transfer_ftp_parse_status_line(
464 globus_gass_transfer_ftp_request_proto_t * proto);
483 globus_l_gass_transfer_ftp_callback_send_callback(
484 globus_abstime_t * time_stop,
490 globus_l_gass_transfer_ftp_request_callback(
492 globus_io_handle_t * handle,
493 globus_result_t result,
495 globus_size_t nbytes);
499 globus_l_gass_transfer_ftp_register_read(
500 globus_gass_transfer_ftp_request_proto_t * proto);
505 globus_l_gass_transfer_ftp_construct_request(
506 globus_gass_transfer_ftp_request_proto_t * proto);
510 globus_l_gass_transfer_ftp_handle_chunk(
511 globus_gass_transfer_ftp_request_proto_t * proto);
515 globus_l_gass_transfer_ftp_parse_response(
516 globus_gass_transfer_ftp_request_proto_t * proto);
520 globus_l_gass_transfer_ftp_parse_request(
521 globus_gass_transfer_ftp_request_proto_t * proto);
525 globus_l_gass_transfer_ftp_parse_request_line(
526 globus_gass_transfer_ftp_request_proto_t * proto);
530 globus_l_gass_transfer_ftp_extract_referral(
531 globus_gass_transfer_ftp_request_proto_t * proto,
533 globus_size_t * referral_count);
538 globus_l_gass_transfer_ftp_callback_denied(
543 globus_l_gass_transfer_ftp_close(
544 globus_gass_transfer_ftp_request_proto_t * proto);
548 globus_l_gass_transfer_ftp_register_close(
549 globus_gass_transfer_ftp_request_proto_t * proto);
554 globus_l_gass_transfer_ftp_listener_close(
555 globus_gass_transfer_ftp_listener_proto_t * proto);
globus_gass_transfer_request_type_t
Definition: globus_gass_transfer.h:129
void(* globus_gass_transfer_proto_accept_t)(globus_gass_transfer_listener_proto_t *proto, globus_gass_transfer_listener_t listener, globus_gass_transfer_request_t request, globus_gass_transfer_requestattr_t *attr)
Definition: globus_gass_transfer_proto.h:342
void(* globus_gass_transfer_proto_receive_t)(globus_gass_transfer_request_proto_t *proto, globus_gass_transfer_request_t request, globus_byte_t *bytes, globus_size_t bytes_length, globus_size_t wait_for_length)
Definition: globus_gass_transfer_proto.h:147
globus_gass_transfer_proto_listener_t listen
Definition: globus_gass_transfer_proto.h:421
void(* globus_gass_transfer_proto_listener_t)(globus_gass_transfer_listener_proto_t *proto, globus_gass_transfer_listener_t listener)
Definition: globus_gass_transfer_proto.h:274
void(* globus_gass_transfer_proto_send_t)(globus_gass_transfer_request_proto_t *proto, globus_gass_transfer_request_t request, globus_byte_t *bytes, globus_size_t send_length, globus_bool_t last_data)
Definition: globus_gass_transfer_proto.h:107
Protocol module listener handling structure.
Definition: globus_gass_transfer_proto.h:416
void(* globus_gass_transfer_proto_func_t)(globus_gass_transfer_request_proto_t *proto, globus_gass_transfer_request_t request)
Definition: globus_gass_transfer_proto.h:174
globus_gass_transfer_proto_listener_t close_listener
Definition: globus_gass_transfer_proto.h:419
Protocol module request handling structure.
Definition: globus_gass_transfer_proto.h:370
globus_gass_transfer_proto_listener_t destroy
Definition: globus_gass_transfer_proto.h:425
globus_gass_transfer_proto_accept_t accept
Definition: globus_gass_transfer_proto.h:423