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  }