At 06:14 PM 3/15/2004, Klaus Darilion wrote:
Hi!
If the proxy replies stateless, how should the proxy handle the incoming ACK request?
e.g. an INVITE to an offline user:
if (!lookup("location")) {
sl_send_reply("404", "Not Found");
break;
}
The SIP client will respond with ACK to the 404 response. How shall I handle this ACK -
just ignoring it?
sl_send_reply generates a specific to-tag. ACKs with this totag will be consumed before
script processing occurs. This fails if there is already a to-tag -- then ACK
gets inside the script. To address that one would have to reply statefuly
and consume ACKs based on transaction state. I personaly prefer the stateless
operation for better scalability.
BTW: Is it allowed to send stateless replies on
existing transactions?
e.g:
t_newtran();
...
sl_send_reply(..);
It is not forbidden but it will break. If no reply is put in the transaction state,
the transaction state will expie someday and generate 408. Use t_reply if you created
transaction state. A typical sequence follows:
# message store
if (method == "MESSAGE") {
if (!t_newtran()) { # T-state not created, failure occured (lac of memory?)
sl_reply_error(); # -> it is safe to reply statelessly
break;
};
if (m_store("0")) { # there is transaction state -> do reply
statefuly now
t_reply("202", "Accepted for Later Delivery");
break;
};
# message store failed but T-state already exists -- again, reply
# statefuly
t_reply("503", "Service Unavailable");
break;
};
-jiri