Esempio n. 1
0
static void
test_ownership(evhtp_request_t * request, void * arg) {
    evhtp_connection_t * conn = evhtp_request_get_connection(request);
    evbev_t            * bev  = evhtp_connection_take_ownership(conn);

    bufferevent_enable(bev, EV_READ);
    bufferevent_setcb(bev,
                      _owned_readcb, NULL,
                      _owned_eventcb, NULL);
}
Esempio n. 2
0
static void wshtp_handler_cb(evhtp_request_t *req, void *data) {
    evhtp_connection_t *conn = evhtp_request_get_connection(req);
    wshtp_server_t *server = (wshtp_server_t*)data;

    wshtp_conn_t *_conn = (wshtp_conn_t*)avlmap_find(server->conns, (intptr_t)conn);

    wshtp_conn_set_request(_conn, req);
    if (req->method == htp_method_GET) {
        int ret = do_ws_handshake(req);
        if (ret == EVHTP_RES_SWITCH_PROTO) {
            _conn->is_websocket = true;

            evbev_t * bev = evhtp_connection_take_ownership(conn);
            evhtp_connection_set_bev(conn, bev);
            conn->owner = 1;

            bufferevent_enable(bev, EV_READ);
            bufferevent_setcb(bev, ws_read_cb, NULL, ws_event_cb, _conn);
        } else if (ret != EVHTP_RES_OK) {
            return;
        }
        _conn->method = WSHTP_ON_GET;
    } else if (req->method == htp_method_POST) {
        _conn->method = WSHTP_ON_POST;
    } else if (req->method == htp_method_PUT) {
        _conn->method = WSHTP_ON_PUT;
    } else if (req->method == htp_method_DELETE) {
        _conn->method = WSHTP_ON_DELETE;
    }

    if (_conn->is_open == false) {
        wshtp_hooks_call(server, WSHTP_ON_OPEN, _conn);
        _conn->is_open = true;
    }

    if (_conn->is_websocket == false && _conn->method) {
        wshtp_hooks_call(server, _conn->method, _conn);
    }
}