X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=include%2Flibmemcachedprotocol-0.0%2Fcallback.h;h=ceb441bf6141d8de74c4af4a53e925a87e8815dd;hb=fc1ccb6416b81f3c62614805158f8ae1180471dd;hp=638536c8e0bf2543a15ef8015b447d3d9d5e2545;hpb=5e760300d15ef4c5b7eed3fb9f37920ebca2f6ec;p=awesomized%2Flibmemcached diff --git a/include/libmemcachedprotocol-0.0/callback.h b/include/libmemcachedprotocol-0.0/callback.h index 638536c8..ceb441bf 100644 --- a/include/libmemcachedprotocol-0.0/callback.h +++ b/include/libmemcachedprotocol-0.0/callback.h @@ -1,10 +1,17 @@ /* - * Summary: Definition of the callback interface - * - * Copy: See Copyright for the status of this software. - * - * Author: Trond Norbye - */ + +--------------------------------------------------------------------+ + | libmemcached - C/C++ Client Library for memcached | + +--------------------------------------------------------------------+ + | Redistribution and use in source and binary forms, with or without | + | modification, are permitted under the terms of the BSD license. | + | You should have received a copy of the license in a bundled file | + | named LICENSE; in case you did not receive a copy you can review | + | the terms online at: https://opensource.org/licenses/BSD-3-Clause | + +--------------------------------------------------------------------+ + | Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ | + | Copyright (c) 2020 Michael Wallner | + +--------------------------------------------------------------------+ +*/ #pragma once @@ -20,14 +27,9 @@ * @param cas The CAS value to insert into the response (should be 0 * if you don't care) */ -typedef protocol_binary_response_status -(*memcached_binary_protocol_get_response_handler)(const void *cookie, - const void *key, - uint16_t keylen, - const void *body, - uint32_t bodylen, - uint32_t flags, - uint64_t cas); +typedef protocol_binary_response_status (*memcached_binary_protocol_get_response_handler)( + const void *cookie, const void *key, uint16_t keylen, const void *body, uint32_t bodylen, + uint32_t flags, uint64_t cas); /** * Callback to send data back from a STAT command * @@ -37,12 +39,8 @@ typedef protocol_binary_response_status * @param body What to store in the body of the package * @param bodylen The number of bytes of the body */ -typedef protocol_binary_response_status -(*memcached_binary_protocol_stat_response_handler)(const void *cookie, - const void *key, - uint16_t keylen, - const void *body, - uint32_t bodylen); +typedef protocol_binary_response_status (*memcached_binary_protocol_stat_response_handler)( + const void *cookie, const void *key, uint16_t keylen, const void *body, uint32_t bodylen); /** * Callback to send data back from a VERSION command * @@ -50,11 +48,8 @@ typedef protocol_binary_response_status * @param text The version string * @param length The number of bytes in the version string */ -typedef protocol_binary_response_status -(*memcached_binary_protocol_version_response_handler)(const void *cookie, - const void *text, - uint32_t length); - +typedef protocol_binary_response_status (*memcached_binary_protocol_version_response_handler)( + const void *cookie, const void *text, uint32_t length); /** * In the low level interface you need to format the response @@ -65,9 +60,9 @@ typedef protocol_binary_response_status * @param response Pointer to the response packet to send * */ -typedef protocol_binary_response_status (*memcached_binary_protocol_raw_response_handler)(const void *cookie, - protocol_binary_request_header *request, - protocol_binary_response_header *response); +typedef protocol_binary_response_status (*memcached_binary_protocol_raw_response_handler)( + const void *cookie, protocol_binary_request_header *request, + protocol_binary_response_header *response); /** * In the low lever interface you have to do most of the work by @@ -78,9 +73,9 @@ typedef protocol_binary_response_status (*memcached_binary_protocol_raw_response * anything outside the command. * @param resonse_handler call this function to send data back to the client */ -typedef protocol_binary_response_status (*memcached_binary_protocol_command_handler)(const void *cookie, - protocol_binary_request_header *header, - memcached_binary_protocol_raw_response_handler response_handler); +typedef protocol_binary_response_status (*memcached_binary_protocol_command_handler)( + const void *cookie, protocol_binary_request_header *header, + memcached_binary_protocol_raw_response_handler response_handler); /** * The raw interface to the packets is implemented in version 0. It contains @@ -88,10 +83,9 @@ typedef protocol_binary_response_status (*memcached_binary_protocol_command_hand * com code. */ typedef struct { - memcached_binary_protocol_command_handler comcode[256]; + memcached_binary_protocol_command_handler comcode[256]; } memcached_binary_protocol_callback_v0_st; - /** * The first version of the callback struct containing all of the * documented commands in the initial release of the binary protocol @@ -101,316 +95,270 @@ typedef struct { * knows how to deal with them so you don't need to worry about that :-) */ typedef struct { - /** - * Add an item to the cache - * @param cookie id of the client receiving the command - * @param key the key to add - * @param len the length of the key - * @param val the value to store for the key (may be NIL) - * @param vallen the length of the data - * @param flags the flags to store with the key - * @param exptime the expiry time for the key-value pair - * @param cas the resulting cas for the add operation (if success) - */ - protocol_binary_response_status (*add)(const void *cookie, - const void *key, - uint16_t keylen, - const void* val, - uint32_t vallen, - uint32_t flags, - uint32_t exptime, - uint64_t *cas); - - /** - * Append data to an existing key-value pair. - * - * @param cookie id of the client receiving the command - * @param key the key to add data to - * @param len the length of the key - * @param val the value to append to the value - * @param vallen the length of the data - * @param cas the CAS in the request - * @param result_cas the resulting cas for the append operation - * - */ - protocol_binary_response_status (*append)(const void *cookie, - const void *key, - uint16_t keylen, - const void* val, - uint32_t vallen, - uint64_t cas, + /** + * Add an item to the cache + * @param cookie id of the client receiving the command + * @param key the key to add + * @param len the length of the key + * @param val the value to store for the key (may be NIL) + * @param vallen the length of the data + * @param flags the flags to store with the key + * @param exptime the expiry time for the key-value pair + * @param cas the resulting cas for the add operation (if success) + */ + protocol_binary_response_status (*add)(const void *cookie, const void *key, uint16_t keylen, + const void *val, uint32_t vallen, uint32_t flags, + uint32_t exptime, uint64_t *cas); + + /** + * Append data to an existing key-value pair. + * + * @param cookie id of the client receiving the command + * @param key the key to add data to + * @param len the length of the key + * @param val the value to append to the value + * @param vallen the length of the data + * @param cas the CAS in the request + * @param result_cas the resulting cas for the append operation + * + */ + protocol_binary_response_status (*append)(const void *cookie, const void *key, uint16_t keylen, + const void *val, uint32_t vallen, uint64_t cas, + uint64_t *result_cas); + + /** + * Decrement the value for a key + * + * @param cookie id of the client receiving the command + * @param key the key to decrement the value for + * @param len the length of the key + * @param delta the amount to decrement + * @param initial initial value to store (if the key doesn't exist) + * @param expiration expiration time for the object (if the key doesn't exist) + * @param cas the CAS in the request + * @param result the result from the decrement + * @param result_cas the cas of the item + * + */ + protocol_binary_response_status (*decrement)(const void *cookie, const void *key, uint16_t keylen, + uint64_t delta, uint64_t initial, + uint32_t expiration, uint64_t *result, + uint64_t *result_cas); + + /** + * Delete an existing key + * + * @param cookie id of the client receiving the command + * @param key the key to delete_object + * @param len the length of the key + * @param cas the CAS in the request + */ + protocol_binary_response_status (*delete_object)(const void *cookie, const void *key, + uint16_t keylen, uint64_t cas); + + /** + * Flush the cache + * + * @param cookie id of the client receiving the command + * @param when when the cache should be flushed (0 == immediately) + */ + protocol_binary_response_status (*flush_object)(const void *cookie, uint32_t when); + + /** + * Get a key-value pair + * + * @param cookie id of the client receiving the command + * @param key the key to get + * @param len the length of the key + * @param response_handler to send the result back to the client + */ + protocol_binary_response_status (*get)( + const void *cookie, const void *key, uint16_t keylen, + memcached_binary_protocol_get_response_handler response_handler); + + /** + * Increment the value for a key + * + * @param cookie id of the client receiving the command + * @param key the key to increment the value on + * @param len the length of the key + * @param delta the amount to increment + * @param initial initial value to store (if the key doesn't exist) + * @param expiration expiration time for the object (if the key doesn't exist) + * @param cas the CAS in the request + * @param result the result from the decrement + * @param result_cas the cas of the item + * + */ + protocol_binary_response_status (*increment)(const void *cookie, const void *key, uint16_t keylen, + uint64_t delta, uint64_t initial, + uint32_t expiration, uint64_t *result, + uint64_t *result_cas); + + /** + * The noop command was received. This is just a notification callback (the + * response is automatically created). + * + * @param cookie id of the client receiving the command + */ + protocol_binary_response_status (*noop)(const void *cookie); + + /** + * Prepend data to an existing key-value pair. + * + * @param cookie id of the client receiving the command + * @param key the key to prepend data to + * @param len the length of the key + * @param val the value to prepend to the value + * @param vallen the length of the data + * @param cas the CAS in the request + * @param result-cas the cas id of the item + * + */ + protocol_binary_response_status (*prepend)(const void *cookie, const void *key, uint16_t keylen, + const void *val, uint32_t vallen, uint64_t cas, uint64_t *result_cas); - /** - * Decrement the value for a key - * - * @param cookie id of the client receiving the command - * @param key the key to decrement the value for - * @param len the length of the key - * @param delta the amount to decrement - * @param initial initial value to store (if the key doesn't exist) - * @param expiration expiration time for the object (if the key doesn't exist) - * @param cas the CAS in the request - * @param result the result from the decrement - * @param result_cas the cas of the item - * - */ - protocol_binary_response_status (*decrement)(const void *cookie, - const void *key, - uint16_t keylen, - uint64_t delta, - uint64_t initial, - uint32_t expiration, - uint64_t *result, - uint64_t *result_cas); - - /** - * Delete an existing key - * - * @param cookie id of the client receiving the command - * @param key the key to delete_object - * @param len the length of the key - * @param cas the CAS in the request - */ - protocol_binary_response_status (*delete_object)(const void *cookie, - const void *key, - uint16_t keylen, - uint64_t cas); - - - /** - * Flush the cache - * - * @param cookie id of the client receiving the command - * @param when when the cache should be flushed (0 == immediately) - */ - protocol_binary_response_status (*flush_object)(const void *cookie, - uint32_t when); - - - - /** - * Get a key-value pair - * - * @param cookie id of the client receiving the command - * @param key the key to get - * @param len the length of the key - * @param response_handler to send the result back to the client - */ - protocol_binary_response_status (*get)(const void *cookie, - const void *key, - uint16_t keylen, - memcached_binary_protocol_get_response_handler response_handler); - - /** - * Increment the value for a key - * - * @param cookie id of the client receiving the command - * @param key the key to increment the value on - * @param len the length of the key - * @param delta the amount to increment - * @param initial initial value to store (if the key doesn't exist) - * @param expiration expiration time for the object (if the key doesn't exist) - * @param cas the CAS in the request - * @param result the result from the decrement - * @param result_cas the cas of the item - * - */ - protocol_binary_response_status (*increment)(const void *cookie, - const void *key, - uint16_t keylen, - uint64_t delta, - uint64_t initial, - uint32_t expiration, - uint64_t *result, - uint64_t *result_cas); - - /** - * The noop command was received. This is just a notification callback (the - * response is automatically created). - * - * @param cookie id of the client receiving the command - */ - protocol_binary_response_status (*noop)(const void *cookie); - - /** - * Prepend data to an existing key-value pair. - * - * @param cookie id of the client receiving the command - * @param key the key to prepend data to - * @param len the length of the key - * @param val the value to prepend to the value - * @param vallen the length of the data - * @param cas the CAS in the request - * @param result-cas the cas id of the item - * - */ - protocol_binary_response_status (*prepend)(const void *cookie, - const void *key, - uint16_t keylen, - const void* val, - uint32_t vallen, - uint64_t cas, - uint64_t *result_cas); - - /** - * The quit command was received. This is just a notification callback (the - * response is automatically created). - * - * @param cookie id of the client receiving the command - */ - protocol_binary_response_status (*quit)(const void *cookie); - - - /** - * Replace an existing item to the cache - * - * @param cookie id of the client receiving the command - * @param key the key to replace the content for - * @param len the length of the key - * @param val the value to store for the key (may be NIL) - * @param vallen the length of the data - * @param flags the flags to store with the key - * @param exptime the expiry time for the key-value pair - * @param cas the cas id in the request - * @param result_cas the cas id of the item - */ - protocol_binary_response_status (*replace)(const void *cookie, - const void *key, - uint16_t keylen, - const void* val, - uint32_t vallen, - uint32_t flags, - uint32_t exptime, - uint64_t cas, - uint64_t *result_cas); - - - /** - * Set a key-value pair in the cache - * - * @param cookie id of the client receiving the command - * @param key the key to insert - * @param len the length of the key - * @param val the value to store for the key (may be NIL) - * @param vallen the length of the data - * @param flags the flags to store with the key - * @param exptime the expiry time for the key-value pair - * @param cas the cas id in the request - * @param result_cas the cas id of the new item - */ - protocol_binary_response_status (*set)(const void *cookie, - const void *key, - uint16_t keylen, - const void* val, - uint32_t vallen, - uint32_t flags, - uint32_t exptime, - uint64_t cas, - uint64_t *result_cas); - - /** - * Get status information - * - * @param cookie id of the client receiving the command - * @param key the key to get status for (or NIL to request all status). - * Remember to insert the terminating packet if multiple - * packets should be returned. - * @param keylen the length of the key - * @param response_handler to send the result back to the client, but - * don't send reply on success! - * - */ - protocol_binary_response_status (*stat)(const void *cookie, - const void *key, - uint16_t keylen, - memcached_binary_protocol_stat_response_handler response_handler); - - /** - * Get the version information - * - * @param cookie id of the client receiving the command - * @param response_handler to send the result back to the client, but - * don't send reply on success! - * - */ - protocol_binary_response_status (*version)(const void *cookie, - memcached_binary_protocol_version_response_handler response_handler); + /** + * The quit command was received. This is just a notification callback (the + * response is automatically created). + * + * @param cookie id of the client receiving the command + */ + protocol_binary_response_status (*quit)(const void *cookie); + + /** + * Replace an existing item to the cache + * + * @param cookie id of the client receiving the command + * @param key the key to replace the content for + * @param len the length of the key + * @param val the value to store for the key (may be NIL) + * @param vallen the length of the data + * @param flags the flags to store with the key + * @param exptime the expiry time for the key-value pair + * @param cas the cas id in the request + * @param result_cas the cas id of the item + */ + protocol_binary_response_status (*replace)(const void *cookie, const void *key, uint16_t keylen, + const void *val, uint32_t vallen, uint32_t flags, + uint32_t exptime, uint64_t cas, uint64_t *result_cas); + + /** + * Set a key-value pair in the cache + * + * @param cookie id of the client receiving the command + * @param key the key to insert + * @param len the length of the key + * @param val the value to store for the key (may be NIL) + * @param vallen the length of the data + * @param flags the flags to store with the key + * @param exptime the expiry time for the key-value pair + * @param cas the cas id in the request + * @param result_cas the cas id of the new item + */ + protocol_binary_response_status (*set)(const void *cookie, const void *key, uint16_t keylen, + const void *val, uint32_t vallen, uint32_t flags, + uint32_t exptime, uint64_t cas, uint64_t *result_cas); + + /** + * Get status information + * + * @param cookie id of the client receiving the command + * @param key the key to get status for (or NIL to request all status). + * Remember to insert the terminating packet if multiple + * packets should be returned. + * @param keylen the length of the key + * @param response_handler to send the result back to the client, but + * don't send reply on success! + * + */ + protocol_binary_response_status (*stat)( + const void *cookie, const void *key, uint16_t keylen, + memcached_binary_protocol_stat_response_handler response_handler); + + /** + * Get the version information + * + * @param cookie id of the client receiving the command + * @param response_handler to send the result back to the client, but + * don't send reply on success! + * + */ + protocol_binary_response_status (*version)( + const void *cookie, memcached_binary_protocol_version_response_handler response_handler); } memcached_binary_protocol_callback_v1_st; - /** * The version numbers for the different callback structures. */ typedef enum { - /** Version 0 is a lowlevel interface that tries to maximize your freedom */ - MEMCACHED_PROTOCOL_HANDLER_V0= 0, - /** - * Version 1 abstracts more of the protocol details, and let you work at - * a logical level - */ - MEMCACHED_PROTOCOL_HANDLER_V1= 1 + /** Version 0 is a lowlevel interface that tries to maximize your freedom */ + MEMCACHED_PROTOCOL_HANDLER_V0 = 0, + /** + * Version 1 abstracts more of the protocol details, and let you work at + * a logical level + */ + MEMCACHED_PROTOCOL_HANDLER_V1 = 1 } memcached_protocol_interface_version_t; /** * Definition of the protocol callback structure. */ typedef struct { - /** - * The interface version you provide callbacks for. - */ - memcached_protocol_interface_version_t interface_version; - - /** - * Callback fired just before the command will be executed. - * - * @param cookie id of the client receiving the command - * @param header the command header as received on the wire. If you look - * at the content you must ensure that you don't - * try to access beyond the end of the message. - */ - void (*pre_execute)(const void *cookie, - protocol_binary_request_header *header); - /** - * Callback fired just after the command was exected (please note - * that the data transfer back to the client is not finished at this - * time). - * - * @param cookie id of the client receiving the command - * @param header the command header as received on the wire. If you look - * at the content you must ensure that you don't - * try to access beyond the end of the message. - */ - void (*post_execute)(const void *cookie, - protocol_binary_request_header *header); - - /** - * Callback fired if no specialized callback is registered for this - * specific command code. - * - * @param cookie id of the client receiving the command - * @param header the command header as received on the wire. You must - * ensure that you don't try to access beyond the end of the - * message. - * @param response_handler The response handler to send data back. - */ - protocol_binary_response_status (*unknown)(const void *cookie, - protocol_binary_request_header *header, - memcached_binary_protocol_raw_response_handler response_handler); - - /** - * The different interface levels we support. A pointer is used so the - * size of the structure is fixed. You must ensure that the memory area - * passed as the pointer is valid as long as you use the protocol handler. - */ - union { - memcached_binary_protocol_callback_v0_st v0; - - /** - * The first version of the callback struct containing all of the - * documented commands in the initial release of the binary protocol - * (aka. memcached 1.4.0). - */ - memcached_binary_protocol_callback_v1_st v1; - } interface; + /** + * The interface version you provide callbacks for. + */ + memcached_protocol_interface_version_t interface_version; + + /** + * Callback fired just before the command will be executed. + * + * @param cookie id of the client receiving the command + * @param header the command header as received on the wire. If you look + * at the content you must ensure that you don't + * try to access beyond the end of the message. + */ + void (*pre_execute)(const void *cookie, protocol_binary_request_header *header); + /** + * Callback fired just after the command was exected (please note + * that the data transfer back to the client is not finished at this + * time). + * + * @param cookie id of the client receiving the command + * @param header the command header as received on the wire. If you look + * at the content you must ensure that you don't + * try to access beyond the end of the message. + */ + void (*post_execute)(const void *cookie, protocol_binary_request_header *header); + + /** + * Callback fired if no specialized callback is registered for this + * specific command code. + * + * @param cookie id of the client receiving the command + * @param header the command header as received on the wire. You must + * ensure that you don't try to access beyond the end of the + * message. + * @param response_handler The response handler to send data back. + */ + protocol_binary_response_status (*unknown)( + const void *cookie, protocol_binary_request_header *header, + memcached_binary_protocol_raw_response_handler response_handler); + + /** + * The different interface levels we support. A pointer is used so the + * size of the structure is fixed. You must ensure that the memory area + * passed as the pointer is valid as long as you use the protocol handler. + */ + union { + memcached_binary_protocol_callback_v0_st v0; + + /** + * The first version of the callback struct containing all of the + * documented commands in the initial release of the binary protocol + * (aka. memcached 1.4.0). + */ + memcached_binary_protocol_callback_v1_st v1; + } interface; } memcached_binary_protocol_callback_st;