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 <jayesh1...@gmail.com >> <mailto:jayesh1...@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 >> <mico...@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@lists.sip-router.org >>> <mailto:sr-users@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@lists.sip-router.org >> <mailto:sr-users@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
_______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users