libs3
trunk
Main Page
Classes
Files
File List
File Members
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
{
231
S3StatusOK
,
232
237
S3StatusInternalError
,
238
S3StatusOutOfMemory
,
239
S3StatusInterrupted
,
240
S3StatusInvalidBucketNameTooLong
,
241
S3StatusInvalidBucketNameFirstCharacter
,
242
S3StatusInvalidBucketNameCharacter
,
243
S3StatusInvalidBucketNameCharacterSequence
,
244
S3StatusInvalidBucketNameTooShort
,
245
S3StatusInvalidBucketNameDotQuadNotation
,
246
S3StatusQueryParamsTooLong
,
247
S3StatusFailedToInitializeRequest
,
248
S3StatusMetaDataHeadersTooLong
,
249
S3StatusBadMetaData
,
250
S3StatusBadContentType
,
251
S3StatusContentTypeTooLong
,
252
S3StatusBadMD5
,
253
S3StatusMD5TooLong
,
254
S3StatusBadCacheControl
,
255
S3StatusCacheControlTooLong
,
256
S3StatusBadContentDispositionFilename
,
257
S3StatusContentDispositionFilenameTooLong
,
258
S3StatusBadContentEncoding
,
259
S3StatusContentEncodingTooLong
,
260
S3StatusBadIfMatchETag
,
261
S3StatusIfMatchETagTooLong
,
262
S3StatusBadIfNotMatchETag
,
263
S3StatusIfNotMatchETagTooLong
,
264
S3StatusHeadersTooLong
,
265
S3StatusKeyTooLong
,
266
S3StatusUriTooLong
,
267
S3StatusXmlParseFailure
,
268
S3StatusEmailAddressTooLong
,
269
S3StatusUserIdTooLong
,
270
S3StatusUserDisplayNameTooLong
,
271
S3StatusGroupUriTooLong
,
272
S3StatusPermissionTooLong
,
273
S3StatusTargetBucketTooLong
,
274
S3StatusTargetPrefixTooLong
,
275
S3StatusTooManyGrants
,
276
S3StatusBadGrantee
,
277
S3StatusBadPermission
,
278
S3StatusXmlDocumentTooLarge
,
279
S3StatusNameLookupError
,
280
S3StatusFailedToConnect
,
281
S3StatusServerFailedVerification
,
282
S3StatusConnectionFailed
,
283
S3StatusAbortedByCallback
,
284
288
S3StatusErrorAccessDenied
,
289
S3StatusErrorAccountProblem
,
290
S3StatusErrorAmbiguousGrantByEmailAddress
,
291
S3StatusErrorBadDigest
,
292
S3StatusErrorBucketAlreadyExists
,
293
S3StatusErrorBucketAlreadyOwnedByYou
,
294
S3StatusErrorBucketNotEmpty
,
295
S3StatusErrorCredentialsNotSupported
,
296
S3StatusErrorCrossLocationLoggingProhibited
,
297
S3StatusErrorEntityTooSmall
,
298
S3StatusErrorEntityTooLarge
,
299
S3StatusErrorExpiredToken
,
300
S3StatusErrorIncompleteBody
,
301
S3StatusErrorIncorrectNumberOfFilesInPostRequest
,
302
S3StatusErrorInlineDataTooLarge
,
303
S3StatusErrorInternalError
,
304
S3StatusErrorInvalidAccessKeyId
,
305
S3StatusErrorInvalidAddressingHeader
,
306
S3StatusErrorInvalidArgument
,
307
S3StatusErrorInvalidBucketName
,
308
S3StatusErrorInvalidDigest
,
309
S3StatusErrorInvalidLocationConstraint
,
310
S3StatusErrorInvalidPayer
,
311
S3StatusErrorInvalidPolicyDocument
,
312
S3StatusErrorInvalidRange
,
313
S3StatusErrorInvalidSecurity
,
314
S3StatusErrorInvalidSOAPRequest
,
315
S3StatusErrorInvalidStorageClass
,
316
S3StatusErrorInvalidTargetBucketForLogging
,
317
S3StatusErrorInvalidToken
,
318
S3StatusErrorInvalidURI
,
319
S3StatusErrorKeyTooLong
,
320
S3StatusErrorMalformedACLError
,
321
S3StatusErrorMalformedXML
,
322
S3StatusErrorMaxMessageLengthExceeded
,
323
S3StatusErrorMaxPostPreDataLengthExceededError
,
324
S3StatusErrorMetadataTooLarge
,
325
S3StatusErrorMethodNotAllowed
,
326
S3StatusErrorMissingAttachment
,
327
S3StatusErrorMissingContentLength
,
328
S3StatusErrorMissingSecurityElement
,
329
S3StatusErrorMissingSecurityHeader
,
330
S3StatusErrorNoLoggingStatusForKey
,
331
S3StatusErrorNoSuchBucket
,
332
S3StatusErrorNoSuchKey
,
333
S3StatusErrorNotImplemented
,
334
S3StatusErrorNotSignedUp
,
335
S3StatusErrorOperationAborted
,
336
S3StatusErrorPermanentRedirect
,
337
S3StatusErrorPreconditionFailed
,
338
S3StatusErrorRedirect
,
339
S3StatusErrorRequestIsNotMultiPartContent
,
340
S3StatusErrorRequestTimeout
,
341
S3StatusErrorRequestTimeTooSkewed
,
342
S3StatusErrorRequestTorrentOfBucketError
,
343
S3StatusErrorSignatureDoesNotMatch
,
344
S3StatusErrorSlowDown
,
345
S3StatusErrorTemporaryRedirect
,
346
S3StatusErrorTokenRefreshRequired
,
347
S3StatusErrorTooManyBuckets
,
348
S3StatusErrorUnexpectedContent
,
349
S3StatusErrorUnresolvableGrantByEmailAddress
,
350
S3StatusErrorUserKeyMustBeSpecified
,
351
S3StatusErrorUnknown
,
352
357
S3StatusHttpErrorMovedTemporarily
,
358
S3StatusHttpErrorBadRequest
,
359
S3StatusHttpErrorForbidden
,
360
S3StatusHttpErrorNotFound
,
361
S3StatusHttpErrorConflict
,
362
S3StatusHttpErrorUnknown
363
}
S3Status
;
364
365
376
typedef
enum
377
{
378
S3ProtocolHTTPS
= 0,
379
S3ProtocolHTTP
= 1
380
}
S3Protocol
;
381
382
395
typedef
enum
396
{
397
S3UriStyleVirtualHost
= 0,
398
S3UriStylePath
= 1
399
}
S3UriStyle
;
400
401
414
typedef
enum
415
{
416
S3GranteeTypeAmazonCustomerByEmail
= 0,
417
S3GranteeTypeCanonicalUser
= 1,
418
S3GranteeTypeAllAwsUsers
= 2,
419
S3GranteeTypeAllUsers
= 3,
420
S3GranteeTypeLogDelivery
= 4
421
}
S3GranteeType
;
422
423
439
typedef
enum
440
{
441
S3PermissionRead
= 0,
442
S3PermissionWrite
= 1,
443
S3PermissionReadACP
= 2,
444
S3PermissionWriteACP
= 3,
445
S3PermissionFullControl
= 4
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
479
typedef
struct
S3RequestContext
S3RequestContext
;
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
563
int
metaDataCount
;
564
571
const
S3NameValue
*
metaData
;
572
}
S3ResponseProperties
;
573
574
581
typedef
struct
S3AclGrant
582
{
586
S3GranteeType
granteeType
;
596
union
597
{
602
struct
603
{
608
char
emailAddress
[
S3_MAX_GRANTEE_EMAIL_ADDRESS_SIZE
];
609
}
amazonCustomerByEmail
;
614
struct
615
{
619
char
id
[
S3_MAX_GRANTEE_USER_ID_SIZE
];
623
char
displayName
[
S3_MAX_GRANTEE_DISPLAY_NAME_SIZE
];
624
}
canonicalUser
;
625
}
grantee
;
629
S3Permission
permission
;
630
}
S3AclGrant
;
631
632
639
typedef
struct
S3BucketContext
640
{
645
const
char
*
hostName
;
646
650
const
char
*
bucketName
;
651
655
S3Protocol
protocol
;
656
661
S3UriStyle
uriStyle
;
662
666
const
char
*
accessKeyId
;
667
671
const
char
*
secretAccessKey
;
672
}
S3BucketContext
;
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
;
715
}
S3ListBucketContent
;
716
717
723
typedef
struct
S3PutProperties
724
{
729
const
char
*
contentType
;
730
736
const
char
*
md5
;
737
742
const
char
*
cacheControl
;
743
751
const
char
*
contentDispositionFilename
;
752
758
const
char
*
contentEncoding
;
759
765
int64_t
expires
;
766
771
S3CannedAcl
cannedAcl
;
772
776
int
metaDataCount
;
777
783
const
S3NameValue
*
metaData
;
784
}
S3PutProperties
;
785
786
791
typedef
struct
S3GetConditions
792
{
799
int64_t
ifModifiedSince
;
800
807
int64_t
ifNotModifiedSince
;
808
815
const
char
*
ifMatchETag
;
816
823
const
char
*
ifNotMatchETag
;
824
}
S3GetConditions
;
825
826
832
typedef
struct
S3ErrorDetails
833
{
838
const
char
*
message
;
839
843
const
char
*
resource
;
844
849
const
char
*
furtherDetails
;
850
855
int
extraDetailsCount
;
856
862
S3NameValue
*
extraDetails
;
863
}
S3ErrorDetails
;
864
865
883
typedef
S3Status
(
S3ResponsePropertiesCallback
)
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
{
1032
S3ResponsePropertiesCallback
*
propertiesCallback
;
1033
1040
S3ResponseCompleteCallback
*
completeCallback
;
1041
}
S3ResponseHandler
;
1042
1043
1048
typedef
struct
S3ListServiceHandler
1049
{
1053
S3ResponseHandler
responseHandler
;
1054
1059
S3ListServiceCallback
*
listServiceCallback
;
1060
}
S3ListServiceHandler
;
1061
1062
1067
typedef
struct
S3ListBucketHandler
1068
{
1072
S3ResponseHandler
responseHandler
;
1073
1080
S3ListBucketCallback
*
listBucketCallback
;
1081
}
S3ListBucketHandler
;
1082
1083
1088
typedef
struct
S3PutObjectHandler
1089
{
1093
S3ResponseHandler
responseHandler
;
1094
1101
S3PutObjectDataCallback
*
putObjectDataCallback
;
1102
}
S3PutObjectHandler
;
1103
1104
1109
typedef
struct
S3GetObjectHandler
1110
{
1114
S3ResponseHandler
responseHandler
;
1115
1123
S3GetObjectDataCallback
*
getObjectDataCallback
;
1124
}
S3GetObjectHandler
;
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
1324
S3Status
S3_runall_request_context
(
S3RequestContext
*requestContext);
1325
1326
1345
S3Status
S3_runonce_request_context
(
S3RequestContext
*requestContext,
1346
int
*requestsRemainingReturn);
1347
1348
1379
S3Status
S3_get_request_context_fdsets
(
S3RequestContext
*requestContext,
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
1430
S3Status
S3_generate_authenticated_query_string
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 */
inc
libs3.h
Generated on Thu Oct 4 2012 21:13:50 for libs3 by
1.8.2