Skip to content

Commit

Permalink
Remember at which connection a sip message was received
Browse files Browse the repository at this point in the history
  • Loading branch information
ghettovoice committed Feb 3, 2021
1 parent 973df8a commit e010898
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 39 deletions.
2 changes: 2 additions & 0 deletions transport/connection_pool.go
Original file line number Diff line number Diff line change
Expand Up @@ -1037,6 +1037,8 @@ func (handler *connectionHandler) pipeOutputs(msgs <-chan sip.Message, errs <-ch
raddr := getRemoteAddr()
rhost, rport, _ := net.SplitHostPort(raddr)

msg.SetDestination(handler.Connection().LocalAddr().String())

switch msg := msg.(type) {
case sip.Request:
// RFC 3261 - 18.2.1
Expand Down
8 changes: 4 additions & 4 deletions transport/connection_pool_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,15 +159,15 @@ var _ = Describe("ConnectionHandler", func() {

It("should read, parse and pipe to output", func(done Done) {
By("first message arrives on output")
testutils.AssertMessageArrived(output, inviteMsg, "pipe", "far-far-away.com:5060")
testutils.AssertMessageArrived(output, inviteMsg, "pipe", addr.String())
By("bullshit arrives and ignored")
time.Sleep(time.Millisecond)
By("malformed message 1 arrives on errs")
testutils.AssertIncomingErrorArrived(errs, "missing required 'Content-Length' header")
By("malformed message 2 arrives on errs")
testutils.AssertIncomingErrorArrived(errs, "missing required 'Content-Length' header")
By("second message arrives on output")
testutils.AssertMessageArrived(output, inviteMsg, "pipe", "far-far-away.com:5060")
testutils.AssertMessageArrived(output, inviteMsg, "pipe", addr.String())
// for i := 0; i < 10; i++ {
// select {
// case msg := <-output:
Expand Down Expand Up @@ -598,15 +598,15 @@ var _ = Describe("ConnectionPool", func() {
})
It("should pipe handler outputs to self outputs", func(done Done) {
By(fmt.Sprintf("message msg2 arrives %s -> %s", server2.RemoteAddr(), server2.LocalAddr()))
testutils.AssertMessageArrived(output, msg2, "pipe", "far-far-away.com:5060")
testutils.AssertMessageArrived(output, msg2, "pipe", server2.LocalAddr().String())
By(fmt.Sprintf("malformed message msg3 arrives %s -> %s", server3.RemoteAddr(), server3.LocalAddr()))
testutils.AssertIncomingErrorArrived(errs, "missing required 'Content-Length' header")
By("server2 expired error arrives and ignored")
time.Sleep(time.Millisecond)
By("server3 falls with error")
testutils.AssertIncomingErrorArrived(errs, "io: read/write on closed pipe")
By(fmt.Sprintf("message msg1 arrives %s -> %s", server1.RemoteAddr(), server1.LocalAddr()))
testutils.AssertMessageArrived(output, msg1, "pipe", "far-far-away.com:5060")
testutils.AssertMessageArrived(output, msg1, "pipe", server1.LocalAddr().String())
close(done)
}, 3)
})
Expand Down
8 changes: 4 additions & 4 deletions transport/layer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ var _ = Describe("TransportLayer", func() {
tpl.Messages(),
fmt.Sprintf(expectedMsg, clientHost),
clientAddr,
"far-far-away.com:5060",
localAddr1,
)
close(done)
}, 3)
Expand All @@ -100,7 +100,7 @@ var _ = Describe("TransportLayer", func() {
tpl.Messages(),
fmt.Sprintf(expectedMsg, clientHost),
clientAddr,
"far-far-away.com:5060",
localAddr1,
).(sip.Request)
response = sip.NewResponseFromRequest(
"",
Expand Down Expand Up @@ -174,7 +174,7 @@ var _ = Describe("TransportLayer", func() {
tpl.Messages(),
fmt.Sprintf(expectedMsg, client.LocalAddr().(*net.TCPAddr).Port, clientHost),
client.LocalAddr().String(),
"far-far-away.com:5060",
localAddr1,
)
close(done)
}, 3)
Expand All @@ -188,7 +188,7 @@ var _ = Describe("TransportLayer", func() {
tpl.Messages(),
fmt.Sprintf(expectedMsg, client.LocalAddr().(*net.TCPAddr).Port, clientHost),
client.LocalAddr().String(),
"far-far-away.com:5060",
localAddr1,
).(sip.Request)
response = sip.NewResponseFromRequest(
"",
Expand Down
10 changes: 5 additions & 5 deletions transport/tcp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,17 +157,17 @@ var _ = Describe("TcpProtocol", func() {
})
It("should pipe incoming messages and errors", func(done Done) {
By(fmt.Sprintf("msg1 arrives on output from client1 %s -> %s", client1.LocalAddr().String(), localTarget1.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), "far-far-away.com:5060")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), localTarget1.Addr())
By(fmt.Sprintf("broken message arrives from client3 and ignored %s -> %s", client3.LocalAddr().String(), localTarget1.Addr()))
time.Sleep(time.Millisecond)
By(fmt.Sprintf("msg2 arrives on output from client2 %s -> %s", client2.LocalAddr().String(), localTarget2.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), "far-far-away.com:5060")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), localTarget2.Addr())
By(fmt.Sprintf("msg3 arrives on output from client3 %s -> %s", client3.LocalAddr().String(), localTarget1.Addr()))
testutils.AssertMessageArrived(output, msg3, client3.LocalAddr().String(), "pc33.far-far-away.com:5060")
testutils.AssertMessageArrived(output, msg3, client3.LocalAddr().String(), localTarget1.Addr())
By(fmt.Sprintf("bullshit arrives from client2 and ignored %s -> %s", client2.LocalAddr().String(), localTarget2.Addr()))
time.Sleep(time.Millisecond)
By(fmt.Sprintf("msg2 arrives on output from client2 %s -> %s", client2.LocalAddr().String(), localTarget2.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), "far-far-away.com:5060")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), localTarget2.Addr())
// for i := 0; i < 4; i++ {
// select {
// case msg := <-output:
Expand All @@ -192,7 +192,7 @@ var _ = Describe("TcpProtocol", func() {
})
It("should receive message and response with 200 OK", func(done Done) {
By("msg1 arrives")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), "far-far-away.com:5060")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), localTarget1.Addr())

By("prepare response 200 OK")
clientTarget, err := transport.NewTargetFromAddr(client1.LocalAddr().String())
Expand Down
10 changes: 5 additions & 5 deletions transport/tls_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,17 +167,17 @@ var _ = Describe("TlsProtocol", func() {
})
It("should pipe incoming messages and errors", func(done Done) {
By(fmt.Sprintf("msg1 arrives on output from client1 %s -> %s", client1.LocalAddr().String(), localTarget1.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), "far-far-away.com:5061")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), localTarget1.Addr())
By(fmt.Sprintf("broken message arrives from client3 and ignored %s -> %s", client3.LocalAddr().String(), localTarget1.Addr()))
time.Sleep(time.Millisecond)
By(fmt.Sprintf("msg2 arrives on output from client2 %s -> %s", client2.LocalAddr().String(), localTarget2.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), "far-far-away.com:5061")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), localTarget2.Addr())
By(fmt.Sprintf("msg3 arrives on output from client3 %s -> %s", client3.LocalAddr().String(), localTarget1.Addr()))
testutils.AssertMessageArrived(output, msg3, client3.LocalAddr().String(), "pc33.far-far-away.com:5061")
testutils.AssertMessageArrived(output, msg3, client3.LocalAddr().String(), localTarget1.Addr())
By(fmt.Sprintf("bullshit arrives from client2 and ignored %s -> %s", client2.LocalAddr().String(), localTarget2.Addr()))
time.Sleep(time.Millisecond)
By(fmt.Sprintf("msg2 arrives on output from client2 %s -> %s", client2.LocalAddr().String(), localTarget2.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), "far-far-away.com:5061")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), localTarget2.Addr())
close(done)
}, 3)
})
Expand All @@ -194,7 +194,7 @@ var _ = Describe("TlsProtocol", func() {
})
It("should receive message and response with 200 OK", func(done Done) {
By("msg1 arrives")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), "far-far-away.com:5061")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), localTarget1.Addr())

By("prepare response 200 OK")
clientTarget, err := transport.NewTargetFromAddr(client1.LocalAddr().String())
Expand Down
22 changes: 6 additions & 16 deletions transport/udp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,20 +159,20 @@ var _ = Describe("UdpProtocol", func() {
})
It("should pipe incoming messages and errors", func(done Done) {
By(fmt.Sprintf("msg1 arrives on output from client1 %s -> %s", client1.LocalAddr().String(), localTarget1.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.UDPAddr).IP), client1.LocalAddr().String(), "far-far-away.com:5060")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.UDPAddr).IP), client1.LocalAddr().String(), localTarget1.Addr())
By(fmt.Sprintf("broken message arrives from client3 and ignored %s -> %s", client3.LocalAddr().String(), localTarget1.Addr()))
time.Sleep(time.Millisecond)
By(fmt.Sprintf("msg2 arrives on output from client2 %s -> %s", client2.LocalAddr().String(), localTarget2.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.UDPAddr).IP), client2.LocalAddr().String(), "far-far-away.com:5060")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.UDPAddr).IP), client2.LocalAddr().String(), localTarget2.Addr())
By(fmt.Sprintf("msg3 arrives on output from client3 %s -> %s", client3.LocalAddr().String(), localTarget1.Addr()))
// here we should check actual client remote address, because SIP Response gets Remote Address from connection
testutils.AssertMessageArrived(output, msg3, client3.(*testutils.MockConn).Conn.LocalAddr().String(), "pc33.example.com:5060")
testutils.AssertMessageArrived(output, msg3, client3.(*testutils.MockConn).Conn.LocalAddr().String(), localTarget1.Addr())
By(fmt.Sprintf("bullshit arrives from client2 and ignored %s -> %s", client2.LocalAddr().String(), localTarget2.Addr()))
// err := <-errs
// Expect(err).To(HaveOccurred())
time.Sleep(time.Millisecond)
By(fmt.Sprintf("msg2 arrives on output from client2 %s -> %s", client2.LocalAddr().String(), localTarget2.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.UDPAddr).IP), client2.LocalAddr().String(), "far-far-away.com:5060")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.UDPAddr).IP), client2.LocalAddr().String(), localTarget2.Addr())
// for i := 0; i < 4; i++ {
// select {
// case msg := <-output:
Expand Down Expand Up @@ -204,23 +204,13 @@ var _ = Describe("UdpProtocol", func() {
})
It("should receive message and response with 200 OK", func(done Done) {
By("msg1 arrives")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.UDPAddr).IP), client1.LocalAddr().String(), "far-far-away.com:5060")
req := testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.UDPAddr).IP), client1.LocalAddr().String(), localTarget1.Addr())

By("prepare response 200 OK")
clientTarget, err := transport.NewTargetFromAddr(clientAddr1)
Expect(clientTarget).ToNot(BeNil())
Expect(err).ToNot(HaveOccurred())
msg := sip.NewResponse(
"",
"SIP/2.0",
200,
"OK",
[]sip.Header{
&sip.CSeq{SeqNo: 2, MethodName: sip.INVITE},
},
"",
nil,
)
msg := sip.NewResponseFromRequest("", req.(sip.Request), 200, "OK", "")
twg := new(sync.WaitGroup)
twg.Add(2)
go func() {
Expand Down
10 changes: 5 additions & 5 deletions transport/ws_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,17 +169,17 @@ var _ = Describe("WsProtocol", func() {
})
It("should pipe incoming messages and errors", func(done Done) {
By(fmt.Sprintf("msg1 arrives on output from client1 %s -> %s", client1.LocalAddr().String(), localTarget1.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), "far-far-away.com:80")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), localTarget1.Addr())
By(fmt.Sprintf("broken message arrives from client3 and ignored %s -> %s", client3.LocalAddr().String(), localTarget1.Addr()))
time.Sleep(time.Millisecond)
By(fmt.Sprintf("msg2 arrives on output from client2 %s -> %s", client2.LocalAddr().String(), localTarget1.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), "far-far-away.com:80")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), localTarget1.Addr())
By(fmt.Sprintf("msg3 arrives on output from client3 %s -> %s", client3.LocalAddr().String(), localTarget1.Addr()))
testutils.AssertMessageArrived(output, msg3, client3.LocalAddr().String(), "pc33.far-far-away.com:80")
testutils.AssertMessageArrived(output, msg3, client3.LocalAddr().String(), localTarget1.Addr())
By(fmt.Sprintf("bullshit arrives from client2 and ignored %s -> %s", client2.LocalAddr().String(), localTarget1.Addr()))
time.Sleep(time.Millisecond)
By(fmt.Sprintf("msg2 arrives on output from client2 %s -> %s", client2.LocalAddr().String(), localTarget1.Addr()))
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), "far-far-away.com:80")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg2, client1.LocalAddr().(*net.TCPAddr).IP), client2.LocalAddr().String(), localTarget1.Addr())
close(done)
}, 3)
})
Expand All @@ -200,7 +200,7 @@ var _ = Describe("WsProtocol", func() {
})
It("should receive message and response with 200 OK", func(done Done) {
By("msg1 arrives")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), "far-far-away.com:80")
testutils.AssertMessageArrived(output, fmt.Sprintf(expectedMsg1, client1.LocalAddr().(*net.TCPAddr).IP), client1.LocalAddr().String(), localTarget1.Addr())

By("prepare response 200 OK")
clientTarget, err := transport.NewTargetFromAddr(client1.LocalAddr().String())
Expand Down

0 comments on commit e010898

Please sign in to comment.