[Freeswitch-users] Switch_curl
Michael Jerris
mike at jerris.com
Thu Mar 17 14:50:52 MSK 2016
look for switch_api_execute. Not sure this makes the most sense in your
case when you already have native curl access
On Thursday, March 17, 2016, Chris Mandra <mandra at gmail.com> wrote:
>
>
> Thanks for responding Anthony!
> I may just use mod curl instead of native bc it has the functionality I
> need. How can I find info on how to use the api interface - maybe
> examples of how
> to use the api interface from c or c++?
> Freeswitch is an amazing thing. Thanks for making it available to regular
> people.
> Thanks!
> chris
>
> On Thu, Mar 17, 2016 at 12:25 AM, Anthony Minessale <
> anthony.minessale at gmail.com
> <javascript:_e(%7B%7D,'cvml','anthony.minessale at gmail.com');>> wrote:
>
>> Via one of the exposed interfaces like api interface etc.
>> Why do you need mod_curl and native curl at the same time?
>>
>>
>> On Wednesday, March 16, 2016, Chris Mandra <mandra at gmail.com
>> <javascript:_e(%7B%7D,'cvml','mandra at gmail.com');>> wrote:
>>
>>> Thanks for the responses guys. I have another question: I need to call
>>> mod_curl api from my module. What's the proper way to call a module from a
>>> module?
>>> thanks, chris
>>>
>>> On Wed, Mar 16, 2016 at 4:54 PM, Anthony Minessale <
>>> anthony.minessale at gmail.com> wrote:
>>>
>>>> If you use more threads you just need to make sure the objects are
>>>> properly scoped. For instance, if you want to use a session from the other
>>>> thread you need to read lock it for the life of the thread. Objects shared
>>>> need to be dynamically allocated and properly mutexed etc.
>>>>
>>>> Whatever thread you call curl from will be used for the whole
>>>> curl operation.
>>>>
>>>>
>>>> On Wednesday, March 16, 2016, Michael Jerris <mike at jerris.com> wrote:
>>>>
>>>>> depends on your needs. The concern would be trying to access those
>>>>> objects across threads potentially could cause issues depending on if they
>>>>> are syncronized or not, easier to just not do it and not have the concern.
>>>>> Anthony is suggesting looking at how we do it in other places. Life cycle
>>>>> could be an issue, are you destroying things too early?
>>>>>
>>>>> On Mar 16, 2016, at 5:00 AM, Chris Mandra <mandra at gmail.com> wrote:
>>>>>
>>>>> Thanks for responding Anthony. Can you tell me this:
>>>>> Should curl calls be done in separate thread or is it ok to do them in
>>>>> the main thread of modules?
>>>>> On Tuesday, March 15, 2016, Chris Mandra <mandra at gmail.com> wrote:
>>>>>
>>>>>>
>>>>>> Should curl calls be done in separate thread or is it ok to do them
>>>>>> in the main thread of modules?
>>>>>> On Tuesday, March 15, 2016, Anthony Minessale <
>>>>>> anthony.minessale at gmail.com> wrote:
>>>>>>
>>>>>>> Curl is used in a few places and is not unstable. Study some of
>>>>>>> those mods and maybe you can see how to use it in a typical situation.
>>>>>>> Probably its related to memory management or lifecycle of objects you may
>>>>>>> be using.
>>>>>>>
>>>>>>> On Tuesday, March 15, 2016, Chris Mandra <mandra at gmail.com> wrote:
>>>>>>>
>>>>>>>> Hey guys, I'm working on a simple media bug module using FS 1.6.
>>>>>>>> When a call comes in I'm calling switch_curl doing an http get.
>>>>>>>>
>>>>>>>> In switch_standard_app I use switch_curl and invoke
>>>>>>>> switch_curl_easy_perform and exit after that.
>>>>>>>>
>>>>>>>> Calling switch_curl seems very unstable. It's crashing free switch
>>>>>>>> most of the time. Are there any things I should be looking for related to
>>>>>>>> this? I'm wondering if maybe this is a threading issue? Any ideas?
>>>>>>>> I've included some backtraces
>>>>>>>>
>>>>>>>> Thanks, chris
>>>>>>>>
>>>>>>>>
>>>>>>>> (gdb) bt
>>>>>>>>
>>>>>>>> #0 0x00007f8f00c59cc9 in __GI_raise (sig=sig at entry=6) at
>>>>>>>> ../nptl/sysdeps/unix/sysv/linux/raise.c:56
>>>>>>>>
>>>>>>>> #1 0x00007f8f00c5d0d8 in __GI_abort () at abort.c:89
>>>>>>>>
>>>>>>>> #2 0x00007f8f00c96394 in __libc_message (do_abort=do_abort at entry=1,
>>>>>>>> fmt=fmt at entry=0x7f8f00da4b28 "*** Error in `%s': %s: 0x%s ***\n")
>>>>>>>> at ../sysdeps/posix/libc_fatal.c:175
>>>>>>>>
>>>>>>>> #3 0x00007f8f00ca266e in malloc_printerr (ptr=<optimized out>,
>>>>>>>> str=0x7f8f00da0c19 "free(): invalid pointer", action=1) at malloc.c:4996
>>>>>>>>
>>>>>>>> #4 _int_free (av=<optimized out>, p=<optimized out>, have_lock=0)
>>>>>>>> at malloc.c:3840
>>>>>>>>
>>>>>>>> #5 0x00007f8f01334567 in switch_log_node_free (pnode=pnode at entry=0x7f8eb2b1f158)
>>>>>>>> at src/switch_log.c:136
>>>>>>>>
>>>>>>>> #6 0x00007f8eeb192a24 in read_packet (listener=listener at entry=0x7f8ebc027898,
>>>>>>>> event=event at entry=0x7f8eb2b1f7f0, timeout=timeout at entry=0) at
>>>>>>>> mod_event_socket.c:1361
>>>>>>>>
>>>>>>>> #7 0x00007f8eeb1988a0 in listener_run (thread=<optimized out>,
>>>>>>>> obj=0x7f8ebc027898) at mod_event_socket.c:2719
>>>>>>>>
>>>>>>>> #8 0x00007f8f01544430 in dummy_worker (opaque=0x7f8eb2be4868) at
>>>>>>>> threadproc/unix/thread.c:151
>>>>>>>>
>>>>>>>> #9 0x00007f8f00ff0182 in start_thread (arg=0x7f8eb2b20700) at
>>>>>>>> pthread_create.c:312
>>>>>>>>
>>>>>>>> #10 0x00007f8f00d1d47d in clone () at
>>>>>>>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
>>>>>>>>
>>>>>>>>
>>>>>>>> *[*
>>>>>>>> <https://soniccloud.slack.com/archives/D02UEC39S/p1458078254000027>
>>>>>>>>
>>>>>>>> 5:44
>>>>>>>> <https://soniccloud.slack.com/archives/D02UEC39S/p1458078254000027>
>>>>>>>>
>>>>>>>> *]*
>>>>>>>> <https://soniccloud.slack.com/archives/D02UEC39S/p1458078254000027>
>>>>>>>>
>>>>>>>> (gdb) bt full
>>>>>>>>
>>>>>>>> #0 0x00007f8f00c59cc9 in __GI_raise (sig=sig at entry=6) at
>>>>>>>> ../nptl/sysdeps/unix/sysv/linux/raise.c:56
>>>>>>>>
>>>>>>>> resultvar = 0
>>>>>>>>
>>>>>>>> pid = 18329
>>>>>>>>
>>>>>>>> selftid = 18421
>>>>>>>>
>>>>>>>> #1 0x00007f8f00c5d0d8 in __GI_abort () at abort.c:89
>>>>>>>>
>>>>>>>> save_stage = 2
>>>>>>>>
>>>>>>>> act = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction
>>>>>>>> = 0x0}, sa_mask = {__val = {0 <repeats 16 times>}}, sa_flags = 0,
>>>>>>>> sa_restorer = 0x0}
>>>>>>>>
>>>>>>>> sigs = {__val = {32, 0 <repeats 15 times>}}
>>>>>>>>
>>>>>>>> #2 0x00007f8f00c96394 in __libc_message (do_abort=do_abort at entry=1,
>>>>>>>> fmt=fmt at entry=0x7f8f00da4b28 "*** Error in `%s': %s: 0x%s ***\n")
>>>>>>>> at ../sysdeps/posix/libc_fatal.c:175
>>>>>>>>
>>>>>>>> ap = {{gp_offset = 40, fp_offset = 32654, overflow_arg_area
>>>>>>>> = 0x7f8eb2b1f010, reg_save_area = 0x7f8eb2b1efa0}}
>>>>>>>>
>>>>>>>> fd = 2
>>>>>>>>
>>>>>>>> on_2 = <optimized out>
>>>>>>>>
>>>>>>>> list = <optimized out>
>>>>>>>>
>>>>>>>> nlist = <optimized out>
>>>>>>>>
>>>>>>>> cp = <optimized out>
>>>>>>>>
>>>>>>>> written = <optimized out>
>>>>>>>>
>>>>>>>> #3 0x00007f8f00ca266e in malloc_printerr (ptr=<optimized out>,
>>>>>>>> str=0x7f8f00da0c19 "free(): invalid pointer", action=1) at malloc.c:4996
>>>>>>>>
>>>>>>>> buf = "00007f8ed0036700"
>>>>>>>>
>>>>>>>> cp = <optimized out>
>>>>>>>>
>>>>>>>> #4 _int_free (av=<optimized out>, p=<optimized out>, have_lock=0)
>>>>>>>> at malloc.c:3840
>>>>>>>>
>>>>>>>> size = <optimized out>
>>>>>>>>
>>>>>>>> fb = <optimized out>
>>>>>>>>
>>>>>>>> nextchunk = <optimized out>
>>>>>>>>
>>>>>>>> nextsize = <optimized out>
>>>>>>>>
>>>>>>>> nextinuse = <optimized out>
>>>>>>>>
>>>>>>>> prevsize = <optimized out>
>>>>>>>>
>>>>>>>> bck = <optimized out>
>>>>>>>>
>>>>>>>> fwd = <optimized out>
>>>>>>>>
>>>>>>>> errstr = <optimized out>
>>>>>>>>
>>>>>>>> locked = <optimized out>
>>>>>>>>
>>>>>>>> #5 0x00007f8f01334567 in switch_log_node_free (pnode=pnode at entry=0x7f8eb2b1f158)
>>>>>>>> at src/switch_log.c:136
>>>>>>>>
>>>>>>>> node = 0x7f8ed8012ab0
>>>>>>>>
>>>>>>>> #6 0x00007f8eeb192a24 in read_packet (listener=listener at entry=0x7f8ebc027898,
>>>>>>>> event=event at entry=0x7f8eb2b1f7f0, timeout=timeout at entry=0) at
>>>>>>>> mod_event_socket.c:1361
>>>>>>>>
>>>>>>>> dnode = 0x7f8ed8012ab0
>>>>>>>>
>>>>>>>> do_sleep = <optimized out>
>>>>>>>>
>>>>>>>> mlen = 0
>>>>>>>>
>>>>>>>> bytes = 0
>>>>>>>>
>>>>>>>> mbuf = 0x7f8ecc1ebfc0 ""
>>>>>>>>
>>>>>>>> buf = "Content-Type: log/data\nContent-Length:
>>>>>>>> 88\nLog-Level: 7\nText-Channel: 3\nLog-File:
>>>>>>>> param_hps_strategy.cpp\nLog-Func: retrieve\nLog-Line: 115\nUser-Data: \347@
>>>>>>>> \247\a\n\n\000\n\n\000\065-418f-a6d1-9dc8f48e0cf9\n\n\000\000\071\n\n\000c8f48e0cf9"...
>>>>>>>>
>>>>>>>> len = 88
>>>>>>>>
>>>>>>>> status = SWITCH_STATUS_BREAK
>>>>>>>>
>>>>>>>> count = 0
>>>>>>>>
>>>>>>>> elapsed = <optimized out>
>>>>>>>>
>>>>>>>> start = 1457966137
>>>>>>>>
>>>>>>>> pop = 0x7f8ed8012ab0
>>>>>>>>
>>>>>>>> ptr = 0x7f8ecc1ebfc0 ""
>>>>>>>>
>>>>>>>> crcount = 0 '\000'
>>>>>>>>
>>>>>>>> buf_len = 2048
>>>>>>>>
>>>>>>>> channel = 0x0
>>>>>>>>
>>>>>>>> clen = 0
>>>>>>>>
>>>>>>>> __PRETTY_FUNCTION__ = "read_packet"
>>>>>>>>
>>>>>>>> __func__ = "read_packet"
>>>>>>>>
>>>>>>>> #7 0x00007f8eeb1988a0 in listener_run (thread=<optimized out>,
>>>>>>>> obj=0x7f8ebc027898) at mod_event_socket.c:2719
>>>>>>>>
>>>>>>>> listener = 0x7f8ebc027898
>>>>>>>>
>>>>>>>> buf = '\000' <repeats 1023 times>
>>>>>>>>
>>>>>>>> len = 1024
>>>>>>>>
>>>>>>>> status = <optimized out>
>>>>>>>>
>>>>>>>> event = 0x0
>>>>>>>>
>>>>>>>> reply = "\000OK log level [7]", '\000' <repeats 493 times>
>>>>>>>>
>>>>>>>> session = 0x0
>>>>>>>>
>>>>>>>> channel = 0x0
>>>>>>>>
>>>>>>>> revent = 0x0
>>>>>>>>
>>>>>>>> var = <optimized out>
>>>>>>>>
>>>>>>>> locked = 1
>>>>>>>>
>>>>>>>> __PRETTY_FUNCTION__ = "listener_run"
>>>>>>>>
>>>>>>>> __func__ = "listener_run"
>>>>>>>>
>>>>>>>> #8 0x00007f8f01544430 in dummy_worker (opaque=0x7f8eb2be4868) at
>>>>>>>> threadproc/unix/thread.c:151
>>>>>>>>
>>>>>>>> thread = 0x7f8eb2be4868
>>>>>>>>
>>>>>>>> #9 0x00007f8f00ff0182 in start_thread (arg=0x7f8eb2b20700) at
>>>>>>>> pthread_create.c:312
>>>>>>>>
>>>>>>>> __res = <optimized out>
>>>>>>>>
>>>>>>>> pd = 0x7f8eb2b20700
>>>>>>>>
>>>>>>>> now = <optimized out>
>>>>>>>>
>>>>>>>> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140250860095232,
>>>>>>>> -640791540281233069, 0, 0, 140250860095936, 140250860095232,
>>>>>>>> 578173923610734931, 577994035108262227}, mask_was_saved = 0}}, priv = {pad
>>>>>>>> = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
>>>>>>>>
>>>>>>>> not_first_call = <optimized out>
>>>>>>>>
>>>>>>>> pagesize_m1 = <optimized out>
>>>>>>>>
>>>>>>>> sp = <optimized out>
>>>>>>>>
>>>>>>>> freesize = <optimized out>
>>>>>>>>
>>>>>>>> __PRETTY_FUNCTION__ = "start_thread"
>>>>>>>>
>>>>>>>> #10 0x00007f8f00d1d47d in clone () at
>>>>>>>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
>>>>>>>>
>>>>>>>> No locals
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>>
>>>> --
>>>> Anthony Minessale II ♬ @anthmfs ♬ @FreeSWITCH ♬
>>>>
>>>> ☞ http://freeswitch.org/ ☞ http://cluecon.com/ ☞
>>>> http://twitter.com/FreeSWITCH
>>>> ☞ irc.freenode.net #freeswitch ☞ *http://freeswitch.org/g+
>>>> <http://freeswitch.org/g+>*
>>>>
>>>> ClueCon Weekly Development Call
>>>> ☎ sip:888 at conference.freeswitch.org ☎ +19193869900
>>>>
>>>> https://www.youtube.com/watch?v=9XXgW34t40s
>>>> https://www.youtube.com/watch?v=NLaDpGQuZDA
>>>>
>>>>
>>>>
>>>> _________________________________________________________________________
>>>> Professional FreeSWITCH Consulting Services:
>>>> consulting at freeswitch.org
>>>> http://www.freeswitchsolutions.com
>>>>
>>>> Official FreeSWITCH Sites
>>>> http://www.freeswitch.org
>>>> http://confluence.freeswitch.org
>>>> http://www.cluecon.com
>>>>
>>>> FreeSWITCH-users mailing list
>>>> FreeSWITCH-users at lists.freeswitch.org
>>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>>> UNSUBSCRIBE:
>>>> http://lists.freeswitch.org/mailman/options/freeswitch-users
>>>> http://www.freeswitch.org
>>>>
>>>
>>>
>>>
>>> --
>>> mandra
>>> c:410.258.5281
>>>
>>
>>
>> --
>> Anthony Minessale II ♬ @anthmfs ♬ @FreeSWITCH ♬
>>
>> ☞ http://freeswitch.org/ ☞ http://cluecon.com/ ☞
>> http://twitter.com/FreeSWITCH
>> ☞ irc.freenode.net #freeswitch ☞ *http://freeswitch.org/g+
>> <http://freeswitch.org/g+>*
>>
>> ClueCon Weekly Development Call
>> ☎ sip:888 at conference.freeswitch.org
>> <javascript:_e(%7B%7D,'cvml','sip:888 at conference.freeswitch.org');> ☎
>> +19193869900
>>
>> https://www.youtube.com/watch?v=9XXgW34t40s
>> https://www.youtube.com/watch?v=NLaDpGQuZDA
>>
>>
>> _________________________________________________________________________
>> Professional FreeSWITCH Consulting Services:
>> consulting at freeswitch.org
>> <javascript:_e(%7B%7D,'cvml','consulting at freeswitch.org');>
>> http://www.freeswitchsolutions.com
>>
>> Official FreeSWITCH Sites
>> http://www.freeswitch.org
>> http://confluence.freeswitch.org
>> http://www.cluecon.com
>>
>> FreeSWITCH-users mailing list
>> FreeSWITCH-users at lists.freeswitch.org
>> <javascript:_e(%7B%7D,'cvml','FreeSWITCH-users at lists.freeswitch.org');>
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>> http://www.freeswitch.org
>>
>
>
>
> --
> mandra
> c:410.258.5281
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20160317/aff5a6ac/attachment-0001.html
Join us at ClueCon 2016 Aug 8-12, 2016
More information about the FreeSWITCH-users
mailing list