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;
00287 } globus_rls_attribute_object_t;
00288
00293 typedef enum {
00294 globus_rls_attr_op_all,
00295 globus_rls_attr_op_eq,
00296 globus_rls_attr_op_ne,
00297 globus_rls_attr_op_gt,
00298 globus_rls_attr_op_ge,
00299 globus_rls_attr_op_lt,
00300 globus_rls_attr_op_le,
00301 globus_rls_attr_op_btw,
00302 globus_rls_attr_op_like,
00303 } globus_rls_attr_op_t;
00304
00305
00306
00307
00308 #define GLOBUS_RLS_CLIENT_ATTR_OP_ALL globus_rls_attr_op_all
00309 #define GLOBUS_RLS_CLIENT_ATTR_OP_EQ globus_rls_attr_op_eq
00310 #define GLOBUS_RLS_CLIENT_ATTR_OP_NE globus_rls_attr_op_ne
00311 #define GLOBUS_RLS_CLIENT_ATTR_OP_GT globus_rls_attr_op_gt
00312 #define GLOBUS_RLS_CLIENT_ATTR_OP_GE globus_rls_attr_op_ge
00313 #define GLOBUS_RLS_CLIENT_ATTR_OP_LT globus_rls_attr_op_lt
00314 #define GLOBUS_RLS_CLIENT_ATTR_OP_LE globus_rls_attr_op_le
00315 #define GLOBUS_RLS_CLIENT_ATTR_OP_BTW globus_rls_attr_op_btw
00316 #define GLOBUS_RLS_CLIENT_ATTR_OP_LIKE globus_rls_attr_op_like
00317
00318
00319
00320
00371 typedef struct {
00372 char *s1;
00373 char *s2;
00374 } globus_rls_string2_t;
00375
00380 typedef struct {
00381 int rc;
00382 globus_rls_string2_t str2;
00383 } globus_rls_string2_bulk_t;
00384
00395 extern globus_result_t globus_rls_client_free_list(
00396 globus_list_t *list);
00397
00398
00399
00418 extern globus_module_descriptor_t globus_rls_client_module;
00422 #define GLOBUS_RLS_CLIENT_MODULE (&globus_rls_client_module)
00423
00437 #define GLOBUS_RLS_URL_SCHEME "rls"
00438
00442 #define GLOBUS_RLS_URL_SCHEME_NOAUTH "rlsn"
00443
00447 #define GLOBUS_RLS_SERVER_DEFPORT 39281
00448
00452 #define MAXERRMSG 1024
00453
00457 typedef struct {
00458 globus_url_t url;
00459 globus_io_handle_t handle;
00460 int flags;
00461 } globus_rls_handle_t;
00462 #define FH_IOERROR 0x1
00463 #define FH_CLOSED 0x2
00464
00465
00477 void
00478 globus_rls_client_certificate(
00479 char *certfile,
00480 char *keyfile);
00481
00489 void
00490 globus_rls_client_proxy_certificate(
00491 char *proxy);
00492
00511 extern globus_result_t globus_rls_client_connect(
00512 char *url,
00513 globus_rls_handle_t **h);
00514
00526 extern globus_result_t globus_rls_client_close(
00527 globus_rls_handle_t *h);
00528
00537 extern int globus_rls_client_get_timeout();
00538
00547 extern void globus_rls_client_set_timeout(
00548 int seconds);
00549
00550
00551
00575 extern globus_result_t globus_rls_client_lrc_attr_add(
00576 globus_rls_handle_t *h,
00577 char *key,
00578 globus_rls_attribute_t *attr);
00579
00599 extern globus_result_t globus_rls_client_lrc_attr_create(
00600 globus_rls_handle_t *h,
00601 char *name,
00602 globus_rls_obj_type_t objtype,
00603 globus_rls_attr_type_t type);
00604
00627 extern globus_result_t globus_rls_client_lrc_attr_delete(
00628 globus_rls_handle_t *h,
00629 char *name,
00630 globus_rls_obj_type_t objtype,
00631 globus_bool_t clearvalues);
00632
00656 extern globus_result_t globus_rls_client_lrc_attr_get(
00657 globus_rls_handle_t *h,
00658 char *name,
00659 globus_rls_obj_type_t objtype,
00660 globus_list_t **attr_list);
00661
00683 extern globus_result_t globus_rls_client_lrc_attr_modify(
00684 globus_rls_handle_t *h,
00685 char *key,
00686 globus_rls_attribute_t *attr);
00687
00706 extern globus_result_t globus_rls_client_lrc_attr_remove(
00707 globus_rls_handle_t *h,
00708 char *key,
00709 globus_rls_attribute_t *attr);
00710
00760 extern globus_result_t globus_rls_client_lrc_attr_search(
00761 globus_rls_handle_t *h,
00762 char *name,
00763 globus_rls_obj_type_t objtype,
00764 globus_rls_attr_op_t op,
00765 globus_rls_attribute_t *operand1,
00766 globus_rls_attribute_t *operand2,
00767 int *offset,
00768 int reslimit,
00769 globus_list_t **attr_obj_list);
00770
00798 extern globus_result_t globus_rls_client_lrc_attr_value_get(
00799 globus_rls_handle_t *h,
00800 char *key,
00801 char *name,
00802 globus_rls_obj_type_t objtype,
00803 globus_list_t **attr_list);
00804
00821 extern globus_result_t globus_rls_client_lrc_add(
00822 globus_rls_handle_t *h,
00823 char *lfn,
00824 char *pfn);
00825
00843 extern globus_result_t globus_rls_client_lrc_add_bulk(
00844 globus_rls_handle_t *h,
00845 globus_list_t *str2_list,
00846 globus_list_t **str2bulk_list);
00847
00861 extern globus_result_t globus_rls_client_lrc_clear(
00862 globus_rls_handle_t *h);
00863
00880 extern globus_result_t globus_rls_client_lrc_create(
00881 globus_rls_handle_t *h,
00882 char *lfn,
00883 char *pfn);
00884
00902 extern globus_result_t globus_rls_client_lrc_create_bulk(
00903 globus_rls_handle_t *h,
00904 globus_list_t *str2_list,
00905 globus_list_t **str2bulk_list);
00906
00923 extern globus_result_t globus_rls_client_lrc_delete(
00924 globus_rls_handle_t *h,
00925 char *lfn,
00926 char *pfn);
00927
00945 extern globus_result_t globus_rls_client_lrc_delete_bulk(
00946 globus_rls_handle_t *h,
00947 globus_list_t *str2_list,
00948 globus_list_t **str2bulk_list);
00949
00967 extern globus_result_t globus_rls_client_lrc_exists(
00968 globus_rls_handle_t *h,
00969 char *key,
00970 globus_rls_obj_type_t objtype);
00971
01002 extern globus_result_t globus_rls_client_lrc_get_lfn(
01003 globus_rls_handle_t *h,
01004 char *pfn,
01005 int *offset,
01006 int reslimit,
01007 globus_list_t **str2_list);
01008
01025 extern globus_result_t globus_rls_client_lrc_get_lfn_bulk(
01026 globus_rls_handle_t *h,
01027 globus_list_t *pfnlist,
01028 globus_list_t **str2bulk_list);
01029
01066 extern globus_result_t globus_rls_client_lrc_get_lfn_wc(
01067 globus_rls_handle_t *h,
01068 char *pfn_pattern,
01069 globus_rls_pattern_t type,
01070 int *offset,
01071 int reslimit,
01072 globus_list_t **str2_list);
01073
01102 extern globus_result_t globus_rls_client_lrc_get_pfn(
01103 globus_rls_handle_t *h,
01104 char *lfn,
01105 int *offset,
01106 int reslimit,
01107 globus_list_t **str2_list);
01108
01125 extern globus_result_t globus_rls_client_lrc_get_pfn_bulk(
01126 globus_rls_handle_t *h,
01127 globus_list_t *lfnlist,
01128 globus_list_t **str2bulk_list);
01129
01165 extern globus_result_t globus_rls_client_lrc_get_pfn_wc(
01166 globus_rls_handle_t *h,
01167 char *lfn_pattern,
01168 globus_rls_pattern_t type,
01169 int *offset,
01170 int reslimit,
01171 globus_list_t **str2_list);
01172
01189 extern globus_result_t globus_rls_client_lrc_mapping_exists(
01190 globus_rls_handle_t *h,
01191 char *lfn,
01192 char *pfn);
01193
01218 extern globus_result_t globus_rls_client_lrc_rli_add(
01219 globus_rls_handle_t *h,
01220 char *rli_url,
01221 int flags,
01222 char *pattern);
01227 #define FRLI_BLOOMFILTER 0x1
01228
01246 extern globus_result_t globus_rls_client_lrc_rli_delete(
01247 globus_rls_handle_t *h,
01248 char *rli_url,
01249 char *pattern);
01250
01275 extern globus_result_t globus_rls_client_lrc_rli_get_part(
01276 globus_rls_handle_t *h,
01277 char *rli_url,
01278 char *pattern,
01279 globus_list_t **str2_list);
01280
01285 #define MAXURL 256
01286
01292 typedef struct {
01293 char url[MAXURL];
01294 int updateinterval;
01295 int flags;
01296 time_t lastupdate;
01297 } globus_rls_rli_info_t;
01298
01303 typedef struct {
01304 char url[MAXURL];
01305 time_t lastupdate;
01306 } globus_rls_lrc_info_t;
01307
01308
01325 extern globus_result_t globus_rls_client_lrc_rli_info(
01326 globus_rls_handle_t *h,
01327 char *rli_url,
01328 globus_rls_rli_info_t *info);
01329
01346 extern globus_result_t globus_rls_client_lrc_rli_list(
01347 globus_rls_handle_t *h,
01348 globus_list_t **rliinfo_list);
01349
01350
01373 extern globus_result_t globus_rls_client_rli_exists(
01374 globus_rls_handle_t *h,
01375 char *key,
01376 globus_rls_obj_type_t objtype);
01377
01408 extern globus_result_t globus_rls_client_rli_get_lrc(
01409 globus_rls_handle_t *h,
01410 char *lfn,
01411 int *offset,
01412 int reslimit,
01413 globus_list_t **str2_list);
01414
01431 extern globus_result_t globus_rls_client_rli_get_lrc_bulk(
01432 globus_rls_handle_t *h,
01433 globus_list_t *lfnlist,
01434 globus_list_t **str2bulk_list);
01435
01472 extern globus_result_t globus_rls_client_rli_get_lrc_wc(
01473 globus_rls_handle_t *h,
01474 char *lfn_pattern,
01475 globus_rls_pattern_t type,
01476 int *offset,
01477 int reslimit,
01478 globus_list_t **str2_list);
01479
01496 extern globus_result_t globus_rls_client_rli_lrc_list(
01497 globus_rls_handle_t *h,
01498 globus_list_t **lrcinfo_list);
01499
01516 extern globus_result_t globus_rls_client_rli_mapping_exists(
01517 globus_rls_handle_t *h,
01518 char *lfn,
01519 char *lrc);
01520
01521
01526 typedef enum {
01527 globus_rls_admin_cmd_ping,
01528 globus_rls_admin_cmd_quit,
01529 globus_rls_admin_cmd_ssu
01530 } globus_rls_admin_cmd_t;
01531
01532
01533
01534
01535 #define GLOBUS_RLS_ADMIN_PING globus_rls_admin_ping
01536 #define GLOBUS_RLS_ADMIN_QUIT globus_rls_admin_quit
01537 #define GLOBUS_RLS_ADMIN_SSU globus_rls_admin_ssu
01538
01539 #define MAXVERSION 16
01540
01546 typedef struct {
01547 char version[MAXVERSION];
01548 time_t uptime;
01549 int flags;
01550 int lrc_bloomfilterui;
01551 int lrc_lfnlistui;
01552 int lrc_numlfn;
01553 int lrc_numpfn;
01554 int lrc_nummap;
01555 int rli_numlfn;
01556 int rli_numlrc;
01557 int rli_nummap;
01558 } globus_rls_stats_t;
01559
01564 #define RLS_LRCSERVER 0x1
01565
01569 #define RLS_RLISERVER 0x2
01570
01574 #define RLS_RCVLFNLIST 0x4
01575
01579 #define RLS_RCVBLOOMFILTER 0x8
01580
01584 #define RLS_SNDLFNLIST 0x10
01585
01589 #define RLS_SNDBLOOMFILTER 0x20
01590
01605 extern globus_result_t globus_rls_client_admin(
01606 globus_rls_handle_t *h,
01607 globus_rls_admin_cmd_t cmd);
01608
01609
01633 extern globus_result_t globus_rls_client_get_configuration(
01634 globus_rls_handle_t *h,
01635 char *option,
01636 globus_list_t **conf_list);
01637
01654 extern globus_result_t globus_rls_client_set_configuration(
01655 globus_rls_handle_t *h,
01656 char *option,
01657 char *value);
01658
01672 extern globus_result_t globus_rls_client_stats(
01673 globus_rls_handle_t *h,
01674 globus_rls_stats_t *rlsstats);
01675
01696 extern char *globus_rls_client_attr2s(
01697 globus_rls_attribute_t *attr,
01698 char *buf,
01699 int buflen);
01700
01719 extern globus_result_t globus_rls_client_s2attr(
01720 globus_rls_attr_type_t type,
01721 char *sval,
01722 globus_rls_attribute_t *attr);
01723
01752 extern globus_result_t globus_rls_client_error_info(
01753 globus_result_t r,
01754 int *rc,
01755 char *buf,
01756 int buflen,
01757 globus_bool_t preserve);
01758
01765 extern int globus_list_len(
01766 globus_list_t *len);
01767
01787 extern char *
01788 globus_rls_errmsg(
01789 int rc,
01790 char *specificmsg,
01791 char *buf,
01792 int buflen);
01793
01794 extern int
01795 mycftime(
01796 char *s,
01797 int len,
01798 char *fmt,
01799 time_t clock);
01800 #endif