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; }