<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7232.91">
<TITLE>483 Too Many Hops</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->
<P><FONT SIZE=2 FACE="Arial">Hi,</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">I'm working on a project and i'm using ser as a sip server and webser as it's web interface.</FONT>
<BR><FONT SIZE=2 FACE="Arial">actually i have this problem: every time i send an instant message to a subscriber i get this error message:</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">483 too many hops</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">i tried to fix it but i couldn't and i don't know what to do !</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">if any one can help me i'll be very grateful</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">thank you in advance</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">samer</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">i'm using ser 0.9.3 & here's my code: </FONT>
</P>
<BR>
<BR>
<P><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># $Id: ser.cfg,v 1.25.2.1 2005/02/18 14:30:44 andrei Exp $</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># simple quick-start config script</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># ----------- global configuration parameters ------------------------</FONT>
<BR><FONT SIZE=2 FACE="Courier New">debug=3 # debug level (cmd line: -dddddddddd)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#fork=yes</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#log_stderror=no # (cmd line: -E)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># Uncomment these lines to enter debugging mode </FONT>
<BR><FONT SIZE=2 FACE="Courier New">#fork=no</FONT>
<BR><FONT SIZE=2 FACE="Courier New">log_stderror=yes</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Courier New">check_via=no # (cmd. line: -v)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">dns=yes # (cmd. line: -r)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">rev_dns=no # (cmd. line: -R)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#port=5060</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#children=4</FONT>
<BR><FONT SIZE=2 FACE="Courier New">fifo="/tmp/ser_fifo"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">fifo_mode=0666</FONT>
<BR><FONT SIZE=2 FACE="Courier New">fifo_db_url="mysql://ser:password@localhost/ser"</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">alias=domain.com</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># ------------------ module loading ----------------------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># Uncomment this if you want to use SQL database</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/mysql.so"</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/sl.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/tm.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/rr.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/maxfwd.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/usrloc.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/registrar.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/textops.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/pa.so"</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># Uncomment this if you want digest authentication</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># mysql.so must be loaded !</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/auth.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/auth_db.so"</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># ----------------- setting module-specific parameters ---------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># -- usrloc params --</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Courier New">modparam("usrloc", "db_url", "mysql://ser:password@localhost/ser")</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#modparam("usrloc", "db_mode", 0)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># Uncomment this if you want to use SQL database </FONT>
<BR><FONT SIZE=2 FACE="Courier New"># for persistent storage and comment the previous line</FONT>
<BR><FONT SIZE=2 FACE="Courier New">modparam("usrloc", "db_mode", 2)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># -- auth params --</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># Uncomment if you are using auth module</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Courier New">modparam("auth", "secret", "123123123")</FONT>
<BR><FONT SIZE=2 FACE="Courier New">modparam("auth_db", "db_url", "mysql://ser:heslo@localhost/ser")</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">modparam("auth_db", "calculate_ha1", yes)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># If you set "calculate_ha1" parameter to yes (which true in this config), </FONT>
<BR><FONT SIZE=2 FACE="Courier New"># uncomment also the following parameter)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New">modparam("auth_db", "password_column", "password")</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># -- rr params --</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># add value to ;lr param to make some broken UAs happy</FONT>
<BR><FONT SIZE=2 FACE="Courier New">modparam("rr", "enable_full_lr", 1)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># ------------------------- request routing logic -------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># main routing logic</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">route{</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># initial sanity checks -- messages with</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># max_forwards==0, or excessively long requests</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!mf_process_maxfwd_header("10")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("483","Too Many Hops");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (msg:len >= max_len ) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("513", "Message too big");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># we record-route all messages -- to make sure that</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># subsequent messages will go through our proxy; that's</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># particularly good if upstream and downstream entities</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># use different transport protocol</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!method=="REGISTER") record_route(); </FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># subsequent messages withing a dialog should take the</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># path determined by record-routing</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (loose_route()) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># mark routing logic in request</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">append_hf("P-hint: rr-enforced\r\n"); </FONT>
<BR> <FONT SIZE=2 FACE="Courier New">route(1);</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">if (!uri==myself) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># mark routing logic in request</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">append_hf("P-hint: outbound\r\n"); </FONT>
<BR> <FONT SIZE=2 FACE="Courier New">route(1);</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># if the request is for other domain use UsrLoc</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># (in case, it does not work, use the following command</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># with proper names and addresses in it)</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (uri==myself) {</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">if (method=="REGISTER") {</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># Uncomment this if you want to use digest authentication</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!www_authorize("domain.com", "subscriber")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">www_challenge("domain.com", "0");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">save("location");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">lookup("aliases");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!uri==myself) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">append_hf("P-hint: outbound alias\r\n"); </FONT>
<BR> <FONT SIZE=2 FACE="Courier New">route(1);</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># native SIP destinations are handled using our USRLOC DB</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!lookup("location")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("404", "Not Found");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">append_hf("P-hint: usrloc applied\r\n"); </FONT>
<BR> <FONT SIZE=2 FACE="Courier New">route(1);</FONT>
<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">route[1] </FONT>
<BR><FONT SIZE=2 FACE="Courier New">{</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># send it out now; use stateful forwarding as it works reliably</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># even for UDP2TCP</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!t_relay()) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_reply_error();</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<BR>
<BR>
<BR>
<BR>
<BR>
</BODY>
</HTML>