github.com/epfl-dcsl/gotee@v0.0.0-20200909122901-014b35f5e5e9/src/gnet/gosec.go (about)

     1  package gnet
     2  
     3  import (
     4  	"unsafe"
     5  )
     6  
     7  const (
     8  	NI_NAMEREQD  = 8
     9  	AI_CANONNAME = 0x0002
    10  	AI_V4MAPPED  = 0x0008
    11  	AI_ALL       = 0x0010
    12  
    13  	EAI_AGAIN    = -3
    14  	EAI_SYSTEM   = -11
    15  	EAI_NONAME   = -2
    16  	EAI_OVERFLOW = -12
    17  	SOCK_STREAM  = 1
    18  	SOCK_DGRAM   = 2
    19  	IPPROTO_TCP  = 6
    20  	IPPROTO_UDP  = 17
    21  
    22  	AF_INET  = 2
    23  	AF_INET6 = 12
    24  )
    25  
    26  type struct_in_addr struct {
    27  	s_addr uint64
    28  }
    29  
    30  type struct_sockaddr struct {
    31  	sin_family int16
    32  	sin_port   uint16
    33  	sin_addr   struct_in_addr
    34  	sin_zero   [8]uint8
    35  }
    36  
    37  type socklen_t = int
    38  type char_t = byte
    39  
    40  type struct_addrinfo struct {
    41  	ai_flags     int
    42  	ai_family    int
    43  	ai_socktype  int
    44  	ai_protocol  int
    45  	ai_addrlen   socklen_t
    46  	ai_addr      *struct_sockaddr
    47  	ai_canonname *char_t
    48  	ai_next      *struct_addrinfo
    49  }
    50  
    51  func getnameinfo(sa *struct_sockaddr, addrlen socklen_t, host unsafe.Pointer, hostlen socklen_t, srv unsafe.Pointer, servlen socklen_t, flags int) (int, error) {
    52  	// TODO implement correctly, for the moment we assume that sa is localhost.
    53  	panic("TODO implement")
    54  	return 0, nil
    55  }
    56  
    57  func getaddrinfo(node, service unsafe.Pointer, hints *struct_addrinfo, res **struct_addrinfo) (int, error) {
    58  	(*res) = new(struct_addrinfo)
    59  	addr := &struct_sockaddr{sin_family: AF_INET, sin_port: 0, sin_addr: toIp(127, 0, 0, 1)}
    60  	canonname := []byte(" ")
    61  	(*res).ai_flags = 26 //TODO find why
    62  	(*res).ai_family = AF_INET
    63  	(*res).ai_socktype = SOCK_STREAM
    64  	(*res).ai_protocol = IPPROTO_TCP
    65  	(*res).ai_addrlen = 16
    66  	(*res).ai_addr = addr
    67  	(*res).ai_canonname = &canonname[0]
    68  	(*res).ai_next = nil
    69  	return 0, nil
    70  }
    71  
    72  func freeaddrinfo(res *struct_addrinfo) {
    73  	//panic("TODO implement")
    74  	// TODO nothing to do I guess
    75  }
    76  
    77  func size_t(l int) socklen_t {
    78  	panic("TODO implement")
    79  	return 0
    80  }
    81  
    82  func toIp(h, m, m1, l uint16) struct_in_addr {
    83  	var res uint64
    84  	res = uint64(h)<<48 + uint64(m)<<32 + uint64(m1)<<16 + uint64(l)
    85  	return struct_in_addr{res}
    86  }