| ... | @@ -77,13 +77,14 @@ pub fn lookup(hostname: []const u8, out_addrs: []Address) -> %[]Address { | ... | @@ -77,13 +77,14 @@ pub fn lookup(hostname: []const u8, out_addrs: []Address) -> %[]Address { |
| 77 | @unreachable() // TODO | 77 | @unreachable() // TODO |
| 78 | } | 78 | } |
| 79 | | 79 | |
| 80 | switch (parseIpLiteral(hostname)) { | 80 | // TODO |
| 81 | Ok => |addr| { | 81 | //switch (parseIpLiteral(hostname)) { |
| 82 | out_addrs[0] = addr; | 82 | // Ok => |addr| { |
| 83 | return out_addrs[0...1]; | 83 | // out_addrs[0] = addr; |
| 84 | }, | 84 | // return out_addrs[0...1]; |
| 85 | else => {}, | 85 | // }, |
| 86 | }; | 86 | // else => {}, |
| | 87 | //}; |
| 87 | | 88 | |
| 88 | @unreachable() // TODO | 89 | @unreachable() // TODO |
| 89 | } | 90 | } |
| ... | @@ -102,7 +103,7 @@ pub fn connectAddr(addr: &Address, port: u16) -> %Connection { | ... | @@ -102,7 +103,7 @@ pub fn connectAddr(addr: &Address, port: u16) -> %Connection { |
| 102 | os_addr.family = addr.family; | 103 | os_addr.family = addr.family; |
| 103 | os_addr.port = endian.swapIfLe(u16, port); | 104 | os_addr.port = endian.swapIfLe(u16, port); |
| 104 | @memcpy((&u8)(&os_addr.addr), &addr.addr[0], 4); | 105 | @memcpy((&u8)(&os_addr.addr), &addr.addr[0], 4); |
| 105 | @memset(&os_addr.zero, 0, @sizeOf(@typeOf(os_addr.zero))); | 106 | @memset(&os_addr.zero[0], 0, @sizeOf(@typeOf(os_addr.zero))); |
| 106 | linux.connect(socket_fd, (&linux.sockaddr)(&os_addr), @sizeOf(linux.sockaddr_in)) | 107 | linux.connect(socket_fd, (&linux.sockaddr)(&os_addr), @sizeOf(linux.sockaddr_in)) |
| 107 | } else if (addr.family == linux.AF_INET6) { | 108 | } else if (addr.family == linux.AF_INET6) { |
| 108 | var os_addr: linux.sockaddr_in6 = undefined; | 109 | var os_addr: linux.sockaddr_in6 = undefined; |
| ... | @@ -142,22 +143,23 @@ pub fn connect(hostname: []const u8, port: u16) -> %Connection { | ... | @@ -142,22 +143,23 @@ pub fn connect(hostname: []const u8, port: u16) -> %Connection { |
| 142 | error InvalidIpLiteral; | 143 | error InvalidIpLiteral; |
| 143 | | 144 | |
| 144 | pub fn parseIpLiteral(buf: []const u8) -> %Address { | 145 | pub fn parseIpLiteral(buf: []const u8) -> %Address { |
| 145 | switch (parseIp4(buf)) { | 146 | // TODO |
| 146 | Ok => |ip4| { | 147 | //switch (parseIp4(buf)) { |
| 147 | var result: Address = undefined; | 148 | // Ok => |ip4| { |
| 148 | @memcpy(&result.addr[0], (&u8)(&ip4), @sizeOf(u32)); | 149 | // var result: Address = undefined; |
| 149 | result.family = linux.AF_INET; | 150 | // @memcpy(&result.addr[0], (&u8)(&ip4), @sizeOf(u32)); |
| 150 | result.scope_id = 0; | 151 | // result.family = linux.AF_INET; |
| 151 | return result; | 152 | // result.scope_id = 0; |
| 152 | }, | 153 | // return result; |
| 153 | else => {}, | 154 | // }, |
| 154 | } | 155 | // else => {}, |
| 155 | switch (parseIp6(buf)) { | 156 | //} |
| 156 | Ok => |addr| { | 157 | //switch (parseIp6(buf)) { |
| 157 | return addr; | 158 | // Ok => |addr| { |
| 158 | }, | 159 | // return addr; |
| 159 | else => {}, | 160 | // }, |
| 160 | } | 161 | // else => {}, |
| | 162 | //} |
| 161 | | 163 | |
| 162 | return error.InvalidIpLiteral; | 164 | return error.InvalidIpLiteral; |
| 163 | } | 165 | } |
| ... | @@ -317,40 +319,41 @@ fn parseIp4(buf: []const u8) -> %u32 { | ... | @@ -317,40 +319,41 @@ fn parseIp4(buf: []const u8) -> %u32 { |
| 317 | } | 319 | } |
| 318 | | 320 | |
| 319 | | 321 | |
| 320 | fn testParseIp4() { | 322 | // TODO |
| 321 | @setFnTest(this); | 323 | //fn testParseIp4() { |
| 322 | | 324 | // @setFnTest(this); |
| 323 | assert(%%parseIp4("127.0.0.1") == endian.swapIfLe(u32, 0x7f000001)); | 325 | // |
| 324 | switch (parseIp4("256.0.0.1")) { Overflow => {}, else => @unreachable(), } | 326 | // assert(%%parseIp4("127.0.0.1") == endian.swapIfLe(u32, 0x7f000001)); |
| 325 | switch (parseIp4("x.0.0.1")) { InvalidChar => {}, else => @unreachable(), } | 327 | // switch (parseIp4("256.0.0.1")) { Overflow => {}, else => @unreachable(), } |
| 326 | switch (parseIp4("127.0.0.1.1")) { JunkAtEnd => {}, else => @unreachable(), } | 328 | // switch (parseIp4("x.0.0.1")) { InvalidChar => {}, else => @unreachable(), } |
| 327 | switch (parseIp4("127.0.0.")) { Incomplete => {}, else => @unreachable(), } | 329 | // switch (parseIp4("127.0.0.1.1")) { JunkAtEnd => {}, else => @unreachable(), } |
| 328 | switch (parseIp4("100..0.1")) { InvalidChar => {}, else => @unreachable(), } | 330 | // switch (parseIp4("127.0.0.")) { Incomplete => {}, else => @unreachable(), } |
| 329 | } | 331 | // switch (parseIp4("100..0.1")) { InvalidChar => {}, else => @unreachable(), } |
| 330 | | 332 | //} |
| 331 | fn testParseIp6() { | 333 | // |
| 332 | @setFnTest(this); | 334 | //fn testParseIp6() { |
| 333 | | 335 | // @setFnTest(this); |
| 334 | { | 336 | // |
| 335 | const addr = %%parseIp6("FF01:0:0:0:0:0:0:FB"); | 337 | // { |
| 336 | assert(addr.addr[0] == 0xff); | 338 | // const addr = %%parseIp6("FF01:0:0:0:0:0:0:FB"); |
| 337 | assert(addr.addr[1] == 0x01); | 339 | // assert(addr.addr[0] == 0xff); |
| 338 | assert(addr.addr[2] == 0x00); | 340 | // assert(addr.addr[1] == 0x01); |
| 339 | } | 341 | // assert(addr.addr[2] == 0x00); |
| 340 | } | 342 | // } |
| 341 | | 343 | //} |
| 342 | fn testLookupSimpleIp() { | 344 | // |
| 343 | @setFnTest(this); | 345 | //fn testLookupSimpleIp() { |
| 344 | | 346 | // @setFnTest(this); |
| 345 | { | 347 | // |
| 346 | var addrs_buf: [5]Address = undefined; | 348 | // { |
| 347 | const addrs = %%lookup("192.168.1.1", addrs_buf); | 349 | // var addrs_buf: [5]Address = undefined; |
| 348 | assert(addrs.len == 1); | 350 | // const addrs = %%lookup("192.168.1.1", addrs_buf); |
| 349 | const addr = addrs[0]; | 351 | // assert(addrs.len == 1); |
| 350 | assert(addr.family == linux.AF_INET); | 352 | // const addr = addrs[0]; |
| 351 | assert(addr.addr[0] == 192); | 353 | // assert(addr.family == linux.AF_INET); |
| 352 | assert(addr.addr[1] == 168); | 354 | // assert(addr.addr[0] == 192); |
| 353 | assert(addr.addr[2] == 1); | 355 | // assert(addr.addr[1] == 168); |
| 354 | assert(addr.addr[3] == 1); | 356 | // assert(addr.addr[2] == 1); |
| 355 | } | 357 | // assert(addr.addr[3] == 1); |
| 356 | } | 358 | // } |
| | 359 | //} |