mirror of https://bitbucket.org/ausocean/av.git
rtmp: simplify url parsing
This commit is contained in:
parent
bf2a2ec7a8
commit
9212bed0ed
|
@ -39,17 +39,14 @@ import (
|
|||
"unsafe"
|
||||
)
|
||||
|
||||
// int RTMP_ParseURL(const char *url, int *protocol, AVal *host, unsigned int *port,
|
||||
// AVal *playpath, AVal *app);
|
||||
// int RTMP_ParseURL(const char *url, int *protocol, AVal *host, unsigned int *port, AVal *playpath, AVal *app);
|
||||
// parseurl.c +33
|
||||
func C_RTMP_ParseURL(url *byte, protocol *int32, host *C_AVal, port *uint32,
|
||||
playpath *C_AVal, app *C_AVal) int {
|
||||
|
||||
func C_RTMP_ParseURL(url *byte, host *C_AVal, port *uint16, playpath, app *C_AVal) (protocol int32, ok bool) {
|
||||
var p, end, col, ques, slash *byte
|
||||
// TODO: use our logger here
|
||||
// RTMP_Log(RTMP_LOGDEBUG, "Parsing...");
|
||||
|
||||
*protocol = RTMP_PROTOCOL_RTMP
|
||||
protocol = RTMP_PROTOCOL_RTMP
|
||||
*port = 0
|
||||
playpath.av_len = 0
|
||||
playpath.av_val = nil
|
||||
|
@ -61,7 +58,7 @@ func C_RTMP_ParseURL(url *byte, protocol *int32, host *C_AVal, port *uint32,
|
|||
if p == nil {
|
||||
// TODO: use our logger here
|
||||
log.Println("RTMP URL: No :// in url!")
|
||||
return 0
|
||||
return protocol, false
|
||||
}
|
||||
/*
|
||||
NOTE: the following code nees to be ported if we're using anything other than
|
||||
|
@ -99,7 +96,7 @@ func C_RTMP_ParseURL(url *byte, protocol *int32, host *C_AVal, port *uint32,
|
|||
if *p == 0 {
|
||||
// TODO: use new logger here
|
||||
// RTMP_Log(RTMP_LOGWARNING, "No hostname in URL!");
|
||||
return 0
|
||||
return protocol, false
|
||||
}
|
||||
|
||||
end = (*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(p)) + uintptr(strlen(p))))
|
||||
|
@ -135,20 +132,23 @@ func C_RTMP_ParseURL(url *byte, protocol *int32, host *C_AVal, port *uint32,
|
|||
if *p == ':' {
|
||||
var p2 uint32
|
||||
p = (*byte)(incBytePtr(unsafe.Pointer(p), 1))
|
||||
tmp, _ := strconv.Atoi(cStrToGoStr(p))
|
||||
tmp, err := strconv.Atoi(cStrToGoStr(p))
|
||||
if err != nil {
|
||||
return protocol, false
|
||||
}
|
||||
p2 = uint32(tmp)
|
||||
if p2 > 65535 {
|
||||
// TODO: use new logger with this
|
||||
// RTMP_Log(RTMP_LOGWARNING, "Invalid port number!");
|
||||
} else {
|
||||
*port = p2
|
||||
*port = uint16(p2)
|
||||
}
|
||||
}
|
||||
|
||||
if slash == nil {
|
||||
// TODO: use new logger
|
||||
// RTMP_Log(RTMP_LOGWARNING, "No application or playpath in URL!");
|
||||
return 1
|
||||
return protocol, true
|
||||
}
|
||||
|
||||
p = (*byte)(incBytePtr(unsafe.Pointer(slash), 1))
|
||||
|
@ -225,7 +225,7 @@ func C_RTMP_ParseURL(url *byte, protocol *int32, host *C_AVal, port *uint32,
|
|||
C_RTMP_ParsePlaypath(&av, playpath)
|
||||
}
|
||||
|
||||
return 1
|
||||
return protocol, true
|
||||
}
|
||||
|
||||
// void RTMP_ParsePlaypath(AVal *in, AVal *out);
|
||||
|
|
27
rtmp/rtmp.go
27
rtmp/rtmp.go
|
@ -295,34 +295,25 @@ func C_SocksSetup(r *C_RTMP, sockshost *C_AVal) {
|
|||
// int RTMP_SetupURL(RTMP *r, char* url);
|
||||
// rtmp.c +757
|
||||
// NOTE: code dealing with rtmp over http has been disregarded
|
||||
func C_RTMP_SetupURL(r *C_RTMP, u string) (ok bool) {
|
||||
url := goStrToCStr(u)
|
||||
func C_RTMP_SetupURL(r *C_RTMP, addr string) (ok bool) {
|
||||
u := goStrToCStr(addr)
|
||||
length := strlen(u)
|
||||
|
||||
var length int32
|
||||
var port uint32
|
||||
port = 0
|
||||
|
||||
length = strlen(url)
|
||||
// TODO: port this
|
||||
ret := int32(C_RTMP_ParseURL((*byte)(unsafe.Pointer(url)), (*int32)(
|
||||
unsafe.Pointer(&r.Link.protocol)), &r.Link.hostname, (*uint32)(
|
||||
unsafe.Pointer(&port)), &r.Link.playpath0, &r.Link.app))
|
||||
if ret == 0 {
|
||||
r.Link.protocol, ok = C_RTMP_ParseURL(u, &r.Link.hostname, &r.Link.port, &r.Link.playpath0, &r.Link.app)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
|
||||
r.Link.port = uint16(port)
|
||||
r.Link.playpath = r.Link.playpath0
|
||||
|
||||
if r.Link.tcUrl.av_len == 0 {
|
||||
r.Link.tcUrl.av_val = (*byte)(unsafe.Pointer(url))
|
||||
r.Link.tcUrl.av_val = (*byte)(unsafe.Pointer(u))
|
||||
if r.Link.app.av_len != 0 {
|
||||
if int(uintptr(unsafe.Pointer(r.Link.app.av_val))) <
|
||||
int(uintptr(incBytePtr(unsafe.Pointer(url), int(length)))) {
|
||||
int(uintptr(incBytePtr(unsafe.Pointer(u), int(length)))) {
|
||||
|
||||
r.Link.tcUrl.av_len = int32(int(r.Link.app.av_len) +
|
||||
int(uintptr(decBytePtr(unsafe.Pointer(r.Link.app.av_val),
|
||||
int(uintptr(unsafe.Pointer(url)))))))
|
||||
int(uintptr(unsafe.Pointer(u)))))))
|
||||
} else {
|
||||
length = int32(r.Link.hostname.av_len) + int32(r.Link.app.av_len) +
|
||||
int32(len("rtmpte://:65535/\x00"))
|
||||
|
@ -343,7 +334,7 @@ func C_RTMP_SetupURL(r *C_RTMP, u string) (ok bool) {
|
|||
r.Link.lFlags |= RTMP_LF_FTCU
|
||||
}
|
||||
} else {
|
||||
r.Link.tcUrl.av_len = int32(strlen(url))
|
||||
r.Link.tcUrl.av_len = int32(strlen(u))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue