I’ve switched from a Dockerized Kamailio instance to a native installation.
Here is my most recent trace when trying to forward traffic:
0(70677) INFO: <script>: ORIGINATOR -> REGISTER: Destination URI is now
sip:192.168.86.110:5061
0(70677) ERROR: *** cfgtrace:request_route=[DEFAULT_ROUTE]
c=[/etc/kamailio/kamailio-proxy.cfg] l=155 a=24 n=t_relay
0(70677) ERROR: <core> [core/forward.c:181]: get_out_socket(): no socket found
0(70677) ERROR: <core> [core/forward.c:183]: get_out_socket(): no
corresponding socket found for(udp:192.168.86.110:5061)
0(70677) ERROR: tm [./ut.h:318]: uri2dst2(): no corresponding socket found for
"192.168.86.110" af 2 (udp:192.168.86.110:5061)
0(70677) ERROR: tm [t_fwd.c:467]: prepare_new_uac(): can't fwd to af 2, proto
1 (no corresponding listening socket)
0(70677) ERROR: tm [t_fwd.c:1724]: t_forward_nonack(): failure to add branches
0(70677) ERROR: *** cfgtrace:request_route=[DEFAULT_ROUTE]
c=[/etc/kamailio/kamailio-proxy.cfg] l=156 a=2 n=exit
My Kamailio instance is running on 192.168.86.107:6060. The originating service
is on 192.168.86.110:5060. The REGISTER service is on 192.168.86.110:5061.
The refactor in my architecture I’m trying to make is:
- previously: Originator Service -> Register Service
- now: Originator -> Kamailio -> Register Service
I’m trying to get traffic from 192.168.86.110:5060 to route to
192.168.86.110:5061 but keep seeing this “no socket found” error. I didn’t
think I was trying to bind that address, just rewriting the $du to point to the
different host and port...
# ORIGINATOR sent us something
if ( $(ct{nameaddr.uri}{uri.port}) == PORT_ORIGINATOR ) {
xlog("L_INFO", "ORIGINATOR: sent $rm\n”);
if (is_method("REGISTER")) {
$du = "sip: HOST_REGISTER:PORT_REGISTER";
xlog("L_INFO", "ORIGINATOR -> REGISTER: Destination URI is now $du\n");
t_relay();
exit;
}
...
}
## END SNIPPET ##
Apologies if I’m missing something obvious! Thanks as always for your time.
-Michael
> On Nov 19, 2019, at 10:24, Michael Iedema <[email protected]> wrote:
>
> Hi all,
>
> I am trying to place Kamailio between several SIP services which are
> differentiated by port and by the type of message they handle. To be
> concrete, here are the services:
>
> Originator:
> - reachable on port 5060
> - originates all traffic to the services
>
> Service A:
> - reachable on port 5061
> - handles REGISTER
>
> Service B:
> - reachable on port 5062
> - handles INVITE
>
> Service C:
> - reachable on port 5063
> - handles MESSAGE
>
> The services, originator and Kamailio instance may all be run on the same IP
> or may be split onto different addresses. Previously, the originator needed
> to know the address and port of each service. Now I want to make Kamailio
> responsible for that task so it can be done more intelligently.
>
> To start though I simply want to get traffic flowing between the services and
> this is where I’m struggling to climb the learning curve. In my test setup
> the originator and all services are on the same IP with only Kamailio running
> on a different IP.
>
> Address 1 Address 2
> ========================
> Originator <--> Kamailio:6060
> |
> |
> Service A <-------> |
> Service B <-------> |
> Service C <-------> |
>
>
> My first attempt at the logic looks like this:
>
> # HOST DEFINITIONS
> #!substdef "/HOST_ORIGINATOR/192.168.86.110/"
> #!substdef "/HOST_REGISTER/192.168.86.110/“
> #!substdef "/HOST_INVITE/192.168.86.110/"
> #!substdef "/HOST_MESSAGE/192.168.86.110/"
>
> # PORT DEFINITIONS
> #!substdef “/PORT_ORIGINATOR/5060/"
> #!substdef "/PORT_REGISTER/5061/“
> #!substdef "/PORT_INVITE/5062/"
> #!substdef "/PORT_MESSAGE/5063/"
>
> # ROUTE LOGIC
> route {
>
> # ORIGINATOR sent us something
> if ( $(ct{nameaddr.uri}{uri.port}) == HOST_ORIGINATOR ) {
>
> xlog("L_INFO", "ORIGINATOR: sent $rm\n”);
>
> if (is_method("REGISTER")) {
> $du = "sip: HOST_REGISTER:PORT_REGISTER";
> xlog("L_INFO", "ORIGINATOR -> REGISTER: Destination URI is now $du\n");
> t_relay();
> exit;
> }
> }
> …
>
> #### END SNIPPET ####
>
>
> My very newbie questions are:
> - Am I even on the right track here? I understand that t_relay() establishes
> a stateful dialog handler between the originator and register services.
> - Can I accomplish this bi-directional path statelessly with forward()?
> - Do I need to add logic to handle the messages from the REGISTER service
> back to ORIGINATOR?
>
> This config currently fails because of "no corresponding socket found” when
> the relay triggers. I believe this is because I’m running the Kamailio
> instance in a Docker container so my first step today is to set up a native
> install.
>
> I also looked at the dispatcher module which seems very close to what I want
> to do. Maybe that’s a more natural way to go?
>
>
>
> Anyway, apologies for the lengthy explanation. I hope it is at least clear
> what I intend to do. I will gladly research and do trial and error to solve
> this but need to know I’m going down roughly the right path. I’m not sure
> what I should even be googling even of the time :-)
>
>
> Thanks as always for your time and the great software!
>
> Regards,
> -Michael
>
>
>
_______________________________________________
Kamailio (SER) - Users Mailing List
[email protected]
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users