[sr-dev] some pua_rpc progress

Daniel-Constantin Mierla miconda at gmail.com
Fri Dec 5 09:50:24 CET 2014


Looking at the code, rpc reply can be sent only on demand or is done
automatically at the end of dispatch_rpc() if it hasn't been sent before.

rpc fault() is only setting the code/text of what to be sent.

I see the logs messages, and it is ok that the reply was not sent
message is printed, because it wasn't. But the reply is not going to be
sent because there is a check on XMLRPC_DELAYED_REPLY_F flag.

I am no longer sure what behaviour you can get currently, because you
haven't mentioned along with the logs here -- two replies or no-reply?

Cheers,
Daniel

On 05/12/14 07:02, Juha Heinanen wrote:
> Daniel-Constantin Mierla writes:
>
>> It seems you change the value of c inside publish:
>>
>> 	if (dctx->reply_ctx != 0) {
>> 		/* callback was not executed or its execution failed */
>> 		rpc = &dctx->rpc;
>> 		c = dctx->reply_ctx;
>> 	} else {
>> 		return;
>> 	}
>>
>> So it is no longer pointing to the same structure as in
>> dispatch_rpc().
> it is pointing to the same structure as in publish_callback and if the
> callback is executed, everything works fine:
>
> Dec  5 07:57:02 rautu /usr/bin/sip-proxy[32714]: INFO: pua_rpc [pua_rpc.c:222]: publish(): pua_send_publish returned 0
> Dec  5 07:57:02 rautu /usr/bin/sip-proxy[32714]: INFO: xmlrpc [xmlrpc.c:2441]: dispatch_rpc(): reply was not sent
> #
> T 2014/12/05 07:57:02.516438 127.0.0.1:6060 -> 127.0.0.1:54971 [AP]
> HTTP/1.1 200 OK.
> Via: SIP/2.0/TCP 127.0.0.1:54971.
> Server: OpenXg SIP Proxy (4.3.0-0 (i386/linux)).
> Content-Length: 202.
> .
> <?xml version="1.0"?>
> <methodResponse>
> <params>
> <param>
> <value><int>200</int>
> <string>OK</string>
> <string>a.1417566804.11407.5.2</string>
> <int>7776001</int>
> </value>
> </param>
> </params>
> </methodResponse>
>
> the same assignments are done in tm/rpc_uac.c, which i have used as an
> example.
>
> i have tried also without the assignments (see below) and also then
> xmlrpc debug tells that reply was not sent:
>
> T 2014/12/05 07:45:50.696091 127.0.0.1:6060 -> 127.0.0.1:54963 [AP]
> HTTP/1.1 200 OK.
> Via: SIP/2.0/TCP 127.0.0.1:54963.
> Server: OpenXg SIP Proxy (4.3.0-0 (i386/linux)).
> Content-Length: 108.
> .
> <?xml version="1.0"?>
> <methodResponse>
> <params>
> <param>
> <value></value>
> </param>
> </params>
> </methodResponse>
> ####Dec  5 07:45:50 rautu /usr/bin/sip-proxy[32709]: INFO: pua_rpc [pua_rpc.c:222]: publish(): pua_send_publish returned 418
> Dec  5 07:45:50 rautu /usr/bin/sip-proxy[32709]: INFO: xmlrpc [xmlrpc.c:2441]: dispatch_rpc(): reply was not sent
>
> -- juha
>
> static void publish(rpc_t* rpc, void* c)
> {
>     ...
> 	dctx = rpc->delayed_ctx_new(c);
> 	if (dctx == 0) {
> 		LM_ERR("internal error: failed to create context\n");
> 		rpc->fault(c, 500, "internal error: failed to create context");
> 		return;
> 	}
>
> 	publ.cb_param = dctx;
> 	publ.source_flag = MI_ASYN_PUBLISH;
>
> 	ret = pua_send_publish(&publ);
> 	LM_INFO("pua_send_publish returned %d\n", ret);
>
> 	if (dctx->reply_ctx == 0)
> 		/* callback was successfully executed */
> 		return;
>     ...
>     
> 	if (ret == 418) {
> 		rpc->fault(c, 500, "Wrong ETag");
> 		rpc->delayed_ctx_close(dctx);
> 	}
>
>
> 	return;
> }
>

-- 
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda




More information about the sr-dev mailing list