24 #ifndef GLOBUS_L_GASS_TRANSFER_FTP_H
25 #define GLOBUS_L_GASS_TRANSFER_FTP_H
35 static globus_mutex_t globus_l_gass_transfer_ftp_mutex;
36 static globus_cond_t globus_l_gass_transfer_ftp_cond;
38 #define globus_l_gass_transfer_ftp_lock() \
39 globus_mutex_lock(&globus_l_gass_transfer_ftp_mutex) \
41 #define globus_l_gass_transfer_ftp_unlock() \
43 globus_mutex_unlock(&globus_l_gass_transfer_ftp_mutex)
44 #define globus_l_gass_transfer_ftp_wait() \
45 globus_cond_wait(&globus_l_gass_transfer_ftp_cond, \
46 &globus_l_gass_transfer_ftp_mutex)
47 #define globus_l_gass_transfer_ftp_signal() \
48 globus_cond_signal(&globus_l_gass_transfer_ftp_cond)
50 #define GLOBUS_L_DEFAULT_FAILURE_CODE 400
51 #define GLOBUS_L_DEFAULT_FAILURE_REASON "Bad Request"
54 #define GLOBUS_L_PROTOCOL_FAILURE_CODE 416
55 #define GLOBUS_L_PROTOCOL_FAILURE_REASON "Protocol Error"
57 #define GLOBUS_L_MALLOC_FAILURE_CODE 417
58 #define GLOBUS_L_MALLOC_FAILURE_REASON "Malloc Error"
66 GLOBUS_GASS_TRANSFER_FTP_STATE_CONNECTING,
67 GLOBUS_GASS_TRANSFER_FTP_STATE_REQUESTING,
68 GLOBUS_GASS_TRANSFER_FTP_STATE_CLOSING,
69 GLOBUS_GASS_TRANSFER_FTP_STATE_REFERRED,
70 GLOBUS_GASS_TRANSFER_FTP_STATE_DENIED,
71 GLOBUS_GASS_TRANSFER_FTP_STATE_RESPONDING,
73 GLOBUS_GASS_TRANSFER_FTP_STATE_IDLE,
74 GLOBUS_GASS_TRANSFER_FTP_STATE_DONE,
75 GLOBUS_GASS_TRANSFER_FTP_STATE_PENDING
76 } globus_gass_transfer_ftp_state_t;
81 GLOBUS_GASS_TRANSFER_FTP_LISTENER_STARTING,
82 GLOBUS_GASS_TRANSFER_FTP_LISTENER_LISTENING,
83 GLOBUS_GASS_TRANSFER_FTP_LISTENER_READY,
84 GLOBUS_GASS_TRANSFER_FTP_LISTENER_ACCEPTING,
85 GLOBUS_GASS_TRANSFER_FTP_LISTENER_CLOSING1,
86 GLOBUS_GASS_TRANSFER_FTP_LISTENER_CLOSING2,
87 GLOBUS_GASS_TRANSFER_FTP_LISTENER_CLOSED
88 } globus_gass_transfer_listener_state_t;
91 GLOBUS_GASS_TRANSFER_FTP_RECV_STATE_UNTIL_EOF,
92 GLOBUS_GASS_TRANSFER_FTP_RECV_STATE_EOF,
93 GLOBUS_GASS_TRANSFER_FTP_RECV_STATE_ERROR
94 } globus_l_gass_transfer_ftp_recv_state_t;
105 globus_gass_transfer_listener_t listener;
106 globus_ftp_client_handle_t handle;
107 globus_url_scheme_t url_scheme;
109 globus_gass_transfer_listener_state_t state;
110 globus_bool_t destroy_called;
112 struct globus_gass_transfer_ftp_request_proto_s * request;
113 } globus_gass_transfer_ftp_listener_proto_t;
115 typedef struct globus_gass_transfer_ftp_request_proto_s
130 globus_ftp_client_handle_t handle;
133 volatile globus_bool_t oneshot_registered;
134 volatile globus_bool_t oneshot_active;
136 volatile globus_gass_transfer_ftp_state_t state;
140 globus_bool_t failure_occurred;
141 globus_bool_t destroy_called;
144 globus_url_t proxy_url;
145 globus_bool_t text_mode;
146 globus_size_t block_size;
160 globus_size_t length;
161 globus_size_t handled;
162 globus_bool_t chunked;
164 globus_bool_t last_data;
168 globus_bool_t client_side;
171 globus_size_t chunk_left;
172 globus_l_gass_transfer_ftp_recv_state_t recv_state;
173 globus_bool_t eof_read;
176 globus_byte_t * response_buffer;
177 globus_size_t response_buflen;
178 globus_size_t response_offset;
179 globus_size_t parsed_offset;
182 globus_bool_t parse_error;
188 globus_list_t * headers;
199 globus_byte_t * user_buffer;
200 globus_size_t user_buflen;
201 globus_size_t user_offset;
202 globus_size_t user_waitlen;
204 globus_gass_transfer_authorization_t authorization_mode;
205 char * authorized_subject;
206 char * connected_subject;
211 globus_bool_t proxy_connect;
212 globus_bool_t got_response;
213 globus_bool_t waiting_for_response;
214 } globus_gass_transfer_ftp_request_proto_t;
219 #if !defined(GLOBUS_GASS_TRANSFER_FTP_PARSER_TEST)
222 globus_l_gass_transfer_ftp_send(
225 globus_byte_t * buffer,
226 globus_size_t buffer_length,
227 globus_bool_t last_data);
231 globus_l_gass_transfer_ftp_receive(
234 globus_byte_t * buffer,
235 globus_size_t buffer_length,
236 globus_size_t wait_for_length);
240 globus_l_gass_transfer_ftp_writev_callback(
242 globus_io_handle_t * handle,
243 globus_result_t result,
245 globus_size_t iovcnt,
246 globus_size_t nbytes);
251 globus_l_gass_transfer_ftp_write_callback(
253 globus_ftp_client_handle_t * handle,
254 globus_object_t * error,
255 globus_byte_t * bytes,
256 globus_size_t nbytes,
264 globus_l_gass_transfer_ftp_write_response(
266 globus_io_handle_t * handle,
267 globus_result_t result,
269 globus_size_t nbytes);
275 globus_l_gass_transfer_ftp_proto_destroy(
276 globus_gass_transfer_ftp_request_proto_t * proto);
280 globus_l_gass_transfer_ftp_read_callback(
282 globus_ftp_client_handle_t * handle,
283 globus_object_t * error,
284 globus_byte_t * bytes,
285 globus_size_t nbytes,
290 globus_l_gass_transfer_ftp_get_done_callback(
292 globus_ftp_client_handle_t * handle,
293 globus_object_t * error);
296 globus_l_gass_transfer_ftp_put_done_callback(
298 globus_ftp_client_handle_t * handle,
299 globus_object_t * error);
304 globus_l_gass_transfer_ftp_read_buffered_callback(
306 globus_io_handle_t * handle,
307 globus_result_t result,
309 globus_size_t nbytes);
313 globus_l_gass_transfer_ftp_callback_read_buffered_callback(
314 globus_abstime_t * time_stop,
319 globus_l_gass_transfer_ftp_callback_ready_callback(
320 globus_abstime_t * time_stop,
326 globus_l_gass_transfer_ftp_fail(
332 globus_l_gass_transfer_ftp_close_callback(
334 globus_io_handle_t * handle,
335 globus_result_t result);
340 globus_l_gass_transfer_ftp_accept_callback(
342 globus_io_handle_t * handle,
343 globus_result_t result);
349 globus_l_gass_transfer_ftp_destroy(
355 globus_l_gass_transfer_ftp_new_request(
357 globus_gass_transfer_requestattr_t * attr);
361 globus_l_gass_transfer_ftp_new_requestattr(
367 globus_l_gass_transfer_ftp_new_listenerattr(
372 globus_l_gass_transfer_ftp_close_listener(
374 globus_gass_transfer_listener_t listener);
378 globus_l_gass_transfer_ftp_listen(
380 globus_gass_transfer_listener_t listener);
384 globus_l_gass_transfer_ftp_accept(
386 globus_gass_transfer_listener_t listener,
388 globus_gass_transfer_requestattr_t * attr);
392 globus_l_gass_transfer_ftp_authorization_callback(
394 globus_io_handle_t * handle,
395 globus_result_t result,
397 gss_ctx_id_t * context_handle);
401 globus_l_gass_transfer_ftp_listener_destroy(
403 globus_gass_transfer_listener_t listener);
407 globus_l_gass_transfer_ftp_new_listener(
408 globus_gass_transfer_listener_t listener,
409 globus_gass_transfer_listenerattr_t * attr,
416 globus_l_gass_transfer_ftp_connect_callback(
418 globus_io_handle_t * handle,
419 globus_result_t result);
423 globus_l_gass_transfer_ftp_command_callback(
425 globus_io_handle_t * handle,
426 globus_result_t result,
428 globus_size_t nbytes);
432 globus_l_gass_transfer_ftp_response_callback(
434 globus_io_handle_t * handle,
435 globus_result_t result,
437 globus_size_t nbytes);
441 globus_l_gass_transfer_ftp_listener_proto_destroy(
442 globus_gass_transfer_ftp_listener_proto_t *
446 globus_l_gass_transfer_ftp_callback_listen_callback(
447 globus_abstime_t * time_stop,
452 globus_l_gass_transfer_ftp_listen_callback(
454 globus_io_handle_t * handle,
455 globus_result_t result);
460 globus_l_gass_transfer_ftp_find_crlf(
461 globus_byte_t * bytes,
463 globus_size_t * crlf_offset);
467 globus_l_gass_transfer_ftp_parse_headers(
468 globus_gass_transfer_ftp_request_proto_t * proto);
472 globus_l_gass_transfer_ftp_parse_one_header(
473 globus_gass_transfer_ftp_request_proto_t * proto,
474 globus_bool_t * last_header);
478 globus_l_gass_transfer_ftp_parse_status_line(
479 globus_gass_transfer_ftp_request_proto_t * proto);
498 globus_l_gass_transfer_ftp_callback_send_callback(
499 globus_abstime_t * time_stop,
505 globus_l_gass_transfer_ftp_request_callback(
507 globus_io_handle_t * handle,
508 globus_result_t result,
510 globus_size_t nbytes);
514 globus_l_gass_transfer_ftp_register_read(
515 globus_gass_transfer_ftp_request_proto_t * proto);
520 globus_l_gass_transfer_ftp_construct_request(
521 globus_gass_transfer_ftp_request_proto_t * proto);
525 globus_l_gass_transfer_ftp_handle_chunk(
526 globus_gass_transfer_ftp_request_proto_t * proto);
530 globus_l_gass_transfer_ftp_parse_response(
531 globus_gass_transfer_ftp_request_proto_t * proto);
535 globus_l_gass_transfer_ftp_parse_request(
536 globus_gass_transfer_ftp_request_proto_t * proto);
540 globus_l_gass_transfer_ftp_parse_request_line(
541 globus_gass_transfer_ftp_request_proto_t * proto);
545 globus_l_gass_transfer_ftp_extract_referral(
546 globus_gass_transfer_ftp_request_proto_t * proto,
548 globus_size_t * referral_count);
553 globus_l_gass_transfer_ftp_callback_denied(
558 globus_l_gass_transfer_ftp_close(
559 globus_gass_transfer_ftp_request_proto_t * proto);
563 globus_l_gass_transfer_ftp_register_close(
564 globus_gass_transfer_ftp_request_proto_t * proto);
569 globus_l_gass_transfer_ftp_listener_close(
570 globus_gass_transfer_ftp_listener_proto_t * proto);
globus_gass_transfer_request_type_t
Definition: globus_gass_transfer.h:144
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:357
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:162
globus_gass_transfer_proto_listener_t listen
Definition: globus_gass_transfer_proto.h:436
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:289
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:122
Protocol module listener handling structure.
Definition: globus_gass_transfer_proto.h:431
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:189
globus_gass_transfer_proto_listener_t close_listener
Definition: globus_gass_transfer_proto.h:434
Protocol module request handling structure.
Definition: globus_gass_transfer_proto.h:385
globus_gass_transfer_proto_listener_t destroy
Definition: globus_gass_transfer_proto.h:440
globus_gass_transfer_proto_accept_t accept
Definition: globus_gass_transfer_proto.h:438