Hey Timo<br><br><div class="gmail_quote">On Fri, Aug 12, 2011 at 2:53 PM, Timo Reimann <span dir="ltr">&lt;<a href="mailto:timo.reimann@1und1.de">timo.reimann@1und1.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hey Jason,<br>
<div class="im"><br>
<br>
On 12.08.2011 13:50, Jason Penton wrote:<br>
&gt; Ok, I agree with you on the reference counting - this can be avoided by<br>
&gt; keeping the h_entry:h_id pair instead of a pointer to dlg. The reason I<br>
&gt; was doing the ref was to make sure that the dialog module does not<br>
&gt; delete a dialog under a modules feet (in which case a module would hold<br>
&gt; a pointer to memory that has been freed). However, to avoid this we can<br>
&gt; just call lookup_dlg passing in the entry:id pair. (another reason why<br>
&gt; we would need lookup_dlg to be exposed ;)<br>
<br>
</div>A much easier approach IMHO would be to register a callback to<br>
DLGCB_DESTROY or DLGCB_TERMINATE. That way, you&#39;ll be notified<br>
automatically when the dialog is destroyed/terminated and don&#39;t need to<br>
deal with implementation details such as hash table keys.<br>
<br>
You could also use other dialog callbacks to react to specific dialog<br>
lifetime phases. See the docs for details.<br></blockquote><div><br>yes, we do this already, BUT we need a link to a dialog that can be used &quot;outside&quot; of the callbacks. For example. Lets take the Rx interface. We could get a message from the network saying there is a problem on the bearer, static the PCC sessions affected. In this case:<br>
<br>a) we need to find the associated / affected dialogs<br>b) terminate them<br><br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im"><br>
<br>
&gt; If we just use as one example the Ro interface we have built.<br>
&gt; Effectivley Ro is used in the IMS world for online charging (i.e.<br>
&gt; realtime charing during the call). So naturally, this module is dialog<br>
&gt; aware. What we do is keep a mapping between the dialog and the<br>
&gt; particular Ro session (Ro session exists between Kamailio and an OCS<br>
&gt; (online charging system). This is the reason for storing the dialog<br>
&gt; pointer or id pairs. Now, when we run out of credit - the OCS will deny<br>
&gt; a new batch of requested credit. In this case we lookup the<br>
&gt; corresponding dialog associated to the Ro session and tear it down,<br>
&gt; using terminate_dlg function<br>
<br>
</div>If you really need to terminate calls proxy-wise, I agree you need some<br>
terminate function. It&#39;s usefulness might be restricted in your case as<br>
mischievious clients may just ignore your BYE request. I don&#39;t know your<br>
exact setup, however, so this objection might not count.<br></blockquote><div><br>correct, but dont forget in the IMS case the bearer will be torn down in which case the &#39;client&#39; wont be able to send or receive RTP ;)<br>
 <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
Assuming that it holds I think dialog callbacks, again, are the way to<br>
hook into the dialog module. Just keep registering for new dialogs<br>
(possibly &quot;confirmed&quot; ones only) and make your module logic keep track<br>
of credits during the course of the call. Should the account drop to<br>
zero while the dialog is still active, force termination.<br>
<br>
Termination, by the way, could also be implemented by letting your<br>
module run a particular Kamailio route on zero credits which, in turn,<br>
could call dlg_end_dlg(). That way, you wouldn&#39;t need to export another<br>
function. I am not strictly against exporting the termination function<br>
on C level though, just wanted to mention the route approach.<br></blockquote><div><br>yes this is one of the options we did think about, BUT we thought that if someone wanted to implement an Ro interface they may not want to have to &#39;configure&#39; the config file to make it work properly and according to the standard. but yest this still remains a good option.<br>
 <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im"><br>
<br>
<br>
&gt; I really think there are a number of scenarios where these extended API<br>
&gt; functions could be used so as to ensure modules don&#39;t have to replicate<br>
&gt; what alrady exists in the dialog module, from both memory and processing<br>
&gt; perspective.<br>
<br>
</div>I&#39;d be interested to know whether all these scenarios can be covered by<br>
means of using the dialog callbacks as they nicely isolate<br>
implementation details from dialog usage. If there are cases where<br>
callbacks don&#39;t suffice, we can think about ways to work around. In my<br>
opinion, that should go by enhancing the callback mechanism accordingly.<br></blockquote><div><br>the dialog callbacks work great for Dialog initiated events, but not so nicely when you have triggers/events coming from other stimuli and in which you no longer have access to the appropriate information.<br>
<br>I think at a minimum it may be a good thing to expose terminate_dlg at C level API afterall you would think that this would be a natural sort of function to expose. As far as the others are concerned lets see if we can work around.<br>
<br>One other thing we were thinking of is adding a rivet gun framework to the dialog module. Here you could effectively added meta information to a dialog through the callbacks for module specific (dialog-relayed) information. So in essence you can think of attaching nuggets of information (rivets) to the dialog in the form a void*. the modules could then also possible pass a code/decode function for the void* to the appropriate information for that module (more like a serialiser/deserialiser actually).<br>
<br>I think this could also add some nice value as it will prevent modules having to store extra references in their own code to map data to a dialog.<br><br>p.s. thanks for you indepth look into this and your valuable comments<br>
<br>Cheers <br>Jason<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
<br>
Cheers,<br>
<font color="#888888"><br>
--Timo<br>
</font><div class="im"><br>
<br>
<br>
&gt; On Fri, Aug 12, 2011 at 12:58 PM, Timo Reimann &lt;<a href="mailto:timo.reimann@1und1.de">timo.reimann@1und1.de</a><br>
</div><div class="im">&gt; &lt;mailto:<a href="mailto:timo.reimann@1und1.de">timo.reimann@1und1.de</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt;     Hey Jason,<br>
&gt;<br>
&gt;<br>
&gt;     On 12.08.2011 12:54, Jason Penton wrote:<br>
&gt;     &gt; this wont be available to configuration users but to other modules<br>
&gt;     &gt; through API.<br>
&gt;<br>
&gt;     Ok, thanks for clarifying this. Still, allowing other modules to fiddle<br>
&gt;     with referencing counting is a no-go IMHO.<br>
&gt;<br>
&gt;<br>
&gt;     &gt; On phone now so will respond to use cases when I&#39;m back at my PC<br>
&gt;<br>
&gt;     Sounds good!<br>
&gt;<br>
&gt;<br>
&gt;     Cheers,<br>
&gt;<br>
&gt;     --Timo<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;     &gt; On Aug 12, 2011 12:48 PM, &quot;Timo Reimann&quot; &lt;<a href="mailto:timo.reimann@1und1.de">timo.reimann@1und1.de</a><br>
&gt;     &lt;mailto:<a href="mailto:timo.reimann@1und1.de">timo.reimann@1und1.de</a>&gt;<br>
</div><div><div></div><div class="h5">&gt;     &gt; &lt;mailto:<a href="mailto:timo.reimann@1und1.de">timo.reimann@1und1.de</a> &lt;mailto:<a href="mailto:timo.reimann@1und1.de">timo.reimann@1und1.de</a>&gt;&gt;&gt; wrote:<br>

&gt;     &gt;&gt; Hey,<br>
&gt;     &gt;&gt;<br>
&gt;     &gt;&gt;<br>
&gt;     &gt;&gt; On 12.08.2011 12:33, Jason Penton wrote:<br>
&gt;     &gt;&gt;&gt; We are currently refactoring and cleaning the various IMS<br>
&gt;     modules for<br>
&gt;     &gt;&gt;&gt; inclusion into SR, diameter_rx, diameter_cxdx, diameter_ro, etc.<br>
&gt;     &gt;&gt;&gt;<br>
&gt;     &gt;&gt;&gt; One thing we have noticed is that the use of dialog module functions<br>
&gt;     &gt;&gt;&gt; would make the code alot better and cleaner, so 2 questions:<br>
&gt;     &gt;&gt;&gt;<br>
&gt;     &gt;&gt;&gt; 1. why is the Dialog module not exposing more if its methods?<br>
&gt;     &gt;&gt;&gt; 2. Can we put in a patch to expose the ones we require.<br>
&gt;     &gt;&gt;&gt;<br>
&gt;     &gt;&gt;&gt; Currently, we have exposed and are using the following:<br>
&gt;     &gt;&gt;&gt;<br>
&gt;     &gt;&gt;&gt; lookup_dlg;<br>
&gt;     &gt;&gt;&gt; terminate_dlg;<br>
&gt;     &gt;&gt;&gt; get_dlg;<br>
&gt;     &gt;&gt;&gt; unref_dlg;<br>
&gt;     &gt;&gt;&gt; ref_dlg;<br>
&gt;     &gt;&gt;<br>
&gt;     &gt;&gt; I strongly opt against exporting any functions related to reference<br>
&gt;     &gt;&gt; management. It&#39;s already hard to handle reference counting properly<br>
&gt;     &gt;&gt; inside the module; allowing configuration users to touch that part of<br>
&gt;     &gt;&gt; the module will likely result in all kinds of ugly bugs. IMHO,<br>
&gt;     it&#39;s best<br>
&gt;     &gt;&gt; to keep it internal and provide functions to whatever feature you<br>
&gt;     like.<br>
&gt;     &gt;&gt; There&#39;s already a bunch of dialog PVs and (more recently) the very<br>
&gt;     &gt;&gt; generic dialog variable mechanism which allows you to do a series of<br>
&gt;     &gt; things.<br>
&gt;     &gt;&gt;<br>
&gt;     &gt;&gt; Regarding the other functions you mentioned, can you outline what<br>
&gt;     your<br>
&gt;     &gt;&gt; use case for those is?<br>
&gt;     &gt;&gt;<br>
&gt;     &gt;&gt;<br>
&gt;     &gt;&gt; Cheers,<br>
&gt;     &gt;&gt;<br>
&gt;     &gt;&gt; --Timo<br>
<br>
_______________________________________________<br>
sr-dev mailing list<br>
<a href="mailto:sr-dev@lists.sip-router.org">sr-dev@lists.sip-router.org</a><br>
<a href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev" target="_blank">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev</a><br>
</div></div></blockquote></div><br>