[SR-Users] evapi tcp parsing??
Daniel-Constantin Mierla
miconda at gmail.com
Tue Sep 15 14:52:22 CEST 2015
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 <mailto: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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20150915/e8a31232/attachment.html>
More information about the sr-users
mailing list