<DIV>Yes.&nbsp; Thanks!<BR></DIV><PRE style="FONT-FAMILY: Verdana">Sean
O'Donnell
Senior Engineer
uReach Technologies, Inc.
877-721-6126<PRE>



---- On Fri, 9 May 2008, Bogdan-Andrei Iancu (bogdan@voice-system.ro)
wrote:</PRE></PRE>
<BLOCKQUOTE style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT:
rgb(204,204,204) 1px solid"><PRE></PRE><PRE>Hi Sean,

So, it is this scenario working ok for you now?

Regards,
Bogdan

Sean O'Donnell wrote:
&gt; Hi Bogan:
&gt; Ahh, my mistake, I was looking at the TM code from the 1.2.0 release. 
&gt; I missed the
&gt; goto in the more recent releases that fixed the problem.
&gt; Thanks!
&gt; Sean
&gt;   
&gt; ---- On Wed, 7 May 2008, Bogdan-Andrei
&gt; Iancu (bogdan@voice-system.ro) wrote:
&gt;
&gt;     Hi Sean,
&gt;
&gt;     Yes, t_check() sets T as NULL if no transaction is matched, but the 
&gt;     reply_received() function (that calls t_check), if T was set to NULL 
&gt;     will go to "not_found" label and set T to T_UNDEFINED.
&gt;
&gt;     Do you agree on this? if so, we can start working in adding some more 
&gt;     debug logs to see where the problem is.
&gt;
&gt;     Regards,
&gt;     Bogdan
&gt;
&gt;     Sean O'Donnell wrote:
&gt;     &gt; Hi all,
&gt;     &gt;
&gt;     &gt; I’m using openser as a call distributor/proxy between a
soft-switch/SBC and
&gt;     &gt; voicemail platform.  I’m seeing a problem with openser in that it
is
&gt;     sometimes
&gt;     &gt; cancels an in-progress call (fr_inv_timer firing) because it
didn’t match
&gt;     the
&gt;     &gt; 200/OK with the call.
&gt;     &gt;
&gt;     &gt; After some investigation, I noticed that this was happening after
a missing
&gt;     ACK
&gt;     &gt; on a previous call caused the voicemail platform to retransmit
200/OK
&gt;     responses
&gt;     &gt; beyond the TM wt_timer expiration, which in turn left several
openser child
&gt;     &gt; processes (those that received a 200 after wt_timer expiration) in
a state
&gt;     such
&gt;     &gt; that they might not properly match transactions on subsequent
calls.  
&gt;     &gt;
&gt;     &gt; My setup:
&gt;     &gt; I have openser 1.2.0 operating on a linux box with two network
interfaces,
&gt;     with
&gt;     &gt; one interface (call it the outside interface) taking incoming
calls from
&gt;     the
&gt;     &gt; soft-switch, and the other (inside) connected to the VM platform. 
I have
&gt;     &gt; openser configured to use both interfaces (see config below) and
the TM
&gt;     wt_timer
&gt;     &gt; set to 5 seconds (default).  As this is a voicemail system, all of
the call
&gt;     &gt; traffic is inbound from the soft-switch.   Given the traffic flow,
for the
&gt;     most
&gt;     &gt; part the openser child processes servicing the inside interface
are
&gt;     handling
&gt;     &gt; responses (180,183,200) from the VM platform.
&gt;     &gt;
&gt;     &gt; Call scenario:
&gt;     &gt; When an INVITE arrives from the soft-switch, openser forwards it
to the VM
&gt;     &gt; platform.  The VM platform responds with a 180 and then a 200. 
I've
&gt;     noticed
&gt;     &gt; several instances where the soft-switch did not respond with an
ACK.  This
&gt;     &gt; caused the VM platform to retransmit the 200 several times over a
10 second
&gt;     &gt; period.   These were absorbed correctly by openser for the
duration of
&gt;     wt_timer.
&gt;     &gt;  After the timer expired, however, each openser child process that
received
&gt;     a
&gt;     &gt; retransmitted 200 logged something like this:
&gt;     &gt;  4(2715) DEBUG: t_reply_matching: hash 45870 label 727647196
branch 0
&gt;     &gt;  4(2715) DEBUG: t_reply_matching: no matching transaction exists
&gt;     &gt;  4(2715) DEBUG: t_reply_matching: failure to match a transaction
&gt;     &gt;  4(2715) DEBUG: t_check: end=(nil)
&gt;     &gt;
&gt;     &gt; When I look at the TM code, the static variable T in t_lookup.c is
now NULL
&gt;     for
&gt;     &gt; this child process.  
&gt;     &gt;
&gt;     &gt; On a subsequent inbound call, the INVITE is passed to the VM
correctly, and
&gt;     the
&gt;     &gt; 180 transaction matches (causing the fr_inv_timer to be armed). 
If the 200
&gt;     is
&gt;     &gt; read by child proc 2715, I see: 
&gt;     &gt;  4(2715) DEBUG: t_check: start=(nil)
&gt;     &gt;  4(2715) DEBUG: t_check: T previously sought and not found
&gt;     &gt;
&gt;     &gt; The 200 is forwarded back to the soft-switch, which responds with
an ACK. 
&gt;     Both
&gt;     &gt; end-points think the call is up, but since openser never matched
the 200
&gt;     with
&gt;     &gt; the call, the fr_inv_timer fires and cancels the call.  
Basically, child
&gt;     proc
&gt;     &gt; 2715 won’t match any transaction after this unless it happens to
process a
&gt;     &gt; request.
&gt;     &gt;
&gt;     &gt; I think this problem is made worse by the fact that I’m using two
network
&gt;     &gt; interfaces, and that the openser children on the inside interface
handle
&gt;     (for
&gt;     &gt; the most part) only responses.  This problem was touched on here:
&gt;     &gt; http://lists.openser.org/pipermail/users/2007-November/014188.html
  but I
&gt;     &gt; didn’t see any follow up.    Also, I’ve checked openser 1.2.3 and
1.3.1 for
&gt;     &gt; fixes, but I don’t think this has been addressed.
&gt;     &gt;
&gt;     &gt; I have a work around, I think, by upping the wt_timer to something
like 15
&gt;     &gt; seconds, but I was wondering if there is any scenario in which
leaving
&gt;     T=NULL is
&gt;     &gt; desirable.
&gt;     &gt;
&gt;     &gt; Thanks in advance
&gt;     &gt; Sean
&gt;     &gt;
&gt;     &gt;   
&gt;
&gt;
&gt;
&gt;         
&gt;



</PRE></BLOCKQUOTE>