From dc6fe3aae5a4755d055b0ed6a52bd9f5a104b319 Mon Sep 17 00:00:00 2001 From: Denys Smirnov Date: Mon, 9 Dec 2024 22:57:47 +0200 Subject: [PATCH] Support SIP list filters. (#3240) --- go.mod | 2 +- go.sum | 4 +-- pkg/service/sip.go | 67 +++++++++++++++++++++++++++++++++++++++------- 3 files changed, 61 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index a2c693132..336fb6269 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/jxskiss/base62 v1.1.0 github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1 github.com/livekit/mediatransportutil v0.0.0-20241128072814-c363618d4c98 - github.com/livekit/protocol v1.28.2-0.20241128110641-c9f20a60249a + github.com/livekit/protocol v1.29.5-0.20241209183753-f6b5078b2244 github.com/livekit/psrpc v0.6.1-0.20241018124827-1efff3d113a8 github.com/mackerelio/go-osstat v0.2.5 github.com/magefile/mage v1.15.0 diff --git a/go.sum b/go.sum index 5dcdc4304..d361e61c5 100644 --- a/go.sum +++ b/go.sum @@ -165,8 +165,8 @@ github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1 h1:jm09419p0lqTkD github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1/go.mod h1:Rs3MhFwutWhGwmY1VQsygw28z5bWcnEYmS1OG9OxjOQ= github.com/livekit/mediatransportutil v0.0.0-20241128072814-c363618d4c98 h1:QA7DqIC/ZSsMj8HC0+zNfMMwssHbA0alZALK68r30LQ= github.com/livekit/mediatransportutil v0.0.0-20241128072814-c363618d4c98/go.mod h1:WIVFAGzVZ7VMjPC5+nbSfwdFjWcbuLgx97KeNSUDTEo= -github.com/livekit/protocol v1.28.2-0.20241128110641-c9f20a60249a h1:dI26u+l1pBBwojkTCuY8VVbNbwoWBaXM9nRY3uDg3p8= -github.com/livekit/protocol v1.28.2-0.20241128110641-c9f20a60249a/go.mod h1:mqXSWNHbENjxM0/HG25wZ7wgja/K9fA0PeQxi+MPmWw= +github.com/livekit/protocol v1.29.5-0.20241209183753-f6b5078b2244 h1:Eg9HK+5bMCDRKhh5g5g16oyNaMbCqMrJvxFBaBuP7Vo= +github.com/livekit/protocol v1.29.5-0.20241209183753-f6b5078b2244/go.mod h1:NDg1btMpKCzr/w6QR5kDuXw/e4Y7yOBE+RUAHsc+Y/M= github.com/livekit/psrpc v0.6.1-0.20241018124827-1efff3d113a8 h1:Ibh0LoFl5NW5a1KFJEE0eLxxz7dqqKmYTj/BfCb0PbY= github.com/livekit/psrpc v0.6.1-0.20241018124827-1efff3d113a8/go.mod h1:CQUBSPfYYAaevg1TNCc6/aYsa8DJH4jSRFdCeSZk5u0= github.com/mackerelio/go-osstat v0.2.5 h1:+MqTbZUhoIt4m8qzkVoXUJg1EuifwlAJSk4Yl2GXh+o= diff --git a/pkg/service/sip.go b/pkg/service/sip.go index c73284e6d..0b43e8f2b 100644 --- a/pkg/service/sip.go +++ b/pkg/service/sip.go @@ -16,6 +16,7 @@ package service import ( "context" + "errors" "time" "github.com/twitchtv/twirp" @@ -231,10 +232,26 @@ func (s *SIPService) ListSIPInboundTrunk(ctx context.Context, req *livekit.ListS return nil, ErrSIPNotConnected } - trunks, err := s.store.ListSIPInboundTrunk(ctx) - if err != nil { - return nil, err + var trunks []*livekit.SIPInboundTrunkInfo + if len(req.TrunkIds) != 0 { + trunks = make([]*livekit.SIPInboundTrunkInfo, len(req.TrunkIds)) + for i, id := range req.TrunkIds { + t, err := s.store.LoadSIPInboundTrunk(ctx, id) + if errors.Is(err, ErrSIPTrunkNotFound) { + continue // keep nil in slice + } else if err != nil { + return nil, err + } + trunks[i] = t + } + } else { + var err error + trunks, err = s.store.ListSIPInboundTrunk(ctx) + if err != nil { + return nil, err + } } + trunks = req.FilterSlice(trunks) return &livekit.ListSIPInboundTrunkResponse{Items: trunks}, nil } @@ -247,10 +264,26 @@ func (s *SIPService) ListSIPOutboundTrunk(ctx context.Context, req *livekit.List return nil, ErrSIPNotConnected } - trunks, err := s.store.ListSIPOutboundTrunk(ctx) - if err != nil { - return nil, err + var trunks []*livekit.SIPOutboundTrunkInfo + if len(req.TrunkIds) != 0 { + trunks = make([]*livekit.SIPOutboundTrunkInfo, len(req.TrunkIds)) + for i, id := range req.TrunkIds { + t, err := s.store.LoadSIPOutboundTrunk(ctx, id) + if errors.Is(err, ErrSIPTrunkNotFound) { + continue // keep nil in slice + } else if err != nil { + return nil, err + } + trunks[i] = t + } + } else { + var err error + trunks, err = s.store.ListSIPOutboundTrunk(ctx) + if err != nil { + return nil, err + } } + trunks = req.FilterSlice(trunks) return &livekit.ListSIPOutboundTrunkResponse{Items: trunks}, nil } @@ -326,10 +359,26 @@ func (s *SIPService) ListSIPDispatchRule(ctx context.Context, req *livekit.ListS return nil, ErrSIPNotConnected } - rules, err := s.store.ListSIPDispatchRule(ctx) - if err != nil { - return nil, err + var rules []*livekit.SIPDispatchRuleInfo + if len(req.DispatchRuleIds) != 0 { + rules = make([]*livekit.SIPDispatchRuleInfo, len(req.DispatchRuleIds)) + for i, id := range req.DispatchRuleIds { + r, err := s.store.LoadSIPDispatchRule(ctx, id) + if errors.Is(err, ErrSIPDispatchRuleNotFound) { + continue // keep nil in slice + } else if err != nil { + return nil, err + } + rules[i] = r + } + } else { + var err error + rules, err = s.store.ListSIPDispatchRule(ctx) + if err != nil { + return nil, err + } } + rules = req.FilterSlice(rules) return &livekit.ListSIPDispatchRuleResponse{Items: rules}, nil }