great - thanks Daniel, will do.<br><br>Cheers<br>Jason<br><br><div class="gmail_quote">On Fri, Aug 12, 2011 at 3:33 PM, Daniel-Constantin Mierla <span dir="ltr">&lt;<a href="mailto:miconda@gmail.com">miconda@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <br>
    <br>
    On 8/12/11 3:27 PM, Jason Penton wrote:
    <blockquote type="cite">great, that&#39;s perfect!<br>
    </blockquote>
    I forgot to mention that if someone is needing it before, just go
    ahead and add, don&#39;t wait for me, should not be something complex to
    implement. There is one function exported by dlg, so the
    inter-module API struct and load function are there.<br>
    <br>
    Cheers,<br><font color="#888888">
    Daniel</font><div><div></div><div class="h5"><br>
    <br>
    <blockquote type="cite"><br>
      <div class="gmail_quote">On Fri, Aug 12, 2011 at 3:22 PM,
        Daniel-Constantin Mierla <span dir="ltr">&lt;<a href="mailto:miconda@gmail.com" target="_blank">miconda@gmail.com</a>&gt;</span>
        wrote:<br>
        <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
          <div bgcolor="#FFFFFF" text="#000000"> Hello,<br>
            <br>
            exporting through C api the functions to create/terminate
            dialogs is on some to-do list for myself, with the primary
            goal to make them available on Lua/other embedded language
            interpreters.<br>
            <br>
            I would prefer as well not to export the low level
            implementation details unless really necessary, but anything
            that is exported to config or MI/RPC interfaces should be
            safe to be exported to the inter-module C api.<br>
            <br>
            Cheers,<br>
            DAniel
            <div>
              <div><br>
                <br>
                On 8/12/11 3:14 PM, Jason Penton wrote:
                <blockquote type="cite">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" target="_blank">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><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><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><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><br>
                        <br>
                        <br>
                        &gt; On Fri, Aug 12, 2011 at 12:58 PM, Timo
                        Reimann &lt;<a href="mailto:timo.reimann@1und1.de" target="_blank">timo.reimann@1und1.de</a><br>
                      </div>
                      <div>&gt; &lt;mailto:<a href="mailto:timo.reimann@1und1.de" target="_blank">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" target="_blank">timo.reimann@1und1.de</a><br>
                        &gt;     &lt;mailto:<a href="mailto:timo.reimann@1und1.de" target="_blank">timo.reimann@1und1.de</a>&gt;<br>
                      </div>
                      <div>
                        <div>&gt;     &gt; &lt;mailto:<a href="mailto:timo.reimann@1und1.de" target="_blank">timo.reimann@1und1.de</a>
                          &lt;mailto:<a href="mailto:timo.reimann@1und1.de" target="_blank">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" target="_blank">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>
                  <br>
                  <fieldset></fieldset>
                  <br>
                  <pre>_______________________________________________
sr-dev mailing list
<a href="mailto:sr-dev@lists.sip-router.org" target="_blank">sr-dev@lists.sip-router.org</a>
<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>
</pre>
                </blockquote>
                <br>
              </div>
            </div>
            <font color="#888888">
              <pre cols="72">-- 
Daniel-Constantin Mierla -- <a href="http://www.asipto.com" target="_blank">http://www.asipto.com</a>
Kamailio Advanced Training, Oct 10-13, Berlin: <a href="http://asipto.com/u/kat" target="_blank">http://asipto.com/u/kat</a>
<a href="http://linkedin.com/in/miconda" target="_blank">http://linkedin.com/in/miconda</a> -- <a href="http://twitter.com/miconda" target="_blank">http://twitter.com/miconda</a></pre>
            </font></div>
        </blockquote>
      </div>
      <br>
    </blockquote>
    <br>
    <pre cols="72">-- 
Daniel-Constantin Mierla -- <a href="http://www.asipto.com" target="_blank">http://www.asipto.com</a>
Kamailio Advanced Training, Oct 10-13, Berlin: <a href="http://asipto.com/u/kat" target="_blank">http://asipto.com/u/kat</a>
<a href="http://linkedin.com/in/miconda" target="_blank">http://linkedin.com/in/miconda</a> -- <a href="http://twitter.com/miconda" target="_blank">http://twitter.com/miconda</a></pre>
  </div></div></div>

</blockquote></div><br>