tools.go_stun
4:12d8f041fbdf
Go to Latest
tools.go_stun/main.go
* Делаем вывод удобоваримым для windows
. Мелкий рефакторинг
14 LOG_IDENT string = "net-a0fs-gostun"
23 type logMessage struct {
28 var log_chan = make(chan logMessage, 100)
33 log, err := syslog.New(syslog.LOG_USER, LOG_IDENT)
38 for log_msg := range log_chan {
41 err = log.Info(log_msg.msg)
43 err = log.Warning(log_msg.msg)
45 err = log.Err(log_msg.msg)
47 err = log.Err(fmt.Sprintf("Unknown type of log priority: %v", log_msg.prio))
56 func log_info(msg string, vars ...interface{}) {
57 log_chan <- logMessage{
59 msg: fmt.Sprintf(msg, vars...)}
62 func log_warn(msg string, vars ...interface{}) {
63 log_chan <- logMessage{
65 msg: fmt.Sprintf(msg, vars...)}
68 func log_err(msg string, vars ...interface{}) {
69 log_chan <- logMessage{
71 msg: fmt.Sprintf(msg, vars...)}
74 func getPort() (res string, err error) {
76 err = errors.New("No port specify")
78 res = fmt.Sprintf(":%s", os.Args[1])
83 func fail(code int, msg string) {
84 usage := "Usage: cmd port"
85 usage += "\n port: port number for listening clients"
87 fmt.Fprintln(os.Stderr, msg)
88 fmt.Fprintln(os.Stderr, usage)
93 func handler(conn net.Conn) {
95 remoteAddr := conn.RemoteAddr().String()
100 _s_tmd := time.Now().Sub(_s_tm)
101 if r_err := recover(); r_err != nil {
102 log_err("Error on service for %s (service time: %v): %v", remoteAddr, _s_tmd, r_err)
106 log_err("Error on closing socket when service %s (service time: %v): %v",
107 remoteAddr, _s_tmd, err)
110 log_info("Ok service %s in %v", remoteAddr, _s_tmd)
115 addr_spit := strings.Split(remoteAddr, ":")
116 addr_last := len(addr_spit) - 1
117 addr := strings.Join(addr_spit[:addr_last], ":")
119 dns_names, err := net.LookupAddr(strings.Trim(addr, "[] "))
121 log_warn("Fail to resolve dns name for %s: %v", remoteAddr, err)
123 for _, dns_name := range dns_names {
124 res += fmt.Sprintf("Name: %s\r\n", dns_name)
127 res += fmt.Sprintf("IP: %s\r\n", addr)
128 res += fmt.Sprintf("Port: %s\r\n", addr_spit[addr_last])
131 if _, err := conn.Write([]byte(res)); err != nil {
137 port, err := getPort()
139 fail(1, fmt.Sprint("Error in parsing port number: ", err))
144 svc, err := net.Listen("tcp", port)
146 fail(2, fmt.Sprint("Fail to open socket: ", err))
150 conn, err := svc.Accept()
152 fail(1, fmt.Sprint("Error accepting connections: ", err))