)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"119af713a1dfea0cf9befcb6badd6fa0371c9938","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e512390b_6b3716a5","updated":"2025-09-16 21:03:19.000000000","message":"patch looks good to me, but I have a few nitpicks in line with Heiko\u0027s opinion.","commit_id":"a1ae3c6d0a6c573eebbb1b2f5f2d2b58394b6cfb"}],"src/openvpn/route.c":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"709b6e664a56739a895f3922631a33bd5293b57e","unresolved":true,"context_lines":[{"line_number":710,"context_line":"    return ret;"},{"line_number":711,"context_line":"}"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"/**"},{"line_number":714,"context_line":" * check whether an IPv6 host address is covered by a given route_ipv6"},{"line_number":715,"context_line":" * (not the most beautiful implementation in the world, but portable and"},{"line_number":716,"context_line":" * \"good enough\")"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"1fc5a8a3_d7b71b82","line":713,"updated":"2025-09-16 11:50:39.000000000","message":"Why make this doxygen? The doxygen part is covered by the comment at the declaration, isn\u0027t it?","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"1cc34201cdc4214dc34a1df78cf7ce86c55d40f7","unresolved":true,"context_lines":[{"line_number":710,"context_line":"    return ret;"},{"line_number":711,"context_line":"}"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"/**"},{"line_number":714,"context_line":" * check whether an IPv6 host address is covered by a given route_ipv6"},{"line_number":715,"context_line":" * (not the most beautiful implementation in the world, but portable and"},{"line_number":716,"context_line":" * \"good enough\")"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"3c335e9d_90299601","line":713,"in_reply_to":"1fc5a8a3_d7b71b82","updated":"2025-09-16 14:35:18.000000000","message":"Yeah the doxygen in the header should be good enough","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"d9f29311edcdb98967a6af88bad4da4dd014c986","unresolved":true,"context_lines":[{"line_number":716,"context_line":" * \"good enough\")"},{"line_number":717,"context_line":" */"},{"line_number":718,"context_line":"bool"},{"line_number":719,"context_line":"route_ipv6_match_host(const struct in6_addr *network, unsigned int bits, const struct in6_addr *host)"},{"line_number":720,"context_line":"{"},{"line_number":721,"context_line":"    if (bits \u003e 128)"},{"line_number":722,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"1b0d244a_0432b565","line":719,"updated":"2025-09-16 12:12:28.000000000","message":"The name is somewhat outdated with the new signature of the function. Maybe something like `ipv6_net_contains_host` would fit better now.","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"119af713a1dfea0cf9befcb6badd6fa0371c9938","unresolved":true,"context_lines":[{"line_number":716,"context_line":" * \"good enough\")"},{"line_number":717,"context_line":" */"},{"line_number":718,"context_line":"bool"},{"line_number":719,"context_line":"route_ipv6_match_host(const struct in6_addr *network, unsigned int bits, const struct in6_addr *host)"},{"line_number":720,"context_line":"{"},{"line_number":721,"context_line":"    if (bits \u003e 128)"},{"line_number":722,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"c97633f9_e67e2e01","line":719,"in_reply_to":"1b0d244a_0432b565","updated":"2025-09-16 21:03:19.000000000","message":"I agree - that also makes it obvious that there is no route involved anymore","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"5db28eca9ebc4010bb167bb931039fbbbd709132","unresolved":false,"context_lines":[{"line_number":716,"context_line":" * \"good enough\")"},{"line_number":717,"context_line":" */"},{"line_number":718,"context_line":"bool"},{"line_number":719,"context_line":"route_ipv6_match_host(const struct in6_addr *network, unsigned int bits, const struct in6_addr *host)"},{"line_number":720,"context_line":"{"},{"line_number":721,"context_line":"    if (bits \u003e 128)"},{"line_number":722,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"80b8c376_b808626c","line":719,"in_reply_to":"c97633f9_e67e2e01","updated":"2025-09-18 03:14:36.000000000","message":"Done","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"d9f29311edcdb98967a6af88bad4da4dd014c986","unresolved":true,"context_lines":[{"line_number":723,"context_line":"        return false;"},{"line_number":724,"context_line":"    }"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    int i \u003d 0;"},{"line_number":727,"context_line":"    for (i \u003d 0; bits \u003e\u003d 8; i++, bits -\u003d 8)"},{"line_number":728,"context_line":"    {"},{"line_number":729,"context_line":"        if (network-\u003es6_addr[i] !\u003d host-\u003es6_addr[i])"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"b5f1c14b_74c1e681","line":726,"updated":"2025-09-16 12:12:28.000000000","message":"Don\u0027t have to initialize i as it is done in the loop.","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"667b077bc6bd45182fff381d55760d69f8047a98","unresolved":true,"context_lines":[{"line_number":723,"context_line":"        return false;"},{"line_number":724,"context_line":"    }"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    int i \u003d 0;"},{"line_number":727,"context_line":"    for (i \u003d 0; bits \u003e\u003d 8; i++, bits -\u003d 8)"},{"line_number":728,"context_line":"    {"},{"line_number":729,"context_line":"        if (network-\u003es6_addr[i] !\u003d host-\u003es6_addr[i])"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"b4f0cf06_f7cd3760","line":726,"in_reply_to":"128cf6ac_eb198fb9","updated":"2025-10-06 12:27:05.000000000","message":"ah sorry. I misread that comment.","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"119af713a1dfea0cf9befcb6badd6fa0371c9938","unresolved":true,"context_lines":[{"line_number":723,"context_line":"        return false;"},{"line_number":724,"context_line":"    }"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    int i \u003d 0;"},{"line_number":727,"context_line":"    for (i \u003d 0; bits \u003e\u003d 8; i++, bits -\u003d 8)"},{"line_number":728,"context_line":"    {"},{"line_number":729,"context_line":"        if (network-\u003es6_addr[i] !\u003d host-\u003es6_addr[i])"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"128cf6ac_eb198fb9","line":726,"in_reply_to":"2f55ee96_d20f3430","updated":"2025-09-16 21:03:19.000000000","message":"Heiko said there is no need to \"initialize\" i. So just drop \"\u003d 0\" as it\u0027s initialized by the for loop.","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"ba3502431a6c1c8444284a5b69b9159bc38fc21c","unresolved":true,"context_lines":[{"line_number":723,"context_line":"        return false;"},{"line_number":724,"context_line":"    }"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    int i \u003d 0;"},{"line_number":727,"context_line":"    for (i \u003d 0; bits \u003e\u003d 8; i++, bits -\u003d 8)"},{"line_number":728,"context_line":"    {"},{"line_number":729,"context_line":"        if (network-\u003es6_addr[i] !\u003d host-\u003es6_addr[i])"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"829340fe_7ea4f3b8","line":726,"in_reply_to":"2f55ee96_d20f3430","updated":"2025-09-16 20:57:43.000000000","message":"Yeah, I meant `int i;` is enough here, like it was before.","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"131eaa6e3cfb24de56dc9b7da1529ed527e2e408","unresolved":true,"context_lines":[{"line_number":723,"context_line":"        return false;"},{"line_number":724,"context_line":"    }"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    int i \u003d 0;"},{"line_number":727,"context_line":"    for (i \u003d 0; bits \u003e\u003d 8; i++, bits -\u003d 8)"},{"line_number":728,"context_line":"    {"},{"line_number":729,"context_line":"        if (network-\u003es6_addr[i] !\u003d host-\u003es6_addr[i])"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"2f55ee96_d20f3430","line":726,"in_reply_to":"b5f1c14b_74c1e681","updated":"2025-09-16 14:14:01.000000000","message":"No i is used outside the loop in line 740/742","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"709b6e664a56739a895f3922631a33bd5293b57e","unresolved":true,"context_lines":[{"line_number":737,"context_line":"        return true;"},{"line_number":738,"context_line":"    }"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    unsigned mask \u003d 0xff \u003c\u003c (8 - bits);"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"    if ((network-\u003es6_addr[i] \u0026 mask) \u003d\u003d (host-\u003es6_addr[i] \u0026 mask))"},{"line_number":743,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"c57f9efb_cf95f1a2","line":740,"updated":"2025-09-16 11:50:39.000000000","message":"any particular reason you left the \"int\" off here but used in the other places?","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"667b077bc6bd45182fff381d55760d69f8047a98","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        return true;"},{"line_number":738,"context_line":"    }"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    unsigned mask \u003d 0xff \u003c\u003c (8 - bits);"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"    if ((network-\u003es6_addr[i] \u0026 mask) \u003d\u003d (host-\u003es6_addr[i] \u0026 mask))"},{"line_number":743,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"b5cfb3f4_7e1356d9","line":740,"in_reply_to":"5e5c6e75_616c359f","updated":"2025-10-06 12:27:05.000000000","message":"Done","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"131eaa6e3cfb24de56dc9b7da1529ed527e2e408","unresolved":true,"context_lines":[{"line_number":737,"context_line":"        return true;"},{"line_number":738,"context_line":"    }"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    unsigned mask \u003d 0xff \u003c\u003c (8 - bits);"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"    if ((network-\u003es6_addr[i] \u0026 mask) \u003d\u003d (host-\u003es6_addr[i] \u0026 mask))"},{"line_number":743,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"5e5c6e75_616c359f","line":740,"in_reply_to":"c57f9efb_cf95f1a2","updated":"2025-09-16 14:14:01.000000000","message":"no. Will fix it.","commit_id":"7f15db340b3d904316df7a7cc0ca7d95065f5ea6"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"119af713a1dfea0cf9befcb6badd6fa0371c9938","unresolved":true,"context_lines":[{"line_number":713,"context_line":"bool"},{"line_number":714,"context_line":"route_ipv6_match_host(const struct in6_addr *network, unsigned int bits, const struct in6_addr *host)"},{"line_number":715,"context_line":"{"},{"line_number":716,"context_line":"    /* (not the most beautiful implementation in the world, but portable and"},{"line_number":717,"context_line":"     * \"good enough\") */"},{"line_number":718,"context_line":"    if (bits \u003e 128)"},{"line_number":719,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"336ca137_8e3a6ff8","line":716,"updated":"2025-09-16 21:03:19.000000000","message":"maybe drop opening and closing parenthesis?","commit_id":"a1ae3c6d0a6c573eebbb1b2f5f2d2b58394b6cfb"}]}
