)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"f75d625fefa1a03f41fdc23342debc8ef48272fb","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"17ecccf6_8ef95ae7","updated":"2024-11-26 18:56:02.000000000","message":"Changes 99% done.  One remaining.  strncpy? Not sure what strcpynt is.","commit_id":"101949da2caa7319772d526757818e2bd3cd2361"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"002d570cce9e223a8640f66d17b171c3c9b1048b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"8288d6e5_9b984559","in_reply_to":"17ecccf6_8ef95ae7","updated":"2024-11-26 18:58:40.000000000","message":"Done","commit_id":"101949da2caa7319772d526757818e2bd3cd2361"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"0e8057bc56473bc817ea213f6f69c7fa1e353337","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a5f426d3_5d69bede","updated":"2024-11-26 18:58:30.000000000","message":"done. Assuming strncpy based on destination size.","commit_id":"b59359244c5462681c86c8c1f7fb1ef7409961ef"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d9b4cef8129fc3fe8cc3c14631ca4bd2f33528ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2373c706_a667479b","updated":"2024-11-27 10:52:59.000000000","message":"The code should work, technically, but since we\u0027re in a review cycle, I\u0027ve found more things that should be changed to confirm to our style guide (or to just not copy existing ugliness).\n\nWe do have an uncrustify config in the source tree to get the whitespace auto-fixed (dev-tools/uncrustify.conf), but you need a slightly older uncrustify version (0.72) to actually produce correct output.","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"5226f5375b3d74badca094e5358defdeb5d2968a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"4ad72a3f_5f3bf3d6","updated":"2024-11-26 19:15:48.000000000","message":"good call out on the strncpy too. It exposed we were running over ifname since we use full paths.\n\nAdjusted to PATH_MAX length on Haiku for sanity.","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"69873f4ef2b79d6dd8558a07ee051743ad0145d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"9455d7b1_cbc1a32a","updated":"2024-11-28 15:14:24.000000000","message":"All complete.\n\nI should note that the full functionality of these changes depends on https://review.haiku-os.org/c/haiku/+/8592\n\n(tldr; we only accept \"default\" for the default gateway, while everyone else seems to also accept 0.0.0.0 / ::.    Instead of hacking in \"0.0.0.0 -\u003e default\" in the openvpn source code, I opted to add support for \"0.0.0.0\" as the default gw in the route command of Haiku)\n\nI\u0027m planning on getting that change into the most recent stable release of Haiku as well to make sure openvpn works out of the box.","commit_id":"57b80fccabf0e9b6225d410cdeac3d941c43589d"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"a67935d4d20cdac9c70f179ca4d9386aac6ddf94","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"a3de344e_49cfd4ce","updated":"2024-12-05 17:24:13.000000000","message":"The way the arguments to the `route` call are set up looks a bit... unusual, but this is not for us to judge.  If you say this is the way to install and remove routes, we will only check that the code adheres to style and quality, and this all looks good now...","commit_id":"53074aae41dde412892ebfd68a9d2f829b65deca"}],"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":"e9ad7e14bea6bb63aff6b52703d16cc47b933e9b","unresolved":true,"context_lines":[{"line_number":3937,"context_line":"    CLEAR(*rgi);"},{"line_number":3938,"context_line":""},{"line_number":3939,"context_line":"    int sockfd \u003d -1;"},{"line_number":3940,"context_line":"    sockfd \u003d socket(AF_INET, SOCK_DGRAM, 0);"},{"line_number":3941,"context_line":"    if (sockfd \u003c 0) {"},{"line_number":3942,"context_line":"        msg(M_INFO, \"%s: Error opening socket for AF_INET\", __func__);"},{"line_number":3943,"context_line":"        return;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"cb24a5fc_d8a53a2e","line":3940,"updated":"2024-11-26 17:08:51.000000000","message":"Can be merged with the previous line?","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"f75d625fefa1a03f41fdc23342debc8ef48272fb","unresolved":false,"context_lines":[{"line_number":3937,"context_line":"    CLEAR(*rgi);"},{"line_number":3938,"context_line":""},{"line_number":3939,"context_line":"    int sockfd \u003d -1;"},{"line_number":3940,"context_line":"    sockfd \u003d socket(AF_INET, SOCK_DGRAM, 0);"},{"line_number":3941,"context_line":"    if (sockfd \u003c 0) {"},{"line_number":3942,"context_line":"        msg(M_INFO, \"%s: Error opening socket for AF_INET\", __func__);"},{"line_number":3943,"context_line":"        return;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"b11d677f_d33d20c9","line":3940,"in_reply_to":"cb24a5fc_d8a53a2e","updated":"2024-11-26 18:56:02.000000000","message":"Done","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"e9ad7e14bea6bb63aff6b52703d16cc47b933e9b","unresolved":true,"context_lines":[{"line_number":3939,"context_line":"    int sockfd \u003d -1;"},{"line_number":3940,"context_line":"    sockfd \u003d socket(AF_INET, SOCK_DGRAM, 0);"},{"line_number":3941,"context_line":"    if (sockfd \u003c 0) {"},{"line_number":3942,"context_line":"        msg(M_INFO, \"%s: Error opening socket for AF_INET\", __func__);"},{"line_number":3943,"context_line":"        return;"},{"line_number":3944,"context_line":"    }"},{"line_number":3945,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"e8a07f51_932f4e4e","line":3942,"updated":"2024-11-26 17:08:51.000000000","message":"M_ERRNO?","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"f75d625fefa1a03f41fdc23342debc8ef48272fb","unresolved":false,"context_lines":[{"line_number":3939,"context_line":"    int sockfd \u003d -1;"},{"line_number":3940,"context_line":"    sockfd \u003d socket(AF_INET, SOCK_DGRAM, 0);"},{"line_number":3941,"context_line":"    if (sockfd \u003c 0) {"},{"line_number":3942,"context_line":"        msg(M_INFO, \"%s: Error opening socket for AF_INET\", __func__);"},{"line_number":3943,"context_line":"        return;"},{"line_number":3944,"context_line":"    }"},{"line_number":3945,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ad7dfc0e_82230690","line":3942,"in_reply_to":"e8a07f51_932f4e4e","updated":"2024-11-26 18:56:02.000000000","message":"Done","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"e9ad7e14bea6bb63aff6b52703d16cc47b933e9b","unresolved":true,"context_lines":[{"line_number":3946,"context_line":"    struct ifconf config;"},{"line_number":3947,"context_line":"    config.ifc_len \u003d sizeof(config.ifc_value);"},{"line_number":3948,"context_line":"    if (ioctl(sockfd, SIOCGRTSIZE, \u0026config, sizeof(struct ifconf)) \u003c 0) {"},{"line_number":3949,"context_line":"        msg(M_INFO, \"%s: Error getting routing table size\", __func__);"},{"line_number":3950,"context_line":"        return;"},{"line_number":3951,"context_line":"    }"},{"line_number":3952,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"4b71cd90_2cc12dc0","line":3949,"updated":"2024-11-26 17:08:51.000000000","message":"M_ERRNO?","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"f75d625fefa1a03f41fdc23342debc8ef48272fb","unresolved":false,"context_lines":[{"line_number":3946,"context_line":"    struct ifconf config;"},{"line_number":3947,"context_line":"    config.ifc_len \u003d sizeof(config.ifc_value);"},{"line_number":3948,"context_line":"    if (ioctl(sockfd, SIOCGRTSIZE, \u0026config, sizeof(struct ifconf)) \u003c 0) {"},{"line_number":3949,"context_line":"        msg(M_INFO, \"%s: Error getting routing table size\", __func__);"},{"line_number":3950,"context_line":"        return;"},{"line_number":3951,"context_line":"    }"},{"line_number":3952,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"edd8c58c_a5545f1a","line":3949,"in_reply_to":"4b71cd90_2cc12dc0","updated":"2024-11-26 18:56:02.000000000","message":"Done","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"e9ad7e14bea6bb63aff6b52703d16cc47b933e9b","unresolved":true,"context_lines":[{"line_number":3955,"context_line":"        return;"},{"line_number":3956,"context_line":""},{"line_number":3957,"context_line":"    void *buffer \u003d malloc(size);"},{"line_number":3958,"context_line":"    if (buffer \u003d\u003d NULL) {"},{"line_number":3959,"context_line":"        fprintf(stderr, \"%s: Out of memory.\\n\", __func__);"},{"line_number":3960,"context_line":"        return;"},{"line_number":3961,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"cdfe37bd_7ed2e6c0","line":3958,"range":{"start_line":3958,"start_character":18,"end_line":3958,"end_character":19},"updated":"2024-11-26 17:08:51.000000000","message":"Use `check_malloc_return`.","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"f75d625fefa1a03f41fdc23342debc8ef48272fb","unresolved":false,"context_lines":[{"line_number":3955,"context_line":"        return;"},{"line_number":3956,"context_line":""},{"line_number":3957,"context_line":"    void *buffer \u003d malloc(size);"},{"line_number":3958,"context_line":"    if (buffer \u003d\u003d NULL) {"},{"line_number":3959,"context_line":"        fprintf(stderr, \"%s: Out of memory.\\n\", __func__);"},{"line_number":3960,"context_line":"        return;"},{"line_number":3961,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"15117370_186fb3a1","line":3958,"range":{"start_line":3958,"start_character":18,"end_line":3958,"end_character":19},"in_reply_to":"cdfe37bd_7ed2e6c0","updated":"2024-11-26 18:56:02.000000000","message":"Done","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"e9ad7e14bea6bb63aff6b52703d16cc47b933e9b","unresolved":true,"context_lines":[{"line_number":3973,"context_line":"        if ((route.flags \u0026 RTF_GATEWAY) !\u003d 0 \u0026\u0026 (route.flags \u0026 RTF_DEFAULT) !\u003d 0) {"},{"line_number":3974,"context_line":"            rgi-\u003egateway.addr \u003d ntohl(((struct sockaddr_in *)route.gateway)-\u003esin_addr.s_addr);"},{"line_number":3975,"context_line":"            rgi-\u003eflags \u003d RGI_ADDR_DEFINED | RGI_IFACE_DEFINED;"},{"line_number":3976,"context_line":"            strcpy(rgi-\u003eiface, interface-\u003eifr_name);"},{"line_number":3977,"context_line":"        }"},{"line_number":3978,"context_line":""},{"line_number":3979,"context_line":"        int32 addressSize \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"2837f36b_f5691068","line":3976,"updated":"2024-11-26 17:08:51.000000000","message":"Should probably use `strcpynt`","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"f75d625fefa1a03f41fdc23342debc8ef48272fb","unresolved":true,"context_lines":[{"line_number":3973,"context_line":"        if ((route.flags \u0026 RTF_GATEWAY) !\u003d 0 \u0026\u0026 (route.flags \u0026 RTF_DEFAULT) !\u003d 0) {"},{"line_number":3974,"context_line":"            rgi-\u003egateway.addr \u003d ntohl(((struct sockaddr_in *)route.gateway)-\u003esin_addr.s_addr);"},{"line_number":3975,"context_line":"            rgi-\u003eflags \u003d RGI_ADDR_DEFINED | RGI_IFACE_DEFINED;"},{"line_number":3976,"context_line":"            strcpy(rgi-\u003eiface, interface-\u003eifr_name);"},{"line_number":3977,"context_line":"        }"},{"line_number":3978,"context_line":""},{"line_number":3979,"context_line":"        int32 addressSize \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"c99a0ee5_6001d640","line":3976,"in_reply_to":"2837f36b_f5691068","updated":"2024-11-26 18:56:02.000000000","message":"strncpy?","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"0e8057bc56473bc817ea213f6f69c7fa1e353337","unresolved":false,"context_lines":[{"line_number":3973,"context_line":"        if ((route.flags \u0026 RTF_GATEWAY) !\u003d 0 \u0026\u0026 (route.flags \u0026 RTF_DEFAULT) !\u003d 0) {"},{"line_number":3974,"context_line":"            rgi-\u003egateway.addr \u003d ntohl(((struct sockaddr_in *)route.gateway)-\u003esin_addr.s_addr);"},{"line_number":3975,"context_line":"            rgi-\u003eflags \u003d RGI_ADDR_DEFINED | RGI_IFACE_DEFINED;"},{"line_number":3976,"context_line":"            strcpy(rgi-\u003eiface, interface-\u003eifr_name);"},{"line_number":3977,"context_line":"        }"},{"line_number":3978,"context_line":""},{"line_number":3979,"context_line":"        int32 addressSize \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"0fad7f6b_be1adb0d","line":3976,"in_reply_to":"c99a0ee5_6001d640","updated":"2024-11-26 18:58:30.000000000","message":"done. Assuming strncpy","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"e9ad7e14bea6bb63aff6b52703d16cc47b933e9b","unresolved":true,"context_lines":[{"line_number":3976,"context_line":"            strcpy(rgi-\u003eiface, interface-\u003eifr_name);"},{"line_number":3977,"context_line":"        }"},{"line_number":3978,"context_line":""},{"line_number":3979,"context_line":"        int32 addressSize \u003d 0;"},{"line_number":3980,"context_line":"        if (route.destination !\u003d NULL)"},{"line_number":3981,"context_line":"            addressSize +\u003d route.destination-\u003esa_len;"},{"line_number":3982,"context_line":"        if (route.mask !\u003d NULL)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"259f47d5_648923cf","line":3979,"updated":"2024-11-26 17:08:51.000000000","message":"no CamelCase please.","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"f75d625fefa1a03f41fdc23342debc8ef48272fb","unresolved":false,"context_lines":[{"line_number":3976,"context_line":"            strcpy(rgi-\u003eiface, interface-\u003eifr_name);"},{"line_number":3977,"context_line":"        }"},{"line_number":3978,"context_line":""},{"line_number":3979,"context_line":"        int32 addressSize \u003d 0;"},{"line_number":3980,"context_line":"        if (route.destination !\u003d NULL)"},{"line_number":3981,"context_line":"            addressSize +\u003d route.destination-\u003esa_len;"},{"line_number":3982,"context_line":"        if (route.mask !\u003d NULL)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"a9cb3152_0855c379","line":3979,"in_reply_to":"259f47d5_648923cf","updated":"2024-11-26 18:56:02.000000000","message":"Done","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"e9ad7e14bea6bb63aff6b52703d16cc47b933e9b","unresolved":true,"context_lines":[{"line_number":3987,"context_line":"        interface \u003d (struct ifreq*)((addr_t)interface + IF_NAMESIZE"},{"line_number":3988,"context_line":"            + sizeof(struct route_entry) + addressSize);"},{"line_number":3989,"context_line":"    }"},{"line_number":3990,"context_line":"}"},{"line_number":3991,"context_line":""},{"line_number":3992,"context_line":"void"},{"line_number":3993,"context_line":"get_default_gateway_ipv6(struct route_ipv6_gateway_info *rgi6,"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"dfdc0992_8f8edb22","line":3990,"updated":"2024-11-26 17:08:51.000000000","message":"This seems to leak memory from the malloc?","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"f75d625fefa1a03f41fdc23342debc8ef48272fb","unresolved":false,"context_lines":[{"line_number":3987,"context_line":"        interface \u003d (struct ifreq*)((addr_t)interface + IF_NAMESIZE"},{"line_number":3988,"context_line":"            + sizeof(struct route_entry) + addressSize);"},{"line_number":3989,"context_line":"    }"},{"line_number":3990,"context_line":"}"},{"line_number":3991,"context_line":""},{"line_number":3992,"context_line":"void"},{"line_number":3993,"context_line":"get_default_gateway_ipv6(struct route_ipv6_gateway_info *rgi6,"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"3a9f5015_6ae45d40","line":3990,"in_reply_to":"dfdc0992_8f8edb22","updated":"2024-11-26 18:56:02.000000000","message":"Done","commit_id":"f5353b93d286eae81abee2713b80d8499a680e5e"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d9b4cef8129fc3fe8cc3c14631ca4bd2f33528ba","unresolved":true,"context_lines":[{"line_number":1855,"context_line":""},{"line_number":1856,"context_line":"#elif defined(TARGET_HAIKU)"},{"line_number":1857,"context_line":""},{"line_number":1858,"context_line":"    {"},{"line_number":1859,"context_line":"        /* ex: route add /dev/net/ipro1000/0 0.0.0.0 gw 192.168.1.1 netmask 128.0.0.0 */"},{"line_number":1860,"context_line":"        argv_printf(\u0026argv, \"%s add %s inet %s gw %s netmask %s\","},{"line_number":1861,"context_line":"                    ROUTE_PATH,"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"2d7989ed_31075357","line":1858,"updated":"2024-11-27 10:52:59.000000000","message":"please remove this indentation level, it looks unnecessary.\n\n(We used to need this before we went for C99 compatibility, and declaring local variables did not work unless we had a local {} block - but nowadays, this is no longer needed - it\u0027s just that nobody else fixed the other code blocks yet)","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"69873f4ef2b79d6dd8558a07ee051743ad0145d8","unresolved":false,"context_lines":[{"line_number":1855,"context_line":""},{"line_number":1856,"context_line":"#elif defined(TARGET_HAIKU)"},{"line_number":1857,"context_line":""},{"line_number":1858,"context_line":"    {"},{"line_number":1859,"context_line":"        /* ex: route add /dev/net/ipro1000/0 0.0.0.0 gw 192.168.1.1 netmask 128.0.0.0 */"},{"line_number":1860,"context_line":"        argv_printf(\u0026argv, \"%s add %s inet %s gw %s netmask %s\","},{"line_number":1861,"context_line":"                    ROUTE_PATH,"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"6ac793fe_ff5b6200","line":1858,"in_reply_to":"2d7989ed_31075357","updated":"2024-11-28 15:14:24.000000000","message":"Done","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d9b4cef8129fc3fe8cc3c14631ca4bd2f33528ba","unresolved":true,"context_lines":[{"line_number":2347,"context_line":""},{"line_number":2348,"context_line":"#elif defined(TARGET_HAIKU)"},{"line_number":2349,"context_line":""},{"line_number":2350,"context_line":"    {"},{"line_number":2351,"context_line":"        /* ex: route del /dev/net/ipro1000/0 inet 192.168.0.0 gw 192.168.1.1 netmask 255.255.0.0 */"},{"line_number":2352,"context_line":"        argv_printf(\u0026argv, \"%s del %s inet %s gw %s netmask %s\","},{"line_number":2353,"context_line":"                    ROUTE_PATH,"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"a5af820d_fdaa953c","line":2350,"updated":"2024-11-27 10:52:59.000000000","message":"same here","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"69873f4ef2b79d6dd8558a07ee051743ad0145d8","unresolved":false,"context_lines":[{"line_number":2347,"context_line":""},{"line_number":2348,"context_line":"#elif defined(TARGET_HAIKU)"},{"line_number":2349,"context_line":""},{"line_number":2350,"context_line":"    {"},{"line_number":2351,"context_line":"        /* ex: route del /dev/net/ipro1000/0 inet 192.168.0.0 gw 192.168.1.1 netmask 255.255.0.0 */"},{"line_number":2352,"context_line":"        argv_printf(\u0026argv, \"%s del %s inet %s gw %s netmask %s\","},{"line_number":2353,"context_line":"                    ROUTE_PATH,"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"e0159a17_04786e1d","line":2350,"in_reply_to":"a5af820d_fdaa953c","updated":"2024-11-28 15:14:24.000000000","message":"Done","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d9b4cef8129fc3fe8cc3c14631ca4bd2f33528ba","unresolved":true,"context_lines":[{"line_number":2540,"context_line":"        \"needed. The VpnService API allows routes to be set \""},{"line_number":2541,"context_line":"        \"on connect only and will clean up automatically.\");"},{"line_number":2542,"context_line":"#elif defined(TARGET_HAIKU)"},{"line_number":2543,"context_line":"    {"},{"line_number":2544,"context_line":"        /* ex: route del /dev/net/ipro1000/0 inet6 :: gw beef::cafe prefixlen 64 */"},{"line_number":2545,"context_line":"        argv_printf(\u0026argv, \"%s del %s inet6 %s gw %s prefixlen %d\","},{"line_number":2546,"context_line":"                    ROUTE_PATH,"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"631992d6_e721d0c9","line":2543,"updated":"2024-11-27 10:52:59.000000000","message":"same here.\n\nAlso: I see route *deletion* for IPv6 routes, but no route *addition*, and also no ifconfig for IPv6 (other patch).  So maybe IPv6 route deletion should go to a followup patch \"add IPv6 support for Haiku\" which has ifconfig + route add + route delete","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"69873f4ef2b79d6dd8558a07ee051743ad0145d8","unresolved":false,"context_lines":[{"line_number":2540,"context_line":"        \"needed. The VpnService API allows routes to be set \""},{"line_number":2541,"context_line":"        \"on connect only and will clean up automatically.\");"},{"line_number":2542,"context_line":"#elif defined(TARGET_HAIKU)"},{"line_number":2543,"context_line":"    {"},{"line_number":2544,"context_line":"        /* ex: route del /dev/net/ipro1000/0 inet6 :: gw beef::cafe prefixlen 64 */"},{"line_number":2545,"context_line":"        argv_printf(\u0026argv, \"%s del %s inet6 %s gw %s prefixlen %d\","},{"line_number":2546,"context_line":"                    ROUTE_PATH,"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"c21c4740_b10d021b","line":2543,"in_reply_to":"631992d6_e721d0c9","updated":"2024-11-28 15:14:24.000000000","message":"I went ahead and added the IPv6 route addition code.\n\nOur IPv6 stack exists, and is baseline functional, but it\u0027s not well tested and has known faults (thus the priority was low)\n\nHowever, our routing all should work fine... so I went ahead and implemented the ipv6 route add call.","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d9b4cef8129fc3fe8cc3c14631ca4bd2f33528ba","unresolved":true,"context_lines":[{"line_number":3937,"context_line":"    CLEAR(*rgi);"},{"line_number":3938,"context_line":""},{"line_number":3939,"context_line":"    int sockfd \u003d socket(AF_INET, SOCK_DGRAM, 0);"},{"line_number":3940,"context_line":"    if (sockfd \u003c 0) {"},{"line_number":3941,"context_line":"        msg(M_ERRNO, \"%s: Error opening socket for AF_INET\", __func__);"},{"line_number":3942,"context_line":"        return;"},{"line_number":3943,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"3f9c168e_262eae5a","line":3940,"updated":"2024-11-27 10:52:59.000000000","message":"this is a style guide violation - normally, for first time submitters, I\u0027d fix that on the fly but since we\u0027re here anyway...  we require the opening brace to be on its own line\n\n```\nif (thing)\n{\n    /* do something */\n}\n```\n\nalways, no exceptions.","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"69873f4ef2b79d6dd8558a07ee051743ad0145d8","unresolved":false,"context_lines":[{"line_number":3937,"context_line":"    CLEAR(*rgi);"},{"line_number":3938,"context_line":""},{"line_number":3939,"context_line":"    int sockfd \u003d socket(AF_INET, SOCK_DGRAM, 0);"},{"line_number":3940,"context_line":"    if (sockfd \u003c 0) {"},{"line_number":3941,"context_line":"        msg(M_ERRNO, \"%s: Error opening socket for AF_INET\", __func__);"},{"line_number":3942,"context_line":"        return;"},{"line_number":3943,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"ef8e2b2d_3b195cb1","line":3940,"in_reply_to":"3f9c168e_262eae5a","updated":"2024-11-28 15:14:24.000000000","message":"Done","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d9b4cef8129fc3fe8cc3c14631ca4bd2f33528ba","unresolved":true,"context_lines":[{"line_number":3944,"context_line":""},{"line_number":3945,"context_line":"    struct ifconf config;"},{"line_number":3946,"context_line":"    config.ifc_len \u003d sizeof(config.ifc_value);"},{"line_number":3947,"context_line":"    if (ioctl(sockfd, SIOCGRTSIZE, \u0026config, sizeof(struct ifconf)) \u003c 0) {"},{"line_number":3948,"context_line":"        msg(M_ERRNO, \"%s: Error getting routing table size\", __func__);"},{"line_number":3949,"context_line":"        return;"},{"line_number":3950,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"509a08d9_9b43b7cf","line":3947,"updated":"2024-11-27 10:52:59.000000000","message":"this","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"69873f4ef2b79d6dd8558a07ee051743ad0145d8","unresolved":false,"context_lines":[{"line_number":3944,"context_line":""},{"line_number":3945,"context_line":"    struct ifconf config;"},{"line_number":3946,"context_line":"    config.ifc_len \u003d sizeof(config.ifc_value);"},{"line_number":3947,"context_line":"    if (ioctl(sockfd, SIOCGRTSIZE, \u0026config, sizeof(struct ifconf)) \u003c 0) {"},{"line_number":3948,"context_line":"        msg(M_ERRNO, \"%s: Error getting routing table size\", __func__);"},{"line_number":3949,"context_line":"        return;"},{"line_number":3950,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"0e55a08d_ab176494","line":3947,"in_reply_to":"509a08d9_9b43b7cf","updated":"2024-11-28 15:14:24.000000000","message":"Done","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d9b4cef8129fc3fe8cc3c14631ca4bd2f33528ba","unresolved":true,"context_lines":[{"line_number":3951,"context_line":""},{"line_number":3952,"context_line":"    uint32 size \u003d (uint32)config.ifc_value;"},{"line_number":3953,"context_line":"    if (size \u003d\u003d 0)"},{"line_number":3954,"context_line":"        return;"},{"line_number":3955,"context_line":""},{"line_number":3956,"context_line":"    void *buffer \u003d malloc(size);"},{"line_number":3957,"context_line":"    check_malloc_return(buffer);"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"2af50a79_267b9f62","line":3954,"updated":"2024-11-27 10:52:59.000000000","message":"we require to always have braces, even if it\u0027s a single statement\n\n```\nif (size \u003d\u003d 0)\n{\n    return;\n}\n```","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"69873f4ef2b79d6dd8558a07ee051743ad0145d8","unresolved":false,"context_lines":[{"line_number":3951,"context_line":""},{"line_number":3952,"context_line":"    uint32 size \u003d (uint32)config.ifc_value;"},{"line_number":3953,"context_line":"    if (size \u003d\u003d 0)"},{"line_number":3954,"context_line":"        return;"},{"line_number":3955,"context_line":""},{"line_number":3956,"context_line":"    void *buffer \u003d malloc(size);"},{"line_number":3957,"context_line":"    check_malloc_return(buffer);"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"a3a35f3d_7632b680","line":3954,"in_reply_to":"2af50a79_267b9f62","updated":"2024-11-28 15:14:24.000000000","message":"Done","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d9b4cef8129fc3fe8cc3c14631ca4bd2f33528ba","unresolved":true,"context_lines":[{"line_number":3958,"context_line":""},{"line_number":3959,"context_line":"    config.ifc_len \u003d size;"},{"line_number":3960,"context_line":"    config.ifc_buf \u003d buffer;"},{"line_number":3961,"context_line":"    if (ioctl(sockfd, SIOCGRTTABLE, \u0026config, sizeof(struct ifconf)) \u003c 0) {"},{"line_number":3962,"context_line":"        free(buffer);"},{"line_number":3963,"context_line":"        return;"},{"line_number":3964,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"2f4ff9d8_38d0a4d4","line":3961,"updated":"2024-11-27 10:52:59.000000000","message":"bracket","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"69873f4ef2b79d6dd8558a07ee051743ad0145d8","unresolved":false,"context_lines":[{"line_number":3958,"context_line":""},{"line_number":3959,"context_line":"    config.ifc_len \u003d size;"},{"line_number":3960,"context_line":"    config.ifc_buf \u003d buffer;"},{"line_number":3961,"context_line":"    if (ioctl(sockfd, SIOCGRTTABLE, \u0026config, sizeof(struct ifconf)) \u003c 0) {"},{"line_number":3962,"context_line":"        free(buffer);"},{"line_number":3963,"context_line":"        return;"},{"line_number":3964,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"15fc33c0_b4d9d006","line":3961,"in_reply_to":"2f4ff9d8_38d0a4d4","updated":"2024-11-28 15:14:24.000000000","message":"Done","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d9b4cef8129fc3fe8cc3c14631ca4bd2f33528ba","unresolved":true,"context_lines":[{"line_number":3966,"context_line":"    struct ifreq *interface \u003d (struct ifreq*)buffer;"},{"line_number":3967,"context_line":"    struct ifreq *end \u003d (struct ifreq*)((uint8*)buffer + size);"},{"line_number":3968,"context_line":""},{"line_number":3969,"context_line":"    while (interface \u003c end) {"},{"line_number":3970,"context_line":"        struct route_entry route \u003d interface-\u003eifr_route;"},{"line_number":3971,"context_line":"        if ((route.flags \u0026 RTF_GATEWAY) !\u003d 0 \u0026\u0026 (route.flags \u0026 RTF_DEFAULT) !\u003d 0) {"},{"line_number":3972,"context_line":"            rgi-\u003egateway.addr \u003d ntohl(((struct sockaddr_in *)route.gateway)-\u003esin_addr.s_addr);"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"54c49fc8_a46d3299","line":3969,"updated":"2024-11-27 10:52:59.000000000","message":"bracket","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"69873f4ef2b79d6dd8558a07ee051743ad0145d8","unresolved":false,"context_lines":[{"line_number":3966,"context_line":"    struct ifreq *interface \u003d (struct ifreq*)buffer;"},{"line_number":3967,"context_line":"    struct ifreq *end \u003d (struct ifreq*)((uint8*)buffer + size);"},{"line_number":3968,"context_line":""},{"line_number":3969,"context_line":"    while (interface \u003c end) {"},{"line_number":3970,"context_line":"        struct route_entry route \u003d interface-\u003eifr_route;"},{"line_number":3971,"context_line":"        if ((route.flags \u0026 RTF_GATEWAY) !\u003d 0 \u0026\u0026 (route.flags \u0026 RTF_DEFAULT) !\u003d 0) {"},{"line_number":3972,"context_line":"            rgi-\u003egateway.addr \u003d ntohl(((struct sockaddr_in *)route.gateway)-\u003esin_addr.s_addr);"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"eaf2eaa7_c865a3e5","line":3969,"in_reply_to":"54c49fc8_a46d3299","updated":"2024-11-28 15:14:24.000000000","message":"Done","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d9b4cef8129fc3fe8cc3c14631ca4bd2f33528ba","unresolved":true,"context_lines":[{"line_number":3975,"context_line":"        }"},{"line_number":3976,"context_line":""},{"line_number":3977,"context_line":"        int32 address_size \u003d 0;"},{"line_number":3978,"context_line":"        if (route.destination !\u003d NULL)"},{"line_number":3979,"context_line":"            address_size +\u003d route.destination-\u003esa_len;"},{"line_number":3980,"context_line":"        if (route.mask !\u003d NULL)"},{"line_number":3981,"context_line":"            address_size +\u003d route.mask-\u003esa_len;"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"ce646a6b_df5cd804","line":3978,"updated":"2024-11-27 10:52:59.000000000","message":"these need braces...","commit_id":"501d66d88febb60842cde324111fd384207472e8"},{"author":{"_account_id":1000043,"name":"kallisti5","email":"alex@terarocket.io","username":"kallisti5"},"change_message_id":"69873f4ef2b79d6dd8558a07ee051743ad0145d8","unresolved":false,"context_lines":[{"line_number":3975,"context_line":"        }"},{"line_number":3976,"context_line":""},{"line_number":3977,"context_line":"        int32 address_size \u003d 0;"},{"line_number":3978,"context_line":"        if (route.destination !\u003d NULL)"},{"line_number":3979,"context_line":"            address_size +\u003d route.destination-\u003esa_len;"},{"line_number":3980,"context_line":"        if (route.mask !\u003d NULL)"},{"line_number":3981,"context_line":"            address_size +\u003d route.mask-\u003esa_len;"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"f5cf04fe_ffc728c3","line":3978,"in_reply_to":"ce646a6b_df5cd804","updated":"2024-11-28 15:14:24.000000000","message":"Done","commit_id":"501d66d88febb60842cde324111fd384207472e8"}]}
