Hi ,

I've discovered that there is a problem with WeSIP looping back to its own address (which is what you are trying to do). We are fixing it but it'll take more time. As a workaround you can do thre different things.

1) Let OpenSER discover the next hop before passing the message to WeSIP then proxy from WeSIP to the next hop.
        
<--------- Transaction 1 ---------> <-------- Transaction 2------------>
        
        UAC --------->       [OpenSER --> WeSIP --> OpenSER] --------->     UAS
        
        1.1 UAC sends request with RURI=sip:[EMAIL PROTECTED]
1.2 OpenSER modifies the RURI after consulting the location info RURI=sip:[EMAIL PROTECTED]
        1.3 OpenSER passes the modified message to WeSIP
        1.4 WeSIP processes and proxies
1.5 OpenSER processes message coming from WeSIP (if X-WeSIP-SPIRAL was used) and forwards it downstream

2) Use separated WeSIP with its own OpenSER frontend( see Openser.cfg working as WeSIP front-end at http://www.wesip.com/mediawiki/ index.php/Configuration#Openser.cfg_in_standalone)
        
<---Trans 1----><----- Transaction 2 ------><-----Transaction 3------ ><---Trans 4--->

UAC ----> OpenSER ----> (WeSIP with OpenSER frontend) ----> OpenSER ------> UAS

        2.1 UAC sends request with RURI=sip:[EMAIL PROTECTED]
        2.2 OpenSER delivers message to standalone WeSIP
2.3 WeSIP processes and proxies back to OpenSER (WeSIP may RecordRoute or not) 2.4 OpenSER modifies the RURI after consulting the location info RURI=sip:[EMAIL PROTECTED]
        2.5 OpenSER proxies to UAS

3) Use different IP to make WeSIP think that it is forwarding to a different host and not looping

<-------Transaction 1--------><------------- Transaction 2 -------------><---Transaction 3---->

UAC ----> [OpenSER --> WeSIP --> OpenSER] ---------> OpenSER (192.168.1.12) ------> UAS
        
        1.1 UAC sends request with RURI=sip:[EMAIL PROTECTED]
1.2 OpenSER modifies the RURI to an alias IP RURI=sip: [EMAIL PROTECTED] (192.168.1.12 is a second IP where OpenSER listens)
        1.3 OpenSER passes the modified message to WeSIP
1.4 WeSIP processes and proxies to 192.168.1.12 (No loopback failure since 192.168.1.12 != 192.168.1.11) 1.5 OpenSER processes message coming from WeSIP (if X-WeSIP-SPIRAL was used) and forwards it to 192.168.1.12
        1.6 OpenSER receives proxied message (in IP 192.168.69.12)
        1.7 OpenSER applies location translation
        1.8 OpenSER forwards


Hope it helps

Regards

Gines


Hi Gines, thanks for your support


Your servlet named "neo" is being executed and looks like it is
proxying but what from what I see in the packet it is proxying to
itself. Could you try to proxy to another address and see if this
still happens ? Aside, could you send me your configuration files and
your servlet code ?

The serlvet code is the following

protected void doInvite(SipServletRequest callerInvite) throws ServletException,
IOException {


      //Get a proxy for this request
      Proxy callerProxy = callerInvite.getProxy();

        System.out.println("doInvite within neos servlet: requestURI is " +
callerInvite.getRequestURI() );


        callerProxy.proxyTo(callerInvite.getRequestURI());


    }


This code causes the "no route" exception. The println above gives :

doInvite within neos servlet: requestURI is sip:[EMAIL PROTECTED]

where 5002 is the called SIP phone and 192.168.1.11 is the address of my OpenSER
+ WeSIP box (i.e. the managed SIP domain)


Following your advice I have tried to change the proxyTo to a different address:


        SipURI dest = sipFactory.createSipURI("5002","192.168.1.16");
      callerProxy.proxyTo(dest);

It that case, the called phone (5002, IP address 192.168.1.16) gets the INVITE correctly. However, something puzzles me here: the serlvet is not supposed to know the IP address of the called phone. In my understanding, the AS processes the INVITE, then it must send it back to the proxy server which is supposed to
forward it to the next hop, is that right ?

Could you please give me an example of a doInvite which basically does nothing
and which lets the INVITE be forwarded to the called party ?


Finally here are my config files:

<<<<<<<<< Server.xml >>>>>>>>>

<Server port="5005" shutdown="SHUTDOWN" debug="1">
        <Service name="NEOS-Standalone">
<Connector className="org.apache.catalina.connector.http.HttpConnector"
                        port="7080" minProcessors="5" maxProcessors="5"
                        enableLookups="true" acceptCount="10" debug="0" />

                <Connector 
className="com.voztele.sipservlet.connector.SipConnector"
                        minProcessors="5" maxProcessors="5"
                        enableLookups="true" acceptCount="10" debug="1"
addresses="192.168.1.11:5060" pathName="com.voztele" protocol="udp" >
                                <ExtraProperties>
<Property key="com.voztele.javax.sip.SER_ADDRESS" value="127.0.0.1" />
                                        <Property key="com.voztele.javax.sip.SER_PORT" 
value="5080" />
                                        <Property key="com.voztele.STATISTICS" 
value="false" />
                                        <Property key="javax.sip.STACK_NAME" 
value="neos_as" />
                                        <Property key="javax.sip.THREAD_POOL_SIZE" 
value="10" />
<Property key="com.voztele.javax.sip.THREAD_POOL_SIZE" value="10" />
                                        <Property key="com.voztele.javax.sip.SPIRAL_HDR" 
value="true" />
<Property key="com.voztele.javax.sip.REENTRANT_LISTENER" value="true" /> <Property key="javax.sip.AUTOMATIC_DIALOG_SUPPORT" value="false" />
                                        <Property key="com.voztele.javax.sip.TRACE_LEVEL" 
value="3" />
                                </ExtraProperties>
                </Connector>

        <Engine name="Standalone" defaultHost="localhost" debug="1"
className="com.voztele.sipservlet.core.ConvergedEngine">

                        <Mapper 
className="org.apache.catalina.core.StandardEngineMapper"
protocol="HTTP/1.1"/>
                        <Mapper 
className="org.apache.catalina.core.StandardEngineMapper"
protocol="HTTP/1.0"/>
                        <Mapper 
className="com.voztele.sipservlet.core.EngineSipMapper"
protocol="SIP/2.0"/>
<Logger className="org.apache.catalina.logger.FileLogger" timestamp="true"/>
                        <Realm className="org.apache.catalina.realm.MemoryRealm" 
/>

                        <Host name="localhost" nameSip="192.168.1.11_5060" 
debug="1"
appBase="wesipapps" className="com.voztele.sipservlet.core.ConvergedHost">

<Logger className="org.apache.catalina.logger.FileLogger" timestamp="true"/>
                                <Mapper 
className="com.voztele.sipservlet.core.SipHostMapper"
protocol="SIP/2.0"/>
                                <Mapper 
className="org.apache.catalina.core.HttpHostMapper"
protocol="HTTP/1.1"/>
                                <Mapper 
className="org.apache.catalina.core.HttpHostMapper"
protocol="HTTP/1.0"/>
                        </Host>
                </Engine>
        </Service>
</Server>


<<<<<<<<<<openser.cfg>>>>>>>>>>>>>>
#
# $Id: openser.cfg 1827 2007-03-12 15:22:53Z bogdan_iancu $
#
# simple quick-start config script
# Please refer to the Core CookBook at http://www.openser.org/ dokuwiki/doku.php
# for a explanation of possible statements, functions and parameters.
#

# ----------- global configuration parameters ------------------------

debug=3            # debug level (cmd line: -dddddddddd)
fork=yes
#log_stderror=no    # (cmd line: -E)
children=4

# Uncomment these lines to enter debugging mode
#fork=no
log_stderror=yes
#


listen = tcp:192.168.1.11:5060
listen = udp:192.168.1.11:5060


# ------------------ module loading ----------------------------------

#set module path
mpath="/usr/local/lib/openser/modules/"

# Uncomment this if you want to use SQL database
#loadmodule "mysql.so"

loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "mi_fifo.so"

# added for WeSIP
loadmodule "seas.so"
modparam("seas","listen_sockets","127.0.0.1:5080")
# end added for WeSIP

# Uncomment this if you want digest authentication
# mysql.so must be loaded !
#loadmodule "auth.so"
#loadmodule "auth_db.so"

# ----------------- setting module-specific parameters ---------------

# -- mi_fifo params --

modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")

# -- usrloc params --

modparam("usrloc", "db_mode",   0)

# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
#modparam("usrloc", "db_mode", 2)

# -- auth params --
# Uncomment if you are using auth module
#
#modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this config),
# uncomment also the following parameter)
#
#modparam("auth_db", "password_column", "password")

# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)

# -------------------------  request routing logic -------------------

# main routing logic

route{

        # initial sanity checks -- messages with
        # max_forwards==0, or excessively long requests
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483","Too Many Hops");
                exit;
        };

        if (msg:len >=  2048 ) {
                sl_send_reply("513", "Message too big");
                exit;
        };

        # we record-route all messages -- to make sure that
        # subsequent messages will go through our proxy; that's
        # particularly good if upstream and downstream entities
        # use different transport protocol
        if (!method=="REGISTER")
                record_route(); # ftoutain essai de supprimer ça ? ne change 
rien

        # subsequent messages withing a dialog should take the
        # path determined by record-routing
        if (loose_route()) {
                # mark routing logic in request
                append_hf("P-hint: rr-enforced\r\n");
                route(1);
        };

        if (!uri==myself) {
                # mark routing logic in request
                append_hf("P-hint: outbound\r\n");

                route(1);
        };

        # if the request is for other domain use UsrLoc
        # (in case, it does not work, use the following command
        # with proper names and addresses in it)
        if (uri==myself) {

                if (method=="REGISTER") {

                        # Uncomment this if you want to use digest 
authentication
                        #if (!www_authorize("openser.org", "subscriber")) {
                        #       www_challenge("openser.org", "0");
                        #       exit;
                        #};

                        save("location");
                        exit;
                };

                lookup("aliases");
                if (!uri==myself) {
                        append_hf("P-hint: outbound alias\r\n");
                        route(1);
                };

                # native SIP destinations are handled using our USRLOC DB
                if (!lookup("location")) {
                        sl_send_reply("404", "Not Found");
                        exit;
                };
                append_hf("P-hint: usrloc applied\r\n");
        };

        route(1);
}


route[1] {

        if (is_present_hf("X-WeSIP-SPIRAL")) {
                if (!t_relay()) {
                        sl_reply_error();
                };
                exit;
        };

        if (! as_relay_t("neos_as") ){
                t_reply("500", "NEOS service not found");
        };

        exit;
}


_______________________________________________
Users mailing list
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/users




_______________________________________________
Users mailing list
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/users

Reply via email to