github.com/gotranspile/cxgo@v0.3.8-0.20240118201721-29871598a6a2/runtime/cnet/arpa.go (about) 1 package cnet 2 3 import ( 4 "encoding/binary" 5 "net" 6 "unsafe" 7 ) 8 9 var ( 10 netOrder = binary.BigEndian 11 ) 12 13 func putHost16(b []byte, v uint16) { 14 *(*uint16)(unsafe.Pointer(&b[0])) = v 15 } 16 17 func putHost32(b []byte, v uint32) { 18 *(*uint32)(unsafe.Pointer(&b[0])) = v 19 } 20 21 func getHost16(b []byte) uint16 { 22 return *(*uint16)(unsafe.Pointer(&b[0])) 23 } 24 25 func getHost32(b []byte) uint32 { 26 return *(*uint32)(unsafe.Pointer(&b[0])) 27 } 28 29 type Addr uint64 30 type Port uint32 31 type Address struct { 32 Addr uint32 33 } 34 35 func ParseAddr(s string) Addr { 36 panic("TODO") 37 } 38 39 func Htonl(v uint32) uint32 { 40 var b [4]byte 41 netOrder.PutUint32(b[:], v) 42 return getHost32(b[:]) 43 } 44 45 func Htons(v uint16) uint16 { 46 var b [2]byte 47 netOrder.PutUint16(b[:], v) 48 return getHost16(b[:]) 49 } 50 51 func Ntohl(v uint32) uint32 { 52 var b [4]byte 53 putHost32(b[:], v) 54 return netOrder.Uint32(b[:]) 55 } 56 57 func Ntohs(v uint16) uint16 { 58 var b [2]byte 59 putHost16(b[:], v) 60 return netOrder.Uint16(b[:]) 61 } 62 63 func ipToInt4(ip net.IP) uint32 { 64 ip4 := ip.To4() 65 v := *(*uint32)(unsafe.Pointer(&ip4[0])) 66 return v 67 } 68 69 func intToIp4(v uint32) net.IP { 70 p := *(*[4]byte)(unsafe.Pointer(&v)) 71 return net.IP(p[:]) 72 } 73 74 var ntoaBuf [16]byte 75 76 func Ntoa(a Address) *byte { 77 ip := intToIp4(a.Addr) 78 copy(ntoaBuf[:], ip.String()) 79 return &ntoaBuf[0] 80 } 81 82 func Ntop(a1 int32, a2 unsafe.Pointer, a3 *byte, a4 uint32) *byte { 83 panic("TODO") 84 } 85 86 func Pton(a1 int32, a2 *byte, a3 unsafe.Pointer) *byte { 87 panic("TODO") 88 }