X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=example%2Finterface_v0.c;h=ef5ba47b57324b384a8c60e792205a57f5599cca;hb=694f0966e3980f448c0ca9f9504e6d065e35654f;hp=85dd2c7d426dad28caafe73b5c2cdf0c3761ca34;hpb=bb79693dc3100f28ea4fa477db895876d71fe0e9;p=awesomized%2Flibmemcached diff --git a/example/interface_v0.c b/example/interface_v0.c index 85dd2c7d..ef5ba47b 100644 --- a/example/interface_v0.c +++ b/example/interface_v0.c @@ -4,12 +4,11 @@ * in the protocol library. You might want to have your copy of the protocol * specification next to your coffee ;-) */ + #include "config.h" + #include #include -#include -#include -#include #include #include #include @@ -17,10 +16,10 @@ #include #include -#include -#include -#include "storage.h" -#include "memcached_light.h" +#include +#include +#include "example/storage.h" +#include "example/memcached_light.h" static protocol_binary_response_status noop_command_handler(const void *cookie, protocol_binary_request_header *header, @@ -55,7 +54,7 @@ static protocol_binary_response_status quit_command_handler(const void *cookie, response_handler(cookie, header, (void*)&response); /* I need a better way to signal to close the connection */ - return PROTOCOL_BINARY_RESPONSE_EIO; + return PROTOCOL_BINARY_RESPONSE_EINTERNAL; } static protocol_binary_response_status get_command_handler(const void *cookie, @@ -81,7 +80,7 @@ static protocol_binary_response_status get_command_handler(const void *cookie, msg.response.message.body.flags= htonl(item->flags); char *ptr= (char*)(msg.response.bytes + sizeof(*header) + 4); uint32_t bodysize= 4; - msg.response.message.header.response.cas= htonll(item->cas); + msg.response.message.header.response.cas= example_htonll(item->cas); if (opcode == PROTOCOL_BINARY_CMD_GETK || opcode == PROTOCOL_BINARY_CMD_GETKQ) { memcpy(ptr, item->key, item->nkey); @@ -175,8 +174,8 @@ static protocol_binary_response_status arithmetic_command_handler(const void *co }; uint16_t keylen= ntohs(header->request.keylen); - uint64_t initial= ntohll(req->message.body.initial); - uint64_t delta= ntohll(req->message.body.delta); + uint64_t initial= example_ntohll(req->message.body.initial); + uint64_t delta= example_ntohll(req->message.body.delta); uint32_t expiration= ntohl(req->message.body.expiration); uint32_t flags= 0; void *key= req->bytes + sizeof(req->bytes); @@ -225,8 +224,8 @@ static protocol_binary_response_status arithmetic_command_handler(const void *co if (rval == PROTOCOL_BINARY_RESPONSE_SUCCESS) { response.message.header.response.bodylen= ntohl(8); - response.message.body.value= ntohll((*(uint64_t*)item->data)); - response.message.header.response.cas= ntohll(item->cas); + response.message.body.value= example_ntohll((*(uint64_t*)item->data)); + response.message.header.response.cas= example_ntohll(item->cas); release_item(item); if (header->request.opcode == PROTOCOL_BINARY_CMD_INCREMENTQ || @@ -253,6 +252,7 @@ static protocol_binary_response_status version_command_handler(const void *cooki .opcode= PROTOCOL_BINARY_CMD_VERSION, .status= htons(PROTOCOL_BINARY_RESPONSE_SUCCESS), .opaque= header->request.opaque, + .cas= 0, .bodylen= htonl((uint32_t)strlen(versionstring)) } }; @@ -268,7 +268,7 @@ static protocol_binary_response_status concat_command_handler(const void *cookie { protocol_binary_response_status rval= PROTOCOL_BINARY_RESPONSE_SUCCESS; uint16_t keylen= ntohs(header->request.keylen); - uint64_t cas= ntohll(header->request.cas); + uint64_t cas= example_ntohll(header->request.cas); void *key= header + 1; uint32_t vallen= ntohl(header->request.bodylen) - keylen; void *val= (char*)key + keylen; @@ -319,7 +319,7 @@ static protocol_binary_response_status concat_command_handler(const void *cookie .opcode= header->request.opcode, .status= htons(rval), .opaque= header->request.opaque, - .cas= htonll(cas), + .cas= example_htonll(cas), } } }; @@ -359,7 +359,7 @@ static protocol_binary_response_status set_command_handler(const void *cookie, struct item* item= get_item(key, keylen); if (item != NULL) { - if (item->cas != ntohll(header->request.cas)) + if (item->cas != example_ntohll(header->request.cas)) { release_item(item); response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS); @@ -381,7 +381,7 @@ static protocol_binary_response_status set_command_handler(const void *cookie, /* SETQ shouldn't return a message */ if (header->request.opcode == PROTOCOL_BINARY_CMD_SET) { - response.message.header.response.cas= htonll(item->cas); + response.message.header.response.cas= example_htonll(item->cas); release_item(item); return response_handler(cookie, header, (void*)&response); } @@ -428,7 +428,7 @@ static protocol_binary_response_status add_command_handler(const void *cookie, /* ADDQ shouldn't return a message */ if (header->request.opcode == PROTOCOL_BINARY_CMD_ADD) { - response.message.header.response.cas= htonll(item->cas); + response.message.header.response.cas= example_htonll(item->cas); release_item(item); return response_handler(cookie, header, (void*)&response); } @@ -470,21 +470,26 @@ static protocol_binary_response_status replace_command_handler(const void *cooki struct item* item= get_item(key, keylen); if (item == NULL) + { response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_KEY_ENOENT); - else if (header->request.cas == 0 || ntohll(header->request.cas) == item->cas) + } + else if (header->request.cas == 0 || example_ntohll(header->request.cas) == item->cas) { release_item(item); delete_item(key, keylen); item= create_item(key, keylen, data, datalen, flags, timeout); + if (item == NULL) + { response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_ENOMEM); + } else { put_item(item); /* REPLACEQ shouldn't return a message */ if (header->request.opcode == PROTOCOL_BINARY_CMD_REPLACE) { - response.message.header.response.cas= htonll(item->cas); + response.message.header.response.cas= example_htonll(item->cas); release_item(item); return response_handler(cookie, header, (void*)&response); } @@ -521,10 +526,10 @@ static protocol_binary_response_status stat_command_handler(const void *cookie, } memcached_binary_protocol_callback_st interface_v0_impl= { - .interface_version= 0, + .interface_version= MEMCACHED_PROTOCOL_HANDLER_V0, #ifdef FUTURE /* - ** There is a number of bugs in the extra options for gcc causing + ** There is a number of bugs in the extra options for gcc causing ** warning on these struct initializers. It hurts my heart to remove ** it so I'll just leave it in here so that we can enable it when ** we can drop support for the broken compilers @@ -559,7 +564,7 @@ memcached_binary_protocol_callback_st interface_v0_impl= { #endif }; -void initialize_iterface_v0_handler(void) +void initialize_interface_v0_handler(void) { interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_GET]= get_command_handler; interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_SET]= set_command_handler;