@@ -9,25 +9,26 @@ import (
99 "github.com/cloudwebrtc/go-sip-ua/pkg/utils"
1010)
1111
12- // UdpPort .
1312type UdpPort struct {
14- udpConns []* net.UDPConn
15- closed utils.AtomicBool
16- ctx context.Context
17- cancel context.CancelFunc
18- onRtpPacketCallback func (trackType TrackType , packet []byte , raddr net.Addr ) error
19- onRtcpPacketCallback func (trackType TrackType , packet []byte , raddr net.Addr ) error
20- mutex sync.Mutex
21- trackType TrackType
22- externalRtpAddress string
23- rAddr * net.UDPAddr
24- rRtcpAddr * net.UDPAddr
13+ udpConns []* net.UDPConn
14+ closed utils.AtomicBool
15+ ctx context.Context
16+ cancel context.CancelFunc
17+ handleRtpPacket func (trackType TrackType , packet []byte , raddr net.Addr ) error
18+ handleRtcpPacket func (trackType TrackType , packet []byte , raddr net.Addr ) error
19+ mutex sync.Mutex
20+ trackType TrackType
21+ externalRtpAddress string
22+ rAddr * net.UDPAddr
23+ rRtcpAddr * net.UDPAddr
2524}
2625
27- func NewUdpPort (trackType TrackType , externalRtpAddress string ) (* UdpPort , error ) {
26+ func NewUdpPort (trackType TrackType , rAddr , rRtcpAddr * net. UDPAddr , externalRtpAddress string ) (* UdpPort , error ) {
2827 c := & UdpPort {
2928 trackType : trackType ,
3029 externalRtpAddress : externalRtpAddress ,
30+ rAddr : rAddr ,
31+ rRtcpAddr : rRtcpAddr ,
3132 }
3233 c .ctx , c .cancel = context .WithCancel (context .TODO ())
3334 c .closed .Set (false )
@@ -38,6 +39,7 @@ func (c *UdpPort) Init() error {
3839 lAddr := & net.UDPAddr {IP : net .ParseIP ("0.0.0.0" ), Port : 0 }
3940 lRtcpAddr := & net.UDPAddr {IP : net .ParseIP ("0.0.0.0" ), Port : 0 }
4041
42+ // TODO: set port range from config
4143 rtpConns , err := ListenRTPInPortRange (4000 , 5000 , "udp" , lAddr , lRtcpAddr )
4244 if err != nil {
4345 logger .Errorf ("ListenUDP: err => %v" , err )
@@ -50,17 +52,17 @@ func (c *UdpPort) Init() error {
5052 c .mutex .Lock ()
5153 defer c .mutex .Unlock ()
5254 c .rAddr = raddr .(* net.UDPAddr )
53- if c .onRtpPacketCallback != nil {
54- c .onRtpPacketCallback (c .trackType , packet , raddr )
55+ if c .handleRtpPacket != nil {
56+ c .handleRtpPacket (c .trackType , packet , raddr )
5557 }
5658 })
5759
5860 go c .loop (rtpConns [1 ], func (packet []byte , raddr net.Addr ) {
5961 c .mutex .Lock ()
6062 defer c .mutex .Unlock ()
6163 c .rRtcpAddr = raddr .(* net.UDPAddr )
62- if c .onRtcpPacketCallback != nil {
63- c .onRtcpPacketCallback (c .trackType , packet , raddr )
64+ if c .handleRtcpPacket != nil {
65+ c .handleRtcpPacket (c .trackType , packet , raddr )
6466 }
6567 })
6668
@@ -84,17 +86,6 @@ func (c *UdpPort) SetRemoteRtcpAddress(raddr *net.UDPAddr) {
8486 c .rRtcpAddr = raddr
8587}
8688
87- func (c * UdpPort ) GetRemoteRtpAddress () * net.UDPAddr {
88- return c .rAddr
89- }
90-
91- func (c * UdpPort ) GetRemoteRtcpAddress () * net.UDPAddr {
92- if c .rRtcpAddr == nil {
93- return c .rAddr
94- }
95- return c .rRtcpAddr
96- }
97-
9889func (c * UdpPort ) Close () {
9990 c .mutex .Lock ()
10091 defer c .mutex .Unlock ()
@@ -111,36 +102,54 @@ func (c *UdpPort) Close() {
111102
112103}
113104
114- func (c * UdpPort ) OnRtpPacketReceived (callback func (trackType TrackType , packet []byte , raddr net.Addr ) error ) {
105+ func (c * UdpPort ) OnRtpPacket (callback func (trackType TrackType , packet []byte , raddr net.Addr ) error ) {
115106 c .mutex .Lock ()
116107 defer c .mutex .Unlock ()
117- c .onRtpPacketCallback = callback
108+ c .handleRtpPacket = callback
118109}
119110
120- func (c * UdpPort ) OnRtcpPacketReceived (callback func (trackType TrackType , packet []byte , raddr net.Addr ) error ) {
111+ func (c * UdpPort ) OnRtcpPacket (callback func (trackType TrackType , packet []byte , raddr net.Addr ) error ) {
121112 c .mutex .Lock ()
122113 defer c .mutex .Unlock ()
123- c .onRtcpPacketCallback = callback
114+ c .handleRtcpPacket = callback
124115}
125116
126- func (c * UdpPort ) WriteRtpPacket (data []byte , raddr net. Addr ) (int , error ) {
117+ func (c * UdpPort ) WriteRtp (data []byte ) (int , error ) {
127118 if c .closed .Get () {
128119 return 0 , fmt .Errorf ("closed" )
129120 }
130- if c .udpConns != nil {
131- return c .udpConns [0 ].WriteToUDP (data , raddr .(* net.UDPAddr ))
121+
122+ if c .rAddr == nil {
123+ return 0 , fmt .Errorf ("rAddr is nil" )
124+ }
125+
126+ if c .udpConns == nil {
127+ return 0 , fmt .Errorf ("udpConns is nil" )
132128 }
133- return 0 , fmt .Errorf ("udpConns is nil" )
129+
130+ logger .Debugf ("UdpPort::WriteRTP: raddr %v" , c .rAddr )
131+ return c .udpConns [0 ].WriteToUDP (data , c .rAddr )
134132}
135133
136- func (c * UdpPort ) WriteRtcpPacket (data []byte , raddr net. Addr ) (int , error ) {
134+ func (c * UdpPort ) WriteRtcp (data []byte ) (int , error ) {
137135 if c .closed .Get () {
138136 return 0 , fmt .Errorf ("closed" )
139137 }
140- if c .udpConns != nil {
141- return c .udpConns [1 ].WriteToUDP (data , raddr .(* net.UDPAddr ))
138+ var addr * net.UDPAddr = c .rRtcpAddr
139+
140+ if addr == nil {
141+ addr = c .rRtcpAddr
142+ if addr == nil {
143+ return 0 , fmt .Errorf ("rRtcpAddr is nil" )
144+ }
142145 }
143- return 0 , fmt .Errorf ("udpConns is nil" )
146+
147+ if c .udpConns == nil {
148+ return 0 , fmt .Errorf ("udpConns is nil" )
149+ }
150+
151+ logger .Debugf ("UdpPort::WriteRTCP: %d packets, raddr %v" , len (data ), addr )
152+ return c .udpConns [1 ].WriteToUDP (data , addr )
144153}
145154
146155func (c * UdpPort ) loop (conn * net.UDPConn , onPacketReceived func (data []byte , raddr net.Addr )) {
0 commit comments