Add support TP-Link Kasa Spot KC401 #545

This commit is contained in:
Alexey Khit
2023-08-28 19:30:34 +03:00
parent 137b23da10
commit dc2ab5fcc0
3 changed files with 46 additions and 27 deletions
+25 -3
View File
@@ -2,8 +2,10 @@ package http
import (
"errors"
"io"
"net"
"net/http"
"net/http/httputil"
"net/url"
"strings"
@@ -33,12 +35,17 @@ func handleHTTP(rawURL string) (core.Producer, error) {
return nil, err
}
var chunked bool
if rawQuery != "" {
query := streams.ParseQuery(rawQuery)
for _, header := range query["header"] {
key, value, _ := strings.Cut(header, ":")
req.Header.Add(key, strings.TrimSpace(value))
}
chunked = query.Get("chunked") == "1"
}
res, err := tcp.Do(req)
@@ -61,18 +68,33 @@ func handleHTTP(rawURL string) (core.Producer, error) {
ext = req.URL.Path[i+1:]
}
var rd io.ReadCloser
// support buggy clients, like TP-Link cameras with HTTP/1.0 chunked encoding
if chunked {
rd = struct {
io.Reader
io.Closer
}{
httputil.NewChunkedReader(res.Body),
res.Body,
}
} else {
rd = res.Body
}
switch {
case ct == "image/jpeg":
return mjpeg.NewClient(res), nil
case ct == "multipart/x-mixed-replace":
return multipart.Open(res.Body)
return multipart.Open(rd)
case ct == "application/vnd.apple.mpegurl" || ext == "m3u8":
return hls.OpenURL(req.URL, res.Body)
return hls.OpenURL(req.URL, rd)
}
return magic.Open(res.Body)
return magic.Open(rd)
}
func handleTCP(rawURL string) (core.Producer, error) {