EGEE
Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals

transfer-simple.h

Go to the documentation of this file.
00001 
00021 #ifndef GLITE_DATA_TRANSFER_SIMPLE_H
00022 #define GLITE_DATA_TRANSFER_SIMPLE_H
00023 
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027 
00028 #include <stdarg.h>
00029 #include <stdint.h>
00030 #include <time.h>
00031 
00032 /* constant used to refer to the desired FTS interfcae version */
00033 #define GLITE_FTS_IFC_VERSION       "GLITE_FTS_IFC_VERSION"
00034 
00035 /**********************************************************************
00036  * Data type declarations
00037  */
00038 
00039 /* Opaque data structure used by the library */
00040 typedef struct _glite_transfer_ctx          glite_transfer_ctx;
00041 
00046 typedef struct _glite_transfer_Channel                  glite_transfer_Channel;
00047 typedef struct _glite_transfer_Channel2                 glite_transfer_Channel2;
00048 typedef struct _glite_transfer_Channel3                 glite_transfer_Channel3;
00049 typedef struct _glite_transfer_ChannelAuditEntry        glite_transfer_ChannelAuditEntry;
00050 typedef struct _glite_transfer_FileTransferStatus       glite_transfer_FileTransferStatus;
00051 typedef struct _glite_transfer_JobStatus                glite_transfer_JobStatus;
00052 typedef struct _glite_transfer_PlacementJob             glite_transfer_PlacementJob;
00053 typedef struct _glite_transfer_TransferJob              glite_transfer_TransferJob;
00054 typedef struct _glite_transfer_TransferJobElement       glite_transfer_TransferJobElement;
00055 typedef struct _glite_transfer_TransferJobSummary       glite_transfer_TransferJobSummary;
00056 typedef struct _glite_transfer_TransferJobSummary2      glite_transfer_TransferJobSummary2;
00057 typedef struct _glite_transfer_TransferParams           glite_transfer_TransferParams;
00058 typedef struct _glite_transfer_StringPair               glite_transfer_StringPair;
00059 typedef struct _glite_transfer_Roles                    glite_transfer_Roles;
00060 typedef struct _glite_transfer_VOShareElement           glite_transfer_VOShareElement;
00061 typedef struct _glite_transfer_VOLimitElement           glite_transfer_VOLimitElement;
00062 /* FileTransferStats and related structures */
00063 typedef struct _glite_transfer_TransferSnapshot         glite_transfer_TransferSnapshot;
00064 typedef struct _glite_transfer_TransferSummary          glite_transfer_TransferSummary;
00065 typedef struct _glite_transfer_TransferActivity         glite_transfer_TransferActivity;
00066 typedef struct _glite_transfer_TransferActivityPeriod   glite_transfer_TransferActivityPeriod;
00067 typedef struct _glite_transfer_TransferAgent            glite_transfer_TransferAgent;
00068 
00069 
00070 /**********************************************************************
00071  * Constants
00072  */
00073 
00077 typedef enum{
00078     GLITE_TRANSFER_EXCEPTION_EXISTS = -9,
00079     GLITE_TRANSFER_EXCEPTION_AUTHORIZATION = -8,
00080     GLITE_TRANSFER_EXCEPTION_CANNOTCANCEL = -7,
00081     GLITE_TRANSFER_EXCEPTION_FILENOTFOUND = -6,
00082     GLITE_TRANSFER_EXCEPTION_INTERNAL = -5,
00083     GLITE_TRANSFER_EXCEPTION_INVALIDARGUMENT = -4,
00084     GLITE_TRANSFER_EXCEPTION_NOTEXISTS = -3,
00085     GLITE_TRANSFER_EXCEPTION_SERVICEBUSY = -2,
00086     GLITE_TRANSFER_EXCEPTION_TRANSFER = -1,
00087     GLITE_TRANSFER_ERROR_NONE,
00088     GLITE_TRANSFER_ERROR_UNKNOWN,
00089     GLITE_TRANSFER_ERROR_INVALIDARGUMENT,
00090     GLITE_TRANSFER_ERROR_OUTOFMEMORY,
00091     GLITE_TRANSFER_ERROR_SERVICEDISCOVERY,
00092     GLITE_TRANSFER_ERROR_SOAP
00093 } glite_transfer_errclass;
00094 
00101 typedef enum{
00102     GLITE_TRANSFER_FAILED = -6,
00103     GLITE_TRANSFER_CATALOGFAILED = -5,
00104     GLITE_TRANSFER_FINISHED_DIRTY = -4,
00105     GLITE_TRANSFER_UNKNOWN = -3,
00106     GLITE_TRANSFER_CANCELED = -2,
00107     GLITE_TRANSFER_TRANSFERFAILED = -1,
00108     GLITE_TRANSFER_FINISHED = 0,
00109     GLITE_TRANSFER_SUBMITTED,
00110     GLITE_TRANSFER_PENDING,
00111     GLITE_TRANSFER_ACTIVE,
00112     GLITE_TRANSFER_CANCELING,
00113     GLITE_TRANSFER_WAITING,
00114     GLITE_TRANSFER_HOLD,
00115     GLITE_TRANSFER_DONE,
00116     GLITE_TRANSFER_READY,
00117     GLITE_TRANSFER_DONEWITHERRORS,
00118     GLITE_TRANSFER_FINISHING,
00119     GLITE_TRANSFER_AWAITING_PRESTAGE,
00120     GLITE_TRANSFER_PRESTAGING,
00121     GLITE_TRANSFER_WAITING_PRESTAGE,
00122     GLITE_TRANSFER_WAITING_CATALOG_RESOLUTION,
00123     GLITE_TRANSFER_WAITING_CATALOG_REGISTRATION
00124 } glite_transfer_state;
00125 
00129 typedef enum{
00130     GLITE_CHANNEL_UNKNOWN = -1,
00131     GLITE_CHANNEL_ACTIVE,
00132     GLITE_CHANNEL_INACTIVE,
00133     GLITE_CHANNEL_DRAIN,
00134     GLITE_CHANNEL_STOPPED,
00135     GLITE_CHANNEL_HALTED,
00136     GLITE_CHANNEL_ARCHIVED,
00137     GLITE_CHANNEL_DELETED
00138 } glite_channel_state;
00139 
00140 
00141 /**********************************************************************
00142  * Data tytpe definitions
00143  */
00144 
00148 struct _glite_transfer_FileTransferStatus{
00149     char                *logicalName; 
00150     char                *sourceSURL; 
00151     char                *destSURL; 
00152     glite_transfer_state        transferFileState; 
00153     int             numFailures; 
00154     char                *reason; 
00155     char                *reason_class; 
00156     int             duration; 
00157 };
00158 
00162 struct _glite_transfer_JobStatus{
00163     char                *jobId; 
00164     glite_transfer_state        jobStatus; 
00165     char                *channelName; 
00166     char                *clientDN; 
00167     char                *reason; 
00168     char                            *voName; 
00169     struct timespec         submitTime; 
00170     int             numFiles; 
00171     int             priority; 
00172 };
00173 
00185 struct _glite_transfer_PlacementJob{
00186     char                **logicalFiles; 
00187     unsigned            __sizeLogicalFiles; 
00188     char                *sourceSE; 
00189     char                *destSE; 
00190     glite_transfer_TransferParams   *jobParams; 
00191     char                *credential; 
00192 };
00193 
00197 struct _glite_transfer_TransferJob{
00198     glite_transfer_TransferJobElement   **transferJobElements; 
00199     unsigned                __sizetransferJobElements; 
00200     glite_transfer_TransferParams       *jobParams; 
00201     char                    *credential; 
00202 };
00203 
00207 struct _glite_transfer_TransferJobElement{
00208     char                *source; 
00209     char                *dest; 
00210 };
00211 
00215 struct _glite_transfer_VOShareElement{
00216     char                *VOName; 
00217     char                *share; 
00218 };
00219 
00223 struct _glite_transfer_VOLimitElement{
00224     char                *VOName; 
00225     char                *limit; 
00226 };
00227 
00231 struct _glite_transfer_TransferJobSummary{
00232     glite_transfer_JobStatus    *jobStatus; 
00234     int             numDone; 
00235     int             numActive; 
00236     int             numPending; 
00237     int             numCanceled; 
00238     int             numCanceling; 
00239     int             numFailed; 
00240     int             numFinished; 
00241     int             numSubmitted; 
00242     int             numHold; 
00243     int             numWaiting; 
00244     int             numCatalogFailed; 
00245     int             numRestarted; 
00246 };
00247 
00251 struct _glite_transfer_TransferJobSummary2{
00252     glite_transfer_JobStatus    *jobStatus; 
00254     int             numDone; 
00255     int             numActive; 
00256     int             numPending; 
00257     int             numCanceled; 
00258     int             numCanceling; 
00259     int             numFailed; 
00260     int             numFinished; 
00261     int             numSubmitted; 
00262     int             numHold; 
00263     int             numWaiting; 
00264     int             numCatalogFailed; 
00265     int             numRestarted; 
00266    int            numReady;
00267    int            numFinishing;
00268    int            numAwaitingPrestage;
00269    int            numPrestaging;
00270    int            numWaitingCatalogRegistration;
00271    int            numWaitingCatalogResolution;
00272    int            numWaitingPrestage;
00273 };
00274 
00275 
00279 struct _glite_transfer_TransferParams{
00280     char                **keys; 
00281     char                **values; 
00282     unsigned            num; 
00283 };
00284 
00288 struct _glite_transfer_ChannelAuditEntry{
00289    int            auditID;
00290     char                *channelName;
00291     char                *contact;
00292     int             nostreams;
00293     int             nofiles;
00294     int             bandwidth;
00295    char           *tcpBufferSize;
00296     int             nominalThroughput;
00297     glite_channel_state     channelState;
00298    char           *message;
00299    time_t         modificationTime;
00300    char           *adminDN;
00301    char           *ftsNode;
00302    char           *clientIP;
00303 };
00304 
00305 
00309 struct _glite_transfer_Channel{
00310     char                            *channelName; 
00311     char                            *sourceSite; 
00312     char                            *destSite; 
00313     char                            *contact; 
00314     int                             numberOfStreams; 
00315     int                             numberOfFiles; 
00316     int                             bandwidth; 
00317     int                             nominalThroughput; 
00318     int                             __sizeVOShares; 
00319     glite_transfer_VOShareElement   **VOShares; 
00320     glite_channel_state             state; 
00321     int                             urlCopyFirstTxmarkTo;   
00322     int                             targetDirCheck; 
00323 };
00324 
00328 struct _glite_transfer_Channel2{
00329     char                            *channelName; 
00330     char                            *sourceSite; 
00331     char                            *destSite; 
00332     char                            *contact; 
00333     char                            *tcpBufferSize; 
00334     char                            *lastModifierDn; 
00335     char                            *message; 
00336     time_t                          lastModificationTime; 
00337     int                             numberOfStreams; 
00338     int                             numberOfFiles; 
00339     int                             bandwidth; 
00340     int                             nominalThroughput; 
00341     int                             __sizeVOShares; 
00342     glite_transfer_VOShareElement   **VOShares; 
00343     int                             __sizeVOLimits; 
00344     glite_transfer_VOLimitElement   **VOLimits; 
00345     glite_channel_state             state; 
00346     int                             urlCopyFirstTxmarkTo;   
00347     int                             targetDirCheck; 
00348 };
00349 
00353 struct _glite_transfer_Channel3{
00354     char                            *channelName; 
00355     char                            *sourceSite; 
00356     char                            *destSite; 
00357     char                            *contact; 
00358     char                            *tcpBufferSize; 
00359     char                            *lastModifierDn; 
00360     char                            *message; 
00361     time_t                          lastModificationTime; 
00362     int                             numberOfStreams; 
00363     int                             numberOfFiles; 
00364     int                             bandwidth; 
00365     int                             nominalThroughput; 
00366     int                             __sizeVOShares; 
00367     glite_transfer_VOShareElement   **VOShares; 
00368     int                             __sizeVOLimits; 
00369     glite_transfer_VOLimitElement   **VOLimits; 
00370     glite_channel_state             state; 
00371     int                             urlCopyFirstTxmarkTo;   
00372     int                             targetDirCheck; 
00373     // new
00374     time_t                          lastActiveTime; 
00375     int                             seLimit; 
00376     char                            *channelType; 
00377     char                            *blockSize; 
00378     int                             httpTimeout; 
00379     char                            *transferLogLevel; 
00380     double                          preparingFilesRatio; 
00381     char                            *transferType; 
00382     int                             urlCopyPutTimeout;
00383     int                             urlCopyPutDoneTimeout;
00384     int                             urlCopyGetTimeout;
00385     int                             urlCopyGetDoneTimeout;
00386     int                             urlCopyTransferTimeout;
00387     int                             urlCopyTransferMarkersTimeout;
00388     int                             urlCopyNoProgressTimeout;     
00389     double                          urlCopyTransferTimeoutPerMB;     
00390     char                            *srmCopyDirection; 
00391     int                             srmCopyTimeout;    
00392     int                             srmCopyRefreshTimeout;    
00393 };
00394 
00395 
00399 struct _glite_transfer_StringPair{
00400     char                *string1; 
00401     char                *string2; 
00402 };
00403 
00407 struct _glite_transfer_Roles{
00408     char                *clientDN; 
00409     char                *serviceAdmin; 
00410     char                *submitter; 
00411     int             __sizeVOManager; 
00412     glite_transfer_StringPair   **VOManager; 
00413     int             __sizechannelManager; 
00414     glite_transfer_StringPair   **channelManager; 
00415 };
00416 
00420 struct _glite_transfer_TransferSnapshot{
00421     time_t              *time; 
00422     int             numSubmittedJobs;
00423     int             numPendingJobs;
00424     int             numActiveJobs;
00425     int             numDoneJobs;
00426     int             numHoldJobs;
00427     int             numFailedJobs;
00428     int             numCanceledJobs;
00429     int             numCancelingJobs;
00430     int             numFinishedDirtyJobs;
00431     int             numFinishedJobs;
00432     int             numSubmittedFiles;
00433     int             numPendingFiles;
00434     int             numActiveFiles;
00435     int             numDoneFiles;
00436     int             numWaitingFiles;
00437     int             numHoldFiles;
00438     int             numCancelingFiles;
00439     int             numCanceledFiles;
00440     int             numFailedFiles;
00441     int             numFinishedFiles;
00442     int             numCatalogFailedFiles;
00443 };
00444 
00448 struct _glite_transfer_TransferSummary{
00449     char                *channelName; 
00450     char                *voName; 
00451     int             __sizesnapshots; 
00452     glite_transfer_TransferSnapshot **snapshots; 
00453 };
00454 
00458 struct _glite_transfer_TransferActivityPeriod{
00459     time_t                  *startTime; /*< The start time of this period of measure. */
00460     time_t                  *endTime; /*< The end time of this period of measure. */
00461     float                   averageRate; /*< The average transfer rate during this period. */
00462     long                    bytesWritten; /*< The number of bytes written during this period. */
00463 };
00464 
00468 struct _glite_transfer_TransferActivity{
00469     char                    *channelName; 
00470     char                    *voName; 
00471     int                 __sizeactivityPeriods; 
00472     glite_transfer_TransferActivityPeriod   **activityPeriods; 
00473 };
00474 
00478 struct _glite_transfer_TransferAgent{
00479     char                    *name; 
00480     char                    *DN; 
00481     char                    *host; 
00482     char                    *type; 
00483     time_t                  *lastActive; 
00484     char                    *state; 
00485     char                    *version; 
00486     char                    *contact; 
00487 };
00488 
00493 /**********************************************************************
00494  * Function prototypes - library management functions
00495  */
00496 
00507 glite_transfer_ctx *glite_transfer_new(const char *endpoint);
00508 
00513 void glite_transfer_free(glite_transfer_ctx *ctx);
00514 
00521 void glite_transfer_add_sites(glite_transfer_ctx *ctx, const char *s, const char *d);
00522 
00530 const char *glite_transfer_get_error(glite_transfer_ctx *ctx);
00531 
00537 glite_transfer_errclass glite_transfer_get_errclass(glite_transfer_ctx *ctx);
00538 
00546 void glite_transfer_set_error(glite_transfer_ctx *ctx,
00547     glite_transfer_errclass errclass, const char *fmt, ...);
00548 
00556 void glite_transfer_set_verror(glite_transfer_ctx *ctx,
00557     glite_transfer_errclass errclass, const char *fmt, va_list ap);
00558 
00566 glite_transfer_state glite_transfer_state_parse(glite_transfer_ctx *ctx,
00567     const char *state);
00568 
00574 const char *glite_transfer_state_str(glite_transfer_state state);
00575 
00576 /**********************************************************************
00577  * Function prototypes - methods of transfer data types
00578  */
00579 
00580 /* XXX doc: for the following, ctx can be NULL if no error reporting is
00581  * required */
00582 
00591 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_new(glite_transfer_ctx *ctx,
00592     const char *source, const char *dest, glite_transfer_state state);
00598 void glite_transfer_FileTransferStatus_free(glite_transfer_ctx *ctx,
00599     glite_transfer_FileTransferStatus *status);
00606 void glite_transfer_FileTransferStatus_freeArray(glite_transfer_ctx *ctx,
00607     int nitems, glite_transfer_FileTransferStatus *status[]);
00614 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_clone(glite_transfer_ctx *ctx,
00615     const glite_transfer_FileTransferStatus *status);
00623 int glite_transfer_FileTransferStatus_setLogicalName(glite_transfer_ctx *ctx,
00624     glite_transfer_FileTransferStatus *status, const char *name);
00632 int glite_transfer_FileTransferStatus_setReason(glite_transfer_ctx *ctx,
00633     glite_transfer_FileTransferStatus *status, const char *reason);
00641 int glite_transfer_FileTransferStatus_setReasonClass(glite_transfer_ctx *ctx,
00642     glite_transfer_FileTransferStatus *status, const char *reasonClass);
00643 
00651 glite_transfer_JobStatus *glite_transfer_JobStatus_new(glite_transfer_ctx *ctx,
00652     const char *jobId, glite_transfer_state jobStatus);
00658 void glite_transfer_JobStatus_free(glite_transfer_ctx *ctx,
00659     glite_transfer_JobStatus *status);
00666 void glite_transfer_JobStatus_freeArray(glite_transfer_ctx *ctx, int nitems,
00667     glite_transfer_JobStatus *status[]);
00674 glite_transfer_JobStatus *glite_transfer_JobStatus_clone(glite_transfer_ctx *ctx,
00675     const glite_transfer_JobStatus *orig);
00676 
00684 glite_transfer_PlacementJob *glite_transfer_PlacementJob_new(glite_transfer_ctx *ctx,
00685     const char *sourceSE, const char *destSE);
00691 void glite_transfer_PlacementJob_free(glite_transfer_ctx *ctx,
00692     glite_transfer_PlacementJob *job);
00699 glite_transfer_PlacementJob *glite_transfer_PlacementJob_clone(glite_transfer_ctx *ctx,
00700     const glite_transfer_PlacementJob *orig);
00708 int glite_transfer_PlacementJob_setParams(glite_transfer_ctx *ctx,
00709     glite_transfer_PlacementJob *job,
00710     const glite_transfer_TransferParams *params);
00718 int glite_transfer_PlacementJob_add(glite_transfer_ctx *ctx,
00719     glite_transfer_PlacementJob *job, const char *logicalFile);
00720 
00728 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_new(glite_transfer_ctx *ctx,
00729     const char *src, const char *dst);
00735 void glite_transfer_TransferJobElement_free(glite_transfer_ctx *ctx,
00736     glite_transfer_TransferJobElement *elem);
00743 void glite_transfer_TransferJobElement_freeArray(glite_transfer_ctx *ctx,
00744     int nitems, glite_transfer_TransferJobElement *elems[]);
00751 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_clone(glite_transfer_ctx *ctx,
00752     const glite_transfer_TransferJobElement *orig);
00753 
00759 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_new(glite_transfer_ctx *ctx);
00760 glite_transfer_TransferJobSummary2 *glite_transfer_TransferJobSummary2_new(glite_transfer_ctx *ctx);
00766 void glite_transfer_TransferJobSummary_free(glite_transfer_ctx *ctx,
00767     glite_transfer_TransferJobSummary *summary);
00768 void glite_transfer_TransferJobSummary2_free(glite_transfer_ctx *ctx,
00769     glite_transfer_TransferJobSummary2 *summary);
00770 
00777 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_clone(glite_transfer_ctx *ctx,
00778     const glite_transfer_TransferJobSummary *orig);
00779 glite_transfer_TransferJobSummary2 *glite_transfer_TransferJobSummary2_clone(glite_transfer_ctx *ctx,
00780     const glite_transfer_TransferJobSummary2 *orig);
00781 
00787 glite_transfer_TransferJob *glite_transfer_TransferJob_new(glite_transfer_ctx *ctx);
00793 void glite_transfer_TransferJob_free(glite_transfer_ctx *ctx,
00794     glite_transfer_TransferJob *job);
00801 glite_transfer_TransferJob *glite_transfer_TransferJob_clone(glite_transfer_ctx *ctx,
00802     const glite_transfer_TransferJob *orig);
00810 int glite_transfer_TransferJob_setParams(glite_transfer_ctx *ctx,
00811     glite_transfer_TransferJob *job,
00812     const glite_transfer_TransferParams *params);
00821 int glite_transfer_TransferJob_add(glite_transfer_ctx *ctx,
00822     glite_transfer_TransferJob *job,
00823     const char *src, const char *dst);
00824 
00830 glite_transfer_TransferParams *glite_transfer_TransferParams_new(glite_transfer_ctx *ctx);
00836 void glite_transfer_TransferParams_free(glite_transfer_ctx *ctx,
00837     glite_transfer_TransferParams *params);
00844 glite_transfer_TransferParams *glite_transfer_TransferParams_clone(glite_transfer_ctx *ctx,
00845     const glite_transfer_TransferParams *orig);
00854 int glite_transfer_TransferParams_add(glite_transfer_ctx *ctx,
00855     glite_transfer_TransferParams *params, const char *key, const char *value);
00856 
00865 glite_transfer_Channel *glite_transfer_Channel_new(glite_transfer_ctx *ctx,
00866     const char *name, const char *domainA, const char *domainB);
00867 
00868 glite_transfer_Channel2 *glite_transfer_Channel2_new(glite_transfer_ctx *ctx,
00869    const char *name, const char *domainA, const char *domainB);
00870 
00871 glite_transfer_Channel3 *glite_transfer_Channel3_new(
00872     glite_transfer_ctx  *ctx,
00873    const char           *name,
00874    const char           *domainA,
00875    const char           *domainB);
00876 
00882 void glite_transfer_Channel_free(
00883     glite_transfer_ctx      *ctx,
00884     glite_transfer_Channel  *channel);
00885 
00886 void glite_transfer_Channel2_free(
00887     glite_transfer_ctx      *ctx,
00888     glite_transfer_Channel2 *channel2);
00889 
00890 void glite_transfer_Channel3_free(
00891     glite_transfer_ctx      *ctx,
00892     glite_transfer_Channel3 *channel3);
00893 
00900 glite_transfer_Channel *glite_transfer_Channel_clone(glite_transfer_ctx *ctx,
00901     const glite_transfer_Channel *orig);
00902 
00903 glite_transfer_Channel2 *glite_transfer_Channel2_clone(glite_transfer_ctx *ctx,
00904    const glite_transfer_Channel2 *orig);
00905 
00913 int glite_transfer_Channel_setContact(glite_transfer_ctx *ctx,
00914     glite_transfer_Channel *channel, const char *contact);
00922 int glite_transfer_Channel_setState(glite_transfer_ctx *ctx,
00923     glite_transfer_Channel *channel, glite_channel_state state);
00924 
00928 glite_transfer_Roles *glite_transfer_Roles_new(glite_transfer_ctx *ctx);
00929 
00930 /* Free an array of channel audit entries */
00931 void glite_transfer_ChannelAuditEntry_freeArray(glite_transfer_ctx *ctx,
00932     int nitems, glite_transfer_ChannelAuditEntry *ca[]);
00933 
00934 /* Create a new channel audit entry. */
00935 glite_transfer_ChannelAuditEntry *glite_transfer_ChannelAuditEntry_new(
00936     glite_transfer_ctx *ctx, const char *name);
00937 
00938 /* Free a channel audit entry. */
00939 void glite_transfer_ChannelAuditEntry_free(glite_transfer_ctx *ctx,
00940     glite_transfer_ChannelAuditEntry *ca);
00941 
00942 /* Clone an existing channel audit entry. */
00943 glite_transfer_ChannelAuditEntry *glite_transfer_ChannelAuditEntry_clone(
00944     glite_transfer_ctx *ctx, const glite_transfer_ChannelAuditEntry *orig);
00945 
00946 #ifdef __cplusplus
00947 }
00948 #endif
00949 
00950 #endif /* GLITE_DATA_TRANSFER_SIMPLE_H */
The GLite Project. All rights reserved.