Merge pull request #95 from joestarzxh/dev

[fix] 支持rtsp auth时,同时存在Digest和Basic字段的情况
pull/99/head
yoko 4 years ago committed by GitHub
commit 67e308a4a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2,4 +2,4 @@ module github.com/q191201771/lal
go 1.13
require github.com/q191201771/naza v0.19.2
require github.com/q191201771/naza v0.19.3

@ -1,2 +1,2 @@
github.com/q191201771/naza v0.19.2 h1:DcOkkgvURCAs/wc/RQ1unlWmVO1ygaRHM/NySn7Y/X8=
github.com/q191201771/naza v0.19.2/go.mod h1:5LeGupZZFtYP1g/S203n9vXoUNVdlRnPIfM6rExjqt0=
github.com/q191201771/naza v0.19.3 h1:cvjBztFJjvqbr8uSFkFFKq39HgA4ryC7z6qTY4y8ayI=
github.com/q191201771/naza v0.19.3/go.mod h1:5LeGupZZFtYP1g/S203n9vXoUNVdlRnPIfM6rExjqt0=

@ -12,6 +12,7 @@ import (
"context"
"fmt"
"net"
"net/http"
"time"
"github.com/q191201771/lal/pkg/base"
@ -225,7 +226,7 @@ func (session *PullSession) writeHttpRequest() error {
return err
}
func (session *PullSession) readHttpRespHeader() (statusLine string, headers map[string]string, err error) {
func (session *PullSession) readHttpRespHeader() (statusLine string, headers http.Header, err error) {
// TODO chef: timeout
if statusLine, headers, err = nazahttp.ReadHttpHeader(session.conn); err != nil {
return

@ -34,12 +34,18 @@ type Auth struct {
Algorithm string
}
func (a *Auth) FeedWwwAuthenticate(s, username, password string) {
func (a *Auth) FeedWwwAuthenticate(auths []string, username, password string) {
a.Username = username
a.Password = password
s = strings.TrimPrefix(s, HeaderWwwAuthenticate)
s = strings.TrimSpace(s)
//目前只处理第一个
var s string
if len(auths)>0{
s = auths[0]
}else{
return
}
s = strings.TrimPrefix(s, HeaderWwwAuthenticate)
s = strings.TrimSpace(s)
if strings.HasPrefix(s, AuthTypeBasic) {
a.Typ = AuthTypeBasic
return

@ -341,11 +341,12 @@ func (session *ClientCommandSession) writeOptions() error {
return err
}
methods := ctx.Headers[HeaderPublic]
if methods == "" {
method := ctx.Headers.Get(HeaderPublic)
if method== "" {
return nil
}
if strings.Contains(methods, MethodGetParameter) {
if strings.Contains(method, MethodGetParameter) {
session.methodGetParameterSupported = true
}
return nil
@ -428,9 +429,9 @@ func (session *ClientCommandSession) writeOneSetup(setupUri string) error {
return err
}
session.sessionId = strings.Split(ctx.Headers[HeaderSession], ";")[0]
session.sessionId = strings.Split(ctx.Headers.Get(HeaderSession), ";")[0]
rRtpPort, rRtcpPort, err := parseServerPort(ctx.Headers[HeaderTransport])
rRtpPort, rRtcpPort, err := parseServerPort(ctx.Headers.Get(HeaderTransport))
if err != nil {
return err
}
@ -480,7 +481,7 @@ func (session *ClientCommandSession) writeOneSetupTcp(setupUri string) error {
return err
}
session.sessionId = strings.Split(ctx.Headers[HeaderSession], ";")[0]
session.sessionId = strings.Split(ctx.Headers.Get(HeaderSession), ";")[0]
// TODO chef: 这里没有解析回传的channel id了因为我假定了它和request中的是一致的
session.observer.OnSetupWithChannel(setupUri, rtpChannel, rtcpChannel)
@ -550,7 +551,7 @@ func (session *ClientCommandSession) writeCmdReadResp(method, uri string, header
return
}
session.auth.FeedWwwAuthenticate(ctx.Headers[HeaderWwwAuthenticate], session.urlCtx.Username, session.urlCtx.Password)
session.auth.FeedWwwAuthenticate(ctx.Headers.Values(HeaderWwwAuthenticate), session.urlCtx.Username, session.urlCtx.Password)
}
err = ErrRtsp

@ -189,7 +189,7 @@ Loop:
func (session *ServerCommandSession) handleOptions(requestCtx nazahttp.HttpReqMsgCtx) error {
nazalog.Infof("[%s] < R OPTIONS", session.uniqueKey)
resp := PackResponseOptions(requestCtx.Headers[HeaderCSeq])
resp := PackResponseOptions(requestCtx.Headers.Get(HeaderCSeq))
_, err := session.conn.Write([]byte(resp))
return err
}
@ -218,7 +218,7 @@ func (session *ServerCommandSession) handleAnnounce(requestCtx nazahttp.HttpReqM
return ErrRtsp
}
resp := PackResponseAnnounce(requestCtx.Headers[HeaderCSeq])
resp := PackResponseAnnounce(requestCtx.Headers.Get(HeaderCSeq))
_, err = session.conn.Write([]byte(resp))
return err
}
@ -243,7 +243,7 @@ func (session *ServerCommandSession) handleDescribe(requestCtx nazahttp.HttpReqM
sdpLogicCtx, _ := sdp.ParseSdp2LogicContext(rawSdp)
session.subSession.InitWithSdp(rawSdp, sdpLogicCtx)
resp := PackResponseDescribe(requestCtx.Headers[HeaderCSeq], string(rawSdp))
resp := PackResponseDescribe(requestCtx.Headers.Get(HeaderCSeq), string(rawSdp))
_, err = session.conn.Write([]byte(resp))
return err
}
@ -256,7 +256,7 @@ func (session *ServerCommandSession) handleSetup(requestCtx nazahttp.HttpReqMsgC
host, _, _ := net.SplitHostPort(remoteAddr)
// 是否为interleaved模式
htv := requestCtx.Headers[HeaderTransport]
htv := requestCtx.Headers.Get(HeaderTransport)
if strings.Contains(htv, TransportFieldInterleaved) {
rtpChannel, rtcpChannel, err := parseRtpRtcpChannel(htv)
if err != nil {
@ -278,12 +278,12 @@ func (session *ServerCommandSession) handleSetup(requestCtx nazahttp.HttpReqMsgC
return ErrRtsp
}
resp := PackResponseSetup(requestCtx.Headers[HeaderCSeq], htv)
resp := PackResponseSetup(requestCtx.Headers.Get(HeaderCSeq), htv)
_, err = session.conn.Write([]byte(resp))
return err
}
rRtpPort, rRtcpPort, err := parseClientPort(requestCtx.Headers[HeaderTransport])
rRtpPort, rRtcpPort, err := parseClientPort(requestCtx.Headers.Get(HeaderTransport))
if err != nil {
nazalog.Errorf("[%s] parseClientPort failed. err=%+v", session.uniqueKey, err)
return err
@ -313,14 +313,14 @@ func (session *ServerCommandSession) handleSetup(requestCtx nazahttp.HttpReqMsgC
return ErrRtsp
}
resp := PackResponseSetup(requestCtx.Headers[HeaderCSeq], htv)
resp := PackResponseSetup(requestCtx.Headers.Get(HeaderCSeq), htv)
_, err = session.conn.Write([]byte(resp))
return err
}
func (session *ServerCommandSession) handleRecord(requestCtx nazahttp.HttpReqMsgCtx) error {
nazalog.Infof("[%s] < R RECORD", session.uniqueKey)
resp := PackResponseRecord(requestCtx.Headers[HeaderCSeq])
resp := PackResponseRecord(requestCtx.Headers.Get(HeaderCSeq))
_, err := session.conn.Write([]byte(resp))
return err
}
@ -330,14 +330,14 @@ func (session *ServerCommandSession) handlePlay(requestCtx nazahttp.HttpReqMsgCt
if ok := session.observer.OnNewRtspSubSessionPlay(session.subSession); !ok {
return ErrRtsp
}
resp := PackResponsePlay(requestCtx.Headers[HeaderCSeq])
resp := PackResponsePlay(requestCtx.Headers.Get(HeaderCSeq))
_, err := session.conn.Write([]byte(resp))
return err
}
func (session *ServerCommandSession) handleTeardown(requestCtx nazahttp.HttpReqMsgCtx) error {
nazalog.Infof("[%s] < R TEARDOWN", session.uniqueKey)
resp := PackResponseTeardown(requestCtx.Headers[HeaderCSeq])
resp := PackResponseTeardown(requestCtx.Headers.Get(HeaderCSeq))
_, err := session.conn.Write([]byte(resp))
return err
}

Loading…
Cancel
Save