<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>


<meta http-equiv="Content-Type" content="text/html; charset=unicode">
<meta name="Generator" content="Microsoft SafeHTML">
<style>
.hmmessage P
{margin:0px;padding:0px;}
body.hmmessage
{font-size:10pt;font-family:Verdana;}
</style>

thank you fro you help klaus, I did not know about sipwise.com.<br><br><br><br><br>&gt; Date: Thu, 13 Nov 2008 10:06:11 +0100<br>&gt; From: klaus.mailinglists@pernau.at<br>&gt; To: fborot@hotmail.com<br>&gt; CC: users@lists.kamailio.org<br>&gt; Subject: Re: [Kamailio-Users] help understanding kamailio.cfg and processing call flow<br>&gt; <br>&gt; 1. read the confige file from sipwise.com - IMO it is very self explanatory.<br>&gt; <br>&gt; some comments below:<br>&gt; <br>&gt; Fabian Borot schrieb:<br>&gt; &gt; hello<br>&gt; &gt; <br>&gt; &gt; Register with Auth:<br>&gt; &gt; <br>&gt; &gt; 1- user sends REGISTER request w/o the encripted credentials<br>&gt; &gt; 2- kamailio answers with 401 and sends the challenge<br>&gt; &gt; 3- the uac sends the REGISTER again, this time with the right <br>&gt; &gt; credentials and after verifying kamailio sends 200 OK<br>&gt; &gt; 4- if the user is behind a NAT we can fix the contact info before saving <br>&gt; &gt; it to the location db.<br>&gt; &gt; <br>&gt; &gt; <br>&gt; &gt; With the help of the forum and the tutorials I have found in the <br>&gt; &gt; internet I have been able to accomplish it with these<br>&gt; &gt;  commands:<br>&gt; &gt; <br>&gt; &gt; route{<br>&gt; &gt;     if (uri==myself) {<br>&gt; &gt;         if (method=="REGISTER") {<br>&gt; &gt;                 xlog("L_INFO","mylog: starting to process <br>&gt; &gt; REGISTER.Info.\n");<br>&gt; &gt;                     if (!www_authorize("", "subscriber")) {<br>&gt; &gt;                         xlog("L_INFO","mylog: REGISTER came without <br>&gt; &gt; auth, sending challenge.\n");<br>&gt; &gt;                             www_challenge("", "0");<br>&gt; &gt;                             exit;<br>&gt; &gt;                     };<br>&gt; &gt;                     if (nat_uac_test("1")){<br>&gt; &gt;                         xlog("L_INFO","mylog: REGISTER-Device behind <br>&gt; &gt; NAT.\n");<br>&gt; &gt;                             fix_nated_register();<br>&gt; &gt;             }<br>&gt; &gt;                     force_rport();<br>&gt; &gt;                     save("location");<br>&gt; &gt;                     xlog("L_INFO","mylog: save-location successful.\n");<br>&gt; &gt;                     exit;<br>&gt; &gt;     }<br>&gt; &gt;     route(1);<br>&gt; &gt; }<br>&gt; &gt; route[1] {<br>&gt; &gt;         if (t_relay()) {<br>&gt; &gt;                 xlog("L_INFO","mylog: Route 1 section. Method [$rm].");<br>&gt; &gt;         } else {<br>&gt; &gt;                 sl_reply_error();<br>&gt; &gt;                 xlog("L_INFO","mylog: Route 1 section. T_Relay failed. <br>&gt; &gt; Method [$rm].");<br>&gt; &gt;         };<br>&gt; &gt;         exit;<br>&gt; &gt; }<br>&gt; &gt; <br>&gt; &gt; but here come the first questions:<br>&gt; &gt; 1- when the uac sends the first REGISTER, the function www_challenge() <br>&gt; &gt; is the one that actually sends the "401" message?<br>&gt; <br>&gt; Yes, it sends 401 and exits immediately. Thus the exit after 401 would <br>&gt; not be needed, but it is good to have it there as it eases reading the <br>&gt; config script.<br>&gt; <br>&gt; &gt; or the "exit" just exit out the "if" block and the script will continue <br>&gt; &gt; with route(1) which in turns executes "t_relay()?<br>&gt; &gt; <br>&gt; &gt; ++from the doc, www_challenge() function++++<br>&gt; &gt; The function challenges a user agent. It will generate a WWW-Authorize <br>&gt; &gt; header field containing a digest challenge, it<br>&gt; &gt; will put the header field into a response generated from the request the <br>&gt; &gt; server is processing and send the reply.<br>&gt; &gt; +++++++++++++++++++++++++++++++++<br>&gt; &gt; <br>&gt; &gt; <br>&gt; &gt; 2- the "exit" after the save("location") function I assume would stop <br>&gt; &gt; the execution of the script and at that point kamailio<br>&gt; &gt; responds with "200 ok"? or just exit out the "if" block, the script then <br>&gt; &gt; reaches the "route(1)" section and the "t_relay()"<br>&gt; &gt; sends the "200 ok"?<br>&gt; <br>&gt; save stores the record and send back 200 OK. But it does not stop <br>&gt; processing. Thus, you MUST have an exit after save().<br>&gt; <br>&gt; &gt; <br>&gt; &gt; ++ from the doc, core-cookbook, exit() function+++++++<br>&gt; &gt; Stop the execution of the configuration script – it has the same <br>&gt; &gt; behaviour as return(0). It does not affect the<br>&gt; &gt; implicit action to be taken after script execution.<br>&gt; &gt; ++++++++++++++++++++++++++++<br>&gt; &gt; <br>&gt; &gt; 3- the "t_relay" function: does that function creates and sends the <br>&gt; &gt; approriate response for each request?<br>&gt; &gt; ex1: an INVITE is received, does t_relay() "know" that it can send "100 <br>&gt; &gt; trying" automatically?<br>&gt; <br>&gt; t_relay() sends automatically 100 trying to the caller (except you call <br>&gt; it with some special flags (see README of tm module)) and forwards the <br>&gt; request to the next destination.<br>&gt; <br>&gt; &gt; ex2: a "200 OK" is received as a response to an INVITE, does t_relay <br>&gt; &gt; knows that it has to send an "ACK"?<br>&gt; <br>&gt; No. The proxy does not send ACK. The proxy forwards the response to the <br>&gt; caller. Then the caller will send the ACK which will be forwarded by the <br>&gt; proxy to the callee. For successful call setups the proxy wont send <br>&gt; ACKs. The proxy will send ACK to the callee by itself only if a call <br>&gt; gets cancelled.<br>&gt; <br>&gt; &gt; <br>&gt; &gt; ++++++from the doc, t_relay() funcion ++++++++++<br>&gt; &gt;  From user's perspective, the major function is t_relay(). It setup <br>&gt; &gt; transaction state, absorb retransmissions from upstream,<br>&gt; &gt;  generate downstream retransmissions and correlate replies to requests.<br>&gt; &gt; +++++++++++++++++++++++++++++<br>&gt; &gt; <br>&gt; &gt; <br>&gt; &gt; 4- why do I see ";" even after a "}", is it needed sometimes?<br>&gt; <br>&gt;   };<br>&gt; is the same as<br>&gt;   }<br>&gt; <br>&gt; choose the syntax you like<br>&gt; <br>&gt; &gt; 5- is "exit" the same as "exit()"?<br>&gt; <br>&gt; I don't know - I always use exit;<br>&gt; Probably exit() is just an alias.<br>&gt; <br>&gt; <br>&gt; regards<br>&gt; klaus<br>&gt; <br>&gt; <br>&gt; <br>&gt; &gt; <br>&gt; &gt; <br>&gt; &gt; These may sound like dumb questions for some of the experienced users, <br>&gt; &gt; but for a newbie they are not. Also, if this sounds like "<br>&gt; &gt; hey, code my config file for me" I assure you that that is not the <br>&gt; &gt; intended purpose.<br>&gt; &gt; I would appreciate any help and thank everybody in advance.<br>&gt; &gt; <br>&gt; &gt; <br>&gt; &gt; Fabian<br>&gt; &gt; <br>&gt; &gt;  <br>&gt; &gt; <br>&gt; &gt; <br>&gt; &gt; <br>&gt; &gt; ------------------------------------------------------------------------<br>&gt; &gt; Color coding for safety: Windows Live Hotmail alerts you to suspicious <br>&gt; &gt; email. Sign up today. <br>&gt; &gt; &lt;http://windowslive.com/Explore/Hotmail?ocid=TXT_TAGLM_WL_hotmail_acq_safety_112008&gt;<br>&gt; &gt; <br>&gt; &gt; <br>&gt; &gt; ------------------------------------------------------------------------<br>&gt; &gt; <br>&gt; &gt; _______________________________________________<br>&gt; &gt; Users mailing list<br>&gt; &gt; Users@lists.kamailio.org<br>&gt; &gt; http://lists.kamailio.org/cgi-bin/mailman/listinfo/users<br><br /><hr />Color coding for safety: Windows Live Hotmail alerts you to suspicious email. <a href='http://windowslive.com/Explore/Hotmail?ocid=TXT_TAGLM_WL_hotmail_acq_safety_112008' target='_new'>Sign up today.</a></body>
</html>