mirror of
https://github.com/aler9/gortsplib
synced 2025-10-07 08:01:14 +08:00
add URL utils
This commit is contained in:
88
base/url.go
Normal file
88
base/url.go
Normal file
@@ -0,0 +1,88 @@
|
||||
package base
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
func stringsReverseIndexByte(s string, c byte) int {
|
||||
for i := len(s) - 1; i >= 0; i-- {
|
||||
if s[i] == c {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
// URLGetBasePath returns the base path of a RTSP URL.
|
||||
// We assume that the URL doesn't contain a control path.
|
||||
func URLGetBasePath(u *url.URL) string {
|
||||
if u.RawPath != "" {
|
||||
return u.RawPath[1:] // remove leading slash
|
||||
}
|
||||
return u.Path[1:] // remove leading slash
|
||||
}
|
||||
|
||||
// URLGetBaseControlPath returns the base path and the control path of a RTSP URL.
|
||||
// We assume that the URL contains a control path.
|
||||
func URLGetBaseControlPath(u *url.URL) (string, string, bool) {
|
||||
pathAndQuery := ""
|
||||
if u.RawPath != "" {
|
||||
pathAndQuery += u.RawPath
|
||||
} else {
|
||||
pathAndQuery += u.Path
|
||||
}
|
||||
if u.RawQuery != "" {
|
||||
pathAndQuery += "?" + u.RawQuery
|
||||
}
|
||||
|
||||
pathAndQuery = pathAndQuery[1:] // remove leading slash
|
||||
|
||||
pos := stringsReverseIndexByte(pathAndQuery, '/')
|
||||
if pos < 0 {
|
||||
return "", "", false
|
||||
}
|
||||
|
||||
basePath := pathAndQuery[:pos]
|
||||
|
||||
// remove query from basePath
|
||||
i := strings.IndexByte(basePath, '?')
|
||||
if i >= 0 {
|
||||
basePath = basePath[:i]
|
||||
}
|
||||
|
||||
if len(basePath) == 0 {
|
||||
return "", "", false
|
||||
}
|
||||
|
||||
controlPath := pathAndQuery[pos+1:]
|
||||
if len(controlPath) == 0 {
|
||||
return "", "", false
|
||||
}
|
||||
|
||||
return basePath, controlPath, true
|
||||
}
|
||||
|
||||
// URLAddControlPath adds a control path to a RTSP url.
|
||||
func URLAddControlPath(u *url.URL, controlPath string) {
|
||||
// always insert the control path at the end of the url
|
||||
if u.RawQuery != "" {
|
||||
if !strings.HasSuffix(u.RawQuery, "/") {
|
||||
u.RawQuery += "/"
|
||||
}
|
||||
u.RawQuery += controlPath
|
||||
|
||||
} else {
|
||||
if u.RawPath != "" {
|
||||
if !strings.HasSuffix(u.RawPath, "/") {
|
||||
u.RawPath += "/"
|
||||
}
|
||||
u.RawPath += controlPath
|
||||
}
|
||||
|
||||
if !strings.HasSuffix(u.Path, "/") {
|
||||
u.Path += "/"
|
||||
}
|
||||
u.Path += controlPath
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user