4 memcached_response() is used to determine the return result
5 from an issued command.
9 #include "memcached_io.h"
11 memcached_return
memcached_response(memcached_st
*ptr
,
12 char *buffer
, size_t buffer_length
,
13 unsigned int server_key
)
18 unsigned int max_messages
;
23 max_messages
= memcached_server_response_count(ptr
, server_key
);
24 for (x
= 0; x
< max_messages
; x
++)
26 size_t total_length
= 0;
31 unsigned int read_length
;
33 read_length
= memcached_io_read(ptr
, server_key
,
37 return MEMCACHED_UNKNOWN_READ_FAILURE
;
39 if (*buffer_ptr
== '\n')
45 WATCHPOINT_ASSERT(total_length
<= buffer_length
);
47 if (total_length
>= buffer_length
)
48 return MEMCACHED_PROTOCOL_ERROR
;
53 memcached_server_response_decrement(ptr
, server_key
);
58 case 'V': /* VALUE || VERSION */
59 if (buffer
[1] == 'A') /* VALUE */
61 /* We add back in one because we will need to search for END */
62 memcached_server_response_increment(ptr
, server_key
);
63 return MEMCACHED_SUCCESS
;
65 else if (buffer
[1] == 'E') /* VERSION */
67 return MEMCACHED_SUCCESS
;
71 WATCHPOINT_STRING(buffer
);
73 return MEMCACHED_UNKNOWN_READ_FAILURE
;
76 return MEMCACHED_SUCCESS
;
77 case 'S': /* STORED STATS SERVER_ERROR */
79 if (buffer
[2] == 'A') /* STORED STATS */
81 memcached_server_response_increment(ptr
, server_key
);
82 return MEMCACHED_STAT
;
84 else if (buffer
[1] == 'E')
85 return MEMCACHED_SERVER_ERROR
;
86 else if (buffer
[1] == 'T')
87 return MEMCACHED_STORED
;
90 WATCHPOINT_STRING(buffer
);
92 return MEMCACHED_UNKNOWN_READ_FAILURE
;
95 case 'D': /* DELETED */
96 return MEMCACHED_DELETED
;
97 case 'N': /* NOT_FOUND */
100 return MEMCACHED_NOTFOUND
;
101 else if (buffer
[4] == 'S')
102 return MEMCACHED_NOTSTORED
;
104 return MEMCACHED_UNKNOWN_READ_FAILURE
;
106 case 'E': /* PROTOCOL ERROR or END */
108 if (buffer
[1] == 'N')
109 return MEMCACHED_END
;
110 else if (buffer
[1] == 'R')
111 return MEMCACHED_PROTOCOL_ERROR
;
113 return MEMCACHED_UNKNOWN_READ_FAILURE
;
115 case 'C': /* CLIENT ERROR */
116 return MEMCACHED_CLIENT_ERROR
;
118 return MEMCACHED_UNKNOWN_READ_FAILURE
;
122 return MEMCACHED_SUCCESS
;
125 char *memcached_result_value(memcached_result_st
*ptr
)
127 memcached_string_st
*sptr
= &ptr
->value
;
128 return memcached_string_value(sptr
);
131 size_t memcached_result_length(memcached_result_st
*ptr
)
133 memcached_string_st
*sptr
= &ptr
->value
;
134 return memcached_string_length(sptr
);