示例#1
0
ssize_t
lthread_readline(int fd, char **buf, size_t max, uint64_t timeout)
{
    size_t cur = 0;
    ssize_t r = 0;
    size_t total_read = 0;
    char *data = NULL;

    data = calloc(1, max + 1);
    if (data == NULL)
        return (-1);

    while (total_read < max) {
        r = lthread_recv(fd, data + total_read, 1, 0, timeout);

        if (r == 0 || r == -2 || r == -1) {
            free(data);
            return (r);
        }

        total_read += 1;
        if (data[cur++] == '\n')
            break;
    }

    *buf = data;

    return (total_read);
}
示例#2
0
文件: prox_bd.c 项目: halayli/express
void
bd_lt_cli(lthread_t *lt, int fd)
{
	char buff[1024] = {0};
	int ret;
	struct _cmd cmd;
	struct cmd_opt cmd_options;
	char *err = "Unknown Command\n";

	DEFINE_LTHREAD(lt);

	sprintf(buff, 
	    "Copyright (c) 2011 express backdoor\n\nlthread 1.0\n"
	    "Play Nice.\n");

	lthread_send(lt, fd, buff, strlen(buff), 0);

	while (1) {
		bzero(buff, sizeof buff);
		lthread_send(lt, fd, "%", strlen("%"), 0);
		ret = lthread_recv(lt, fd, buff, 1024, 0, 0);
		if (ret == -1)
			break;

		if(is_whitespace(buff))
			continue;

		get_cmd(&cmd, buff, ret);
		if (cmd.func == NULL) {
			lthread_send(lt, fd, err, strlen(err), 0);
			continue;
		}

		cmd_options.lt = lt;
		cmd_options.fd = fd;
		cmd_options.recvd = buff;
		cmd_options.len = ret;
		(*cmd.func)(&cmd_options);
	}

	close(fd);
}
示例#3
0
int
http_recv(http_cli_t *cli, char *buf, uint64_t len)
{
    return lthread_recv(cli->conn.fd, buf, len, 0, 0);
}