[xio-commit] CVS update: MODIFIED: src, globus_xio_util.h ...
Mike Link
commit at globus.org
Fri Nov 9 15:57:48 CST 2007
User: mlink
Date: 07/11/09 15:57:48
Modified: src globus_xio.h globus_xio_attr.c globus_xio_types.h
globus_xio_util.h
Log:
merge of netlogger driver branch
reorg stack setting
add disk stack setting
rename udt_ref driver to udt
Revision Changes Path
1.41 +29 -0 xio/src/globus_xio.h
http://viewcvs.globus.org/viewcvs.cgi/xio/src/globus_xio.h.diff?r1=1.40&r2=1.41
(In the diff below, changes in quantity of whitespace are not shown.)
Index: globus_xio.h
===================================================================
RCS file: /home/globdev/CVS/globus-packages/xio/src/globus_xio.h,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -b -r1.40 -r1.41
--- globus_xio.h 19 Jan 2006 05:57:35 -0000 1.40
+++ globus_xio.h 9 Nov 2007 21:57:47 -0000 1.41
@@ -970,6 +970,35 @@
void * user_arg);
*/
+
+globus_xio_driver_list_ent_t *
+globus_xio_driver_list_find_driver(
+ globus_list_t * driver_list,
+ const char * driver_name);
+
+void
+globus_xio_driver_list_destroy(
+ globus_list_t * driver_list,
+ globus_bool_t unload);
+
+globus_result_t
+globus_xio_driver_list_to_stack_attr(
+ globus_list_t * driver_list,
+ globus_xio_stack_t stack,
+ globus_xio_attr_t attr);
+
+globus_result_t
+globus_xio_driver_list_from_string(
+ char * driver_string,
+ globus_list_t ** driver_list,
+ globus_hashtable_t * safe_table);
+
+globus_result_t
+globus_xio_driver_safe_table_from_string(
+ char * driver_string,
+ globus_hashtable_t * safe_table);
+
+
extern globus_module_descriptor_t globus_i_xio_module;
#define GLOBUS_XIO_MODULE &globus_i_xio_module
1.56 +293 -0 xio/src/globus_xio_attr.c
http://viewcvs.globus.org/viewcvs.cgi/xio/src/globus_xio_attr.c.diff?r1=1.55&r2=1.56
(In the diff below, changes in quantity of whitespace are not shown.)
Index: globus_xio_attr.c
===================================================================
RCS file: /home/globdev/CVS/globus-packages/xio/src/globus_xio_attr.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- globus_xio_attr.c 9 Dec 2006 01:06:51 -0000 1.55
+++ globus_xio_attr.c 9 Nov 2007 21:57:47 -0000 1.56
@@ -91,6 +91,299 @@
return res;
}
+globus_xio_driver_list_ent_t *
+globus_xio_driver_list_find_driver(
+ globus_list_t * driver_list,
+ const char * driver_name)
+{
+ globus_xio_driver_list_ent_t * ent;
+ globus_list_t * list;
+
+
+ for(list = driver_list;
+ !globus_list_empty(list);
+ list = globus_list_rest(list))
+ {
+ ent = (globus_xio_driver_list_ent_t *) globus_list_first(list);
+
+ if(strcmp(ent->driver_name, driver_name) == 0)
+ {
+ return ent;
+ }
+ }
+
+ return NULL;
+}
+
+void
+globus_xio_driver_list_destroy(
+ globus_list_t * driver_list,
+ globus_bool_t unload)
+{
+ globus_xio_driver_list_ent_t * ent;
+ globus_list_t * list;
+
+ for(list = driver_list;
+ !globus_list_empty(list);
+ list = globus_list_rest(list))
+ {
+ ent = (globus_xio_driver_list_ent_t *) globus_list_first(list);
+
+ if(ent->driver_name != NULL)
+ {
+ globus_free(ent->driver_name);
+ }
+ if(ent->opts != NULL)
+ {
+ globus_free(ent->opts);
+ }
+ if(unload)
+ {
+ globus_xio_driver_unload(ent->driver);
+ }
+ globus_free(ent);
+ }
+}
+
+globus_result_t
+globus_xio_driver_list_to_stack_attr(
+ globus_list_t * driver_list,
+ globus_xio_stack_t stack,
+ globus_xio_attr_t attr)
+{
+ globus_xio_driver_list_ent_t * ent;
+ globus_list_t * list;
+
+ for(list = driver_list;
+ !globus_list_empty(list);
+ list = globus_list_rest(list))
+ {
+ ent = (globus_xio_driver_list_ent_t *) globus_list_first(list);
+
+ globus_xio_stack_push_driver(stack, ent->driver);
+
+ if(ent->opts != NULL)
+ {
+ /* ignore error */
+ globus_xio_attr_cntl(
+ attr,
+ ent->driver,
+ GLOBUS_XIO_SET_STRING_OPTIONS,
+ ent->opts);
+ }
+ }
+
+ return GLOBUS_SUCCESS;
+}
+
+globus_result_t
+globus_xio_driver_safe_table_from_string(
+ char * driver_string,
+ globus_hashtable_t * safe_table)
+{
+ globus_result_t result;
+ globus_xio_driver_list_ent_t * d_ent;
+ globus_list_t * driver_list = NULL;
+
+ /* take advantage of xio function to load drivers */
+
+ result = globus_xio_driver_list_from_string(
+ driver_string, &driver_list, NULL);
+ if(result != GLOBUS_SUCCESS)
+ {
+ goto error;
+ }
+
+ while(!globus_list_empty(driver_list))
+ {
+ d_ent = (globus_xio_driver_list_ent_t *)
+ globus_list_remove(&driver_list, driver_list);
+
+ globus_hashtable_insert(safe_table, d_ent->driver_name, d_ent);
+ }
+
+ return GLOBUS_SUCCESS;
+
+error:
+
+ return result;
+}
+
+globus_result_t
+globus_xio_driver_list_create_ent(
+ const char * driver_desc,
+ globus_xio_driver_t driver_in,
+ globus_bool_t load,
+ globus_xio_driver_list_ent_t ** ent_out)
+{
+ globus_xio_driver_t driver;
+ globus_xio_driver_list_ent_t * list_ent;
+ char * driver_name;
+ char * opts;
+ globus_result_t result;
+
+ driver_name = strdup(driver_desc);
+ opts = strchr(driver_name, ':');
+ if(opts != NULL)
+ {
+ *opts = '\0';
+ opts++;
+ }
+
+ if(load)
+ {
+ result = globus_xio_driver_load(driver_name, &driver);
+ if(result != GLOBUS_SUCCESS)
+ {
+ goto error_load;
+ }
+ }
+ else
+ {
+ driver = driver_in;
+ }
+
+ list_ent = (globus_xio_driver_list_ent_t *)
+ globus_calloc(1, sizeof(globus_xio_driver_list_ent_t));
+ list_ent->opts = globus_libc_strdup(opts);
+ list_ent->driver = driver;
+ list_ent->driver_name = driver_name;
+ list_ent->loaded = load;
+
+ *ent_out = list_ent;
+
+ return GLOBUS_SUCCESS;
+
+error_load:
+ globus_free(driver_name);
+ return result;
+}
+
+
+/* driver list stuff */
+globus_result_t
+globus_xio_driver_list_from_string(
+ char * driver_string,
+ globus_list_t ** driver_list,
+ globus_hashtable_t * safe_table)
+{
+ globus_result_t result;
+ globus_bool_t done = GLOBUS_FALSE;
+ globus_bool_t loaded;
+ char * opts;
+ char * ptr;
+ char * driver_str;
+ char * driver_name;
+ char * tmp_str;
+ globus_xio_driver_t driver;
+ globus_list_t * list = NULL;
+ globus_xio_driver_list_ent_t * list_ent;
+ GlobusXIOName(globus_xio_driver_list_from_string);
+
+ *driver_list = NULL;
+
+ if(driver_string == NULL)
+ {
+ result = GlobusXIOErrorParameter("driver_string");
+ goto error_param;
+ }
+
+ driver_str = globus_libc_strdup(driver_string);
+ tmp_str = driver_str;
+ while(!done)
+ {
+ loaded = GLOBUS_FALSE;
+ driver_name = tmp_str;
+ ptr = strchr(driver_name, ',');
+ if(ptr != NULL)
+ {
+ *ptr = '\0';
+ tmp_str = ptr+1;
+ }
+ else
+ {
+ done = GLOBUS_TRUE;
+ }
+ opts = strchr(driver_name, ':');
+ if(opts != NULL)
+ {
+ *opts = '\0';
+ opts++;
+ }
+
+ /* check against the safe list */
+ if(safe_table != NULL)
+ {
+ char * err_str;
+
+ list_ent = (globus_xio_driver_list_ent_t *)
+ globus_hashtable_lookup(safe_table, driver_name);
+
+ if(list_ent == NULL)
+ {
+ err_str = globus_common_create_string(
+ "%s driver not whitelisted", driver_name);
+ result = GlobusXIOErrorString(err_str);
+ globus_free(err_str);
+ goto error_load;
+ }
+ driver = list_ent->driver;
+ }
+ else
+ {
+ result = globus_xio_driver_load(driver_name, &driver);
+ if(result != GLOBUS_SUCCESS)
+ {
+ goto error_load;
+ }
+
+ loaded = GLOBUS_TRUE;
+ }
+
+ list_ent = (globus_xio_driver_list_ent_t *)
+ globus_calloc(1, sizeof(globus_xio_driver_list_ent_t));
+ list_ent->opts = globus_libc_strdup(opts);
+ list_ent->driver = driver;
+ list_ent->driver_name = globus_libc_strdup(driver_name);
+ list_ent->loaded = loaded;
+
+ globus_list_insert(&list, list_ent);
+ }
+
+ globus_free(driver_str);
+
+ /* reverse list */
+ while(!globus_list_empty(list))
+ {
+ globus_list_insert(driver_list, globus_list_first(list));
+ globus_list_remove(&list, list);
+ }
+
+ return GLOBUS_SUCCESS;
+
+error_load:
+ globus_free(driver_str);
+ while(!globus_list_empty(list))
+ {
+ list_ent = (globus_xio_driver_list_ent_t *)
+ globus_list_remove(&list, list);
+
+ if(list_ent->loaded)
+ {
+ globus_xio_driver_unload(list_ent->driver);
+ }
+ globus_free(list_ent->driver_name);
+ if(list_ent->opts != NULL)
+ {
+ globus_free(list_ent->opts);
+ }
+ globus_free(list_ent);
+ }
+error_param:
+ return result;
+}
+
+
/*
*
*/
1.32 +11 -1 xio/src/globus_xio_types.h
http://viewcvs.globus.org/viewcvs.cgi/xio/src/globus_xio_types.h.diff?r1=1.31&r2=1.32
(In the diff below, changes in quantity of whitespace are not shown.)
Index: globus_xio_types.h
===================================================================
RCS file: /home/globdev/CVS/globus-packages/xio/src/globus_xio_types.h,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -b -r1.31 -r1.32
--- globus_xio_types.h 25 Jul 2006 15:42:33 -0000 1.31
+++ globus_xio_types.h 9 Nov 2007 21:57:47 -0000 1.32
@@ -93,7 +93,8 @@
GLOBUS_XIO_ERROR_NOT_ACTIVATED,
GLOBUS_XIO_ERROR_UNLOADED,
GLOBUS_XIO_ERROR_TIMEOUT,
- GLOBUS_XIO_ERROR_PARSE
+ GLOBUS_XIO_ERROR_PARSE,
+ GLOBUS_XIO_ERROR_STRING
} globus_xio_error_type_t;
@@ -239,6 +240,15 @@
} globus_xio_contact_t;
+typedef struct globus_xio_driver_list_ent_s
+{
+ globus_xio_driver_t driver;
+ char * driver_name;
+ char * opts;
+ void * user_arg;
+ globus_bool_t loaded;
+}globus_xio_driver_list_ent_t;
+
EXTERN_C_END
#endif
1.33 +14 -1 xio/src/globus_xio_util.h
http://viewcvs.globus.org/viewcvs.cgi/xio/src/globus_xio_util.h.diff?r1=1.32&r2=1.33
(In the diff below, changes in quantity of whitespace are not shown.)
Index: globus_xio_util.h
===================================================================
RCS file: /home/globdev/CVS/globus-packages/xio/src/globus_xio_util.h,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- globus_xio_util.h 25 Jul 2006 15:42:33 -0000 1.32
+++ globus_xio_util.h 9 Nov 2007 21:57:47 -0000 1.33
@@ -96,6 +96,19 @@
#define GlobusXIOName(func) static const char * _xio_name = #func
#endif
+#define GlobusXIOErrorString(_str) \
+ globus_error_put(GlobusXIOErrorObjString(_str))
+
+#define GlobusXIOErrorObjString(_str) \
+ globus_error_construct_error( \
+ GLOBUS_XIO_MODULE, \
+ GLOBUS_NULL, \
+ GLOBUS_XIO_ERROR_STRING, \
+ __FILE__, \
+ _xio_name, \
+ __LINE__, \
+ _XIOSL("XIO error: %s"), (_str))
+
#define GlobusXIOErrorCanceled() \
globus_error_put(GlobusXIOErrorObjCanceled())
More information about the xio-commit
mailing list