diff --git a/test-server/test-echo.c b/test-server/test-echo.c index 7a8b0023..09608e3a 100644 --- a/test-server/test-echo.c +++ b/test-server/test-echo.c @@ -42,6 +42,7 @@ #include "../lib/libwebsockets.h" static volatile int force_exit = 0; +static int versa; #define MAX_ECHO_PAYLOAD 1400 #define LOCAL_RESOURCE_PATH INSTALL_DATADIR"/libwebsockets-test-server" @@ -67,6 +68,7 @@ callback_echo(struct libwebsocket_context *context, /* when the callback is used for server operations --> */ case LWS_CALLBACK_SERVER_WRITEABLE: +do_tx: n = libwebsocket_write(wsi, &pss->buf[LWS_SEND_BUFFER_PRE_PADDING], pss->len, LWS_WRITE_TEXT); if (n < 0) { lwsl_err("ERROR %d writing to socket, hanging up\n", n); @@ -79,6 +81,7 @@ callback_echo(struct libwebsocket_context *context, break; case LWS_CALLBACK_RECEIVE: +do_rx: if (len > MAX_ECHO_PAYLOAD) { lwsl_err("Server received packet bigger than %u, hanging up\n", MAX_ECHO_PAYLOAD); return 1; @@ -98,10 +101,14 @@ callback_echo(struct libwebsocket_context *context, break; case LWS_CALLBACK_CLIENT_RECEIVE: + if (versa) + goto do_rx; lwsl_notice("Client RX: %s", (char *)in); break; case LWS_CALLBACK_CLIENT_WRITEABLE: + if (versa) + goto do_tx; /* we will send our packet... */ pss->len = sprintf((char *)&pss->buf[LWS_SEND_BUFFER_PRE_PADDING], "hello from libwebsockets-test-echo client pid %d index %d\n", getpid(), pss->index++); lwsl_notice("Client TX: %s", &pss->buf[LWS_SEND_BUFFER_PRE_PADDING]); @@ -157,6 +164,8 @@ static struct option options[] = { { "ratems", required_argument, NULL, 'r' }, #endif { "ssl", no_argument, NULL, 's' }, + { "versa", no_argument, NULL, 'v' }, + { "uri", required_argument, NULL, 'u' }, { "passphrase", required_argument, NULL, 'P' }, { "interface", required_argument, NULL, 'i' }, #ifndef LWS_NO_DAEMONIZE @@ -183,6 +192,7 @@ int main(int argc, char **argv) int listen_port = 80; struct lws_context_creation_info info; char passphrase[256]; + char uri[256] = "/"; #ifndef LWS_NO_CLIENT char address[256], ads_port[256 + 30]; int rate_us = 250000; @@ -206,7 +216,7 @@ int main(int argc, char **argv) #endif while (n >= 0) { - n = getopt_long(argc, argv, "i:hsp:d:DC:k:P:" + n = getopt_long(argc, argv, "i:hsp:d:DC:k:P:v" #ifndef LWS_NO_CLIENT "c:r:" #endif @@ -228,7 +238,11 @@ int main(int argc, char **argv) strncpy(ssl_key, optarg, sizeof(ssl_key)); ssl_key[sizeof(ssl_key) - 1] = '\0'; break; - + case 'u': + strncpy(uri, optarg, sizeof(uri)); + uri[sizeof(uri) - 1] = '\0'; + break; + #ifndef LWS_NO_DAEMONIZE case 'D': daemonize = 1; @@ -257,6 +271,9 @@ int main(int argc, char **argv) case 'p': port = atoi(optarg); break; + case 'v': + versa = 1; + break; case 'i': strncpy(interface_name, optarg, sizeof interface_name); interface_name[(sizeof interface_name) - 1] = '\0'; @@ -365,7 +382,7 @@ int main(int argc, char **argv) sprintf(ads_port, "%s:%u\n", address, port & 65535); wsi = libwebsocket_client_connect(context, address, - port, use_ssl, "/", ads_port, + port, use_ssl, uri, ads_port, "origin", NULL, -1); if (!wsi) { lwsl_err("Client failed to connect to %s:%u\n", address, port); @@ -381,7 +398,7 @@ int main(int argc, char **argv) #ifndef LWS_NO_CLIENT struct timeval tv; - if (client) { + if (client && !versa) { gettimeofday(&tv, NULL); if (((unsigned int)tv.tv_usec - oldus) > (unsigned int)rate_us) {