[SR-Users] evapi tcp parsing??

Jayesh Nambiar jayesh1017 at gmail.com
Mon Sep 14 23:00:36 CEST 2015


Hello Daniel,
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:
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.
But if the first packet contains:
12:Hello World!, 12:Hello
And Second Packet contains:
 World!, 12:Hello World!
the event route is invoked only once !!

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.
This definitely looks like a bug which makes it not very reliable at large
scale deployments. Would really appreciate your inputs on this. Thanks;

- Jayesh



On Thu, Sep 10, 2015 at 4:01 PM, Jayesh Nambiar <jayesh1017 at gmail.com>
wrote:

> Hi Daniel,
> 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??
>
> Thanks,
>
> - Jayesh
>
> On Thu, Sep 10, 2015 at 1:29 PM, Daniel-Constantin Mierla <
> miconda at gmail.com> wrote:
>
>> Hello,
>>
>> 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.
>>
>> 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.
>>
>> Cheers,
>> Daniel
>>
>>
>> On 09/09/15 22:01, Jayesh Nambiar wrote:
>>
>> Hello,
>> 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(
>> <http://kb.asipto.com/kamailio:k43-async-sip-routing-nodejs>
>> http://kb.asipto.com/kamailio:k43-async-sip-routing-nodejs) to build the
>> node.js app consuming events.
>> 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.
>> 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 !!
>> I also referred cgrates client over evapi example which is written in GO,
>> but I couldnt find them handling TCP streams clearly either.
>> I'd really appreciate some expert suggestion here to make an informed
>> decision on using the evapi module for a large scale solution.
>>
>> Thanks,
>>
>> - Jayesh
>>
>>
>>
>>
>> _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing listsr-users at lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
>>
>> --
>> Daniel-Constantin Mierlahttp://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
>> Book: SIP Routing With Kamailio - http://www.asipto.com
>> Kamailio Advanced Training, Sep 28-30, 2015, in Berlin - http://asipto.com/u/kat
>>
>>
>> _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>> sr-users at lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20150915/d27a0d6c/attachment.html>


More information about the sr-users mailing list