X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fprotocol%2Fascii_handler.c;h=c2fd6870d6929a2cc7b1b7c9fa25fcf7b3ceb771;hb=8330cb24fcb448dda5c6f39ac296a2df9f2b0ee6;hp=19aff1156d3c56698242627239714536a3eb0589;hpb=bb79693dc3100f28ea4fa477db895876d71fe0e9;p=m6w6%2Flibmemcached diff --git a/libmemcached/protocol/ascii_handler.c b/libmemcached/protocol/ascii_handler.c index 19aff115..c2fd6870 100644 --- a/libmemcached/protocol/ascii_handler.c +++ b/libmemcached/protocol/ascii_handler.c @@ -80,6 +80,7 @@ static void send_command_usage(memcached_protocol_client_st *client) [UNKNOWN_CMD]= "CLIENT_ERROR: Unknown command\r\n", }; + client->mute = false; spool_string(client, errmsg[client->ascii_command]); } @@ -146,11 +147,11 @@ ascii_get_response_handler(const void *cookie, if (client->ascii_command == GETS_CMD) { snprintf(dest, sizeof(buffer) - used, " %u %u %llu\r\n", flags, - flags, (unsigned long long)cas); + bodylen, (unsigned long long)cas); } else { - snprintf(dest, sizeof(buffer) - used, " %u %u\r\n", flags, flags); + snprintf(dest, sizeof(buffer) - used, " %u %u\r\n", flags, bodylen); } client->root->spool(client, buffer, strlen(buffer)); @@ -832,9 +833,10 @@ memcached_protocol_event_t memcached_ascii_protocol_process_data(memcached_proto case REPLACE_CMD: error= process_replace_command(client, tokens, ntokens, ptr, &end, *length); + break; case CAS_CMD: error= process_cas_command(client, tokens, ntokens, ptr, &end, *length); - break; + break; case APPEND_CMD: error= process_append_command(client, tokens, ntokens, ptr, &end, *length); @@ -852,18 +854,34 @@ memcached_protocol_event_t memcached_ascii_protocol_process_data(memcached_proto process_arithmetic(client, tokens, ntokens); break; case STATS_CMD: - recover_tokenize_command(ptr, end); - process_stats(client, ptr + 6, end); + if (client->mute) + { + send_command_usage(client); + } + else + { + recover_tokenize_command(ptr, end); + process_stats(client, ptr + 6, end); + } break; case FLUSH_ALL_CMD: process_flush(client, tokens, ntokens); break; case VERSION_CMD: - process_version(client, tokens, ntokens); + if (client->mute) + { + send_command_usage(client); + } + else + { + process_version(client, tokens, ntokens); + } break; case QUIT_CMD: - if (ntokens != 1) + if (ntokens != 1 || client->mute) + { send_command_usage(client); + } else { if (client->root->callback->interface.v1.quit != NULL)