[xio-commit] CVS update: MODIFIED: netlog, globus_xio_netlogger.h ...

Mike Link commit at globus.org
Fri Nov 9 15:57:46 CST 2007


  User: mlink   
  Date: 07/11/09 15:57:46

  Modified:    drivers/netlog Makefile.am globus_xio_netlogger.c
                        globus_xio_netlogger.h
  Added:       drivers/netlog globus_ftp_client_nl_plugin.c
  Log:
  merge of netlogger driver branch
  reorg stack setting
  add disk stack setting
  rename udt_ref driver to udt
  
  Revision  Changes    Path
  1.5       +11 -3     xio/drivers/netlog/Makefile.am
  
  http://viewcvs.globus.org/viewcvs.cgi/xio/drivers/netlog/Makefile.am.diff?r1=1.4&r2=1.5
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Makefile.am
  ===================================================================
  RCS file: /home/globdev/CVS/globus-packages/xio/drivers/netlog/Makefile.am,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -b -r1.4 -r1.5
  --- Makefile.am	22 Oct 2007 17:20:28 -0000	1.4
  +++ Makefile.am	9 Nov 2007 21:57:46 -0000	1.5
  @@ -12,16 +12,24 @@
   
   INCLUDES = $(GPT_INCLUDES) -I $(NETLOGGER_PATH)/include
   
  -lib_LTLIBRARIES = libglobus_xio_netlogger_driver_$(GLOBUS_FLAVOR_NAME).la
  +lib_LTLIBRARIES = libglobus_xio_netlogger_driver_$(GLOBUS_FLAVOR_NAME).la \
  +               libclient_netlogger_plugin_$(GLOBUS_FLAVOR_NAME).la
  +
  +libclient_netlogger_plugin___GLOBUS_FLAVOR_NAME__la_LIBADD = \
  +    @GPT_LIB_LINKS@  $(NETLOGGER_PATH)/lib/libnl.a
  +libclient_netlogger_plugin___GLOBUS_FLAVOR_NAME__la_SOURCES = \
  +    globus_ftp_client_nl_plugin.c
  +libclient_netlogger_plugin___GLOBUS_FLAVOR_NAME__la_LDFLAGS = \
  +	@GPT_LDFLAGS@ -module -rpath $(GLOBUS_LOCATION)/lib -rpath $(NETLOGGER_PATH)/lib
  +
   
   libglobus_xio_netlogger_driver___GLOBUS_FLAVOR_NAME__la_LIBADD = \
  -	@GPT_LIB_LINKS@ $(NETLOGGER_PATH)/lib/libnl.la 
  +	@GPT_LIB_LINKS@ $(NETLOGGER_PATH)/lib/libnl.a
   libglobus_xio_netlogger_driver___GLOBUS_FLAVOR_NAME__la_SOURCES = \
   	globus_xio_netlogger.c
   libglobus_xio_netlogger_driver___GLOBUS_FLAVOR_NAME__la_LDFLAGS = \
   	@GPT_LDFLAGS@ -module -rpath $(GLOBUS_LOCATION)/lib -rpath $(NETLOGGER_PATH)/lib
   
  -
   EXTRA_DIST = version.h.in
   
   include $(top_srcdir)/globus_automake_post
  
  
  
  1.5       +258 -30   xio/drivers/netlog/globus_xio_netlogger.c
  
  http://viewcvs.globus.org/viewcvs.cgi/xio/drivers/netlog/globus_xio_netlogger.c.diff?r1=1.4&r2=1.5
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: globus_xio_netlogger.c
  ===================================================================
  RCS file: /home/globdev/CVS/globus-packages/xio/drivers/netlog/globus_xio_netlogger.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -b -r1.4 -r1.5
  --- globus_xio_netlogger.c	22 Oct 2007 17:20:28 -0000	1.4
  +++ globus_xio_netlogger.c	9 Nov 2007 21:57:46 -0000	1.5
  @@ -17,6 +17,8 @@
   #include "nlsumm.h"
   #include "nltransfer.h"
   
  +#define NL_COOKIE   "NL: uuid="
  +
   #define GlobusXIONetloggerError(_r)                                         \
       globus_error_put(GlobusXIONetloggerErrorObj(_r))
   
  @@ -58,12 +60,25 @@
       GLOBUS_L_XIO_NETLOGGER_DEBUG_CNTLS                = 4
   };
   
  +enum globus_l_xio_netlogger_log_levels
  +{
  +    GLOBUS_L_XIO_NETLOGGER_LOG_DEFAULT              = 0x1,
  +    GLOBUS_L_XIO_NETLOGGER_LOG_BN                   = 0x2,
  +    GLOBUS_L_XIO_NETLOGGER_INTERVAL                 = 0x4,
  +    GLOBUS_L_XIO_NETLOGGER_FULL                     = 0x8
  +};
  +
  +
  +static NL_log_T                        xio_l_nl_log;
  +static NL_summ_T                       xio_l_nl_summ;
  +
   typedef struct xio_l_netlogger_handle_s
   {
       int                                 block_id;
       int                                 log_flag;
       char *                              filename;
       char *                              id;
  +    char *                              trans_uuid;
       char *                              type;
   
       NL_transfer_op_t                    read_event;
  @@ -87,8 +102,19 @@
   
       globus_size_t                       read_buflen;
       globus_size_t                       write_buflen;
  +
  +    int                                 log_level;
  +    int                                 interval;
   } xio_l_netlogger_handle_t;
   
  +typedef struct xio_l_nl_handle_ent_s
  +{
  +    NL_log_T                            nl_log;
  +    NL_summ_T                           nl_summ;
  +    char *                              uuid;
  +    int                                 ref;
  +} xio_l_nl_handle_ent_t;
  +
   static
   globus_result_t
   globus_l_xio_netlogger_attr_init(
  @@ -96,11 +122,19 @@
   
   xio_l_netlogger_handle_t *     globus_l_xio_netlogger_default_handle = NULL;
   
  +static globus_hashtable_t               nl_l_handle_table;
  +static globus_mutex_t                   xio_l_nl_mutex;
  +
   static
   xio_l_netlogger_handle_t *
   xio_l_netlogger_create_handle(
       xio_l_netlogger_handle_t *          handle)
   {
  +    int                                 level;
  +    globus_bool_t                       use_summ;
  +    xio_l_nl_handle_ent_t *             ent;
  +    int                                 rc;
  +    globus_uuid_t                       uuid;
       char *                              hostname;
       GlobusXIOName(xio_l_netlogger_create_handle);
   
  @@ -127,29 +161,135 @@
       handle->write_stop_event = globus_common_create_string(
           "xio.%s.write.stop", handle->type);
   
  -    handle->nl_level = NL_LVL_DEBUG;
  -    handle->nl_log = NL_open(handle->filename);
  -/*    NL_set_summ(handle->nl_log, NL_summ(NULL)); */
  -    NL_set_level(handle->nl_log, NL_LVL_INFO);
  -
  -    NL_transfer_init(handle->nl_summ, 0, NL_LVL_DEBUG);
  -    NL_summ_add_log(handle->nl_summ, handle->nl_log);
  +    handle->nl_level = NL_LVL_INFO;
   
  +    if(handle->filename != NULL)
  +    {
  +        handle->nl_log = NL_open(NULL);
  +    }
       hostname = NL_get_ipaddr(); /* defined in nl_log.h */
       if(hostname == NULL)
       {
           hostname = strdup("0.0.0.0");
       }
   
  +    use_summ = GLOBUS_FALSE;
  +    /* determine level */
  +    if(handle->log_level == GLOBUS_L_XIO_NETLOGGER_LOG_DEFAULT)
  +    {
  +        level = NL_LVL_INFO;
  +    }
  +    else if(handle->log_level == GLOBUS_L_XIO_NETLOGGER_FULL)
  +    {
  +        level = NL_LVL_DEBUG2;
  +    }
  +    else
  +    {
  +        if(handle->log_level & GLOBUS_L_XIO_NETLOGGER_FULL)
  +        {
  +            level = NL_LVL_DEBUG2;
  +        }
  +        else
  +        {
  +            level = NL_LVL_DEBUG;
  +        }
  +
  +        use_summ = GLOBUS_TRUE;
  +        if(!(handle->log_level & GLOBUS_L_XIO_NETLOGGER_LOG_DEFAULT))
  +        {
  +             handle->nl_level = NL_LVL_USER;
  +        }
  +    }
  +
  +    /* if the user didnt get a id create one, and use the defaul handle */
  +    if(handle->id == NULL)
  +    {
  +        rc = globus_uuid_create(&uuid);
  +        if(rc == 0)
  +        {
  +            handle->id = strdup(uuid.text);
  +        }
  +        else
  +        {
  +            handle->id = strdup("default");
  +        }
  +
  +        if(handle->nl_log == NULL)
  +        {
  +            handle->nl_log = xio_l_nl_log;
  +        }
  +        if(handle->nl_summ == NULL)
  +        {
  +            handle->nl_summ = xio_l_nl_summ;
  +        }
  +        NL_set_level(handle->nl_log, NL_LVL_DEBUG);
  +    }
  +    /* if they did set an id, check the table for it, and create a new
  +        one if needed */
  +    else
  +    {
  +        ent = (xio_l_nl_handle_ent_t *) globus_hashtable_lookup(
  +            &nl_l_handle_table, handle->id);
  +
  +        if(ent == NULL)
  +        {
  +            ent = (xio_l_nl_handle_ent_t *)
  +                globus_calloc(1, sizeof(xio_l_nl_handle_ent_t));
  +            ent->nl_log = NL_open(NULL);
  +            if(ent->nl_log == NULL)
  +            {
  +                goto error_log;
  +            }
  +            NL_set_level(ent->nl_log, level);
  +            if(use_summ)
  +            {
  +                ent->nl_summ =  NL_summ();
  +                if(ent->nl_summ == NULL)
  +                {
  +                    goto error_summ;
  +                }
  +                NL_summ_set_shared_output(ent->nl_summ, ent->nl_log);
  +                rc = NL_transfer_init(
  +                    ent->nl_summ, handle->interval, NL_LVL_DEBUG);
  +                if(rc != 0)
  +                {
  +                    goto error_summ;
  +                }
  +                if(handle->log_level & GLOBUS_L_XIO_NETLOGGER_FULL)
  +                {
  +                     NL_transfer_set_passthrough(ent->nl_summ);
  +                }
  +
  +                rc = NL_summ_add_log(ent->nl_summ, ent->nl_log);
  +                if(rc != 0)
  +                {
  +                    goto error_summ;
  +                }
  +            }
  +            ent->uuid = strdup(handle->id);
  +
  +            globus_hashtable_insert(&nl_l_handle_table, ent->uuid, ent);
  +        }
  +
  +        ent->ref++;
  +        handle->nl_log = ent->nl_log;
  +        handle->nl_summ = ent->nl_summ;
  +    }
  +
   /*    NL_open(handle->nl_log, 0, handle->filename);  */
       NL_set_const(handle->nl_log, 0, "HOST:s", hostname);
  -    NL_set_level(handle->nl_log, NL_LVL_INFO);
   
       handle->read_event = NL_TRANSFER_NET_READ;
       handle->write_event = NL_TRANSFER_NET_WRITE;
   
       GlobusXIONetloggerDebugExit();
       return handle;
  +
  +error_log:
  +
  +error_summ:
  +
  +    return NULL;
   }
   
   static
  @@ -185,19 +325,52 @@
       {
           goto error_xio_system_activate;
       }
  -    GlobusXIORegisterDriver(netlogger);
  +
  +    /* setup global NL stuff */
  +    xio_l_nl_log = NL_open(NULL);
  +    if(xio_l_nl_log == NULL)
  +    {
  +        rc = -1;
  +        goto error_xio_system_activate;
  +    }
  +    xio_l_nl_summ = NL_summ();
  +    if(xio_l_nl_summ == NULL)
  +    {
  +        rc = -1;
  +        goto error_xio_system_activate;
  +    }
  +    rc = NL_transfer_init(xio_l_nl_summ, 0, NL_LVL_DEBUG);
  +    if(rc != 0)
  +    {
  +        goto error_summ;
  +    }
  +    NL_set_level(xio_l_nl_log, NL_LVL_DEBUG);
  +    rc = NL_summ_add_log(xio_l_nl_summ, xio_l_nl_log);
  +    if(rc != 0)
  +    {
  +        goto error_summ;
  +    }
  +
  +    globus_mutex_init(&xio_l_nl_mutex, NULL);
  +    globus_hashtable_init(
  +        &nl_l_handle_table,
  +        128,
  +        globus_hashtable_string_hash,
  +        globus_hashtable_string_keyeq);
   
       handle = (xio_l_netlogger_handle_t *)
           globus_calloc(1, sizeof(xio_l_netlogger_handle_t));
   
       globus_l_xio_netlogger_attr_init((void **)&handle);
   
  -    globus_l_xio_netlogger_default_handle = 
  -        xio_l_netlogger_create_handle(handle);
  +    globus_l_xio_netlogger_default_handle = handle;
   
  +    GlobusXIORegisterDriver(netlogger);
       GlobusXIONetloggerDebugExit();
       return GLOBUS_SUCCESS;
   
  +error_summ:
  +    /* close NL handle */
   error_xio_system_activate:
       GlobusXIONetloggerDebugExitWithError();
       GlobusDebugDestroy(GLOBUS_XIO_NETLOGGER);
  @@ -233,8 +406,6 @@
   globus_l_xio_netlogger_attr_init(
       void **                             out_attr)
   {
  -    int                                 rc;
  -    globus_uuid_t                       uuid;
       xio_l_netlogger_handle_t *          attr;
   
       /* intiialize everything to 0 */
  @@ -242,16 +413,10 @@
           globus_calloc(1, sizeof(xio_l_netlogger_handle_t));
       attr->type = strdup("default");
   
  -    rc = globus_uuid_create(&uuid);
  -    if(rc == 0)
  -    {
  -        attr->id = strdup(uuid.text);
  -    }
  -    else
  -    {
  -        attr->id = strdup("default");
  -    }
       attr->filename = NULL;
  +    attr->read_event = NL_TRANSFER_DISK_READ;
  +    attr->write_event = NL_TRANSFER_DISK_WRITE;
  +    attr->log_level = GLOBUS_L_XIO_NETLOGGER_LOG_DEFAULT;
   
       *out_attr = attr;
   
  @@ -284,6 +449,11 @@
       {
           dst_attr->id = strdup(src_attr->id);
       }
  +    dst_attr->read_event = src_attr->read_event;
  +    dst_attr->write_event = src_attr->write_event;
  +    dst_attr->interval = src_attr->interval;
  +    dst_attr->log_level = src_attr->log_level;
  +
       *dst = dst_attr;
   
       return GLOBUS_SUCCESS;
  @@ -295,7 +465,13 @@
           GLOBUS_XIO_NETLOGGER_CNTL_SET_FILENAME, globus_xio_string_cntl_string},
       {"mask", GLOBUS_XIO_NETLOGGER_CNTL_SET_MASK, globus_xio_string_cntl_int},
       {"type", GLOBUS_XIO_NETLOGGER_CNTL_SET_TYPE, globus_xio_string_cntl_int},
  -    {"id", GLOBUS_XIO_NETLOGGER_CNTL_SET_ID, globus_xio_string_cntl_string},
  +    {"uuid", GLOBUS_XIO_NETLOGGER_CNTL_SET_ID, globus_xio_string_cntl_string},
  +    {"interval", GLOBUS_XIO_NETLOGGER_CNTL_INTERVAL, 
  +        globus_xio_string_cntl_int},
  +    {"level", GLOBUS_XIO_NETLOGGER_CNTL_LEVEL, 
  +        globus_xio_string_cntl_int},
  +    {"io_type", GLOBUS_XIO_NETLOGGER_CNTL_SET_STRING_SUM_TYPES, 
  +        globus_xio_string_cntl_string},
       {NULL, 0, NULL}
   };
   
  @@ -306,10 +482,13 @@
       int                                 cmd,
       va_list                             ap)
   {
  +    char *                              uuid;
  +    char **                             str_out;
       char *                              str;
       char *                              tmp_str;
       globus_xio_netlogger_log_event_t    event;
       xio_l_netlogger_handle_t *          attr;
  +    xio_l_nl_handle_ent_t *             ent;
       GlobusXIOName(globus_l_xio_netlogger_cntl);
   
       GlobusXIONetloggerDebugEnter();
  @@ -318,6 +497,23 @@
   
       switch(cmd)
       {
  +        case GLOBUS_XIO_NETLOGGER_CNTL_LEVEL:
  +            attr->log_level = va_arg(ap, int);
  +            break;
  +
  +        case GLOBUS_XIO_NETLOGGER_CNTL_INTERVAL:
  +            attr->log_level |= GLOBUS_L_XIO_NETLOGGER_INTERVAL;
  +            attr->interval = va_arg(ap, int) * 1000000;
  +            break;
  +
  +        case GLOBUS_XIO_NETLOGGER_CNTL_SET_HANDLE:
  +            attr->nl_log = va_arg(ap, NL_log_T);
  +            break;
  +
  +        case GLOBUS_XIO_NETLOGGER_CNTL_SET_SUMM:
  +            attr->nl_summ = va_arg(ap, NL_summ_T);
  +            break;
  +
           case GLOBUS_XIO_NETLOGGER_CNTL_SET_ID:
               str = va_arg(ap, char *);
               attr->id = strdup(str);
  @@ -379,11 +575,46 @@
                   attr->read_event = NL_TRANSFER_DISK_READ;
                   attr->write_event = NL_TRANSFER_DISK_WRITE;
               }
  -            else
  +            else if(strncmp("net", tmp_str, 3) == 0)
               {
                   attr->read_event = NL_TRANSFER_NET_READ;
                   attr->write_event = NL_TRANSFER_NET_WRITE;
               }
  +            else
  +            {
  +                attr->read_event = -1;
  +                attr->write_event = -1;
  +            }
  +            break;
  +
  +        case GLOBUS_XIO_NETLOGGER_CNTL_STRING_IN_OUT:
  +            tmp_str = va_arg(ap, char *);
  +            str_out = va_arg(ap, char **);
  +
  +            if(strncmp(tmp_str, "uuid=", 5) == 0)
  +            {
  +                uuid = tmp_str + 5;
  +                ent = (xio_l_nl_handle_ent_t *) globus_hashtable_remove(
  +                    &nl_l_handle_table, uuid);
  +
  +                if(ent == NULL)
  +                {
  +                    return GLOBUS_SUCCESS;
  +                }
  +                NL_transfer_finalize(ent->nl_summ);
  +
  +                tmp_str = NL_transfer_get_result_string(ent->nl_summ, uuid);
  +                if(tmp_str == NULL)
  +                {
  +                    tmp_str = "nothing";
  +                }
  +                *str_out = globus_common_create_string(
  +                    NL_COOKIE"%s;%s", uuid, tmp_str);
  +            }
  +            else
  +            {
  +                *str_out = NULL;
  +            }
               break;
       }
   
  @@ -506,7 +737,7 @@
       handle = (xio_l_netlogger_handle_t *) user_arg;
       if(handle->log_flag & GLOBUS_XIO_NETLOGGER_LOG_ACCEPT)
       {
  -        NL_write(handle->nl_log, NL_LVL_INFO, handle->accept_stop_event,
  +        NL_write(handle->nl_log, NL_LVL_DEBUG, handle->accept_stop_event,
               "sock=i uuid=s",
               (int)handle, handle->id);
       }
  @@ -533,7 +764,7 @@
       xio_l_netlogger_create_handle(handle);
       if(handle->log_flag & GLOBUS_XIO_NETLOGGER_LOG_ACCEPT)
       {
  -        NL_write(handle->nl_log, NL_LVL_INFO,
  +        NL_write(handle->nl_log, NL_LVL_DEBUG,
               handle->accept_start_event, "sock=i uuid=s",
               (int)handle, handle->id);
       }
  @@ -566,7 +797,7 @@
       handle = (xio_l_netlogger_handle_t *) user_arg;
       if(handle->log_flag & GLOBUS_XIO_NETLOGGER_LOG_OPEN)
       {
  -        NL_write(handle->nl_log, NL_LVL_INFO, handle->open_stop_event,
  +        NL_write(handle->nl_log, NL_LVL_DEBUG, handle->open_stop_event,
               "sock=i uuid=s",
               (int)handle, handle->id);
       }
  @@ -800,9 +1031,6 @@
               (int)handle, handle->id);
       }
   
  -    NL_transfer_finalize(handle->nl_summ);
  -    NL_close(handle->nl_log);
  -
       globus_xio_driver_finished_close(op, result);
       GlobusXIONetloggerDebugExit();
   }
  
  
  
  1.4       +7 -1      xio/drivers/netlog/globus_xio_netlogger.h
  
  http://viewcvs.globus.org/viewcvs.cgi/xio/drivers/netlog/globus_xio_netlogger.h.diff?r1=1.3&r2=1.4
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: globus_xio_netlogger.h
  ===================================================================
  RCS file: /home/globdev/CVS/globus-packages/xio/drivers/netlog/globus_xio_netlogger.h,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -b -r1.3 -r1.4
  --- globus_xio_netlogger.h	22 Oct 2007 17:20:28 -0000	1.3
  +++ globus_xio_netlogger.h	9 Nov 2007 21:57:46 -0000	1.4
  @@ -31,7 +31,13 @@
       GLOBUS_XIO_NETLOGGER_CNTL_SET_FILENAME,
       GLOBUS_XIO_NETLOGGER_CNTL_SET_MASK,
       GLOBUS_XIO_NETLOGGER_CNTL_SET_TYPE,
  -    GLOBUS_XIO_NETLOGGER_CNTL_SET_SUM_TYPES
  +    GLOBUS_XIO_NETLOGGER_CNTL_SET_SUM_TYPES,
  +    GLOBUS_XIO_NETLOGGER_CNTL_SET_STRING_SUM_TYPES,
  +    GLOBUS_XIO_NETLOGGER_CNTL_SET_HANDLE,
  +    GLOBUS_XIO_NETLOGGER_CNTL_SET_SUMM,
  +    GLOBUS_XIO_NETLOGGER_CNTL_INTERVAL,
  +    GLOBUS_XIO_NETLOGGER_CNTL_LEVEL,
  +    GLOBUS_XIO_NETLOGGER_CNTL_STRING_IN_OUT = 1024
   } globus_xio_netlogger_log_cntl_t;
   
   
  
  
  
  1.2       +527 -0    xio/drivers/netlog/globus_ftp_client_nl_plugin.c
  
  http://viewcvs.globus.org/viewcvs.cgi/xio/drivers/netlog/globus_ftp_client_nl_plugin.c.diff?r1=1.1&r2=1.2
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: globus_ftp_client_nl_plugin.c
  ===================================================================
  RCS file: globus_ftp_client_nl_plugin.c
  diff -N globus_ftp_client_nl_plugin.c
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ globus_ftp_client_nl_plugin.c	9 Nov 2007 21:57:46 -0000	1.2
  @@ -0,0 +1,527 @@
  +#include "globus_url_copy.h"
  +
  +#include "nl.h"
  +#include "nlsumm.h"
  +#include "nltransfer.h"
  +#include <stdio.h>
  +#include <string.h>
  +
  +static int l_time_plugin_activate(void);
  +static int l_time_plugin_deactivate(void);
  +
  +#define L_TIME_PLUGIN_NAME "client_netlogger_plugin"
  +#define NL_COOKIE   "NL: uuid="
  +
  +typedef struct globus_l_nl_uuid_ent_s
  +{
  +    int                                 count;
  +    int                                 return_count;
  +    char *                              uuid;
  +    char *                              msgs[2];
  +} globus_l_nl_uuid_ent_t;
  +
  +typedef struct l_time_plugin_s
  +{
  +    int x;
  +} l_time_plugin_t;
  +
  +static globus_mutex_t                   globus_l_nl_mutex;
  +static globus_hashtable_t               globus_l_nl_uuid_table;
  +
  +globus_result_t
  +l_time_plugin_init(
  +    globus_ftp_client_plugin_t *        plugin,
  +    char *                              in_args);
  +
  +static
  +globus_result_t
  +l_time_setup_plugin(
  +    globus_ftp_client_plugin_t *		plugin,
  +    l_time_plugin_t *                   d);
  +
  +
  +static globus_guc_client_plugin_funcs_t  l_my_guc_plugin =
  +{
  +    l_time_plugin_init
  +};
  +
  +static
  +void
  +nl_print_bottleneck(
  +    NL_transfer_btl_t *                 bottleneck)
  +{
  +    printf("Bottleneck is ");
  +        printf("not known\n");
  +}
  +
  +static
  +void
  +guc_l_nl_replace_str(
  +    char *                              nl_str, 
  +    const char *                        n)
  +{
  +    char *                              tmp_ptr;
  +    char *                              tmp_ptr2;
  +    char *                              end_ptr;
  +    int                                 sz;
  +    int                                 len;
  +    int                                 off = 0;
  +
  +    end_ptr = nl_str + strlen(nl_str);
  +    sz = strlen(n) - 1;
  +    tmp_ptr = strstr(nl_str, n);
  +    while(tmp_ptr != NULL)
  +    {
  +        *tmp_ptr = '\n';
  +        tmp_ptr++;
  +
  +        tmp_ptr2 = tmp_ptr + sz;
  +
  +        len = end_ptr - tmp_ptr2;
  +        memmove(tmp_ptr, tmp_ptr2, len); 
  +        tmp_ptr = strstr(nl_str, n);
  +        off += sz;
  +    }
  +    end_ptr -= off;
  +    *end_ptr = '\0';
  +}
  +
  +
  +static
  +void
  +nl_l_final_received(
  +    const char *                        response_buffer)
  +{
  +    int                                 rc;
  +    char *                              tmp_ptr;
  +    char *                              nl_str;
  +    char *                              uuid;
  +    NL_transfer_btl_t                   bottleneck;
  +    globus_l_nl_uuid_ent_t *            ent;
  +
  +    tmp_ptr = strstr(response_buffer, NL_COOKIE);
  +    if(tmp_ptr == NULL)
  +    {
  +        goto error_response;
  +    }
  +    tmp_ptr += sizeof(NL_COOKIE);
  +    uuid = strdup(tmp_ptr);
  +    tmp_ptr = strchr(uuid, ';');
  +    if(tmp_ptr == NULL)
  +    {
  +        goto error_uuid;
  +    }
  +    *tmp_ptr = '\0';
  +    tmp_ptr++;
  +
  +    nl_str = strdup(tmp_ptr);
  +
  +/*    printf("RAW MSG: %s\n", nl_str);
  + */   /* remove trailing 226 final line if it exists */
  +    tmp_ptr = strstr(nl_str, "\r\n226 ");
  +    if(tmp_ptr != NULL)
  +    {
  +        *tmp_ptr = '\n';
  +        tmp_ptr[1] = '\0';
  +    }
  +    else
  +    {
  +        printf("Error: final 226 token not found\n");
  +    }
  +
  +    /* have to remove all of the \r\n226 messages*/
  +    guc_l_nl_replace_str(nl_str, "\r\n226-");
  +
  +    ent = (globus_l_nl_uuid_ent_t *)
  +        globus_hashtable_lookup(&globus_l_nl_uuid_table, uuid);
  +    if(ent == NULL)
  +    {
  +        goto error_ent;
  +    }
  +
  +    ent->msgs[ent->return_count] = nl_str;
  +    ent->return_count++;
  +    if(2 == ent->return_count)
  +    {
  +printf("1] %s\n\n", ent->msgs[0]);
  +printf("2] %s\n\n", ent->msgs[1]);
  +
  +        rc = NL_transfer_get_bottleneck(ent->msgs[0], ent->msgs[1],
  +            &bottleneck);
  +        if(rc != 0)
  +        {
  +        }
  +        nl_print_bottleneck(&bottleneck);   
  +
  +        globus_hashtable_remove(&globus_l_nl_uuid_table, uuid);
  +        /* clean up the entry */
  +        free(ent->msgs[0]);
  +        free(ent->msgs[1]);
  +        free(ent->uuid);
  +        free(ent);
  +    }
  +
  +    return;
  +
  +error_ent:
  +    free(nl_str);
  +error_uuid:
  +    free(uuid);
  +error_response:
  +
  +printf("ERROR OUT\n");
  +
  +    return;
  +}
  +
  +
  +static
  +void
  +l_time_response(
  +    globus_ftp_client_plugin_t *		plugin,
  +    void *					            plugin_specific,
  +    globus_ftp_client_handle_t *		handle,
  +    const char *				        url,
  +    globus_object_t *				    error,
  +    const globus_ftp_control_response_t *	ftp_response)
  +{
  +    l_time_plugin_t *                   d;
  +
  +    d = (l_time_plugin_t *) plugin_specific;
  +
  +    globus_mutex_lock(&globus_l_nl_mutex);
  +    {
  +        if(!error)
  +        {
  +            switch(ftp_response->code)
  +            {
  +                case 226:
  +                    nl_l_final_received(
  +                        (const char *)ftp_response->response_buffer);
  +                    break;
  +
  +                default:
  +                    break;
  +            }
  +        }
  +    }
  +    globus_mutex_unlock(&globus_l_nl_mutex);
  +
  +}
  +
  +
  +globus_result_t
  +l_time_plugin_init(
  +    globus_ftp_client_plugin_t *		plugin,
  +    char *                              in_args)
  +{
  +    char *                              fname = NULL;
  +    char *                              text = NULL;
  +    l_time_plugin_t *                   d;
  +    GlobusFuncName(l_time_plugin_init);
  +
  +    d = globus_libc_malloc(sizeof(l_time_plugin_t));
  +
  +    if(fname == NULL)
  +    {
  +        fname = "-";
  +    }
  +    if(text == NULL)
  +    {
  +        text = "";
  +    }
  +
  +    return l_time_setup_plugin(plugin, d);
  +}
  +
  +static
  +globus_ftp_client_plugin_t *
  +l_time_copy(
  +    globus_ftp_client_plugin_t *        plugin_template,
  +    void *                              plugin_specific)
  +{
  +    globus_ftp_client_plugin_t *        newguy;
  +    l_time_plugin_t *                   s;
  +    l_time_plugin_t *                   d;
  +    globus_result_t                     result;
  +
  +    s = (l_time_plugin_t *) plugin_specific;
  +
  +    newguy = globus_libc_malloc(sizeof(globus_ftp_client_plugin_t));
  +    if(newguy == GLOBUS_NULL)
  +    {
  +        goto error_exit;
  +    }
  +    d = globus_calloc(sizeof(l_time_plugin_t), 1);
  +
  +    result = l_time_setup_plugin(newguy, d);
  +    if(result != GLOBUS_SUCCESS)
  +    {
  +        goto free_exit;
  +    }
  +    return newguy;
  +
  +free_exit:
  +    globus_libc_free(newguy);
  +error_exit:
  +    return NULL;
  +}
  +
  +static
  +void
  +l_time_destroy(
  +    globus_ftp_client_plugin_t *        plugin,
  +    void *                              plugin_specific)
  +{
  +    l_time_plugin_t *                   s;
  +
  +    s = (l_time_plugin_t *) plugin_specific;
  +
  +    globus_free(s);
  +    globus_ftp_client_plugin_destroy(plugin);
  +}
  +
  +static
  +void
  +l_time_command(
  +    globus_ftp_client_plugin_t *        plugin,
  +    void *                              plugin_specific,
  +    globus_ftp_client_handle_t *        handle,
  +    const char *                        url,
  +    const char *                        command_name)
  +{
  +    char *                              tmp_ptr;
  +    char *                              uuid;
  +    globus_l_nl_uuid_ent_t *            ent;
  +
  +    tmp_ptr = strstr(command_name, "SETNETSTACK");
  +    if(tmp_ptr == NULL)
  +    {
  +        return;
  +    }
  +    tmp_ptr = strstr(command_name, "netlogger");
  +    if(tmp_ptr == NULL)
  +    {
  +        return;
  +    }
  +    tmp_ptr = strstr(command_name, "uuid=");
  +    if(tmp_ptr == NULL)
  +    {
  +        return;
  +    }
  +
  +    tmp_ptr += sizeof("uuid=");
  +    uuid = strdup(tmp_ptr);
  +
  +    tmp_ptr = strchr(uuid, ';');
  +    if(tmp_ptr != NULL)
  +    {
  +        *tmp_ptr = '\0';
  +    }
  +
  +    
  +    globus_mutex_lock(&globus_l_nl_mutex);
  +    {
  +        ent = (globus_l_nl_uuid_ent_t *)
  +            globus_hashtable_lookup(&globus_l_nl_uuid_table, uuid);
  +
  +        if(ent == NULL)
  +        {
  +            ent = (globus_l_nl_uuid_ent_t *) globus_calloc(
  +                1, sizeof(globus_l_nl_uuid_ent_t));
  +            ent->uuid = uuid;
  +            ent->count = 1;
  +
  +            globus_hashtable_insert(&globus_l_nl_uuid_table, ent->uuid, ent);
  +        }
  +        else
  +        {
  +            ent->count++;
  +        }
  +
  +        if(ent->count > 2)
  +        {
  +            /* log a message */
  +            ent->count = 2;
  +        }
  +    }
  +    globus_mutex_unlock(&globus_l_nl_mutex);
  +}
  +
  +static
  +void
  +l_time_connect(
  +    globus_ftp_client_plugin_t *        plugin,
  +    void *                              plugin_specific,
  +    globus_ftp_client_handle_t *        handle,
  +    const char *                        url)
  +{
  +}
  +
  +static
  +void
  +l_time_authenticate(
  +    globus_ftp_client_plugin_t *        plugin,
  +    void *                              plugin_specific,
  +    globus_ftp_client_handle_t *        handle,
  +    const char *                        url,
  +    const globus_ftp_control_auth_info_t *  auth_info)
  +{
  +}
  +
  +static
  +void
  +l_time_get(
  +    globus_ftp_client_plugin_t *        plugin,
  +    void *                  plugin_specific,
  +    globus_ftp_client_handle_t *        handle,
  +    const char *                url,
  +    const globus_ftp_client_operationattr_t *   attr,
  +    globus_bool_t               restart)
  +{
  +}
  +
  +static
  +void
  +l_time_put(
  +    globus_ftp_client_plugin_t *        plugin,
  +    void *                  plugin_specific,
  +    globus_ftp_client_handle_t *        handle,
  +    const char *                url,
  +    const globus_ftp_client_operationattr_t *   attr,
  +    globus_bool_t               restart)
  +{
  +}
  +
  +static
  +void
  +l_time_third_party_transfer(
  +    globus_ftp_client_plugin_t *        plugin,
  +    void *                  plugin_specific,
  +    globus_ftp_client_handle_t *        handle,
  +    const char *                source_url,
  +    const globus_ftp_client_operationattr_t *   source_attr,
  +    const char *                dest_url,
  +    const globus_ftp_client_operationattr_t *   dest_attr,
  +    globus_bool_t               restart)
  +{
  +}
  +
  +static
  +void
  +l_time_fault(
  +    globus_ftp_client_plugin_t *        plugin,
  +    void *                  plugin_specific,
  +    globus_ftp_client_handle_t *        handle,
  +    const char *                url,
  +    globus_object_t *               error)
  +{
  +}
  +
  +static
  +void
  +l_time_complete(
  +    globus_ftp_client_plugin_t *        plugin,
  +    void *                  plugin_specific,
  +    globus_ftp_client_handle_t *        handle)
  +{
  +}
  +
  +static
  +void
  +l_time_chmod(
  +    globus_ftp_client_plugin_t *        plugin,
  +    void *                  plugin_specific,
  +    globus_ftp_client_handle_t *        handle,
  +    const char *                url,
  +    int                                         mode,
  +    const globus_ftp_client_operationattr_t *   attr,
  +    globus_bool_t               restart)
  +{
  +}
  +
  +static
  +void
  +l_time_feat(
  +    globus_ftp_client_plugin_t *        plugin,
  +    void *                  plugin_specific,
  +    globus_ftp_client_handle_t *        handle,
  +    const char *                url,
  +    const globus_ftp_client_operationattr_t *   attr,
  +    globus_bool_t               restart)
  +{
  +}
  +
  +static
  +globus_result_t
  +l_time_setup_plugin(
  +    globus_ftp_client_plugin_t *		plugin,
  +    l_time_plugin_t *                   d)
  +{
  +    globus_ftp_client_plugin_init(plugin,
  +		L_TIME_PLUGIN_NAME,
  +		GLOBUS_FTP_CLIENT_CMD_MASK_ALL,
  +        d);
  +
  +    globus_ftp_client_plugin_set_copy_func(plugin, l_time_copy);
  +    globus_ftp_client_plugin_set_destroy_func(plugin, l_time_destroy);
  +    globus_ftp_client_plugin_set_chmod_func(plugin, l_time_chmod);
  +    globus_ftp_client_plugin_set_feat_func(plugin, l_time_feat);
  +
  +
  +    globus_ftp_client_plugin_set_response_func(plugin, l_time_response);
  +    globus_ftp_client_plugin_set_command_func(plugin, l_time_command);
  +
  +    globus_ftp_client_plugin_set_connect_func(plugin, l_time_connect);
  +    globus_ftp_client_plugin_set_get_func(plugin, l_time_get);
  +    globus_ftp_client_plugin_set_put_func(plugin, l_time_put);
  +    globus_ftp_client_plugin_set_third_party_transfer_func(
  +        plugin, l_time_third_party_transfer);
  +    globus_ftp_client_plugin_set_authenticate_func(plugin, l_time_authenticate);
  +    globus_ftp_client_plugin_set_fault_func(plugin, l_time_fault);
  +    globus_ftp_client_plugin_set_complete_func(plugin, l_time_complete);
  +
  +
  +
  +    return GLOBUS_SUCCESS;
  +}
  +
  +GlobusExtensionDefineModule(guc_time) =
  +{
  +    "guc_time",
  +    l_time_plugin_activate,
  +    l_time_plugin_deactivate,
  +    NULL,
  +    NULL,
  +    NULL
  +};
  +
  +static
  +int
  +l_time_plugin_activate(void)
  +{
  +    int                                 rc;
  +
  +    rc = globus_extension_registry_add(
  +        &globus_guc_client_plugin_registry,
  +        L_TIME_PLUGIN_NAME "_funcs",
  +        GlobusExtensionMyModule(guc_time),
  +        &l_my_guc_plugin);
  +
  +    globus_mutex_init(&globus_l_nl_mutex, NULL);
  +    globus_hashtable_init(
  +        &globus_l_nl_uuid_table,
  +        128,
  +        globus_hashtable_string_hash,
  +        globus_hashtable_string_keyeq);
  +
  +    return rc;
  +}
  +
  +static
  +int
  +l_time_plugin_deactivate(void)
  +{
  +    return 0;
  +}
  +
  
  
  




More information about the xio-commit mailing list