4d6c2fd878
Fast (~1-3s) endpoint that gathers network info about a device before full stream discovery. Runs ping first, then parallel probes. Features: - Ping with ICMP + TCP fallback (works without root) - Reverse DNS hostname lookup - ARP table MAC address + OUI vendor identification (2403 entries, 51 camera vendors) - mDNS HomeKit detection (camera/doorbell, paired status) - Extensible Prober interface for adding new probe types - 3-second overall timeout, parallel execution Response includes "type" field: - "unreachable" - device not responding - "standard" - normal IP camera (RTSP/HTTP/ONVIF flow) - "homekit" - Apple HomeKit camera (PIN pairing flow)
46 lines
1.5 KiB
Go
46 lines
1.5 KiB
Go
package models
|
|
|
|
// ProbeResponse represents the result of probing an IP address.
|
|
// The Type field determines which UI flow the frontend should use:
|
|
// - "unreachable" -- device did not respond to ping
|
|
// - "standard" -- normal IP camera (RTSP/HTTP/ONVIF)
|
|
// - "homekit" -- Apple HomeKit camera (needs PIN pairing)
|
|
type ProbeResponse struct {
|
|
IP string `json:"ip"`
|
|
Reachable bool `json:"reachable"`
|
|
LatencyMs float64 `json:"latency_ms,omitempty"`
|
|
Type string `json:"type"`
|
|
Error string `json:"error,omitempty"`
|
|
Probes ProbeResults `json:"probes"`
|
|
}
|
|
|
|
// ProbeResults contains results from all parallel probers.
|
|
// Nil fields mean the prober did not find anything or timed out.
|
|
type ProbeResults struct {
|
|
DNS *DNSProbeResult `json:"dns"`
|
|
ARP *ARPProbeResult `json:"arp"`
|
|
MDNS *MDNSProbeResult `json:"mdns"`
|
|
}
|
|
|
|
// DNSProbeResult contains reverse DNS lookup result.
|
|
type DNSProbeResult struct {
|
|
Hostname string `json:"hostname"`
|
|
}
|
|
|
|
// ARPProbeResult contains ARP table lookup + OUI vendor identification.
|
|
type ARPProbeResult struct {
|
|
MAC string `json:"mac"`
|
|
Vendor string `json:"vendor"`
|
|
}
|
|
|
|
// MDNSProbeResult contains mDNS service discovery result (HomeKit).
|
|
type MDNSProbeResult struct {
|
|
Name string `json:"name"`
|
|
DeviceID string `json:"device_id"`
|
|
Model string `json:"model"`
|
|
Category string `json:"category"` // "camera", "doorbell"
|
|
Paired bool `json:"paired"`
|
|
Port int `json:"port"`
|
|
Feature string `json:"feature"`
|
|
}
|