Пример #1
0
void
udp_add_readbuf(struct udp_con *con, u_char *dat, u_int datlen)
{
	struct conbuffer *buf;

	hooks_dispatch(IP_PROTO_UDP, HD_INCOMING_STREAM, &con->conhdr,
	    dat, datlen);

	if (con->cmd_pfd == -1)
		return;

	if (con->nincoming >= MAX_UDP_BUFFERS)
		return;

	buf = malloc(sizeof(struct conbuffer));
	if (buf == NULL)
		return;
	buf->buf = malloc(datlen);
	if (buf->buf == NULL) {
		free(buf);
		return;
	}

	memcpy(buf->buf, dat, datlen);
	buf->len = datlen;

	TAILQ_INSERT_TAIL(&con->incoming, buf, next);
	con->nincoming++;

	cmd_trigger_write(&con->cmd, 1);
}
Пример #2
0
int
tcp_add_readbuf(struct tcp_con *con, u_char *dat, u_int datlen)
{
	int space;

	hooks_dispatch(IP_PROTO_TCP, HD_INCOMING_STREAM, &con->conhdr,
	    dat, datlen);

	if (con->cmd_pfd == -1)
		return (datlen);

	space = con->rsize - con->rlen;
	if (space < datlen) {
		tcp_increase_buf(&con->readbuf, &con->rsize, TCP_MAX_SIZE);
		space = con->rsize - con->rlen;
		if (space < datlen)
			datlen = space;
	}

	memcpy(con->readbuf + con->rlen, dat, datlen);
	con->rlen += datlen;

	cmd_trigger_write(&con->cmd, con->rlen);

	return (datlen);
}