[SR-Users] evapi tcp parsing??

Daniel-Constantin Mierla miconda at gmail.com
Fri Sep 18 10:11:03 CEST 2015


Hello,

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.

Cheers,
Daniel

On 15/09/15 14:52, Daniel-Constantin Mierla wrote:
> Hello,
>
> I will look if there are options in libev to buffer data or try to
> implement a buffering mechanism locally for such cases.
>
> Cheers,
> Daniel
>
> On 14/09/15 23:00, Jayesh Nambiar wrote:
>> 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
>> <mailto: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)
>>>         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 list
>>>         sr-users at lists.sip-router.org
>>>         <mailto:sr-users at lists.sip-router.org>
>>>         http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
>>         -- 
>>         Daniel-Constantin Mierla
>>         http://twitter.com/#!/miconda <http://twitter.com/#%21/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
>>         <mailto:sr-users at lists.sip-router.org>
>>         http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
>>
>>
>
> -- 
> Daniel-Constantin Mierla
> http://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

-- 
Daniel-Constantin Mierla
http://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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20150918/0e0f8f29/attachment.html>


More information about the sr-users mailing list