merge
[m6w6/libmemcached] / include / memcached.h
1 /*
2 * Summary: interface for memcached server
3 * Description: main include file for libmemcached
4 *
5 * Copy: See Copyright for the status of this software.
6 *
7 * Author: Brian Aker
8 */
9
10 #ifndef __MEMCACHED_H__
11 #define __MEMCACHED_H__
12
13 #include <stdlib.h>
14 #include <inttypes.h>
15 #include <sys/types.h>
16 #include <netinet/in.h>
17
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21
22 /* These are Private and should not be used by applications */
23 #define MEMCACHED_VERSION_STRING_LENGTH 12
24
25 /* Public defines */
26 #define MEMCACHED_DEFAULT_PORT 11211
27 #define MEMCACHED_MAX_KEY 251 /* We add one to have it null terminated */
28 #define MEMCACHED_MAX_BUFFER 8196
29 #define MEMCACHED_MAX_HOST_LENGTH 64
30 #define MEMCACHED_WHEEL_SIZE 1024
31 #define MEMCACHED_STRIDE 4
32 #define MEMCACHED_MAX_REPLICAS 4
33 #define MEMCACHED_DEFAULT_TIMEOUT INT32_MAX
34
35 /* string value */
36 #define LIBMEMCACHED_VERSION_STRING "0.17"
37
38 typedef enum {
39 MEMCACHED_SUCCESS,
40 MEMCACHED_FAILURE,
41 MEMCACHED_HOST_LOOKUP_FAILURE,
42 MEMCACHED_CONNECTION_FAILURE,
43 MEMCACHED_CONNECTION_BIND_FAILURE,
44 MEMCACHED_WRITE_FAILURE,
45 MEMCACHED_READ_FAILURE,
46 MEMCACHED_UNKNOWN_READ_FAILURE,
47 MEMCACHED_PROTOCOL_ERROR,
48 MEMCACHED_CLIENT_ERROR,
49 MEMCACHED_SERVER_ERROR,
50 MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE,
51 MEMCACHED_DATA_EXISTS,
52 MEMCACHED_DATA_DOES_NOT_EXIST,
53 MEMCACHED_NOTSTORED,
54 MEMCACHED_STORED,
55 MEMCACHED_NOTFOUND,
56 MEMCACHED_MEMORY_ALLOCATION_FAILURE,
57 MEMCACHED_PARTIAL_READ,
58 MEMCACHED_SOME_ERRORS,
59 MEMCACHED_NO_SERVERS,
60 MEMCACHED_END,
61 MEMCACHED_DELETED,
62 MEMCACHED_VALUE,
63 MEMCACHED_STAT,
64 MEMCACHED_ERRNO,
65 MEMCACHED_FAIL_UNIX_SOCKET,
66 MEMCACHED_NOT_SUPPORTED,
67 MEMCACHED_NO_KEY_PROVIDED,
68 MEMCACHED_FETCH_NOTFINISHED,
69 MEMCACHED_TIMEOUT,
70 MEMCACHED_BUFFERED,
71 MEMCACHED_BAD_KEY_PROVIDED,
72 MEMCACHED_MAXIMUM_RETURN, /* Always add new error code before */
73 } memcached_return;
74
75 typedef struct memcached_st memcached_st;
76 typedef struct memcached_stat_st memcached_stat_st;
77 typedef struct memcached_result_st memcached_result_st;
78 typedef struct memcached_string_st memcached_string_st;
79 typedef struct memcached_server_st memcached_server_st;
80 typedef memcached_return (*memcached_clone_func)(memcached_st *parent, memcached_st *clone);
81 typedef memcached_return (*memcached_cleanup_func)(memcached_st *ptr);
82 typedef void (*memcached_free_function)(memcached_st *ptr, void *mem);
83 typedef void *(*memcached_malloc_function)(memcached_st *ptr, const size_t size);
84 typedef void *(*memcached_realloc_function)(memcached_st *ptr, void *mem, const size_t size);
85 typedef memcached_return (*memcached_execute_function)(memcached_st *ptr, memcached_result_st *result, void *context);
86 typedef memcached_return (*memcached_server_function)(memcached_st *ptr, memcached_server_st *server, void *context);
87
88 typedef enum {
89 MEMCACHED_DISTRIBUTION_MODULA,
90 MEMCACHED_DISTRIBUTION_CONSISTENT,
91 } memcached_server_distribution;
92
93 typedef enum {
94 MEMCACHED_BEHAVIOR_NO_BLOCK,
95 MEMCACHED_BEHAVIOR_TCP_NODELAY,
96 MEMCACHED_BEHAVIOR_HASH,
97 MEMCACHED_BEHAVIOR_KETAMA,
98 MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE,
99 MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE,
100 MEMCACHED_BEHAVIOR_CACHE_LOOKUPS,
101 MEMCACHED_BEHAVIOR_SUPPORT_CAS,
102 MEMCACHED_BEHAVIOR_POLL_TIMEOUT,
103 MEMCACHED_BEHAVIOR_DISTRIBUTION,
104 MEMCACHED_BEHAVIOR_BUFFER_REQUESTS,
105 MEMCACHED_BEHAVIOR_SORT_HOSTS,
106 MEMCACHED_BEHAVIOR_VERIFY_KEY,
107 MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT,
108 MEMCACHED_BEHAVIOR_REPLICAS,
109 } memcached_behavior;
110
111 typedef enum {
112 MEMCACHED_CALLBACK_USER_DATA,
113 MEMCACHED_CALLBACK_CLEANUP_FUNCTION,
114 MEMCACHED_CALLBACK_CLONE_FUNCTION,
115 MEMCACHED_CALLBACK_MALLOC_FUNCTION,
116 MEMCACHED_CALLBACK_REALLOC_FUNCTION,
117 MEMCACHED_CALLBACK_FREE_FUNCTION,
118 } memcached_callback;
119
120 typedef enum {
121 MEMCACHED_HASH_DEFAULT= 0,
122 MEMCACHED_HASH_MD5,
123 MEMCACHED_HASH_CRC,
124 MEMCACHED_HASH_FNV1_64,
125 MEMCACHED_HASH_FNV1A_64,
126 MEMCACHED_HASH_FNV1_32,
127 MEMCACHED_HASH_FNV1A_32,
128 MEMCACHED_HASH_KETAMA,
129 MEMCACHED_HASH_HSIEH,
130 } memcached_hash;
131
132 typedef enum {
133 MEMCACHED_CONNECTION_UNKNOWN,
134 MEMCACHED_CONNECTION_TCP,
135 MEMCACHED_CONNECTION_UDP,
136 MEMCACHED_CONNECTION_UNIX_SOCKET,
137 } memcached_connection;
138
139 typedef enum {
140 MEMCACHED_NOT_ALLOCATED,
141 MEMCACHED_ALLOCATED,
142 MEMCACHED_USED,
143 } memcached_allocated;
144
145 struct memcached_server_st {
146 char hostname[MEMCACHED_MAX_HOST_LENGTH];
147 unsigned int port;
148 int fd;
149 int cached_errno;
150 unsigned int cursor_active;
151 char write_buffer[MEMCACHED_MAX_BUFFER];
152 size_t write_buffer_offset;
153 char read_buffer[MEMCACHED_MAX_BUFFER];
154 size_t read_data_length;
155 size_t read_buffer_length;
156 char *read_ptr;
157 memcached_allocated sockaddr_inited;
158 struct addrinfo *address_info;
159 memcached_connection type;
160 uint8_t major_version;
161 uint8_t minor_version;
162 uint8_t micro_version;
163 uint16_t count;
164 memcached_st *root;
165 };
166
167 struct memcached_stat_st {
168 uint32_t pid;
169 uint32_t uptime;
170 uint32_t threads;
171 uint32_t time;
172 uint32_t pointer_size;
173 uint32_t rusage_user_seconds;
174 uint32_t rusage_user_microseconds;
175 uint32_t rusage_system_seconds;
176 uint32_t rusage_system_microseconds;
177 uint32_t curr_items;
178 uint32_t total_items;
179 uint64_t limit_maxbytes;
180 uint32_t curr_connections;
181 uint32_t total_connections;
182 uint32_t connection_structures;
183 uint64_t bytes;
184 uint64_t cmd_get;
185 uint64_t cmd_set;
186 uint64_t get_hits;
187 uint64_t get_misses;
188 uint64_t evictions;
189 uint64_t bytes_read;
190 uint64_t bytes_written;
191 char version[MEMCACHED_VERSION_STRING_LENGTH];
192 };
193
194 struct memcached_string_st {
195 memcached_st *root;
196 memcached_allocated is_allocated;
197 char *string;
198 char *end;
199 size_t current_size;
200 size_t block_size;
201 };
202
203 struct memcached_result_st {
204 memcached_allocated is_allocated;
205 memcached_st *root;
206 char key[MEMCACHED_MAX_KEY];
207 size_t key_length;
208 memcached_string_st value;
209 uint32_t flags;
210 uint64_t cas;
211 /* Add result callback function */
212 };
213
214 struct memcached_st {
215 memcached_allocated is_allocated;
216 memcached_server_st *hosts;
217 unsigned int number_of_hosts;
218 unsigned int cursor_server;
219 int cached_errno;
220 uint32_t flags;
221 int send_size;
222 int recv_size;
223 int32_t poll_timeout;
224 int32_t connect_timeout;
225 memcached_result_st result;
226 memcached_hash hash;
227 memcached_server_distribution distribution;
228 void *user_data;
229 unsigned int wheel[MEMCACHED_WHEEL_SIZE];
230 memcached_clone_func on_clone;
231 memcached_cleanup_func on_cleanup;
232 memcached_free_function call_free;
233 memcached_malloc_function call_malloc;
234 memcached_realloc_function call_realloc;
235 uint8_t number_of_replicas;
236 #ifdef NOT_USED /* Future Use */
237 memcached_return warning;
238 #endif
239 };
240
241 /* Public API */
242 const char * memcached_lib_version(void);
243
244 memcached_st *memcached_create(memcached_st *ptr);
245 void memcached_free(memcached_st *ptr);
246 memcached_st *memcached_clone(memcached_st *clone, memcached_st *ptr);
247
248 memcached_return memcached_delete(memcached_st *ptr, char *key, size_t key_length,
249 time_t expiration);
250 memcached_return memcached_increment(memcached_st *ptr,
251 char *key, size_t key_length,
252 uint32_t offset,
253 uint64_t *value);
254 memcached_return memcached_decrement(memcached_st *ptr,
255 char *key, size_t key_length,
256 uint32_t offset,
257 uint64_t *value);
258 void memcached_stat_free(memcached_st *, memcached_stat_st *);
259 memcached_stat_st *memcached_stat(memcached_st *ptr, char *args, memcached_return *error);
260 memcached_return memcached_stat_servername(memcached_stat_st *stat, char *args,
261 char *hostname, unsigned int port);
262 memcached_return memcached_flush(memcached_st *ptr, time_t expiration);
263 memcached_return memcached_verbosity(memcached_st *ptr, unsigned int verbosity);
264 memcached_return memcached_version(memcached_st *ptr);
265 void memcached_quit(memcached_st *ptr);
266 char *memcached_strerror(memcached_st *ptr, memcached_return rc);
267 memcached_return memcached_behavior_set(memcached_st *ptr, memcached_behavior flag, uint64_t data);
268 uint64_t memcached_behavior_get(memcached_st *ptr, memcached_behavior flag);
269
270 /* All of the functions for adding data to the server */
271 memcached_return memcached_set(memcached_st *ptr, char *key, size_t key_length,
272 char *value, size_t value_length,
273 time_t expiration,
274 uint32_t flags);
275 memcached_return memcached_add(memcached_st *ptr, char *key, size_t key_length,
276 char *value, size_t value_length,
277 time_t expiration,
278 uint32_t flags);
279 memcached_return memcached_replace(memcached_st *ptr, char *key, size_t key_length,
280 char *value, size_t value_length,
281 time_t expiration,
282 uint32_t flags);
283 memcached_return memcached_append(memcached_st *ptr,
284 char *key, size_t key_length,
285 char *value, size_t value_length,
286 time_t expiration,
287 uint32_t flags);
288 memcached_return memcached_prepend(memcached_st *ptr,
289 char *key, size_t key_length,
290 char *value, size_t value_length,
291 time_t expiration,
292 uint32_t flags);
293 memcached_return memcached_cas(memcached_st *ptr,
294 char *key, size_t key_length,
295 char *value, size_t value_length,
296 time_t expiration,
297 uint32_t flags,
298 uint64_t cas);
299
300 /* Get functions */
301 char *memcached_get(memcached_st *ptr, char *key, size_t key_length,
302 size_t *value_length,
303 uint32_t *flags,
304 memcached_return *error);
305 memcached_return memcached_mget(memcached_st *ptr,
306 char **keys, size_t *key_length,
307 unsigned int number_of_keys);
308 char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length,
309 size_t *value_length, uint32_t *flags,
310 memcached_return *error);
311 memcached_result_st *memcached_fetch_result(memcached_st *ptr,
312 memcached_result_st *result,
313 memcached_return *error);
314
315 /* Server Public functions */
316 #define memcached_server_count(A) (A)->number_of_hosts
317 #define memcached_server_name(A,B) (B).hostname
318 #define memcached_server_port(A,B) (B).port
319 #define memcached_server_list(A) (A)->hosts
320 #define memcached_server_response_count(A) (A)->cursor_active
321
322
323 memcached_return memcached_server_add_udp(memcached_st *ptr,
324 char *hostname,
325 unsigned int port);
326 memcached_return memcached_server_add_unix_socket(memcached_st *ptr,
327 char *filename);
328 memcached_return memcached_server_add(memcached_st *ptr, char *hostname,
329 unsigned int port);
330 void memcached_server_list_free(memcached_server_st *ptr);
331 memcached_return memcached_server_push(memcached_st *ptr, memcached_server_st *list);
332
333 memcached_server_st *memcached_server_list_append(memcached_server_st *ptr,
334 char *hostname, unsigned int port,
335 memcached_return *error);
336 unsigned int memcached_server_list_count(memcached_server_st *ptr);
337 memcached_server_st *memcached_servers_parse(char *server_strings);
338
339 char *memcached_stat_get_value(memcached_st *ptr, memcached_stat_st *stat,
340 char *key, memcached_return *error);
341 char ** memcached_stat_get_keys(memcached_st *ptr, memcached_stat_st *stat,
342 memcached_return *error);
343
344 char *memcached_get_by_key(memcached_st *ptr,
345 char *master_key, size_t master_key_length,
346 char *key, size_t key_length,
347 size_t *value_length,
348 uint32_t *flags,
349 memcached_return *error);
350
351 memcached_return memcached_mget_by_key(memcached_st *ptr,
352 char *master_key, size_t master_key_length,
353 char **keys, size_t *key_length,
354 unsigned int number_of_keys);
355
356 memcached_return memcached_set_by_key(memcached_st *ptr,
357 char *master_key, size_t master_key_length,
358 char *key, size_t key_length,
359 char *value, size_t value_length,
360 time_t expiration,
361 uint32_t flags);
362
363 memcached_return memcached_add_by_key(memcached_st *ptr,
364 char *master_key, size_t master_key_length,
365 char *key, size_t key_length,
366 char *value, size_t value_length,
367 time_t expiration,
368 uint32_t flags);
369
370 memcached_return memcached_replace_by_key(memcached_st *ptr,
371 char *master_key, size_t master_key_length,
372 char *key, size_t key_length,
373 char *value, size_t value_length,
374 time_t expiration,
375 uint32_t flags);
376
377 memcached_return memcached_prepend_by_key(memcached_st *ptr,
378 char *master_key, size_t master_key_length,
379 char *key, size_t key_length,
380 char *value, size_t value_length,
381 time_t expiration,
382 uint32_t flags);
383
384 memcached_return memcached_append_by_key(memcached_st *ptr,
385 char *master_key, size_t master_key_length,
386 char *key, size_t key_length,
387 char *value, size_t value_length,
388 time_t expiration,
389 uint32_t flags);
390
391 memcached_return memcached_cas_by_key(memcached_st *ptr,
392 char *master_key, size_t master_key_length,
393 char *key, size_t key_length,
394 char *value, size_t value_length,
395 time_t expiration,
396 uint32_t flags,
397 uint64_t cas);
398 memcached_return memcached_delete_by_key(memcached_st *ptr,
399 char *master_key, size_t master_key_length,
400 char *key, size_t key_length,
401 time_t expiration);
402
403 memcached_return memcached_fetch_execute(memcached_st *ptr,
404 unsigned int (*callback[])(memcached_st *ptr, memcached_result_st *result, void *context),
405 void *context,
406 unsigned int number_of_callbacks
407 );
408
409 memcached_return memcached_callback_set(memcached_st *ptr,
410 memcached_callback flag,
411 void *data);
412 void *memcached_callback_get(memcached_st *ptr,
413 memcached_callback flag,
414 memcached_return *error);
415
416 memcached_return memcached_server_cursor(memcached_st *ptr,
417 memcached_server_function *callback,
418 void *context,
419 unsigned int number_of_callbacks);
420
421 /* Result Struct */
422 void memcached_result_free(memcached_result_st *result);
423 memcached_result_st *memcached_result_create(memcached_st *ptr,
424 memcached_result_st *result);
425 #define memcached_result_key_value(A) (A)->key
426 #define memcached_result_key_length(A) (A)->key_length
427 #ifdef FIX
428 #define memcached_result_value(A) memcached_string_value((A)->value)
429 #define memcached_result_length(A) memcached_string_length((A)->value)
430 #else
431 char *memcached_result_value(memcached_result_st *ptr);
432 size_t memcached_result_length(memcached_result_st *ptr);
433 #endif
434 #define memcached_result_flags(A) (A)->flags
435 #define memcached_result_cas(A) (A)->cas
436
437
438 #ifndef __WATCHPOINT_H__
439 #define __WATCHPOINT_H__
440 /* Some personal debugging functions */
441 #ifdef HAVE_DEBUG
442 #define WATCHPOINT fprintf(stderr, "\nWATCHPOINT %s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout);
443 #ifdef __MEMCACHED_H__
444 #define WATCHPOINT_ERROR(A) fprintf(stderr, "\nWATCHPOINT %s:%d %s\n", __FILE__, __LINE__, memcached_strerror(NULL, A));fflush(stdout);
445 #define WATCHPOINT_IFERROR(A) if(A != MEMCACHED_SUCCESS)fprintf(stderr, "\nWATCHPOINT %s:%d %s\n", __FILE__, __LINE__, memcached_strerror(NULL, A));fflush(stdout);
446 #endif
447 #define WATCHPOINT_STRING(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %s\n", __FILE__, __LINE__,__func__,A);fflush(stdout);
448 #define WATCHPOINT_STRING_LENGTH(A,B) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %.*s\n", __FILE__, __LINE__,__func__,(int)B,A);fflush(stdout);
449 #define WATCHPOINT_NUMBER(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %zu\n", __FILE__, __LINE__,__func__,(size_t)(A));fflush(stdout);
450 #define WATCHPOINT_ERRNO(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %s\n", __FILE__, __LINE__,__func__, strerror(A));fflush(stdout);
451 #define WATCHPOINT_ASSERT(A) assert((A));
452 #else
453 #define WATCHPOINT
454 #ifdef __MEMCACHED_H__
455 #define WATCHPOINT_ERROR(A)
456 #define WATCHPOINT_IFERROR(A)
457 #endif
458 #define WATCHPOINT_STRING(A)
459 #define WATCHPOINT_NUMBER(A)
460 #define WATCHPOINT_ERRNO(A)
461 #define WATCHPOINT_ASSERT(A)
462 #endif
463
464 #endif /* __WATCHPOINT_H__ */
465
466
467 #ifdef __cplusplus
468 }
469 #endif
470
471 #endif /* __MEMCACHED_H__ */