Skip to content

Commit f40d7bb

Browse files
authored
Allow setting a source port range for TCP dial. (#542)
1 parent 0ae98fe commit f40d7bb

File tree

5 files changed

+22
-26
lines changed

5 files changed

+22
-26
lines changed

go.mod

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ require (
1616
github.com/livekit/protocol v1.43.3-0.20251202235353-eec8df247cf9
1717
github.com/livekit/psrpc v0.7.1
1818
github.com/livekit/server-sdk-go/v2 v2.11.4-0.20251016050252-63f7c8381817
19-
github.com/livekit/sipgo v0.13.2-0.20250601220430-a77cc3f220fb
19+
github.com/livekit/sipgo v0.13.2-0.20251211100430-721445a49c96
2020
github.com/mjibson/go-dsp v0.0.0-20180508042940-11479a337f12
2121
github.com/ory/dockertest/v3 v3.12.0
2222
github.com/pion/interceptor v0.1.41
@@ -65,7 +65,7 @@ require (
6565
github.com/docker/docker v28.3.3+incompatible // indirect
6666
github.com/docker/go-connections v0.5.0 // indirect
6767
github.com/docker/go-units v0.5.0 // indirect
68-
github.com/emiago/sipgo v0.24.1 // indirect
68+
github.com/emiago/sipgo v0.32.0 // indirect
6969
github.com/fsnotify/fsnotify v1.9.0 // indirect
7070
github.com/gammazero/deque v1.1.0 // indirect
7171
github.com/go-jose/go-jose/v3 v3.0.4 // indirect
@@ -88,8 +88,6 @@ require (
8888
github.com/lithammer/shortuuid/v4 v4.2.0 // indirect
8989
github.com/mackerelio/go-osstat v0.2.5 // indirect
9090
github.com/magefile/mage v1.15.0 // indirect
91-
github.com/mattn/go-colorable v0.1.13 // indirect
92-
github.com/mattn/go-isatty v0.0.20 // indirect
9391
github.com/moby/docker-image-spec v1.3.1 // indirect
9492
github.com/moby/sys/user v0.3.0 // indirect
9593
github.com/moby/term v0.5.0 // indirect
@@ -118,7 +116,6 @@ require (
118116
github.com/prometheus/procfs v0.16.1 // indirect
119117
github.com/puzpuzpuz/xsync/v3 v3.5.1 // indirect
120118
github.com/redis/go-redis/v9 v9.14.0 // indirect
121-
github.com/rs/zerolog v1.33.0 // indirect
122119
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect
123120
github.com/stoewer/go-strcase v1.3.1 // indirect
124121
github.com/twitchtv/twirp v8.1.3+incompatible // indirect

go.sum

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
3636
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
3737
github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4=
3838
github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE=
39-
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
4039
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
4140
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
4241
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -54,8 +53,8 @@ github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj
5453
github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
5554
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
5655
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
57-
github.com/emiago/sipgo v0.24.1 h1:RKy6NqVnvjgpLywo1sa4v+lwfEz5O5/0yk4Z8eek4XM=
58-
github.com/emiago/sipgo v0.24.1/go.mod h1:UB0Ao5xk1b1TQisO29jmUDz0mXNINpHBR4YXsLbLXEs=
56+
github.com/emiago/sipgo v0.32.0 h1:jh63JlfNTzojUJBGEjHa+yBT6tnS4XFRBjpmO0OQIQA=
57+
github.com/emiago/sipgo v0.32.0/go.mod h1:QbpB7veL98PeOI5DAV0AALXVO4ytXd8HcV/wFVSCSnU=
5958
github.com/frostbyte73/core v0.1.1 h1:ChhJOR7bAKOCPbA+lqDLE2cGKlCG5JXsDvvQr4YaJIA=
6059
github.com/frostbyte73/core v0.1.1/go.mod h1:mhfOtR+xWAvwXiwor7jnqPMnu4fxbv1F2MwZ0BEpzZo=
6160
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
@@ -79,7 +78,6 @@ github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
7978
github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
8079
github.com/gobwas/ws v1.4.0 h1:CTaoG1tojrh4ucGPcoJFiAQUAsEWekEWvLy7GsVNqGs=
8180
github.com/gobwas/ws v1.4.0/go.mod h1:G3gNqMNtPppf5XUz7O4shetPpcZ1VJ7zt18dlUeakrc=
82-
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
8381
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
8482
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
8583
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
@@ -135,18 +133,12 @@ github.com/livekit/psrpc v0.7.1 h1:ms37az0QTD3UXIWuUC5D/SkmKOlRMVRsI261eBWu/Vw=
135133
github.com/livekit/psrpc v0.7.1/go.mod h1:bZ4iHFQptTkbPnB0LasvRNu/OBYXEu1NA6O5BMFo9kk=
136134
github.com/livekit/server-sdk-go/v2 v2.11.4-0.20251016050252-63f7c8381817 h1:y5YYe37lcGMOZMw4rvreljGjLj60eDSce/N6Asp7pw8=
137135
github.com/livekit/server-sdk-go/v2 v2.11.4-0.20251016050252-63f7c8381817/go.mod h1:xebvU/bXHEv2fA2F8yX8PsEBWxuYWo2+cyxFJHDmJRk=
138-
github.com/livekit/sipgo v0.13.2-0.20250601220430-a77cc3f220fb h1:onh9h110573vcxmse38aSZifEsRB8bbrXu2VYVt8PC0=
139-
github.com/livekit/sipgo v0.13.2-0.20250601220430-a77cc3f220fb/go.mod h1:nbNi0IsYn4tyY2ab7Rafvifty07miHYvgedPMKWbaI4=
136+
github.com/livekit/sipgo v0.13.2-0.20251211100430-721445a49c96 h1:X6+0QCMqxAiCwo9KnHrIfWT4VzPXNEMupLypetEZaFU=
137+
github.com/livekit/sipgo v0.13.2-0.20251211100430-721445a49c96/go.mod h1:CeAE9EqB26vHG4lw/mwZGZo+nHSgYCAex/OBC+u3clU=
140138
github.com/mackerelio/go-osstat v0.2.5 h1:+MqTbZUhoIt4m8qzkVoXUJg1EuifwlAJSk4Yl2GXh+o=
141139
github.com/mackerelio/go-osstat v0.2.5/go.mod h1:atxwWF+POUZcdtR1wnsUcQxTytoHG4uhl2AKKzrOajY=
142140
github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg=
143141
github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
144-
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
145-
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
146-
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
147-
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
148-
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
149-
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
150142
github.com/mjibson/go-dsp v0.0.0-20180508042940-11479a337f12 h1:dd7vnTDfjtwCETZDrRe+GPYNLA1jBtbZeyfyE8eZCyk=
151143
github.com/mjibson/go-dsp v0.0.0-20180508042940-11479a337f12/go.mod h1:i/KKcxEWEO8Yyl11DYafRPKOPVYTrhxiTRigjtEEXZU=
152144
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
@@ -223,9 +215,6 @@ github.com/redis/go-redis/v9 v9.14.0 h1:u4tNCjXOyzfgeLN+vAZaW1xUooqWDqVEsZN0U01j
223215
github.com/redis/go-redis/v9 v9.14.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
224216
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
225217
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
226-
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
227-
github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
228-
github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
229218
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM=
230219
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
231220
github.com/shoenig/test v1.7.0 h1:eWcHtTXa6QLnBvm0jgEabMRN/uJ4DMV3M8xUGgRkZmk=
@@ -327,11 +316,9 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc
327316
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
328317
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
329318
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
330-
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
331319
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
332320
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
333321
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
334-
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
335322
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
336323
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
337324
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=

pkg/config/config.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ type TLSConfig struct {
5656
KeyLog string `yaml:"key_log"`
5757
}
5858

59+
type TCPConfig struct {
60+
DialPort rtcconfig.PortRange `yaml:"dial_port"`
61+
}
62+
5963
type Config struct {
6064
Redis *redis.RedisConfig `yaml:"redis"` // required
6165
ApiKey string `yaml:"api_key"` // required (env LIVEKIT_API_KEY)
@@ -69,6 +73,7 @@ type Config struct {
6973
SIPPortListen int `yaml:"sip_port_listen"` // SIP signaling port to listen on
7074
SIPHostname string `yaml:"sip_hostname"`
7175
SIPRingingInterval time.Duration `yaml:"sip_ringing_interval"` // from 1 sec up to 60 (default '1s')
76+
TCP *TCPConfig `yaml:"tcp"`
7277
TLS *TLSConfig `yaml:"tls"`
7378
RTPPort rtcconfig.PortRange `yaml:"rtp_port"`
7479
Logging logger.Config `yaml:"logging"`

pkg/sip/service.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,11 @@ import (
3636
"github.com/livekit/protocol/logger"
3737
"github.com/livekit/protocol/rpc"
3838
"github.com/livekit/psrpc"
39-
"github.com/livekit/sipgo"
40-
4139
"github.com/livekit/sip/pkg/config"
4240
siperrors "github.com/livekit/sip/pkg/errors"
4341
"github.com/livekit/sip/pkg/stats"
4442
"github.com/livekit/sip/version"
43+
"github.com/livekit/sipgo"
4544
)
4645

4746
type ServiceConfig struct {
@@ -214,6 +213,14 @@ func (s *Service) Start() error {
214213
sipgo.WithUserAgent(UserAgent),
215214
sipgo.WithUserAgentLogger(slog.New(logger.ToSlogHandler(s.log))),
216215
}
216+
if tconf := s.conf.TCP; tconf != nil {
217+
opts = append(opts, sipgo.WithUserAgentTCPConfig(&sipgo.TCPConfig{
218+
DialPorts: sipgo.PortRange{
219+
Min: tconf.DialPort.Start,
220+
Max: tconf.DialPort.End,
221+
},
222+
}))
223+
}
217224
var tlsConf *tls.Config
218225
if tconf := s.conf.TLS; tconf != nil {
219226
if len(tconf.Certs) == 0 {

test/integration/sip_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ func TestSIPJoinOpenRoom(t *testing.T) {
422422

423423
require.Equal(t, sipgo.REFER, referRequest.Method)
424424
transferTo := referRequest.GetHeader("Refer-To")
425-
require.Equal(t, "tel:"+transferNumber, transferTo.Value())
425+
require.Equal(t, "<tel:"+transferNumber+">", transferTo.Value())
426426

427427
time.Sleep(notifyIntervalDelay)
428428
err = cli.SendNotify(referRequest, "SIP/2.0 100 Trying")
@@ -578,7 +578,7 @@ func TestSIPJoinPinRoom(t *testing.T) {
578578

579579
require.Equal(t, sipgo.REFER, referRequest.Method)
580580
transferTo := referRequest.GetHeader("Refer-To")
581-
require.Equal(t, "tel:"+transferNumber, transferTo.Value())
581+
require.Equal(t, "<tel:"+transferNumber+">", transferTo.Value())
582582

583583
time.Sleep(notifyIntervalDelay)
584584
err = cli.SendNotify(referRequest, "SIP/2.0 403 Fobidden")

0 commit comments

Comments
 (0)