annotate s3/s3_uploader.h @ 279:b3b547563ec7

Add Google connector service and agent wiki Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code. Co-authored-by: Copilot <[email protected]> Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
author MrJuneJune <me@mrjunejune.com>
date Mon, 17 Aug 2026 22:22:36 -0700
parents 83f16548ba41
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
1 #ifndef S3_UPLOADER_H
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
2 #define S3_UPLOADER_H
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
3
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
4 /**
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
5 * S3 Uploader
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
6 * -----------
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
7 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
8 * Generic S3 bucket uploader using AWS Signature Version 4.
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
9 * Built on top of seobeo HTTP client.
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
10 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
11 * ## Examples
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
12 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
13 * ### 1. Upload a file from disk
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
14 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
15 * ```c
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
16 * S3_Config config = {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
17 * .access_key_id = "AKIAIOSFODNN7EXAMPLE",
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
18 * .secret_access_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
19 * .region = "us-east-1",
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
20 * .bucket = "my-bucket"
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
21 * };
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
22 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
23 * S3_Result result = S3_Upload_File(&config, "/path/to/local/file.txt", "uploads/file.txt");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
24 * if (result.success)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
25 * {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
26 * printf("Uploaded successfully!\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
27 * }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
28 * else
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
29 * {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
30 * printf("Error: %s\n", result.error_message);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
31 * }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
32 * S3_Result_Destroy(&result);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
33 * ```
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
34 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
35 * ### 2. Upload raw data from memory
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
36 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
37 * ```c
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
38 * const char *data = "Hello, S3!";
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
39 * S3_Result result = S3_Upload_Data(&config, (const uint8 *)data, strlen(data),
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
40 * "hello.txt", "text/plain");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
41 * S3_Result_Destroy(&result);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
42 * ```
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
43 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
44 * ### 3. Upload with custom content type
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
45 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
46 * ```c
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
47 * S3_Result result = S3_Upload_File_With_Content_Type(&config,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
48 * "/path/to/image.png",
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
49 * "images/photo.png",
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
50 * "image/png");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
51 * S3_Result_Destroy(&result);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
52 * ```
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
53 */
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
54
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
55 #include <stddef.h>
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
56
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
57 #include "dowa/dowa.h"
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
58
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
59 // S3 configuration
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
60 typedef struct {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
61 const char *access_key_id; // AWS access key ID
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
62 const char *secret_access_key; // AWS secret access key
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
63 const char *region; // AWS region (e.g., "us-east-1")
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
64 const char *bucket; // S3 bucket name
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
65 const char *endpoint; // Optional custom endpoint (NULL for default AWS)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
66 boolean use_path_style; // Use path-style URLs (bucket in path, not subdomain)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
67 } S3_Config;
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
68
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
69 // Upload result
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
70 typedef struct {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
71 boolean success; // TRUE if upload succeeded
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
72 int32 status_code; // HTTP status code
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
73 char *error_message; // Error message (NULL on success)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
74 char *etag; // ETag of uploaded object (on success)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
75 Dowa_Arena *p_arena; // Internal arena (do not modify)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
76 } S3_Result;
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
77
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
78 // --- Core API --- //
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
79
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
80 /* Upload file from disk to S3. Content-Type is auto-detected. */
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
81 extern S3_Result S3_Upload_File(const S3_Config *p_config,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
82 const char *local_path,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
83 const char *s3_key);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
84
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
85 /* Upload file with explicit content type. */
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
86 extern S3_Result S3_Upload_File_With_Content_Type(const S3_Config *p_config,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
87 const char *local_path,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
88 const char *s3_key,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
89 const char *content_type);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
90
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
91 /* Upload raw data from memory to S3. */
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
92 extern S3_Result S3_Upload_Data(const S3_Config *p_config,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
93 const uint8 *data,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
94 size_t data_length,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
95 const char *s3_key,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
96 const char *content_type);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
97
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
98 /* Free resources associated with result. */
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
99 extern void S3_Result_Destroy(S3_Result *p_result);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
100
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
101 // --- Presigned URLs --- //
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
102
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
103 // Presigned URL result
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
104 typedef struct {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
105 boolean success; // TRUE if generation succeeded
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
106 char *url; // The presigned URL (on success)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
107 char *error_message; // Error message (on failure)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
108 Dowa_Arena *p_arena; // Internal arena (do not modify)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
109 } S3_Presigned_URL;
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
110
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
111 /* Generate a presigned URL for uploading (PUT) a file.
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
112 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
113 * The client can use this URL to upload directly to S3 without credentials.
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
114 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
115 * Example:
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
116 * S3_Presigned_URL url = S3_Presign_Put(&config, "uploads/file.txt", "image/png", 3600);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
117 * if (url.success) {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
118 * printf("Upload URL: %s\n", url.url);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
119 * // Client does: curl -X PUT -H "Content-Type: image/png" --data-binary @file.png "$URL"
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
120 * }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
121 * S3_Presigned_URL_Destroy(&url);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
122 */
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
123 extern S3_Presigned_URL S3_Presign_Put(const S3_Config *p_config,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
124 const char *s3_key,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
125 const char *content_type,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
126 int32 expires_seconds);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
127
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
128 /* Generate a presigned URL for downloading (GET) a file.
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
129 *
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
130 * Example:
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
131 * S3_Presigned_URL url = S3_Presign_Get(&config, "uploads/file.txt", 3600);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
132 * if (url.success) {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
133 * printf("Download URL: %s\n", url.url);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
134 * // Client does: curl "$URL" -o file.txt
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
135 * }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
136 * S3_Presigned_URL_Destroy(&url);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
137 */
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
138 extern S3_Presigned_URL S3_Presign_Get(const S3_Config *p_config,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
139 const char *s3_key,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
140 int32 expires_seconds);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
141
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
142 /* Free resources associated with presigned URL result. */
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
143 extern void S3_Presigned_URL_Destroy(S3_Presigned_URL *p_url);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
144
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
145 // --- Utility Functions --- //
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
146
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
147 /* Guess content type from file extension. Returns "application/octet-stream" if unknown. */
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
148 extern const char *S3_Guess_Content_Type(const char *filename);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
149
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
150 #endif