00001 #ifndef _globus_rls_client_h_
00002 #define _globus_rls_client_h_
00003
00004 #include <globus_io.h>
00005 #include <globus_error_string.h>
00006
00048 #define GLOBUS_RLS_SUCCESS 0
00049
00053 #define GLOBUS_RLS_GLOBUSERR 1
00054
00058 #define GLOBUS_RLS_INVHANDLE 2
00059
00063 #define GLOBUS_RLS_BADURL 3
00064
00068 #define GLOBUS_RLS_NOMEMORY 4
00069
00073 #define GLOBUS_RLS_OVERFLOW 5
00074
00078 #define GLOBUS_RLS_BADARG 6
00079
00083 #define GLOBUS_RLS_PERM 7
00084
00088 #define GLOBUS_RLS_BADMETHOD 8
00089
00093 #define GLOBUS_RLS_INVSERVER 9
00094
00098 #define GLOBUS_RLS_MAPPING_NEXIST 10
00099
00103 #define GLOBUS_RLS_LFN_EXIST 11
00104
00108 #define GLOBUS_RLS_LFN_NEXIST 12
00109
00113 #define GLOBUS_RLS_PFN_EXIST 13
00114
00118 #define GLOBUS_RLS_PFN_NEXIST 14
00119
00123 #define GLOBUS_RLS_LRC_EXIST 15
00124
00128 #define GLOBUS_RLS_LRC_NEXIST 16
00129
00133 #define GLOBUS_RLS_DBERROR 17
00134
00138 #define GLOBUS_RLS_RLI_EXIST 18
00139
00143 #define GLOBUS_RLS_RLI_NEXIST 19
00144
00148 #define GLOBUS_RLS_MAPPING_EXIST 20
00149
00153 #define GLOBUS_RLS_INV_ATTR_TYPE 21
00154
00158 #define GLOBUS_RLS_ATTR_EXIST 22
00159
00163 #define GLOBUS_RLS_ATTR_NEXIST 23
00164
00168 #define GLOBUS_RLS_INV_OBJ_TYPE 24
00169
00173 #define GLOBUS_RLS_INV_ATTR_OP 25
00174
00178 #define GLOBUS_RLS_UNSUPPORTED 26
00179
00183 #define GLOBUS_RLS_TIMEOUT 27
00184
00188 #define GLOBUS_RLS_TOO_MANY_CONNECTIONS 28
00189
00194 #define GLOBUS_RLS_ATTR_VALUE_NEXIST 29
00195
00200 #define GLOBUS_RLS_ATTR_INUSE 30
00201
00211 typedef enum {
00212 rls_pattern_unix,
00213 rls_pattern_sql
00214 } globus_rls_pattern_t;
00215
00216
00217 #define globus_rls_pattern_type globus_rls_pattern_t;
00218
00219 #define BUFLEN 1024
00220
00225 typedef enum {
00226 globus_rls_attr_type_date,
00227 globus_rls_attr_type_flt,
00228 globus_rls_attr_type_int,
00229 globus_rls_attr_type_str
00230 } globus_rls_attr_type_t;
00231
00232
00233
00234
00235 #define GLOBUS_RLS_ATTR_TYPE_DATE globus_rls_attr_type_date
00236 #define GLOBUS_RLS_ATTR_TYPE_FLT globus_rls_attr_type_flt
00237 #define GLOBUS_RLS_ATTR_TYPE_INT globus_rls_attr_type_int
00238 #define GLOBUS_RLS_ATTR_TYPE_STR globus_rls_attr_type_str
00239
00244 typedef enum {
00245 globus_rls_obj_lrc_lfn,
00246 globus_rls_obj_lrc_pfn,
00247 globus_rls_obj_rli_lfn,
00248 globus_rls_obj_rli_lrc
00249 } globus_rls_obj_type_t;
00250
00251
00252
00253
00254 #define GLOBUS_RLS_CLIENT_LRC_OBJ_LFN globus_rls_obj_lrc_lfn
00255 #define GLOBUS_RLS_CLIENT_LRC_OBJ_PFN globus_rls_obj_lrc_pfn
00256 #define GLOBUS_RLS_CLIENT_RLI_OBJ_LFN globus_rls_obj_rli_lfn
00257 #define GLOBUS_RLS_CLIENT_RLI_OBJ_LRC globus_rls_obj_rli_lrc
00258
00263 typedef struct {
00264 char *name;
00265 globus_rls_obj_type_t objtype;
00266 globus_rls_attr_type_t type;
00268 union {
00269 time_t t;
00270 double d;
00271 int i;
00272 char *s;
00273 } val;
00274 } globus_rls_attribute_t;
00275
00282 typedef struct {
00284 globus_rls_attribute_t attr;
00286 char *key;
00288 int rc;
00289 } globus_rls_attribute_object_t;
00290
00295 typedef enum {
00296 globus_rls_attr_op_all,
00297 globus_rls_attr_op_eq,
00298 globus_rls_attr_op_ne,
00299 globus_rls_attr_op_gt,
00300 globus_rls_attr_op_ge,
00301 globus_rls_attr_op_lt,
00302 globus_rls_attr_op_le,
00303 globus_rls_attr_op_btw,
00304 globus_rls_attr_op_like,
00305 } globus_rls_attr_op_t;
00306
00307
00308
00309
00310 #define GLOBUS_RLS_CLIENT_ATTR_OP_ALL globus_rls_attr_op_all
00311 #define GLOBUS_RLS_CLIENT_ATTR_OP_EQ globus_rls_attr_op_eq
00312 #define GLOBUS_RLS_CLIENT_ATTR_OP_NE globus_rls_attr_op_ne
00313 #define GLOBUS_RLS_CLIENT_ATTR_OP_GT globus_rls_attr_op_gt
00314 #define GLOBUS_RLS_CLIENT_ATTR_OP_GE globus_rls_attr_op_ge
00315 #define GLOBUS_RLS_CLIENT_ATTR_OP_LT globus_rls_attr_op_lt
00316 #define GLOBUS_RLS_CLIENT_ATTR_OP_LE globus_rls_attr_op_le
00317 #define GLOBUS_RLS_CLIENT_ATTR_OP_BTW globus_rls_attr_op_btw
00318 #define GLOBUS_RLS_CLIENT_ATTR_OP_LIKE globus_rls_attr_op_like
00319
00320
00321
00322
00373 typedef struct {
00374 char *s1;
00375 char *s2;
00376 } globus_rls_string2_t;
00377
00382 typedef struct {
00383 int rc;
00384 globus_rls_string2_t str2;
00385 } globus_rls_string2_bulk_t;
00386
00397 extern globus_result_t globus_rls_client_free_list(
00398 globus_list_t *list);
00399
00400
00401
00420 extern globus_module_descriptor_t globus_rls_client_module;
00424 #define GLOBUS_RLS_CLIENT_MODULE (&globus_rls_client_module)
00425
00439 #define GLOBUS_RLS_URL_SCHEME "rls"
00440
00444 #define GLOBUS_RLS_URL_SCHEME_NOAUTH "rlsn"
00445
00449 #define GLOBUS_RLS_SERVER_DEFPORT 39281
00450
00454 #define MAXERRMSG 1024
00455
00459 typedef struct {
00460 globus_url_t url;
00461 globus_io_handle_t handle;
00462 int flags;
00463 } globus_rls_handle_t;
00464 #define FH_IOERROR 0x1
00465 #define FH_CLOSED 0x2
00466
00467
00479 void
00480 globus_rls_client_certificate(
00481 char *certfile,
00482 char *keyfile);
00483
00491 void
00492 globus_rls_client_proxy_certificate(
00493 char *proxy);
00494
00513 extern globus_result_t globus_rls_client_connect(
00514 char *url,
00515 globus_rls_handle_t **h);
00516
00528 extern globus_result_t globus_rls_client_close(
00529 globus_rls_handle_t *h);
00530
00539 extern int globus_rls_client_get_timeout();
00540
00549 extern void globus_rls_client_set_timeout(
00550 int seconds);
00551
00552
00553
00577 extern globus_result_t globus_rls_client_lrc_attr_add(
00578 globus_rls_handle_t *h,
00579 char *key,
00580 globus_rls_attribute_t *attr);
00581
00600 extern globus_result_t globus_rls_client_lrc_attr_add_bulk(
00601 globus_rls_handle_t *h,
00602 globus_list_t *attr_obj_list,
00603 globus_list_t **str2bulk_list);
00604
00624 extern globus_result_t globus_rls_client_lrc_attr_create(
00625 globus_rls_handle_t *h,
00626 char *name,
00627 globus_rls_obj_type_t objtype,
00628 globus_rls_attr_type_t type);
00629
00652 extern globus_result_t globus_rls_client_lrc_attr_delete(
00653 globus_rls_handle_t *h,
00654 char *name,
00655 globus_rls_obj_type_t objtype,
00656 globus_bool_t clearvalues);
00657
00681 extern globus_result_t globus_rls_client_lrc_attr_get(
00682 globus_rls_handle_t *h,
00683 char *name,
00684 globus_rls_obj_type_t objtype,
00685 globus_list_t **attr_list);
00686
00708 extern globus_result_t globus_rls_client_lrc_attr_modify(
00709 globus_rls_handle_t *h,
00710 char *key,
00711 globus_rls_attribute_t *attr);
00712
00731 extern globus_result_t globus_rls_client_lrc_attr_remove(
00732 globus_rls_handle_t *h,
00733 char *key,
00734 globus_rls_attribute_t *attr);
00735
00755 extern globus_result_t globus_rls_client_lrc_attr_remove_bulk(
00756 globus_rls_handle_t *h,
00757 globus_list_t *attr_obj_list,
00758 globus_list_t **str2bulk_list);
00759
00809 extern globus_result_t globus_rls_client_lrc_attr_search(
00810 globus_rls_handle_t *h,
00811 char *name,
00812 globus_rls_obj_type_t objtype,
00813 globus_rls_attr_op_t op,
00814 globus_rls_attribute_t *operand1,
00815 globus_rls_attribute_t *operand2,
00816 int *offset,
00817 int reslimit,
00818 globus_list_t **attr_obj_list);
00819
00847 extern globus_result_t globus_rls_client_lrc_attr_value_get(
00848 globus_rls_handle_t *h,
00849 char *key,
00850 char *name,
00851 globus_rls_obj_type_t objtype,
00852 globus_list_t **attr_list);
00853
00882 extern globus_result_t globus_rls_client_lrc_attr_value_get_bulk(
00883 globus_rls_handle_t *h,
00884 globus_list_t *keylist,
00885 char *name,
00886 globus_rls_obj_type_t objtype,
00887 globus_list_t **attr_obj_list);
00888
00905 extern globus_result_t globus_rls_client_lrc_add(
00906 globus_rls_handle_t *h,
00907 char *lfn,
00908 char *pfn);
00909
00927 extern globus_result_t globus_rls_client_lrc_add_bulk(
00928 globus_rls_handle_t *h,
00929 globus_list_t *str2_list,
00930 globus_list_t **str2bulk_list);
00931
00945 extern globus_result_t globus_rls_client_lrc_clear(
00946 globus_rls_handle_t *h);
00947
00964 extern globus_result_t globus_rls_client_lrc_create(
00965 globus_rls_handle_t *h,
00966 char *lfn,
00967 char *pfn);
00968
00986 extern globus_result_t globus_rls_client_lrc_create_bulk(
00987 globus_rls_handle_t *h,
00988 globus_list_t *str2_list,
00989 globus_list_t **str2bulk_list);
00990
01007 extern globus_result_t globus_rls_client_lrc_delete(
01008 globus_rls_handle_t *h,
01009 char *lfn,
01010 char *pfn);
01011
01029 extern globus_result_t globus_rls_client_lrc_delete_bulk(
01030 globus_rls_handle_t *h,
01031 globus_list_t *str2_list,
01032 globus_list_t **str2bulk_list);
01033
01051 extern globus_result_t globus_rls_client_lrc_exists(
01052 globus_rls_handle_t *h,
01053 char *key,
01054 globus_rls_obj_type_t objtype);
01055
01086 extern globus_result_t globus_rls_client_lrc_get_lfn(
01087 globus_rls_handle_t *h,
01088 char *pfn,
01089 int *offset,
01090 int reslimit,
01091 globus_list_t **str2_list);
01092
01109 extern globus_result_t globus_rls_client_lrc_get_lfn_bulk(
01110 globus_rls_handle_t *h,
01111 globus_list_t *pfnlist,
01112 globus_list_t **str2bulk_list);
01113
01150 extern globus_result_t globus_rls_client_lrc_get_lfn_wc(
01151 globus_rls_handle_t *h,
01152 char *pfn_pattern,
01153 globus_rls_pattern_t type,
01154 int *offset,
01155 int reslimit,
01156 globus_list_t **str2_list);
01157
01186 extern globus_result_t globus_rls_client_lrc_get_pfn(
01187 globus_rls_handle_t *h,
01188 char *lfn,
01189 int *offset,
01190 int reslimit,
01191 globus_list_t **str2_list);
01192
01209 extern globus_result_t globus_rls_client_lrc_get_pfn_bulk(
01210 globus_rls_handle_t *h,
01211 globus_list_t *lfnlist,
01212 globus_list_t **str2bulk_list);
01213
01249 extern globus_result_t globus_rls_client_lrc_get_pfn_wc(
01250 globus_rls_handle_t *h,
01251 char *lfn_pattern,
01252 globus_rls_pattern_t type,
01253 int *offset,
01254 int reslimit,
01255 globus_list_t **str2_list);
01256
01273 extern globus_result_t globus_rls_client_lrc_mapping_exists(
01274 globus_rls_handle_t *h,
01275 char *lfn,
01276 char *pfn);
01277
01302 extern globus_result_t globus_rls_client_lrc_rli_add(
01303 globus_rls_handle_t *h,
01304 char *rli_url,
01305 int flags,
01306 char *pattern);
01311 #define FRLI_BLOOMFILTER 0x1
01312 #define FRLI_RLI 0x2
01313
01331 extern globus_result_t globus_rls_client_lrc_rli_delete(
01332 globus_rls_handle_t *h,
01333 char *rli_url,
01334 char *pattern);
01335
01360 extern globus_result_t globus_rls_client_lrc_rli_get_part(
01361 globus_rls_handle_t *h,
01362 char *rli_url,
01363 char *pattern,
01364 globus_list_t **str2_list);
01365
01370 #define MAXURL 256
01371
01377 typedef struct {
01378 char url[MAXURL];
01379 int updateinterval;
01380 int flags;
01381 time_t lastupdate;
01382 } globus_rls_rli_info_t;
01383
01389 typedef struct {
01390 char url[MAXURL];
01391 time_t lastupdate;
01392 } globus_rls_sender_info_t;
01393
01394 #define globus_rls_lrc_info_t globus_rls_sender_info_t
01395
01396
01413 extern globus_result_t globus_rls_client_lrc_rli_info(
01414 globus_rls_handle_t *h,
01415 char *rli_url,
01416 globus_rls_rli_info_t *info);
01417
01434 extern globus_result_t globus_rls_client_lrc_rli_list(
01435 globus_rls_handle_t *h,
01436 globus_list_t **rliinfo_list);
01437
01438
01461 extern globus_result_t globus_rls_client_rli_exists(
01462 globus_rls_handle_t *h,
01463 char *key,
01464 globus_rls_obj_type_t objtype);
01465
01496 extern globus_result_t globus_rls_client_rli_get_lrc(
01497 globus_rls_handle_t *h,
01498 char *lfn,
01499 int *offset,
01500 int reslimit,
01501 globus_list_t **str2_list);
01502
01519 extern globus_result_t globus_rls_client_rli_get_lrc_bulk(
01520 globus_rls_handle_t *h,
01521 globus_list_t *lfnlist,
01522 globus_list_t **str2bulk_list);
01523
01560 extern globus_result_t globus_rls_client_rli_get_lrc_wc(
01561 globus_rls_handle_t *h,
01562 char *lfn_pattern,
01563 globus_rls_pattern_t type,
01564 int *offset,
01565 int reslimit,
01566 globus_list_t **str2_list);
01567
01584 extern globus_result_t globus_rls_client_rli_sender_list(
01585 globus_rls_handle_t *h,
01586 globus_list_t **senderinfo_list);
01587
01602 extern globus_result_t globus_rls_client_rli_lrc_list(
01603 globus_rls_handle_t *h,
01604 globus_list_t **lrcinfo_list);
01605
01622 extern globus_result_t globus_rls_client_rli_mapping_exists(
01623 globus_rls_handle_t *h,
01624 char *lfn,
01625 char *lrc);
01626
01648 extern globus_result_t globus_rls_client_rli_rli_add(
01649 globus_rls_handle_t *h,
01650 char *rli_url,
01651 char *pattern);
01652
01670 extern globus_result_t globus_rls_client_rli_rli_delete(
01671 globus_rls_handle_t *h,
01672 char *rli_url,
01673 char *pattern);
01674
01699 extern globus_result_t globus_rls_client_rli_rli_get_part(
01700 globus_rls_handle_t *h,
01701 char *rli_url,
01702 char *pattern,
01703 globus_list_t **str2_list);
01704
01721 extern globus_result_t globus_rls_client_rli_rli_list(
01722 globus_rls_handle_t *h,
01723 globus_list_t **rliinfo_list);
01724
01729 typedef enum {
01730 globus_rls_admin_cmd_ping,
01731 globus_rls_admin_cmd_quit,
01732 globus_rls_admin_cmd_ssu
01733 } globus_rls_admin_cmd_t;
01734
01735
01736
01737
01738 #define GLOBUS_RLS_ADMIN_PING globus_rls_admin_ping
01739 #define GLOBUS_RLS_ADMIN_QUIT globus_rls_admin_quit
01740 #define GLOBUS_RLS_ADMIN_SSU globus_rls_admin_ssu
01741
01742 #define MAXVERSION 16
01743
01749 typedef struct {
01750 char version[MAXVERSION];
01751 time_t uptime;
01752 int flags;
01753 int lrc_bloomfilterui;
01754 int lrc_lfnlistui;
01755 int lrc_numlfn;
01756 int lrc_numpfn;
01757 int lrc_nummap;
01758 int rli_numlfn;
01759 int rli_numlrc;
01760 int rli_numsender;
01761 int rli_nummap;
01762 } globus_rls_stats_t;
01763
01768 #define RLS_LRCSERVER 0x1
01769
01773 #define RLS_RLISERVER 0x2
01774
01778 #define RLS_RCVLFNLIST 0x4
01779
01783 #define RLS_RCVBLOOMFILTER 0x8
01784
01788 #define RLS_SNDLFNLIST 0x10
01789
01793 #define RLS_SNDBLOOMFILTER 0x20
01794
01809 extern globus_result_t globus_rls_client_admin(
01810 globus_rls_handle_t *h,
01811 globus_rls_admin_cmd_t cmd);
01812
01813
01837 extern globus_result_t globus_rls_client_get_configuration(
01838 globus_rls_handle_t *h,
01839 char *option,
01840 globus_list_t **conf_list);
01841
01858 extern globus_result_t globus_rls_client_set_configuration(
01859 globus_rls_handle_t *h,
01860 char *option,
01861 char *value);
01862
01876 extern globus_result_t globus_rls_client_stats(
01877 globus_rls_handle_t *h,
01878 globus_rls_stats_t *rlsstats);
01879
01900 extern char *globus_rls_client_attr2s(
01901 globus_rls_attribute_t *attr,
01902 char *buf,
01903 int buflen);
01904
01923 extern globus_result_t globus_rls_client_s2attr(
01924 globus_rls_attr_type_t type,
01925 char *sval,
01926 globus_rls_attribute_t *attr);
01927
01956 extern globus_result_t globus_rls_client_error_info(
01957 globus_result_t r,
01958 int *rc,
01959 char *buf,
01960 int buflen,
01961 globus_bool_t preserve);
01962
01969 extern int globus_list_len(
01970 globus_list_t *len);
01971
01991 extern char *
01992 globus_rls_errmsg(
01993 int rc,
01994 char *specificmsg,
01995 char *buf,
01996 int buflen);
01997
01998 extern int
01999 mycftime(
02000 char *s,
02001 int len,
02002 char *fmt,
02003 time_t clock);
02004 #endif