EGEE

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     char                *checksum; 
00211 };
00212 
00216 struct _glite_transfer_VOShareElement{
00217     char                *VOName; 
00218     char                *share; 
00219 };
00220 
00224 struct _glite_transfer_VOLimitElement{
00225     char                *VOName; 
00226     char                *limit; 
00227 };
00228 
00232 struct _glite_transfer_TransferJobSummary{
00233     glite_transfer_JobStatus    *jobStatus; 
00235     int             numDone; 
00236     int             numActive; 
00237     int             numPending; 
00238     int             numCanceled; 
00239     int             numCanceling; 
00240     int             numFailed; 
00241     int             numFinished; 
00242     int             numSubmitted; 
00243     int             numHold; 
00244     int             numWaiting; 
00245     int             numCatalogFailed; 
00246     int             numRestarted; 
00247 };
00248 
00252 struct _glite_transfer_TransferJobSummary2{
00253     glite_transfer_JobStatus    *jobStatus; 
00255     int             numDone; 
00256     int             numActive; 
00257     int             numPending; 
00258     int             numCanceled; 
00259     int             numCanceling; 
00260     int             numFailed; 
00261     int             numFinished; 
00262     int             numSubmitted; 
00263     int             numHold; 
00264     int             numWaiting; 
00265     int             numCatalogFailed; 
00266     int             numRestarted; 
00267    int            numReady;
00268    int            numFinishing;
00269    int            numAwaitingPrestage;
00270    int            numPrestaging;
00271    int            numWaitingCatalogRegistration;
00272    int            numWaitingCatalogResolution;
00273    int            numWaitingPrestage;
00274 };
00275 
00276 
00280 struct _glite_transfer_TransferParams{
00281     char                **keys; 
00282     char                **values; 
00283     unsigned            num; 
00284 };
00285 
00289 struct _glite_transfer_ChannelAuditEntry{
00290    int            auditID;
00291     char                *channelName;
00292     char                *contact;
00293     int             nostreams;
00294     int             nofiles;
00295     int             bandwidth;
00296    char           *tcpBufferSize;
00297     int             nominalThroughput;
00298     glite_channel_state     channelState;
00299    char           *message;
00300    time_t         modificationTime;
00301    char           *adminDN;
00302    char           *ftsNode;
00303    char           *clientIP;
00304 };
00305 
00306 
00310 struct _glite_transfer_Channel{
00311     char                            *channelName; 
00312     char                            *sourceSite; 
00313     char                            *destSite; 
00314     char                            *contact; 
00315     int                             numberOfStreams; 
00316     int                             numberOfFiles; 
00317     int                             bandwidth; 
00318     int                             nominalThroughput; 
00319     int                             __sizeVOShares; 
00320     glite_transfer_VOShareElement   **VOShares; 
00321     glite_channel_state             state; 
00322     int                             urlCopyFirstTxmarkTo;   
00323     int                             targetDirCheck; 
00324 };
00325 
00329 struct _glite_transfer_Channel2{
00330     char                            *channelName; 
00331     char                            *sourceSite; 
00332     char                            *destSite; 
00333     char                            *contact; 
00334     char                            *tcpBufferSize; 
00335     char                            *lastModifierDn; 
00336     char                            *message; 
00337     time_t                          lastModificationTime; 
00338     int                             numberOfStreams; 
00339     int                             numberOfFiles; 
00340     int                             bandwidth; 
00341     int                             nominalThroughput; 
00342     int                             __sizeVOShares; 
00343     glite_transfer_VOShareElement   **VOShares; 
00344     int                             __sizeVOLimits; 
00345     glite_transfer_VOLimitElement   **VOLimits; 
00346     glite_channel_state             state; 
00347     int                             urlCopyFirstTxmarkTo;   
00348     int                             targetDirCheck; 
00349 };
00350 
00354 struct _glite_transfer_Channel3{
00355     char                            *channelName; 
00356     char                            *sourceSite; 
00357     char                            *destSite; 
00358     char                            *contact; 
00359     char                            *tcpBufferSize; 
00360     char                            *lastModifierDn; 
00361     char                            *message; 
00362     time_t                          lastModificationTime; 
00363     int                             numberOfStreams; 
00364     int                             numberOfFiles; 
00365     int                             bandwidth; 
00366     int                             nominalThroughput; 
00367     int                             __sizeVOShares; 
00368     glite_transfer_VOShareElement   **VOShares; 
00369     int                             __sizeVOLimits; 
00370     glite_transfer_VOLimitElement   **VOLimits; 
00371     glite_channel_state             state; 
00372     int                             urlCopyFirstTxmarkTo;   
00373     int                             targetDirCheck; 
00374     // new
00375     time_t                          lastActiveTime; 
00376     int                             seLimit; 
00377     char                            *channelType; 
00378     char                            *blockSize; 
00379     int                             httpTimeout; 
00380     char                            *transferLogLevel; 
00381     double                          preparingFilesRatio; 
00382     char                            *transferType; 
00383     int                             urlCopyPutTimeout;
00384     int                             urlCopyPutDoneTimeout;
00385     int                             urlCopyGetTimeout;
00386     int                             urlCopyGetDoneTimeout;
00387     int                             urlCopyTransferTimeout;
00388     int                             urlCopyTransferMarkersTimeout;
00389     int                             urlCopyNoProgressTimeout;     
00390     double                          urlCopyTransferTimeoutPerMB;     
00391     char                            *srmCopyDirection; 
00392     int                             srmCopyTimeout;    
00393     int                             srmCopyRefreshTimeout;    
00394 };
00395 
00396 
00400 struct _glite_transfer_StringPair{
00401     char                *string1; 
00402     char                *string2; 
00403 };
00404 
00408 struct _glite_transfer_Roles{
00409     char                *clientDN; 
00410     char                *serviceAdmin; 
00411     char                *submitter; 
00412     int             __sizeVOManager; 
00413     glite_transfer_StringPair   **VOManager; 
00414     int             __sizechannelManager; 
00415     glite_transfer_StringPair   **channelManager; 
00416 };
00417 
00421 struct _glite_transfer_TransferSnapshot{
00422     time_t              *time; 
00423     int             numSubmittedJobs;
00424     int             numPendingJobs;
00425     int             numActiveJobs;
00426     int             numDoneJobs;
00427     int             numHoldJobs;
00428     int             numFailedJobs;
00429     int             numCanceledJobs;
00430     int             numCancelingJobs;
00431     int             numFinishedDirtyJobs;
00432     int             numFinishedJobs;
00433     int             numSubmittedFiles;
00434     int             numPendingFiles;
00435     int             numActiveFiles;
00436     int             numDoneFiles;
00437     int             numWaitingFiles;
00438     int             numHoldFiles;
00439     int             numCancelingFiles;
00440     int             numCanceledFiles;
00441     int             numFailedFiles;
00442     int             numFinishedFiles;
00443     int             numCatalogFailedFiles;
00444 };
00445 
00449 struct _glite_transfer_TransferSummary{
00450     char                *channelName; 
00451     char                *voName; 
00452     int             __sizesnapshots; 
00453     glite_transfer_TransferSnapshot **snapshots; 
00454 };
00455 
00459 struct _glite_transfer_TransferActivityPeriod{
00460     time_t                  *startTime; /*< The start time of this period of measure. */
00461     time_t                  *endTime; /*< The end time of this period of measure. */
00462     float                   averageRate; /*< The average transfer rate during this period. */
00463     long                    bytesWritten; /*< The number of bytes written during this period. */
00464 };
00465 
00469 struct _glite_transfer_TransferActivity{
00470     char                    *channelName; 
00471     char                    *voName; 
00472     int                 __sizeactivityPeriods; 
00473     glite_transfer_TransferActivityPeriod   **activityPeriods; 
00474 };
00475 
00479 struct _glite_transfer_TransferAgent{
00480     char                    *name; 
00481     char                    *DN; 
00482     char                    *host; 
00483     char                    *type; 
00484     time_t                  *lastActive; 
00485     char                    *state; 
00486     char                    *version; 
00487     char                    *contact; 
00488 };
00489 
00494 /**********************************************************************
00495  * Function prototypes - library management functions
00496  */
00497 
00508 glite_transfer_ctx *glite_transfer_new(const char *endpoint);
00509 
00514 void glite_transfer_free(glite_transfer_ctx *ctx);
00515 
00522 void glite_transfer_add_sites(glite_transfer_ctx *ctx, const char *s, const char *d);
00523 
00531 const char *glite_transfer_get_error(glite_transfer_ctx *ctx);
00532 
00538 glite_transfer_errclass glite_transfer_get_errclass(glite_transfer_ctx *ctx);
00539 
00547 void glite_transfer_set_error(glite_transfer_ctx *ctx,
00548     glite_transfer_errclass errclass, const char *fmt, ...);
00549 
00557 void glite_transfer_set_verror(glite_transfer_ctx *ctx,
00558     glite_transfer_errclass errclass, const char *fmt, va_list ap);
00559 
00567 glite_transfer_state glite_transfer_state_parse(glite_transfer_ctx *ctx,
00568     const char *state);
00569 
00575 const char *glite_transfer_state_str(glite_transfer_state state);
00576 
00577 /**********************************************************************
00578  * Function prototypes - methods of transfer data types
00579  */
00580 
00581 /* XXX doc: for the following, ctx can be NULL if no error reporting is
00582  * required */
00583 
00592 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_new(glite_transfer_ctx *ctx,
00593     const char *source, const char *dest, glite_transfer_state state);
00599 void glite_transfer_FileTransferStatus_free(glite_transfer_ctx *ctx,
00600     glite_transfer_FileTransferStatus *status);
00607 void glite_transfer_FileTransferStatus_freeArray(glite_transfer_ctx *ctx,
00608     int nitems, glite_transfer_FileTransferStatus *status[]);
00615 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_clone(glite_transfer_ctx *ctx,
00616     const glite_transfer_FileTransferStatus *status);
00624 int glite_transfer_FileTransferStatus_setLogicalName(glite_transfer_ctx *ctx,
00625     glite_transfer_FileTransferStatus *status, const char *name);
00633 int glite_transfer_FileTransferStatus_setReason(glite_transfer_ctx *ctx,
00634     glite_transfer_FileTransferStatus *status, const char *reason);
00642 int glite_transfer_FileTransferStatus_setReasonClass(glite_transfer_ctx *ctx,
00643     glite_transfer_FileTransferStatus *status, const char *reasonClass);
00644 
00652 glite_transfer_JobStatus *glite_transfer_JobStatus_new(glite_transfer_ctx *ctx,
00653     const char *jobId, glite_transfer_state jobStatus);
00659 void glite_transfer_JobStatus_free(glite_transfer_ctx *ctx,
00660     glite_transfer_JobStatus *status);
00667 void glite_transfer_JobStatus_freeArray(glite_transfer_ctx *ctx, int nitems,
00668     glite_transfer_JobStatus *status[]);
00675 glite_transfer_JobStatus *glite_transfer_JobStatus_clone(glite_transfer_ctx *ctx,
00676     const glite_transfer_JobStatus *orig);
00677 
00685 glite_transfer_PlacementJob *glite_transfer_PlacementJob_new(glite_transfer_ctx *ctx,
00686     const char *sourceSE, const char *destSE);
00692 void glite_transfer_PlacementJob_free(glite_transfer_ctx *ctx,
00693     glite_transfer_PlacementJob *job);
00700 glite_transfer_PlacementJob *glite_transfer_PlacementJob_clone(glite_transfer_ctx *ctx,
00701     const glite_transfer_PlacementJob *orig);
00709 int glite_transfer_PlacementJob_setParams(glite_transfer_ctx *ctx,
00710     glite_transfer_PlacementJob *job,
00711     const glite_transfer_TransferParams *params);
00719 int glite_transfer_PlacementJob_add(glite_transfer_ctx *ctx,
00720     glite_transfer_PlacementJob *job, const char *logicalFile);
00721 
00729 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_new(glite_transfer_ctx *ctx,
00730     const char *src, const char *dst, const char *cksm);
00736 void glite_transfer_TransferJobElement_free(glite_transfer_ctx *ctx,
00737     glite_transfer_TransferJobElement *elem);
00744 void glite_transfer_TransferJobElement_freeArray(glite_transfer_ctx *ctx,
00745     int nitems, glite_transfer_TransferJobElement *elems[]);
00752 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_clone(glite_transfer_ctx *ctx,
00753     const glite_transfer_TransferJobElement *orig);
00754 
00760 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_new(glite_transfer_ctx *ctx);
00761 glite_transfer_TransferJobSummary2 *glite_transfer_TransferJobSummary2_new(glite_transfer_ctx *ctx);
00767 void glite_transfer_TransferJobSummary_free(glite_transfer_ctx *ctx,
00768     glite_transfer_TransferJobSummary *summary);
00769 void glite_transfer_TransferJobSummary2_free(glite_transfer_ctx *ctx,
00770     glite_transfer_TransferJobSummary2 *summary);
00771 
00778 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_clone(glite_transfer_ctx *ctx,
00779     const glite_transfer_TransferJobSummary *orig);
00780 glite_transfer_TransferJobSummary2 *glite_transfer_TransferJobSummary2_clone(glite_transfer_ctx *ctx,
00781     const glite_transfer_TransferJobSummary2 *orig);
00782 
00788 glite_transfer_TransferJob *glite_transfer_TransferJob_new(glite_transfer_ctx *ctx);
00794 void glite_transfer_TransferJob_free(glite_transfer_ctx *ctx,
00795     glite_transfer_TransferJob *job);
00802 glite_transfer_TransferJob *glite_transfer_TransferJob_clone(glite_transfer_ctx *ctx,
00803     const glite_transfer_TransferJob *orig);
00811 int glite_transfer_TransferJob_setParams(glite_transfer_ctx *ctx,
00812     glite_transfer_TransferJob *job,
00813     const glite_transfer_TransferParams *params);
00822 int glite_transfer_TransferJob_add(glite_transfer_ctx *ctx,
00823     glite_transfer_TransferJob *job,
00824     const char *src, const char *dst, const char *cksm);
00825 
00831 glite_transfer_TransferParams *glite_transfer_TransferParams_new(glite_transfer_ctx *ctx);
00837 void glite_transfer_TransferParams_free(glite_transfer_ctx *ctx,
00838     glite_transfer_TransferParams *params);
00845 glite_transfer_TransferParams *glite_transfer_TransferParams_clone(glite_transfer_ctx *ctx,
00846     const glite_transfer_TransferParams *orig);
00855 int glite_transfer_TransferParams_add(glite_transfer_ctx *ctx,
00856     glite_transfer_TransferParams *params, const char *key, const char *value);
00857 
00866 glite_transfer_Channel *glite_transfer_Channel_new(glite_transfer_ctx *ctx,
00867     const char *name, const char *domainA, const char *domainB);
00868 
00869 glite_transfer_Channel2 *glite_transfer_Channel2_new(glite_transfer_ctx *ctx,
00870    const char *name, const char *domainA, const char *domainB);
00871 
00872 glite_transfer_Channel3 *glite_transfer_Channel3_new(
00873     glite_transfer_ctx  *ctx,
00874    const char           *name,
00875    const char           *domainA,
00876    const char           *domainB);
00877 
00883 void glite_transfer_Channel_free(
00884     glite_transfer_ctx      *ctx,
00885     glite_transfer_Channel  *channel);
00886 
00887 void glite_transfer_Channel2_free(
00888     glite_transfer_ctx      *ctx,
00889     glite_transfer_Channel2 *channel2);
00890 
00891 void glite_transfer_Channel3_free(
00892     glite_transfer_ctx      *ctx,
00893     glite_transfer_Channel3 *channel3);
00894 
00901 glite_transfer_Channel *glite_transfer_Channel_clone(glite_transfer_ctx *ctx,
00902     const glite_transfer_Channel *orig);
00903 
00904 glite_transfer_Channel2 *glite_transfer_Channel2_clone(glite_transfer_ctx *ctx,
00905    const glite_transfer_Channel2 *orig);
00906 
00914 int glite_transfer_Channel_setContact(glite_transfer_ctx *ctx,
00915     glite_transfer_Channel *channel, const char *contact);
00923 int glite_transfer_Channel_setState(glite_transfer_ctx *ctx,
00924     glite_transfer_Channel *channel, glite_channel_state state);
00925 
00929 glite_transfer_Roles *glite_transfer_Roles_new(glite_transfer_ctx *ctx);
00930 
00931 /* Free an array of channel audit entries */
00932 void glite_transfer_ChannelAuditEntry_freeArray(glite_transfer_ctx *ctx,
00933     int nitems, glite_transfer_ChannelAuditEntry *ca[]);
00934 
00935 /* Create a new channel audit entry. */
00936 glite_transfer_ChannelAuditEntry *glite_transfer_ChannelAuditEntry_new(
00937     glite_transfer_ctx *ctx, const char *name);
00938 
00939 /* Free a channel audit entry. */
00940 void glite_transfer_ChannelAuditEntry_free(glite_transfer_ctx *ctx,
00941     glite_transfer_ChannelAuditEntry *ca);
00942 
00943 /* Clone an existing channel audit entry. */
00944 glite_transfer_ChannelAuditEntry *glite_transfer_ChannelAuditEntry_clone(
00945     glite_transfer_ctx *ctx, const glite_transfer_ChannelAuditEntry *orig);
00946 
00947 #ifdef __cplusplus
00948 }
00949 #endif
00950 
00951 #endif /* GLITE_DATA_TRANSFER_SIMPLE_H */
The GLite Project. All rights reserved.