EGEE
Main Page | Modules | Data Structures | 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; 
00323     int                             __sizeVOShares; 
00324     glite_transfer_VOShareElement   **VOShares; 
00325     glite_channel_state     state; 
00326 };
00327 
00331 struct _glite_transfer_Channel2
00332 {
00333     char                *channelName; 
00334     char                *sourceSite; 
00335     char                *destSite; 
00336     char                *contact; 
00337    char           *tcpBufferSize; 
00338    char           *lastModifierDn; 
00339    char           *message; 
00340    time_t         lastModificationTime; 
00341     int             numberOfStreams; 
00342     int             numberOfFiles; 
00343     int             bandwidth; 
00344     int             nominalThroughput; 
00345     int                             __sizeVOShares; 
00346     glite_transfer_VOShareElement   **VOShares; 
00347    int                             __sizeVOLimits; 
00348    glite_transfer_VOLimitElement   **VOLimits; 
00349     glite_channel_state     state; 
00350 };
00351 
00355 struct _glite_transfer_StringPair
00356 {
00357     char                *string1; 
00358     char                *string2; 
00359 };
00360 
00364 struct _glite_transfer_Roles
00365 {
00366     char                *clientDN; 
00367     char                *serviceAdmin; 
00368     char                *submitter; 
00369     int             __sizeVOManager; 
00370     glite_transfer_StringPair   **VOManager; 
00371     int             __sizechannelManager; 
00372     glite_transfer_StringPair   **channelManager; 
00373 };
00374 
00378 struct _glite_transfer_TransferSnapshot
00379 {
00380     time_t              *time; 
00381     int             numSubmittedJobs;
00382     int             numPendingJobs;
00383     int             numActiveJobs;
00384     int             numDoneJobs;
00385     int             numHoldJobs;
00386     int             numFailedJobs;
00387     int             numCanceledJobs;
00388     int             numCancelingJobs;
00389     int             numFinishedDirtyJobs;
00390     int             numFinishedJobs;
00391     int             numSubmittedFiles;
00392     int             numPendingFiles;
00393     int             numActiveFiles;
00394     int             numDoneFiles;
00395     int             numWaitingFiles;
00396     int             numHoldFiles;
00397     int             numCancelingFiles;
00398     int             numCanceledFiles;
00399     int             numFailedFiles;
00400     int             numFinishedFiles;
00401     int             numCatalogFailedFiles;
00402 };
00403 
00407 struct _glite_transfer_TransferSummary
00408 {
00409     char                *channelName; 
00410     char                *voName; 
00411     int             __sizesnapshots; 
00412     glite_transfer_TransferSnapshot **snapshots; 
00413 };
00414 
00418 struct _glite_transfer_TransferActivityPeriod
00419 {
00420     time_t                  *startTime; /*< The start time of this period of measure. */
00421     time_t                  *endTime; /*< The end time of this period of measure. */
00422     float                   averageRate; /*< The average transfer rate during this period. */
00423     long                    bytesWritten; /*< The number of bytes written during this period. */
00424 };
00425 
00429 struct _glite_transfer_TransferActivity
00430 {
00431     char                    *channelName; 
00432     char                    *voName; 
00433     int                 __sizeactivityPeriods; 
00434     glite_transfer_TransferActivityPeriod   **activityPeriods; 
00435 };
00436 
00440 struct _glite_transfer_TransferAgent
00441 {
00442     char                    *name; 
00443     char                    *DN; 
00444     char                    *host; 
00445     char                    *type; 
00446     time_t                  *lastActive; 
00447     char                    *state; 
00448     char                    *version; 
00449     char                    *contact; 
00450 };
00451 
00456 /**********************************************************************
00457  * Function prototypes - library management functions
00458  */
00459 
00472 glite_transfer_ctx *glite_transfer_new(const char *endpoint);
00473 
00479 void glite_transfer_free(glite_transfer_ctx *ctx);
00480 
00488 void glite_transfer_add_sites(glite_transfer_ctx *ctx, const char *s, const char *d);
00489 
00499 const char *glite_transfer_get_error(glite_transfer_ctx *ctx);
00500 
00508 glite_transfer_errclass glite_transfer_get_errclass(glite_transfer_ctx *ctx);
00509 
00518 void glite_transfer_set_error(glite_transfer_ctx *ctx,
00519     glite_transfer_errclass errclass, const char *fmt, ...);
00520 
00529 void glite_transfer_set_verror(glite_transfer_ctx *ctx,
00530     glite_transfer_errclass errclass, const char *fmt, va_list ap);
00531 
00541 glite_transfer_state glite_transfer_state_parse(glite_transfer_ctx *ctx,
00542     const char *state);
00543 
00551 const char *glite_transfer_state_str(glite_transfer_state state);
00552 
00553 /**********************************************************************
00554  * Function prototypes - methods of transfer data types
00555  */
00556 
00557 /* XXX doc: for the following, ctx can be NULL if no error reporting is
00558  * required */
00559 
00570 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_new(glite_transfer_ctx *ctx,
00571     const char *source, const char *dest, glite_transfer_state state);
00578 void glite_transfer_FileTransferStatus_free(glite_transfer_ctx *ctx,
00579     glite_transfer_FileTransferStatus *status);
00587 void glite_transfer_FileTransferStatus_freeArray(glite_transfer_ctx *ctx,
00588     int nitems, glite_transfer_FileTransferStatus *status[]);
00597 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_clone(glite_transfer_ctx *ctx,
00598     const glite_transfer_FileTransferStatus *status);
00608 int glite_transfer_FileTransferStatus_setLogicalName(glite_transfer_ctx *ctx,
00609     glite_transfer_FileTransferStatus *status, const char *name);
00619 int glite_transfer_FileTransferStatus_setReason(glite_transfer_ctx *ctx,
00620     glite_transfer_FileTransferStatus *status, const char *reason);
00630 int glite_transfer_FileTransferStatus_setReasonClass(glite_transfer_ctx *ctx,
00631     glite_transfer_FileTransferStatus *status, const char *reasonClass);
00632 
00642 glite_transfer_JobStatus *glite_transfer_JobStatus_new(glite_transfer_ctx *ctx,
00643     const char *jobId, glite_transfer_state jobStatus);
00650 void glite_transfer_JobStatus_free(glite_transfer_ctx *ctx,
00651     glite_transfer_JobStatus *status);
00659 void glite_transfer_JobStatus_freeArray(glite_transfer_ctx *ctx, int nitems,
00660     glite_transfer_JobStatus *status[]);
00669 glite_transfer_JobStatus *glite_transfer_JobStatus_clone(glite_transfer_ctx *ctx,
00670     const glite_transfer_JobStatus *orig);
00671 
00681 glite_transfer_PlacementJob *glite_transfer_PlacementJob_new(glite_transfer_ctx *ctx,
00682     const char *sourceSE, const char *destSE);
00689 void glite_transfer_PlacementJob_free(glite_transfer_ctx *ctx,
00690     glite_transfer_PlacementJob *job);
00699 glite_transfer_PlacementJob *glite_transfer_PlacementJob_clone(glite_transfer_ctx *ctx,
00700     const glite_transfer_PlacementJob *orig);
00710 int glite_transfer_PlacementJob_setParams(glite_transfer_ctx *ctx,
00711     glite_transfer_PlacementJob *job,
00712     const glite_transfer_TransferParams *params);
00722 int glite_transfer_PlacementJob_add(glite_transfer_ctx *ctx,
00723     glite_transfer_PlacementJob *job, const char *logicalFile);
00724 
00734 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_new(glite_transfer_ctx *ctx,
00735     const char *src, const char *dst);
00742 void glite_transfer_TransferJobElement_free(glite_transfer_ctx *ctx,
00743     glite_transfer_TransferJobElement *elem);
00751 void glite_transfer_TransferJobElement_freeArray(glite_transfer_ctx *ctx,
00752     int nitems, glite_transfer_TransferJobElement *elems[]);
00761 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_clone(glite_transfer_ctx *ctx,
00762     const glite_transfer_TransferJobElement *orig);
00763 
00771 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_new(glite_transfer_ctx *ctx);
00772 glite_transfer_TransferJobSummary2 *glite_transfer_TransferJobSummary2_new(glite_transfer_ctx *ctx);
00779 void glite_transfer_TransferJobSummary_free(glite_transfer_ctx *ctx,
00780     glite_transfer_TransferJobSummary *summary);
00781 void glite_transfer_TransferJobSummary2_free(glite_transfer_ctx *ctx,
00782     glite_transfer_TransferJobSummary2 *summary);
00783 
00792 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_clone(glite_transfer_ctx *ctx,
00793     const glite_transfer_TransferJobSummary *orig);
00794 glite_transfer_TransferJobSummary2 *glite_transfer_TransferJobSummary2_clone(glite_transfer_ctx *ctx,
00795     const glite_transfer_TransferJobSummary2 *orig);
00796 
00804 glite_transfer_TransferJob *glite_transfer_TransferJob_new(glite_transfer_ctx *ctx);
00811 void glite_transfer_TransferJob_free(glite_transfer_ctx *ctx,
00812     glite_transfer_TransferJob *job);
00821 glite_transfer_TransferJob *glite_transfer_TransferJob_clone(glite_transfer_ctx *ctx,
00822     const glite_transfer_TransferJob *orig);
00832 int glite_transfer_TransferJob_setParams(glite_transfer_ctx *ctx,
00833     glite_transfer_TransferJob *job,
00834     const glite_transfer_TransferParams *params);
00845 int glite_transfer_TransferJob_add(glite_transfer_ctx *ctx,
00846     glite_transfer_TransferJob *job,
00847     const char *src, const char *dst);
00848 
00856 glite_transfer_TransferParams *glite_transfer_TransferParams_new(glite_transfer_ctx *ctx);
00863 void glite_transfer_TransferParams_free(glite_transfer_ctx *ctx,
00864     glite_transfer_TransferParams *params);
00873 glite_transfer_TransferParams *glite_transfer_TransferParams_clone(glite_transfer_ctx *ctx,
00874     const glite_transfer_TransferParams *orig);
00885 int glite_transfer_TransferParams_add(glite_transfer_ctx *ctx,
00886     glite_transfer_TransferParams *params, const char *key, const char *value);
00887 
00898 glite_transfer_Channel *glite_transfer_Channel_new(glite_transfer_ctx *ctx,
00899     const char *name, const char *domainA, const char *domainB);
00900 
00901 glite_transfer_Channel2 *glite_transfer_Channel2_new(glite_transfer_ctx *ctx,
00902    const char *name, const char *domainA, const char *domainB);
00903 
00910 void glite_transfer_Channel_free(glite_transfer_ctx *ctx,
00911     glite_transfer_Channel *channel);
00912 
00913 void glite_transfer_Channel2_free(glite_transfer_ctx *ctx,
00914    glite_transfer_Channel2 *channel2);
00915 
00924 glite_transfer_Channel *glite_transfer_Channel_clone(glite_transfer_ctx *ctx,
00925     const glite_transfer_Channel *orig);
00926 
00927 glite_transfer_Channel2 *glite_transfer_Channel2_clone(glite_transfer_ctx *ctx,
00928    const glite_transfer_Channel2 *orig);
00929 
00939 int glite_transfer_Channel_setContact(glite_transfer_ctx *ctx,
00940     glite_transfer_Channel *channel, const char *contact);
00950 int glite_transfer_Channel_setState(glite_transfer_ctx *ctx,
00951     glite_transfer_Channel *channel, glite_channel_state state);
00952 
00956 glite_transfer_Roles *glite_transfer_Roles_new(glite_transfer_ctx *ctx);
00957 
00958 /* Free an array of channel audit entries */
00959 void glite_transfer_ChannelAuditEntry_freeArray(glite_transfer_ctx *ctx,
00960     int nitems, glite_transfer_ChannelAuditEntry *ca[]);
00961 
00962 /* Create a new channel audit entry. */
00963 glite_transfer_ChannelAuditEntry *glite_transfer_ChannelAuditEntry_new(
00964     glite_transfer_ctx *ctx, const char *name);
00965 
00966 /* Free a channel audit entry. */
00967 void glite_transfer_ChannelAuditEntry_free(glite_transfer_ctx *ctx, 
00968     glite_transfer_ChannelAuditEntry *ca);
00969 
00970 /* Clone an existing channel audit entry. */
00971 glite_transfer_ChannelAuditEntry *glite_transfer_ChannelAuditEntry_clone(
00972     glite_transfer_ctx *ctx, const glite_transfer_ChannelAuditEntry *orig);
00973 
00974 #ifdef __cplusplus
00975 }
00976 #endif
00977 
00978 #endif /* GLITE_DATA_TRANSFER_SIMPLE_H */
The GLite Project. All rights reserved.