Changes to be committed:

modified:   cmd/pmomusic/main.go
	new file:   internal/netutils/ip_detect.go
	new file:   internal/netutils/list_all_ip.go
	modified:   internal/soap/soap.go
	modified:   internal/ssdp/responder.go
	modified:   internal/ssdp/ssdp.go
	modified:   internal/upnp/http.go
	new file:   internal/upnp/server.go
	new file:   internal/upnp/xml/AVTransport.xml
	new file:   internal/upnp/xml/ConnectionManager.xml
	new file:   internal/upnp/xml/RenderingControl.xml
This commit is contained in:
2025-06-08 17:41:52 +02:00
parent c80f49f615
commit 2e80eb85d2
11 changed files with 420 additions and 40 deletions

View File

@@ -43,14 +43,19 @@ func StartSSDPResponder(usn, location string) {
st := extractHeader(data, "ST")
log.Printf("🔎 M-SEARCH from %s, ST=%s\n", src.String(), st)
if st == "ssdp:all" || st == serviceType {
go sendSSDPResponse(src, usn, location)
if st == "ssdp:all" ||
st == serviceType ||
strings.HasPrefix(st, "urn:schemas-upnp-org:service:") ||
strings.HasPrefix(st, "urn:av-openhome-org:service:") ||
strings.HasPrefix(st, "urn:bubblesoftapps-com:service:") {
go sendSSDPResponse(src, usn, location, st)
}
}
}
}
func sendSSDPResponse(dst *net.UDPAddr, usn, location string) {
func sendSSDPResponse(dst *net.UDPAddr, usn, location, st string) {
resp := fmt.Sprintf(
"HTTP/1.1 200 OK\r\n"+
"CACHE-CONTROL: max-age=1800\r\n"+
@@ -63,11 +68,12 @@ func sendSSDPResponse(dst *net.UDPAddr, usn, location string) {
"\r\n",
time.Now().Format(time.RFC1123),
location,
serviceType,
st,
usn,
serviceType,
st,
)
// envoie UDP
conn, err := net.DialUDP("udp4", nil, dst)
if err != nil {
log.Println("Failed to dial UDP to respond:", err)

View File

@@ -2,7 +2,6 @@ package ssdp
import (
"log"
"net"
"time"
"github.com/koron/go-ssdp"
@@ -32,12 +31,3 @@ func AnnounceRenderer(usn, location string) {
// Un jour on voudra faire ça à l'arrêt :
// adv.Close() // envoie le ssdp:byebye
}
func GetLocalIP() string {
conn, err := net.Dial("udp", "239.255.255.250:1900")
if err != nil {
return "127.0.0.1"
}
defer conn.Close()
localAddr := conn.LocalAddr().(*net.UDPAddr)
return localAddr.IP.String()
}