diff --git a/src/hyperion_client.c b/src/hyperion_client.c index f732a0b..4f520a8 100644 --- a/src/hyperion_client.c +++ b/src/hyperion_client.c @@ -46,15 +46,17 @@ int hyperion_client(const char* origin, const char* hostname, int port, bool uni int hyperion_read() { if (!sockfd) - return -1; + return -2; uint8_t headbuff[4]; int n = read(sockfd, headbuff, 4); uint32_t messageSize = ((headbuff[0] << 24) & 0xFF000000) | ((headbuff[1] << 16) & 0x00FF0000) | ((headbuff[2] << 8) & 0x0000FF00) | ((headbuff[3]) & 0x000000FF); - if (n < 0 || messageSize >= sizeof(recvBuff)) - return -1; + if (n < 0) + return -3; + if (messageSize >= sizeof(recvBuff)) + return -4; n = read(sockfd, recvBuff, messageSize); if (n < 0) - return -1; + return -5; _parse_reply(hyperionnet_Reply_as_root(recvBuff)); return 0; } diff --git a/src/json_rpc_client.h b/src/json_rpc_client.h index 9dc1d8f..bd3cf24 100644 --- a/src/json_rpc_client.h +++ b/src/json_rpc_client.h @@ -3,7 +3,6 @@ #include "log.h" #include -#define RPC_PORT 8090 typedef enum _AmbientLightingDaemon { DAEMON_INVALID = -1, diff --git a/src/main.c b/src/main.c index b856ef8..0b9f12f 100644 --- a/src/main.c +++ b/src/main.c @@ -29,6 +29,7 @@ static const struct option long_options[] = { { "height", required_argument, 0, 'y' }, { "address", required_argument, 0, 'a' }, { "port", required_argument, 0, 'p' }, + { "web-port", required_argument, 0, 'w' }, { "unix-socket", no_argument, 0, 'l' }, { "fps", required_argument, 0, 'f' }, { "no-video", no_argument, 0, 'V' }, @@ -59,6 +60,7 @@ static void print_usage() printf(" -y, --height=HEIGHT Height of video frame (default 108)\n"); printf(" -a, --address=ADDR IP address of Hyperion server\n"); printf(" -p, --port=PORT Port of Hyperion flatbuffers server (default 19400)\n"); + printf(" -w, --web-port=PORT Port of Hyperion RPC/web server (default 8090)\n"); printf(" -l, --unix-socket Connect through unix socket\n"); printf(" -f, --fps=FPS Framerate for sending video frames (default 0 = unlimited)\n"); printf(" -b, --backend=BE Use specific video capture backend (default auto)\n"); @@ -83,7 +85,7 @@ static int parse_options(int argc, char* argv[]) int opt, longindex; int ret; - while ((opt = getopt_long(argc, argv, "x:y:a:p:f:b:u:q:c:lvnhdVGrst", long_options, &longindex)) != -1) { + while ((opt = getopt_long(argc, argv, "x:y:a:p:w:f:b:u:q:c:lvnhdVGrst", long_options, &longindex)) != -1) { switch (opt) { case 'x': settings.width = atoi(optarg); @@ -98,6 +100,9 @@ static int parse_options(int argc, char* argv[]) case 'p': settings.port = atol(optarg); break; + case 'w': + settings.web_port = atol(optarg); + break; case 'l': settings.unix_socket = true; break; diff --git a/src/service.c b/src/service.c index fcaaa30..3799346 100644 --- a/src/service.c +++ b/src/service.c @@ -25,6 +25,7 @@ extern bool LSRegisterPubPriv(const char* name, LSHandle** sh, void* connection_loop(void* data) { service_t* service = (service_t*)data; + int res; DBG("Starting connection loop"); while (service->connection_loop_running) { INFO("Connecting hyperion-client.."); @@ -36,8 +37,9 @@ void* connection_loop(void* data) INFO("hyperion-client connected!"); service->connected = true; while (service->connection_loop_running) { - if (hyperion_read() < 0) { - ERR("Error! Connection timeout."); + res = hyperion_read(); + if (res < 0) { + ERR("Error! Connection timeout our error code: %d errno: %s", res, strerror(errno)); break; } } @@ -457,7 +459,7 @@ static bool videooutput_callback(LSHandle* sh __attribute__((unused)), LSMessage INFO("videooutput_callback: hdrType: %s", hdr_type_str); DynamicRange range = get_dynamic_range(hdr_type_str); - int ret = set_hdr_state(service->settings->unix_socket ? "127.0.0.1" : service->settings->address, RPC_PORT, range); + int ret = set_hdr_state(service->settings->unix_socket ? "127.0.0.1" : service->settings->address, service->settings->web_port, range); if (ret != 0) { ERR("videooutput_callback: set_hdr_state failed, ret: %d", ret); } @@ -506,7 +508,7 @@ static bool picture_callback(LSHandle* sh __attribute__((unused)), LSMessage* ms INFO("picture_callback: dynamicRange: %s", dynamic_range_str); DynamicRange range = get_dynamic_range(dynamic_range_str); - int ret = set_hdr_state(service->settings->unix_socket ? "127.0.0.1" : service->settings->address, RPC_PORT, range); + int ret = set_hdr_state(service->settings->unix_socket ? "127.0.0.1" : service->settings->address, service->settings->web_port, range); if (ret != 0) { ERR("videooutput_callback: set_hdr_state failed, ret: %d", ret); } diff --git a/src/settings.c b/src/settings.c index 5c35ec6..bb26ea4 100644 --- a/src/settings.c +++ b/src/settings.c @@ -8,6 +8,7 @@ void settings_init(settings_t* settings) settings->address = strdup(""); settings->port = 19400; + settings->web_port = 8090; settings->priority = 150; settings->unix_socket = false; @@ -54,6 +55,8 @@ int settings_load_json(settings_t* settings, jvalue_ref source) } if ((value = jobject_get(source, j_cstr_to_buffer("port"))) && jis_number(value)) jnumber_get_i32(value, &settings->port); + if ((value = jobject_get(source, j_cstr_to_buffer("web-port"))) && jis_number(value)) + jnumber_get_i32(value, &settings->web_port); if ((value = jobject_get(source, j_cstr_to_buffer("priority"))) && jis_number(value)) jnumber_get_i32(value, &settings->priority); if ((value = jobject_get(source, j_cstr_to_buffer("unix-socket"))) && jis_boolean(value)) @@ -94,6 +97,7 @@ int settings_save_json(settings_t* settings, jvalue_ref target) jobject_set(target, j_cstr_to_buffer("address"), jstring_create(settings->address)); jobject_set(target, j_cstr_to_buffer("port"), jnumber_create_i32(settings->port)); + jobject_set(target, j_cstr_to_buffer("web_port"), jnumber_create_i32(settings->web_port)); jobject_set(target, j_cstr_to_buffer("priority"), jnumber_create_i32(settings->priority)); jobject_set(target, j_cstr_to_buffer("unix-socket"), jboolean_create(settings->unix_socket)); diff --git a/src/settings.h b/src/settings.h index 50baae7..25b0673 100644 --- a/src/settings.h +++ b/src/settings.h @@ -13,6 +13,7 @@ typedef struct _settings_t { char* address; int port; + int web_port; int priority; bool unix_socket;