diff --git a/server_test.go b/server_test.go index e251ac13..202f6eb4 100644 --- a/server_test.go +++ b/server_test.go @@ -636,6 +636,7 @@ func TestServerGetSetParameter(t *testing.T) { s := &Server{ Handler: &testServerHandler{ onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) { + ctx.Session.SetUserData(123) return &base.Response{ StatusCode: base.StatusOK, }, stream, nil @@ -643,6 +644,7 @@ func TestServerGetSetParameter(t *testing.T) { onSetParameter: func(ctx *ServerHandlerOnSetParameterCtx) (*base.Response, error) { if ca == "inside session" { require.NotNil(t, ctx.Session) + require.Equal(t, 123, ctx.Session.UserData()) } params = ctx.Request.Body return &base.Response{ diff --git a/serversession.go b/serversession.go index 7aeaa194..b2b2b475 100644 --- a/serversession.go +++ b/serversession.go @@ -163,6 +163,7 @@ type ServerSession struct { ctx context.Context ctxCancel func() + userData interface{} conns map[*ServerConn]struct{} state ServerSessionState setuppedTracks map[int]*ServerSessionSetuppedTrack @@ -242,6 +243,16 @@ func (ss *ServerSession) AnnouncedTracks() Tracks { return ss.announcedTracks } +// SetUserData sets some user data associated to the session. +func (ss *ServerSession) SetUserData(v interface{}) { + ss.userData = v +} + +// UserData returns some user data associated to the session. +func (ss *ServerSession) UserData() interface{} { + return ss.userData +} + func (ss *ServerSession) checkState(allowed map[ServerSessionState]struct{}) error { if _, ok := allowed[ss.state]; ok { return nil