Пример #1
0
int mongrel2_ws_reply(mongrel2_socket *pub_socket, mongrel2_request *req, bstring data){
    bstring payload = bstrcpy(data);

    // ! and # are the fill characters. You should not see these if the data is correct
    bInsertChrs(payload, blength(payload), 1, TERM_CHAR, '!');
    bInsertChrs(payload, 0, 1, START_CHAR, '#');
    mongrel2_reply(pub_socket,req,payload);
    // mongrel2_ws_debug(payload);
    bdestroy(payload);
    return 0;
}
Пример #2
0
int mongrel2_ws_reply(mongrel2_socket *pub_socket, mongrel2_request *req, bstring data){
    size_t req_len = blength(data);
    uint8_t *req_data = (uint8_t*)bdata(data);

    size_t payload_len = 0;
    uint8_t *payload_data = NULL;
    // Simplest code but seems to be unsafe with chrome 14?
    int retval = mongrel2_ws_frame_create(0,req_len,&payload_len,&payload_data);

    if(retval != 0){
        fprintf(stderr,"mongrel2_ws_reply failed with errno %d\n",retval);
        return -1;
    }
    mongrel2_ws_frame_set_payload(payload_len,payload_data,req_len,req_data);
    mongrel2_ws_frame_set_opcode(payload_len,payload_data,OP_TEXT);
    mongrel2_ws_frame_set_fin(payload_len,payload_data);

    // Instead, let's chunk it to a bunch of small messages
    // int fullchunks = req_len % WEBSOCKET_SMALL_MAX;
    // int leftoverbytes = req_len / WEBSOCKET_SMALL_MAX;

    // bstring chunk;
    // for(int i=0; i<fullchunks; i++){
    //     uint8_t chunk_payload[WEBSOCKET_SMALL_MAX];
    //     chunk = bmidstr(data,i*WEBSOCKET_SMALL_MAX,i*WEBSOCKET_SMALL_MAX+WEBSOCKET_SMALL_MAX-1);
        

    //     fullchunks--;
    // }


    #ifndef NDEBUG
    mongrel2_ws_frame_debug(payload_len,payload_data);
    #endif

    bstring outgoing = blk2bstr(payload_data,payload_len);
    assert(blength(outgoing) == payload_len);

    mongrel2_reply(pub_socket,req,outgoing);
    free(payload_data);

    bdestroy(outgoing);
    return 0;
}
Пример #3
0
int mongrel2_ws_reply_upgrade(mongrel2_request *req, mongrel2_socket *socket){
    bstring headers = mongrel2_ws_upgrade_headers(req);
    mongrel2_reply(socket,req,headers);
    bdestroy(headers);
    return 0;
}