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_FileTransferStatus   glite_transfer_FileTransferStatus;
00040 typedef struct _glite_transfer_JobStatus        glite_transfer_JobStatus;
00041 typedef struct _glite_transfer_PlacementJob     glite_transfer_PlacementJob;
00042 typedef struct _glite_transfer_TransferJob      glite_transfer_TransferJob;
00043 typedef struct _glite_transfer_TransferJobElement   glite_transfer_TransferJobElement;
00044 typedef struct _glite_transfer_TransferJobSummary   glite_transfer_TransferJobSummary;
00045 typedef struct _glite_transfer_TransferParams       glite_transfer_TransferParams;
00046 typedef struct _glite_transfer_StringPair               glite_transfer_StringPair;
00047 typedef struct _glite_transfer_Roles                    glite_transfer_Roles;
00048 typedef struct _glite_transfer_VOShareElement           glite_transfer_VOShareElement;
00049 /* FileTransferStats and related structures */
00050 typedef struct _glite_transfer_TransferSnapshot         glite_transfer_TransferSnapshot;
00051 typedef struct _glite_transfer_TransferSummary          glite_transfer_TransferSummary;
00052 typedef struct _glite_transfer_TransferActivity         glite_transfer_TransferActivity;
00053 typedef struct _glite_transfer_TransferActivityPeriod   glite_transfer_TransferActivityPeriod;
00054 typedef struct _glite_transfer_TransferAgent            glite_transfer_TransferAgent;
00055 
00056 
00057 /**********************************************************************
00058  * Constants
00059  */
00060 
00064 typedef enum
00065 {
00066     GLITE_TRANSFER_EXCEPTION_AUTHORIZATION = -8,
00067     GLITE_TRANSFER_EXCEPTION_CANNOTCANCEL = -7,
00068     GLITE_TRANSFER_EXCEPTION_FILENOTFOUND = -6,
00069     GLITE_TRANSFER_EXCEPTION_INTERNAL = -5,
00070     GLITE_TRANSFER_EXCEPTION_INVALIDARGUMENT = -4,
00071     GLITE_TRANSFER_EXCEPTION_NOTEXISTS = -3,
00072     GLITE_TRANSFER_EXCEPTION_SERVICEBUSY = -2,
00073     GLITE_TRANSFER_EXCEPTION_TRANSFER = -1,
00074     GLITE_TRANSFER_ERROR_NONE,
00075     GLITE_TRANSFER_ERROR_UNKNOWN,
00076     GLITE_TRANSFER_ERROR_INVALIDARGUMENT,
00077     GLITE_TRANSFER_ERROR_OUTOFMEMORY,
00078     GLITE_TRANSFER_ERROR_SERVICEDISCOVERY,
00079     GLITE_TRANSFER_ERROR_SOAP
00080 } glite_transfer_errclass;
00081 
00088 typedef enum
00089 {
00090    GLITE_TRANSFER_FAILED = -6,
00091     GLITE_TRANSFER_CATALOGFAILED = -5,
00092     GLITE_TRANSFER_FINISHED_DIRTY = -4,
00093     GLITE_TRANSFER_UNKNOWN = -3,
00094     GLITE_TRANSFER_CANCELED = -2,
00095     GLITE_TRANSFER_TRANSFERFAILED = -1,
00096     GLITE_TRANSFER_FINISHED = 0,
00097     GLITE_TRANSFER_SUBMITTED,
00098     GLITE_TRANSFER_PENDING,
00099     GLITE_TRANSFER_ACTIVE,
00100     GLITE_TRANSFER_CANCELING,
00101     GLITE_TRANSFER_WAITING,
00102     GLITE_TRANSFER_HOLD,
00103     GLITE_TRANSFER_DONE,
00104     GLITE_TRANSFER_READY,
00105     GLITE_TRANSFER_DONEWITHERRORS,
00106     GLITE_TRANSFER_FINISHING,
00107     GLITE_TRANSFER_AWAITING_PRESTAGE,
00108     GLITE_TRANSFER_PRESTAGING,
00109     GLITE_TRANSFER_WAITING_PRESTAGE,
00110     GLITE_TRANSFER_WAITING_CATALOG_RESOLUTION,
00111     GLITE_TRANSFER_WAITING_CATALOG_REGISTRATION
00112 } glite_transfer_state;
00113 
00117 typedef enum
00118 {
00119     GLITE_CHANNEL_UNKNOWN = -1,
00120     GLITE_CHANNEL_ACTIVE,
00121     GLITE_CHANNEL_INACTIVE,
00122     GLITE_CHANNEL_DRAIN,
00123     GLITE_CHANNEL_STOPPED,
00124     GLITE_CHANNEL_HALTED
00125 } glite_channel_state;
00126 
00127 
00128 /**********************************************************************
00129  * Data tytpe definitions
00130  */
00131 
00135 struct _glite_transfer_FileTransferStatus
00136 {
00137     char                *logicalName; 
00138     char                *sourceSURL; 
00139     char                *destSURL; 
00140     glite_transfer_state        transferFileState; 
00141     int             numFailures; 
00142     char                *reason; 
00143     char                *reason_class; 
00144     int             duration; 
00145 };
00146 
00150 struct _glite_transfer_JobStatus
00151 {
00152     char                *jobId; 
00153     glite_transfer_state        jobStatus; 
00154     char                *channelName; 
00155     char                *clientDN; 
00156     char                *reason; 
00157     char                            *voName; 
00158     struct timespec         submitTime; 
00159     int             numFiles; 
00160     int             priority; 
00161 };
00162 
00174 struct _glite_transfer_PlacementJob
00175 {
00176     char                **logicalFiles; 
00177     unsigned            __sizeLogicalFiles; 
00178     char                *sourceSE; 
00179     char                *destSE; 
00180     glite_transfer_TransferParams   *jobParams; 
00181     char                *credential; 
00182 };
00183 
00187 struct _glite_transfer_TransferJob
00188 {
00189     glite_transfer_TransferJobElement   **transferJobElements; 
00190     unsigned                __sizetransferJobElements; 
00191     glite_transfer_TransferParams       *jobParams; 
00192     char                    *credential; 
00193 };
00194 
00198 struct _glite_transfer_TransferJobElement
00199 {
00200     char                *source; 
00201     char                *dest; 
00202 };
00203 
00207 struct _glite_transfer_VOShareElement
00208 {
00209     char                *VOName; 
00210     char                *share; 
00211 };
00212 
00216 struct _glite_transfer_TransferJobSummary
00217 {
00218     glite_transfer_JobStatus    *jobStatus; 
00220     int             numDone; 
00221     int             numActive; 
00222     int             numPending; 
00223     int             numCanceled; 
00224     int             numCanceling; 
00225     int             numFailed; 
00226     int             numFinished; 
00227     int             numSubmitted; 
00228     int             numHold; 
00229     int             numWaiting; 
00230     int             numCatalogFailed; 
00231     int             numRestarted; 
00232 };
00233 
00237 struct _glite_transfer_TransferParams
00238 {
00239     char                **keys; 
00240     char                **values; 
00241     unsigned            num; 
00242 };
00243 
00247 struct _glite_transfer_Channel
00248 {
00249     char                *channelName; 
00250     char                *sourceSite; 
00251     char                *destSite; 
00252     char                *contact; 
00253     int             numberOfStreams; 
00254     int             numberOfFiles; 
00255     int             bandwidth; 
00256     int             nominalThroughput; 
00257     int                             __sizeVOShares; 
00258     glite_transfer_VOShareElement   **VOShares; 
00259     glite_channel_state     state; 
00260 };
00261 
00265 struct _glite_transfer_StringPair
00266 {
00267     char                *string1; 
00268     char                *string2; 
00269 };
00270 
00274 struct _glite_transfer_Roles
00275 {
00276     char                *clientDN; 
00277     char                *serviceAdmin; 
00278     char                *submitter; 
00279     int             __sizeVOManager; 
00280     glite_transfer_StringPair   **VOManager; 
00281     int             __sizechannelManager; 
00282     glite_transfer_StringPair   **channelManager; 
00283 };
00284 
00288 struct _glite_transfer_TransferSnapshot
00289 {
00290     time_t              *time; 
00291     int             numSubmittedJobs;
00292     int             numPendingJobs;
00293     int             numActiveJobs;
00294     int             numDoneJobs;
00295     int             numHoldJobs;
00296     int             numFailedJobs;
00297     int             numCanceledJobs;
00298     int             numCancelingJobs;
00299     int             numFinishedDirtyJobs;
00300     int             numFinishedJobs;
00301     int             numSubmittedFiles;
00302     int             numPendingFiles;
00303     int             numActiveFiles;
00304     int             numDoneFiles;
00305     int             numWaitingFiles;
00306     int             numHoldFiles;
00307     int             numCancelingFiles;
00308     int             numCanceledFiles;
00309     int             numFailedFiles;
00310     int             numFinishedFiles;
00311     int             numCatalogFailedFiles;
00312 };
00313 
00317 struct _glite_transfer_TransferSummary
00318 {
00319     char                *channelName; 
00320     char                *voName; 
00321     int             __sizesnapshots; 
00322     glite_transfer_TransferSnapshot **snapshots; 
00323 };
00324 
00328 struct _glite_transfer_TransferActivityPeriod
00329 {
00330     time_t                  *startTime; /*< The start time of this period of measure. */
00331     time_t                  *endTime; /*< The end time of this period of measure. */
00332     float                   averageRate; /*< The average transfer rate during this period. */
00333     long                    bytesWritten; /*< The number of bytes written during this period. */
00334 };
00335 
00339 struct _glite_transfer_TransferActivity
00340 {
00341     char                    *channelName; 
00342     char                    *voName; 
00343     int                 __sizeactivityPeriods; 
00344     glite_transfer_TransferActivityPeriod   **activityPeriods; 
00345 };
00346 
00350 struct _glite_transfer_TransferAgent
00351 {
00352     char                    *name; 
00353     char                    *DN; 
00354     char                    *host; 
00355     char                    *type; 
00356     time_t                  *lastActive; 
00357     char                    *state; 
00358     char                    *version; 
00359     char                    *contact; 
00360 };
00361 
00366 /**********************************************************************
00367  * Function prototypes - library management functions
00368  */
00369 
00382 glite_transfer_ctx *glite_transfer_new(const char *endpoint);
00383 
00389 void glite_transfer_free(glite_transfer_ctx *ctx);
00390 
00398 void glite_transfer_add_sites(glite_transfer_ctx *ctx, const char *s, const char *d);
00399 
00409 const char *glite_transfer_get_error(glite_transfer_ctx *ctx);
00410 
00418 glite_transfer_errclass glite_transfer_get_errclass(glite_transfer_ctx *ctx);
00419 
00428 void glite_transfer_set_error(glite_transfer_ctx *ctx,
00429     glite_transfer_errclass errclass, const char *fmt, ...);
00430 
00439 void glite_transfer_set_verror(glite_transfer_ctx *ctx,
00440     glite_transfer_errclass errclass, const char *fmt, va_list ap);
00441 
00451 glite_transfer_state glite_transfer_state_parse(glite_transfer_ctx *ctx,
00452     const char *state);
00453 
00461 const char *glite_transfer_state_str(glite_transfer_state state);
00462 
00463 /**********************************************************************
00464  * Function prototypes - methods of transfer data types
00465  */
00466 
00467 /* XXX doc: for the following, ctx can be NULL if no error reporting is
00468  * required */
00469 
00480 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_new(glite_transfer_ctx *ctx,
00481     const char *source, const char *dest, glite_transfer_state state);
00488 void glite_transfer_FileTransferStatus_free(glite_transfer_ctx *ctx,
00489     glite_transfer_FileTransferStatus *status);
00497 void glite_transfer_FileTransferStatus_freeArray(glite_transfer_ctx *ctx,
00498     int nitems, glite_transfer_FileTransferStatus *status[]);
00507 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_clone(glite_transfer_ctx *ctx,
00508     const glite_transfer_FileTransferStatus *status);
00518 int glite_transfer_FileTransferStatus_setLogicalName(glite_transfer_ctx *ctx,
00519     glite_transfer_FileTransferStatus *status, const char *name);
00529 int glite_transfer_FileTransferStatus_setReason(glite_transfer_ctx *ctx,
00530     glite_transfer_FileTransferStatus *status, const char *reason);
00540 int glite_transfer_FileTransferStatus_setReasonClass(glite_transfer_ctx *ctx,
00541     glite_transfer_FileTransferStatus *status, const char *reasonClass);
00542 
00552 glite_transfer_JobStatus *glite_transfer_JobStatus_new(glite_transfer_ctx *ctx,
00553     const char *jobId, glite_transfer_state jobStatus);
00560 void glite_transfer_JobStatus_free(glite_transfer_ctx *ctx,
00561     glite_transfer_JobStatus *status);
00569 void glite_transfer_JobStatus_freeArray(glite_transfer_ctx *ctx, int nitems,
00570     glite_transfer_JobStatus *status[]);
00579 glite_transfer_JobStatus *glite_transfer_JobStatus_clone(glite_transfer_ctx *ctx,
00580     const glite_transfer_JobStatus *orig);
00581 
00591 glite_transfer_PlacementJob *glite_transfer_PlacementJob_new(glite_transfer_ctx *ctx,
00592     const char *sourceSE, const char *destSE);
00599 void glite_transfer_PlacementJob_free(glite_transfer_ctx *ctx,
00600     glite_transfer_PlacementJob *job);
00609 glite_transfer_PlacementJob *glite_transfer_PlacementJob_clone(glite_transfer_ctx *ctx,
00610     const glite_transfer_PlacementJob *orig);
00620 int glite_transfer_PlacementJob_setParams(glite_transfer_ctx *ctx,
00621     glite_transfer_PlacementJob *job,
00622     const glite_transfer_TransferParams *params);
00632 int glite_transfer_PlacementJob_add(glite_transfer_ctx *ctx,
00633     glite_transfer_PlacementJob *job, const char *logicalFile);
00634 
00644 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_new(glite_transfer_ctx *ctx,
00645     const char *src, const char *dst);
00652 void glite_transfer_TransferJobElement_free(glite_transfer_ctx *ctx,
00653     glite_transfer_TransferJobElement *elem);
00661 void glite_transfer_TransferJobElement_freeArray(glite_transfer_ctx *ctx,
00662     int nitems, glite_transfer_TransferJobElement *elems[]);
00671 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_clone(glite_transfer_ctx *ctx,
00672     const glite_transfer_TransferJobElement *orig);
00673 
00681 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_new(glite_transfer_ctx *ctx);
00688 void glite_transfer_TransferJobSummary_free(glite_transfer_ctx *ctx,
00689     glite_transfer_TransferJobSummary *summary);
00698 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_clone(glite_transfer_ctx *ctx,
00699     const glite_transfer_TransferJobSummary *orig);
00700 
00708 glite_transfer_TransferJob *glite_transfer_TransferJob_new(glite_transfer_ctx *ctx);
00715 void glite_transfer_TransferJob_free(glite_transfer_ctx *ctx,
00716     glite_transfer_TransferJob *job);
00725 glite_transfer_TransferJob *glite_transfer_TransferJob_clone(glite_transfer_ctx *ctx,
00726     const glite_transfer_TransferJob *orig);
00736 int glite_transfer_TransferJob_setParams(glite_transfer_ctx *ctx,
00737     glite_transfer_TransferJob *job,
00738     const glite_transfer_TransferParams *params);
00749 int glite_transfer_TransferJob_add(glite_transfer_ctx *ctx,
00750     glite_transfer_TransferJob *job,
00751     const char *src, const char *dst);
00752 
00760 glite_transfer_TransferParams *glite_transfer_TransferParams_new(glite_transfer_ctx *ctx);
00767 void glite_transfer_TransferParams_free(glite_transfer_ctx *ctx,
00768     glite_transfer_TransferParams *params);
00777 glite_transfer_TransferParams *glite_transfer_TransferParams_clone(glite_transfer_ctx *ctx,
00778     const glite_transfer_TransferParams *orig);
00789 int glite_transfer_TransferParams_add(glite_transfer_ctx *ctx,
00790     glite_transfer_TransferParams *params, const char *key, const char *value);
00791 
00802 glite_transfer_Channel *glite_transfer_Channel_new(glite_transfer_ctx *ctx,
00803     const char *name, const char *domainA, const char *domainB);
00810 void glite_transfer_Channel_free(glite_transfer_ctx *ctx,
00811     glite_transfer_Channel *channel);
00820 glite_transfer_Channel *glite_transfer_Channel_clone(glite_transfer_ctx *ctx,
00821     const glite_transfer_Channel *orig);
00831 int glite_transfer_Channel_setContact(glite_transfer_ctx *ctx,
00832     glite_transfer_Channel *channel, const char *contact);
00842 int glite_transfer_Channel_setState(glite_transfer_ctx *ctx,
00843     glite_transfer_Channel *channel, glite_channel_state state);
00844 
00848 glite_transfer_Roles *glite_transfer_Roles_new(glite_transfer_ctx *ctx);
00849 
00850 #ifdef __cplusplus
00851 }
00852 #endif
00853 
00854 #endif /* GLITE_DATA_TRANSFER_SIMPLE_H */
The GLite Project. All rights reserved.