globus_connect_gridftp_server  15.98
globus_dsi_rest.h
Go to the documentation of this file.
1 /*
2  * Copyright 1999-2016 University of Chicago
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
50 #ifndef GLOBUS_DSI_REST_H
51 #define GLOBUS_DSI_REST_H
52 
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56 
57 #include <stdbool.h>
58 #include "globus_common.h"
59 #include "globus_gridftp_server.h"
60 
73 typedef
75 {
77  const char *key;
79  const char *value;
80 }
82 
90 typedef
92 {
94  size_t count;
97 }
99 
129 typedef
130 globus_result_t (*globus_dsi_rest_response_t) (
131  void *response_callback_arg,
132  int response_code,
133  const char *response_status,
134  const globus_dsi_rest_key_array_t *response_headers);
135 
167 typedef
168 globus_result_t (*globus_dsi_rest_write_t) (
169  void *write_callback_arg,
170  void *buffer,
171  size_t buffer_length,
172  size_t *amount_copied);
173 
205 typedef
206 globus_result_t
208  void *read_callback_arg,
209  void *buffer,
210  size_t buffer_length);
211 
228 typedef
229 void
231  void *complete_callback_arg,
232  globus_result_t result);
233 
266 typedef
267 globus_result_t
269  void *progress_callback_arg,
270  uint64_t total_read,
271  uint64_t amt_read,
272  uint64_t total_written,
273  uint64_t amt_written);
274 
275 typedef
276 struct globus_dsi_rest_callbacks_s
277 {
283  globus_dsi_rest_response_t response_callback;
287  void *response_callback_arg;
288 
294  globus_dsi_rest_complete_t complete_callback;
298  void *complete_callback_arg;
299 
306  globus_dsi_rest_write_t data_write_callback;
310  void *data_write_callback_arg;
311 
317  globus_dsi_rest_read_t data_read_callback;
321  void *data_read_callback_arg;
327  globus_dsi_rest_progress_t progress_callback;
331  void *progress_callback_arg;
332 }
333 globus_dsi_rest_callbacks_t;
334 
356 globus_result_t
358  const char *method,
359  const char *uri,
360  const globus_dsi_rest_key_array_t *query_parameters,
361  const globus_dsi_rest_key_array_t *headers,
362  const globus_dsi_rest_callbacks_t *callbacks);
363 
364 
384 globus_result_t
386  const char *uri,
387  const globus_dsi_rest_key_array_t *query_parameters,
388  char **complete_urip);
389 
406 globus_result_t
408  const char *s,
409  char **escaped);
410 
411 bool
413  globus_result_t result);
414 
427 typedef
429 {
431  void *block_data;
433  size_t block_len;
434 }
436 
449 
464 
474 typedef struct
475 {
477  size_t block_count;
478 }
492 
505 
515 typedef
517 {
519  globus_gfs_operation_t op;
521  globus_off_t offset;
527  globus_off_t length;
532  bool eof;
533 }
535 
551 
561 typedef
563 {
565  size_t num_parts;
566 
567  struct globus_dsi_rest_write_part_s
568  {
573  globus_dsi_rest_write_t data_write_callback;
578  void *data_write_callback_arg;
584  globus_dsi_rest_key_array_t part_header;
585  } *parts;
586 }
588 
625 
635 typedef
637 {
639  size_t num_parts;
640 
641  struct globus_dsi_rest_read_part_s
642  {
648  globus_dsi_rest_response_t response_callback;
653  void *response_callback_arg;
658  globus_dsi_rest_read_t data_read_callback;
663  void *data_read_callback_arg;
664  } *parts;
665 }
667 
682 
698 
714 
727 
728 
738 typedef
740 {
759 }
761 
784 
785 extern globus_module_descriptor_t globus_i_dsi_rest_module;
786 
787 enum
788 {
789  GLOBUS_DSI_REST_ERROR_PARAMETER = 1,
790  GLOBUS_DSI_REST_ERROR_MEMORY,
791  GLOBUS_DSI_REST_ERROR_PARSE,
792  GLOBUS_DSI_REST_ERROR_CURL,
793  GLOBUS_DSI_REST_ERROR_JSON,
794  GLOBUS_DSI_REST_ERROR_TIME_OUT,
795  GLOBUS_DSI_REST_ERROR_THREAD_FAIL,
796  GLOBUS_DSI_REST_ERROR_UNEXPECTED_DATA,
797 };
798 
799 #define GLOBUS_DSI_REST_MODULE (&globus_i_dsi_rest_module)
800 
801 #ifdef __cplusplus
802 }
803 #endif
804 
805 #endif /* GLOBUS_DSI_REST_H */
bool globus_dsi_rest_error_is_retryable(globus_result_t result)
Check if an error is transient.
Definition: error_is_retryable.c:35
globus_result_t globus_dsi_rest_uri_escape(const char *s, char **escaped)
Escape a string.
Definition: uri_escape.c:92
globus_result_t globus_dsi_rest_request(const char *method, const char *uri, const globus_dsi_rest_key_array_t *query_parameters, const globus_dsi_rest_key_array_t *headers, const globus_dsi_rest_callbacks_t *callbacks)
Perform a REST request.
Definition: request.c:99
globus_result_t globus_dsi_rest_uri_add_query(const char *uri, const globus_dsi_rest_key_array_t *query_parameters, char **complete_urip)
Add query parameters to a URI base string.
Definition: uri_add_query.c:27
globus_result_t(* globus_dsi_rest_read_t)(void *read_callback_arg, void *buffer, size_t buffer_length)
Data Read Callback Signature.
Definition: globus_dsi_rest.h:207
globus_result_t(* globus_dsi_rest_write_t)(void *write_callback_arg, void *buffer, size_t buffer_length, size_t *amount_copied)
Data Write Callback Signature.
Definition: globus_dsi_rest.h:168
globus_result_t(* globus_dsi_rest_progress_t)(void *progress_callback_arg, uint64_t total_read, uint64_t amt_read, uint64_t total_written, uint64_t amt_written)
Request Progress Callback Signature.
Definition: globus_dsi_rest.h:268
void(* globus_dsi_rest_complete_t)(void *complete_callback_arg, globus_result_t result)
Request Complete Callback Signature.
Definition: globus_dsi_rest.h:230
globus_result_t(* globus_dsi_rest_response_t)(void *response_callback_arg, int response_code, const char *response_status, const globus_dsi_rest_key_array_t *response_headers)
Response Callback Signature.
Definition: globus_dsi_rest.h:130
globus_dsi_rest_write_t const globus_dsi_rest_write_multipart
Multipart write specialization of globus_dsi_rest_write_t.
Definition: write_multipart.c:264
globus_dsi_rest_read_t const globus_dsi_rest_read_gridftp_op
GridFTP operation read specialization of globus_dsi_rest_read_t.
Definition: read_gridftp_op.c:346
globus_dsi_rest_write_t const globus_dsi_rest_write_blocks
Multiple-block write specialization of the globus_dsi_rest_write_t.
Definition: write_blocks.c:74
globus_dsi_rest_read_t const globus_dsi_rest_read_multipart
Multipart read specialization of globus_dsi_rest_read_t.
Definition: read_multipart.c:264
struct globus_dsi_rest_read_multipart_arg_s globus_dsi_rest_read_multipart_arg_t
Multipart write specialization data_read_callback_arg.
globus_dsi_rest_write_t const globus_dsi_rest_write_block
Single-block write specialization of globus_dsi_rest_write_t.
Definition: write_block.c:59
globus_dsi_rest_response_t const globus_dsi_rest_response
Response parsing specialization of globus_dsi_rest_response_t.
Definition: response.c:72
struct globus_dsi_rest_response_arg_s globus_dsi_rest_response_arg_t
Response specialization response_callback_arg.
struct globus_dsi_rest_gridftp_op_arg_s globus_dsi_rest_gridftp_op_arg_t
GridFTP Operation write specialization data_write_callback_arg.
globus_dsi_rest_progress_t const globus_dsi_rest_progress_idle_timeout
Idle timeout specialization of globus_dsi_rest_progress_t.
Definition: progress_idle_timeout.c:62
struct globus_dsi_rest_write_multipart_arg_s globus_dsi_rest_write_multipart_arg_t
Multipart write specialization data_write_callback_arg.
globus_dsi_rest_write_t const globus_dsi_rest_write_json
JSON write specialization of globus_dsi_rest_write_t.
Definition: write_json.c:47
globus_dsi_rest_write_t const globus_dsi_rest_write_form
POST FORM write specialization of globus_dsi_rest_write_t.
Definition: write_form.c:47
struct globus_dsi_rest_write_block_arg_s globus_dsi_rest_write_block_arg_t
Single-block write specialization data_write_callback_arg.
globus_dsi_rest_write_t const globus_dsi_rest_write_gridftp_op
GridFTP operation write specialization of globus_dsi_rest_write_t.
Definition: write_gridftp_op.c:575
globus_dsi_rest_read_t const globus_dsi_rest_read_json
JSON read specialization of globus_dsi_rest_read_t.
Definition: read_json.c:89
struct globus_dsi_rest_key_array_s globus_dsi_rest_key_array_t
Key-Value Pair Array.
struct globus_dsi_rest_key_value_s globus_dsi_rest_key_value_t
Key-Value Pairs.
GridFTP Operation write specialization data_write_callback_arg.
Definition: globus_dsi_rest.h:517
globus_off_t length
Definition: globus_dsi_rest.h:527
globus_off_t offset
Definition: globus_dsi_rest.h:521
globus_gfs_operation_t op
Definition: globus_dsi_rest.h:519
bool eof
Definition: globus_dsi_rest.h:532
Key-Value Pair Array.
Definition: globus_dsi_rest.h:92
globus_dsi_rest_key_value_t * key_value
Definition: globus_dsi_rest.h:96
size_t count
Definition: globus_dsi_rest.h:94
Key-Value Pairs.
Definition: globus_dsi_rest.h:75
const char * value
Definition: globus_dsi_rest.h:79
const char * key
Definition: globus_dsi_rest.h:77
Multipart write specialization data_read_callback_arg.
Definition: globus_dsi_rest.h:637
size_t num_parts
Definition: globus_dsi_rest.h:639
Response specialization response_callback_arg.
Definition: globus_dsi_rest.h:740
globus_dsi_rest_key_array_t desired_headers
Definition: globus_dsi_rest.h:746
off_t request_bytes_uploaded
Definition: globus_dsi_rest.h:752
int response_code
Definition: globus_dsi_rest.h:742
off_t response_bytes_downloaded
Definition: globus_dsi_rest.h:758
Single-block write specialization data_write_callback_arg.
Definition: globus_dsi_rest.h:429
void * block_data
Definition: globus_dsi_rest.h:431
size_t block_len
Definition: globus_dsi_rest.h:433
Multiple-block write specialization data_write_callback_arg.
Definition: globus_dsi_rest.h:475
Multipart write specialization data_write_callback_arg.
Definition: globus_dsi_rest.h:563
size_t num_parts
Definition: globus_dsi_rest.h:565