From 1abc3f43f28462b6971390b7c5a28984f629231f Mon Sep 17 00:00:00 2001 From: 45Tatami Date: Wed, 24 May 2023 00:08:13 +0200 Subject: [PATCH] wip: feat: implement sending via multicast --- TCPSender/TCPSender.cpp | 54 +++++++++++++++++++++++++++++++++++++++++ TCPSender/resource.h | 3 ++- TCPSender/resource.rc | 7 +++--- 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/TCPSender/TCPSender.cpp b/TCPSender/TCPSender.cpp index aeac0a4..9570f66 100644 --- a/TCPSender/TCPSender.cpp +++ b/TCPSender/TCPSender.cpp @@ -46,9 +46,11 @@ HWND win_hndl = NULL; UINT const WM_USR_LOG = WM_APP + 1; UINT const WM_USR_TOGGLE_CONNECT = WM_APP + 2; UINT const WM_USR_LOAD_CONFIG = WM_APP + 3; +UINT const WM_USR_TOGGLE_MULTICAST = WM_APP + 4; HANDLE comm_thread; wstring remote = L"localhost:30501"; +wstring remote_multicast = L"239.80.123.4:30501"; wstring config_file_path; // Mutex/cv protects following vars @@ -122,6 +124,10 @@ void toggle_want_connect() PostMessage(win_hndl, WM_USR_TOGGLE_CONNECT, (WPARAM) NULL, (LPARAM) NULL); } +void toggle_multicast() { + PostMessage(win_hndl, WM_USR_TOGGLE_MULTICAST, (WPARAM) NULL, (LPARAM) NULL); +} + void save_config(path const& filepath, wstring const& remote, bool connect) { std::wofstream f{filepath, std::ios_base::trunc}; @@ -242,6 +248,12 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara break; } + case IDC_MULTI_BOX: + { + bool const checked = IsDlgButtonChecked(hWnd, IDC_MULTI_BOX); + toggle_multicast(); + break; + } default: return false; } @@ -288,6 +300,23 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara conn_cv.notify_one(); return true; } + case WM_USR_TOGGLE_MULTICAST: + { + lock_guard conn_lk{ conn_mut }; + + want_connect = false; + // TODO wait for disconnect? + + // off -> on + // button set text "set" + // text set saved multicast + // + // on -> off + // button set text "Connect" + // text set saved unicast + + return true; + } case WM_USR_LOAD_CONFIG: { lock_guard conn_lk{ conn_mut }; @@ -422,6 +451,31 @@ SOCKET _connect() { return sock; } +SOCKET _connect_multic() +{ + SOCKET sock; + + sock = socket(AF_INET, SOCK_DGRAM, 0); + // TODO fd < 0 + + string remote_ch = + wstring_convert>{}.to_bytes(remote_multicast); + + auto pos = remote_ch.rfind(":"); + string port_str = pos == string::npos ? "30501" : remote_ch.substr(pos + 1); + u_short port = std::stoul(port_str); + + struct sockaddr_in addr = { 0 }; + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = inet_addr(remote_ch.c_str()); + addr.sin_port = htons(port); + + connect(sock, (struct sockaddr *) &addr, sizeof(addr)); + // TODO return + + return sock; +} + bool _send(SOCKET &sock, string const &msg) { int len = (int) msg.length(); int buf_len = len + 4; diff --git a/TCPSender/resource.h b/TCPSender/resource.h index 907e8bd..f81d710 100644 --- a/TCPSender/resource.h +++ b/TCPSender/resource.h @@ -1257,6 +1257,7 @@ #define IDC_BTN_SUBMIT2 1002 #define IDC_EDIT2 1003 #define IDC_LOG 1003 +#define IDC_MULTI_BOX 1004 #define CF_GDIOBJLAST 0x03FF #define _WIN32_WINNT_NT4 0x0400 #define _WIN32_IE_IE40 0x0400 @@ -1618,7 +1619,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 105 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1004 +#define _APS_NEXT_CONTROL_VALUE 1005 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/TCPSender/resource.rc b/TCPSender/resource.rc index 3d43311..dd5c7c1 100644 --- a/TCPSender/resource.rc +++ b/TCPSender/resource.rc @@ -48,14 +48,15 @@ END // Dialog // -IDD_DIALOG1 DIALOGEX 0, 0, 309, 177 +IDD_DIALOG1 DIALOGEX 0, 0, 309, 187 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "TCP Sender" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - EDITTEXT IDC_REMOTE,7,7,228,14,ES_AUTOHSCROLL + EDITTEXT IDC_REMOTE,7,13,228,14,ES_AUTOHSCROLL PUSHBUTTON "Connect",IDC_BTN_SUBMIT,252,7,50,14,BS_CENTER - EDITTEXT IDC_LOG,7,31,295,139,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY + AUTOCHECKBOX "Multicast",IDC_MULTI_BOX,255,24,228,14 + EDITTEXT IDC_LOG,7,41,295,139,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY END