1
/* Copyright (C) 2008 PrimeBase Technologies GmbH, Germany
3
* PrimeBase Media Stream (PBMS)
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU Lesser General Public License as published by
7
* the Free Software Foundation; either version 2 of the License, or
8
* (at your option) any later version.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU Lesser General Public License for more details.
15
* You should have received a copy of the GNU Lesser General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
* 2008-09-10 Barry Leslie
31
#define MS_STANDARD_STORAGE 0 // BLOB data is stored in the repository.
32
#define MS_CLOUD_STORAGE 1 // BLOB data is in S3 cloud storage.
35
#define MS_CHECKSUM_TAG "PBMS_CHECKSUM"
36
#define MS_ALIAS_TAG "PBMS_BLOB_ALIAS"
37
#define MS_BLOB_INFO_REQUEST "PBMS_RETURN_HEADER_ONLY"
38
#define MS_PING_REQUEST "PBMS_PING_CONNECTION"
39
#define MS_BLOB_SIZE "PBMS_BLOB_SIZE"
40
#define MS_LAST_ACCESS "PBMS_LAST_ACCESS"
41
#define MS_ACCESS_COUNT "PBMS_ACCESS_COUNT"
42
#define MS_CREATION_TIME "PBMS_CREATION_TIME"
43
#define MS_BLOB_TYPE "PBMS_BLOB_TYPE"
45
#define MS_REQUEST_SIZE "PBMS_REQUEST_SIZE" // The number of bytes of BLOB data the client requests.
46
#define MS_REQUEST_OFFSET "PBMS_REQUEST_OFFSET" // The offset into the BLOB that the client requests the data from.
48
#define MS_CLOUD_SERVER "PBMS_CLOUD_SERVER"
49
#define MS_CLOUD_BUCKET "PBMS_CLOUD_BUCKET"
50
#define MS_CLOUD_OBJECT_KEY "PBMS_CLOUD_OBJECT_KEY"
51
#define MS_CLOUD_KEY "PBMS_CLOUD_KEY"
52
#define MS_BLOB_SIGNATURE "PBMS_BLOB_SIGNATURE"
53
#define MS_BLOB_DATE "PBMS_BLOB_DATE" // The date used when creating the signature.
55
#define MS_META_NAME_SIZE 32
56
#define MS_META_VALUE_SIZE 1024
57
#define MS_BLOB_ALIAS_SIZE MS_META_VALUE_SIZE
58
#define MS_BLOB_URL_SIZE 200
61
#define DEFAULT_PBMS_PORT 8080
63
#define DEFAULT_PBMS_PORT PBMS_PORT
66
/* PBMS handle types. */
67
typedef void *PBMS; // A connection handle.
69
typedef unsigned char pbms_bool;
71
/* options for pbms_set_option() and pbms_get_option() */
72
enum pbms_option /*: Parameter type | Information */
74
PBMS_OPTION_KEEP_ALIVE, /*: unsigned int* | A boolean value indicating if the keep_alive flag should be set on HTTP requests.(Defalt = false) */
75
PBMS_OPTION_TRANSMITION_TIMEOUT, /*: unsigned int* | If greater than zero this sets a limit to how long a blob transfer can take. (Defalt = 0) */
76
PBMS_OPTION_HOST, /*: (const char *)* | The connection's Media Stream server host IP address. (Read Only) */
77
PBMS_OPTION_PORT, /*: unsigned int* | The connection's Media Stream server host port number. (Read Only) */
78
PBMS_OPTION_DATABASE /*: (const char *)* | The connection's associated database. */
81
typedef size_t (* PBMS_READ_CALLBACK_FUNC) (void *caller_data, char *buffer, size_t size, pbms_bool reset);
82
typedef size_t (* PBMS_WRITE_CALLBACK_FUNC) (void *caller_data, const char *buffer, size_t size, pbms_bool reset);
84
pbms_bool pbms_library_init();
85
void pbms_library_end();
86
PBMS pbms_connect(const char* host, unsigned int port, const char *database);
89
void pbms_close(PBMS pbms);
90
pbms_bool pbms_set_option(PBMS pbms, enum pbms_option option, const void *in_value);
91
pbms_bool pbms_get_option(PBMS pbms, enum pbms_option option, void *out_value);
92
int pbms_errno(PBMS pbms);
93
const char *pbms_error(PBMS pbms);
94
pbms_bool pbms_is_blob_reference(PBMS pbms, const char *ref);
95
pbms_bool pbms_get_blob_size(PBMS pbms, const char *ref, size_t *size);
97
/* Metadata related functions. */
98
pbms_bool pbms_add_metadata(PBMS pbms, const char *name, const char *value);
99
void pbms_clear_metadata(PBMS pbms, const char *name); //If name is NULL all metadata associaed with the connection is removed.
100
unsigned int pbms_reset_metadata(PBMS pbms); //Resets the metadata cursor for downloaded metadata.
101
pbms_bool pbms_next_metadata(PBMS pbms, char *name, char *value, size_t *v_size);
102
pbms_bool pbms_get_metadata_value(PBMS pbms, const char *name, char *buffer, size_t *size);
104
pbms_bool pbms_get_md5_digest(PBMS pbms, char *md5_digest);
106
pbms_bool pbms_put_data(PBMS pbms, const char *table, const char *checksum, char *ref, size_t size, const unsigned char *buffer);
107
pbms_bool pbms_put_data_cb(PBMS pbms, const char *table, const char *checksum, char *ref, size_t size, PBMS_READ_CALLBACK_FUNC cb, void *caller_data);
109
pbms_bool pbms_get_data(PBMS pbms, const char *ref, unsigned char *buffer, size_t buffer_size);
110
pbms_bool pbms_get_data_cb(PBMS pbms, const char *ref, PBMS_WRITE_CALLBACK_FUNC cb, void *caller_data);
112
pbms_bool pbms_get_data_range(PBMS pbms, const char *ref, size_t start_offset, size_t end_offset, unsigned char *buffer, size_t buffer_size, size_t *data_size);
113
pbms_bool pbms_get_data_range_cb(PBMS pbms, const char *ref, size_t start_offset, size_t end_offset, PBMS_WRITE_CALLBACK_FUNC cb, void *caller_data);
115
pbms_bool pbms_get_info(PBMS pbms, const char *ref);
120
#endif // __PBMSLIB_H__