Thanks for the reply Alex! I really appreciate it.
I've been reading manuals & sip specs all day, and I think that I found my answer, and it really is an easy one. here's my own answer to my question, can you let me know if this sounds right?
When a message is send from a user agent (on the public internet) to my gatweway & then to the proxy (on a private network), the gateway will add a via on to the message. that's how open SER (or any other proxy) can send a response message back to user agent on the public internet via the gateway.
It's really the same thing as setting up a registrar, or any other kind of proxy/user agent that's going to communicate via a SBC of any kind. So, it that right? is that how the SIP via header is used?
I understand the part about registrations. We're not currently doing that in our network, we're using all static IP addressing. I plan on using registrations in the future. the gateway that I'm using can act as a session border controller, but it can also act as a class 4/5 switch (TDM or IP). so it's some serious overkill for what I want to do here. :o)
Thanks again for the reply,
--Doug
----- Original Message ---- From: Alex Balashov abalashov@evaristesys.com To: Doug McLetchie dougmcletchieatwork@yahoo.com Cc: users@lists.openser.org Sent: Wednesday, February 6, 2008 1:23:51 AM Subject: Re: [OpenSER-Users] newbie questions
Doug,
Doug McLetchie wrote:
For inbound calls (calls coming from another carrier to my big expensive gateway & destined for a specific PBX), I'd like my gateway to send the call to the proxy, who will determine which PBX to send the call to, and then send the call to to correct PBX via the Gateway. I don't understand how to set up OpenSER to send the call via the Gateway. If I provision the static ip address of the PBX in the proxy, won't it try to send directly to that IP address instead of sending it to the Gateway? I think that the feature that I'm looking for is something like an outbound proxy, for the proxy. (does that make sense?)
OpenSER can certainly do what you are trying to accomplish.
SIP routing is done by URI, which consists of a "user" part and a "domain" part. The "user" part is the number (or alphanumeric identification, in the case of pure-VoIP peering) and the "domain" part is the IP "place" at which the "user" part is reachable.
When you route a call to some URI, what you are really saying is, "Here, domain, you must know what to do with this 'user' part - i.e. have reachability information for it (a SIP contact bound from a registration, for example)."
A proxy by itself isn't enough. If you need to reach these PBXs, you clearly need to know how to reach them. This requires a SIP registrar somewhere, so that the PBXs can register against it and say, "Here, you can reach me at such and such IP and port." Or, I suppose, you can define these contacts statically with a database interface from the proxy, in which case you don't need to use a registrar.
I don't know what this Big Expensive Gateway is, but if it's something like a Session Border Controller, it should be able to forward SIP REGISTER requests to your proxy/registrar. Or do they register against the gateway?
Either way, you can perform this resolution with OpenSER.
The problem you *might* run into is sending the same logical call leg back to the Gateway. Depending on what it is, it may not like that and perceive a call routing loop, because the call that went through it to the proxy is the "same" call (in terms of SIP Call-ID, and other things that make up a logical call "leg") that is now being sent back around to it. This problem is often solved with the introduction of a back-to-back user agent which can re-originate a different call leg.
Doug,
Doug McLetchie wrote:
I've been reading manuals & sip specs all day, and I think that I found my answer, and it really is an easy one. here's my own answer to my question, can you let me know if this sounds right?
When a message is send from a user agent (on the public internet) to my gatweway & then to the proxy (on a private network), the gateway will add a via on to the message. that's how open SER (or any other proxy) can send a response message back to user agent on the public internet via the gateway.
It's really the same thing as setting up a registrar, or any other kind of proxy/user agent that's going to communicate via a SBC of any kind. So, it that right? is that how the SIP via header is used?
The Via: header is used to indicate to the receiving endpoint / next hop the route the message took to get there. In and of itself, it does nothing to require that the message be passed back through any of the intermediate elements detailed in the Via: header stack - by default, it will circumvent it and go back to the endpoint associated with the source URI.
If you want to capture the responses at the proxy as well, that is done by having it append a Route: field, which instructs the receiving endpoint that all further messages in this dialog should be relayed back through it. In OpenSER, that is done with record_route().
Cheers,
On Feb 7, 2008, at 4:52 AM, Alex Balashov wrote:
Doug,
Doug McLetchie wrote:
I've been reading manuals & sip specs all day, and I think that I found my answer, and it really is an easy one. here's my own answer to my question, can you let me know if this sounds right?
When a message is send from a user agent (on the public internet) to my gatweway & then to the proxy (on a private network), the gateway will add a via on to the message. that's how open SER (or any other proxy) can send a response message back to user agent on the public internet via the gateway.
It's really the same thing as setting up a registrar, or any other kind of proxy/user agent that's going to communicate via a SBC of any kind. So, it that right? is that how the SIP via header is used?
The Via: header is used to indicate to the receiving endpoint / next hop the route the message took to get there. In and of itself, it does nothing to require that the message be passed back through any of the intermediate elements detailed in the Via: header stack - by default, it will circumvent it and go back to the endpoint associated with the source URI.
Via header indicates how the proxy MUST send the responses. It could not be circumvent. "Each proxy uses the Via header field to determine where to send the response and removes its own address from the top." (RFC 3261 - p13) 8.1.3.3 Vias If more than one Via header field value is present in a response, the UAC SHOULD discard the message. The presence of additional Via header field values that precede the originator of the request suggests that the message was misrouted or possibly corrupted. 8.2.6.2 The Via header field values in the response MUST equal the Via header field values in the request and MUST maintain the same ordering.
If you want to capture the responses at the proxy as well, that is done by having it append a Route: field, which instructs the receiving endpoint that all further messages in this dialog should be relayed back through it. In OpenSER, that is done with record_route().
Record Route header is used to capture the route that must be used for future requests within a existing dialog.
The route simplication is done by sending future requests of a dialog to the contact uri received in the INVITE response. But the recorded route must be respected. Otherwise, statefull proxy will be muddled. "While the Via header field tells other elements where to send the response, the Contact header field tells other elements where to send future requests." (RFC3261 - p12)
Cheers,
-- Alex Balashov Evariste Systems Web : http://www.evaristesys.com/ Tel : (+1) (678) 954-0670 Direct : (+1) (678) 954-0671 Mobile : (+1) (706) 338-8599
Users mailing list Users@lists.openser.org http://lists.openser.org/cgi-bin/mailman/listinfo/users