/* -*- Mode: C; tab-width: 2; c-basic-offset: 2; indent-tabs-mode: nil -*- */
-#include "common.h"
+#include "libmemcached/protocol/common.h"
#include <sys/types.h>
#include <netinet/in.h>
#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);
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) {
/* 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:
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);
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:
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);
}