mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-03-17 13:03:43 +00:00
instance id
This commit is contained in:
@@ -75,6 +75,7 @@ us_server_s *us_server_init(us_stream_s *stream) {
|
|||||||
server->passwd = "";
|
server->passwd = "";
|
||||||
server->static_path = "";
|
server->static_path = "";
|
||||||
server->allow_origin = "";
|
server->allow_origin = "";
|
||||||
|
server->instance_id = "";
|
||||||
server->timeout = 10;
|
server->timeout = 10;
|
||||||
server->run = run;
|
server->run = run;
|
||||||
|
|
||||||
@@ -400,7 +401,9 @@ static void _http_callback_state(struct evhttp_request *request, void *v_server)
|
|||||||
|
|
||||||
_A_EVBUFFER_ADD_PRINTF(buf,
|
_A_EVBUFFER_ADD_PRINTF(buf,
|
||||||
"{\"ok\": true, \"result\": {"
|
"{\"ok\": true, \"result\": {"
|
||||||
|
" \"instance_id\": \"%s\","
|
||||||
" \"encoder\": {\"type\": \"%s\", \"quality\": %u},",
|
" \"encoder\": {\"type\": \"%s\", \"quality\": %u},",
|
||||||
|
server->instance_id,
|
||||||
us_encoder_type_to_string(enc_type),
|
us_encoder_type_to_string(enc_type),
|
||||||
enc_quality
|
enc_quality
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -149,6 +149,7 @@ typedef struct us_server_sx {
|
|||||||
char *passwd;
|
char *passwd;
|
||||||
char *static_path;
|
char *static_path;
|
||||||
char *allow_origin;
|
char *allow_origin;
|
||||||
|
char *instance_id;
|
||||||
|
|
||||||
unsigned drop_same_frames;
|
unsigned drop_same_frames;
|
||||||
unsigned fake_width;
|
unsigned fake_width;
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ enum _US_OPT_VALUES {
|
|||||||
_O_PASSWD,
|
_O_PASSWD,
|
||||||
_O_STATIC,
|
_O_STATIC,
|
||||||
_O_ALLOW_ORIGIN,
|
_O_ALLOW_ORIGIN,
|
||||||
|
_O_INSTANCE_ID,
|
||||||
_O_TCP_NODELAY,
|
_O_TCP_NODELAY,
|
||||||
_O_SERVER_TIMEOUT,
|
_O_SERVER_TIMEOUT,
|
||||||
|
|
||||||
@@ -177,6 +178,7 @@ static const struct option _LONG_OPTS[] = {
|
|||||||
{"static", required_argument, NULL, _O_STATIC},
|
{"static", required_argument, NULL, _O_STATIC},
|
||||||
{"drop-same-frames", required_argument, NULL, _O_DROP_SAME_FRAMES},
|
{"drop-same-frames", required_argument, NULL, _O_DROP_SAME_FRAMES},
|
||||||
{"allow-origin", required_argument, NULL, _O_ALLOW_ORIGIN},
|
{"allow-origin", required_argument, NULL, _O_ALLOW_ORIGIN},
|
||||||
|
{"instance-id", required_argument, NULL, _O_INSTANCE_ID},
|
||||||
{"fake-resolution", required_argument, NULL, _O_FAKE_RESOLUTION},
|
{"fake-resolution", required_argument, NULL, _O_FAKE_RESOLUTION},
|
||||||
{"tcp-nodelay", no_argument, NULL, _O_TCP_NODELAY},
|
{"tcp-nodelay", no_argument, NULL, _O_TCP_NODELAY},
|
||||||
{"server-timeout", required_argument, NULL, _O_SERVER_TIMEOUT},
|
{"server-timeout", required_argument, NULL, _O_SERVER_TIMEOUT},
|
||||||
@@ -228,6 +230,7 @@ static const struct option _LONG_OPTS[] = {
|
|||||||
|
|
||||||
|
|
||||||
static int _parse_resolution(const char *str, unsigned *width, unsigned *height, bool limited);
|
static int _parse_resolution(const char *str, unsigned *width, unsigned *height, bool limited);
|
||||||
|
static int _check_instance_id(const char *str);
|
||||||
|
|
||||||
static void _features(void);
|
static void _features(void);
|
||||||
static void _help(FILE *fp, us_device_s *dev, us_encoder_s *enc, us_stream_s *stream, us_server_s *server);
|
static void _help(FILE *fp, us_device_s *dev, us_encoder_s *enc, us_stream_s *stream, us_server_s *server);
|
||||||
@@ -419,6 +422,13 @@ int options_parse(us_options_s *options, us_device_s *dev, us_encoder_s *enc, us
|
|||||||
case _O_DROP_SAME_FRAMES: OPT_NUMBER("--drop-same-frames", server->drop_same_frames, 0, US_VIDEO_MAX_FPS, 0);
|
case _O_DROP_SAME_FRAMES: OPT_NUMBER("--drop-same-frames", server->drop_same_frames, 0, US_VIDEO_MAX_FPS, 0);
|
||||||
case _O_FAKE_RESOLUTION: OPT_RESOLUTION("--fake-resolution", server->fake_width, server->fake_height, false);
|
case _O_FAKE_RESOLUTION: OPT_RESOLUTION("--fake-resolution", server->fake_width, server->fake_height, false);
|
||||||
case _O_ALLOW_ORIGIN: OPT_SET(server->allow_origin, optarg);
|
case _O_ALLOW_ORIGIN: OPT_SET(server->allow_origin, optarg);
|
||||||
|
case _O_INSTANCE_ID:
|
||||||
|
if (_check_instance_id(optarg) != 0) {
|
||||||
|
printf("Invalid instance ID, it should be like: ^[a-zA-Z0-9\\./+_-]*$\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
server->instance_id = optarg;
|
||||||
|
break;
|
||||||
case _O_TCP_NODELAY: OPT_SET(server->tcp_nodelay, true);
|
case _O_TCP_NODELAY: OPT_SET(server->tcp_nodelay, true);
|
||||||
case _O_SERVER_TIMEOUT: OPT_NUMBER("--server-timeout", server->timeout, 1, 60, 0);
|
case _O_SERVER_TIMEOUT: OPT_NUMBER("--server-timeout", server->timeout, 1, 60, 0);
|
||||||
|
|
||||||
@@ -530,6 +540,18 @@ static int _parse_resolution(const char *str, unsigned *width, unsigned *height,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _check_instance_id(const char *str) {
|
||||||
|
for (const char *ptr = str; *ptr; ++ptr) {
|
||||||
|
if (!(isascii(*ptr) && (
|
||||||
|
isalpha(*ptr) || isdigit(*ptr)
|
||||||
|
|| *ptr == '.' || *ptr == '/' || *ptr == '+' || *ptr == '_' || *ptr == '-'
|
||||||
|
))) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void _features(void) {
|
static void _features(void) {
|
||||||
# ifdef WITH_GPIO
|
# ifdef WITH_GPIO
|
||||||
puts("+ WITH_GPIO");
|
puts("+ WITH_GPIO");
|
||||||
@@ -657,6 +679,8 @@ static void _help(FILE *fp, us_device_s *dev, us_encoder_s *enc, us_stream_s *st
|
|||||||
SAY(" --tcp-nodelay ────────────── Set TCP_NODELAY flag to the client /stream socket. Only for TCP socket.");
|
SAY(" --tcp-nodelay ────────────── Set TCP_NODELAY flag to the client /stream socket. Only for TCP socket.");
|
||||||
SAY(" Default: disabled.\n");
|
SAY(" Default: disabled.\n");
|
||||||
SAY(" --allow-origin <str> ─────── Set Access-Control-Allow-Origin header. Default: disabled.\n");
|
SAY(" --allow-origin <str> ─────── Set Access-Control-Allow-Origin header. Default: disabled.\n");
|
||||||
|
SAY(" --instance-id <str> ──────── A short string identifier to be displayed in the /state handle.");
|
||||||
|
SAY(" It must satisfy regexp ^[a-zA-Z0-9\\./+_-]*$. Default: an empty string.\n");
|
||||||
SAY(" --server-timeout <sec> ───── Timeout for client connections. Default: %u.\n", server->timeout);
|
SAY(" --server-timeout <sec> ───── Timeout for client connections. Default: %u.\n", server->timeout);
|
||||||
# define ADD_SINK(x_name, x_opt) \
|
# define ADD_SINK(x_name, x_opt) \
|
||||||
SAY(x_name " sink options:"); \
|
SAY(x_name " sink options:"); \
|
||||||
|
|||||||
Reference in New Issue
Block a user