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

transfer-simple.h

Go to the documentation of this file.
00001 /*
00002  *  Copyright (c) Members of the EGEE Collaboration. 2005.
00003  *  See http://eu-egee.org/partners/ for details on the copyright holders.
00004  *  For license conditions see the license file or http://eu-egee.org/license.html
00005  *
00006  *  GLite Data Management - Simple transfer API
00007  *
00008  *  Authors: Gabor Gombas <Gabor.Gombas@cern.ch>
00009  *           Zoltan Farkas <Zoltan.Farkas@cern.ch>
00010  *
00011  */
00012 
00013 #ifndef GLITE_DATA_TRANSFER_SIMPLE_H
00014 #define GLITE_DATA_TRANSFER_SIMPLE_H
00015 
00016 #ifdef __cplusplus
00017 extern "C" {
00018 #endif
00019 
00020 #include <stdarg.h>
00021 #include <stdint.h>
00022 #include <time.h>
00023 
00024 /* constant used to refer to the desired FTS interfcae version */
00025 #define GLITE_FTS_IFC_VERSION       "GLITE_FTS_IFC_VERSION"
00026 
00027 /**********************************************************************
00028  * Data type declarations
00029  */
00030 
00031 /* Opaque data structure used by the library */
00032 typedef struct _glite_transfer_ctx          glite_transfer_ctx;
00033 
00038 typedef struct _glite_transfer_Channel          glite_transfer_Channel;
00039 typedef struct _glite_transfer_Channel2       glite_transfer_Channel2;
00040 typedef struct _glite_transfer_ChannelAuditEntry   glite_transfer_ChannelAuditEntry;
00041 typedef struct _glite_transfer_FileTransferStatus   glite_transfer_FileTransferStatus;
00042 typedef struct _glite_transfer_JobStatus        glite_transfer_JobStatus;
00043 typedef struct _glite_transfer_PlacementJob     glite_transfer_PlacementJob;
00044 typedef struct _glite_transfer_TransferJob      glite_transfer_TransferJob;
00045 typedef struct _glite_transfer_TransferJobElement   glite_transfer_TransferJobElement;
00046 typedef struct _glite_transfer_TransferJobSummary   glite_transfer_TransferJobSummary;
00047 typedef struct _glite_transfer_TransferJobSummary2  glite_transfer_TransferJobSummary2;
00048 typedef struct _glite_transfer_TransferParams       glite_transfer_TransferParams;
00049 typedef struct _glite_transfer_StringPair               glite_transfer_StringPair;
00050 typedef struct _glite_transfer_Roles                    glite_transfer_Roles;
00051 typedef struct _glite_transfer_VOShareElement           glite_transfer_VOShareElement;
00052 typedef struct _glite_transfer_VOLimitElement           glite_transfer_VOLimitElement;
00053 /* FileTransferStats and related structures */
00054 typedef struct _glite_transfer_TransferSnapshot         glite_transfer_TransferSnapshot;
00055 typedef struct _glite_transfer_TransferSummary          glite_transfer_TransferSummary;
00056 typedef struct _glite_transfer_TransferActivity         glite_transfer_TransferActivity;
00057 typedef struct _glite_transfer_TransferActivityPeriod   glite_transfer_TransferActivityPeriod;
00058 typedef struct _glite_transfer_TransferAgent            glite_transfer_TransferAgent;
00059 
00060 
00061 /**********************************************************************
00062  * Constants
00063  */
00064 
00068 typedef enum
00069 {
00070     GLITE_TRANSFER_EXCEPTION_AUTHORIZATION = -8,
00071     GLITE_TRANSFER_EXCEPTION_CANNOTCANCEL = -7,
00072     GLITE_TRANSFER_EXCEPTION_FILENOTFOUND = -6,
00073     GLITE_TRANSFER_EXCEPTION_INTERNAL = -5,
00074     GLITE_TRANSFER_EXCEPTION_INVALIDARGUMENT = -4,
00075     GLITE_TRANSFER_EXCEPTION_NOTEXISTS = -3,
00076     GLITE_TRANSFER_EXCEPTION_SERVICEBUSY = -2,
00077     GLITE_TRANSFER_EXCEPTION_TRANSFER = -1,
00078     GLITE_TRANSFER_ERROR_NONE,
00079     GLITE_TRANSFER_ERROR_UNKNOWN,
00080     GLITE_TRANSFER_ERROR_INVALIDARGUMENT,
00081     GLITE_TRANSFER_ERROR_OUTOFMEMORY,
00082     GLITE_TRANSFER_ERROR_SERVICEDISCOVERY,
00083     GLITE_TRANSFER_ERROR_SOAP
00084 } glite_transfer_errclass;
00085 
00092 typedef enum
00093 {
00094    GLITE_TRANSFER_FAILED = -6,
00095     GLITE_TRANSFER_CATALOGFAILED = -5,
00096     GLITE_TRANSFER_FINISHED_DIRTY = -4,
00097     GLITE_TRANSFER_UNKNOWN = -3,
00098     GLITE_TRANSFER_CANCELED = -2,
00099     GLITE_TRANSFER_TRANSFERFAILED = -1,
00100     GLITE_TRANSFER_FINISHED = 0,
00101     GLITE_TRANSFER_SUBMITTED,
00102     GLITE_TRANSFER_PENDING,
00103     GLITE_TRANSFER_ACTIVE,
00104     GLITE_TRANSFER_CANCELING,
00105     GLITE_TRANSFER_WAITING,
00106     GLITE_TRANSFER_HOLD,
00107     GLITE_TRANSFER_DONE,
00108     GLITE_TRANSFER_READY,
00109     GLITE_TRANSFER_DONEWITHERRORS,
00110     GLITE_TRANSFER_FINISHING,
00111     GLITE_TRANSFER_AWAITING_PRESTAGE,
00112     GLITE_TRANSFER_PRESTAGING,
00113     GLITE_TRANSFER_WAITING_PRESTAGE,
00114     GLITE_TRANSFER_WAITING_CATALOG_RESOLUTION,
00115     GLITE_TRANSFER_WAITING_CATALOG_REGISTRATION
00116 } glite_transfer_state;
00117 
00121 typedef enum
00122 {
00123     GLITE_CHANNEL_UNKNOWN = -1,
00124     GLITE_CHANNEL_ACTIVE,
00125     GLITE_CHANNEL_INACTIVE,
00126     GLITE_CHANNEL_DRAIN,
00127     GLITE_CHANNEL_STOPPED,
00128     GLITE_CHANNEL_HALTED,
00129    GLITE_CHANNEL_ARCHIVED,
00130    GLITE_CHANNEL_DELETED
00131 } glite_channel_state;
00132 
00133 
00134 /**********************************************************************
00135  * Data tytpe definitions
00136  */
00137 
00141 struct _glite_transfer_FileTransferStatus
00142 {
00143     char                *logicalName; 
00144     char                *sourceSURL; 
00145     char                *destSURL; 
00146     glite_transfer_state        transferFileState; 
00147     int             numFailures; 
00148     char                *reason; 
00149     char                *reason_class; 
00150     int             duration; 
00151 };
00152 
00156 struct _glite_transfer_JobStatus
00157 {
00158     char                *jobId; 
00159     glite_transfer_state        jobStatus; 
00160     char                *channelName; 
00161     char                *clientDN; 
00162     char                *reason; 
00163     char                            *voName; 
00164     struct timespec         submitTime; 
00165     int             numFiles; 
00166     int             priority; 
00167 };
00168 
00180 struct _glite_transfer_PlacementJob
00181 {
00182     char                **logicalFiles; 
00183     unsigned            __sizeLogicalFiles; 
00184     char                *sourceSE; 
00185     char                *destSE; 
00186     glite_transfer_TransferParams   *jobParams; 
00187     char                *credential; 
00188 };
00189 
00193 struct _glite_transfer_TransferJob
00194 {
00195     glite_transfer_TransferJobElement   **transferJobElements; 
00196     unsigned                __sizetransferJobElements; 
00197     glite_transfer_TransferParams       *jobParams; 
00198     char                    *credential; 
00199 };
00200 
00204 struct _glite_transfer_TransferJobElement
00205 {
00206     char                *source; 
00207     char                *dest; 
00208 };
00209 
00213 struct _glite_transfer_VOShareElement
00214 {
00215     char                *VOName; 
00216     char                *share; 
00217 };
00218 
00222 struct _glite_transfer_VOLimitElement
00223 {
00224     char                *VOName; 
00225     char                *limit; 
00226 };
00227 
00231 struct _glite_transfer_TransferJobSummary
00232 {
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 {
00254     glite_transfer_JobStatus    *jobStatus; 
00256     int             numDone; 
00257     int             numActive; 
00258     int             numPending; 
00259     int             numCanceled; 
00260     int             numCanceling; 
00261     int             numFailed; 
00262     int             numFinished; 
00263     int             numSubmitted; 
00264     int             numHold; 
00265     int             numWaiting; 
00266     int             numCatalogFailed; 
00267     int             numRestarted; 
00268    int            numReady;
00269    int            numFinishing;
00270    int            numAwaitingPrestage;
00271    int            numPrestaging;
00272    int            numWaitingCatalogRegistration;
00273    int            numWaitingCatalogResolution;
00274    int            numWaitingPrestage;
00275 };
00276 
00277 
00281 struct _glite_transfer_TransferParams
00282 {
00283     char                **keys; 
00284     char                **values; 
00285     unsigned            num; 
00286 };
00287 
00291 struct _glite_transfer_ChannelAuditEntry
00292 {
00293    int            auditID; 
00294     char                *channelName;
00295     char                *contact;
00296     int             nostreams;
00297     int             nofiles;
00298     int             bandwidth;
00299    char           *tcpBufferSize;
00300     int             nominalThroughput;
00301     glite_channel_state     channelState;
00302    char           *message;
00303    time_t         modificationTime;
00304    char           *adminDN;
00305    char           *ftsNode;
00306    char           *clientIP; 
00307 };
00308 
00309 
00313 struct _glite_transfer_Channel
00314 {
00315     char                *channelName; 
00316     char                *sourceSite; 
00317     char                *destSite; 
00318     char                *contact; 
00319     int             numberOfStreams; 
00320     int             numberOfFiles; 
00321     int             bandwidth; 
00322     int             nominalThroughput; 
00324     int                             __sizeVOShares; 
00326     glite_transfer_VOShareElement   **VOShares; 
00327     glite_channel_state     state; 
00328     int             urlCopyFirstTxmarkTo;   
00329     int             targetDirCheck; 
00331 };
00332 
00336 struct _glite_transfer_Channel2
00337 {
00338     char                *channelName; 
00339     char                *sourceSite; 
00340     char                *destSite; 
00341     char                *contact; 
00342    char           *tcpBufferSize; 
00343    char           *lastModifierDn; 
00344    char           *message; 
00345    time_t         lastModificationTime; 
00346     int             numberOfStreams; 
00347     int             numberOfFiles; 
00348     int             bandwidth; 
00349     int             nominalThroughput; 
00350     int                             __sizeVOShares; 
00351     glite_transfer_VOShareElement   **VOShares; 
00352    int                             __sizeVOLimits; 
00353    glite_transfer_VOLimitElement   **VOLimits; 
00354     glite_channel_state     state; 
00355     int             urlCopyFirstTxmarkTo;   
00356     int             targetDirCheck; 
00358 };
00359 
00363 struct _glite_transfer_StringPair
00364 {
00365     char                *string1; 
00366     char                *string2; 
00367 };
00368 
00372 struct _glite_transfer_Roles
00373 {
00374     char                *clientDN; 
00375     char                *serviceAdmin; 
00376     char                *submitter; 
00377     int             __sizeVOManager; 
00378     glite_transfer_StringPair   **VOManager; 
00379     int             __sizechannelManager; 
00380     glite_transfer_StringPair   **channelManager; 
00381 };
00382 
00386 struct _glite_transfer_TransferSnapshot
00387 {
00388     time_t              *time; 
00389     int             numSubmittedJobs;
00390     int             numPendingJobs;
00391     int             numActiveJobs;
00392     int             numDoneJobs;
00393     int             numHoldJobs;
00394     int             numFailedJobs;
00395     int             numCanceledJobs;
00396     int             numCancelingJobs;
00397     int             numFinishedDirtyJobs;
00398     int             numFinishedJobs;
00399     int             numSubmittedFiles;
00400     int             numPendingFiles;
00401     int             numActiveFiles;
00402     int             numDoneFiles;
00403     int             numWaitingFiles;
00404     int             numHoldFiles;
00405     int             numCancelingFiles;
00406     int             numCanceledFiles;
00407     int             numFailedFiles;
00408     int             numFinishedFiles;
00409     int             numCatalogFailedFiles;
00410 };
00411 
00415 struct _glite_transfer_TransferSummary
00416 {
00417     char                *channelName; 
00418     char                *voName; 
00419     int             __sizesnapshots; 
00420     glite_transfer_TransferSnapshot **snapshots; 
00421 };
00422 
00426 struct _glite_transfer_TransferActivityPeriod
00427 {
00428     time_t                  *startTime; /*< The start time of this period of measure. */
00429     time_t                  *endTime; /*< The end time of this period of measure. */
00430     float                   averageRate; /*< The average transfer rate during this period. */
00431     long                    bytesWritten; /*< The number of bytes written during this period. */
00432 };
00433 
00437 struct _glite_transfer_TransferActivity
00438 {
00439     char                    *channelName; 
00440     char                    *voName; 
00441     int                 __sizeactivityPeriods; 
00442     glite_transfer_TransferActivityPeriod   **activityPeriods; 
00443 };
00444 
00448 struct _glite_transfer_TransferAgent
00449 {
00450     char                    *name; 
00451     char                    *DN; 
00452     char                    *host; 
00453     char                    *type; 
00454     time_t                  *lastActive; 
00455     char                    *state; 
00456     char                    *version; 
00457     char                    *contact; 
00458 };
00459 
00464 /**********************************************************************
00465  * Function prototypes - library management functions
00466  */
00467 
00480 glite_transfer_ctx *glite_transfer_new(const char *endpoint);
00481 
00487 void glite_transfer_free(glite_transfer_ctx *ctx);
00488 
00496 void glite_transfer_add_sites(glite_transfer_ctx *ctx, const char *s, const char *d);
00497 
00507 const char *glite_transfer_get_error(glite_transfer_ctx *ctx);
00508 
00516 glite_transfer_errclass glite_transfer_get_errclass(glite_transfer_ctx *ctx);
00517 
00526 void glite_transfer_set_error(glite_transfer_ctx *ctx,
00527     glite_transfer_errclass errclass, const char *fmt, ...);
00528 
00537 void glite_transfer_set_verror(glite_transfer_ctx *ctx,
00538     glite_transfer_errclass errclass, const char *fmt, va_list ap);
00539 
00549 glite_transfer_state glite_transfer_state_parse(glite_transfer_ctx *ctx,
00550     const char *state);
00551 
00559 const char *glite_transfer_state_str(glite_transfer_state state);
00560 
00561 /**********************************************************************
00562  * Function prototypes - methods of transfer data types
00563  */
00564 
00565 /* XXX doc: for the following, ctx can be NULL if no error reporting is
00566  * required */
00567 
00578 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_new(glite_transfer_ctx *ctx,
00579     const char *source, const char *dest, glite_transfer_state state);
00586 void glite_transfer_FileTransferStatus_free(glite_transfer_ctx *ctx,
00587     glite_transfer_FileTransferStatus *status);
00595 void glite_transfer_FileTransferStatus_freeArray(glite_transfer_ctx *ctx,
00596     int nitems, glite_transfer_FileTransferStatus *status[]);
00605 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_clone(glite_transfer_ctx *ctx,
00606     const glite_transfer_FileTransferStatus *status);
00616 int glite_transfer_FileTransferStatus_setLogicalName(glite_transfer_ctx *ctx,
00617     glite_transfer_FileTransferStatus *status, const char *name);
00627 int glite_transfer_FileTransferStatus_setReason(glite_transfer_ctx *ctx,
00628     glite_transfer_FileTransferStatus *status, const char *reason);
00638 int glite_transfer_FileTransferStatus_setReasonClass(glite_transfer_ctx *ctx,
00639     glite_transfer_FileTransferStatus *status, const char *reasonClass);
00640 
00650 glite_transfer_JobStatus *glite_transfer_JobStatus_new(glite_transfer_ctx *ctx,
00651     const char *jobId, glite_transfer_state jobStatus);
00658 void glite_transfer_JobStatus_free(glite_transfer_ctx *ctx,
00659     glite_transfer_JobStatus *status);
00667 void glite_transfer_JobStatus_freeArray(glite_transfer_ctx *ctx, int nitems,
00668     glite_transfer_JobStatus *status[]);
00677 glite_transfer_JobStatus *glite_transfer_JobStatus_clone(glite_transfer_ctx *ctx,
00678     const glite_transfer_JobStatus *orig);
00679 
00689 glite_transfer_PlacementJob *glite_transfer_PlacementJob_new(glite_transfer_ctx *ctx,
00690     const char *sourceSE, const char *destSE);
00697 void glite_transfer_PlacementJob_free(glite_transfer_ctx *ctx,
00698     glite_transfer_PlacementJob *job);
00707 glite_transfer_PlacementJob *glite_transfer_PlacementJob_clone(glite_transfer_ctx *ctx,
00708     const glite_transfer_PlacementJob *orig);
00718 int glite_transfer_PlacementJob_setParams(glite_transfer_ctx *ctx,
00719     glite_transfer_PlacementJob *job,
00720     const glite_transfer_TransferParams *params);
00730 int glite_transfer_PlacementJob_add(glite_transfer_ctx *ctx,
00731     glite_transfer_PlacementJob *job, const char *logicalFile);
00732 
00742 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_new(glite_transfer_ctx *ctx,
00743     const char *src, const char *dst);
00750 void glite_transfer_TransferJobElement_free(glite_transfer_ctx *ctx,
00751     glite_transfer_TransferJobElement *elem);
00759 void glite_transfer_TransferJobElement_freeArray(glite_transfer_ctx *ctx,
00760     int nitems, glite_transfer_TransferJobElement *elems[]);
00769 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_clone(glite_transfer_ctx *ctx,
00770     const glite_transfer_TransferJobElement *orig);
00771 
00779 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_new(glite_transfer_ctx *ctx);
00780 glite_transfer_TransferJobSummary2 *glite_transfer_TransferJobSummary2_new(glite_transfer_ctx *ctx);
00787 void glite_transfer_TransferJobSummary_free(glite_transfer_ctx *ctx,
00788     glite_transfer_TransferJobSummary *summary);
00789 void glite_transfer_TransferJobSummary2_free(glite_transfer_ctx *ctx,
00790     glite_transfer_TransferJobSummary2 *summary);
00791 
00800 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_clone(glite_transfer_ctx *ctx,
00801     const glite_transfer_TransferJobSummary *orig);
00802 glite_transfer_TransferJobSummary2 *glite_transfer_TransferJobSummary2_clone(glite_transfer_ctx *ctx,
00803     const glite_transfer_TransferJobSummary2 *orig);
00804 
00812 glite_transfer_TransferJob *glite_transfer_TransferJob_new(glite_transfer_ctx *ctx);
00819 void glite_transfer_TransferJob_free(glite_transfer_ctx *ctx,
00820     glite_transfer_TransferJob *job);
00829 glite_transfer_TransferJob *glite_transfer_TransferJob_clone(glite_transfer_ctx *ctx,
00830     const glite_transfer_TransferJob *orig);
00840 int glite_transfer_TransferJob_setParams(glite_transfer_ctx *ctx,
00841     glite_transfer_TransferJob *job,
00842     const glite_transfer_TransferParams *params);
00853 int glite_transfer_TransferJob_add(glite_transfer_ctx *ctx,
00854     glite_transfer_TransferJob *job,
00855     const char *src, const char *dst);
00856 
00864 glite_transfer_TransferParams *glite_transfer_TransferParams_new(glite_transfer_ctx *ctx);
00871 void glite_transfer_TransferParams_free(glite_transfer_ctx *ctx,
00872     glite_transfer_TransferParams *params);
00881 glite_transfer_TransferParams *glite_transfer_TransferParams_clone(glite_transfer_ctx *ctx,
00882     const glite_transfer_TransferParams *orig);
00893 int glite_transfer_TransferParams_add(glite_transfer_ctx *ctx,
00894     glite_transfer_TransferParams *params, const char *key, const char *value);
00895 
00906 glite_transfer_Channel *glite_transfer_Channel_new(glite_transfer_ctx *ctx,
00907     const char *name, const char *domainA, const char *domainB);
00908 
00909 glite_transfer_Channel2 *glite_transfer_Channel2_new(glite_transfer_ctx *ctx,
00910    const char *name, const char *domainA, const char *domainB);
00911 
00918 void glite_transfer_Channel_free(glite_transfer_ctx *ctx,
00919     glite_transfer_Channel *channel);
00920 
00921 void glite_transfer_Channel2_free(glite_transfer_ctx *ctx,
00922    glite_transfer_Channel2 *channel2);
00923 
00932 glite_transfer_Channel *glite_transfer_Channel_clone(glite_transfer_ctx *ctx,
00933     const glite_transfer_Channel *orig);
00934 
00935 glite_transfer_Channel2 *glite_transfer_Channel2_clone(glite_transfer_ctx *ctx,
00936    const glite_transfer_Channel2 *orig);
00937 
00947 int glite_transfer_Channel_setContact(glite_transfer_ctx *ctx,
00948     glite_transfer_Channel *channel, const char *contact);
00958 int glite_transfer_Channel_setState(glite_transfer_ctx *ctx,
00959     glite_transfer_Channel *channel, glite_channel_state state);
00960 
00964 glite_transfer_Roles *glite_transfer_Roles_new(glite_transfer_ctx *ctx);
00965 
00966 /* Free an array of channel audit entries */
00967 void glite_transfer_ChannelAuditEntry_freeArray(glite_transfer_ctx *ctx,
00968     int nitems, glite_transfer_ChannelAuditEntry *ca[]);
00969 
00970 /* Create a new channel audit entry. */
00971 glite_transfer_ChannelAuditEntry *glite_transfer_ChannelAuditEntry_new(
00972     glite_transfer_ctx *ctx, const char *name);
00973 
00974 /* Free a channel audit entry. */
00975 void glite_transfer_ChannelAuditEntry_free(glite_transfer_ctx *ctx, 
00976     glite_transfer_ChannelAuditEntry *ca);
00977 
00978 /* Clone an existing channel audit entry. */
00979 glite_transfer_ChannelAuditEntry *glite_transfer_ChannelAuditEntry_clone(
00980     glite_transfer_ctx *ctx, const glite_transfer_ChannelAuditEntry *orig);
00981 
00982 #ifdef __cplusplus
00983 }
00984 #endif
00985 
00986 #endif /* GLITE_DATA_TRANSFER_SIMPLE_H */
The GLite Project. All rights reserved.