コード例 #1
0
ファイル: event.c プロジェクト: DidoNL/libcouchbase
LIBCOUCHBASE_API
void libcouchbase_flush_buffers(libcouchbase_t instance, const void *cookie)
{
    libcouchbase_size_t ii;
    for (ii = 0; ii < instance->nservers; ++ii) {
        libcouchbase_server_t *c = instance->servers + ii;
        if (c->connected) {
            libcouchbase_server_event_handler(c->sock,
                                              LIBCOUCHBASE_READ_EVENT | LIBCOUCHBASE_WRITE_EVENT,
                                              c);
        }
    }
    (void)cookie;
}
コード例 #2
0
ファイル: handler.c プロジェクト: pierrejoye/libcouchbase
static void sasl_list_mech_response_handler(libcouchbase_server_t *server,
                                            protocol_binary_response_header *res)
{
    const char *data;
    const char *chosenmech;
    unsigned int len;
    protocol_binary_request_no_extras req;
    size_t keylen;
    size_t bodysize;

    assert(ntohs(res->response.status) == PROTOCOL_BINARY_RESPONSE_SUCCESS);
    if (sasl_client_start(server->sasl_conn, (const char *)(res + 1),
                          NULL, &data, &len, &chosenmech) != SASL_OK) {
        // @fixme!
        abort();
    }

    keylen = strlen(chosenmech);
    bodysize = keylen + len;

    memset(&req, 0, sizeof(req));
    req.message.header.request.magic = PROTOCOL_BINARY_REQ;
    req.message.header.request.opcode = PROTOCOL_BINARY_CMD_SASL_AUTH;
    req.message.header.request.keylen = ntohs((uint16_t)keylen);
    req.message.header.request.datatype = PROTOCOL_BINARY_RAW_BYTES;
    req.message.header.request.bodylen = ntohl((uint32_t)(bodysize));

    libcouchbase_server_buffer_start_packet(server, &server->output,
                                            req.bytes, sizeof(req.bytes));
    libcouchbase_server_buffer_write_packet(server, &server->output,
                                            chosenmech, keylen);
    libcouchbase_server_buffer_write_packet(server, &server->output, data, len);
    libcouchbase_server_buffer_end_packet(server, &server->output);

    // send the data and add it to libevent..
    libcouchbase_server_event_handler(0, EV_WRITE, server);
}