コード例 #1
0
MemFlushResult::Ptr MemcachedClient::Flush(ServerItem::Ptr server,uint32_t expiry,Callback callback)
{
    int requestId = mNextRequestId.fetch_add(1);


    MemFlushResult::Ptr result = boost::make_shared<MemFlushResult>("flush",Buffer());
    MemResult::Ptr baseResult = result;
    mRequests.insert(std::make_pair(requestId,RequestItem(callback,baseResult)));

    size_t requestSize = sizeof(protocol_binary_request_flush);
    ConstBuffer requestBuf(malloc(requestSize)
	    ,requestSize
	    ,[this](void* pData)
	    {
	        free(pData);
	    });
    auto& request = requestBuf.GetHeader<protocol_binary_request_header>();
    request.request.magic = PROTOCOL_BINARY_REQ;
    request.request.opcode = PROTOCOL_BINARY_CMD_FLUSH;
    request.request.keylen = 0;
    request.request.extlen = 0;
    request.request.datatype = 0;
    request.request.reserved = 0;
    request.request.bodylen = 0;
    request.request.opaque = requestId;
    request.request.cas = 0;
    AdjustEndian(&request);

    auto& flushRequest = requestBuf.GetHeader<protocol_binary_request_flush>();
    flushRequest.message.body.expiration = htonl(expiry);

    server->SendRequest(requestId,requestBuf);

    return result;
}
コード例 #2
0
SharedArrayPtr<char> Tracer::getHTTPRequestMessage(
    const Buffer& requestMessage)
{
    const Uint32 requestSize = requestMessage.size();

    // Check if requestMessage contains "application/x-openpegasus"
    // and if true format the the requestBuf as HexDump for tracing
    //
    // Binary is only possible on localConnect and doesn't have Basic
    // authorization for that reason
    if (strstr(requestMessage.getData(),"application/x-openpegasus"))
    {
        return traceFormatChars(requestMessage,true);
    }

    // Make a copy of the request message.
    SharedArrayPtr<char>
        requestBuf(new char [requestSize + 1]);
    strncpy(requestBuf.get(), requestMessage.getData(), requestSize);
    requestBuf.get()[requestSize] = 0;

    //
    // Check if requestBuffer contains a Basic authorization header.
    // If true, suppress the user/passwd info in the request buffer.
    //
    char* sep;
    const char* line = requestBuf.get();

    while ((sep = HTTPMessage::findSeparator(line)) && (line != sep))
    {
        if (HTTPMessage::expectHeaderToken(line, "Authorization") &&
             HTTPMessage::expectHeaderToken(line, ":") &&
             HTTPMessage::expectHeaderToken(line, "Basic"))
        {
            // Suppress the user/passwd info
            HTTPMessage::skipHeaderWhitespace(line);
            for ( char* userpass = (char*)line ;
                userpass < sep;
                *userpass = '******', userpass++)
            {
            }
            break;
        }

        line = sep + ((*sep == '\r') ? 2 : 1);
    }
    return requestBuf;
}