コード例 #1
0
ファイル: mul_thread_core.c プロジェクト: bollaramya/mul-cc
int
mul_cc_recv_pkt(uint64_t dp_id, uint8_t aux_id, void *of_msg, uint32_t msg_len)
{
    
    struct cbuf *b = NULL;
    
    if(cbuf_list_queue_len(&ctrl_hdl.c_main_buf_head) > 1024) 
    {
	// Throw an error
	c_log_err("Main thread buffer queue is full\n");
    }
    else
    {
	// Allocate
	b = alloc_cbuf(msg_len);
	if(b == NULL)
	{
	    // Kajal: What else to log for a new connection
	    // chann_id.aux_id -- is of type uint64_t 
	    // c_log_err("Buffer node could not be allocated dp-id:0x%x aux-id:0x%x\n",
	    //          chann_id.dp_id, chann_id.aux_id);
	    //return 0;
	}

	// if_msg should be freed by library assuming that 
	// buffer should copy it.
	memcpy(b->data, of_msg, msg_len);
	// Insert buffer in queue	
	cbuf_list_queue_tail(&ctrl_hdl.c_main_buf_head, b);
    }

    return 0;
}
コード例 #2
0
ファイル: cbuf.c プロジェクト: bollaramya/mul-cc
struct cbuf *
cbuf_realloc_tailroom(struct cbuf *b, size_t room, int do_free)
{
    struct cbuf *old = b;

    if (room < cbuf_tailroom(b)) {
        b = alloc_cbuf(old->len + room);
        cbuf_put(b, old->len);
        memcpy(b->data, old->data, old->len);
        if (do_free) 
            free(old);
    }

    return b;
}
コード例 #3
0
ファイル: cbuf.c プロジェクト: bollaramya/mul-cc
struct cbuf *
cbuf_realloc_headroom(struct cbuf *b, size_t room, int do_free)
{
    struct cbuf *old = b;

    if (1 /*room < cbuf_headroom(b)*/) {
        b = alloc_cbuf(old->len + room);
        cbuf_put(b, old->len + room);
        cbuf_pull(b, room);
        memcpy(b->data, old->data, old->len);
        //printf(" b %p b->data %p b->tail %p b->end %p\n", b, b->data, b->tail, b->end); 
        if (do_free) 
            free(old);
    }

    return b;
}
コード例 #4
0
ファイル: tcp_text.c プロジェクト: 0xcc/tapip
int tcp_write_buf(struct tcp_sock *tsk, void *data, unsigned int len)
{
	struct cbuf *cbuf = tsk->rcv_buf;
	int rlen;

	/* first text */
	if (!cbuf) {
		cbuf = alloc_cbuf(tsk->rcv_wnd);
		tsk->rcv_buf = cbuf;
	}

	/* write text to circular buffer */
	rlen = write_cbuf(cbuf, (char *)data, len);
	if (rlen > 0) {
		tsk->rcv_wnd -= rlen;	/* assert rlen >= 0 */
		tsk->rcv_nxt += rlen;
	}
	return rlen;
}