37 lines
786 B
Go
37 lines
786 B
Go
package tendrils
|
|
|
|
import (
|
|
"bufio"
|
|
"log"
|
|
"net"
|
|
"regexp"
|
|
"time"
|
|
)
|
|
|
|
var yamahaModelRegex = regexp.MustCompile(`PA-Platform:ModelId\s*=\s*0x[0-9a-fA-F]+\(([^)]+)\)`)
|
|
|
|
func (t *Tendrils) probeYamahaDevice(ip net.IP) string {
|
|
conn, err := net.DialTimeout("tcp", net.JoinHostPort(ip.String(), "50000"), 2*time.Second)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
defer conn.Close()
|
|
|
|
conn.SetReadDeadline(time.Now().Add(2 * time.Second))
|
|
|
|
scanner := bufio.NewScanner(conn)
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
if match := yamahaModelRegex.FindStringSubmatch(line); match != nil {
|
|
model := match[1]
|
|
if t.DebugYamaha {
|
|
log.Printf("[yamaha] %s: found model %s", ip, model)
|
|
}
|
|
t.nodes.Update(nil, nil, []net.IP{ip}, "", model, "yamaha")
|
|
return model
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|