Example #1
0
void libcouchbase_server_start_packet(libcouchbase_server_t *c,
                                      const void *command_cookie,
                                      const void *data,
                                      libcouchbase_size_t size)
{
    if (c->connected) {
        libcouchbase_server_buffer_start_packet(c, command_cookie,
                                                &c->output,
                                                &c->output_cookies,
                                                data, size);
    } else {
        libcouchbase_server_buffer_start_packet(c, command_cookie,
                                                &c->pending,
                                                &c->pending_cookies,
                                                data, size);
    }
}
Example #2
0
void libcouchbase_server_buffer_complete_packet(libcouchbase_server_t *c,
                                                const void *command_cookie,
                                                ringbuffer_t *buff,
                                                ringbuffer_t *buff_cookie,
                                                const void *data,
                                                libcouchbase_size_t size)
{

    libcouchbase_server_buffer_start_packet(c, command_cookie,
                                            buff, buff_cookie, data, size);
    libcouchbase_server_buffer_end_packet(c, buff);
}
Example #3
0
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);
}