libs3  trunk
libs3.h
Go to the documentation of this file.
1 
27 #ifndef LIBS3_H
28 #define LIBS3_H
29 
30 #include <stdint.h>
31 #include <sys/select.h>
32 
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 
121 #define S3_MAX_HOSTNAME_SIZE 255
122 
126 #define S3_DEFAULT_HOSTNAME "s3.amazonaws.com"
127 
128 
133 #define S3_MAX_BUCKET_NAME_SIZE 255
134 
138 #define S3_MAX_KEY_SIZE 1024
139 
140 
145 #define S3_MAX_METADATA_SIZE 2048
146 
147 
151 #define S3_METADATA_HEADER_NAME_PREFIX "x-amz-meta-"
152 
153 
161 #define S3_MAX_METADATA_COUNT \
162  (S3_MAX_METADATA_SIZE / (sizeof(S3_METADATA_HEADER_NAME_PREFIX "nv") - 1))
163 
164 
170 #define S3_MAX_ACL_GRANT_COUNT 100
171 
172 
177 #define S3_MAX_GRANTEE_EMAIL_ADDRESS_SIZE 128
178 
179 
184 #define S3_MAX_GRANTEE_USER_ID_SIZE 128
185 
186 
191 #define S3_MAX_GRANTEE_DISPLAY_NAME_SIZE 128
192 
193 
199 #define S3_MAX_AUTHENTICATED_QUERY_STRING_SIZE \
200  (sizeof("https:
201  sizeof("?AWSAccessKeyId=") + 32 + sizeof("&Expires=") + 32 + \
202  sizeof("&Signature=") + 28 + 1)
203 
204 
210 #define S3_INIT_WINSOCK 1
211 
212 
217 #define S3_INIT_ALL (S3_INIT_WINSOCK)
218 
219 
229 typedef enum
230 {
232 
284 
352 
363 } S3Status;
364 
365 
376 typedef enum
377 {
380 } S3Protocol;
381 
382 
395 typedef enum
396 {
399 } S3UriStyle;
400 
401 
414 typedef enum
415 {
421 } S3GranteeType;
422 
423 
439 typedef enum
440 {
446 } S3Permission;
447 
448 
462 typedef enum
463 {
464  S3CannedAclPrivate = 0, /* private */
465  S3CannedAclPublicRead = 1, /* public-read */
466  S3CannedAclPublicReadWrite = 2, /* public-read-write */
467  S3CannedAclAuthenticatedRead = 3 /* authenticated-read */
468 } S3CannedAcl;
469 
470 
480 
481 
486 typedef struct S3NameValue
487 {
491  const char *name;
492 
496  const char *value;
497 } S3NameValue;
498 
499 
506 typedef struct S3ResponseProperties
507 {
512  const char *requestId;
513 
518  const char *requestId2;
519 
525  const char *contentType;
526 
534  uint64_t contentLength;
535 
539  const char *server;
540 
547  const char *eTag;
548 
557  int64_t lastModified;
558 
564 
573 
574 
581 typedef struct S3AclGrant
582 {
596  union
597  {
602  struct
603  {
614  struct
615  {
624  } canonicalUser;
625  } grantee;
630 } S3AclGrant;
631 
632 
639 typedef struct S3BucketContext
640 {
645  const char *hostName;
646 
650  const char *bucketName;
651 
656 
662 
666  const char *accessKeyId;
667 
671  const char *secretAccessKey;
673 
674 
680 typedef struct S3ListBucketContent
681 {
685  const char *key;
686 
691  int64_t lastModified;
692 
697  const char *eTag;
698 
702  uint64_t size;
703 
708  const char *ownerId;
709 
714  const char *ownerDisplayName;
716 
717 
723 typedef struct S3PutProperties
724 {
729  const char *contentType;
730 
736  const char *md5;
737 
742  const char *cacheControl;
743 
752 
758  const char *contentEncoding;
759 
765  int64_t expires;
766 
772 
777 
785 
786 
791 typedef struct S3GetConditions
792 {
800 
808 
815  const char *ifMatchETag;
816 
823  const char *ifNotMatchETag;
825 
826 
832 typedef struct S3ErrorDetails
833 {
838  const char *message;
839 
843  const char *resource;
844 
849  const char *furtherDetails;
850 
856 
864 
865 
884  (const S3ResponseProperties *properties, void *callbackData);
885 
886 
903 typedef void (S3ResponseCompleteCallback)(S3Status status,
904  const S3ErrorDetails *errorDetails,
905  void *callbackData);
906 
907 
926 typedef S3Status (S3ListServiceCallback)(const char *ownerId,
927  const char *ownerDisplayName,
928  const char *bucketName,
929  int64_t creationDateSeconds,
930  void *callbackData);
931 
932 
963 typedef S3Status (S3ListBucketCallback)(int isTruncated,
964  const char *nextMarker,
965  int contentsCount,
966  const S3ListBucketContent *contents,
967  int commonPrefixesCount,
968  const char **commonPrefixes,
969  void *callbackData);
970 
971 
990 typedef int (S3PutObjectDataCallback)(int bufferSize, char *buffer,
991  void *callbackData);
992 
993 
1012 typedef S3Status (S3GetObjectDataCallback)(int bufferSize, const char *buffer,
1013  void *callbackData);
1014 
1015 
1025 typedef struct S3ResponseHandler
1026 {
1033 
1042 
1043 
1048 typedef struct S3ListServiceHandler
1049 {
1054 
1061 
1062 
1067 typedef struct S3ListBucketHandler
1068 {
1073 
1082 
1083 
1088 typedef struct S3PutObjectHandler
1089 {
1094 
1103 
1104 
1109 typedef struct S3GetObjectHandler
1110 {
1115 
1125 
1126 
1169 S3Status S3_initialize(const char *userAgentInfo, int flags,
1170  const char *defaultS3HostName);
1171 
1172 
1178 void S3_deinitialize();
1179 
1180 
1187 const char *S3_get_status_name(S3Status status);
1188 
1189 
1229 S3Status S3_validate_bucket_name(const char *bucketName, S3UriStyle uriStyle);
1230 
1231 
1258 S3Status S3_convert_acl(char *aclXml, char *ownerId, char *ownerDisplayName,
1259  int *aclGrantCountReturn, S3AclGrant *aclGrants);
1260 
1261 
1272 int S3_status_is_retryable(S3Status status);
1273 
1274 
1297 S3Status S3_create_request_context(S3RequestContext **requestContextReturn);
1298 
1299 
1308 void S3_destroy_request_context(S3RequestContext *requestContext);
1309 
1310 
1325 
1326 
1346  int *requestsRemainingReturn);
1347 
1348 
1380  fd_set *readFdSet, fd_set *writeFdSet,
1381  fd_set *exceptFdSet, int *maxFd);
1382 
1383 
1398 int64_t S3_get_request_context_timeout(S3RequestContext *requestContext);
1399 
1400 
1431  (char *buffer, const S3BucketContext *bucketContext,
1432  const char *key, int64_t expires, const char *resource);
1433 
1434 
1457 void S3_list_service(S3Protocol protocol, const char *accessKeyId,
1458  const char *secretAccessKey, const char *hostName,
1459  S3RequestContext *requestContext,
1460  const S3ListServiceHandler *handler,
1461  void *callbackData);
1462 
1463 
1498 void S3_test_bucket(S3Protocol protocol, S3UriStyle uriStyle,
1499  const char *accessKeyId, const char *secretAccessKey,
1500  const char *hostName, const char *bucketName,
1501  int locationConstraintReturnSize,
1502  char *locationConstraintReturn,
1503  S3RequestContext *requestContext,
1504  const S3ResponseHandler *handler, void *callbackData);
1505 
1506 
1529 void S3_create_bucket(S3Protocol protocol, const char *accessKeyId,
1530  const char *secretAccessKey, const char *hostName,
1531  const char *bucketName, S3CannedAcl cannedAcl,
1532  const char *locationConstraint,
1533  S3RequestContext *requestContext,
1534  const S3ResponseHandler *handler, void *callbackData);
1535 
1536 
1558 void S3_delete_bucket(S3Protocol protocol, S3UriStyle uriStyle,
1559  const char *accessKeyId, const char *secretAccessKey,
1560  const char *hostName, const char *bucketName,
1561  S3RequestContext *requestContext,
1562  const S3ResponseHandler *handler, void *callbackData);
1563 
1564 
1585 void S3_list_bucket(const S3BucketContext *bucketContext,
1586  const char *prefix, const char *marker,
1587  const char *delimiter, int maxkeys,
1588  S3RequestContext *requestContext,
1589  const S3ListBucketHandler *handler, void *callbackData);
1590 
1591 
1616 void S3_put_object(const S3BucketContext *bucketContext, const char *key,
1617  uint64_t contentLength,
1618  const S3PutProperties *putProperties,
1619  S3RequestContext *requestContext,
1620  const S3PutObjectHandler *handler, void *callbackData);
1621 
1622 
1657 void S3_copy_object(const S3BucketContext *bucketContext,
1658  const char *key, const char *destinationBucket,
1659  const char *destinationKey,
1660  const S3PutProperties *putProperties,
1661  int64_t *lastModifiedReturn, int eTagReturnSize,
1662  char *eTagReturn, S3RequestContext *requestContext,
1663  const S3ResponseHandler *handler, void *callbackData);
1664 
1665 
1687 void S3_get_object(const S3BucketContext *bucketContext, const char *key,
1688  const S3GetConditions *getConditions,
1689  uint64_t startByte, uint64_t byteCount,
1690  S3RequestContext *requestContext,
1691  const S3GetObjectHandler *handler, void *callbackData);
1692 
1693 
1708 void S3_head_object(const S3BucketContext *bucketContext, const char *key,
1709  S3RequestContext *requestContext,
1710  const S3ResponseHandler *handler, void *callbackData);
1711 
1726 void S3_delete_object(const S3BucketContext *bucketContext, const char *key,
1727  S3RequestContext *requestContext,
1728  const S3ResponseHandler *handler, void *callbackData);
1729 
1730 
1761 void S3_get_acl(const S3BucketContext *bucketContext, const char *key,
1762  char *ownerId, char *ownerDisplayName,
1763  int *aclGrantCountReturn, S3AclGrant *aclGrants,
1764  S3RequestContext *requestContext,
1765  const S3ResponseHandler *handler, void *callbackData);
1766 
1767 
1793 void S3_set_acl(const S3BucketContext *bucketContext, const char *key,
1794  const char *ownerId, const char *ownerDisplayName,
1795  int aclGrantCount, const S3AclGrant *aclGrants,
1796  S3RequestContext *requestContext,
1797  const S3ResponseHandler *handler, void *callbackData);
1798 
1799 
1840 void S3_get_server_access_logging(const S3BucketContext *bucketContext,
1841  char *targetBucketReturn,
1842  char *targetPrefixReturn,
1843  int *aclGrantCountReturn,
1844  S3AclGrant *aclGrants,
1845  S3RequestContext *requestContext,
1846  const S3ResponseHandler *handler,
1847  void *callbackData);
1848 
1849 
1879 void S3_set_server_access_logging(const S3BucketContext *bucketContext,
1880  const char *targetBucket,
1881  const char *targetPrefix, int aclGrantCount,
1882  const S3AclGrant *aclGrants,
1883  S3RequestContext *requestContext,
1884  const S3ResponseHandler *handler,
1885  void *callbackData);
1886 
1887 
1888 #ifdef __cplusplus
1889 }
1890 #endif
1891 
1892 #endif /* LIBS3_H */