Beispiel #1
0
void
fetchtask(void *v)
{
	int fd, n;
	char buf[512];
	struct timeval stTv;

	
	//fprintf(stderr, "starting...\n");
	for(;;){
		if((fd = netdial(TCP, server, 80)) < 0){
			fprintf(stderr, "dial %s: %s (%s)\n", server, strerror(errno), taskgetstate());
			continue;
		}
		stTv.tv_sec = 60;
		stTv.tv_usec = 0;
		setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&stTv, sizeof(stTv));
		snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\nHost: %s\r\n\r\n", url, server);
		fdwrite(fd, buf, strlen(buf));
		while((n = fdread(fd, buf, sizeof buf)) > 0)
			;
		if (n < 0)
		{
			fail++;
		}else{
			sucess++;
		}
		close(fd);
	}
}
Beispiel #2
0
int fdputsf(int fd, char *fmt, ...) {
	char msg[2048];
	va_list args;
	va_start(args, fmt);
	vsnprintf(msg, sizeof(msg)-1, fmt, args);
	va_end(args);
	return fdwrite(fd, msg, strlen(msg));
}
Beispiel #3
0
static int
ttyreset(int fd)
{
	static uint8 ff = 0xff;

	if(fdwrite(fd, &ff, 1) < 0)
		return -1;

	/* This is fairly conservative. */
	taskdelay(250);
	return 0;
}
void
proxytask(void *v)
{
	int fd ;
	int n = 0 ;
	char buf[1024];
	fd = (int)v;
	
	while((n = fdread(&fd, buf, sizeof buf)) > 0) {
		fdwrite(&fd, buf, n);
	}
	close(fd);

}
Beispiel #5
0
void
rwtask(void *v)
{
	int *a, rfd, wfd, n;
	char buf[2048];
	a = v;
	rfd = a[0];
	wfd = a[1];
	free(a);
	while ((n = fdread(rfd, buf, sizeof buf)) > 0) {
		fdwrite(wfd, buf, n);
	}
	shutdown(wfd, SHUT_WR);
	close(rfd);
}
Beispiel #6
0
static int
hexwrite(int fd, void *p, int n)
{
	char hex[RCALLMAX*2];
	int i, nw;
	char *cp = (char*)p;
	
	for(i=0; i<n; i++)
		to_hex8_ascii(&hex[i*2], cp[i]);
		
	nw = fdwrite(fd, hex, n*2);
	if(nw < 0)
		return -1;

	return nw/2;
}
Beispiel #7
0
void
fetchtask(ltctx *lt, void *v)
{
    int fd, n;
    char buf[512];

    fprintf(stderr, "starting...\n");
    for(;;) {
        if((fd = netdial(lt, TCP, server, 80)) < 0) {
            fprintf(stderr, "dial %s: %s (%s)\n", server, strerror(errno), taskgetstate(lt));
            continue;
        }
        snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\nHost: %s\r\n\r\n", url, server);
        fdwrite(lt, fd, buf, strlen(buf));
        while((n = fdread(lt, fd, buf, sizeof buf)) > 0)
            ;
        close(fd);
        write(1, ".", 1);
    }
}
Beispiel #8
0
void fetchtask(void *v)
{
    int fd, n;
    char buf[512];

    fprintf(stderr, "starting...\n");
    for (; ;) {
        if ((fd = netdial(TCP, server, 80)) < 0) { // 异步连接服务器, 会造成协程切换
            fprintf(stderr, "dial %s: %s (%s)\n", server, strerror(errno), taskgetstate());
            continue;
        }
        snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\nHost: %s\r\n\r\n", url, server);
        fdwrite(&fd, buf, strlen(buf)); // 异步数据读写, 这里可能会造成协程切换, 因为一定有阻塞操作
        while ((n = fdread(&fd, buf, sizeof buf)) > 0) { // 异步读取
            buf[n] = '\0';
            printf("buf:%s", buf);
        }
        close(fd);
        write(1, ".", 1);
    }
}
Beispiel #9
0
int bsd_sendfile(int out_fd, int in_fd, off_t *offset, size_t count) {
    char buf[BSD_SENDFILE_BUF_SIZE];
    int tot, cur, rem, sent;
    int ret = -1;
    off_t orig_offset = 0;

    if (offset != NULL) {
        orig_offset = lseek(in_fd, 0, SEEK_CUR);
        check(orig_offset >= 0, "lseek failure when determining current position");
        check(lseek(in_fd, *offset, SEEK_SET) >= 0, "lseek failure when setting new position");
    }

    for (tot = 0, rem = count, cur = rem; cur != 0 && tot < count; tot += cur, rem -= cur) {
        if (rem >= BSD_SENDFILE_BUF_SIZE) {
            cur = BSD_SENDFILE_BUF_SIZE;
        } else {
            cur = rem;
        }

        cur = fdread(in_fd, buf, cur);
        check(cur >= 0, "Internal sendfile emulation failed: fdread: %i", cur);

        if (cur != 0) {
            sent = fdwrite(out_fd, buf, cur);
            check(sent == cur, "Internal sendfile emulation failed: fdread: %i, fdwrite: %i", cur, sent);
        }
    }

    ret = tot;

error:
    if (offset != NULL) {
        if (ret != -1) {
            *offset += tot;
        }
        lseek(in_fd, orig_offset, SEEK_SET);
    }
    return ret;
}
Beispiel #10
0
inline
int cornet_write(int fd, const char* buf, int len) {
    return fdwrite(fd, (char*)buf, len);
}
Beispiel #11
0
static ssize_t file_send(IOBuf *iob, char *buffer, int len)
{
    return fdwrite(iob->fd, buffer, len);    
}
Beispiel #12
0
int fdputs(int fd, char *msg) {
	return fdwrite(fd, msg, strlen(msg));
}
Beispiel #13
0
static void send_device_command(struct videohub_data *d, char *cmd_buffer) {
	if (!test_data)
		fdwrite(d->dev_fd, cmd_buffer, strlen(cmd_buffer));
	else
		parse_text_buffer(d, cmd_buffer);
}
Beispiel #14
0
/*
	Returns:
		-1 = exit thread
		 1 = retry
		 0 = connected ok
*/
int connect_source(INPUT *r, int retries, int readbuflen, int *http_code) {
	CHANSRC *src = chansrc_init(r->channel->source);
	if (!src) {
		LOGf("ERR  : Can't parse channel source | Channel: %s Source: %s\n", r->channel->name, r->channel->source);
		FATAL_ERROR;
	}
	r->connected = 0;
	r->reconnect = 0;

	int active = 1;
	int dret = async_resolve_host(src->host, src->port, &(r->src_sockname), 5000, &active);
	if (dret != 0) {
		if (dret == 1)
			proxy_log(r, "Can't resolve host");
		if (dret == 2)
			proxy_log(r, "Timeout resolving host");
		DO_RECONNECT;
	}

	proxy_log(r, "Connecting");

	char buf[1024];
	*http_code = 0;
	if (src->sproto == tcp_sock) {
		r->sock = socket(PF_INET, SOCK_STREAM, 0);
		if (r->sock < 0) {
			log_perror("play(): Could not create SOCK_STREAM socket.", errno);
			FATAL_ERROR;
		}
		//proxy_log(r, "Add");
		if (do_connect(r->sock, (struct sockaddr *)&(r->src_sockname), sizeof(r->src_sockname), PROXY_CONNECT_TIMEOUT) < 0) {
			LOGf("ERR  : Error connecting to %s srv_fd: %i err: %s\n", r->channel->source, r->sock, strerror(errno));
			DO_RECONNECT;
		}

		snprintf(buf,sizeof(buf)-1, "GET /%s HTTP/1.0\nHost: %s:%u\nX-Smart-Client: yes\nUser-Agent: %s %s (%s)\n\n",
		         src->path, src->host, src->port, server_sig, server_ver, config->ident);
		buf[sizeof(buf)-1] = 0;
		fdwrite(r->sock, buf, strlen(buf));

		char xresponse[128];
		memset(xresponse, 0, sizeof(xresponse));
		memset(buf, 0, sizeof(buf));
		regmatch_t res[4];
		while (fdgetline(r->sock,buf,sizeof(buf)-1)) {
			if (buf[0] == '\n' || buf[0] == '\r')
				break;
			if (strstr(buf,"HTTP/1.") != NULL) {
				regex_t http_response;
				regcomp(&http_response, "^HTTP/1.[0-1] (([0-9]{3}) .*)", REG_EXTENDED);
				if (regexec(&http_response,buf,3,res,0) != REG_NOMATCH) {
					char codestr[4];
					if ((unsigned int)res[1].rm_eo-res[1].rm_so < sizeof(xresponse)) {
						strncpy(xresponse, &buf[res[1].rm_so], res[1].rm_eo-res[1].rm_so);
						xresponse[res[1].rm_eo-res[1].rm_so] = '\0';
						chomp(xresponse);
						strncpy(codestr, &buf[res[2].rm_so], res[2].rm_eo-res[2].rm_so);
						codestr[3] = 0;
						*http_code = atoi(codestr);
					}
				}
				regfree(&http_response);
			}
			if (*http_code == 504) { // Extract extra error code
				if (strstr(buf, "X-ErrorCode: ") != NULL) {
					*http_code = atoi(buf+13);
					break;
				}
			}
		}
		if (*http_code == 0) { // No valid HTTP response, retry
			LOGf("DEBUG: Server returned not valid HTTP code | srv_fd: %i\n", r->sock);
			DO_RECONNECT;
		}
		if (*http_code == 504) { // No signal, exit
			LOGf("ERR  : Get no-signal for %s from %s on srv_fd: %i\n", r->channel->name, r->channel->source, r->sock);
			FATAL_ERROR;
		}
		if (*http_code > 300) { // Unhandled or error codes, exit
			LOGf("ERR  : Get code %i for %s from %s on srv_fd: %i exiting.\n", *http_code, r->channel->name, r->channel->source, r->sock);
			FATAL_ERROR;
		}
		// connected ok, continue
	} else {
		if (!IN_MULTICAST(ntohl(r->src_sockname.sin_addr.s_addr))) {
			LOGf("ERR  : %s is not multicast address\n", r->channel->source);
			FATAL_ERROR;
		}
		struct ip_mreq mreq;
		struct sockaddr_in receiving_from;

		r->sock = socket(PF_INET, SOCK_DGRAM, 0);
		if (r->sock < 0) {
			log_perror("play(): Could not create SOCK_DGRAM socket.", errno);
			FATAL_ERROR;
		}
		// LOGf("CONN : Listening on multicast socket %s srv_fd: %i retries left: %i\n", r->channel->source, r->sock, retries);
		int on = 1;
		setsockopt(r->sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
		// subscribe to multicast group
		memcpy(&mreq.imr_multiaddr, &(r->src_sockname.sin_addr), sizeof(struct in_addr));
		mreq.imr_interface.s_addr = htonl(INADDR_ANY);
		if (setsockopt(r->sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) {
			LOGf("ERR  : Failed to add IP membership on %s srv_fd: %i\n", r->channel->source, r->sock);
			FATAL_ERROR;
		}
		// bind to the socket so data can be read
		memset(&receiving_from, 0, sizeof(receiving_from));
		receiving_from.sin_family = AF_INET;
		receiving_from.sin_addr   = r->src_sockname.sin_addr;
		receiving_from.sin_port   = htons(src->port);
		if (bind(r->sock, (struct sockaddr *) &receiving_from, sizeof(receiving_from)) < 0) {
			LOGf("ERR  : Failed to bind to %s srv_fd: %i\n", r->channel->source, r->sock);
			FATAL_ERROR;
		}
	}

	if (setsockopt(r->sock, SOL_SOCKET, SO_RCVBUF, (const char *)&readbuflen, sizeof(readbuflen)) < 0)
		log_perror("play(): setsockopt(SO_RCVBUF)", errno);

	r->connected = 1;

//	proxy_log(r, "Connected");
	chansrc_free(&src);
	return 0;
}