)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"9f2d247fe1f65704b89258d94950564f8c6f72ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"a4bbc704_852bd51a","updated":"2026-09-30 19:23:48.000000000","message":"TCP behaviour changes here and isn\u0027t mentioned - see mtcp.c.\n\n\"does not make it really easier to exhaust all pending session\": the ceiling is unchanged (connect-freq-initial), but the per-source-port bound is gone - one IP:port can now hold unlimited pending sessions. Worth making it explicit, I think","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"3d917b805de67fcbc28071b4ac6e003802903639","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"cbfcdce3_fea008f2","in_reply_to":"60118863_de839b5c","updated":"2026-10-08 10:08:25.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"5bcc1ab9d2225eefd45a8a93c17d967f18bed694","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"dc49a4fb_1ec1415e","in_reply_to":"60118863_de839b5c","updated":"2026-10-07 11:42:50.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"771380caa051fde61522a1fe578dfe382a69aff7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"d0f02fbd_5cb1b6db","in_reply_to":"66aea76b_6c08a6ce","updated":"2026-10-09 00:43:44.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"b7f1d63ee7218180f53ca4264d41691581a7e405","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":31,"id":"60118863_de839b5c","in_reply_to":"a4bbc704_852bd51a","updated":"2026-09-30 19:26:28.000000000","message":"Re-opening.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"38faaee38e2013104e3c2d6e9c07f41877d5c384","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":31,"id":"f43135c0_7dbf0a65","in_reply_to":"cbfcdce3_fea008f2","updated":"2026-10-08 10:14:47.000000000","message":"the TCP part was resolved, thanks!\n\nHowever, the second part of the comment was not taken into consideration.\nIt was:\n\n\"does not make it really easier to exhaust all pending session\": the ceiling is unchanged (connect-freq-initial), but the per-source-port bound is gone - one IP:port can now hold unlimited pending sessions. Worth making it explicit, I think.\n\n\nDon\u0027t you think it makes sense to make this behavioural change explicit in the commit message?","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"4c3577a7a9d49856ca1a40691f81a82788291e5a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":31,"id":"66aea76b_6c08a6ce","in_reply_to":"f43135c0_7dbf0a65","updated":"2026-10-08 13:25:43.000000000","message":"I pointed out that you no longer need different source ports to create sessions but also that this is not a meaningful difference.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"92b8562acaa637bd0ec95e40359025d0eddc9dda","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"50513388_803f8a2b","updated":"2026-06-22 14:03:17.000000000","message":"build fails","commit_id":"43b6031f882d58e4d5b9790c558b913926128399"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"47b4c10124f7f3e2f47b79f908eefe3cd3cff5fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":37,"id":"64928e0c_38071152","updated":"2026-10-09 09:55:18.000000000","message":"we have a winner!","commit_id":"a8b5b440b6de3acda7f7c390114c4e3a724754db"}],"doc/man-sections/advanced-options.rst":[{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"6b4618739f3cb09b1211ec06646c238950d46563","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"--hash-size args"},{"line_number":31,"context_line":"  Set the size of the real address hash table to ``r`` and the virtual"},{"line_number":32,"context_line":"  address table to ``v``. And if specified the session id hash table to"},{"line_number":33,"context_line":"  ``s``. Otherwise ``s`` be set to the same value as ``r``."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"  Valid syntax:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"063287a6_ad77a9f8","line":32,"updated":"2026-07-06 12:47:29.000000000","message":"\"If specified set the size of the session id hash table to\"","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"3441e3d3513906e4366fa4905ac47f060ad15deb","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"--hash-size args"},{"line_number":31,"context_line":"  Set the size of the real address hash table to ``r`` and the virtual"},{"line_number":32,"context_line":"  address table to ``v``. And if specified the session id hash table to"},{"line_number":33,"context_line":"  ``s``. Otherwise ``s`` be set to the same value as ``r``."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"  Valid syntax:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"d82a4f50_1f10f5ae","line":32,"in_reply_to":"063287a6_ad77a9f8","updated":"2026-07-14 13:01:00.000000000","message":"Done","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"6b4618739f3cb09b1211ec06646c238950d46563","unresolved":true,"context_lines":[{"line_number":30,"context_line":"--hash-size args"},{"line_number":31,"context_line":"  Set the size of the real address hash table to ``r`` and the virtual"},{"line_number":32,"context_line":"  address table to ``v``. And if specified the session id hash table to"},{"line_number":33,"context_line":"  ``s``. Otherwise ``s`` be set to the same value as ``r``."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"  Valid syntax:"},{"line_number":36,"context_line":"  ::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"adc8d07e_8b554a73","line":33,"updated":"2026-07-06 12:47:29.000000000","message":"\"will be\"","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"3441e3d3513906e4366fa4905ac47f060ad15deb","unresolved":false,"context_lines":[{"line_number":30,"context_line":"--hash-size args"},{"line_number":31,"context_line":"  Set the size of the real address hash table to ``r`` and the virtual"},{"line_number":32,"context_line":"  address table to ``v``. And if specified the session id hash table to"},{"line_number":33,"context_line":"  ``s``. Otherwise ``s`` be set to the same value as ``r``."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"  Valid syntax:"},{"line_number":36,"context_line":"  ::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"2336da00_72054d17","line":33,"in_reply_to":"adc8d07e_8b554a73","updated":"2026-07-14 13:01:00.000000000","message":"Done","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"9f2d247fe1f65704b89258d94950564f8c6f72ea","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"     hash-size r v [s]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"  By default, all three tables are sized at 4 times ``--max-clients`` buckets."},{"line_number":41,"context_line":"  With the default of 1024 of ``--max-clients`` this gives 4096 buckets."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":31,"id":"c344cd34_caab9864","line":40,"updated":"2026-09-30 19:23:48.000000000","message":"Stray blank line. Also comma after \"If specified\".","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"3d917b805de67fcbc28071b4ac6e003802903639","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"     hash-size r v [s]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"  By default, all three tables are sized at 4 times ``--max-clients`` buckets."},{"line_number":41,"context_line":"  With the default of 1024 of ``--max-clients`` this gives 4096 buckets."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":31,"id":"8059fadd_cd066173","line":40,"in_reply_to":"6631d265_924871d4","updated":"2026-10-08 10:08:25.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"5bcc1ab9d2225eefd45a8a93c17d967f18bed694","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"     hash-size r v [s]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"  By default, all three tables are sized at 4 times ``--max-clients`` buckets."},{"line_number":41,"context_line":"  With the default of 1024 of ``--max-clients`` this gives 4096 buckets."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":31,"id":"9e5cecb2_734dde43","line":40,"in_reply_to":"6631d265_924871d4","updated":"2026-10-07 11:42:50.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"b7f1d63ee7218180f53ca4264d41691581a7e405","unresolved":true,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"     hash-size r v [s]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"  By default, all three tables are sized at 4 times ``--max-clients`` buckets."},{"line_number":41,"context_line":"  With the default of 1024 of ``--max-clients`` this gives 4096 buckets."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":31,"id":"6631d265_924871d4","line":40,"in_reply_to":"c344cd34_caab9864","updated":"2026-09-30 19:26:28.000000000","message":"Re-opening.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"38faaee38e2013104e3c2d6e9c07f41877d5c384","unresolved":true,"context_lines":[{"line_number":39,"context_line":"  By default, all three tables are sized at 4 times ``--max-clients`` buckets."},{"line_number":40,"context_line":"  With the default of 1024 of ``--max-clients`` this gives 4096 buckets."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"  If ``s`` is specified, the size of session id hash table is"},{"line_number":43,"context_line":"  to ``s``. Otherwise the session id hash table will be set to the same"},{"line_number":44,"context_line":"  value as ``r``."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":32,"id":"c493404d_58c1746e","line":42,"updated":"2026-10-08 10:14:47.000000000","message":"missing \"set\" after \"is\"?","commit_id":"5acd7a922b4bcdb4579db8006d8db02c2d38fc3e"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"4c3577a7a9d49856ca1a40691f81a82788291e5a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  By default, all three tables are sized at 4 times ``--max-clients`` buckets."},{"line_number":40,"context_line":"  With the default of 1024 of ``--max-clients`` this gives 4096 buckets."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"  If ``s`` is specified, the size of session id hash table is"},{"line_number":43,"context_line":"  to ``s``. Otherwise the session id hash table will be set to the same"},{"line_number":44,"context_line":"  value as ``r``."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":32,"id":"8332e6e0_15090ffa","line":42,"in_reply_to":"c493404d_58c1746e","updated":"2026-10-08 13:25:43.000000000","message":"Acknowledged","commit_id":"5acd7a922b4bcdb4579db8006d8db02c2d38fc3e"}],"src/openvpn/mtcp.c":[{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"9f2d247fe1f65704b89258d94950564f8c6f72ea","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        {"},{"line_number":61,"context_line":"            struct multi_instance *oldmi \u003d (struct multi_instance *)he-\u003evalue;"},{"line_number":62,"context_line":"            msg(D_MULTI_LOW,"},{"line_number":63,"context_line":"                \"MULTI TCP: new incoming client address matches existing client address -- new client takes precedence\");"},{"line_number":64,"context_line":"            oldmi-\u003edid_real_hash \u003d false;"},{"line_number":65,"context_line":"            multi_close_instance(m, oldmi, false);"},{"line_number":66,"context_line":"            he-\u003ekey \u003d \u0026mi-\u003ereal;"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"7fc483cc_dc233b69","side":"PARENT","line":63,"updated":"2026-09-30 19:23:48.000000000","message":"This changes TCP semantics: a new connection matching a stale instance used to win unconditionally, now it needs matching cert+username or it\u0027s rejected. Same outcome for the usual reconnect case, but it should be in the commit message or a separate patch.","commit_id":"0999fc1bb083c87bb4acd3e3011d11ad1e55e426"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"5bcc1ab9d2225eefd45a8a93c17d967f18bed694","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        {"},{"line_number":61,"context_line":"            struct multi_instance *oldmi \u003d (struct multi_instance *)he-\u003evalue;"},{"line_number":62,"context_line":"            msg(D_MULTI_LOW,"},{"line_number":63,"context_line":"                \"MULTI TCP: new incoming client address matches existing client address -- new client takes precedence\");"},{"line_number":64,"context_line":"            oldmi-\u003edid_real_hash \u003d false;"},{"line_number":65,"context_line":"            multi_close_instance(m, oldmi, false);"},{"line_number":66,"context_line":"            he-\u003ekey \u003d \u0026mi-\u003ereal;"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"36d48a52_53e0a9c9","side":"PARENT","line":63,"in_reply_to":"77c2a1a8_74316e3d","updated":"2026-10-07 11:42:50.000000000","message":"Acknowledged\n\nAdd a paragraph in the commit message about this.","commit_id":"0999fc1bb083c87bb4acd3e3011d11ad1e55e426"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"3d917b805de67fcbc28071b4ac6e003802903639","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        {"},{"line_number":61,"context_line":"            struct multi_instance *oldmi \u003d (struct multi_instance *)he-\u003evalue;"},{"line_number":62,"context_line":"            msg(D_MULTI_LOW,"},{"line_number":63,"context_line":"                \"MULTI TCP: new incoming client address matches existing client address -- new client takes precedence\");"},{"line_number":64,"context_line":"            oldmi-\u003edid_real_hash \u003d false;"},{"line_number":65,"context_line":"            multi_close_instance(m, oldmi, false);"},{"line_number":66,"context_line":"            he-\u003ekey \u003d \u0026mi-\u003ereal;"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"246e24e6_0b69bf03","side":"PARENT","line":63,"in_reply_to":"77c2a1a8_74316e3d","updated":"2026-10-08 10:08:25.000000000","message":"Done","commit_id":"0999fc1bb083c87bb4acd3e3011d11ad1e55e426"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"b7f1d63ee7218180f53ca4264d41691581a7e405","unresolved":true,"context_lines":[{"line_number":60,"context_line":"        {"},{"line_number":61,"context_line":"            struct multi_instance *oldmi \u003d (struct multi_instance *)he-\u003evalue;"},{"line_number":62,"context_line":"            msg(D_MULTI_LOW,"},{"line_number":63,"context_line":"                \"MULTI TCP: new incoming client address matches existing client address -- new client takes precedence\");"},{"line_number":64,"context_line":"            oldmi-\u003edid_real_hash \u003d false;"},{"line_number":65,"context_line":"            multi_close_instance(m, oldmi, false);"},{"line_number":66,"context_line":"            he-\u003ekey \u003d \u0026mi-\u003ereal;"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"77c2a1a8_74316e3d","side":"PARENT","line":63,"in_reply_to":"7fc483cc_dc233b69","updated":"2026-09-30 19:26:28.000000000","message":"Re-opening.","commit_id":"0999fc1bb083c87bb4acd3e3011d11ad1e55e426"}],"src/openvpn/mudp.c":[{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"92b8562acaa637bd0ec95e40359025d0eddc9dda","unresolved":true,"context_lines":[{"line_number":348,"context_line":"    }"},{"line_number":349,"context_line":"    if (!v2 || peer_id_disabled)"},{"line_number":350,"context_line":"    {"},{"line_number":351,"context_line":"        return multi_get_instance_real_udp_real(m, real);"},{"line_number":352,"context_line":"    }"},{"line_number":353,"context_line":"    return NULL;"},{"line_number":354,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"1640ce6c_498f33f7","line":351,"updated":"2026-06-22 14:03:17.000000000","message":"```\nmudp.c:351:56: error: too few arguments to function call, expected 3, have 2\n  351 |         return multi_get_instance_real_udp_real(m, real);\n      |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~        ^\nmudp.c:265:1: note: \u0027multi_get_instance_real_udp_real\u0027 declared here\n  265 | multi_get_instance_real_udp_real(struct multi_context *m,struct mroute_addr *real, struct link_socket *sock)\n      | ^                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n```","commit_id":"43b6031f882d58e4d5b9790c558b913926128399"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"eeb4e7911d1e4393d85318cba58fbdc0f5930a28","unresolved":false,"context_lines":[{"line_number":348,"context_line":"    }"},{"line_number":349,"context_line":"    if (!v2 || peer_id_disabled)"},{"line_number":350,"context_line":"    {"},{"line_number":351,"context_line":"        return multi_get_instance_real_udp_real(m, real);"},{"line_number":352,"context_line":"    }"},{"line_number":353,"context_line":"    return NULL;"},{"line_number":354,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"982ebae0_09be7b2b","line":351,"in_reply_to":"1640ce6c_498f33f7","updated":"2026-06-22 15:29:40.000000000","message":"Done","commit_id":"43b6031f882d58e4d5b9790c558b913926128399"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"6b4618739f3cb09b1211ec06646c238950d46563","unresolved":true,"context_lines":[{"line_number":380,"context_line":"    }"},{"line_number":381,"context_line":"    else"},{"line_number":382,"context_line":"    {"},{"line_number":383,"context_line":"        if (m-\u003etop.c2.buf.len \u003c 9)"},{"line_number":384,"context_line":"        {"},{"line_number":385,"context_line":"            /* control packets must be at least the opcode byte + session id"},{"line_number":386,"context_line":"             * (8 byte) long, otherwise they are not valid packets */"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"d3040fdc_2606f6b9","line":383,"updated":"2026-07-06 12:47:29.000000000","message":"Why hardcode 9 instead of \"sizeof(struct session_id) + 1\" ?","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"3441e3d3513906e4366fa4905ac47f060ad15deb","unresolved":false,"context_lines":[{"line_number":380,"context_line":"    }"},{"line_number":381,"context_line":"    else"},{"line_number":382,"context_line":"    {"},{"line_number":383,"context_line":"        if (m-\u003etop.c2.buf.len \u003c 9)"},{"line_number":384,"context_line":"        {"},{"line_number":385,"context_line":"            /* control packets must be at least the opcode byte + session id"},{"line_number":386,"context_line":"             * (8 byte) long, otherwise they are not valid packets */"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"fa7d8345_5eed2d6d","line":383,"in_reply_to":"d3040fdc_2606f6b9","updated":"2026-07-14 13:01:00.000000000","message":"Replaced with (int)SID_SIZE + 1.","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"9f2d247fe1f65704b89258d94950564f8c6f72ea","unresolved":false,"context_lines":[{"line_number":326,"context_line":"static struct multi_instance *"},{"line_number":327,"context_line":"multi_get_instance_udp_control(struct multi_context *m)"},{"line_number":328,"context_line":"{"},{"line_number":329,"context_line":"    /* Copy buffer, to a tmp buffer, so that reading the sesison does not"},{"line_number":330,"context_line":"     * modify the internal pointers */"},{"line_number":331,"context_line":"    struct buffer tmp \u003d m-\u003etop.c2.buf;"},{"line_number":332,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":31,"id":"33118e5a_9b01b355","line":329,"updated":"2026-09-30 19:23:48.000000000","message":"s/sesison/session/","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"5bcc1ab9d2225eefd45a8a93c17d967f18bed694","unresolved":false,"context_lines":[{"line_number":326,"context_line":"static struct multi_instance *"},{"line_number":327,"context_line":"multi_get_instance_udp_control(struct multi_context *m)"},{"line_number":328,"context_line":"{"},{"line_number":329,"context_line":"    /* Copy buffer, to a tmp buffer, so that reading the sesison does not"},{"line_number":330,"context_line":"     * modify the internal pointers */"},{"line_number":331,"context_line":"    struct buffer tmp \u003d m-\u003etop.c2.buf;"},{"line_number":332,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":31,"id":"2b9c0873_781e6e79","line":329,"in_reply_to":"089f30b7_1c78e645","updated":"2026-10-07 11:42:50.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"3d917b805de67fcbc28071b4ac6e003802903639","unresolved":false,"context_lines":[{"line_number":326,"context_line":"static struct multi_instance *"},{"line_number":327,"context_line":"multi_get_instance_udp_control(struct multi_context *m)"},{"line_number":328,"context_line":"{"},{"line_number":329,"context_line":"    /* Copy buffer, to a tmp buffer, so that reading the sesison does not"},{"line_number":330,"context_line":"     * modify the internal pointers */"},{"line_number":331,"context_line":"    struct buffer tmp \u003d m-\u003etop.c2.buf;"},{"line_number":332,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":31,"id":"49849e80_ea8cbe5f","line":329,"in_reply_to":"089f30b7_1c78e645","updated":"2026-10-08 10:08:25.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"b7f1d63ee7218180f53ca4264d41691581a7e405","unresolved":true,"context_lines":[{"line_number":326,"context_line":"static struct multi_instance *"},{"line_number":327,"context_line":"multi_get_instance_udp_control(struct multi_context *m)"},{"line_number":328,"context_line":"{"},{"line_number":329,"context_line":"    /* Copy buffer, to a tmp buffer, so that reading the sesison does not"},{"line_number":330,"context_line":"     * modify the internal pointers */"},{"line_number":331,"context_line":"    struct buffer tmp \u003d m-\u003etop.c2.buf;"},{"line_number":332,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":31,"id":"089f30b7_1c78e645","line":329,"in_reply_to":"33118e5a_9b01b355","updated":"2026-09-30 19:26:28.000000000","message":"Re-opening.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"9f2d247fe1f65704b89258d94950564f8c6f72ea","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    /* op code */"},{"line_number":334,"context_line":"    uint8_t op \u003d (uint8_t)buf_read_u8(\u0026tmp) \u003e\u003e P_OPCODE_SHIFT;"},{"line_number":335,"context_line":"    (void)op;"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    struct session_id sid \u003d { 0 };"},{"line_number":338,"context_line":"    session_id_read(\u0026sid, \u0026tmp);"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"142e99fb_d7ceff30","line":335,"updated":"2026-09-30 19:23:48.000000000","message":"`buf_advance(\u0026tmp, 1)` instead - `op` is only read to skip it.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"b7f1d63ee7218180f53ca4264d41691581a7e405","unresolved":true,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    /* op code */"},{"line_number":334,"context_line":"    uint8_t op \u003d (uint8_t)buf_read_u8(\u0026tmp) \u003e\u003e P_OPCODE_SHIFT;"},{"line_number":335,"context_line":"    (void)op;"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    struct session_id sid \u003d { 0 };"},{"line_number":338,"context_line":"    session_id_read(\u0026sid, \u0026tmp);"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"471f70d1_6c2d1bf1","line":335,"in_reply_to":"142e99fb_d7ceff30","updated":"2026-09-30 19:26:28.000000000","message":"Re-opening.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"5bcc1ab9d2225eefd45a8a93c17d967f18bed694","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    /* op code */"},{"line_number":334,"context_line":"    uint8_t op \u003d (uint8_t)buf_read_u8(\u0026tmp) \u003e\u003e P_OPCODE_SHIFT;"},{"line_number":335,"context_line":"    (void)op;"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    struct session_id sid \u003d { 0 };"},{"line_number":338,"context_line":"    session_id_read(\u0026sid, \u0026tmp);"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"fb39a7a4_5d143735","line":335,"in_reply_to":"471f70d1_6c2d1bf1","updated":"2026-10-07 11:42:50.000000000","message":"Acknowledged","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"771380caa051fde61522a1fe578dfe382a69aff7","unresolved":true,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    /* op code */"},{"line_number":333,"context_line":"    uint8_t op \u003d (uint8_t)buf_read_u8(\u0026tmp) \u003e\u003e P_OPCODE_SHIFT;"},{"line_number":334,"context_line":"    (void)op;"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    struct session_id sid \u003d { 0 };"},{"line_number":337,"context_line":"    session_id_read(\u0026sid, \u0026tmp);"}],"source_content_type":"text/x-csrc","patch_set":34,"id":"73786389_fcfd77d3","line":334,"updated":"2026-10-09 00:43:44.000000000","message":"I unerstood this is just old code, but it\u0027s so ugly that while at it, it really makes sense to make it better 😀\nI\u0027d just call buf_advance(\u0026tmp, 1); (and keep the commend) and be done with it.","commit_id":"cf6581d400b26e61f741e38666bf8ade15d0788c"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"abd62a8c04ea9feddec37692b2b3cfabefd1f869","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    /* op code */"},{"line_number":333,"context_line":"    uint8_t op \u003d (uint8_t)buf_read_u8(\u0026tmp) \u003e\u003e P_OPCODE_SHIFT;"},{"line_number":334,"context_line":"    (void)op;"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    struct session_id sid \u003d { 0 };"},{"line_number":337,"context_line":"    session_id_read(\u0026sid, \u0026tmp);"}],"source_content_type":"text/x-csrc","patch_set":34,"id":"36a4fcd9_026e41ad","line":334,"in_reply_to":"73786389_fcfd77d3","updated":"2026-10-09 08:36:30.000000000","message":"Done","commit_id":"cf6581d400b26e61f741e38666bf8ade15d0788c"}],"src/openvpn/multi.c":[{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"6b4618739f3cb09b1211ec06646c238950d46563","unresolved":true,"context_lines":[{"line_number":438,"context_line":"            buf_printf(\u0026out, \"%s/\", cn);"},{"line_number":439,"context_line":"        }"},{"line_number":440,"context_line":"        buf_printf(\u0026out, \"%s\", mroute_addr_print(\u0026mi-\u003ereal, gc));"},{"line_number":441,"context_line":"        if (mi-\u003econtext.c2.tls_multi \u0026\u0026 true)"},{"line_number":442,"context_line":"        {"},{"line_number":443,"context_line":"            buf_printf(\u0026out, \" rx-peer-id\u003d%d\", mi-\u003econtext.c2.tls_multi-\u003erx_peer_id);"},{"line_number":444,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ad114933_bf7dfcce","line":441,"updated":"2026-07-06 12:47:29.000000000","message":"\"\u0026\u0026 true\" ?","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"3441e3d3513906e4366fa4905ac47f060ad15deb","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            buf_printf(\u0026out, \"%s/\", cn);"},{"line_number":439,"context_line":"        }"},{"line_number":440,"context_line":"        buf_printf(\u0026out, \"%s\", mroute_addr_print(\u0026mi-\u003ereal, gc));"},{"line_number":441,"context_line":"        if (mi-\u003econtext.c2.tls_multi \u0026\u0026 true)"},{"line_number":442,"context_line":"        {"},{"line_number":443,"context_line":"            buf_printf(\u0026out, \" rx-peer-id\u003d%d\", mi-\u003econtext.c2.tls_multi-\u003erx_peer_id);"},{"line_number":444,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"03567279_523e52ce","line":441,"in_reply_to":"ad114933_bf7dfcce","updated":"2026-07-14 13:01:00.000000000","message":"sorry. Debug leftover. Removed","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"f2ad96d3ed3e793728e30e9b78af4beed21585ab","unresolved":true,"context_lines":[{"line_number":428,"context_line":"        }"},{"line_number":429,"context_line":"        buf_printf(\u0026out, \"%s\", mroute_addr_print(\u0026mi-\u003ereal, gc));"},{"line_number":430,"context_line":"        if (mi-\u003econtext.c2.tls_multi \u0026\u0026 check_debug_level(D_DCO_DEBUG)"},{"line_number":431,"context_line":"            \u0026\u0026 dco_enabled(\u0026mi-\u003econtext.options))"},{"line_number":432,"context_line":"        {"},{"line_number":433,"context_line":"            buf_printf(\u0026out, \" rx-peer-id\u003d%d\", mi-\u003econtext.c2.tls_multi-\u003erx_peer_id);"},{"line_number":434,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":26,"id":"d89279c8_857f730e","side":"PARENT","line":431,"updated":"2026-08-07 15:57:10.000000000","message":"is this an intended change or a debugging left-over?","commit_id":"e4c4e2fff1272a6a949b347d4bfe38d3d4278f6d"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"745126b44dc27fc8a92978e16775aa15322a1778","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        }"},{"line_number":429,"context_line":"        buf_printf(\u0026out, \"%s\", mroute_addr_print(\u0026mi-\u003ereal, gc));"},{"line_number":430,"context_line":"        if (mi-\u003econtext.c2.tls_multi \u0026\u0026 check_debug_level(D_DCO_DEBUG)"},{"line_number":431,"context_line":"            \u0026\u0026 dco_enabled(\u0026mi-\u003econtext.options))"},{"line_number":432,"context_line":"        {"},{"line_number":433,"context_line":"            buf_printf(\u0026out, \" rx-peer-id\u003d%d\", mi-\u003econtext.c2.tls_multi-\u003erx_peer_id);"},{"line_number":434,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":26,"id":"de3e6230_c5a2a5a0","side":"PARENT","line":431,"in_reply_to":"d89279c8_857f730e","updated":"2026-08-08 21:53:02.000000000","message":"I think that is a leftover of some of the many assym peer id back and forth that accidentially ended up in this patch. I remove that change.","commit_id":"e4c4e2fff1272a6a949b347d4bfe38d3d4278f6d"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"9f2d247fe1f65704b89258d94950564f8c6f72ea","unresolved":false,"context_lines":[{"line_number":434,"context_line":"            buf_printf(\u0026out, \"%s/\", cn);"},{"line_number":435,"context_line":"        }"},{"line_number":436,"context_line":"        buf_printf(\u0026out, \"%s\", mroute_addr_print(\u0026mi-\u003ereal, gc));"},{"line_number":437,"context_line":"        if (mi-\u003econtext.c2.tls_multi)"},{"line_number":438,"context_line":"        {"},{"line_number":439,"context_line":"            buf_printf(\u0026out, \" rx-peer-id\u003d%d\", mi-\u003econtext.c2.tls_multi-\u003erx_peer_id);"},{"line_number":440,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"8f666c11_5c3af584","line":437,"updated":"2026-09-30 19:23:48.000000000","message":"Unrelated change: dropping the DCO guard puts `rx-peer-id\u003dN` on every instance log line. Log-only (status and management don\u0027t use this), but noisier for everyone - own commit?","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"3d917b805de67fcbc28071b4ac6e003802903639","unresolved":false,"context_lines":[{"line_number":434,"context_line":"            buf_printf(\u0026out, \"%s/\", cn);"},{"line_number":435,"context_line":"        }"},{"line_number":436,"context_line":"        buf_printf(\u0026out, \"%s\", mroute_addr_print(\u0026mi-\u003ereal, gc));"},{"line_number":437,"context_line":"        if (mi-\u003econtext.c2.tls_multi)"},{"line_number":438,"context_line":"        {"},{"line_number":439,"context_line":"            buf_printf(\u0026out, \" rx-peer-id\u003d%d\", mi-\u003econtext.c2.tls_multi-\u003erx_peer_id);"},{"line_number":440,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"006e7d24_aa19b0f9","line":437,"in_reply_to":"70f32d65_9dfbef15","updated":"2026-10-08 10:08:25.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"5bcc1ab9d2225eefd45a8a93c17d967f18bed694","unresolved":false,"context_lines":[{"line_number":434,"context_line":"            buf_printf(\u0026out, \"%s/\", cn);"},{"line_number":435,"context_line":"        }"},{"line_number":436,"context_line":"        buf_printf(\u0026out, \"%s\", mroute_addr_print(\u0026mi-\u003ereal, gc));"},{"line_number":437,"context_line":"        if (mi-\u003econtext.c2.tls_multi)"},{"line_number":438,"context_line":"        {"},{"line_number":439,"context_line":"            buf_printf(\u0026out, \" rx-peer-id\u003d%d\", mi-\u003econtext.c2.tls_multi-\u003erx_peer_id);"},{"line_number":440,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"d384efa1_ef7dbd15","line":437,"in_reply_to":"70f32d65_9dfbef15","updated":"2026-10-07 11:42:50.000000000","message":"I changed it to also print the rx_pid at D_MULTI_DEBUG (verb 7) and not only when DCO is enabled and D_DCO_DEBUG (verb 6).","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"b7f1d63ee7218180f53ca4264d41691581a7e405","unresolved":true,"context_lines":[{"line_number":434,"context_line":"            buf_printf(\u0026out, \"%s/\", cn);"},{"line_number":435,"context_line":"        }"},{"line_number":436,"context_line":"        buf_printf(\u0026out, \"%s\", mroute_addr_print(\u0026mi-\u003ereal, gc));"},{"line_number":437,"context_line":"        if (mi-\u003econtext.c2.tls_multi)"},{"line_number":438,"context_line":"        {"},{"line_number":439,"context_line":"            buf_printf(\u0026out, \" rx-peer-id\u003d%d\", mi-\u003econtext.c2.tls_multi-\u003erx_peer_id);"},{"line_number":440,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"70f32d65_9dfbef15","line":437,"in_reply_to":"8f666c11_5c3af584","updated":"2026-09-30 19:26:28.000000000","message":"Re-opening.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"9f2d247fe1f65704b89258d94950564f8c6f72ea","unresolved":false,"context_lines":[{"line_number":2470,"context_line":"}"},{"line_number":2471,"context_line":""},{"line_number":2472,"context_line":"static bool"},{"line_number":2473,"context_line":"multi_check_dest_addr_allowed(struct multi_context *m, struct multi_instance *mi, struct mroute_addr *real);"},{"line_number":2474,"context_line":""},{"line_number":2475,"context_line":"/**"},{"line_number":2476,"context_line":" * This sets up the client real address (outer tunnel addr) in the"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"276a1303_ad63138b","line":2473,"updated":"2026-09-30 19:23:48.000000000","message":"Forward decl 700 lines from the definition - move the definition up instead?","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"b7f1d63ee7218180f53ca4264d41691581a7e405","unresolved":true,"context_lines":[{"line_number":2470,"context_line":"}"},{"line_number":2471,"context_line":""},{"line_number":2472,"context_line":"static bool"},{"line_number":2473,"context_line":"multi_check_dest_addr_allowed(struct multi_context *m, struct multi_instance *mi, struct mroute_addr *real);"},{"line_number":2474,"context_line":""},{"line_number":2475,"context_line":"/**"},{"line_number":2476,"context_line":" * This sets up the client real address (outer tunnel addr) in the"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"4ca11d67_df8a6823","line":2473,"in_reply_to":"276a1303_ad63138b","updated":"2026-09-30 19:26:28.000000000","message":"Re-opening.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"3d917b805de67fcbc28071b4ac6e003802903639","unresolved":false,"context_lines":[{"line_number":2470,"context_line":"}"},{"line_number":2471,"context_line":""},{"line_number":2472,"context_line":"static bool"},{"line_number":2473,"context_line":"multi_check_dest_addr_allowed(struct multi_context *m, struct multi_instance *mi, struct mroute_addr *real);"},{"line_number":2474,"context_line":""},{"line_number":2475,"context_line":"/**"},{"line_number":2476,"context_line":" * This sets up the client real address (outer tunnel addr) in the"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"909f4428_7c0b0654","line":2473,"in_reply_to":"4ca11d67_df8a6823","updated":"2026-10-08 10:08:25.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"5bcc1ab9d2225eefd45a8a93c17d967f18bed694","unresolved":true,"context_lines":[{"line_number":2470,"context_line":"}"},{"line_number":2471,"context_line":""},{"line_number":2472,"context_line":"static bool"},{"line_number":2473,"context_line":"multi_check_dest_addr_allowed(struct multi_context *m, struct multi_instance *mi, struct mroute_addr *real);"},{"line_number":2474,"context_line":""},{"line_number":2475,"context_line":"/**"},{"line_number":2476,"context_line":" * This sets up the client real address (outer tunnel addr) in the"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"a2e854b2_f02ac73d","line":2473,"in_reply_to":"4ca11d67_df8a6823","updated":"2026-10-07 11:42:50.000000000","message":"Not sure if we prefer loosing easier way to annotate in git history to eliminating a forward declaration.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"38faaee38e2013104e3c2d6e9c07f41877d5c384","unresolved":true,"context_lines":[{"line_number":272,"context_line":"    struct multi_context *m \u003d t-\u003emulti;"},{"line_number":273,"context_line":"    int dev \u003d DEV_TYPE_UNDEF;"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    msg(D_MULTI_LOW, \"MULTI: multi_init called, r\u003d%d v\u003d%d s\u003d%d\", t-\u003eoptions.real_hash_size,"},{"line_number":276,"context_line":"        t-\u003eoptions.virtual_hash_size, t-\u003eoptions.sid_hash_size);"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    /*"}],"source_content_type":"text/x-csrc","patch_set":32,"id":"6b49a325_29574904","line":275,"updated":"2026-10-08 10:14:47.000000000","message":"I think you accidentally reverted this line after your rebase. These should all be %u.","commit_id":"5acd7a922b4bcdb4579db8006d8db02c2d38fc3e"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"4c3577a7a9d49856ca1a40691f81a82788291e5a","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    struct multi_context *m \u003d t-\u003emulti;"},{"line_number":273,"context_line":"    int dev \u003d DEV_TYPE_UNDEF;"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    msg(D_MULTI_LOW, \"MULTI: multi_init called, r\u003d%d v\u003d%d s\u003d%d\", t-\u003eoptions.real_hash_size,"},{"line_number":276,"context_line":"        t-\u003eoptions.virtual_hash_size, t-\u003eoptions.sid_hash_size);"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    /*"}],"source_content_type":"text/x-csrc","patch_set":32,"id":"1e343fab_7ed79fd1","line":275,"in_reply_to":"6b49a325_29574904","updated":"2026-10-08 13:25:43.000000000","message":"Acknowledged. But they should be PRIu32 as we are using uint32_t and not unsigned int.","commit_id":"5acd7a922b4bcdb4579db8006d8db02c2d38fc3e"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"771380caa051fde61522a1fe578dfe382a69aff7","unresolved":true,"context_lines":[{"line_number":273,"context_line":"    int dev \u003d DEV_TYPE_UNDEF;"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    msg(D_MULTI_LOW, \"MULTI: multi_init called, r\u003d%\" PRIu32 \"v\u003d%\" PRIu32 \" s\u003d%\" PRIu32,"},{"line_number":276,"context_line":"        t-\u003eoptions.real_hash_size, t-\u003eoptions.virtual_hash_size, t-\u003eoptions.sid_hash_size);"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    /*"},{"line_number":279,"context_line":"     * Get tun/tap/null device type"}],"source_content_type":"text/x-csrc","patch_set":34,"id":"1410f40e_e9aa07c2","line":276,"updated":"2026-10-09 00:43:44.000000000","message":"you removed a space: \"v\u003d%\" should be \" v\u003d%\"","commit_id":"cf6581d400b26e61f741e38666bf8ade15d0788c"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"abd62a8c04ea9feddec37692b2b3cfabefd1f869","unresolved":false,"context_lines":[{"line_number":273,"context_line":"    int dev \u003d DEV_TYPE_UNDEF;"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    msg(D_MULTI_LOW, \"MULTI: multi_init called, r\u003d%\" PRIu32 \"v\u003d%\" PRIu32 \" s\u003d%\" PRIu32,"},{"line_number":276,"context_line":"        t-\u003eoptions.real_hash_size, t-\u003eoptions.virtual_hash_size, t-\u003eoptions.sid_hash_size);"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    /*"},{"line_number":279,"context_line":"     * Get tun/tap/null device type"}],"source_content_type":"text/x-csrc","patch_set":34,"id":"a5bdeff0_66ddc86d","line":276,"in_reply_to":"1410f40e_e9aa07c2","updated":"2026-10-09 08:36:30.000000000","message":"Acknowledged","commit_id":"cf6581d400b26e61f741e38666bf8ade15d0788c"}],"src/openvpn/multi.h":[{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"6b4618739f3cb09b1211ec06646c238950d46563","unresolved":true,"context_lines":[{"line_number":135,"context_line":"#ifdef ENABLE_MANAGEMENT"},{"line_number":136,"context_line":"    bool did_cid_hash;"},{"line_number":137,"context_line":"    /* If this is multi_insance is hashed in the sid lookup table the session"},{"line_number":138,"context_line":"     * id here is non-null and the hash map\u0027s key pointer uses is pointing"},{"line_number":139,"context_line":"     * here */"},{"line_number":140,"context_line":"    struct session_id sid_hashed_value;"},{"line_number":141,"context_line":"    struct buffer_list *cc_config;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"f186bf4c_f7a8e8df","line":138,"updated":"2026-07-06 12:47:29.000000000","message":"Not sure what \"uses\" is supposed to mean here?","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"3441e3d3513906e4366fa4905ac47f060ad15deb","unresolved":false,"context_lines":[{"line_number":135,"context_line":"#ifdef ENABLE_MANAGEMENT"},{"line_number":136,"context_line":"    bool did_cid_hash;"},{"line_number":137,"context_line":"    /* If this is multi_insance is hashed in the sid lookup table the session"},{"line_number":138,"context_line":"     * id here is non-null and the hash map\u0027s key pointer uses is pointing"},{"line_number":139,"context_line":"     * here */"},{"line_number":140,"context_line":"    struct session_id sid_hashed_value;"},{"line_number":141,"context_line":"    struct buffer_list *cc_config;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"10ae17ac_5a2d983b","line":138,"in_reply_to":"f186bf4c_f7a8e8df","updated":"2026-07-14 13:01:00.000000000","message":"Done","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"6b4618739f3cb09b1211ec06646c238950d46563","unresolved":true,"context_lines":[{"line_number":136,"context_line":"    bool did_cid_hash;"},{"line_number":137,"context_line":"    /* If this is multi_insance is hashed in the sid lookup table the session"},{"line_number":138,"context_line":"     * id here is non-null and the hash map\u0027s key pointer uses is pointing"},{"line_number":139,"context_line":"     * here */"},{"line_number":140,"context_line":"    struct session_id sid_hashed_value;"},{"line_number":141,"context_line":"    struct buffer_list *cc_config;"},{"line_number":142,"context_line":"#endif"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"4df36e1e_1916a232","line":139,"updated":"2026-07-06 12:47:29.000000000","message":"What is \"here\"? Sounds like it points to this part of the struct, but it actually points to the beginning of the struct, doesn\u0027t it?","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"3441e3d3513906e4366fa4905ac47f060ad15deb","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    bool did_cid_hash;"},{"line_number":137,"context_line":"    /* If this is multi_insance is hashed in the sid lookup table the session"},{"line_number":138,"context_line":"     * id here is non-null and the hash map\u0027s key pointer uses is pointing"},{"line_number":139,"context_line":"     * here */"},{"line_number":140,"context_line":"    struct session_id sid_hashed_value;"},{"line_number":141,"context_line":"    struct buffer_list *cc_config;"},{"line_number":142,"context_line":"#endif"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"0e7fda90_da142616","line":139,"in_reply_to":"4df36e1e_1916a232","updated":"2026-07-14 13:01:00.000000000","message":"Our hash map is a bit weird in the way that it does not store the keys but actually only pointers to the keys and this field is the key while the whole struct is the value. I adjusted the comment to reflect this pbacker","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"6b4618739f3cb09b1211ec06646c238950d46563","unresolved":true,"context_lines":[{"line_number":175,"context_line":"    struct hash *vhash;                /**\u003c VPN tunnel instances indexed by"},{"line_number":176,"context_line":"                                        *   virtual address of remote hosts. */"},{"line_number":177,"context_line":"    struct hash *sid_hash;             /**\u003c TLS sessions indexed by the peer\u0027s"},{"line_number":178,"context_line":"                                            session id. We do not care collisions here"},{"line_number":179,"context_line":"                                            as clients should have unique ids and"},{"line_number":180,"context_line":"                                            supporting clients with identical SIDs"},{"line_number":181,"context_line":"                                            is not needed */"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"2fd8e60c_76963cb3","line":178,"updated":"2026-07-06 12:47:29.000000000","message":"\"care about\"","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"3441e3d3513906e4366fa4905ac47f060ad15deb","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    struct hash *vhash;                /**\u003c VPN tunnel instances indexed by"},{"line_number":176,"context_line":"                                        *   virtual address of remote hosts. */"},{"line_number":177,"context_line":"    struct hash *sid_hash;             /**\u003c TLS sessions indexed by the peer\u0027s"},{"line_number":178,"context_line":"                                            session id. We do not care collisions here"},{"line_number":179,"context_line":"                                            as clients should have unique ids and"},{"line_number":180,"context_line":"                                            supporting clients with identical SIDs"},{"line_number":181,"context_line":"                                            is not needed */"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"cddba2a0_341624a4","line":178,"in_reply_to":"2fd8e60c_76963cb3","updated":"2026-07-14 13:01:00.000000000","message":"Done","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"f2ad96d3ed3e793728e30e9b78af4beed21585ab","unresolved":true,"context_lines":[{"line_number":135,"context_line":"     * the multi_context m-\u003ehash table. */"},{"line_number":136,"context_line":"    bool did_real_hash;"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    /** If this is multi_instance is hashed in the sid lookup table the session"},{"line_number":139,"context_line":"     * id here is a non-null session id and the hash map\u0027s key pointer points"},{"line_number":140,"context_line":"     * to this field (the value pointer points to the whole struct) */"},{"line_number":141,"context_line":"    struct session_id sid_hashed_value;"}],"source_content_type":"text/x-csrc","patch_set":26,"id":"94ecc620_97e9f078","line":138,"updated":"2026-08-07 15:57:10.000000000","message":"Remove the first \"is\" and the second \"session id\"","commit_id":"40cfe5c6d64dcd4fb6cbe8dbd3268a21527e71a3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"745126b44dc27fc8a92978e16775aa15322a1778","unresolved":false,"context_lines":[{"line_number":135,"context_line":"     * the multi_context m-\u003ehash table. */"},{"line_number":136,"context_line":"    bool did_real_hash;"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    /** If this is multi_instance is hashed in the sid lookup table the session"},{"line_number":139,"context_line":"     * id here is a non-null session id and the hash map\u0027s key pointer points"},{"line_number":140,"context_line":"     * to this field (the value pointer points to the whole struct) */"},{"line_number":141,"context_line":"    struct session_id sid_hashed_value;"}],"source_content_type":"text/x-csrc","patch_set":26,"id":"d55f5112_31eb2707","line":138,"in_reply_to":"94ecc620_97e9f078","updated":"2026-08-08 21:53:02.000000000","message":"Done","commit_id":"40cfe5c6d64dcd4fb6cbe8dbd3268a21527e71a3"}],"src/openvpn/sid_hash.h":[{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"6b4618739f3cb09b1211ec06646c238950d46563","unresolved":true,"context_lines":[{"line_number":32,"context_line":"multi_hash_sid_add(struct multi_context *m, struct session_id *sid,"},{"line_number":33,"context_line":"                   struct multi_instance *mi)"},{"line_number":34,"context_line":"{"},{"line_number":35,"context_line":"    /* This only be called if the multi instance is not already present"},{"line_number":36,"context_line":"     * in the hash table */"},{"line_number":37,"context_line":"    ASSERT(!session_id_defined(\u0026mi-\u003esid_hashed_value));"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"30682dc5_7bd0156f","line":35,"updated":"2026-07-06 12:47:29.000000000","message":"\"This should\" or \"This must\"?","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"3441e3d3513906e4366fa4905ac47f060ad15deb","unresolved":false,"context_lines":[{"line_number":32,"context_line":"multi_hash_sid_add(struct multi_context *m, struct session_id *sid,"},{"line_number":33,"context_line":"                   struct multi_instance *mi)"},{"line_number":34,"context_line":"{"},{"line_number":35,"context_line":"    /* This only be called if the multi instance is not already present"},{"line_number":36,"context_line":"     * in the hash table */"},{"line_number":37,"context_line":"    ASSERT(!session_id_defined(\u0026mi-\u003esid_hashed_value));"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"7f6f7a89_099de1be","line":35,"in_reply_to":"30682dc5_7bd0156f","updated":"2026-07-14 13:01:00.000000000","message":"Done","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"6b4618739f3cb09b1211ec06646c238950d46563","unresolved":true,"context_lines":[{"line_number":49,"context_line":"{"},{"line_number":50,"context_line":"    const uint64_t hv \u003d hash_value(m-\u003esid_hash, sid);"},{"line_number":51,"context_line":"    struct hash_bucket *bucket \u003d hash_bucket(m-\u003esid_hash, hv);"},{"line_number":52,"context_line":"    struct hash_element *he \u003d hash_lookup_fast(m-\u003esid_hash, bucket, sid, hv);"},{"line_number":53,"context_line":"    if (he)"},{"line_number":54,"context_line":"    {"},{"line_number":55,"context_line":"        struct multi_instance *mi \u003d he-\u003evalue;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"1001dcdb_16f4167a","line":52,"updated":"2026-07-06 12:47:29.000000000","message":"Could reduce code duplication slightly by using multi_hash_sid_lookup here.","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"3441e3d3513906e4366fa4905ac47f060ad15deb","unresolved":false,"context_lines":[{"line_number":49,"context_line":"{"},{"line_number":50,"context_line":"    const uint64_t hv \u003d hash_value(m-\u003esid_hash, sid);"},{"line_number":51,"context_line":"    struct hash_bucket *bucket \u003d hash_bucket(m-\u003esid_hash, hv);"},{"line_number":52,"context_line":"    struct hash_element *he \u003d hash_lookup_fast(m-\u003esid_hash, bucket, sid, hv);"},{"line_number":53,"context_line":"    if (he)"},{"line_number":54,"context_line":"    {"},{"line_number":55,"context_line":"        struct multi_instance *mi \u003d he-\u003evalue;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ba72e6af_e5b31bda","line":52,"in_reply_to":"1001dcdb_16f4167a","updated":"2026-07-14 13:01:00.000000000","message":"Good catch. Thanks.","commit_id":"3d148280b63a069b8d6879a7d9be7e5175292aa9"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"1ff58817f1678e7de450f556f75bbb02094b24a3","unresolved":true,"context_lines":[{"line_number":56,"context_line":"inline static bool"},{"line_number":57,"context_line":"multi_hash_sid_remove(struct multi_context *m, const struct session_id *sid)"},{"line_number":58,"context_line":"{"},{"line_number":59,"context_line":"    struct hash_element *he \u003d multi_hash_sid_lookup(m, sid);"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    if (he)"},{"line_number":62,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"5f1dda6a_a224f258","line":59,"updated":"2026-07-17 15:25:24.000000000","message":"```\nsid_hash.h:59:56: error: passing argument 2 of ‘multi_hash_sid_lookup’ discards ‘const’ qualifier from pointer target type [-Werror\u003ddiscarded-qualifiers]\n   59 |     struct hash_element *he \u003d multi_hash_sid_lookup(m, sid);\n      |                                                        ^~~\nsid_hash.h:48:67: note: expected ‘struct session_id *’ but argument is of type ‘const struct session_id *’\n   48 | multi_hash_sid_lookup(struct multi_context *m, struct session_id *sid)\n```","commit_id":"2c063aab2095cb86186f395d73a59626431ea289"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"93f4f02de467bc31a37f30c79b35794251df215f","unresolved":true,"context_lines":[{"line_number":56,"context_line":"inline static bool"},{"line_number":57,"context_line":"multi_hash_sid_remove(struct multi_context *m, const struct session_id *sid)"},{"line_number":58,"context_line":"{"},{"line_number":59,"context_line":"    struct hash_element *he \u003d multi_hash_sid_lookup(m, sid);"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    if (he)"},{"line_number":62,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"710c4a27_8bb4a5f3","line":59,"in_reply_to":"5f1dda6a_a224f258","updated":"2026-07-20 10:55:13.000000000","message":"yeah looks like the \"just quickly inline the function\" in last iteration was not a good or quick fix. I reverted that since it is different enough to not easily work that way.","commit_id":"2c063aab2095cb86186f395d73a59626431ea289"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"b6ad10d493de7f7bdd7638f5bf64827fba2f2ca1","unresolved":false,"context_lines":[{"line_number":56,"context_line":"inline static bool"},{"line_number":57,"context_line":"multi_hash_sid_remove(struct multi_context *m, const struct session_id *sid)"},{"line_number":58,"context_line":"{"},{"line_number":59,"context_line":"    struct hash_element *he \u003d multi_hash_sid_lookup(m, sid);"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    if (he)"},{"line_number":62,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"66cdb410_efe372ef","line":59,"in_reply_to":"710c4a27_8bb4a5f3","updated":"2026-07-22 10:11:58.000000000","message":"Done","commit_id":"2c063aab2095cb86186f395d73a59626431ea289"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"1ff58817f1678e7de450f556f75bbb02094b24a3","unresolved":true,"context_lines":[{"line_number":61,"context_line":"    if (he)"},{"line_number":62,"context_line":"    {"},{"line_number":63,"context_line":"        struct multi_instance *mi \u003d he-\u003evalue;"},{"line_number":64,"context_line":"        ASSERT(hash_remove_fast(m-\u003esid_hash, bucket, sid, hv));"},{"line_number":65,"context_line":"        CLEAR(mi-\u003esid_hashed_value);"},{"line_number":66,"context_line":"        multi_instance_dec_refcount(mi);"},{"line_number":67,"context_line":"        return true;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"73b795c6_c478883e","line":64,"updated":"2026-07-17 15:25:24.000000000","message":"```\nsid_hash.h:64:46: error: ‘bucket’ undeclared (first use in this function); did you mean ‘socket’?\n   64 |         ASSERT(hash_remove_fast(m-\u003esid_hash, bucket, sid, hv));\nsid_hash.h:64:59: error: ‘hv’ undeclared (first use in this function); did you mean ‘he’?\n   64 |         ASSERT(hash_remove_fast(m-\u003esid_hash, bucket, sid, hv));\n```","commit_id":"2c063aab2095cb86186f395d73a59626431ea289"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"93f4f02de467bc31a37f30c79b35794251df215f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    if (he)"},{"line_number":62,"context_line":"    {"},{"line_number":63,"context_line":"        struct multi_instance *mi \u003d he-\u003evalue;"},{"line_number":64,"context_line":"        ASSERT(hash_remove_fast(m-\u003esid_hash, bucket, sid, hv));"},{"line_number":65,"context_line":"        CLEAR(mi-\u003esid_hashed_value);"},{"line_number":66,"context_line":"        multi_instance_dec_refcount(mi);"},{"line_number":67,"context_line":"        return true;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"b4b7f9d6_c2a71540","line":64,"in_reply_to":"73b795c6_c478883e","updated":"2026-07-20 10:55:13.000000000","message":"Done","commit_id":"2c063aab2095cb86186f395d73a59626431ea289"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"f2ad96d3ed3e793728e30e9b78af4beed21585ab","unresolved":true,"context_lines":[{"line_number":20,"context_line":" *"},{"line_number":21,"context_line":" *  You should have received a copy of the GNU General Public License along"},{"line_number":22,"context_line":" *  with this program; if not, write to the Free Software Foundation, Inc.,"},{"line_number":23,"context_line":" *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."},{"line_number":24,"context_line":" */"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"#include \"session_id.h\""}],"source_content_type":"text/x-csrc","patch_set":26,"id":"48c942e9_b37ff5c7","line":23,"updated":"2026-08-07 15:57:10.000000000","message":"old header","commit_id":"40cfe5c6d64dcd4fb6cbe8dbd3268a21527e71a3"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"6ff383d69b294db496bbe89e6c7388c3aaa253a9","unresolved":true,"context_lines":[{"line_number":20,"context_line":" *"},{"line_number":21,"context_line":" *  You should have received a copy of the GNU General Public License along"},{"line_number":22,"context_line":" *  with this program; if not, write to the Free Software Foundation, Inc.,"},{"line_number":23,"context_line":" *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."},{"line_number":24,"context_line":" */"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"#include \"session_id.h\""}],"source_content_type":"text/x-csrc","patch_set":26,"id":"ae09b1f9_b61fd358","line":23,"in_reply_to":"32b92473_dd418a1a","updated":"2026-09-15 16:44:41.000000000","message":"Not done","commit_id":"40cfe5c6d64dcd4fb6cbe8dbd3268a21527e71a3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"745126b44dc27fc8a92978e16775aa15322a1778","unresolved":false,"context_lines":[{"line_number":20,"context_line":" *"},{"line_number":21,"context_line":" *  You should have received a copy of the GNU General Public License along"},{"line_number":22,"context_line":" *  with this program; if not, write to the Free Software Foundation, Inc.,"},{"line_number":23,"context_line":" *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."},{"line_number":24,"context_line":" */"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"#include \"session_id.h\""}],"source_content_type":"text/x-csrc","patch_set":26,"id":"32b92473_dd418a1a","line":23,"in_reply_to":"48c942e9_b37ff5c7","updated":"2026-08-08 21:53:02.000000000","message":"Done","commit_id":"40cfe5c6d64dcd4fb6cbe8dbd3268a21527e71a3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"ecc5e82adacd714139a1f454367badf9559afb3f","unresolved":false,"context_lines":[{"line_number":20,"context_line":" *"},{"line_number":21,"context_line":" *  You should have received a copy of the GNU General Public License along"},{"line_number":22,"context_line":" *  with this program; if not, write to the Free Software Foundation, Inc.,"},{"line_number":23,"context_line":" *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."},{"line_number":24,"context_line":" */"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"#include \"session_id.h\""}],"source_content_type":"text/x-csrc","patch_set":26,"id":"6c2ad03d_31f35e3c","line":23,"in_reply_to":"ae09b1f9_b61fd358","updated":"2026-09-15 16:55:43.000000000","message":"Should be done now!","commit_id":"40cfe5c6d64dcd4fb6cbe8dbd3268a21527e71a3"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"f2ad96d3ed3e793728e30e9b78af4beed21585ab","unresolved":true,"context_lines":[{"line_number":58,"context_line":"{"},{"line_number":59,"context_line":"    const uint64_t sid_hv \u003d hash_value(m-\u003esid_hash, sid);"},{"line_number":60,"context_line":"    struct hash_bucket *sid_bucket \u003d hash_bucket(m-\u003esid_hash, sid_hv);"},{"line_number":61,"context_line":"    struct hash_element *he_sid \u003d hash_lookup_fast(m-\u003esid_hash, sid_bucket, sid, sid_hv);"},{"line_number":62,"context_line":"    if (he_sid)"},{"line_number":63,"context_line":"    {"},{"line_number":64,"context_line":"        struct multi_instance *mi \u003d he_sid-\u003evalue;"}],"source_content_type":"text/x-csrc","patch_set":26,"id":"9082db0b_a7b8f735","line":61,"updated":"2026-08-07 15:57:10.000000000","message":"should use `multi_hash_sid_lookup()`","commit_id":"40cfe5c6d64dcd4fb6cbe8dbd3268a21527e71a3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"745126b44dc27fc8a92978e16775aa15322a1778","unresolved":true,"context_lines":[{"line_number":58,"context_line":"{"},{"line_number":59,"context_line":"    const uint64_t sid_hv \u003d hash_value(m-\u003esid_hash, sid);"},{"line_number":60,"context_line":"    struct hash_bucket *sid_bucket \u003d hash_bucket(m-\u003esid_hash, sid_hv);"},{"line_number":61,"context_line":"    struct hash_element *he_sid \u003d hash_lookup_fast(m-\u003esid_hash, sid_bucket, sid, sid_hv);"},{"line_number":62,"context_line":"    if (he_sid)"},{"line_number":63,"context_line":"    {"},{"line_number":64,"context_line":"        struct multi_instance *mi \u003d he_sid-\u003evalue;"}],"source_content_type":"text/x-csrc","patch_set":26,"id":"a7038ae0_64e00167","line":61,"in_reply_to":"9082db0b_a7b8f735","updated":"2026-08-08 21:53:02.000000000","message":"It looks like that but that does not actually work. The function hash_remove_fast later the function requires sid_bucket and multi_hash_sid_lookup does not actually return that.","commit_id":"40cfe5c6d64dcd4fb6cbe8dbd3268a21527e71a3"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"b163739decb32ab68bf17bf1b85531d2ef310b5d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"{"},{"line_number":59,"context_line":"    const uint64_t sid_hv \u003d hash_value(m-\u003esid_hash, sid);"},{"line_number":60,"context_line":"    struct hash_bucket *sid_bucket \u003d hash_bucket(m-\u003esid_hash, sid_hv);"},{"line_number":61,"context_line":"    struct hash_element *he_sid \u003d hash_lookup_fast(m-\u003esid_hash, sid_bucket, sid, sid_hv);"},{"line_number":62,"context_line":"    if (he_sid)"},{"line_number":63,"context_line":"    {"},{"line_number":64,"context_line":"        struct multi_instance *mi \u003d he_sid-\u003evalue;"}],"source_content_type":"text/x-csrc","patch_set":26,"id":"70845c90_d3187834","line":61,"in_reply_to":"a7038ae0_64e00167","updated":"2026-08-10 14:20:05.000000000","message":"Acknowledged","commit_id":"40cfe5c6d64dcd4fb6cbe8dbd3268a21527e71a3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"9f2d247fe1f65704b89258d94950564f8c6f72ea","unresolved":false,"context_lines":[{"line_number":22,"context_line":" *  with this program; if not, see \u003chttps://www.gnu.org/licenses/\u003e."},{"line_number":23,"context_line":" */"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"#include \"session_id.h\""},{"line_number":26,"context_line":"#include \"multi.h\""},{"line_number":27,"context_line":"#include \"list.h\""},{"line_number":28,"context_line":"#include \"siphash.h\""}],"source_content_type":"text/x-csrc","patch_set":31,"id":"d232c564_7886b01b","line":25,"updated":"2026-09-30 19:23:48.000000000","message":"Missing include guard. Double inclusion fails with `redefinition of \u0027multi_hash_sid_add\u0027`. Works today only because each of the three callers includes it once.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"b7f1d63ee7218180f53ca4264d41691581a7e405","unresolved":true,"context_lines":[{"line_number":22,"context_line":" *  with this program; if not, see \u003chttps://www.gnu.org/licenses/\u003e."},{"line_number":23,"context_line":" */"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"#include \"session_id.h\""},{"line_number":26,"context_line":"#include \"multi.h\""},{"line_number":27,"context_line":"#include \"list.h\""},{"line_number":28,"context_line":"#include \"siphash.h\""}],"source_content_type":"text/x-csrc","patch_set":31,"id":"e0b93163_1b64213e","line":25,"in_reply_to":"d232c564_7886b01b","updated":"2026-09-30 19:26:28.000000000","message":"Re-opening.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"5bcc1ab9d2225eefd45a8a93c17d967f18bed694","unresolved":false,"context_lines":[{"line_number":22,"context_line":" *  with this program; if not, see \u003chttps://www.gnu.org/licenses/\u003e."},{"line_number":23,"context_line":" */"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"#include \"session_id.h\""},{"line_number":26,"context_line":"#include \"multi.h\""},{"line_number":27,"context_line":"#include \"list.h\""},{"line_number":28,"context_line":"#include \"siphash.h\""}],"source_content_type":"text/x-csrc","patch_set":31,"id":"204548f2_e2afe61f","line":25,"in_reply_to":"e0b93163_1b64213e","updated":"2026-10-07 11:42:50.000000000","message":"Acknowledged","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"3d917b805de67fcbc28071b4ac6e003802903639","unresolved":false,"context_lines":[{"line_number":22,"context_line":" *  with this program; if not, see \u003chttps://www.gnu.org/licenses/\u003e."},{"line_number":23,"context_line":" */"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"#include \"session_id.h\""},{"line_number":26,"context_line":"#include \"multi.h\""},{"line_number":27,"context_line":"#include \"list.h\""},{"line_number":28,"context_line":"#include \"siphash.h\""}],"source_content_type":"text/x-csrc","patch_set":31,"id":"6d20232e_2d865ebb","line":25,"in_reply_to":"e0b93163_1b64213e","updated":"2026-10-08 10:08:25.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"9f2d247fe1f65704b89258d94950564f8c6f72ea","unresolved":false,"context_lines":[{"line_number":28,"context_line":"#include \"siphash.h\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"inline static void"},{"line_number":31,"context_line":"multi_hash_sid_add(struct multi_context *m, struct session_id *sid,"},{"line_number":32,"context_line":"                   struct multi_instance *mi)"},{"line_number":33,"context_line":"{"},{"line_number":34,"context_line":"    /* This must only be called if the multi instance is not already present"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"f6a39389_12cf2385","line":31,"updated":"2026-09-30 19:23:48.000000000","message":"`sid` can be const.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"3d917b805de67fcbc28071b4ac6e003802903639","unresolved":false,"context_lines":[{"line_number":28,"context_line":"#include \"siphash.h\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"inline static void"},{"line_number":31,"context_line":"multi_hash_sid_add(struct multi_context *m, struct session_id *sid,"},{"line_number":32,"context_line":"                   struct multi_instance *mi)"},{"line_number":33,"context_line":"{"},{"line_number":34,"context_line":"    /* This must only be called if the multi instance is not already present"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"1e942f9b_24f9fe27","line":31,"in_reply_to":"b8d6f45a_80209fa8","updated":"2026-10-08 10:08:25.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"5bcc1ab9d2225eefd45a8a93c17d967f18bed694","unresolved":false,"context_lines":[{"line_number":28,"context_line":"#include \"siphash.h\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"inline static void"},{"line_number":31,"context_line":"multi_hash_sid_add(struct multi_context *m, struct session_id *sid,"},{"line_number":32,"context_line":"                   struct multi_instance *mi)"},{"line_number":33,"context_line":"{"},{"line_number":34,"context_line":"    /* This must only be called if the multi instance is not already present"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"4cf3e54b_d6a05372","line":31,"in_reply_to":"b8d6f45a_80209fa8","updated":"2026-10-07 11:42:50.000000000","message":"Done","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"},{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"b7f1d63ee7218180f53ca4264d41691581a7e405","unresolved":true,"context_lines":[{"line_number":28,"context_line":"#include \"siphash.h\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"inline static void"},{"line_number":31,"context_line":"multi_hash_sid_add(struct multi_context *m, struct session_id *sid,"},{"line_number":32,"context_line":"                   struct multi_instance *mi)"},{"line_number":33,"context_line":"{"},{"line_number":34,"context_line":"    /* This must only be called if the multi instance is not already present"}],"source_content_type":"text/x-csrc","patch_set":31,"id":"b8d6f45a_80209fa8","line":31,"in_reply_to":"f6a39389_12cf2385","updated":"2026-09-30 19:26:28.000000000","message":"Re-opening.","commit_id":"2bcda4dcca45f2ff779b0aa30ae989696ccd01d3"}],"tests/unit_tests/openvpn/test_misc.c":[{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"6b4618739f3cb09b1211ec06646c238950d46563","unresolved":true,"context_lines":[{"line_number":140,"context_line":"}"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"static uint32_t"},{"line_number":143,"context_line":"get_random(void)"},{"line_number":144,"context_line":"{"},{"line_number":145,"context_line":"    /* rand() is not very random, but it\u0027s C99 and this is just for testing */"},{"line_number":146,"context_line":"    return (uint32_t)rand();"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"c82c40ee_2c2abdc4","side":"PARENT","line":143,"updated":"2026-07-06 12:47:29.000000000","message":"```\ntest_misc.c: In function ‘test_list’:\ntest_misc.c:258:19: error: conversion from ‘long int’ to ‘uint32_t’ {aka ‘unsigned int’} may change value [-Werror\u003dconversion]\n  258 |             inc \u003d (get_random() % 3) + 1;\n      |                   ^\n```","commit_id":"30112912578226bfe2e750920037a567b6ca5a16"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"3441e3d3513906e4366fa4905ac47f060ad15deb","unresolved":false,"context_lines":[{"line_number":140,"context_line":"}"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"static uint32_t"},{"line_number":143,"context_line":"get_random(void)"},{"line_number":144,"context_line":"{"},{"line_number":145,"context_line":"    /* rand() is not very random, but it\u0027s C99 and this is just for testing */"},{"line_number":146,"context_line":"    return (uint32_t)rand();"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"b66473fc_30efedcc","side":"PARENT","line":143,"in_reply_to":"c82c40ee_2c2abdc4","updated":"2026-07-14 13:01:00.000000000","message":"Done","commit_id":"30112912578226bfe2e750920037a567b6ca5a16"}]}
