~yolanda.robla/ubuntu/trusty/memcached/add_distribution

« back to all changes in this revision

Viewing changes to protocol_binary.h

  • Committer: Bazaar Package Importer
  • Author(s): David Martínez Moreno
  • Date: 2009-08-01 23:26:45 UTC
  • mto: (3.3.1 squeeze) (1.4.2 upstream)
  • mto: This revision was merged to the branch mainline in revision 8.
  • Revision ID: james.westby@ubuntu.com-20090801232645-g57xdaf3zal53qcl
Tags: upstream-1.4.0
Import upstream version 1.4.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) <2008>, Sun Microsystems, Inc.
 
3
 * All rights reserved.
 
4
 *
 
5
 * Redistribution and use in source and binary forms, with or without
 
6
 * modification, are permitted provided that the following conditions are met:
 
7
 *     * Redistributions of source code must retain the above copyright
 
8
 *       notice, this list of conditions and the following disclaimer.
 
9
 *     * Redistributions in binary form must reproduce the above copyright
 
10
 *       notice, this list of conditions and the following disclaimer in the
 
11
 *       documentation and/or other materials provided with the distribution.
 
12
 *     * Neither the name of the  nor the
 
13
 *       names of its contributors may be used to endorse or promote products
 
14
 *       derived from this software without specific prior written permission.
 
15
 *
 
16
 * THIS SOFTWARE IS PROVIDED BY SUN MICROSYSTEMS, INC. ``AS IS'' AND ANY
 
17
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 
18
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 
19
 * DISCLAIMED. IN NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY
 
20
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 
21
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 
22
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 
23
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
24
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 
25
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
26
 */
 
27
/*
 
28
 * Summary: Constants used by to implement the binary protocol.
 
29
 *
 
30
 * Copy: See Copyright for the status of this software.
 
31
 *
 
32
 * Author: Trond Norbye <trond.norbye@sun.com>
 
33
 */
 
34
 
 
35
#ifndef PROTOCOL_BINARY_H
 
36
#define PROTOCOL_BINARY_H
 
37
 
 
38
#include <stdint.h>
 
39
 
 
40
/**
 
41
 * This file contains definitions of the constants and packet formats
 
42
 * defined in the binary specification. Please note that you _MUST_ remember
 
43
 * to convert each multibyte field to / from network byte order to / from
 
44
 * host order.
 
45
 */
 
46
#ifdef __cplusplus
 
47
extern "C"
 
48
{
 
49
#endif
 
50
 
 
51
  /**
 
52
   * Definition of the legal "magic" values used in a packet.
 
53
   * See section 3.1 Magic byte
 
54
   */
 
55
  typedef enum {
 
56
    PROTOCOL_BINARY_REQ = 0x80,
 
57
    PROTOCOL_BINARY_RES = 0x81
 
58
  } protocol_binary_magic;
 
59
 
 
60
  /**
 
61
   * Definition of the valid response status numbers.
 
62
   * See section 3.2 Response Status
 
63
   */
 
64
  typedef enum {
 
65
    PROTOCOL_BINARY_RESPONSE_SUCCESS = 0x00,
 
66
    PROTOCOL_BINARY_RESPONSE_KEY_ENOENT = 0x01,
 
67
    PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS = 0x02,
 
68
    PROTOCOL_BINARY_RESPONSE_E2BIG = 0x03,
 
69
    PROTOCOL_BINARY_RESPONSE_EINVAL = 0x04,
 
70
    PROTOCOL_BINARY_RESPONSE_NOT_STORED = 0x05,
 
71
    PROTOCOL_BINARY_RESPONSE_DELTA_BADVAL = 0x06,
 
72
    PROTOCOL_BINARY_RESPONSE_UNKNOWN_COMMAND = 0x81,
 
73
    PROTOCOL_BINARY_RESPONSE_ENOMEM = 0x82
 
74
  } protocol_binary_response_status;
 
75
 
 
76
  /**
 
77
   * Defintion of the different command opcodes.
 
78
   * See section 3.3 Command Opcodes
 
79
   */
 
80
  typedef enum {
 
81
    PROTOCOL_BINARY_CMD_GET = 0x00,
 
82
    PROTOCOL_BINARY_CMD_SET = 0x01,
 
83
    PROTOCOL_BINARY_CMD_ADD = 0x02,
 
84
    PROTOCOL_BINARY_CMD_REPLACE = 0x03,
 
85
    PROTOCOL_BINARY_CMD_DELETE = 0x04,
 
86
    PROTOCOL_BINARY_CMD_INCREMENT = 0x05,
 
87
    PROTOCOL_BINARY_CMD_DECREMENT = 0x06,
 
88
    PROTOCOL_BINARY_CMD_QUIT = 0x07,
 
89
    PROTOCOL_BINARY_CMD_FLUSH = 0x08,
 
90
    PROTOCOL_BINARY_CMD_GETQ = 0x09,
 
91
    PROTOCOL_BINARY_CMD_NOOP = 0x0a,
 
92
    PROTOCOL_BINARY_CMD_VERSION = 0x0b,
 
93
    PROTOCOL_BINARY_CMD_GETK = 0x0c,
 
94
    PROTOCOL_BINARY_CMD_GETKQ = 0x0d,
 
95
    PROTOCOL_BINARY_CMD_APPEND = 0x0e,
 
96
    PROTOCOL_BINARY_CMD_PREPEND = 0x0f,
 
97
    PROTOCOL_BINARY_CMD_STAT = 0x10,
 
98
    PROTOCOL_BINARY_CMD_SETQ = 0x11,
 
99
    PROTOCOL_BINARY_CMD_ADDQ = 0x12,
 
100
    PROTOCOL_BINARY_CMD_REPLACEQ = 0x13,
 
101
    PROTOCOL_BINARY_CMD_DELETEQ = 0x14,
 
102
    PROTOCOL_BINARY_CMD_INCREMENTQ = 0x15,
 
103
    PROTOCOL_BINARY_CMD_DECREMENTQ = 0x16,
 
104
    PROTOCOL_BINARY_CMD_QUITQ = 0x17,
 
105
    PROTOCOL_BINARY_CMD_FLUSHQ = 0x18,
 
106
    PROTOCOL_BINARY_CMD_APPENDQ = 0x19,
 
107
    PROTOCOL_BINARY_CMD_PREPENDQ = 0x1a
 
108
  } protocol_binary_command;
 
109
 
 
110
  /**
 
111
   * Definition of the data types in the packet
 
112
   * See section 3.4 Data Types
 
113
   */
 
114
  typedef enum {
 
115
    PROTOCOL_BINARY_RAW_BYTES = 0x00
 
116
  } protocol_binary_datatypes;
 
117
 
 
118
  /**
 
119
   * Definition of the header structure for a request packet.
 
120
   * See section 2
 
121
   */
 
122
  typedef union {
 
123
    struct {
 
124
      uint8_t magic;
 
125
      uint8_t opcode;
 
126
      uint16_t keylen;
 
127
      uint8_t extlen;
 
128
      uint8_t datatype;
 
129
      uint16_t reserved;
 
130
      uint32_t bodylen;
 
131
      uint32_t opaque;
 
132
      uint64_t cas;
 
133
    } request;
 
134
    uint8_t bytes[24];
 
135
  } protocol_binary_request_header;
 
136
 
 
137
  /**
 
138
   * Definition of the header structure for a response packet.
 
139
   * See section 2
 
140
   */
 
141
  typedef union {
 
142
    struct {
 
143
      uint8_t magic;
 
144
      uint8_t opcode;
 
145
      uint16_t keylen;
 
146
      uint8_t extlen;
 
147
      uint8_t datatype;
 
148
      uint16_t status;
 
149
      uint32_t bodylen;
 
150
      uint32_t opaque;
 
151
      uint64_t cas;
 
152
    } response;
 
153
    uint8_t bytes[24];
 
154
  } protocol_binary_response_header;
 
155
 
 
156
  /**
 
157
   * Definition of a request-packet containing no extras
 
158
   */
 
159
  typedef union {
 
160
    struct {
 
161
      protocol_binary_request_header header;
 
162
    } message;
 
163
    uint8_t bytes[sizeof(protocol_binary_request_header)];
 
164
  } protocol_binary_request_no_extras;
 
165
 
 
166
  /**
 
167
   * Definition of a response-packet containing no extras
 
168
   */
 
169
  typedef union {
 
170
    struct {
 
171
      protocol_binary_response_header header;
 
172
    } message;
 
173
    uint8_t bytes[sizeof(protocol_binary_response_header)];
 
174
  } protocol_binary_response_no_extras;
 
175
 
 
176
  /**
 
177
   * Definition of the packet used by the get, getq, getk and getkq command.
 
178
   * See section 4
 
179
   */
 
180
  typedef protocol_binary_request_no_extras protocol_binary_request_get;
 
181
  typedef protocol_binary_request_no_extras protocol_binary_request_getq;
 
182
  typedef protocol_binary_request_no_extras protocol_binary_request_getk;
 
183
  typedef protocol_binary_request_no_extras protocol_binary_request_getkq;
 
184
 
 
185
  /**
 
186
   * Definition of the packet returned from a successful get, getq, getk and
 
187
   * getkq.
 
188
   * See section 4
 
189
   */
 
190
  typedef union {
 
191
    struct {
 
192
      protocol_binary_response_header header;
 
193
      struct {
 
194
        uint32_t flags;
 
195
      } body;
 
196
    } message;
 
197
    uint8_t bytes[sizeof(protocol_binary_response_header) + 4];
 
198
  } protocol_binary_response_get;
 
199
 
 
200
  typedef protocol_binary_response_get protocol_binary_response_getq;
 
201
  typedef protocol_binary_response_get protocol_binary_response_getk;
 
202
  typedef protocol_binary_response_get protocol_binary_response_getkq;
 
203
 
 
204
  /**
 
205
   * Definition of the packet used by the delete command
 
206
   * See section 4
 
207
   */
 
208
  typedef protocol_binary_request_no_extras protocol_binary_request_delete;
 
209
 
 
210
  /**
 
211
   * Definition of the packet returned by the delete command
 
212
   * See section 4
 
213
   */
 
214
  typedef protocol_binary_response_no_extras protocol_binary_response_delete;
 
215
 
 
216
  /**
 
217
   * Definition of the packet used by the flush command
 
218
   * See section 4
 
219
   * Please note that the expiration field is optional, so remember to see
 
220
   * check the header.bodysize to see if it is present.
 
221
   */
 
222
  typedef union {
 
223
    struct {
 
224
      protocol_binary_request_header header;
 
225
      struct {
 
226
        uint32_t expiration;
 
227
      } body;
 
228
    } message;
 
229
    uint8_t bytes[sizeof(protocol_binary_request_header) + 4];
 
230
  } protocol_binary_request_flush;
 
231
 
 
232
  /**
 
233
   * Definition of the packet returned by the flush command
 
234
   * See section 4
 
235
   */
 
236
  typedef protocol_binary_response_no_extras protocol_binary_response_flush;
 
237
 
 
238
  /**
 
239
   * Definition of the packet used by set, add and replace
 
240
   * See section 4
 
241
   */
 
242
  typedef union {
 
243
    struct {
 
244
      protocol_binary_request_header header;
 
245
      struct {
 
246
        uint32_t flags;
 
247
        uint32_t expiration;
 
248
      } body;
 
249
    } message;
 
250
    uint8_t bytes[sizeof(protocol_binary_request_header) + 8];
 
251
  } protocol_binary_request_set;
 
252
  typedef protocol_binary_request_set protocol_binary_request_add;
 
253
  typedef protocol_binary_request_set protocol_binary_request_replace;
 
254
 
 
255
  /**
 
256
   * Definition of the packet returned by set, add and replace
 
257
   * See section 4
 
258
   */
 
259
  typedef protocol_binary_response_no_extras protocol_binary_response_set;
 
260
  typedef protocol_binary_response_no_extras protocol_binary_response_add;
 
261
  typedef protocol_binary_response_no_extras protocol_binary_response_replace;
 
262
 
 
263
  /**
 
264
   * Definition of the noop packet
 
265
   * See section 4
 
266
   */
 
267
  typedef protocol_binary_request_no_extras protocol_binary_request_noop;
 
268
 
 
269
  /**
 
270
   * Definition of the packet returned by the noop command
 
271
   * See section 4
 
272
   */
 
273
  typedef protocol_binary_response_no_extras protocol_binary_response_noop;
 
274
 
 
275
  /**
 
276
   * Definition of the structure used by the increment and decrement
 
277
   * command.
 
278
   * See section 4
 
279
   */
 
280
  typedef union {
 
281
    struct {
 
282
      protocol_binary_request_header header;
 
283
      struct {
 
284
        uint64_t delta;
 
285
        uint64_t initial;
 
286
        uint32_t expiration;
 
287
      } body;
 
288
    } message;
 
289
    uint8_t bytes[sizeof(protocol_binary_request_header) + 20];
 
290
  } protocol_binary_request_incr;
 
291
  typedef protocol_binary_request_incr protocol_binary_request_decr;
 
292
 
 
293
  /**
 
294
   * Definition of the response from an incr or decr command
 
295
   * command.
 
296
   * See section 4
 
297
   */
 
298
  typedef union {
 
299
    struct {
 
300
      protocol_binary_response_header header;
 
301
      struct {
 
302
        uint64_t value;
 
303
      } body;
 
304
    } message;
 
305
    uint8_t bytes[sizeof(protocol_binary_response_header) + 8];
 
306
  } protocol_binary_response_incr;
 
307
  typedef protocol_binary_response_incr protocol_binary_response_decr;
 
308
 
 
309
  /**
 
310
   * Definition of the quit
 
311
   * See section 4
 
312
   */
 
313
  typedef protocol_binary_request_no_extras protocol_binary_request_quit;
 
314
 
 
315
  /**
 
316
   * Definition of the packet returned by the quit command
 
317
   * See section 4
 
318
   */
 
319
  typedef protocol_binary_response_no_extras protocol_binary_response_quit;
 
320
 
 
321
  /**
 
322
   * Definition of the packet used by append and prepend command
 
323
   * See section 4
 
324
   */
 
325
  typedef protocol_binary_request_no_extras protocol_binary_request_append;
 
326
  typedef protocol_binary_request_no_extras protocol_binary_request_prepend;
 
327
 
 
328
  /**
 
329
   * Definition of the packet returned from a successful append or prepend
 
330
   * See section 4
 
331
   */
 
332
  typedef protocol_binary_response_no_extras protocol_binary_response_append;
 
333
  typedef protocol_binary_response_no_extras protocol_binary_response_prepend;
 
334
 
 
335
  /**
 
336
   * Definition of the packet used by the version command
 
337
   * See section 4
 
338
   */
 
339
  typedef protocol_binary_request_no_extras protocol_binary_request_version;
 
340
 
 
341
  /**
 
342
   * Definition of the packet returned from a successful version command
 
343
   * See section 4
 
344
   */
 
345
  typedef protocol_binary_response_no_extras protocol_binary_response_version;
 
346
 
 
347
 
 
348
  /**
 
349
   * Definition of the packet used by the stats command.
 
350
   * See section 4
 
351
   */
 
352
  typedef protocol_binary_request_no_extras protocol_binary_request_stats;
 
353
 
 
354
  /**
 
355
   * Definition of the packet returned from a successful stats command
 
356
   * See section 4
 
357
   */
 
358
  typedef protocol_binary_response_no_extras protocol_binary_response_stats;
 
359
#ifdef __cplusplus
 
360
}
 
361
#endif
 
362
#endif /* PROTOCOL_BINARY_H */