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 }