X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fprotocol%2Fpedantic.c;h=f275b39adf5471f31c14a0197e3d370c0857db75;hb=9a6c3f77b862f9d7bf05926989c501cac2476c71;hp=884f6721574b91b4357c2c2bebe18ed3bbc0fc55;hpb=9131482f7923cf9e90b5a715b38e70e3a229b052;p=m6w6%2Flibmemcached diff --git a/libmemcached/protocol/pedantic.c b/libmemcached/protocol/pedantic.c index 884f6721..f275b39a 100644 --- a/libmemcached/protocol/pedantic.c +++ b/libmemcached/protocol/pedantic.c @@ -1,13 +1,48 @@ +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: + * + * Libmemcached library + * + * Copyright (C) 2011 Data Differential, http://datadifferential.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * * The names of its contributors may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + /* -*- Mode: C; tab-width: 2; c-basic-offset: 2; indent-tabs-mode: nil -*- */ -#include "common.h" +#include #include -#include #include #define ensure(a) if (!(a)) { return false; } -bool memcached_binary_protocol_pedantic_check_request(protocol_binary_request_header *request) +bool memcached_binary_protocol_pedantic_check_request(const protocol_binary_request_header *request) { ensure(request->request.magic == PROTOCOL_BINARY_REQ); ensure(request->request.datatype == PROTOCOL_BINARY_RAW_BYTES); @@ -19,7 +54,7 @@ bool memcached_binary_protocol_pedantic_check_request(protocol_binary_request_he uint16_t keylen= ntohs(request->request.keylen); uint8_t extlen= request->request.extlen; uint32_t bodylen= ntohl(request->request.bodylen); - + ensure(bodylen >= (keylen + extlen)); switch (opcode) { @@ -83,7 +118,7 @@ bool memcached_binary_protocol_pedantic_check_request(protocol_binary_request_he /* May have key, but not value */ ensure(keylen == bodylen); break; - + case PROTOCOL_BINARY_CMD_APPEND: case PROTOCOL_BINARY_CMD_APPENDQ: case PROTOCOL_BINARY_CMD_PREPEND: @@ -99,8 +134,8 @@ bool memcached_binary_protocol_pedantic_check_request(protocol_binary_request_he return true; } -bool memcached_binary_protocol_pedantic_check_response(protocol_binary_request_header *request, - protocol_binary_response_header *response) +bool memcached_binary_protocol_pedantic_check_response(const protocol_binary_request_header *request, + const protocol_binary_response_header *response) { ensure(response->response.magic == PROTOCOL_BINARY_RES); ensure(response->response.datatype == PROTOCOL_BINARY_RAW_BYTES); @@ -109,7 +144,7 @@ bool memcached_binary_protocol_pedantic_check_response(protocol_binary_request_h uint16_t status= ntohs(response->response.status); uint8_t opcode= response->response.opcode; - if (status == PROTOCOL_BINARY_RESPONSE_SUCCESS) + if (status == PROTOCOL_BINARY_RESPONSE_SUCCESS) { switch (opcode) { case PROTOCOL_BINARY_CMD_ADDQ: @@ -189,11 +224,11 @@ bool memcached_binary_protocol_pedantic_check_response(protocol_binary_request_h break; } } - else + else { ensure(response->response.cas == 0); ensure(response->response.extlen == 0); - if (opcode != PROTOCOL_BINARY_CMD_GETK) + if (opcode != PROTOCOL_BINARY_CMD_GETK) { ensure(response->response.keylen == 0); }