#include <linux/if_tun.h>
#endif
-#include <getopt.h>
-
-#ifdef HAVE_WINDOWS
-#include <pthread.h>
-#endif
-
#include "crypto.h"
#include "ecdsa.h"
#include "meta.h"
static bool send_data(void *handle, uint8_t type, const void *data, size_t len) {
(void)type;
- char hex[len * 2 + 1];
+ char *hex = alloca(len * 2 + 1);
bin2hex(data, hex, len);
if(verbose) {
// separate thread between the stdin and the sptps loop way below. This thread
// reads stdin and sends its content to the main thread through a TCP socket,
// which can be properly select()'ed.
-static void *stdin_reader_thread(void *arg) {
+static DWORD WINAPI stdin_reader_thread(LPVOID arg) {
struct sockaddr_in sa;
socklen_t sa_size = sizeof(sa);
closesocket(stdin_sock_fd);
stdin_sock_fd = -1;
- return NULL;
+ return 0;
}
static int start_input_reader(void) {
fprintf(stderr, "stdin thread is listening on :%d\n", ntohs(connect_sa.sin_port));
}
- pthread_t th;
- int err = pthread_create(&th, NULL, stdin_reader_thread, NULL);
-
- if(err) {
- fprintf(stderr, "Could not start reader thread: %s\n", strerror(err));
+ if(!CreateThread(NULL, 0, stdin_reader_thread, NULL, 0, NULL)) {
+ fprintf(stderr, "Could not start reader thread: %d\n", GetLastError());
goto server_err;
}
#endif // HAVE_WINDOWS
+static void print_listening_msg(int sock) {
+ sockaddr_t sa = {0};
+ socklen_t salen = sizeof(sa);
+ int port = 0;
+
+ if(!getsockname(sock, &sa.sa, &salen)) {
+ port = ntohs(sa.in.sin_port);
+ }
+
+ fprintf(stderr, "Listening on %d...\n", port);
+ fflush(stderr);
+}
+
int main(int argc, char *argv[]) {
program_name = argv[0];
bool initiator = false;
return 1;
}
- fprintf(stderr, "Listening...\n");
+ print_listening_msg(sock);
sock = accept(sock, NULL, NULL);
return 1;
}
} else {
- fprintf(stderr, "Listening...\n");
+ print_listening_msg(sock);
char buf[65536];
struct sockaddr addr;
}
if(verbose) {
- char hex[len * 2 + 1];
+ char *hex = alloca(len * 2 + 1);
bin2hex(buf, hex, len);
fprintf(stderr, "Received %ld bytes of data:\n%s\n", (long)len, hex);
}