)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"54a3ac50285f1b325e2edc95c2bb4ff6c6892818","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5127665e_b5511135","updated":"2024-10-02 10:25:13.000000000","message":"Break t_server_null","commit_id":"44f78ecf04f9c8c4623dfedde4f6b05a4f2f7fc2"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"91df5372ae900766974506a52aca986208e4adb0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"89368a61_2d049fe7","updated":"2024-12-30 19:28:08.000000000","message":"some initial comments","commit_id":"0851e4c348c39ccceb3dd2da56feb8b85465c95a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"4bcf4a8aa4e4cb2dc921b13c46f01c8d8d41a961","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"dc5f371c_e262aa8a","updated":"2025-01-23 17:57:52.000000000","message":"This needs a better commit message - it says \"Bind to multiple ipv4/ipv6 addresses\" but that is already introduced by #463 (which does not only populate `local_entry` but actually does the `bind()` as well).\n\nSo maybe something about \"add support for simultaneous use of UDP and TCP sockets\", and in the text something about \"... and add all the bound sockets to the event loop\".\n\nAlso, Gerrit claims a merge conflict...","commit_id":"53dc100b81b133f439b7f919d5a794713cdcdc60"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"44c679c7_d6612d93","updated":"2025-01-24 21:50:41.000000000","message":"more comments","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"144ce2d9ea4b1d3e24291481bfa597b128ef8288","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"c3802b2a_f6ef377b","updated":"2025-01-24 21:20:48.000000000","message":"some first comments and questions","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"24eba66e_e1a5fccf","updated":"2025-01-31 13:32:25.000000000","message":"some minor bits, and something I consider major - massive code duplication that is not helping to make the code flow easier to understand","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ea7228c66a4af49a9cf84e2784a7c28b9d78563b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"99354f46_b4819d2d","updated":"2025-02-18 16:24:33.000000000","message":"I have not done a new round of review on the code yet, but tested it somewhat more in earnest :-)\n\nRunning well-behaved clients on multiple UDP and TCP ports in parallel (2 UDP, 1 TCP, changing ports, pinging around) worked very nicely.\n\nThen I went for the gremlins - lots of short-lived connections on randomized destionation ports, with 4 sockets bound (2 UDP, 2 TCP), and *boom* it asserts on me, after about 5 minutes of gremlin run time...\n\n```\n2025-02-18 17:20:55 us\u003d391543 Connection Attempt Assertion failed at forward.c:1756 (link_socket_actual_defined(c-\u003ec2.to_link_addr))\n```\n\nthis is with DCO on the server, but I do not think it makes a difference - most likely this is a race condition because these clients are extremely non-well-behaved, read, some are killed right after TCP connection, or in the middle of the TLS handshake.","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ec62200f6da3753b9422a515f35c79bbab0ea946","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"4724ba04_97a35cf6","updated":"2025-02-18 17:35:06.000000000","message":"more comments, but these are mostly minor and/or nothing new.  The main thing that must be fixed remains the gremlin crash...","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"b9b9d50f58a931c7af5630c5b2b77da211f246c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"f134d16f_4810f8ee","updated":"2025-02-18 16:33:06.000000000","message":"without DCO it also crashes, though it takes a bit longer.  Might be just random chance of timing...\n\nThese are the last few lines\n\n```\n2025-02-18 17:31:52 us\u003d617953 tcp4-server:194.97.140.21:39821 TCPv4_SERVER READ [299] from [AF_INET]194.97.140.21:39821: P_CONTROL_V1 kid\u003d0 [ 0 ] pid\u003d1 DATA len\u003d273\n2025-02-18 17:31:52 us\u003d628842 tcp4-server:194.97.140.21:39821 TCPv4_SERVER WRITE [1222] to [AF_INET]194.97.140.21:39821: P_CONTROL_V1 kid\u003d0 [ 1 0 ] pid\u003d1 DATA len\u003d1192\n2025-02-18 17:31:52 us\u003d628925 tcp4-server:194.97.140.21:39821 TCPv4_SERVER WRITE [887] to [AF_INET]194.97.140.21:39821: P_CONTROL_V1 kid\u003d0 [ 1 0 ] pid\u003d2 DATA len\u003d857\n2025-02-18 17:31:52 us\u003d629004 Connection Attempt Assertion failed at forward.c:1756 (link_socket_actual_defined(c-\u003ec2.to_link_addr))\n2025-02-18 17:31:52 us\u003d629029 Connection Attempt Exiting due to fatal error\n2025-02-18 17:31:52 us\u003d629077 Connection Attempt Closing tun/tap interface\n```","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"7398d372bc43ebb0fae3f84800da2049c3996608","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"64738297_7c10b81b","updated":"2025-03-06 09:59:07.000000000","message":"This looks really good now - with the latest changes, all my suggestions for comments or code have been included, and I can no longer crash it (survived a gremlin horde attack for 60+ minutes).\n\nUndoubtedly there will be more things to fix, but let\u0027s move onwards!","commit_id":"1ef198615b7e86b5f109263220a600eecfe36af9"}],"doc/man-sections/link-options.rst":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":119,"context_line":"  to signal \"use what the operating system gives you as default\", for"},{"line_number":120,"context_line":"  \"all IPv4 addresses\" use \"0.0.0.0\", for \"all IPv6 addresses\" use \u0027::\u0027."},{"line_number":121,"context_line":"  ``--local`` implies ``--bind``."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"--lport port"},{"line_number":124,"context_line":"  Set default TCP/UDP port number. Cannot be used together with"},{"line_number":125,"context_line":"  ``--nobind`` option."}],"source_content_type":"text/x-rst","patch_set":18,"id":"37a21a77_b85f0053","line":122,"updated":"2025-01-31 13:32:25.000000000","message":"I think we also should mention the default values, something like\n\n```\nIf ``port`` is omitted, it defaults to the setting of ``--lport``.\nIf ``proto`` is omitted, it defaults to the setting of ``--proto``.\n```\n\n... which brings up an interesting corner case, what if a config has\n\n```\nlocal * 1000 tcp\nremote 1.2.3.4 1194 udp\n```\n?  Shall we just disallow `proto` bindings on the client-side?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bdff9339438af1bae84acae6f3aa85031e2a1527","unresolved":false,"context_lines":[{"line_number":119,"context_line":"  to signal \"use what the operating system gives you as default\", for"},{"line_number":120,"context_line":"  \"all IPv4 addresses\" use \"0.0.0.0\", for \"all IPv6 addresses\" use \u0027::\u0027."},{"line_number":121,"context_line":"  ``--local`` implies ``--bind``."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"--lport port"},{"line_number":124,"context_line":"  Set default TCP/UDP port number. Cannot be used together with"},{"line_number":125,"context_line":"  ``--nobind`` option."}],"source_content_type":"text/x-rst","patch_set":18,"id":"bb017af8_98251213","line":122,"in_reply_to":"37a21a77_b85f0053","updated":"2025-03-05 16:59:21.000000000","message":"Done, see options_postprocess_mutate_le(), now in a case like:\n\nlocal * 1000 tcp\nremote 1.2.3.4 1194 udp\n\nOnly the remote proto will be used","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"}],"src/openvpn/forward.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"144ce2d9ea4b1d3e24291481bfa597b128ef8288","unresolved":true,"context_lines":[{"line_number":2468,"context_line":"    dmsg(D_EVENT_WAIT, \"I/O WAIT status\u003d0x%04x\", c-\u003ec2.event_set_status);"},{"line_number":2469,"context_line":"}"},{"line_number":2470,"context_line":""},{"line_number":2471,"context_line":""},{"line_number":2472,"context_line":"void"},{"line_number":2473,"context_line":"process_io(struct context *c, struct link_socket *sock)"},{"line_number":2474,"context_line":"{"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"65aa7624_6dd5ee39","line":2471,"updated":"2025-01-24 21:20:48.000000000","message":"spurious new line","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":false,"context_lines":[{"line_number":2468,"context_line":"    dmsg(D_EVENT_WAIT, \"I/O WAIT status\u003d0x%04x\", c-\u003ec2.event_set_status);"},{"line_number":2469,"context_line":"}"},{"line_number":2470,"context_line":""},{"line_number":2471,"context_line":""},{"line_number":2472,"context_line":"void"},{"line_number":2473,"context_line":"process_io(struct context *c, struct link_socket *sock)"},{"line_number":2474,"context_line":"{"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"d2d2bf21_d4657dec","line":2471,"in_reply_to":"65aa7624_6dd5ee39","updated":"2025-01-31 10:42:34.000000000","message":"Done","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":2074,"context_line":"    /*"},{"line_number":2075,"context_line":"     * Calculate the flags based on the provided \u0027flags\u0027 argument."},{"line_number":2076,"context_line":"     */"},{"line_number":2077,"context_line":"    if (flags \u0026 IOW_WAIT_SIGNAL)"},{"line_number":2078,"context_line":"    {"},{"line_number":2079,"context_line":"        wait_signal(multi_io-\u003ees, (void *)err_shift);"},{"line_number":2080,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"6695b917_b3e1ecda","line":2077,"updated":"2025-01-31 13:32:25.000000000","message":"this is duplicating a huge chunk of code from `io_wait_dowork()` - which is hard enough to read, without appearing twice.\n\nCan you remove the common parts from `io_wait_dowork()` and have it call here?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":2074,"context_line":"    /*"},{"line_number":2075,"context_line":"     * Calculate the flags based on the provided \u0027flags\u0027 argument."},{"line_number":2076,"context_line":"     */"},{"line_number":2077,"context_line":"    if (flags \u0026 IOW_WAIT_SIGNAL)"},{"line_number":2078,"context_line":"    {"},{"line_number":2079,"context_line":"        wait_signal(multi_io-\u003ees, (void *)err_shift);"},{"line_number":2080,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"50e5e827_606d6e4d","line":2077,"in_reply_to":"6695b917_b3e1ecda","updated":"2025-02-14 17:45:31.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":2181,"context_line":"get_io_flags_udp(struct context *c, struct multi_io *multi_io, const unsigned int flags)"},{"line_number":2182,"context_line":"{"},{"line_number":2183,"context_line":"    multi_io-\u003eudp_flags \u003d ES_ERROR;"},{"line_number":2184,"context_line":"    if (c-\u003ec2.fast_io \u0026\u0026 (flags \u0026 (IOW_TO_TUN | IOW_TO_LINK | IOW_MBUF)))"},{"line_number":2185,"context_line":"    {"},{"line_number":2186,"context_line":"        /* fast path -- only for TUN/TAP/UDP writes */"},{"line_number":2187,"context_line":"        unsigned int ret \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"f3a3f9ad_e4a8f66f","line":2184,"updated":"2025-01-31 13:32:25.000000000","message":"this function is mostly identical to `forward.h::io_wait()`, except for the call to `get_io_flags_dowork_udp()` in the end, vs. `io_wait_dowork()`, and setting `multi_io-\u003eudp_flags` vs. `c-\u003ec2.event_set_status`.\n\nThere has to be a better way to tackle this than to walk all sockets twice, in two nearly identical functions.  Why\u0027s there a separate `udp_flags` and `event_set_status` anyway?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":true,"context_lines":[{"line_number":2181,"context_line":"get_io_flags_udp(struct context *c, struct multi_io *multi_io, const unsigned int flags)"},{"line_number":2182,"context_line":"{"},{"line_number":2183,"context_line":"    multi_io-\u003eudp_flags \u003d ES_ERROR;"},{"line_number":2184,"context_line":"    if (c-\u003ec2.fast_io \u0026\u0026 (flags \u0026 (IOW_TO_TUN | IOW_TO_LINK | IOW_MBUF)))"},{"line_number":2185,"context_line":"    {"},{"line_number":2186,"context_line":"        /* fast path -- only for TUN/TAP/UDP writes */"},{"line_number":2187,"context_line":"        unsigned int ret \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"d0b6ff1d_733c10fb","line":2184,"in_reply_to":"f3a3f9ad_e4a8f66f","updated":"2025-02-14 17:45:31.000000000","message":"The multi_io has no event_set_status member and since UDP require that I decided to call it udp_flags since it is UDP specific.","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"}],"src/openvpn/init.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":true,"context_lines":[{"line_number":3831,"context_line":"    for (int i \u003d 0; i \u003c c-\u003ec1.link_sockets_num; i++)"},{"line_number":3832,"context_line":"    {"},{"line_number":3833,"context_line":"        int mode \u003d LS_MODE_DEFAULT;"},{"line_number":3834,"context_line":""},{"line_number":3835,"context_line":"        /* mode allows CM_CHILD_TCP"},{"line_number":3836,"context_line":"         * instances to inherit acceptable fds"},{"line_number":3837,"context_line":"         * from a top-level parent */"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"e1ebc360_490d6327","side":"PARENT","line":3834,"updated":"2025-01-24 21:50:41.000000000","message":"this (and the next) blank line are arguably good, and should be kept, no?","commit_id":"2459a691e16de8f2a5003139137a02aab9c1e169"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":false,"context_lines":[{"line_number":3831,"context_line":"    for (int i \u003d 0; i \u003c c-\u003ec1.link_sockets_num; i++)"},{"line_number":3832,"context_line":"    {"},{"line_number":3833,"context_line":"        int mode \u003d LS_MODE_DEFAULT;"},{"line_number":3834,"context_line":""},{"line_number":3835,"context_line":"        /* mode allows CM_CHILD_TCP"},{"line_number":3836,"context_line":"         * instances to inherit acceptable fds"},{"line_number":3837,"context_line":"         * from a top-level parent */"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"557e83eb_4b361d4d","side":"PARENT","line":3834,"in_reply_to":"e1ebc360_490d6327","updated":"2025-01-31 10:42:34.000000000","message":"Done","commit_id":"2459a691e16de8f2a5003139137a02aab9c1e169"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":true,"context_lines":[{"line_number":225,"context_line":"        if (streq(p[1], \"HTTP\"))"},{"line_number":226,"context_line":"        {"},{"line_number":227,"context_line":"            struct http_proxy_options *ho;"},{"line_number":228,"context_line":"            if (ce-\u003eproto !\u003d PROTO_TCP \u0026\u0026 c-\u003emode !\u003d CM_CHILD_TCP)"},{"line_number":229,"context_line":"            {"},{"line_number":230,"context_line":"                msg(M_WARN, \"HTTP proxy support only works for TCP based connections\");"},{"line_number":231,"context_line":"                return false;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"8b76c90d_17966fbf","line":228,"updated":"2025-01-24 21:50:41.000000000","message":"what\u0027s the reason for this change?  the conditions should be the same?","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        if (streq(p[1], \"HTTP\"))"},{"line_number":226,"context_line":"        {"},{"line_number":227,"context_line":"            struct http_proxy_options *ho;"},{"line_number":228,"context_line":"            if (ce-\u003eproto !\u003d PROTO_TCP \u0026\u0026 c-\u003emode !\u003d CM_CHILD_TCP)"},{"line_number":229,"context_line":"            {"},{"line_number":230,"context_line":"                msg(M_WARN, \"HTTP proxy support only works for TCP based connections\");"},{"line_number":231,"context_line":"                return false;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"e3883fac_7a141a70","line":228,"in_reply_to":"8b76c90d_17966fbf","updated":"2025-01-31 10:42:34.000000000","message":"Done","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":true,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        int proto \u003d c-\u003eoptions.ce.proto;"},{"line_number":615,"context_line":"        c-\u003eoptions.ce \u003d *ce;"},{"line_number":616,"context_line":"        c-\u003eoptions.ce.proto \u003d proto;"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"#ifdef ENABLE_MANAGEMENT"},{"line_number":619,"context_line":"        if (ce_defined \u0026\u0026 management \u0026\u0026 management_query_remote_enabled(management))"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"9a35e34d_80fa4240","line":616,"updated":"2025-01-24 21:50:41.000000000","message":"this does not look right.  So we advance to the next ce, but keep the proto?  Wouldn\u0027t that break\n\n```\n\u003cconnection\u003e\n  remote ... udp\n\u003cconnection\u003e\n  remote ... tcp\n```\n\nsetups?","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        int proto \u003d c-\u003eoptions.ce.proto;"},{"line_number":615,"context_line":"        c-\u003eoptions.ce \u003d *ce;"},{"line_number":616,"context_line":"        c-\u003eoptions.ce.proto \u003d proto;"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"#ifdef ENABLE_MANAGEMENT"},{"line_number":619,"context_line":"        if (ce_defined \u0026\u0026 management \u0026\u0026 management_query_remote_enabled(management))"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"098aad10_d6ea2c6c","line":616,"in_reply_to":"9a35e34d_80fa4240","updated":"2025-01-31 10:42:34.000000000","message":"Done","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":true,"context_lines":[{"line_number":2684,"context_line":""},{"line_number":2685,"context_line":"    if (found \u0026 OPT_P_EXPLICIT_NOTIFY)"},{"line_number":2686,"context_line":"    {"},{"line_number":2687,"context_line":"        if (!proto_is_udp(c-\u003ec2.link_sockets[0]-\u003einfo.proto) \u0026\u0026 c-\u003eoptions.ce.explicit_exit_notification)"},{"line_number":2688,"context_line":"        {"},{"line_number":2689,"context_line":"            msg(D_PUSH, \"OPTIONS IMPORT: --explicit-exit-notify can only be used with --proto udp\");"},{"line_number":2690,"context_line":"            c-\u003eoptions.ce.explicit_exit_notification \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"d8380160_cf33bdd0","line":2687,"updated":"2025-01-24 21:50:41.000000000","message":"this like is getting a bit long, so I think wrapping might be a good thing","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":false,"context_lines":[{"line_number":2684,"context_line":""},{"line_number":2685,"context_line":"    if (found \u0026 OPT_P_EXPLICIT_NOTIFY)"},{"line_number":2686,"context_line":"    {"},{"line_number":2687,"context_line":"        if (!proto_is_udp(c-\u003ec2.link_sockets[0]-\u003einfo.proto) \u0026\u0026 c-\u003eoptions.ce.explicit_exit_notification)"},{"line_number":2688,"context_line":"        {"},{"line_number":2689,"context_line":"            msg(D_PUSH, \"OPTIONS IMPORT: --explicit-exit-notify can only be used with --proto udp\");"},{"line_number":2690,"context_line":"            c-\u003eoptions.ce.explicit_exit_notification \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"d2412021_82123c38","line":2687,"in_reply_to":"d8380160_cf33bdd0","updated":"2025-01-31 10:42:34.000000000","message":"Done","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":true,"context_lines":[{"line_number":2843,"context_line":"    switch (c-\u003emode)"},{"line_number":2844,"context_line":"    {"},{"line_number":2845,"context_line":"        case CM_TOP:"},{"line_number":2846,"context_line":"            if (has_udp_in_local_list(\u0026c-\u003eoptions))"},{"line_number":2847,"context_line":"            {"},{"line_number":2848,"context_line":"                sec \u003d c-\u003eoptions.ce.connect_retry_seconds;"},{"line_number":2849,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"e84b95dc_73633f8a","line":2846,"updated":"2025-01-24 21:50:41.000000000","message":"this might be modelling the existing behaviour, but it\u0027s arguable whether the old behaviour was actually correct - a *server* should not do exponential backoff after a connection failure, no matter whether TCP or UDP.","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":2843,"context_line":"    switch (c-\u003emode)"},{"line_number":2844,"context_line":"    {"},{"line_number":2845,"context_line":"        case CM_TOP:"},{"line_number":2846,"context_line":"            if (has_udp_in_local_list(\u0026c-\u003eoptions))"},{"line_number":2847,"context_line":"            {"},{"line_number":2848,"context_line":"                sec \u003d c-\u003eoptions.ce.connect_retry_seconds;"},{"line_number":2849,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"bf3f0236_95dbba2c","line":2846,"in_reply_to":"a9230923_28af6cf8","updated":"2025-01-31 13:32:25.000000000","message":"Well, this is introducing new code, to model behaviour that was not intentional in the first place.  So I\u0027d go for simple code - on a server, no matter of UDP or TCP, delay 1 second, on a client, do exponential backoff.\n\nAlso, arguably, the code proposed isn\u0027t doing the right thing anyway - it\u0027s doing \"if there is *one* UDP socket, among many, do backoff (on UDP and TCP sockets), and if there are *only* TCP sockets, not\".","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":2843,"context_line":"    switch (c-\u003emode)"},{"line_number":2844,"context_line":"    {"},{"line_number":2845,"context_line":"        case CM_TOP:"},{"line_number":2846,"context_line":"            if (has_udp_in_local_list(\u0026c-\u003eoptions))"},{"line_number":2847,"context_line":"            {"},{"line_number":2848,"context_line":"                sec \u003d c-\u003eoptions.ce.connect_retry_seconds;"},{"line_number":2849,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"f536d12b_7a5c51e7","line":2846,"in_reply_to":"bf3f0236_95dbba2c","updated":"2025-02-14 17:45:31.000000000","message":"Done","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"27d67017a7687d061c42bdfed8d44ef1e819012e","unresolved":true,"context_lines":[{"line_number":2843,"context_line":"    switch (c-\u003emode)"},{"line_number":2844,"context_line":"    {"},{"line_number":2845,"context_line":"        case CM_TOP:"},{"line_number":2846,"context_line":"            if (has_udp_in_local_list(\u0026c-\u003eoptions))"},{"line_number":2847,"context_line":"            {"},{"line_number":2848,"context_line":"                sec \u003d c-\u003eoptions.ce.connect_retry_seconds;"},{"line_number":2849,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"a9230923_28af6cf8","line":2846,"in_reply_to":"e84b95dc_73633f8a","updated":"2025-01-29 15:06:44.000000000","message":"maybe something to create a ticket about and we fix it separately from this patchset?\nIt may alone lead to HUGECANOFWORMS².","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":true,"context_lines":[{"line_number":3366,"context_line":"    else"},{"line_number":3367,"context_line":"    {"},{"line_number":3368,"context_line":"        to.tcp_mode \u003d link_socket_proto_connection_oriented(c-\u003eoptions.ce.local_list-\u003earray[0]-\u003eproto);"},{"line_number":3369,"context_line":"    }"},{"line_number":3370,"context_line":"    to.config_ciphername \u003d c-\u003eoptions.ciphername;"},{"line_number":3371,"context_line":"    to.config_ncp_ciphers \u003d c-\u003eoptions.ncp_ciphers;"},{"line_number":3372,"context_line":"    to.transition_window \u003d options-\u003etransition_window;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"ff1ffcf7_a5d0582f","line":3369,"updated":"2025-01-24 21:50:41.000000000","message":"given that `link_socket_proto_connection_oriented()` (nowadays) is a very long form of `if (!proto_is_dgram())` I don\u0027t think it makes sense to have the code this way - get rid of the `if()`, loop always.\n\nThat said, grepping through the code, `to.tcp_mode` seems to be dead anyway - I see no user of it.  Get rid of it completely, then ;-)","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":false,"context_lines":[{"line_number":3366,"context_line":"    else"},{"line_number":3367,"context_line":"    {"},{"line_number":3368,"context_line":"        to.tcp_mode \u003d link_socket_proto_connection_oriented(c-\u003eoptions.ce.local_list-\u003earray[0]-\u003eproto);"},{"line_number":3369,"context_line":"    }"},{"line_number":3370,"context_line":"    to.config_ciphername \u003d c-\u003eoptions.ciphername;"},{"line_number":3371,"context_line":"    to.config_ncp_ciphers \u003d c-\u003eoptions.ncp_ciphers;"},{"line_number":3372,"context_line":"    to.transition_window \u003d options-\u003etransition_window;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"d9a8ec74_c1f662c7","line":3369,"in_reply_to":"ff1ffcf7_a5d0582f","updated":"2025-01-31 10:42:34.000000000","message":"Done","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":2682,"context_line":""},{"line_number":2683,"context_line":"    if (found \u0026 OPT_P_EXPLICIT_NOTIFY)"},{"line_number":2684,"context_line":"    {"},{"line_number":2685,"context_line":"        if (!proto_is_udp(c-\u003ec2.link_sockets[0]-\u003einfo.proto)"},{"line_number":2686,"context_line":"            \u0026\u0026 c-\u003eoptions.ce.explicit_exit_notification)"},{"line_number":2687,"context_line":"        {"},{"line_number":2688,"context_line":"            msg(D_PUSH, \"OPTIONS IMPORT: --explicit-exit-notify can only be used with --proto udp\");"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"286fdebf_e60bf789","line":2685,"updated":"2025-01-31 13:32:25.000000000","message":"maybe add a de-confusing comment like `/* client side \u003d only one link_socket */` or so... I was wondering, again, why there is no loop here...","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":2682,"context_line":""},{"line_number":2683,"context_line":"    if (found \u0026 OPT_P_EXPLICIT_NOTIFY)"},{"line_number":2684,"context_line":"    {"},{"line_number":2685,"context_line":"        if (!proto_is_udp(c-\u003ec2.link_sockets[0]-\u003einfo.proto)"},{"line_number":2686,"context_line":"            \u0026\u0026 c-\u003eoptions.ce.explicit_exit_notification)"},{"line_number":2687,"context_line":"        {"},{"line_number":2688,"context_line":"            msg(D_PUSH, \"OPTIONS IMPORT: --explicit-exit-notify can only be used with --proto udp\");"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"29430a8c_d3861afa","line":2685,"in_reply_to":"286fdebf_e60bf789","updated":"2025-02-14 17:45:31.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"}],"src/openvpn/mroute.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":true,"context_lines":[{"line_number":421,"context_line":"                {"},{"line_number":422,"context_line":"                    buf_printf(\u0026out, \":%d\", ntohs(maddr.v4.port));"},{"line_number":423,"context_line":"                }"},{"line_number":424,"context_line":"                buf_printf(\u0026out, \":%d\", maddr.proto);"},{"line_number":425,"context_line":"            }"},{"line_number":426,"context_line":"            break;"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":17,"id":"e768a558_8ea1565c","line":424,"updated":"2025-01-24 21:50:41.000000000","message":"we should not unconditionally add this `:%d`.  It might be useful, but when MR_WITH_PORT is not set, it very much looks like `:6` or `:17` being the remote port.\n\nIf we really want this, we should ascii-ize the proto and prepend (`tcp:1.2.3.4:1194`), no?","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                {"},{"line_number":422,"context_line":"                    buf_printf(\u0026out, \":%d\", ntohs(maddr.v4.port));"},{"line_number":423,"context_line":"                }"},{"line_number":424,"context_line":"                buf_printf(\u0026out, \":%d\", maddr.proto);"},{"line_number":425,"context_line":"            }"},{"line_number":426,"context_line":"            break;"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":17,"id":"8b5bd492_5d35e8a3","line":424,"in_reply_to":"e768a558_8ea1565c","updated":"2025-01-31 10:42:34.000000000","message":"Done","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"}],"src/openvpn/mtcp.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"144ce2d9ea4b1d3e24291481bfa597b128ef8288","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    struct hash *hash \u003d m-\u003ehash;"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    mi \u003d multi_create_instance(m, NULL, ls);"},{"line_number":57,"context_line":"    if (mi \u0026\u0026 !proto_is_dgram(ls-\u003einfo.proto))"},{"line_number":58,"context_line":"    {"},{"line_number":59,"context_line":"        mi-\u003ereal.proto \u003d ls-\u003einfo.proto;"},{"line_number":60,"context_line":"        struct hash_element *he;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"2164b42d_ffbff47e","line":57,"updated":"2025-01-24 21:20:48.000000000","message":"why would this be called for an UDP packet in the first place, that is, why is that check necessary?","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    struct hash *hash \u003d m-\u003ehash;"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    mi \u003d multi_create_instance(m, NULL, ls);"},{"line_number":57,"context_line":"    if (mi \u0026\u0026 !proto_is_dgram(ls-\u003einfo.proto))"},{"line_number":58,"context_line":"    {"},{"line_number":59,"context_line":"        mi-\u003ereal.proto \u003d ls-\u003einfo.proto;"},{"line_number":60,"context_line":"        struct hash_element *he;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"e4035612_308aec8e","line":57,"in_reply_to":"2164b42d_ffbff47e","updated":"2025-01-31 10:42:34.000000000","message":"that\u0027s a leftover from early development when still trying to untangle udp and tcp clients.","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    struct hash *hash \u003d m-\u003ehash;"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    mi \u003d multi_create_instance(m, NULL, ls);"},{"line_number":57,"context_line":"    if (mi \u0026\u0026 !proto_is_dgram(ls-\u003einfo.proto))"},{"line_number":58,"context_line":"    {"},{"line_number":59,"context_line":"        mi-\u003ereal.proto \u003d ls-\u003einfo.proto;"},{"line_number":60,"context_line":"        struct hash_element *he;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"ed3a23f0_5a81d266","line":57,"in_reply_to":"e4035612_308aec8e","updated":"2025-01-31 13:32:25.000000000","message":"Acknowledged","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"144ce2d9ea4b1d3e24291481bfa597b128ef8288","unresolved":true,"context_lines":[{"line_number":153,"context_line":"{"},{"line_number":154,"context_line":"    if (mi)"},{"line_number":155,"context_line":"    {"},{"line_number":156,"context_line":"        if (proto_is_dgram(mi-\u003econtext.c2.link_sockets[0]-\u003einfo.proto))"},{"line_number":157,"context_line":"        {"},{"line_number":158,"context_line":"            return;"},{"line_number":159,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"c70f7c01_8761d3d9","line":156,"updated":"2025-01-24 21:20:48.000000000","message":"same here: why is this check necessary?  Who calls a `_tcp_` function for UDP packets, and why?","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":false,"context_lines":[{"line_number":153,"context_line":"{"},{"line_number":154,"context_line":"    if (mi)"},{"line_number":155,"context_line":"    {"},{"line_number":156,"context_line":"        if (proto_is_dgram(mi-\u003econtext.c2.link_sockets[0]-\u003einfo.proto))"},{"line_number":157,"context_line":"        {"},{"line_number":158,"context_line":"            return;"},{"line_number":159,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"7810367d_c39b0d92","line":156,"in_reply_to":"74a66627_6f73d597","updated":"2025-01-31 13:32:25.000000000","message":"Acknowledged","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":true,"context_lines":[{"line_number":153,"context_line":"{"},{"line_number":154,"context_line":"    if (mi)"},{"line_number":155,"context_line":"    {"},{"line_number":156,"context_line":"        if (proto_is_dgram(mi-\u003econtext.c2.link_sockets[0]-\u003einfo.proto))"},{"line_number":157,"context_line":"        {"},{"line_number":158,"context_line":"            return;"},{"line_number":159,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"74a66627_6f73d597","line":156,"in_reply_to":"c70f7c01_8761d3d9","updated":"2025-01-31 10:42:34.000000000","message":"see answer above","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"}],"src/openvpn/mudp.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"91df5372ae900766974506a52aca986208e4adb0","unresolved":true,"context_lines":[{"line_number":328,"context_line":"}"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"/*"},{"line_number":331,"context_line":" * Return the io_wait() flags appropriate for"},{"line_number":332,"context_line":" * a point-to-multipoint tunnel."},{"line_number":333,"context_line":" */"},{"line_number":334,"context_line":"unsigned int"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"4b14a43b_444e9460","line":331,"updated":"2024-12-30 19:28:08.000000000","message":"any particular reason why this is moved up?","commit_id":"0851e4c348c39ccceb3dd2da56feb8b85465c95a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"656e2ba15e4570ed0532f5ec494d26dbd092f0d4","unresolved":false,"context_lines":[{"line_number":328,"context_line":"}"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"/*"},{"line_number":331,"context_line":" * Return the io_wait() flags appropriate for"},{"line_number":332,"context_line":" * a point-to-multipoint tunnel."},{"line_number":333,"context_line":" */"},{"line_number":334,"context_line":"unsigned int"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"28aa0c26_868ac69b","line":331,"in_reply_to":"4b14a43b_444e9460","updated":"2025-01-09 13:52:47.000000000","message":"just a leftover.","commit_id":"0851e4c348c39ccceb3dd2da56feb8b85465c95a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":332,"context_line":"void"},{"line_number":333,"context_line":"multi_process_io_udp(struct multi_context *m, struct link_socket *sock)"},{"line_number":334,"context_line":"{"},{"line_number":335,"context_line":"    const unsigned int status \u003d m-\u003emulti_io-\u003eudp_flags;"},{"line_number":336,"context_line":"    const unsigned int mpp_flags \u003d m-\u003etop.c2.fast_io"},{"line_number":337,"context_line":"                                   ? (MPP_CONDITIONAL_PRE_SELECT | MPP_CLOSE_ON_SIGNAL)"},{"line_number":338,"context_line":"                                   : (MPP_PRE_SELECT | MPP_CLOSE_ON_SIGNAL);"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"e0aa2662_4a802ef8","line":335,"updated":"2025-01-31 13:32:25.000000000","message":"I do wonder why a separate `udp_flags` field for UDP has been introduced.  Isn\u0027t this basically mimicking everything we do in `event_set_status` for TCP?  Where is the practical difference (except we have two mostly-identical functions that set udp_flags or event_set_status)?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bdff9339438af1bae84acae6f3aa85031e2a1527","unresolved":true,"context_lines":[{"line_number":332,"context_line":"void"},{"line_number":333,"context_line":"multi_process_io_udp(struct multi_context *m, struct link_socket *sock)"},{"line_number":334,"context_line":"{"},{"line_number":335,"context_line":"    const unsigned int status \u003d m-\u003emulti_io-\u003eudp_flags;"},{"line_number":336,"context_line":"    const unsigned int mpp_flags \u003d m-\u003etop.c2.fast_io"},{"line_number":337,"context_line":"                                   ? (MPP_CONDITIONAL_PRE_SELECT | MPP_CLOSE_ON_SIGNAL)"},{"line_number":338,"context_line":"                                   : (MPP_PRE_SELECT | MPP_CLOSE_ON_SIGNAL);"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"a19e31fc_278f6bab","line":335,"in_reply_to":"e0aa2662_4a802ef8","updated":"2025-03-05 16:59:21.000000000","message":"As said in a comment above, the multi_io has no event_set_status member and since UDP require that I decided to call it udp_flags since it is UDP specific.","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"}],"src/openvpn/multi.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":606,"context_line":""},{"line_number":607,"context_line":"    ASSERT(!mi-\u003ehalt);"},{"line_number":608,"context_line":"    mi-\u003ehalt \u003d true;"},{"line_number":609,"context_line":"    bool is_dgram \u003d proto_is_dgram(mi-\u003econtext.c2.link_sockets[0]-\u003einfo.proto);"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    dmsg(D_MULTI_DEBUG, \"MULTI: multi_close_instance called\");"},{"line_number":612,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":18,"id":"c2b835ed_a70ba824","line":609,"updated":"2025-01-31 13:32:25.000000000","message":"Is this for a (single-socket) client instance?  Again we have a confused reader wondering why we only look at `link_sockets[0]`... ;-)","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ec62200f6da3753b9422a515f35c79bbab0ea946","unresolved":false,"context_lines":[{"line_number":606,"context_line":""},{"line_number":607,"context_line":"    ASSERT(!mi-\u003ehalt);"},{"line_number":608,"context_line":"    mi-\u003ehalt \u003d true;"},{"line_number":609,"context_line":"    bool is_dgram \u003d proto_is_dgram(mi-\u003econtext.c2.link_sockets[0]-\u003einfo.proto);"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    dmsg(D_MULTI_DEBUG, \"MULTI: multi_close_instance called\");"},{"line_number":612,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":18,"id":"002a17a2_4cb6329f","line":609,"in_reply_to":"6aa7274d_985a29c2","updated":"2025-02-18 17:35:06.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":true,"context_lines":[{"line_number":606,"context_line":""},{"line_number":607,"context_line":"    ASSERT(!mi-\u003ehalt);"},{"line_number":608,"context_line":"    mi-\u003ehalt \u003d true;"},{"line_number":609,"context_line":"    bool is_dgram \u003d proto_is_dgram(mi-\u003econtext.c2.link_sockets[0]-\u003einfo.proto);"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    dmsg(D_MULTI_DEBUG, \"MULTI: multi_close_instance called\");"},{"line_number":612,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":18,"id":"6aa7274d_985a29c2","line":609,"in_reply_to":"c2b835ed_a70ba824","updated":"2025-02-14 17:45:31.000000000","message":"It is, the \u0027mi\u0027 tells you that this is a client-instance context.","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":3838,"context_line":"    while ((he \u003d hash_iterator_next(\u0026hi)))"},{"line_number":3839,"context_line":"    {"},{"line_number":3840,"context_line":"        struct multi_instance *mi \u003d (struct multi_instance *) he-\u003evalue;"},{"line_number":3841,"context_line":"        if (!mi-\u003ehalt \u0026\u0026 proto_is_dgram(mi-\u003econtext.options.ce.proto))"},{"line_number":3842,"context_line":"        {"},{"line_number":3843,"context_line":"            send_control_channel_string(\u0026mi-\u003econtext, next_server ? \"RESTART,[N]\" : \"RESTART\", D_PUSH);"},{"line_number":3844,"context_line":"            multi_schedule_context_wakeup(m, mi);"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"35e37e61_90cb74af","line":3841,"updated":"2025-01-31 13:32:25.000000000","message":"why is this using `mi-\u003econtext.options.ce.proto`?  The rest of the code seems to have moved all the checks toward something `ls-\u003eproto` - is this not available here?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":3838,"context_line":"    while ((he \u003d hash_iterator_next(\u0026hi)))"},{"line_number":3839,"context_line":"    {"},{"line_number":3840,"context_line":"        struct multi_instance *mi \u003d (struct multi_instance *) he-\u003evalue;"},{"line_number":3841,"context_line":"        if (!mi-\u003ehalt \u0026\u0026 proto_is_dgram(mi-\u003econtext.options.ce.proto))"},{"line_number":3842,"context_line":"        {"},{"line_number":3843,"context_line":"            send_control_channel_string(\u0026mi-\u003econtext, next_server ? \"RESTART,[N]\" : \"RESTART\", D_PUSH);"},{"line_number":3844,"context_line":"            multi_schedule_context_wakeup(m, mi);"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"61d7a697_54c1c90d","line":3841,"in_reply_to":"35e37e61_90cb74af","updated":"2025-02-14 17:45:31.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":3876,"context_line":"        status_close(so);"},{"line_number":3877,"context_line":"        return false;"},{"line_number":3878,"context_line":"    }"},{"line_number":3879,"context_line":"    else if (has_udp_in_local_list(\u0026m-\u003etop.options))"},{"line_number":3880,"context_line":"    {"},{"line_number":3881,"context_line":"        if (is_exit_restart(m-\u003etop.sig-\u003esignal_received)"},{"line_number":3882,"context_line":"            \u0026\u0026 (m-\u003edeferred_shutdown_signal.signal_received \u003d\u003d 0)"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"9539d5ff_a442fabf","line":3879,"updated":"2025-01-31 13:32:25.000000000","message":"why are you splitting this condition into two nested `if()`?  I can see changing `proto_is_dgram()` to `has_udp_...()` but it could just be part of the same `if (...\u0026...\u0026...)` block.  no?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":3876,"context_line":"        status_close(so);"},{"line_number":3877,"context_line":"        return false;"},{"line_number":3878,"context_line":"    }"},{"line_number":3879,"context_line":"    else if (has_udp_in_local_list(\u0026m-\u003etop.options))"},{"line_number":3880,"context_line":"    {"},{"line_number":3881,"context_line":"        if (is_exit_restart(m-\u003etop.sig-\u003esignal_received)"},{"line_number":3882,"context_line":"            \u0026\u0026 (m-\u003edeferred_shutdown_signal.signal_received \u003d\u003d 0)"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"02b15a25_8acde395","line":3879,"in_reply_to":"9539d5ff_a442fabf","updated":"2025-02-14 17:45:31.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":4161,"context_line":""},{"line_number":4162,"context_line":"/**************************************************************************/"},{"line_number":4163,"context_line":"/**"},{"line_number":4164,"context_line":" * Main event loop for OpenVPN in multi-protocol server mode."},{"line_number":4165,"context_line":" * @ingroup eventloop"},{"line_number":4166,"context_line":" *"},{"line_number":4167,"context_line":" * @param top - Top-level context structure."}],"source_content_type":"text/x-csrc","patch_set":18,"id":"82416e50_ccc42bb0","line":4164,"updated":"2025-01-31 13:32:25.000000000","message":"I\u0027d remove the \"multi-protocol\" part (protocols, again) - maybe name this `point-to-multipoint server mode` instead, so it\u0027s clear \"this is the --server functionality\".","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":4161,"context_line":""},{"line_number":4162,"context_line":"/**************************************************************************/"},{"line_number":4163,"context_line":"/**"},{"line_number":4164,"context_line":" * Main event loop for OpenVPN in multi-protocol server mode."},{"line_number":4165,"context_line":" * @ingroup eventloop"},{"line_number":4166,"context_line":" *"},{"line_number":4167,"context_line":" * @param top - Top-level context structure."}],"source_content_type":"text/x-csrc","patch_set":18,"id":"0f048603_319d08a4","line":4164,"in_reply_to":"82416e50_ccc42bb0","updated":"2025-02-14 17:45:31.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":4166,"context_line":" *"},{"line_number":4167,"context_line":" * @param top - Top-level context structure."},{"line_number":4168,"context_line":" */"},{"line_number":4169,"context_line":"void"},{"line_number":4170,"context_line":"tunnel_server_loop(struct multi_context *multi)"},{"line_number":4171,"context_line":"{"},{"line_number":4172,"context_line":"    int status;"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"0808d8b9_ee6cdc19","line":4169,"updated":"2025-01-31 13:32:25.000000000","message":"static?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":4166,"context_line":" *"},{"line_number":4167,"context_line":" * @param top - Top-level context structure."},{"line_number":4168,"context_line":" */"},{"line_number":4169,"context_line":"void"},{"line_number":4170,"context_line":"tunnel_server_loop(struct multi_context *multi)"},{"line_number":4171,"context_line":"{"},{"line_number":4172,"context_line":"    int status;"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"20464f08_18d9e039","line":4169,"in_reply_to":"0808d8b9_ee6cdc19","updated":"2025-02-14 17:45:31.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":4262,"context_line":""},{"line_number":4263,"context_line":"    tunnel_server_init(top);"},{"line_number":4264,"context_line":""},{"line_number":4265,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"9c492ef1_466fc2d6","line":4265,"updated":"2025-01-31 13:32:25.000000000","message":"I don\u0027t like this construct - now `tunnel_server_init()` is doing all the work (init, call loop, uninit).\n\nI suggest to remove `tunnel_server_init()` and have all its functionality in `tunnel_server()`.\n\nHaving the inner loop in `tunnel_server_loop()` is fine for me.","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":4262,"context_line":""},{"line_number":4263,"context_line":"    tunnel_server_init(top);"},{"line_number":4264,"context_line":""},{"line_number":4265,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"d0311291_8207b195","line":4265,"in_reply_to":"9c492ef1_466fc2d6","updated":"2025-02-14 17:45:31.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"}],"src/openvpn/multi.h":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":667,"context_line":"        return false;"},{"line_number":668,"context_line":"    }"},{"line_number":669,"context_line":"    bool ret \u003d true;"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"#ifdef MULTI_DEBUG_EVENT_LOOP"},{"line_number":672,"context_line":"    printf(\"%s -\u003e TUN len\u003d%d\\n\","},{"line_number":673,"context_line":"           id(mi),"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"b5407429_3ff1a65d","line":670,"updated":"2025-01-31 13:32:25.000000000","message":"how can this ever be called without valid `mi`?  Shouldn\u0027t this be flagged as a hard error, like keeping the `ASSERT(mi)`?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":667,"context_line":"        return false;"},{"line_number":668,"context_line":"    }"},{"line_number":669,"context_line":"    bool ret \u003d true;"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"#ifdef MULTI_DEBUG_EVENT_LOOP"},{"line_number":672,"context_line":"    printf(\"%s -\u003e TUN len\u003d%d\\n\","},{"line_number":673,"context_line":"           id(mi),"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"cad1ca81_6565d700","line":670,"in_reply_to":"b5407429_3ff1a65d","updated":"2025-02-14 17:45:31.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ec62200f6da3753b9422a515f35c79bbab0ea946","unresolved":true,"context_lines":[{"line_number":253,"context_line":" * @ingroup eventloop"},{"line_number":254,"context_line":" *"},{"line_number":255,"context_line":" * This function calls the main event loop function"},{"line_number":256,"context_line":" * on the transport protocols:"},{"line_number":257,"context_line":" *"},{"line_number":258,"context_line":" * @param top          - Top-level context structure."},{"line_number":259,"context_line":" */"}],"source_content_type":"text/x-csrc","patch_set":19,"id":"acd4850a_3fd5d5d9","line":256,"updated":"2025-02-18 17:35:06.000000000","message":"The wording is a bit odd... since we do no longer need to point out that this calls \"tcp and udp!!\" I\u0027d just make this\n\n```\n * Main event loop for OpenVPN in server mode\n```\n\n(yes it will call `tunnel_server_loop()` but that\u0027s not really relevant here, is it?)","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bdff9339438af1bae84acae6f3aa85031e2a1527","unresolved":false,"context_lines":[{"line_number":253,"context_line":" * @ingroup eventloop"},{"line_number":254,"context_line":" *"},{"line_number":255,"context_line":" * This function calls the main event loop function"},{"line_number":256,"context_line":" * on the transport protocols:"},{"line_number":257,"context_line":" *"},{"line_number":258,"context_line":" * @param top          - Top-level context structure."},{"line_number":259,"context_line":" */"}],"source_content_type":"text/x-csrc","patch_set":19,"id":"9b01bf4b_df045866","line":256,"in_reply_to":"acd4850a_3fd5d5d9","updated":"2025-03-05 16:59:21.000000000","message":"Done","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"}],"src/openvpn/multi_io.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ec62200f6da3753b9422a515f35c79bbab0ea946","unresolved":true,"context_lines":[{"line_number":142,"context_line":"                   m-\u003emulti_io-\u003ees,"},{"line_number":143,"context_line":"                   mbuf_defined(mi-\u003etcp_link_out_deferred) ? EVENT_WRITE : EVENT_READ,"},{"line_number":144,"context_line":"                   !proto_is_dgram(mi-\u003econtext.c2.link_sockets[0]-\u003einfo.proto) ? \u0026mi-\u003eev_arg : \u0026mi-\u003econtext.c2.link_sockets[0]-\u003eev_arg,"},{"line_number":145,"context_line":"                   !proto_is_dgram(mi-\u003econtext.c2.link_sockets[0]-\u003einfo.proto) ? \u0026mi-\u003etcp_rwflags : NULL);"},{"line_number":146,"context_line":"    }"},{"line_number":147,"context_line":"}"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":19,"id":"4c1453d0_3cacda0f","line":145,"updated":"2025-02-18 17:35:06.000000000","message":"I like that this is being moved to a dedicated function :-) - I would style it differently, though, not \"one fat function call with two conditionals in it\".\n\nMaybe start with `if (!mi) { return; }` (early return, save indent space) and then have a surrounding `if(proto_is_dgram) { ...}` with one `socket_set()` call in each branch?\n\n... also, why are we not storing `ev_arg` in the `\u0026mi` for both cases?","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bdff9339438af1bae84acae6f3aa85031e2a1527","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                   m-\u003emulti_io-\u003ees,"},{"line_number":143,"context_line":"                   mbuf_defined(mi-\u003etcp_link_out_deferred) ? EVENT_WRITE : EVENT_READ,"},{"line_number":144,"context_line":"                   !proto_is_dgram(mi-\u003econtext.c2.link_sockets[0]-\u003einfo.proto) ? \u0026mi-\u003eev_arg : \u0026mi-\u003econtext.c2.link_sockets[0]-\u003eev_arg,"},{"line_number":145,"context_line":"                   !proto_is_dgram(mi-\u003econtext.c2.link_sockets[0]-\u003einfo.proto) ? \u0026mi-\u003etcp_rwflags : NULL);"},{"line_number":146,"context_line":"    }"},{"line_number":147,"context_line":"}"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":19,"id":"8d2cfb2d_b69e0502","line":145,"in_reply_to":"4c1453d0_3cacda0f","updated":"2025-03-05 16:59:21.000000000","message":"TCP ev_arg are usually of type \u0027mi\u0027 while UDP are of type \u0027link_sockets\u0027.","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ec62200f6da3753b9422a515f35c79bbab0ea946","unresolved":true,"context_lines":[{"line_number":488,"context_line":"                        if (mi)"},{"line_number":489,"context_line":"                        {"},{"line_number":490,"context_line":"                            multi_io_action(m, mi, TA_INITIAL, false);"},{"line_number":491,"context_line":"                        }"},{"line_number":492,"context_line":"                        break;"},{"line_number":493,"context_line":"                    }"},{"line_number":494,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":19,"id":"5d6f18e7_d50503ba","line":491,"updated":"2025-02-18 17:35:06.000000000","message":"since this is the same `if (mi)` now, it could go outside one level, avoid code duplication...  and make the comment \"protocol invariant\" (`/* monitor and/or handle events that are triggered...` without mentioning `TCP`)","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bdff9339438af1bae84acae6f3aa85031e2a1527","unresolved":false,"context_lines":[{"line_number":488,"context_line":"                        if (mi)"},{"line_number":489,"context_line":"                        {"},{"line_number":490,"context_line":"                            multi_io_action(m, mi, TA_INITIAL, false);"},{"line_number":491,"context_line":"                        }"},{"line_number":492,"context_line":"                        break;"},{"line_number":493,"context_line":"                    }"},{"line_number":494,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":19,"id":"37cd169e_1703017b","line":491,"in_reply_to":"5d6f18e7_d50503ba","updated":"2025-03-05 16:59:21.000000000","message":"Done","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"}],"src/openvpn/openvpn.h":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ec62200f6da3753b9422a515f35c79bbab0ea946","unresolved":true,"context_lines":[{"line_number":216,"context_line":" * \\c SIGUSR1 restarts."},{"line_number":217,"context_line":" *"},{"line_number":218,"context_line":" * This structure is initialized at the top of the \\c"},{"line_number":219,"context_line":" * tunnel_point_to_point(), \\c tunnel_server() \\c"},{"line_number":220,"context_line":" * functions.  In other words, it is reset for every"},{"line_number":221,"context_line":" * iteration of the \\c main() function\u0027s inner \\c SIGUSR1 loop."},{"line_number":222,"context_line":" */"}],"source_content_type":"text/x-csrc","patch_set":19,"id":"ce61719a_f2258f18","line":219,"updated":"2025-02-18 17:35:06.000000000","message":"an `and` is missing before `tunnel_server()`  (since it\u0027s only these 2 functions now)","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bdff9339438af1bae84acae6f3aa85031e2a1527","unresolved":false,"context_lines":[{"line_number":216,"context_line":" * \\c SIGUSR1 restarts."},{"line_number":217,"context_line":" *"},{"line_number":218,"context_line":" * This structure is initialized at the top of the \\c"},{"line_number":219,"context_line":" * tunnel_point_to_point(), \\c tunnel_server() \\c"},{"line_number":220,"context_line":" * functions.  In other words, it is reset for every"},{"line_number":221,"context_line":" * iteration of the \\c main() function\u0027s inner \\c SIGUSR1 loop."},{"line_number":222,"context_line":" */"}],"source_content_type":"text/x-csrc","patch_set":19,"id":"1ddc2f85_7dceb3e5","line":219,"in_reply_to":"ce61719a_f2258f18","updated":"2025-03-05 16:59:21.000000000","message":"Done","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"}],"src/openvpn/options.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"91df5372ae900766974506a52aca986208e4adb0","unresolved":true,"context_lines":[{"line_number":997,"context_line":"                        const struct connection_entry *e,"},{"line_number":998,"context_line":"                        const int i)"},{"line_number":999,"context_line":"{"},{"line_number":1000,"context_line":"    for (int j \u003d 0; j \u003c e-\u003elocal_list-\u003elen; j++)"},{"line_number":1001,"context_line":"    {"},{"line_number":1002,"context_line":"        setenv_str_i(es, \"proto\", proto2ascii(e-\u003elocal_list-\u003earray[j]-\u003eproto, e-\u003eaf, false), i);"},{"line_number":1003,"context_line":"        /* expected to be for single socket contexts only */"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"daecd6cc_2a7c62a8","line":1000,"updated":"2024-12-30 19:28:08.000000000","message":"not sure how useful that change is - we basically set the same environment variable `len` times, every time overwriting the previous one.","commit_id":"0851e4c348c39ccceb3dd2da56feb8b85465c95a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":false,"context_lines":[{"line_number":997,"context_line":"                        const struct connection_entry *e,"},{"line_number":998,"context_line":"                        const int i)"},{"line_number":999,"context_line":"{"},{"line_number":1000,"context_line":"    for (int j \u003d 0; j \u003c e-\u003elocal_list-\u003elen; j++)"},{"line_number":1001,"context_line":"    {"},{"line_number":1002,"context_line":"        setenv_str_i(es, \"proto\", proto2ascii(e-\u003elocal_list-\u003earray[j]-\u003eproto, e-\u003eaf, false), i);"},{"line_number":1003,"context_line":"        /* expected to be for single socket contexts only */"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"3fed854f_635a4c70","line":1000,"in_reply_to":"3d99bd65_c221426a","updated":"2025-01-31 13:32:25.000000000","message":"Acknowledged","commit_id":"0851e4c348c39ccceb3dd2da56feb8b85465c95a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"656e2ba15e4570ed0532f5ec494d26dbd092f0d4","unresolved":true,"context_lines":[{"line_number":997,"context_line":"                        const struct connection_entry *e,"},{"line_number":998,"context_line":"                        const int i)"},{"line_number":999,"context_line":"{"},{"line_number":1000,"context_line":"    for (int j \u003d 0; j \u003c e-\u003elocal_list-\u003elen; j++)"},{"line_number":1001,"context_line":"    {"},{"line_number":1002,"context_line":"        setenv_str_i(es, \"proto\", proto2ascii(e-\u003elocal_list-\u003earray[j]-\u003eproto, e-\u003eaf, false), i);"},{"line_number":1003,"context_line":"        /* expected to be for single socket contexts only */"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"3d99bd65_c221426a","line":1000,"in_reply_to":"daecd6cc_2a7c62a8","updated":"2025-01-09 13:52:47.000000000","message":"made another function to do this specifically for every local_entry, let me know if this is legal.","commit_id":"0851e4c348c39ccceb3dd2da56feb8b85465c95a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"91df5372ae900766974506a52aca986208e4adb0","unresolved":true,"context_lines":[{"line_number":3830,"context_line":"        options_postprocess_mutate_ce(o, o-\u003econnection_list-\u003earray[i]);"},{"line_number":3831,"context_line":"    }"},{"line_number":3832,"context_line":""},{"line_number":3833,"context_line":"    if (!has_udp_in_local_list(o))"},{"line_number":3834,"context_line":"    {"},{"line_number":3835,"context_line":"        o-\u003efast_io \u003d false;"},{"line_number":3836,"context_line":"        msg(M_INFO, \"NOTE: --fast-io is disabled while using multi-socket\");"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"62ecf583_fdc89a37","line":3833,"updated":"2024-12-30 19:28:08.000000000","message":"That\u0027s not really the right check - or the function is named badly.  The check needs to be `if (has_tcp_...)` or `if (!has_only_udp_...)`, no?","commit_id":"0851e4c348c39ccceb3dd2da56feb8b85465c95a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"656e2ba15e4570ed0532f5ec494d26dbd092f0d4","unresolved":true,"context_lines":[{"line_number":3830,"context_line":"        options_postprocess_mutate_ce(o, o-\u003econnection_list-\u003earray[i]);"},{"line_number":3831,"context_line":"    }"},{"line_number":3832,"context_line":""},{"line_number":3833,"context_line":"    if (!has_udp_in_local_list(o))"},{"line_number":3834,"context_line":"    {"},{"line_number":3835,"context_line":"        o-\u003efast_io \u003d false;"},{"line_number":3836,"context_line":"        msg(M_INFO, \"NOTE: --fast-io is disabled while using multi-socket\");"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"9afa3ab7_df013376","line":3833,"in_reply_to":"62ecf583_fdc89a37","updated":"2025-01-09 13:52:47.000000000","message":"made another function has_tcp_in_local_list(), might be useful in some cases, also I moved this check little bit down to when we have at least one local_entry, again, let me know if this is legal","commit_id":"0851e4c348c39ccceb3dd2da56feb8b85465c95a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":false,"context_lines":[{"line_number":3830,"context_line":"        options_postprocess_mutate_ce(o, o-\u003econnection_list-\u003earray[i]);"},{"line_number":3831,"context_line":"    }"},{"line_number":3832,"context_line":""},{"line_number":3833,"context_line":"    if (!has_udp_in_local_list(o))"},{"line_number":3834,"context_line":"    {"},{"line_number":3835,"context_line":"        o-\u003efast_io \u003d false;"},{"line_number":3836,"context_line":"        msg(M_INFO, \"NOTE: --fast-io is disabled while using multi-socket\");"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"bed3e7ba_f462f4f9","line":3833,"in_reply_to":"9afa3ab7_df013376","updated":"2025-01-31 13:32:25.000000000","message":"Acknowledged","commit_id":"0851e4c348c39ccceb3dd2da56feb8b85465c95a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":true,"context_lines":[{"line_number":1049,"context_line":"    {"},{"line_number":1050,"context_line":"        for (int i \u003d 0; i \u003c o-\u003ece.local_list-\u003elen; i++)"},{"line_number":1051,"context_line":"        {"},{"line_number":1052,"context_line":"            setenv_local_entry(es, o-\u003ece.local_list-\u003earray[i], i+1);"},{"line_number":1053,"context_line":"        }"},{"line_number":1054,"context_line":"    }"},{"line_number":1055,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":17,"id":"cf0b5a07_5892252f","line":1052,"updated":"2025-01-24 21:50:41.000000000","message":"you have an i+1 here, and another i+1 inside `setenv_local_entry()`... what is it that you want to achieve here?","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":true,"context_lines":[{"line_number":1049,"context_line":"    {"},{"line_number":1050,"context_line":"        for (int i \u003d 0; i \u003c o-\u003ece.local_list-\u003elen; i++)"},{"line_number":1051,"context_line":"        {"},{"line_number":1052,"context_line":"            setenv_local_entry(es, o-\u003ece.local_list-\u003earray[i], i+1);"},{"line_number":1053,"context_line":"        }"},{"line_number":1054,"context_line":"    }"},{"line_number":1055,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":17,"id":"f9770527_5f1c061a","line":1052,"in_reply_to":"cf0b5a07_5892252f","updated":"2025-01-31 10:42:34.000000000","message":"i\u0027m not sure either","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"    {"},{"line_number":1050,"context_line":"        for (int i \u003d 0; i \u003c o-\u003ece.local_list-\u003elen; i++)"},{"line_number":1051,"context_line":"        {"},{"line_number":1052,"context_line":"            setenv_local_entry(es, o-\u003ece.local_list-\u003earray[i], i+1);"},{"line_number":1053,"context_line":"        }"},{"line_number":1054,"context_line":"    }"},{"line_number":1055,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":17,"id":"b093c46d_db331cc3","line":1052,"in_reply_to":"f9770527_5f1c061a","updated":"2025-01-31 13:32:25.000000000","message":"so only one \"i+1\" left - that means local_list entries are numbered 0...(n-1) and the env variables are numbered 1...n - which makes sense.","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":true,"context_lines":[{"line_number":3189,"context_line":"        if (ce-\u003eproto \u003d\u003d PROTO_TCP)"},{"line_number":3190,"context_line":"        {"},{"line_number":3191,"context_line":"            ce-\u003eproto \u003d PROTO_TCP_SERVER;"},{"line_number":3192,"context_line":"            o-\u003ece.proto \u003d ce-\u003eproto;"},{"line_number":3193,"context_line":"        }"},{"line_number":3194,"context_line":"        if (ce-\u003elocal_list)"},{"line_number":3195,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"2b3f667b_e3b3e51c","line":3192,"updated":"2025-01-24 21:50:41.000000000","message":"what is `o-\u003ece.proto`?","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":true,"context_lines":[{"line_number":3189,"context_line":"        if (ce-\u003eproto \u003d\u003d PROTO_TCP)"},{"line_number":3190,"context_line":"        {"},{"line_number":3191,"context_line":"            ce-\u003eproto \u003d PROTO_TCP_SERVER;"},{"line_number":3192,"context_line":"            o-\u003ece.proto \u003d ce-\u003eproto;"},{"line_number":3193,"context_line":"        }"},{"line_number":3194,"context_line":"        if (ce-\u003elocal_list)"},{"line_number":3195,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"bb8e11ad_17fcd75d","line":3192,"in_reply_to":"2b3f667b_e3b3e51c","updated":"2025-01-31 10:42:34.000000000","message":"o-\u003ece differs from let\u0027s say o-\u003econnection_list-\u003earray[0] but this is not a big deal on server side while it can be dangerous on client side so a copy won\u0027t hurt.","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":true,"context_lines":[{"line_number":3195,"context_line":"        {"},{"line_number":3196,"context_line":"            for (int i \u003d 0; i \u003c ce-\u003elocal_list-\u003elen; i++)"},{"line_number":3197,"context_line":"            {"},{"line_number":3198,"context_line":"                if (ce-\u003elocal_list-\u003earray[i]-\u003eproto \u003d\u003d PROTO_TCP)"},{"line_number":3199,"context_line":"                {"},{"line_number":3200,"context_line":"                    ce-\u003elocal_list-\u003earray[i]-\u003eproto \u003d PROTO_TCP_SERVER;"},{"line_number":3201,"context_line":"                }"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"1bf199d4_7737bca5","line":3198,"updated":"2025-01-24 21:50:41.000000000","message":"So we walk the list here, for the `--server` case, and then walk it again in `option_postprocess_mutate()` for all cases, correct?  So we could just store the desired proto (TCP_SERVER etc) in `o-\u003ece.proto` here and leave the walking the list to `option_postprocess_mutate()`?","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":false,"context_lines":[{"line_number":3195,"context_line":"        {"},{"line_number":3196,"context_line":"            for (int i \u003d 0; i \u003c ce-\u003elocal_list-\u003elen; i++)"},{"line_number":3197,"context_line":"            {"},{"line_number":3198,"context_line":"                if (ce-\u003elocal_list-\u003earray[i]-\u003eproto \u003d\u003d PROTO_TCP)"},{"line_number":3199,"context_line":"                {"},{"line_number":3200,"context_line":"                    ce-\u003elocal_list-\u003earray[i]-\u003eproto \u003d PROTO_TCP_SERVER;"},{"line_number":3201,"context_line":"                }"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"efef2d42_e743e796","line":3198,"in_reply_to":"1bf199d4_7737bca5","updated":"2025-01-31 10:42:34.000000000","message":"Done","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf0012b2a98623731c5540113a1099b67b180c78","unresolved":true,"context_lines":[{"line_number":3835,"context_line":"    if (has_tcp_in_local_list(o))"},{"line_number":3836,"context_line":"    {"},{"line_number":3837,"context_line":"        o-\u003efast_io \u003d false;"},{"line_number":3838,"context_line":"        msg(M_INFO, \"NOTE: --fast-io is disabled while using multi-socket\");"},{"line_number":3839,"context_line":"    }"},{"line_number":3840,"context_line":""},{"line_number":3841,"context_line":"    if (o-\u003etls_server)"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"4ee90666_8e61c48d","line":3838,"updated":"2025-01-24 21:50:41.000000000","message":"that comment needs to be something like `--fast-ip is disabled if there is a TCP socket active` or so (\"using multi-socket\" with multiple UDP sockets won\u0027t be a problem)","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78a844f57661bde7ff53af5b8a243fc7e5804c6c","unresolved":false,"context_lines":[{"line_number":3835,"context_line":"    if (has_tcp_in_local_list(o))"},{"line_number":3836,"context_line":"    {"},{"line_number":3837,"context_line":"        o-\u003efast_io \u003d false;"},{"line_number":3838,"context_line":"        msg(M_INFO, \"NOTE: --fast-io is disabled while using multi-socket\");"},{"line_number":3839,"context_line":"    }"},{"line_number":3840,"context_line":""},{"line_number":3841,"context_line":"    if (o-\u003etls_server)"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"809120a8_8e4a8ed5","line":3838,"in_reply_to":"4ee90666_8e61c48d","updated":"2025-01-31 10:42:34.000000000","message":"Done","commit_id":"12caeb2e3341fb4a8dd38cb8c90ff67e228e544b"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":3348,"context_line":"    {"},{"line_number":3349,"context_line":"        le-\u003eport \u003d ce-\u003elocal_port;"},{"line_number":3350,"context_line":"    }"},{"line_number":3351,"context_line":"    if (!le-\u003eproto)"},{"line_number":3352,"context_line":"    {"},{"line_number":3353,"context_line":"        le-\u003eproto \u003d ce-\u003eproto;"},{"line_number":3354,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"231e4ca1_8cdb4f3f","line":3351,"updated":"2025-01-31 13:32:25.000000000","message":"we have a comment for setting \"port\" and none for \"proto\".  Do we want one?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":3348,"context_line":"    {"},{"line_number":3349,"context_line":"        le-\u003eport \u003d ce-\u003elocal_port;"},{"line_number":3350,"context_line":"    }"},{"line_number":3351,"context_line":"    if (!le-\u003eproto)"},{"line_number":3352,"context_line":"    {"},{"line_number":3353,"context_line":"        le-\u003eproto \u003d ce-\u003eproto;"},{"line_number":3354,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"cef8e785_9aa6185f","line":3351,"in_reply_to":"231e4ca1_8cdb4f3f","updated":"2025-02-14 17:45:31.000000000","message":"Acknowledged","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bdff9339438af1bae84acae6f3aa85031e2a1527","unresolved":false,"context_lines":[{"line_number":3348,"context_line":"    {"},{"line_number":3349,"context_line":"        le-\u003eport \u003d ce-\u003elocal_port;"},{"line_number":3350,"context_line":"    }"},{"line_number":3351,"context_line":"    if (!le-\u003eproto)"},{"line_number":3352,"context_line":"    {"},{"line_number":3353,"context_line":"        le-\u003eproto \u003d ce-\u003eproto;"},{"line_number":3354,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"1e2cfd64_b9b578a8","line":3351,"in_reply_to":"3dbf2e3f_8940878c","updated":"2025-03-05 16:59:21.000000000","message":"I\u0027ve also added a check to avoid proto bindings on client side","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ec62200f6da3753b9422a515f35c79bbab0ea946","unresolved":true,"context_lines":[{"line_number":3348,"context_line":"    {"},{"line_number":3349,"context_line":"        le-\u003eport \u003d ce-\u003elocal_port;"},{"line_number":3350,"context_line":"    }"},{"line_number":3351,"context_line":"    if (!le-\u003eproto)"},{"line_number":3352,"context_line":"    {"},{"line_number":3353,"context_line":"        le-\u003eproto \u003d ce-\u003eproto;"},{"line_number":3354,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"3dbf2e3f_8940878c","line":3351,"in_reply_to":"cef8e785_9aa6185f","updated":"2025-02-18 17:35:06.000000000","message":"it says `acknowledged` but we still have no comment for `proto`? ;-)","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":3813,"context_line":"            {"},{"line_number":3814,"context_line":"                o-\u003ece.local_list-\u003earray[i]-\u003eproto \u003d o-\u003ece.proto;"},{"line_number":3815,"context_line":"            }"},{"line_number":3816,"context_line":"        }"},{"line_number":3817,"context_line":"    }"},{"line_number":3818,"context_line":"    else"},{"line_number":3819,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"ffe64598_39b97862","line":3816,"updated":"2025-01-31 13:32:25.000000000","message":"this extra loop looks like it really wants to be part of `options_postprocess_mutate_le()`, no?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":3813,"context_line":"            {"},{"line_number":3814,"context_line":"                o-\u003ece.local_list-\u003earray[i]-\u003eproto \u003d o-\u003ece.proto;"},{"line_number":3815,"context_line":"            }"},{"line_number":3816,"context_line":"        }"},{"line_number":3817,"context_line":"    }"},{"line_number":3818,"context_line":"    else"},{"line_number":3819,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"c5c0f206_666146e4","line":3816,"in_reply_to":"ffe64598_39b97862","updated":"2025-02-14 17:45:31.000000000","message":"Acknowledged","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":3836,"context_line":"        o-\u003efast_io \u003d false;"},{"line_number":3837,"context_line":"        msg(M_INFO, \"NOTE: --fast-io is disabled if there is a TCP socket active\");"},{"line_number":3838,"context_line":"    }"},{"line_number":3839,"context_line":""},{"line_number":3840,"context_line":"    if (o-\u003etls_server)"},{"line_number":3841,"context_line":"    {"},{"line_number":3842,"context_line":"        /* Check that DH file is specified, or explicitly disabled */"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"da8501e5_f0ca4bac","line":3839,"updated":"2025-01-31 13:32:25.000000000","message":"I\u0027m actually not sure I understand `fast_io` well enough for this, but - what I understand, `fast_io` is only working on UDP sockets (and not if `--shaper` is active) - but why can\u0027t we not have `fast_io` on \"all the UDP sockets\" just because there is one extra TCP socket?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ec62200f6da3753b9422a515f35c79bbab0ea946","unresolved":true,"context_lines":[{"line_number":3836,"context_line":"        o-\u003efast_io \u003d false;"},{"line_number":3837,"context_line":"        msg(M_INFO, \"NOTE: --fast-io is disabled if there is a TCP socket active\");"},{"line_number":3838,"context_line":"    }"},{"line_number":3839,"context_line":""},{"line_number":3840,"context_line":"    if (o-\u003etls_server)"},{"line_number":3841,"context_line":"    {"},{"line_number":3842,"context_line":"        /* Check that DH file is specified, or explicitly disabled */"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"ad01e4f2_8599b78a","line":3839,"in_reply_to":"611fa1ff_cab4dcb3","updated":"2025-02-18 17:35:06.000000000","message":"so what does \"Acknowledged\" mean, here?  \"Will be handled in a future patch\"?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bdff9339438af1bae84acae6f3aa85031e2a1527","unresolved":false,"context_lines":[{"line_number":3836,"context_line":"        o-\u003efast_io \u003d false;"},{"line_number":3837,"context_line":"        msg(M_INFO, \"NOTE: --fast-io is disabled if there is a TCP socket active\");"},{"line_number":3838,"context_line":"    }"},{"line_number":3839,"context_line":""},{"line_number":3840,"context_line":"    if (o-\u003etls_server)"},{"line_number":3841,"context_line":"    {"},{"line_number":3842,"context_line":"        /* Check that DH file is specified, or explicitly disabled */"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"8fe0a241_34255d82","line":3839,"in_reply_to":"ad01e4f2_8599b78a","updated":"2025-03-05 16:59:21.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":3836,"context_line":"        o-\u003efast_io \u003d false;"},{"line_number":3837,"context_line":"        msg(M_INFO, \"NOTE: --fast-io is disabled if there is a TCP socket active\");"},{"line_number":3838,"context_line":"    }"},{"line_number":3839,"context_line":""},{"line_number":3840,"context_line":"    if (o-\u003etls_server)"},{"line_number":3841,"context_line":"    {"},{"line_number":3842,"context_line":"        /* Check that DH file is specified, or explicitly disabled */"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"611fa1ff_cab4dcb3","line":3839,"in_reply_to":"da8501e5_f0ca4bac","updated":"2025-02-14 17:45:31.000000000","message":"Acknowledged","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ec62200f6da3753b9422a515f35c79bbab0ea946","unresolved":true,"context_lines":[{"line_number":1744,"context_line":"    for (int i \u003d 0; i \u003c o-\u003elocal_list-\u003elen; i++)"},{"line_number":1745,"context_line":"    {"},{"line_number":1746,"context_line":"        msg(D_SHOW_PARMS, \"    [%s]:%s\", o-\u003elocal_list-\u003earray[i]-\u003elocal,"},{"line_number":1747,"context_line":"            o-\u003elocal_list-\u003earray[i]-\u003eport);"},{"line_number":1748,"context_line":"    }"},{"line_number":1749,"context_line":"    SHOW_STR(remote);"},{"line_number":1750,"context_line":"    SHOW_STR(remote_port);"}],"source_content_type":"text/x-csrc","patch_set":19,"id":"873691f9_0977c2fe","line":1747,"updated":"2025-02-18 17:35:06.000000000","message":"I think this should show `proto` now as well, otherwise the log is a bit hard to read if trying to understand why a `bind()` fails.","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bdff9339438af1bae84acae6f3aa85031e2a1527","unresolved":false,"context_lines":[{"line_number":1744,"context_line":"    for (int i \u003d 0; i \u003c o-\u003elocal_list-\u003elen; i++)"},{"line_number":1745,"context_line":"    {"},{"line_number":1746,"context_line":"        msg(D_SHOW_PARMS, \"    [%s]:%s\", o-\u003elocal_list-\u003earray[i]-\u003elocal,"},{"line_number":1747,"context_line":"            o-\u003elocal_list-\u003earray[i]-\u003eport);"},{"line_number":1748,"context_line":"    }"},{"line_number":1749,"context_line":"    SHOW_STR(remote);"},{"line_number":1750,"context_line":"    SHOW_STR(remote_port);"}],"source_content_type":"text/x-csrc","patch_set":19,"id":"bc60012a_289c4f91","line":1747,"in_reply_to":"873691f9_0977c2fe","updated":"2025-03-05 16:59:21.000000000","message":"Done","commit_id":"a1c4ea9c4c525c371d3cfa09d6832539f4001864"}],"src/openvpn/socket.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"fd3035ab4855a78752beb862edce266cf7304ef1","unresolved":true,"context_lines":[{"line_number":1911,"context_line":"        proto \u003d tmp_sock-\u003einfo.proto;"},{"line_number":1912,"context_line":"    }"},{"line_number":1913,"context_line":""},{"line_number":1914,"context_line":"    ASSERT(c-\u003ec2.link_sockets[sock_index]);"},{"line_number":1915,"context_line":""},{"line_number":1916,"context_line":"    sock-\u003elocal_host \u003d host;"},{"line_number":1917,"context_line":"    sock-\u003elocal_port \u003d port;"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"2d46cfa3_40e4c922","line":1914,"updated":"2025-01-31 13:32:25.000000000","message":"we already have an `ASSERT(sock)` at the beginning, which is `sock \u003d c-\u003ec2.link_sockets[sock_index];` - so I think this can go?","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"0ace9a761eb1ed683a267d424d7842ca325424cb","unresolved":false,"context_lines":[{"line_number":1911,"context_line":"        proto \u003d tmp_sock-\u003einfo.proto;"},{"line_number":1912,"context_line":"    }"},{"line_number":1913,"context_line":""},{"line_number":1914,"context_line":"    ASSERT(c-\u003ec2.link_sockets[sock_index]);"},{"line_number":1915,"context_line":""},{"line_number":1916,"context_line":"    sock-\u003elocal_host \u003d host;"},{"line_number":1917,"context_line":"    sock-\u003elocal_port \u003d port;"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"68eeaf4b_34101cc0","line":1914,"in_reply_to":"2d46cfa3_40e4c922","updated":"2025-02-14 17:45:31.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ec62200f6da3753b9422a515f35c79bbab0ea946","unresolved":true,"context_lines":[{"line_number":1911,"context_line":"        proto \u003d tmp_sock-\u003einfo.proto;"},{"line_number":1912,"context_line":"    }"},{"line_number":1913,"context_line":""},{"line_number":1914,"context_line":"    ASSERT(c-\u003ec2.link_sockets[sock_index]);"},{"line_number":1915,"context_line":""},{"line_number":1916,"context_line":"    sock-\u003elocal_host \u003d host;"},{"line_number":1917,"context_line":"    sock-\u003elocal_port \u003d port;"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"e7e767ef_7f49bef8","line":1914,"in_reply_to":"68eeaf4b_34101cc0","updated":"2025-02-18 17:35:06.000000000","message":"maybe gerrit is playing tricks on me, but the `ASSERT()` seems to be still here","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bdff9339438af1bae84acae6f3aa85031e2a1527","unresolved":false,"context_lines":[{"line_number":1911,"context_line":"        proto \u003d tmp_sock-\u003einfo.proto;"},{"line_number":1912,"context_line":"    }"},{"line_number":1913,"context_line":""},{"line_number":1914,"context_line":"    ASSERT(c-\u003ec2.link_sockets[sock_index]);"},{"line_number":1915,"context_line":""},{"line_number":1916,"context_line":"    sock-\u003elocal_host \u003d host;"},{"line_number":1917,"context_line":"    sock-\u003elocal_port \u003d port;"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"80bb9647_fc94b5d2","line":1914,"in_reply_to":"e7e767ef_7f49bef8","updated":"2025-03-05 16:59:21.000000000","message":"Done","commit_id":"2a026c52da8c615e32764a7b060aa6ef4a2e9e5a"}]}
