<div dir="ltr">Hi Daniel,<div>I have captured debug messages after testing with your latest commit on master. Once again, here's what I'm doing exactly for my test:</div><div>1) Use SIPp to send OPTIONS towards Kamailio.</div><div>2) On getting options send event as follows:</div><div>evapi_async_relay("{\"event\":\"REGISTER\",\"tindex\":\"$T(id_index)\",\"tlabel\":\"$T(id_label)\",\"PhoneNumber\":\"$avp(phone_number)\",\"DeviceId\":\"$avp(device_id)\",\"CallId\":\"$ci\"}");<br></div><div>3) There's a client connected which listens for messages on this socket, parses the netstring, and sends same data back as netstring to Kamailio.</div><div>4) On the event_route[evapi:message-received, I do the following:</div><div><div>xlog("L_INFO", "GOT [$evapi(msg)] from $evapi(srcaddr):$evapi(srcport)\n");</div><div> if($evapi(msg)=~"REGISTER" && $evapi(msg)=~"tindex") {</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>jansson_get_field("$evapi(msg)", "tlabel", "$var(tlabel)");</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>jansson_get_field("$evapi(msg)", "tindex", "$var(tindex)");</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>$var(t_index) = $(var(tindex){<a href="http://s.int">s.int</a>});</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>$var(t_label) = $(var(tlabel){<a href="http://s.int">s.int</a>});</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>t_continue('$var(t_index)', '$var(t_label)', 'REGISTER_RESPONSE');</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div><div> }</div></div><div>5) On route[REGISTER_RESPONSE], I send 200 OK to SIPp</div><div><br></div><div>Now here are detailed logs for which neither SIPp didnt get a response nor the GOT [$evapi(msg)] from $evapi(srcaddr):$evapi(srcport)\n"); got logged in the syslog:</div><div><br></div><div>First Event:</div><div><div>DEBUG: evapi [evapi_dispatch.c:598]: evapi_relay(): relaying event data [{"event":"REGISTER","tindex":"26266","tlabel":"587925078","PhoneNumber":"21956","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:23021-12910@198.24.63.39">23021-12910@198.24.63.39</a>"}] (146)</div><div>DEBUG: evapi [evapi_dispatch.c:623]: evapi_relay(): sending [0x7f132588de68] [146:{"event":"REGISTER","tindex":"26266","tlabel":"587925078","PhoneNumber":"21956","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:23021-12910@198.24.63.39">23021-12910@198.24.63.39</a>"},] (151)</div><div><br></div><div>DEBUG: evapi [evapi_dispatch.c:488]: evapi_recv_notify(): received [0x7f132588de68] [146:{"event":"REGISTER","tindex":"26266","tlabel":"587925078","PhoneNumber":"21956","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:23021-12910@198.24.63.39">23021-12910@198.24.63.39</a>"},] (151)</div><div>NOTICE: evapi [evapi_dispatch.c:290]: evapi_recv_client(): {0} [<a href="http://198.24.63.45:48881">198.24.63.45:48881</a>] - received [146:{"event":"REGISTER","tindex":"26266","tlabel":"587925078","PhoneNumber":"21956","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:23021-12910@198.24.63.39">23021-12910@198.24.63.39</a>"},] (151) (18)</div></div><div><br></div><div>Second Event:</div><div><div>DEBUG: evapi [evapi_dispatch.c:598]: evapi_relay(): relaying event data [{"event":"REGISTER","tindex":"32244","tlabel":"1637923412","PhoneNumber":"25597","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:27182-12910@198.24.63.39">27182-12910@198.24.63.39</a>"}] (147)</div><div> DEBUG: evapi [evapi_dispatch.c:623]: evapi_relay(): sending [0x7f1325884410] [147:{"event":"REGISTER","tindex":"32244","tlabel":"1637923412","PhoneNumber":"25597","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:27182-12910@198.24.63.39">27182-12910@198.24.63.39</a>"},] (152)</div><div><br></div><div> DEBUG: evapi [evapi_dispatch.c:488]: evapi_recv_notify(): received [0x7f1325884410] [147:{"event":"REGISTER","tindex":"32244","tlabel":"1637923412","PhoneNumber":"25597","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:27182-12910@198.24.63.39">27182-12910@198.24.63.39</a>"},] (152)</div><div> NOTICE: evapi [evapi_dispatch.c:290]: evapi_recv_client(): {0} [<a href="http://198.24.63.45:48881">198.24.63.45:48881</a>] - received [147:{"event":"REGISTER","tindex":"32244","tlabel":"1637923412","PhoneNumber":"25597","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:27182-12910@198.24.63.39">27182-12910@198.24.63.39</a>"},] (152) (85)</div><div><br></div><div>I had three such events which got missed out of some 25000 odd messages sent from SIPp. Other major difference that I see in the debug logs for problematic events are that there is a positive number in the second parentheses of evapi_recv_client() function. For the events that were invoked successfully the value of second parentheses is 0 for evapi_recv_client() function. Hope the debugging helps.</div><div><br></div><div>Debug log for a successful event:</div><div><div>DEBUG: evapi [evapi_dispatch.c:598]: evapi_relay(): relaying event data [{"event":"REGISTER","tindex":"22127","tlabel":"1896682192","PhoneNumber":"73168","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:49957-13056@198.24.63.39">49957-13056@198.24.63.39</a>"}] (147)</div><div> DEBUG: evapi [evapi_dispatch.c:623]: evapi_relay(): sending [0x7f132568e850] [147:{"event":"REGISTER","tindex":"22127","tlabel":"1896682192","PhoneNumber":"73168","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:49957-13056@198.24.63.39">49957-13056@198.24.63.39</a>"},] (152)</div><div><br></div><div> DEBUG: evapi [evapi_dispatch.c:488]: evapi_recv_notify(): received [0x7f132568e850] [147:{"event":"REGISTER","tindex":"22127","tlabel":"1896682192","PhoneNumber":"73168","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:49957-13056@198.24.63.39">49957-13056@198.24.63.39</a>"},] (152)</div><div> NOTICE: evapi [evapi_dispatch.c:290]: evapi_recv_client(): {0} [<a href="http://198.24.63.45:48881">198.24.63.45:48881</a>] - received [147:{"event":"REGISTER","tindex":"22127","tlabel":"1896682192","PhoneNumber":"73168","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:49957-13056@198.24.63.39">49957-13056@198.24.63.39</a>"},] (152) (0)</div></div><div><br></div><div>Thanks,</div></div><div><br></div><div>- Jayesh<br><div class="gmail_quote"><div dir="ltr">On Sat, Sep 19, 2015 at 3:55 AM Daniel-Constantin Mierla <<a href="mailto:miconda@gmail.com">miconda@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
I pushed a commit to add more debug message while processing
received data. You can use debugger module to set a higher debug
level for evapi module in order to see what happens.<br>
<br>
I checked the netstring packet size and it is invalid (unless email
stripped some white chars there) -- for example in:</div><div bgcolor="#FFFFFF" text="#000000"><br>
<br>
145:{"event":"REGISTER","tindex":"55567","tlabel":"627458699","PhoneNumber":"20711","DeviceId":"abcd1234abcd1234","CallId":<a href="mailto:21225-3848@5.6.7.8" target="_blank">"21225-3848@5.6.7.8"</a>},<br>
<br></div><div bgcolor="#FFFFFF" text="#000000">
the size is 141, not 145 -- it looks like the size includes the size
itself plus the delimiters ':,'. The size is only the effective
data, see:<br>
<br>
<a href="https://en.wikipedia.org/wiki/Netstring" target="_blank">https://en.wikipedia.org/wiki/Netstring</a><br>
<br>
If evapi gets a packet with an invalid size, then it discards the
buffer content.<br>
<br>
See if the app on the other side of evapi connection builds
netstrings with wrong size.<br>
<br>
Cheers,<br>
Daniel</div><div bgcolor="#FFFFFF" text="#000000"><br>
<br>
<div>On 18/09/15 23:19, Jayesh Nambiar
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Here are the tests that I did:
<div><br>
</div>
<div>With the patch applied, I see that Kamailio is invoking
event individually for each netstring even when they come in
different chunks. But I did see instances where when there
were complete netstrings in a single chunk; kamailio did not
raise an event for them. Here's the illustration:</div>
<div><br>
</div>
<div>
<div>T <a href="http://1.2.3.4:48873" target="_blank">1.2.3.4:48873</a>
-> <a href="http://5.6.7.8:3927" target="_blank">5.6.7.8:3927</a>
[AP]</div>
<div>146:{"event":"REGISTER","tindex":"16916","tlabel":"1753048277","PhoneNumber":"20708","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:21220-3848@5.6.7.8" target="_blank"></a><a href="mailto:21220-3848@5.6.7.8" target="_blank">21220-3848@5.6.7.8</a>"},144:{"event":"REGISTER","tindex":"7954","tlabel":"254315075","PhoneNumber":"20709","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:21223-3848@5.6.7.8" target="_blank"></a><a href="mailto:21223-3848@5.6.7.8" target="_blank">21223-3848@5.6.7.8</a>"},145:{"event":"REGISTER","tindex":"64529","tlabel":"599481568","PhoneNumber":"20709","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:21222-3848@5.6.7.8" target="_blank"></a><a href="mailto:21222-3848@5.6.7.8" target="_blank">21222-3848@5.6.7.8</a>"},145:{"event":"REGISTER","tindex":"46605","tlabel":"112015324","PhoneNumber":"20710","DeviceId"
</div>
<div><br>
</div>
<div>T <a href="http://1.2.3.4:48873" target="_blank">1.2.3.4:48873</a>
-> <a href="http://5.6.7.8:3927" target="_blank">5.6.7.8:3927</a>
[AP]</div>
<div> :"abcd1234abcd1234","CallId":"<a href="mailto:21224-3848@5.6.7.8" target="_blank">21224-3848@5.6.7.8</a>"},</div>
</div>
<div><br>
</div>
<div><b>The above two chunks contain 4 proper netstrings where
the second chunk contains part of the 4th netstring. In this
case Evapi properly raised 4 individual events.</b></div>
<div><br>
</div>
<div>
<div><a href="http://1.2.3.4:48873" target="_blank">1.2.3.4:48873</a>
-> <a href="http://5.6.7.8:3927" target="_blank">5.6.7.8:3927</a>
[AP]</div>
<div>
145:{"event":"REGISTER","tindex":"55567","tlabel":"627458699","PhoneNumber":"20711","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:21225-3848@5.6.7.8" target="_blank"></a><a href="mailto:21225-3848@5.6.7.8" target="_blank">21225-3848@5.6.7.8</a>"},143:{"event":"REGISTER","tindex":"28682","tlabel":"9676691","PhoneNumber":"20712","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:21226-3848@5.6.7.8" target="_blank"></a><a href="mailto:21226-3848@5.6.7.8" target="_blank">21226-3848@5.6.7.8</a>"},</div>
</div>
<div><br>
</div>
<div><b>This above chunk contains two complete netstrings but
Kamailio never raised events for these two netstrings.</b></div>
<div><b><br>
</b></div>
<div>For the events that were not raised I see proper Kamailio
Logs which is:</div>
<div>evapi_recv_client(): {0} [<a href="http://1.2.3.4:48873" target="_blank">1.2.3.4:48873</a>] - received
[145:{"event":"REGISTER","tindex":"55567","tlabel":"627458699","PhoneNumber":"20711","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:21225-3848@5.6.7.8" target="_blank"></a><a href="mailto:21225-3848@5.6.7.8" target="_blank">21225-3848@5.6.7.8</a>"},143:{"event":"REGISTER","tindex":"28682","tlabel":"9676691","PhoneNumber":"20712","DeviceId":"abcd1234abcd1234","CallId":"<a href="mailto:21226-3848@5.6.7.8" target="_blank"></a><a href="mailto:21226-3848@5.6.7.8" target="_blank">21226-3848@5.6.7.8</a>"},]<br>
</div>
<div><b><br>
</b></div>
<div>But I don't see the logs that I've written in the script
after the event was raised, which means Kamailio did not
invoke events for these two netstrings.</div>
<div><br>
</div>
<div>So in my tests, out of 27232 messages sent, there were
approximately 27 messages for which the events were not raised
by Evapi. The rate of messages started at 500cps and I stopped
after I saw missed events at around 1200cps.</div>
<div><br>
</div>
<div>Thanks, and do let me know for any further tests or
information required about the same.</div>
<div><br>
</div>
<div>- Jayesh</div>
<div><b><br>
</b></div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Fri, Sep 18, 2015 at 2:55 PM, Jayesh
Nambiar <span dir="ltr"><<a href="mailto:jayesh1017@gmail.com" target="_blank">jayesh1017@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Will have this tested by tomorrow and will
get back to you. Thanks.<span><font color="#888888">
<div><br>
</div>
<div>- Jayesh</div>
</font></span></div>
<div>
<div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Fri, Sep 18, 2015 at 1:41
PM, Daniel-Constantin Mierla <span dir="ltr"><<a href="mailto:miconda@gmail.com" target="_blank"></a><a href="mailto:miconda@gmail.com" target="_blank">miconda@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"> Hello,<br>
<br>
I just pushed a patch to master branch that
should cope with partial data received on tcp
connection. No time to test at all, therefore
any feedback will be appreciated.<br>
<br>
Cheers,<br>
Daniel
<div>
<div><br>
<br>
<div>On 15/09/15 14:52, Daniel-Constantin
Mierla wrote:<br>
</div>
<blockquote type="cite"> Hello,<br>
<br>
I will look if there are options in libev
to buffer data or try to implement a
buffering mechanism locally for such
cases.<br>
<br>
Cheers,<br>
Daniel<br>
<br>
<div>On 14/09/15 23:00, Jayesh Nambiar
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hello Daniel,
<div>After further testing with evapi
module, I figured that when
Netstrings are used, an event route
is invoked individually for each
message even if if multiple
netstring messages are received in a
single TCP packet. But this doesn't
work effectively when a single
proper message is split-up in two
packets. For Example, if a message
arrives as:</div>
<div>12:Hello World!, 12:Hello World!,
12:Hello World! in a single packet,
kamailio properly invokes the event
route "evapi:message-received"
thrice for every individual proper
netstring message. </div>
<div>But if the first packet contains:</div>
<div>12:Hello World!, 12:Hello</div>
<div>And Second Packet contains:</div>
<div> World!, 12:Hello World!</div>
<div>the event route is invoked only
once !!</div>
<div><br>
</div>
<div>The above pattern is very much
possible while sending and receiving
packets over TCP Socket. Our tests
for receiving an approximately 150
byte message over evapi socket at
the rate of roughly 1000cps causes a
lot of real events to be missed
because of the above problem. You
can never be sure when TCP will
split messages in different chunks.</div>
<div>This definitely looks like a bug
which makes it not very reliable at
large scale deployments. Would
really appreciate your inputs on
this. Thanks;</div>
<div><br>
</div>
<div>- Jayesh</div>
<div><br>
</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Thu, Sep
10, 2015 at 4:01 PM, Jayesh Nambiar
<span dir="ltr"><<a href="mailto:jayesh1017@gmail.com" target="_blank"></a><a href="mailto:jayesh1017@gmail.com" target="_blank">jayesh1017@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Hi Daniel,
<div>Thanks for the quick
response. So if I do not use
Netstrings, does Kamailio
allow me to create a custom
logic in the script. For eg.
if I decide to use newline as
a delimiter, can I keep
buffering the message until I
encounter the delimiter from
the event route and then
execute whatever I have to
within the script??</div>
<div><br>
</div>
<div>Thanks,</div>
<div><br>
</div>
<div>- Jayesh</div>
</div>
<div>
<div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On
Thu, Sep 10, 2015 at 1:29
PM, Daniel-Constantin
Mierla <span dir="ltr"><<a href="mailto:miconda@gmail.com" target="_blank"></a><a href="mailto:miconda@gmail.com" target="_blank">miconda@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"> Hello,<br>
<br>
tcb is stream protocol
and several messages
can be queued on the
pipe at the same time.
That is the reason for
netstring format, to
be able to easily
detect the boundaries
of each message. If
netstring format is
enabled and kamailio
receives several
messages at once, it
splits them and for
each is executing the
event route.<br>
<br>
If netstring format is
not used, the kamailio
is executing the event
route with the entire
content that was read
at once from the tcp
connection.<br>
<br>
Cheers,<br>
Daniel
<div>
<div><br>
<br>
<div>On 09/09/15
22:01, Jayesh
Nambiar wrote:<br>
</div>
</div>
</div>
<blockquote type="cite">
<div>
<div>
<div dir="ltr">Hello,
<div>I'm
exploring the
evapi module
for my
kamailio to
interface with
an external
node.js app
for third
party stuff
like AAA,
billing engine
tasks,
notifications
and so on. I
followed and
took some
ideas from the
rtjson and
evapi tutorial
found here(<a href="http://kb.asipto.com/kamailio:k43-async-sip-routing-nodejs" target="_blank"></a><a href="http://kb.asipto.com/kamailio:k43-async-sip-routing-nodejs" target="_blank">http://kb.asipto.com/kamailio:k43-async-sip-routing-nodejs</a>)
to build the
node.js app
consuming
events.</div>
<div>When I
stress tested
the scenario
using SIPp and
tried sending
a lot of
events at
300-350cps
from Kamailio,
I noticed that
at times the
client is
receiving 2-3
events in a
single message
together
although I do
event_sync_relay
once per SIP
message
received and
have
netstrings
enabled. I
believe this
is a typical
behavior of
TCP and needs
to be handled
by the client
using some
kind of
Netstring
handler.
Please correct
me if I'm
wrong.</div>
<div>And hence
I'd like to
know what
particularly
needs to be
taken care of
while writing
a client that
is listening
for events on
raw tcp socket
and how does
kamailio
handle this
situation
while
receiving
messages over
TCP socket??
Does kamailio
recognize the
end of
netstring
properly on
evapi:message-received
and give
exactly one
message to
take care of
on every
"message-received"
event or
should that be
handled in the
script
somewhere !!</div>
<div>I also
referred
cgrates client
over evapi
example which
is written in
GO, but I
couldnt find
them handling
TCP streams
clearly
either.</div>
<div>I'd
really
appreciate
some expert
suggestion
here to make
an informed
decision on
using the
evapi module
for a large
scale
solution.</div>
<div><br>
</div>
<div>Thanks,</div>
<div><br>
</div>
<div>- Jayesh</div>
<div><br>
</div>
<div><br>
</div>
</div>
<br>
<fieldset></fieldset>
<br>
</div>
</div>
<pre>_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
<a href="mailto:sr-users@lists.sip-router.org" target="_blank">sr-users@lists.sip-router.org</a>
<a href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users" target="_blank">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users</a><span><font color="#888888">
</font></span></pre>
<span><font color="#888888">
</font></span></blockquote>
<span><font color="#888888"> <br>
<pre cols="72">--
Daniel-Constantin Mierla
<a href="http://twitter.com/#%21/miconda" target="_blank">http://twitter.com/#!/miconda</a> - <a href="http://www.linkedin.com/in/miconda" target="_blank">http://www.linkedin.com/in/miconda</a>
Book: SIP Routing With Kamailio - <a href="http://www.asipto.com" target="_blank">http://www.asipto.com</a>
Kamailio Advanced Training, Sep 28-30, 2015, in Berlin - <a href="http://asipto.com/u/kat" target="_blank">http://asipto.com/u/kat</a></pre>
</font></span></div>
<br>
_______________________________________________<br>
SIP Express Router (SER)
and Kamailio (OpenSER) -
sr-users mailing list<br>
<a href="mailto:sr-users@lists.sip-router.org" target="_blank"></a><a href="mailto:sr-users@lists.sip-router.org" target="_blank">sr-users@lists.sip-router.org</a><br>
<a href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users" rel="noreferrer" target="_blank"></a><a href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users" target="_blank">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
<pre cols="72">--
Daniel-Constantin Mierla
<a href="http://twitter.com/#%21/miconda" target="_blank">http://twitter.com/#!/miconda</a> - <a href="http://www.linkedin.com/in/miconda" target="_blank">http://www.linkedin.com/in/miconda</a>
Book: SIP Routing With Kamailio - <a href="http://www.asipto.com" target="_blank">http://www.asipto.com</a>
Kamailio Advanced Training, Sep 28-30, 2015, in Berlin - <a href="http://asipto.com/u/kat" target="_blank">http://asipto.com/u/kat</a></pre>
</blockquote>
<br>
<pre cols="72">--
Daniel-Constantin Mierla
<a href="http://twitter.com/#%21/miconda" target="_blank">http://twitter.com/#!/miconda</a> - <a href="http://www.linkedin.com/in/miconda" target="_blank">http://www.linkedin.com/in/miconda</a>
Book: SIP Routing With Kamailio - <a href="http://www.asipto.com" target="_blank">http://www.asipto.com</a>
Kamailio Advanced Training, Sep 28-30, 2015, in Berlin - <a href="http://asipto.com/u/kat" target="_blank">http://asipto.com/u/kat</a></pre>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
<pre cols="72">--
Daniel-Constantin Mierla
<a href="http://twitter.com/#!/miconda" target="_blank">http://twitter.com/#!/miconda</a> - <a href="http://www.linkedin.com/in/miconda" target="_blank">http://www.linkedin.com/in/miconda</a>
Book: SIP Routing With Kamailio - <a href="http://www.asipto.com" target="_blank">http://www.asipto.com</a>
Kamailio Advanced Training, Sep 28-30, 2015, in Berlin - <a href="http://asipto.com/u/kat" target="_blank">http://asipto.com/u/kat</a></pre>
</div></blockquote></div></div></div>