diff --git a/server.go b/server.go index afac7f21..a98e70e1 100644 --- a/server.go +++ b/server.go @@ -29,7 +29,7 @@ func extractPort(address string) (int, error) { return int(tmp2), nil } -func newSessionID(sessions map[string]*ServerSession) (string, error) { +func newSessionSecretID(sessions map[string]*ServerSession) (string, error) { for { b := make([]byte, 4) _, err := rand.Read(b) @@ -372,7 +372,7 @@ outer: continue } - id, err := newSessionID(s.sessions) + secretID, err := newSessionSecretID(s.sessions) if err != nil { req.res <- sessionRequestRes{ res: &base.Response{ @@ -383,8 +383,8 @@ outer: continue } - ss := newServerSession(s, id, req.sc) - s.sessions[id] = ss + ss := newServerSession(s, secretID, req.sc) + s.sessions[secretID] = ss select { case ss.request <- req: @@ -399,10 +399,10 @@ outer: } case ss := <-s.sessionClose: - if sss, ok := s.sessions[ss.id]; !ok || sss != ss { + if sss, ok := s.sessions[ss.secretID]; !ok || sss != ss { continue } - delete(s.sessions, ss.id) + delete(s.sessions, ss.secretID) ss.Close() case st := <-s.streamAdd: diff --git a/serverconn.go b/serverconn.go index 49a5955a..b44bd0fd 100644 --- a/serverconn.go +++ b/serverconn.go @@ -227,8 +227,8 @@ func (sc *ServerConn) run() { return err case ss := <-sc.sessionRemove: - if _, ok := sc.sessions[ss.id]; ok { - delete(sc.sessions, ss.id) + if _, ok := sc.sessions[ss.secretID]; ok { + delete(sc.sessions, ss.secretID) select { case ss.connRemove <- sc: @@ -285,7 +285,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { // the connection can't communicate with another session // if it's receiving or sending TCP frames. if sc.tcpSession != nil && - sxID != sc.tcpSession.id { + sxID != sc.tcpSession.secretID { return &base.Response{ StatusCode: base.StatusBadRequest, }, liberrors.ErrServerLinkedToOtherSession{} @@ -589,7 +589,7 @@ func (sc *ServerConn) handleRequestInSession( case sc.s.sessionRequest <- sreq: res := <-cres if res.ss != nil { - sc.sessions[res.ss.id] = res.ss + sc.sessions[res.ss.secretID] = res.ss } return res.ss, res.res, res.err diff --git a/serversession.go b/serversession.go index 997cce2c..b4d55589 100644 --- a/serversession.go +++ b/serversession.go @@ -119,9 +119,9 @@ type ServerSessionAnnouncedTrack struct { // ServerSession is a server-side RTSP session. type ServerSession struct { - s *Server - id string // do not export, allows to take ownership of the session - author *ServerConn + s *Server + secretID string // must not be shared, allows to take ownership of the session + author *ServerConn ctx context.Context ctxCancel func() @@ -149,14 +149,14 @@ type ServerSession struct { func newServerSession( s *Server, - id string, + secretID string, author *ServerConn, ) *ServerSession { ctx, ctxCancel := context.WithCancel(s.ctx) ss := &ServerSession{ s: s, - id: id, + secretID: secretID, author: author, ctx: ctx, ctxCancel: ctxCancel, @@ -250,7 +250,7 @@ func (ss *ServerSession) run() { if res.Header == nil { res.Header = make(base.Header) } - res.Header["Session"] = base.HeaderValue{ss.id} + res.Header["Session"] = base.HeaderValue{ss.secretID} } if _, ok := err.(liberrors.ErrServerSessionTeardown); ok {