[sr-dev] some pua_rpc progress

Juha Heinanen jh at tutpro.com
Thu Dec 4 05:01:29 CET 2014


Daniel-Constantin Mierla writes:

> It was more to see if it is still sent inside xmlrpc_dispatch() --
> perhaps you can add a log message there before rpc_send()

i added this debug to xmlrpc/dispatch_rpc():

 skip:
	     /* The function may have sent the reply itself */
	if (!ctx.reply_sent)
		LM_INFO("function did not sent reply\n");

	if (!(ctx.flags&XMLRPC_DELAYED_REPLY_F))
		LM_INFO("XMLRPC_DELAYED_REPLY_F is not set\n");

	if (!ctx.reply_sent && !(ctx.flags&XMLRPC_DELAYED_REPLY_F)) {
		ret = rpc_send(&ctx);
	}

and got:

Dec  4 05:55:58 rautu /usr/bin/sip-proxy[3592]: INFO: pua_rpc [pua_rpc.c:222]: publish(): pua_send_publish returned 418
Dec  4 05:55:58 rautu /usr/bin/sip-proxy[3592]: INFO: xmlrpc [xmlrpc.c:920]: rpc_fault(): running rpc_fault '500'/'Wrong ETag'
Dec  4 05:55:58 rautu /usr/bin/sip-proxy[3592]: INFO: xmlrpc [xmlrpc.c:2443]: dispatch_rpc(): function did not sent reply

so looks like if callback function is not executed and

        rpc->fault(c, 500, "Wrong ETag");

executed from the main function, dispatch_rpc() does not get to know
about it.

-- 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 not executed or its execution failed */
		rpc = &dctx->rpc;
		c = dctx->reply_ctx;
	} else {
		return;
	}

	if (ret < 0) {
		LM_ERR("pua_send_publish failed\n");
		err_ret = err2reason_phrase(ret, &sip_error, err_buf,
					    sizeof(err_buf), "RPC/PUBLISH") ;
		if (err_ret > 0 ) {
			rpc->fault(c, sip_error, "%s", err_buf);
		} else {
			rpc->fault(c, 500, "RPC/PUBLISH error");
		}
		rpc->delayed_ctx_close(dctx);
	}

	if (ret == 418) {
		rpc->fault(c, 500, "Wrong ETag");
		rpc->delayed_ctx_close(dctx);
	}


	return;
}



More information about the sr-dev mailing list