]> prime8.dev >> repos - ttyd.git/commitdiff
add websocket ping interval option (#519)
authorMATSUO Takatoshi <matsuo.tak@gmail.com>
Sat, 7 Nov 2020 04:00:27 +0000 (13:00 +0900)
committerGitHub <noreply@github.com>
Sat, 7 Nov 2020 04:00:27 +0000 (12:00 +0800)
src/server.c

index 9b747a011faa094f624c597c8b654c4ff6bc25c1..3818f68444354ef214908e9aec65fa9c3ee96cde 100644 (file)
@@ -42,6 +42,18 @@ static const struct lws_extension extensions[] = {
     {NULL, NULL, NULL}};
 #endif
 
+#if LWS_LIBRARY_VERSION_NUMBER >= 4000000
+static const uint32_t backoff_ms[] = { 1000, 2000, 3000, 4000, 5000 };
+static lws_retry_bo_t retry = {
+      .retry_ms_table = backoff_ms,
+      .retry_ms_table_count = LWS_ARRAY_SIZE(backoff_ms),
+      .conceal_count = LWS_ARRAY_SIZE(backoff_ms),
+      .secs_since_valid_ping = 300,
+      .secs_since_valid_hangup = 300 + 7,
+      .jitter_percent = 0,
+    };
+#endif
+
 // command line options
 static const struct option options[] = {
     {"port", required_argument, NULL, 'p'},
@@ -52,6 +64,9 @@ static const struct option options[] = {
     {"signal", required_argument, NULL, 's'},
     {"index", required_argument, NULL, 'I'},
     {"base-path", required_argument, NULL, 'b'},
+#if LWS_LIBRARY_VERSION_NUMBER >= 4000000
+    {"ping-interval", required_argument, NULL, 'P'},
+#endif
     {"ipv6", no_argument, NULL, '6'},
     {"ssl", no_argument, NULL, 'S'},
     {"ssl-cert", required_argument, NULL, 'C'},
@@ -69,7 +84,13 @@ static const struct option options[] = {
     {"version", no_argument, NULL, 'v'},
     {"help", no_argument, NULL, 'h'},
     {NULL, 0, 0, 0}};
+
+#if LWS_LIBRARY_VERSION_NUMBER < 4000000
 static const char *opt_string = "p:i:c:u:g:s:I:b:6aSC:K:A:Rt:T:Om:oBd:vh";
+#endif
+#if LWS_LIBRARY_VERSION_NUMBER >= 4000000
+static const char *opt_string = "p:i:c:u:g:s:I:b:P:6aSC:K:A:Rt:T:Om:oBd:vh";
+#endif
 
 static void print_help() {
   // clang-format off
@@ -95,6 +116,9 @@ static void print_help() {
           "    -B, --browser           Open terminal with the default system browser\n"
           "    -I, --index             Custom index.html path\n"
           "    -b, --base-path         Expected base path for requests coming from a reverse proxy (eg: /mounted/here)\n"
+#if LWS_LIBRARY_VERSION_NUMBER >= 4000000
+          "    -P, --ping-interval     Websocket ping interval(sec) (default: 300)\n"
+#endif
 #ifdef LWS_WITH_IPV6
           "    -6, --ipv6              Enable IPv6 support\n"
 #endif
@@ -380,6 +404,17 @@ int main(int argc, char **argv) {
         sc(ws) sc(index) sc(token) sc(parent)
 #undef sc
       } break;
+#if LWS_LIBRARY_VERSION_NUMBER >= 4000000
+      case 'P':
+        if (atoi(optarg) <= 0) {
+          fprintf(stderr, "ttyd: invalid ping interval: %s\n", optarg);
+          return -1;
+        }
+        retry.secs_since_valid_ping = atoi(optarg);
+        retry.secs_since_valid_hangup = atoi(optarg) + 7;
+        info.retry_and_idle_policy = &retry;
+        break;
+#endif
       case '6':
         info.options &= ~(LWS_SERVER_OPTION_DISABLE_IPV6);
         break;