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 /**********************************************************************
00025  * Data type declarations
00026  */
00027 
00028 /* Opaque data structure used by the library */
00029 typedef struct _glite_transfer_ctx          glite_transfer_ctx;
00030 
00035 typedef struct _glite_transfer_Channel          glite_transfer_Channel;
00036 typedef struct _glite_transfer_FileTransferStatus   glite_transfer_FileTransferStatus;
00037 typedef struct _glite_transfer_JobStatus        glite_transfer_JobStatus;
00038 typedef struct _glite_transfer_PlacementJob     glite_transfer_PlacementJob;
00039 typedef struct _glite_transfer_TransferJob      glite_transfer_TransferJob;
00040 typedef struct _glite_transfer_TransferJobElement   glite_transfer_TransferJobElement;
00041 typedef struct _glite_transfer_TransferJobSummary   glite_transfer_TransferJobSummary;
00042 typedef struct _glite_transfer_TransferParams       glite_transfer_TransferParams;
00043 typedef struct _glite_transfer_StringPair               glite_transfer_StringPair;
00044 typedef struct _glite_transfer_Roles                    glite_transfer_Roles;
00045 typedef struct _glite_transfer_VOShareElement           glite_transfer_VOShareElement;
00046 /* FileTransferStats and related structures */
00047 typedef struct _glite_transfer_TransferSnapshot         glite_transfer_TransferSnapshot;
00048 typedef struct _glite_transfer_TransferSummary          glite_transfer_TransferSummary;
00049 typedef struct _glite_transfer_TransferActivity         glite_transfer_TransferActivity;
00050 typedef struct _glite_transfer_TransferActivityPeriod   glite_transfer_TransferActivityPeriod;
00051 typedef struct _glite_transfer_TransferAgent            glite_transfer_TransferAgent;
00052 
00053 
00054 /**********************************************************************
00055  * Constants
00056  */
00057 
00061 typedef enum
00062 {
00063     GLITE_TRANSFER_EXCEPTION_AUTHORIZATION = -8,
00064     GLITE_TRANSFER_EXCEPTION_CANNOTCANCEL = -7,
00065     GLITE_TRANSFER_EXCEPTION_FILENOTFOUND = -6,
00066     GLITE_TRANSFER_EXCEPTION_INTERNAL = -5,
00067     GLITE_TRANSFER_EXCEPTION_INVALIDARGUMENT = -4,
00068     GLITE_TRANSFER_EXCEPTION_NOTEXISTS = -3,
00069     GLITE_TRANSFER_EXCEPTION_SERVICEBUSY = -2,
00070     GLITE_TRANSFER_EXCEPTION_TRANSFER = -1,
00071     GLITE_TRANSFER_ERROR_NONE,
00072     GLITE_TRANSFER_ERROR_UNKNOWN,
00073     GLITE_TRANSFER_ERROR_INVALIDARGUMENT,
00074     GLITE_TRANSFER_ERROR_OUTOFMEMORY,
00075     GLITE_TRANSFER_ERROR_SERVICEDISCOVERY,
00076     GLITE_TRANSFER_ERROR_SOAP
00077 } glite_transfer_errclass;
00078 
00085 typedef enum
00086 {
00087     GLITE_TRANSFER_CATALOGFAILED = -5,
00088     GLITE_TRANSFER_FINISHED_DIRTY = -4,
00089     GLITE_TRANSFER_UNKNOWN = -3,
00090     GLITE_TRANSFER_CANCELED = -2,
00091     GLITE_TRANSFER_TRANSFERFAILED = -1,
00092     GLITE_TRANSFER_FINISHED = 0,
00093     GLITE_TRANSFER_SUBMITTED,
00094     GLITE_TRANSFER_PENDING,
00095     GLITE_TRANSFER_ACTIVE,
00096     GLITE_TRANSFER_CANCELING,
00097     GLITE_TRANSFER_WAITING,
00098     GLITE_TRANSFER_HOLD,
00099     GLITE_TRANSFER_DONE
00100 } glite_transfer_state;
00101 
00105 typedef enum
00106 {
00107     GLITE_CHANNEL_UNKNOWN = -1,
00108     GLITE_CHANNEL_ACTIVE,
00109     GLITE_CHANNEL_INACTIVE,
00110     GLITE_CHANNEL_DRAIN,
00111     GLITE_CHANNEL_STOPPED,
00112     GLITE_CHANNEL_HALTED
00113 } glite_channel_state;
00114 
00115 
00116 /**********************************************************************
00117  * Data tytpe definitions
00118  */
00119 
00123 struct _glite_transfer_FileTransferStatus
00124 {
00125     char                *logicalName; 
00126     char                *sourceSURL; 
00127     char                *destSURL; 
00128     glite_transfer_state        transferFileState; 
00129     int             numFailures; 
00130     char                *reason; 
00131     char                *reason_class; 
00132     int             duration; 
00133 };
00134 
00138 struct _glite_transfer_JobStatus
00139 {
00140     char                *jobId; 
00141     glite_transfer_state        jobStatus; 
00142     char                *channelName; 
00143     char                *clientDN; 
00144     char                *reason; 
00145     char                            *voName; 
00146     struct timespec         submitTime; 
00147     int             numFiles; 
00148     int             priority; 
00149 };
00150 
00162 struct _glite_transfer_PlacementJob
00163 {
00164     char                **logicalFiles; 
00165     unsigned            __sizeLogicalFiles; 
00166     char                *sourceSE; 
00167     char                *destSE; 
00168     glite_transfer_TransferParams   *jobParams; 
00169     char                *credential; 
00170 };
00171 
00175 struct _glite_transfer_TransferJob
00176 {
00177     glite_transfer_TransferJobElement   **transferJobElements; 
00178     unsigned                __sizetransferJobElements; 
00179     glite_transfer_TransferParams       *jobParams; 
00180     char                    *credential; 
00181 };
00182 
00186 struct _glite_transfer_TransferJobElement
00187 {
00188     char                *source; 
00189     char                *dest; 
00190 };
00191 
00195 struct _glite_transfer_VOShareElement
00196 {
00197     char                *VOName; 
00198     char                *share; 
00199 };
00200 
00204 struct _glite_transfer_TransferJobSummary
00205 {
00206     glite_transfer_JobStatus    *jobStatus; 
00208     int             numDone; 
00209     int             numActive; 
00210     int             numPending; 
00211     int             numCanceled; 
00212     int             numCanceling; 
00213     int             numFailed; 
00214     int             numFinished; 
00215     int             numSubmitted; 
00216     int             numHold; 
00217     int             numWaiting; 
00218     int             numCatalogFailed; 
00219     int             numRestarted; 
00220 };
00221 
00225 struct _glite_transfer_TransferParams
00226 {
00227     char                **keys; 
00228     char                **values; 
00229     unsigned            num; 
00230 };
00231 
00235 struct _glite_transfer_Channel
00236 {
00237     char                *channelName; 
00238     char                *sourceSite; 
00239     char                *destSite; 
00240     char                *contact; 
00241     int             numberOfStreams; 
00242     int             numberOfFiles; 
00243     int             bandwidth; 
00244     int             nominalThroughput; 
00245     int                             __sizeVOShares; 
00246     glite_transfer_VOShareElement   **VOShares; 
00247     glite_channel_state     state; 
00248 };
00249 
00253 struct _glite_transfer_StringPair
00254 {
00255     char                *string1; 
00256     char                *string2; 
00257 };
00258 
00262 struct _glite_transfer_Roles
00263 {
00264     char                *clientDN; 
00265     char                *serviceAdmin; 
00266     char                *submitter; 
00267     int             __sizeVOManager; 
00268     glite_transfer_StringPair   **VOManager; 
00269     int             __sizechannelManager; 
00270     glite_transfer_StringPair   **channelManager; 
00271 };
00272 
00276 struct _glite_transfer_TransferSnapshot
00277 {
00278     time_t              *time; 
00279     int             numSubmittedJobs;
00280     int             numPendingJobs;
00281     int             numActiveJobs;
00282     int             numDoneJobs;
00283     int             numHoldJobs;
00284     int             numFailedJobs;
00285     int             numCanceledJobs;
00286     int             numCancelingJobs;
00287     int             numFinishedDirtyJobs;
00288     int             numFinishedJobs;
00289     int             numSubmittedFiles;
00290     int             numPendingFiles;
00291     int             numActiveFiles;
00292     int             numDoneFiles;
00293     int             numWaitingFiles;
00294     int             numHoldFiles;
00295     int             numCancelingFiles;
00296     int             numCanceledFiles;
00297     int             numFailedFiles;
00298     int             numFinishedFiles;
00299     int             numCatalogFailedFiles;
00300 };
00301 
00305 struct _glite_transfer_TransferSummary
00306 {
00307     char                *channelName; 
00308     char                *voName; 
00309     int             __sizesnapshots; 
00310     glite_transfer_TransferSnapshot **snapshots; 
00311 };
00312 
00316 struct _glite_transfer_TransferActivityPeriod
00317 {
00318     time_t                  *startTime; /*< The start time of this period of measure. */
00319     time_t                  *endTime; /*< The end time of this period of measure. */
00320     float                   averageRate; /*< The average transfer rate during this period. */
00321     long                    bytesWritten; /*< The number of bytes written during this period. */
00322 };
00323 
00327 struct _glite_transfer_TransferActivity
00328 {
00329     char                    *channelName; 
00330     char                    *voName; 
00331     int                 __sizeactivityPeriods; 
00332     glite_transfer_TransferActivityPeriod   **activityPeriods; 
00333 };
00334 
00338 struct _glite_transfer_TransferAgent
00339 {
00340     char                    *name; 
00341     char                    *DN; 
00342     char                    *host; 
00343     char                    *type; 
00344     time_t                  *lastActive; 
00345     char                    *state; 
00346     char                    *version; 
00347     char                    *contact; 
00348 };
00349 
00354 /**********************************************************************
00355  * Function prototypes - library management functions
00356  */
00357 
00370 glite_transfer_ctx *glite_transfer_new(const char *endpoint);
00371 
00377 void glite_transfer_free(glite_transfer_ctx *ctx);
00378 
00386 void glite_transfer_add_sites(glite_transfer_ctx *ctx, const char *s, const char *d);
00387 
00397 const char *glite_transfer_get_error(glite_transfer_ctx *ctx);
00398 
00406 glite_transfer_errclass glite_transfer_get_errclass(glite_transfer_ctx *ctx);
00407 
00416 void glite_transfer_set_error(glite_transfer_ctx *ctx,
00417     glite_transfer_errclass errclass, const char *fmt, ...);
00418 
00427 void glite_transfer_set_verror(glite_transfer_ctx *ctx,
00428     glite_transfer_errclass errclass, const char *fmt, va_list ap);
00429 
00439 glite_transfer_state glite_transfer_state_parse(glite_transfer_ctx *ctx,
00440     const char *state);
00441 
00449 const char *glite_transfer_state_str(glite_transfer_state state);
00450 
00451 /**********************************************************************
00452  * Function prototypes - methods of transfer data types
00453  */
00454 
00455 /* XXX doc: for the following, ctx can be NULL if no error reporting is
00456  * required */
00457 
00468 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_new(glite_transfer_ctx *ctx,
00469     const char *source, const char *dest, glite_transfer_state state);
00476 void glite_transfer_FileTransferStatus_free(glite_transfer_ctx *ctx,
00477     glite_transfer_FileTransferStatus *status);
00485 void glite_transfer_FileTransferStatus_freeArray(glite_transfer_ctx *ctx,
00486     int nitems, glite_transfer_FileTransferStatus *status[]);
00495 glite_transfer_FileTransferStatus *glite_transfer_FileTransferStatus_clone(glite_transfer_ctx *ctx,
00496     const glite_transfer_FileTransferStatus *status);
00506 int glite_transfer_FileTransferStatus_setLogicalName(glite_transfer_ctx *ctx,
00507     glite_transfer_FileTransferStatus *status, const char *name);
00517 int glite_transfer_FileTransferStatus_setReason(glite_transfer_ctx *ctx,
00518     glite_transfer_FileTransferStatus *status, const char *reason);
00528 int glite_transfer_FileTransferStatus_setReasonClass(glite_transfer_ctx *ctx,
00529     glite_transfer_FileTransferStatus *status, const char *reasonClass);
00530 
00540 glite_transfer_JobStatus *glite_transfer_JobStatus_new(glite_transfer_ctx *ctx,
00541     const char *jobId, glite_transfer_state jobStatus);
00548 void glite_transfer_JobStatus_free(glite_transfer_ctx *ctx,
00549     glite_transfer_JobStatus *status);
00557 void glite_transfer_JobStatus_freeArray(glite_transfer_ctx *ctx, int nitems,
00558     glite_transfer_JobStatus *status[]);
00567 glite_transfer_JobStatus *glite_transfer_JobStatus_clone(glite_transfer_ctx *ctx,
00568     const glite_transfer_JobStatus *orig);
00569 
00579 glite_transfer_PlacementJob *glite_transfer_PlacementJob_new(glite_transfer_ctx *ctx,
00580     const char *sourceSE, const char *destSE);
00587 void glite_transfer_PlacementJob_free(glite_transfer_ctx *ctx,
00588     glite_transfer_PlacementJob *job);
00597 glite_transfer_PlacementJob *glite_transfer_PlacementJob_clone(glite_transfer_ctx *ctx,
00598     const glite_transfer_PlacementJob *orig);
00608 int glite_transfer_PlacementJob_setParams(glite_transfer_ctx *ctx,
00609     glite_transfer_PlacementJob *job,
00610     const glite_transfer_TransferParams *params);
00620 int glite_transfer_PlacementJob_add(glite_transfer_ctx *ctx,
00621     glite_transfer_PlacementJob *job, const char *logicalFile);
00622 
00632 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_new(glite_transfer_ctx *ctx,
00633     const char *src, const char *dst);
00640 void glite_transfer_TransferJobElement_free(glite_transfer_ctx *ctx,
00641     glite_transfer_TransferJobElement *elem);
00649 void glite_transfer_TransferJobElement_freeArray(glite_transfer_ctx *ctx,
00650     int nitems, glite_transfer_TransferJobElement *elems[]);
00659 glite_transfer_TransferJobElement *glite_transfer_TransferJobElement_clone(glite_transfer_ctx *ctx,
00660     const glite_transfer_TransferJobElement *orig);
00661 
00669 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_new(glite_transfer_ctx *ctx);
00676 void glite_transfer_TransferJobSummary_free(glite_transfer_ctx *ctx,
00677     glite_transfer_TransferJobSummary *summary);
00686 glite_transfer_TransferJobSummary *glite_transfer_TransferJobSummary_clone(glite_transfer_ctx *ctx,
00687     const glite_transfer_TransferJobSummary *orig);
00688 
00696 glite_transfer_TransferJob *glite_transfer_TransferJob_new(glite_transfer_ctx *ctx);
00703 void glite_transfer_TransferJob_free(glite_transfer_ctx *ctx,
00704     glite_transfer_TransferJob *job);
00713 glite_transfer_TransferJob *glite_transfer_TransferJob_clone(glite_transfer_ctx *ctx,
00714     const glite_transfer_TransferJob *orig);
00724 int glite_transfer_TransferJob_setParams(glite_transfer_ctx *ctx,
00725     glite_transfer_TransferJob *job,
00726     const glite_transfer_TransferParams *params);
00737 int glite_transfer_TransferJob_add(glite_transfer_ctx *ctx,
00738     glite_transfer_TransferJob *job,
00739     const char *src, const char *dst);
00740 
00748 glite_transfer_TransferParams *glite_transfer_TransferParams_new(glite_transfer_ctx *ctx);
00755 void glite_transfer_TransferParams_free(glite_transfer_ctx *ctx,
00756     glite_transfer_TransferParams *params);
00765 glite_transfer_TransferParams *glite_transfer_TransferParams_clone(glite_transfer_ctx *ctx,
00766     const glite_transfer_TransferParams *orig);
00777 int glite_transfer_TransferParams_add(glite_transfer_ctx *ctx,
00778     glite_transfer_TransferParams *params, const char *key, const char *value);
00779 
00790 glite_transfer_Channel *glite_transfer_Channel_new(glite_transfer_ctx *ctx,
00791     const char *name, const char *domainA, const char *domainB);
00798 void glite_transfer_Channel_free(glite_transfer_ctx *ctx,
00799     glite_transfer_Channel *channel);
00808 glite_transfer_Channel *glite_transfer_Channel_clone(glite_transfer_ctx *ctx,
00809     const glite_transfer_Channel *orig);
00819 int glite_transfer_Channel_setContact(glite_transfer_ctx *ctx,
00820     glite_transfer_Channel *channel, const char *contact);
00830 int glite_transfer_Channel_setState(glite_transfer_ctx *ctx,
00831     glite_transfer_Channel *channel, glite_channel_state state);
00832 
00836 glite_transfer_Roles *glite_transfer_Roles_new(glite_transfer_ctx *ctx);
00837 
00838 #ifdef __cplusplus
00839 }
00840 #endif
00841 
00842 #endif /* GLITE_DATA_TRANSFER_SIMPLE_H */
The GLite Project. All rights reserved.