Returns false if we didn't parse it, and *cursor == NULL if malformed. */
| 29 | |
| 30 | /* Returns false if we didn't parse it, and *cursor == NULL if malformed. */ |
| 31 | bool fromwire_wireaddr(const u8 **cursor, size_t *max, struct wireaddr *addr) |
| 32 | { |
| 33 | addr->type = fromwire_u8(cursor, max); |
| 34 | |
| 35 | switch (addr->type) { |
| 36 | case ADDR_TYPE_IPV4: |
| 37 | addr->addrlen = 4; |
| 38 | break; |
| 39 | case ADDR_TYPE_IPV6: |
| 40 | addr->addrlen = 16; |
| 41 | break; |
| 42 | case ADDR_TYPE_TOR_V2_REMOVED: |
| 43 | addr->addrlen = TOR_V2_ADDRLEN; |
| 44 | break; |
| 45 | case ADDR_TYPE_TOR_V3: |
| 46 | addr->addrlen = TOR_V3_ADDRLEN; |
| 47 | break; |
| 48 | case ADDR_TYPE_DNS: |
| 49 | addr->addrlen = fromwire_u8(cursor, max); |
| 50 | memset(&addr->addr, 0, sizeof(addr->addr)); |
| 51 | addr->addr[addr->addrlen] = 0; |
| 52 | break; |
| 53 | case ADDR_TYPE_WEBSOCKET: |
| 54 | addr->addrlen = 0; |
| 55 | break; |
| 56 | default: |
| 57 | return false; |
| 58 | } |
| 59 | fromwire(cursor, max, addr->addr, addr->addrlen); |
| 60 | addr->port = fromwire_u16(cursor, max); |
| 61 | |
| 62 | return *cursor != NULL; |
| 63 | } |
| 64 | |
| 65 | void towire_wireaddr(u8 **pptr, const struct wireaddr *addr) |
| 66 | { |
no test coverage detected