Beispiel #1
0
size_t vterm_screen_get_text(const VTermScreen *screen, char *str, size_t len, const VTermRect rect)
{
  return _get_chars(screen, 1, str, len, rect);
}
Beispiel #2
0
void sys_handler(struct evhttp_request *req, void *arg)
{
	struct evbuffer *buf;
	int valid_cmd = 1;
	int raw_output = 0;
	int timeout = 2;
	int needs_escaped = 1;

	char * cmd;
	cmd = (char *) malloc(1024 * sizeof(char));

	buf = evbuffer_new();
	if (buf == NULL)
		err(1, "failed to create response buffer");

	if (strncmp(_get_chars(req, "cmd", ""),"zing", 50) == 0) {
	evhttp_add_header(evhttp_request_get_output_headers(req),
			"Content-Type", "text/javascript");
		sprintf(cmd, "zing_json_fetcher.sh \"%s\" %d", _get_chars(req, "artist", ""), _get_int(req, "page", 1) );
		timeout = 10;
		raw_output = 1;
	} else if (strncmp(_get_chars(req, "cmd", ""),"m3u", 50) == 0) {
		evhttp_add_header(evhttp_request_get_output_headers(req),
			"Content-Type", "application/x-mpegurl");
		sprintf(cmd, "zing_m3u_fetcher.sh \"%s\"", _get_chars(req, "artist", ""));
		timeout = 60;
		raw_output = 1;
		needs_escaped = 0;
	} else if (strncmp(_get_chars(req, "cmd", ""),"pls", 50) == 0) {
		evhttp_add_header(evhttp_request_get_output_headers(req),
			"Content-Type", "audio/x-scpls");
		sprintf(cmd, "zing_pls_fetcher.sh \"%s\"", _get_chars(req, "artist", ""));
		timeout = 60;
		raw_output = 1;
		needs_escaped = 0;
	} else {
		valid_cmd = 0;
	}

	if (valid_cmd) {
		char * ret;
		char * ret_escaped;
		ret = (char *) malloc(102400 *sizeof(char));

		pthread_t f;
		execstruct e;
		e.cmd = cmd;
		e.ret = ret;
		e.done = 0;
		int s, i;
		fprintf(stderr, "Trying to create a new exec thread... [%s]", cmd);
		pthread_create (&f, NULL, execworker, (void *) &e);
		for (i = 0; i < timeout; ++i) {
			sleep(1);
			if (e.done) {
				fprintf(stderr, " Done!\n");
				break;
			}
			fprintf(stderr, ".");
		}

		s = pthread_cancel(f);
		
		if (s != ESRCH) {
			fprintf(stderr, " Timed out!\n");
			sprintf(ret, "Request timed out\0");
		}
		
		//fprintf(stderr, "%s\n", ret);
		
		
		ret_escaped = escape(ret);
		if (raw_output == 0) {
			evbuffer_add_printf(buf, "{\"valid\":%d,\"result\":\"%s\"}", valid_cmd, ret_escaped);
		} else {
			evbuffer_add_printf(buf, "%s", needs_escaped ? ret_escaped : ret);
		}
		free(ret_escaped);

		free(ret);
	} else {
		evbuffer_add_printf(buf, "{\"valid\":%d,\"result\":\"\"}", valid_cmd);
	}

	evhttp_send_reply(req, HTTP_OK, "OK", buf);

	free(cmd);
}
Beispiel #3
0
size_t vterm_screen_get_chars(const VTermScreen *screen, uint32_t *chars, size_t len, const VTermRect rect)
{
  return _get_chars(screen, 0, chars, len, rect);
}