Integrate BACKBEAT SDK and resolve KACHING license validation
Major integrations and fixes: - Added BACKBEAT SDK integration for P2P operation timing - Implemented beat-aware status tracking for distributed operations - Added Docker secrets support for secure license management - Resolved KACHING license validation via HTTPS/TLS - Updated docker-compose configuration for clean stack deployment - Disabled rollback policies to prevent deployment failures - Added license credential storage (CHORUS-DEV-MULTI-001) Technical improvements: - BACKBEAT P2P operation tracking with phase management - Enhanced configuration system with file-based secrets - Improved error handling for license validation - Clean separation of KACHING and CHORUS deployment stacks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
65
vendor/github.com/koron/go-ssdp/internal/multicast/udp.go
generated
vendored
Normal file
65
vendor/github.com/koron/go-ssdp/internal/multicast/udp.go
generated
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
package multicast
|
||||
|
||||
import (
|
||||
"net"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type PacketHandler func(net.Addr, []byte) error
|
||||
|
||||
type AddrResolver struct {
|
||||
Addr string
|
||||
|
||||
mu sync.RWMutex
|
||||
udp *net.UDPAddr
|
||||
err error
|
||||
}
|
||||
|
||||
func (r *AddrResolver) setAddress(addr string) {
|
||||
r.mu.Lock()
|
||||
r.Addr = addr
|
||||
r.udp = nil
|
||||
r.err = nil
|
||||
r.mu.Unlock()
|
||||
}
|
||||
|
||||
func (r *AddrResolver) resolve() (*net.UDPAddr, error) {
|
||||
r.mu.RLock()
|
||||
if err := r.err; err != nil {
|
||||
r.mu.RUnlock()
|
||||
return nil, err
|
||||
}
|
||||
if udp := r.udp; udp != nil {
|
||||
r.mu.RUnlock()
|
||||
return udp, nil
|
||||
}
|
||||
r.mu.RUnlock()
|
||||
|
||||
r.mu.Lock()
|
||||
defer r.mu.Unlock()
|
||||
r.udp, r.err = net.ResolveUDPAddr("udp4", r.Addr)
|
||||
return r.udp, r.err
|
||||
}
|
||||
|
||||
var RecvAddrResolver = &AddrResolver{Addr: "224.0.0.1:1900"}
|
||||
|
||||
// SetRecvAddrIPv4 updates multicast address where to receive packets.
|
||||
// This never fail now.
|
||||
func SetRecvAddrIPv4(addr string) error {
|
||||
RecvAddrResolver.setAddress(addr)
|
||||
return nil
|
||||
}
|
||||
|
||||
var sendAddrResolver = &AddrResolver{Addr: "239.255.255.250:1900"}
|
||||
|
||||
// SendAddr returns an address to send multicast UDP package.
|
||||
func SendAddr() (*net.UDPAddr, error) {
|
||||
return sendAddrResolver.resolve()
|
||||
}
|
||||
|
||||
// SetSendAddrIPv4 updates a UDP address to send multicast packets.
|
||||
// This never fail now.
|
||||
func SetSendAddrIPv4(addr string) error {
|
||||
sendAddrResolver.setAddress(addr)
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user