VirtualBox

source: vbox/trunk/include/iprt/s3.h@ 69067

Last change on this file since 69067 was 62473, checked in by vboxsync, 8 years ago

(C) 2016

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.5 KB
Line 
1/* $Id: s3.h 62473 2016-07-22 18:15:28Z vboxsync $ */
2/** @file
3 * IPRT - Simple Storage Service (S3) Communication API.
4 */
5
6/*
7 * Copyright (C) 2009-2016 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 */
26
27#ifndef ___iprt_s3_h
28#define ___iprt_s3_h
29
30#include <iprt/types.h>
31
32RT_C_DECLS_BEGIN
33
34/** @defgroup grp_rt_s3 RTS3 - Simple Storage Service (S3) Communication API
35 * @ingroup grp_rt
36 * @{
37 */
38
39/** @todo the following three definitions may move the iprt/types.h later. */
40/** RTS3 interface handle. */
41typedef R3PTRTYPE(struct RTS3INTERNAL *) RTS3;
42/** Pointer to a RTS3 interface handle. */
43typedef RTS3 *PRTS3;
44/** Nil RTS3 interface handle. */
45#define NIL_RTS3 ((RTS3)0)
46
47
48/**
49 * S3 progress callback.
50 *
51 * @returns Reserved, must be 0.
52 *
53 * @param uPercent The process completion percentage.
54 * @param pvUser The user parameter given to RTS3SetProgressCallback.
55 */
56typedef DECLCALLBACK(int) FNRTS3PROGRESS(unsigned uPercent, void *pvUser);
57/** Pointer to a S3 progress callback. */
58typedef FNRTS3PROGRESS *PFNRTS3PROGRESS;
59
60
61/** Pointer to an S3 bucket entry. */
62typedef struct RTS3BUCKETENTRY *PRTS3BUCKETENTRY;
63/** Pointer to a const S3 bucket entry. */
64typedef struct RTS3BUCKETENTRY const *PCRTS3BUCKETENTRY;
65/**
66 * RTS3 bucket entry.
67 *
68 * Represent a bucket of the S3 storage server. Bucket entries are chained as a
69 * doubly linked list using the pPrev & pNext member.
70 *
71 * @todo Consider making the entire list const unless there are plans for
72 * more APIs using this structure which requires the caller to create
73 * or modify it.
74 */
75typedef struct RTS3BUCKETENTRY
76{
77 /** The previous element. */
78 PRTS3BUCKETENTRY pPrev;
79 /** The next element. */
80 PRTS3BUCKETENTRY pNext;
81
82 /** The name of the bucket. */
83 char const *pszName;
84 /** The creation date of the bucket as string. */
85 char const *pszCreationDate;
86} RTS3BUCKETENTRY;
87
88
89/** Pointer to an S3 key entry. */
90typedef struct RTS3KEYENTRY *PRTS3KEYENTRY;
91/** Pointer to a const S3 key entry. */
92typedef struct RTS3KEYENTRY const *PCRTS3KEYENTRY;
93/**
94 * RTS3 key entry.
95 *
96 * Represent a key of the S3 storage server. Key entries are chained as a doubly
97 * linked list using the pPrev & pNext member.
98 *
99 * @todo Consider making the entire list const unless there are plans for
100 * more APIs using this structure which requires the caller to create
101 * or modify it.
102 */
103typedef struct RTS3KEYENTRY
104{
105 /** The previous element. */
106 PRTS3KEYENTRY pPrev;
107 /** The next element. */
108 PRTS3KEYENTRY pNext;
109
110 /** The name of the key. */
111 char const *pszName;
112 /** The date this key was last modified as string. */
113 char const *pszLastModified;
114 /** The size of the file behind this key in bytes. */
115 uint64_t cbFile;
116} RTS3KEYENTRY;
117
118
119/**
120 * Creates a RTS3 interface handle.
121 *
122 * @returns iprt status code.
123 *
124 * @param phS3 Where to store the RTS3 handle.
125 * @param pszAccessKey The access key for the S3 storage server.
126 * @param pszSecretKey The secret access key for the S3 storage server.
127 * @param pszBaseUrl The base URL of the S3 storage server.
128 * @param pszUserAgent An optional user agent string used in the HTTP
129 * communication.
130 */
131RTR3DECL(int) RTS3Create(PRTS3 phS3, const char *pszAccessKey, const char *pszSecretKey, const char *pszBaseUrl, const char *pszUserAgent);
132
133/**
134 * Destroys a RTS3 interface handle.
135 *
136 * @returns iprt status code.
137 *
138 * @param hS3 Handle to the RTS3 interface.
139 */
140RTR3DECL(void) RTS3Destroy(RTS3 hS3);
141
142/**
143 * Sets an optional progress callback.
144 *
145 * This callback function will be called when the completion percentage of an S3
146 * operation changes.
147 *
148 * @returns iprt status code.
149 *
150 * @param hS3 Handle to the RTS3 interface.
151 * @param pfnProgressCB The pointer to the progress function.
152 * @param pvUser The pvUser arg of FNRTS3PROGRESS.
153 */
154RTR3DECL(void) RTS3SetProgressCallback(RTS3 hS3, PFNRTS3PROGRESS pfnProgressCB, void *pvUser);
155
156/**
157 * Gets a list of all available buckets on the S3 storage server.
158 *
159 * You have to delete ppBuckets after usage with RTS3BucketsDestroy.
160 *
161 * @returns iprt status code.
162 *
163 * @param hS3 Handle to the RTS3 interface.
164 * @param ppBuckets Where to store the pointer to the head of the
165 * returned bucket list. Consider the entire list
166 * read-only.
167 */
168RTR3DECL(int) RTS3GetBuckets(RTS3 hS3, PCRTS3BUCKETENTRY *ppBuckets);
169
170/**
171 * Destroys the bucket list returned by RTS3GetBuckets.
172 *
173 * @returns iprt status code.
174 *
175 * @param pBuckets Pointer to the first bucket entry.
176 */
177RTR3DECL(int) RTS3BucketsDestroy(PCRTS3BUCKETENTRY pBuckets);
178
179/**
180 * Creates a new bucket on the S3 storage server.
181 *
182 * This name have to be unique over all accounts on the S3 storage server.
183 *
184 * @returns iprt status code.
185 *
186 * @param hS3 Handle to the RTS3 interface.
187 * @param pszBucketName Name of the new bucket.
188 */
189RTR3DECL(int) RTS3CreateBucket(RTS3 hS3, const char *pszBucketName);
190
191/**
192 * Deletes a bucket on the S3 storage server.
193 *
194 * The bucket must be empty.
195 *
196 * @returns iprt status code.
197 *
198 * @param hS3 Handle to the RTS3 interface.
199 * @param pszBucketName Name of the bucket to delete.
200 */
201RTR3DECL(int) RTS3DeleteBucket(RTS3 hS3, const char *pszBucketName);
202
203/**
204 * Gets a list of all available keys in a bucket on the S3 storage server.
205 *
206 * You have to delete ppKeys after usage with RTS3KeysDestroy.
207 *
208 * @returns iprt status code.
209 *
210 * @param hS3 Handle to the RTS3 interface.
211 * @param pszBucketName Name of the bucket to delete.
212 * @param ppKeys Where to store the pointer to the head of the
213 * returned key list. Consider the entire list
214 * read-only.
215 */
216RTR3DECL(int) RTS3GetBucketKeys(RTS3 hS3, const char *pszBucketName, PCRTS3KEYENTRY *ppKeys);
217
218/**
219 * Delete the key list returned by RTS3GetBucketKeys.
220 *
221 * @returns iprt status code.
222 *
223 * @param pKeys Pointer to the first key entry.
224 */
225RTR3DECL(int) RTS3KeysDestroy(PCRTS3KEYENTRY pKeys);
226
227/**
228 * Deletes a key in a bucket on the S3 storage server.
229 *
230 * @returns iprt status code.
231 *
232 * @param hS3 Handle to the RTS3 interface.
233 * @param pszBucketName Name of the bucket contains pszKeyName.
234 * @param pszKeyName Name of the key to delete.
235 */
236RTR3DECL(int) RTS3DeleteKey(RTS3 hS3, const char *pszBucketName, const char *pszKeyName);
237
238/**
239 * Downloads a key from a bucket into a file.
240 *
241 * The file must not exists.
242 *
243 * @returns iprt status code.
244 *
245 * @param hS3 Handle to the RTS3 interface.
246 * @param pszBucketName Name of the bucket that contains pszKeyName.
247 * @param pszKeyName Name of the key to download.
248 * @param pszFilename Name of the file to store the downloaded key as.
249 */
250RTR3DECL(int) RTS3GetKey(RTS3 hS3, const char *pszBucketName, const char *pszKeyName, const char *pszFilename);
251
252/**
253 * Uploads the content of a file into a key in the specified bucked.
254 *
255 * @returns iprt status code.
256 *
257 * @param hS3 Handle to the RTS3 interface.
258 * @param pszBucketName Name of the bucket where the new key should be
259 * created.
260 * @param pszKeyName Name of the new key.
261 * @param pszFilename Name of the file to upload the content of.
262 */
263RTR3DECL(int) RTS3PutKey(RTS3 hS3, const char *pszBucketName, const char *pszKeyName, const char *pszFilename);
264
265/** @} */
266
267RT_C_DECLS_END
268
269#endif
270
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette