Hi Razvan,

Got your point. I tried to increase the MAX_CONTENT_TYPE_LEN  and tested async 
call and it is working fine without crash.

But one more question.
The same piece of code am using for sync REST_API query too in rest_put() 
method. There also print_buff is only being used.
It is working absolutely fine in the case of sync  call even  if the 
MAX_CONTENT_TYPE_LEN – is 64.

Wondering what would be the reason in sync call, it is working and in async it 
is not?

Regards,
Agalya

From: Users [mailto:[email protected]] On Behalf Of Razvan 
Crainea
Sent: Wednesday, January 18, 2017 4:29 AM
To: [email protected]
Subject: Re: [OpenSIPS-Users] async- issues- 2.2.2

Hi, Ramachandran!

The print_buff buffer is declared with length MAX_CONTENT_TYPE_LEN -> 64. 
Writing more than 64 bytes will lead to a buffer overflow, probably followed by 
a crash.
If you want to suppor longer CallIDs, just increase the size of the buffer, or 
allocate the buffer with a size large enought to fit your callid length.

Best regards,


Răzvan Crainea

OpenSIPS Solutions

www.opensips-solutions.com<http://www.opensips-solutions.com>
On 01/17/2017 11:13 PM, Ramachandran, Agalya (Contractor) wrote:
Hi Liviu,

Found the exact issue what causes the crash.
In start_async_http_req, under case PUT/POST, we have the following code blue 
color by default.
But for my project scenario, I need to add call-id header too here, including 
that code in red color for your reference.

if (req_ctype) {
                        sprintf(print_buff, "Content-Type: %s", req_ctype);
                        header_list = curl_slist_append(header_list, 
print_buff);
                        sprintf(print_buff, "Call-Id: %s", instanceId);
                        header_list = curl_slist_append(header_list, 
print_buff);
                        w_curl_easy_setopt(handle, CURLOPT_HTTPHEADER, 
header_list);
                }

If I try by removing the Call-Id header in the curl-slist, then it works 
perfectly fine in case of POST as well as PUT.
How can I overcome this situation? Your guidance would help me a lot.

Regards,
Agalya

From: Users [mailto:[email protected]] On Behalf Of 
Ramachandran, Agalya (Contractor)
Sent: Tuesday, January 17, 2017 3:58 PM
To: OpenSIPS users mailling list 
<[email protected]><mailto:[email protected]>; Liviu Chircu 
<[email protected]><mailto:[email protected]>
Subject: Re: [OpenSIPS-Users] async- issues- 2.2.2

Hi,

Another information may help you to find this issue.

Am changing the “req_body” in the rest_methods.c, as per the REST API server is 
expecting the payload value.
If I change this “req_body” in REST_POST as well, and if the Call-Id length is 
> 56, it crashes in the POST call too.

Regards,
Agalya

From: Users [mailto:[email protected]] On Behalf Of 
Ramachandran, Agalya (Contractor)
Sent: Tuesday, January 17, 2017 3:03 PM
To: OpenSIPS users mailling list 
<[email protected]<mailto:[email protected]>>; Liviu Chircu 
<[email protected]<mailto:[email protected]>>
Subject: [OpenSIPS-Users] async- issues- 2.2.2

Hi Liviu/team,

When I try to do an asynchronous REST_PUT call in OpenSIPS 2.2.2, I see the 
below observance and issues.
All the calls are made from sipp client.

No

Test Scenario

Result/observation

1.

Call-Id length < 50

Works perfectly fine

2

Call-Id length  >54 and < 56

No crash observed. But error in curl_multiperform

3.

Call-Id length  > 56

Opensips crashes at liburl.


Please find the details for test 2 and test 3.
I have tested with REST_POST with case 3, I didn’t observe any crashes.
Please let me know what could cause this issue and how can I fix this?

Test2:

Jan 17 18:23:13 /usr/local/sbin/opensips[18554]: 
ERROR:rest_client:start_async_http_req: curl_multi_perform: Invalid multi handle
Jan 17 18:23:13  /usr/local/sbin/opensips[18554]: 
ERROR:rest_client:start_async_http_req: curl_multi_remove_handle: Invalid multi 
handle

Test 3:

(gdb) bt
#0  0x00007f370bccb9bb in curl_multi_add_handle () from /lib64/libcurl.so.4
#1  0x00007f370bf05521 in start_async_http_req (msg=msg@entry=0x7f374db14270, 
method=method@entry=REST_CLIENT_PUT,
    url=0x7f374dad8178 "http://url";, req_body=<optimized out>,
    req_ctype=<optimized out>, out_handle=out_handle@entry=0x7f374db204e0, 
body=body@entry=0x7f374db204e8, ctype=0x7f374db204f8)
    at rest_methods.c:227
#2  0x00007f370bf0e2ca in w_async_rest_put (msg=0x7f374db14270, 
resume_f=0x7ffc6f551680, resume_param=0x7ffc6f551690,
    gp_url=<optimized out>, gp_body=<optimized out>, gp_ctype=<optimized out>, 
body_pv=0x7f374daf5510 "N",
    ctype_pv=0x7f374daf55a8 "N", code_pv=0x7f374daf5670 "N") at 
rest_client.c:579
#3  0x00007f370d24920f in t_handle_async (msg=0x7f374db14270, a=0x7f374dad8508, 
resume_route=<optimized out>) at async.c:240
#4  0x000000000042d724 in do_action (a=a@entry=0x7f374dad8680, 
msg=msg@entry=0x7f374db14270) at action.c:1863
#5  0x00000000004341cc in run_action_list (a=<optimized out>, 
msg=0x7f374db14270) at action.c:172
#6  0x0000000000430769 in do_action (a=a@entry=0x7f374dad8760, 
msg=msg@entry=0x7f374db14270) at action.c:1108
#7  0x000000000043454d in run_action_list (msg=<optimized out>, a=<optimized 
out>) at action.c:172
#8  run_actions (a=<optimized out>, msg=0x7f374db14270) at action.c:137
#9  0x000000000042f8d7 in do_action (a=a@entry=0x7f374dad6b58, 
msg=msg@entry=0x7f374db14270) at action.c:745
#10 0x0000000000434393 in run_action_list (msg=<optimized out>, a=<optimized 
out>) at action.c:172
#11 run_actions (msg=0x7f374db14270, a=<optimized out>) at action.c:137
#12 run_top_route (a=<optimized out>, msg=msg@entry=0x7f374db14270) at 
action.c:204
#13 0x000000000043bcba in receive_msg (
    buf=0x858c20 <buf.8277> "INVITE sip:[email protected] 
SIP/2.0\r\nTo: <sip:[email protected];user=phone>\r\nFrom: \"test 
PA\"<sip:[email protected]:32004;user=phone;isup-oli=00>;"..., 
len=<optimized out>,
    rcv_info=rcv_info@entry=0x7ffc6f552c70, 
existing_context=existing_context@entry=0x0) at receive.c:208
#14 0x00000000005b0b03 in udp_read_req (si=<optimized out>, 
bytes_read=<optimized out>) at net/proto_udp/proto_udp.c:192
#15 0x000000000059b960 in handle_io (idx=<optimized out>, event_type=<optimized 
out>, fm=<optimized out>) at net/net_udp.c:259
#16 io_wait_loop_epoll (h=<optimized out>, t=<optimized out>, repeat=<optimized 
out>) at net/../io_wait_loop.h:225
#17 udp_rcv_loop (si=si@entry=0x7f374dacb6c8) at net/net_udp.c:308
#18 0x000000000059ce88 in udp_start_processes (chd_rank=chd_rank@entry=0x845830 
<chd_rank.11028>, startup_done=startup_done@entry=0x0)
    at net/net_udp.c:372
#19 0x0000000000419f50 in main_loop () at main.c:671
#20 main (argc=<optimized out>, argv=<optimized out>) at main.c:1261


Regards,
Agalya




_______________________________________________

Users mailing list

[email protected]<mailto:[email protected]>

http://lists.opensips.org/cgi-bin/mailman/listinfo/users

_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to