[Kamailio-Users] Multiple SIP Proxy Environment / Socket Information

Brandon Armstead brandon at cryy.com
Wed Apr 29 11:45:31 CEST 2009


Daniel,

    Yes I'm doing an append_hf("X-Duri: $du\r\n"); inside of branch_route[]
i.e.:

branch_route[2]
{
    if(isbflagset(4)){
        # thats me!
    } else {
        # at this point X-Duri is null, so we are not saving it from the
lookup?
        # we need to save this to pass onto Proxy B, however the value is
NULL at this point, and at the point of Proxy B (when received).
        append_hf("X-Duri: $avp(s:duri)\r\n");
        if(isbflagset(6)){
            $du = "sip:PROXY_B;transport=udp;";
        }
    }

    xlog("L_INFO", "[$ci][branch_route][$T_branch_idx] ru=$ru fu=$fu tu=$tu
si=$si flag=$bF du=$du");
}

Then when X-Duri reaches Proxy B, if I see the INVITE comes from Proxy A, I
take X-Duri and restore "$du" with the correct value.

However this is causing issues now as the value is <null>, I've tried saving
$du into avp after looking up usrloc, I've tried simply calling $du in
branch_route[], and I've tried saving $du in loose_route() into an avp, all
to no avail.

What am I missing here as far as passing the value of $du from branch route
to header, to pass along to Proxy B.

Thanks again!

On Wed, Apr 29, 2009 at 2:42 AM, Daniel-Constantin Mierla <miconda at gmail.com
> wrote:

>
>
> On 04/29/2009 11:32 AM, Brandon Armstead wrote:
>
>> Daniel,
>>
>>    It looks like you helped me find part of the problem, apparently Proxy
>> A was sharing same branch flag as the one I used to distinguish which proxy
>> it was.  I corrected this and now branch flag for branch 1 is 00000060, and
>> branch 2 is 00000040, however now both branches are routed appropriately to
>> the correct server, however the X-Duri (to restore to in the INVITE) is
>> null.
>>
>
> I may not followed all discussion branch - the X-Duri is a header you
> append to the message? If yes, it is not visible immediately in the script,
> but you can see it when the messages is ent to the network.
>
>>  Do I need to save this value into an AVP after lookup("location")?
>>
>
> What you need to do with it? Where is its values taken from?
>
> Cheers,
> Daniel
>
>   Or should it be readily available in branch_route[], and for some reason
>> my variable is null?
>>
>> P.S. (recap)
>> Proxy A NAT Branch Flag: 5
>> Proxy B NAT Branch Flag: 5
>>
>> (Problem existed as used Flag 5 to distinguish "itself" as proxy) --
>> changed this to 4 so now:
>>
>> Proxy A NAT Branch Flag: 4
>> Proxy B NAT Branch Flag: 6
>>
>> Calls are routed to Proxy B
>>
>> X-Duri: <null> (as it is null in Proxy A).  I'm append_hf(X-Duri: $du)
>> inside of branch_route[].
>>
>> Thanks!
>>
>> On Wed, Apr 29, 2009 at 2:17 AM, Daniel-Constantin Mierla <
>> miconda at gmail.com <mailto:miconda at gmail.com>> wrote:
>>
>>
>>
>>    On 04/29/2009 11:11 AM, Brandon Armstead wrote:
>>
>>        Daniel,
>>
>>           No that would be the UAC (I have two clients behind the
>>        same NAT).  The problem is it looks like the branch flag is
>>        not being set for both for some reason (when comparing) even
>>        though in the database it is the same?
>>
>>
>>    So you have the brach flag for nat and branch flags for next
>>    proxy, right? What is the value of branch flag? The value are
>>    different indeed, but some flags  you are looking for might be
>>    set. It is easier spot if you print the hexa format of the flags
>>    rather than decimal one.
>>
>>    Cheers,
>>    Daniel
>>
>>         Take a look at the flag= value from each of those logs (this
>>        is one call) to a UAC with two registrations line1/line2.
>>
>>        On Wed, Apr 29, 2009 at 2:02 AM, Daniel-Constantin Mierla
>>        <miconda at gmail.com <mailto:miconda at gmail.com>
>>        <mailto:miconda at gmail.com <mailto:miconda at gmail.com>>> wrote:
>>
>>           Hello,
>>
>>
>>           On 04/29/2009 10:53 AM, Brandon Armstead wrote:
>>
>>               Hey guys,
>>
>>                  Still facing a few challenges and seeing if any further
>>               input, I'm specifically trying inaki's suggestions /
>>        method,
>>               but here are the current problems:
>>
>>               sip:/etc/kamailio/m4cfgs# tail -f /var/log/openser.log
>>        | grep
>>               -v -E 'non-local|repeated' | grep branch_route
>>               Apr 29 07:38:05 db06 /sbin/kamailio[21279]:
>>               [77e4c600-147767fb at 172.16.1.35
>>        <mailto:77e4c600-147767fb at 172.16.1.35>
>>               <mailto:77e4c600-147767fb at 172.16.1.35
>>        <mailto:77e4c600-147767fb at 172.16.1.35>>
>>               <mailto:77e4c600-147767fb at 172.16.1.35
>>        <mailto:77e4c600-147767fb at 172.16.1.35>
>>               <mailto:77e4c600-147767fb at 172.16.1.35
>>        <mailto:77e4c600-147767fb at 172.16.1.35>>>][branch_route][1]
>>               ru=sip:CALLEE at 99.XX.XX.XX:5079
>>        fu=sip:CALLER at sip.example.com <sip%3ACALLER at sip.example.com>
>>        <mailto:sip%3ACALLER at sip.example.com<sip%253ACALLER at sip.example.com>
>> >
>>               <mailto:sip%3ACALLER at sip.example.com<sip%253ACALLER at sip.example.com>
>>        <mailto:sip%253ACALLER at sip.example.com<sip%25253ACALLER at sip.example.com>
>> >>
>>               <mailto:sip%3ACALLER at sip.example.com<sip%253ACALLER at sip.example.com>
>>        <mailto:sip%253ACALLER at sip.example.com<sip%25253ACALLER at sip.example.com>
>> >
>>               <mailto:sip%253ACALLER at sip.example.com<sip%25253ACALLER at sip.example.com>
>>        <mailto:sip%25253ACALLER at sip.example.com<sip%2525253ACALLER at sip.example.com>
>> >>>
>>
>>               tu=sip:CALLEE at sip.example.com<sip%3ACALLEE at sip.example.com>
>>        <mailto:sip%3ACALLEE at sip.example.com<sip%253ACALLEE at sip.example.com>
>> >
>>               <mailto:sip%3ACALLEE at sip.example.com<sip%253ACALLEE at sip.example.com>
>>        <mailto:sip%253ACALLEE at sip.example.com<sip%25253ACALLEE at sip.example.com>
>> >>
>>               <mailto:sip%3ACALLEE at sip.example.com<sip%253ACALLEE at sip.example.com>
>>        <mailto:sip%253ACALLEE at sip.example.com<sip%25253ACALLEE at sip.example.com>
>> >
>>               <mailto:sip%253ACALLEE at sip.example.com<sip%25253ACALLEE at sip.example.com>
>>        <mailto:sip%25253ACALLEE at sip.example.com<sip%2525253ACALLEE at sip.example.com>>>>
>> si=99.XX.XX.XX
>>
>>               flag=96 du=<null>
>>
>>
>>               This call is not sent to Proxy B (this is a result of bflag
>>               not being set) ???
>>
>>           is the proxy B at 99.XX.XX.XX:5079? If not, then set $du to the
>>           address of that proxy. It is null in the log above.
>>
>>           Cheers,
>>           Daniel
>>
>>               My question is "Why", I look at the AOR / usrloc and
>>        they both
>>               have the "same exact flags set", this call is rather sent
>>               directly to UAC endpoint.
>>
>>               ---
>>
>>               Apr 29 07:38:05 db06 /sbin/kamailio[21279]:
>>               [77e4c600-147767fb at 172.16.1.35
>>        <mailto:77e4c600-147767fb at 172.16.1.35>
>>               <mailto:77e4c600-147767fb at 172.16.1.35
>>        <mailto:77e4c600-147767fb at 172.16.1.35>>
>>               <mailto:77e4c600-147767fb at 172.16.1.35
>>        <mailto:77e4c600-147767fb at 172.16.1.35>
>>               <mailto:77e4c600-147767fb at 172.16.1.35
>>        <mailto:77e4c600-147767fb at 172.16.1.35>>>][branch_route][2]
>>               ru=sip:CALLEE at 99.XX.XX.XX:5062
>>        fu=sip:CALLER at sip.example.com <sip%3ACALLER at sip.example.com>
>>        <mailto:sip%3ACALLER at sip.example.com<sip%253ACALLER at sip.example.com>
>> >
>>               <mailto:sip%3ACALLER at sip.example.com<sip%253ACALLER at sip.example.com>
>>        <mailto:sip%253ACALLER at sip.example.com<sip%25253ACALLER at sip.example.com>
>> >>
>>               <mailto:sip%3ACALLER at sip.example.com<sip%253ACALLER at sip.example.com>
>>        <mailto:sip%253ACALLER at sip.example.com<sip%25253ACALLER at sip.example.com>
>> >
>>               <mailto:sip%253ACALLER at sip.example.com<sip%25253ACALLER at sip.example.com>
>>        <mailto:sip%25253ACALLER at sip.example.com<sip%2525253ACALLER at sip.example.com>
>> >>>
>>
>>               tu=sip:CALLEE at sip.example.com<sip%3ACALLEE at sip.example.com>
>>        <mailto:sip%3ACALLEE at sip.example.com<sip%253ACALLEE at sip.example.com>
>> >
>>               <mailto:sip%3ACALLEE at sip.example.com<sip%253ACALLEE at sip.example.com>
>>        <mailto:sip%253ACALLEE at sip.example.com<sip%25253ACALLEE at sip.example.com>
>> >>
>>               <mailto:sip%3ACALLEE at sip.example.com<sip%253ACALLEE at sip.example.com>
>>        <mailto:sip%253ACALLEE at sip.example.com<sip%25253ACALLEE at sip.example.com>
>> >
>>               <mailto:sip%253ACALLEE at sip.example.com<sip%25253ACALLEE at sip.example.com>
>>        <mailto:sip%25253ACALLEE at sip.example.com<sip%2525253ACALLEE at sip.example.com>>>>
>> si=99.XX.XX.XX
>>
>>
>>               flag=64 du=sip:PROXY_B;transport=udp;
>>
>>
>>               This call is sent to Proxy B (however Proxy B) -
>>        however the
>>               X-Duri (is null) as it is not existant in Proxy A's branch
>>               route? should I save this from right after the
>>               lookup("location") result into an avp?
>>
>>
>>               Again, thank you for all and any help, thanks!
>>
>>               On Mon, Apr 27, 2009 at 5:42 PM, Brandon Armstead
>>               <brandon at cryy.com <mailto:brandon at cryy.com>
>>        <mailto:brandon at cryy.com <mailto:brandon at cryy.com>>
>>               <mailto:brandon at cryy.com <mailto:brandon at cryy.com>
>>        <mailto:brandon at cryy.com <mailto:brandon at cryy.com>>>> wrote:
>>
>>                  Klaus, Inaki, Daniel,
>>
>>                      Thanks!  Sorry I did not see this email come
>>        through, I'm
>>                  going to go ahead and give this method a go, and I'll
>>               update with
>>                  the results, I have optimistic views.
>>
>>                  As for the reason I was rewriting $ru and setting $du to
>>               null, is
>>                  because originally when I just changed $du to the
>>        'destination
>>                  proxy' it did not seem to work at all (I do not even
>>        recall
>>               what
>>                  exactly what was happening) however I decided to just
>>               change $ru,
>>                  and have the other proxy just "lookup" the usrloc
>>        information
>>                  again.  Again, this method looks interesting and
>>        I'll let
>>               you guys
>>                  know how it goes, thanks for all the input and help!
>>
>>                  Sincerely,
>>                  Brandon.
>>
>>
>>                  On Fri, Apr 24, 2009 at 1:18 AM, Klaus Darilion
>>                  <klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>
>>               <mailto:klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>>
>>                  <mailto:klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>
>>               <mailto:klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>>>> wrote:
>>
>>
>>
>>                      Brandon Armstead schrieb:
>>
>>                          Klaus,
>>
>>                             So I took you and Inaki's input and
>>        essentially
>>                          constructed a setup like so after the
>>               lookup("location") call:
>>
>>                          if(isbflagset(1)){
>>                             $du = null;
>>                             $rd = "P1";
>>                          } else if(isbflagset(2)){
>>                             $du = null;
>>                             $rd = "P2";
>>                          } else if(isbflagset(3)){
>>                             $du = null;
>>                             $rd = "P3";
>>                          } else if(isbflagset(4)){
>>                             $du = null;
>>                             $rd = "P4";
>>                          }
>>
>>
>>                      1. The above code has to be in the branch_route
>>        block -
>>                      otherwise multiple registrations of a single
>>        user are not
>>                      handled correctly.
>>
>>                      2. you are rewriting the RURI. You should not do
>>        that
>>               as some
>>                      clients wants to the in the RURI the Contact
>>        provided
>>               during
>>                      REGISTER.
>>
>>                      3. probably you use fix_nated_register() to
>>        store the
>>               public
>>                      IP:port of the client too. After lookup, this
>>               information is
>>                      written to DURI. Thus, by setting $du you overwrite
>>               this info.
>>                      You should put it into a special header so that
>>        you can
>>                      restore it in the other proxy.
>>
>>                      Here a snippet how it should work (untested, no
>>               warranty): ( I
>>                      use the term "originating" proxy for the proxy which
>>               received
>>                      the INVITE and the term "serving" proxy for the
>>        proxy which
>>                      handles the connection/registration of a certain SIP
>>               client).
>>
>>                      e.g:
>>                      Alice -----INVITE-----> P1------->P2----->Bob2
>>                                             /  \
>>                                            /    \
>>                                           /      V
>>                                          V       P3---->Bob3
>>                                       Bob1
>>
>>                      Bob's client Bob1 is connected to P1.
>>                      Bob's client Bob2 is connected to P2.
>>                      Bob's client Bob3 is connected to P3.
>>
>>                      So, P1 is the originating proxy. P2 is the
>>        serving proxy of
>>                      Bob2. ....
>>
>>                      We do NAT traversal (note: we must not call
>>                      fix_nated_contact() for messages sent between the
>>               proxies!):
>>                      the originating proxy for the call-leg to the
>>        caller, the
>>                      serving proxy for the call-leg to the callee.
>>                      The RTP proxy will be managed by the originating
>>        proxy
>>               only.
>>
>>
>>
>>                      route{
>>                      if (loose_route()) {
>>                       ... additional loose route processing...
>>                       if (check_route_param("rtpproxy=yes")) {
>>                         force_rtp_proxy();
>>                         setbflag(7);
>>                       }
>>
>>                       # downstream: in-dialog request is in the same
>>               direction as the
>>                       # initial request
>>                       if ( (check_route_param("nat=caller") &&
>>                      is_direction("downstream"))
>>                         || (check_route_param("nat=callee") &&
>>                      is_direction("upstream"))) {
>>                         fix_nated_contact();
>>                       } else if (check_route_param("nat=both") {
>>                         fix_nated_contact();
>>                         setbflag(8);
>>                       } else {
>>                         setbflag(8);
>>                       }
>>
>>                       t_on_reply("1");
>>                       t_relay();
>>                       exit();
>>                      }
>>                      ...
>>
>>                      # I am proxy 1
>>                      if ((src_ip=ip.of.proxy.2) ||
>>        (src_ip=ip.of.proxy.3)...) {
>>                       # request comes from other proxy, that means I
>>        am the
>>                       # serving proxy
>>                       # do not lookup(), RURI is already set and
>>                       # DURI is provided in our X-DURI header
>>                       $du = $header(X-DURI);
>>                       # we do not care about an RTP proxy because
>>        that's the
>>               task
>>                      of the
>>                       # proxy which performed the lookup() (the
>>        originating
>>               proxy)
>>                       # add some record-route cookie to mark that we
>>        should
>>               perform
>>                       # SIP NAT traversal for the callee
>>                       add_rr_param(";nat=callee");
>>                       # activate reply_route to fix_nated_contact of
>>        callee
>>                       setbflag(8); # flag 8 = fix contact
>>                       t_on_reply("1");
>>                       record_route();
>>                       t_relay();
>>                       exit;
>>                      }
>>
>>                      ...
>>                      # a new request - thus I am the originating proxy
>>
>>                      if ($dU looks like phone number) {
>>                        ... route to Gateway....
>>                       exit;
>>                      }
>>
>>                      if (!lookup("location")) {
>>                       sl_send_reply("404","not found");
>>                       exit;
>>                      }
>>                      # activate branch route to have dedicated
>>        routing per
>>               branch
>>                      t_on_branch("1");
>>
>>                      # activate reply route to activate RTP proxy
>>                      t_on_reply("1");
>>
>>                      # NAT traversal
>>                      fix_nated_contact();
>>
>>                      record_route();
>>                      t_relay();
>>                      exit;
>>                      }
>>
>>                      branch_route[1]{
>>                       if(isbflagset(1)){
>>                        # oh, that's me
>>
>>                        # add some record-route cookie to mark that we
>>        should
>>               perform
>>                        # SIP NAT traversal for the callee and caller
>>                        add_rr_param(";nat=both");
>>
>>                        # add some record-route cookie to mark that we are
>>                        # in charge for the RTP proxy
>>                        add_rr_param(";rtpproxy=yes");
>>
>>                        force_rtp_proxy();
>>                        setbflag(7); # flag 7 = RTP proxy
>>                       } else {
>>                        # add some record-route cookie to mark that we
>>        should
>>               perform
>>                        # SIP NAT traversal for the caller
>>                        add_rr_param(";nat=caller");
>>
>>                        # we have to route the request to the serving
>>        proxy
>>                        # write DURI in the header
>>                        append_hf("X-DURI: $du");
>>                        if(isbflagset(2)){
>>                            $du = sip:ip.of.proxy.2;transport=udp;
>>                        } else if(isbflagset(3)){
>>                            $du = sip:ip.of.proxy.3;transport=udp;
>>                        } else if(isbflagset(4)){
>>                            $du = sip:ip.of.proxy.4;transport=udp;
>>                        }
>>                       }
>>                      }
>>
>>                      reply_route[1]{
>>                       if (isbflagset(7) && has_body("application/sdp")) {
>>                         force_rtp_proxy()
>>                       }
>>                       if (isbflagset(8)) {
>>                         fix_nated_contact()
>>                       }
>>                      }
>>
>>
>>
>>                      Note: this code does not care about the received
>>        socket
>>               of the
>>                      proxy. Thus it works if the proxy listens only
>>        on one port.
>>
>>                      regards
>>                      klaus
>>
>>
>>                          On each Proxy, I changed the code appropriately
>>               excluding
>>                          the Proxy from itself (so it does not forward to
>>               itself).
>>                           I'm noticing weird behavior however as it
>>        seems as if
>>                          what is happening is it created other issues
>>        such as:
>>
>>                          [INCOMING SERVER] -> P1 -> P2 -> P1 -> (loop?)
>>
>>                          Also I setup this test amongst two development
>>               servers (in
>>                          which case it worked without issues).  Once I
>>               included in
>>                          more development instances into the ring it
>>        seemed
>>               as if
>>                          the flags were being set when they should
>>        not be?
>>
>>                          I.e. I placed a call FROM UA1 (with bflag 5 SET)
>>               From the
>>                          above example configuration ^ code.  If you
>>        notice
>>               (flag
>>                          5) is missing.  To UA2 (Flag 3), again this
>>        looked
>>               to be
>>                          doing some strange things such as acting as
>>        if another
>>                          flag was set when it should not have been, thus
>>               forwarding
>>                          to the wrong proxy or the wrong proxy order.  Do
>>               you guys
>>                          have any further thoughts or input on this?
>>         Thanks!
>>
>>                          On Thu, Apr 23, 2009 at 12:31 AM, Klaus Darilion
>>                          <klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>
>>               <mailto:klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>>
>>                          <mailto:klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>
>>               <mailto:klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>>>
>>                          <mailto:klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>
>>               <mailto:klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>>
>>                          <mailto:klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>
>>               <mailto:klaus.mailinglists at pernau.at
>>        <mailto:klaus.mailinglists at pernau.at>>>>> wrote:
>>
>>                             Hi Brandon!
>>
>>                             Back to the original email ....
>>
>>                             Brandon Armstead schrieb:
>>
>>                                 Hello guys,
>>
>>                                    Is there a method upon using
>>               lookup("location")
>>                          to also pull
>>                                 out the "socket" information for the
>>        original
>>                          location the UAC
>>                                 registered to, for scenarios of this
>>        example:
>>
>>                                 P1 & P2 share same usrloc database.
>>
>>                                 UA1 registers to P1
>>                                 UA2 registers to P2
>>
>>                                 UA1 calls UA2
>>
>>                                 UA1 invites -> P1 -> INVITES -> UA2
>>               (bypassing P2
>>                          -- where the
>>                                 actual nat binding is).
>>
>>                                 Now upon P1 looking up usrloc for UA2, I
>>               would like
>>                          to recognize
>>                                 that P1 is not the Proxy to deliver the
>>               call, and
>>                          forward the
>>                                 request to P2 to send to UA2.
>>
>>                                 So currently I have:
>>
>>                                 UA1 INVITE -> P1 INVITE -> UA2
>>
>>                                 I wish to have:
>>
>>                                 UA1 INVITE -> P1 INVITE -> P2 INVITE
>>        -> UA2
>>
>>                                 Is there an easy method to do this?
>>         I have been
>>                          looking at the
>>                                 new nat traversal module it looks
>>        like it is
>>               doable
>>                          with this
>>                                 (any further input as far as that?).
>>         Also is it
>>                          possible with
>>                                 the classic Nat Helper module?  Any
>>        input is
>>                          appreciated, thanks!
>>
>>
>>                             I think the nat_traversal module can not
>>        help you in
>>                          this case, nor
>>                             nathelper.
>>
>>                             One possibility would be to spoof at P1
>>        the IP
>>               address
>>                          of P2 -
>>                             nevertheless this would cause the reply
>>        sent back to
>>                          P2, but the
>>                             transaction is created in P1. (and you
>>        need to hack
>>                          Kamailio for IP
>>                             spoofing).
>>
>>                             Another easy solution would be: In P1 set
>>        a certain
>>                          branch-flag when
>>                             the client registers, e.g. bflag 1. In P2
>>        set a
>>               certain
>>                          branch-flag
>>                             when the client registers, e.g. bflag 2.
>>
>>                             Now, if a user is called, just make a
>>        lookup() and
>>                          t_relay. Further
>>                             in the branch_route check if:
>>                              in P1: isbflagset(2) --> forward to P2
>>                              in P2: isbflagset(1) --> forward to P1
>>
>>                             klaus
>>
>>
>>
>>
>>
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>>
>> _______________________________________________
>>                                 Kamailio (OpenSER) - Users mailing list
>>                                 Users at lists.kamailio.org
>>        <mailto:Users at lists.kamailio.org>
>>               <mailto:Users at lists.kamailio.org
>>        <mailto:Users at lists.kamailio.org>>
>>                          <mailto:Users at lists.kamailio.org
>>        <mailto:Users at lists.kamailio.org>
>>               <mailto:Users at lists.kamailio.org
>>        <mailto:Users at lists.kamailio.org>>>
>>                          <mailto:Users at lists.kamailio.org
>>        <mailto:Users at lists.kamailio.org>
>>               <mailto:Users at lists.kamailio.org
>>        <mailto:Users at lists.kamailio.org>>
>>                          <mailto:Users at lists.kamailio.org
>>        <mailto:Users at lists.kamailio.org>
>>               <mailto:Users at lists.kamailio.org
>>        <mailto:Users at lists.kamailio.org>>>>
>>
>>
>> http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
>>
>> http://lists.openser-project.org/cgi-bin/mailman/listinfo/users
>>
>>
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>>               _______________________________________________
>>               Kamailio (OpenSER) - Users mailing list
>>               Users at lists.kamailio.org
>>        <mailto:Users at lists.kamailio.org>
>>        <mailto:Users at lists.kamailio.org
>>        <mailto:Users at lists.kamailio.org>>
>>
>>               http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
>>
>> http://lists.openser-project.org/cgi-bin/mailman/listinfo/users
>>
>>
>>           --    Daniel-Constantin Mierla
>>           http://www.asipto.com/
>>
>>
>>
>>    --    Daniel-Constantin Mierla
>>    http://www.asipto.com/
>>
>>
>>
> --
> Daniel-Constantin Mierla
> http://www.asipto.com/
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kamailio.org/pipermail/users/attachments/20090429/1a8bcdf9/attachment-0001.htm 


More information about the Users mailing list