Forgot to mention, the callback is generic and it can be used by any
module sitting on top of the dialog module.
In the extra pointer from the callback structure I expect to find a
pointer to a mi_node structure (which is not module specific). Each
module is responsible of providing it's data in a well known format,
in this particular case, an mi_node structure.
As an example, I'm working on a module that will track the sdp for
both caller and callee (using the openser integrated sdp parser).
Here's the output of the dlg_list mi command with both sst and qos
(the module that I'm working on) loaded (see both sst and qos nodes
attached to the mi tree structure):
dialog:: hash=364:1735939007
state:: 2
timestart:: 0
timeout:: 0
callid:: [EMAIL PROTECTED]
from_uri:: sip:[EMAIL PROTECTED]:5050
from_tag:: 1
caller_contact:: sip:[EMAIL PROTECTED]:5050
caller_cseq:: 1
caller_route_set::
caller_bind_addr:: udp:10.11.10.63:5060
to_uri:: sip:[EMAIL PROTECTED]:5060
to_tag::
callee_contact::
callee_cseq::
callee_route_set::
callee_bind_addr::
sst:: requester_flags=4 supported_flags=0 interval=2400
qos:: negotiated_sdp
sdp:: m_dir=1 m_id=1 method=INVITE cseq=1 negotiation=1
session:: callee cnt_disp= streams=1
stream:: 0 media=audio port=18074
transport=RTP/AVP payloads_num=2
payload:: 100 codec=X-NSE
sendrecv= ptime=
payload:: 0 codec=PCMU sendrecv= ptime=
session:: caller cnt_disp=session streams=1
stream:: 0 media=audio port=6002
transport=RTP/AVP payloads_num=3
payload:: 18 codec= sendrecv= ptime=
payload:: 1 codec= sendrecv= ptime=
payload:: 0 codec=PCMU
sendrecv=inactive ptime=
Regards,
Ovidiu Sas
On Thu, Apr 17, 2008 at 6:23 PM, Ovidiu Sas <[EMAIL PROTECTED]> wrote:
> Hello Dan,
>
> The problem that I'm trying to solve was described at the beginning of
> this thread, maybe with not enough clarity (please follow also
>
> http://sourceforge.net/tracker/index.php?func=detail&aid=1933630&group_id=139143&atid=743022).
>
> I will use as an example the sst module. The sst module has a call
> specific context:
>
> typedef struct sst_info_st {
> enum sst_flags requester;
> enum sst_flags supported;
> unsigned int interval;
> } sst_info_t;
>
> The pointer to the sst call specific context is saved inside the
> dialog callbacks.
> I would like to be able to interrogate - via the mi interface - the
> content of the sst call specific context, but the only way to do it is
> via the dialog module. Therefore, I need a callback from the dialog
> module into the sst module in order to be able to retrieve the sst
> call specific context.
>
> As an example, here's the output of the dlg_list mi command, with the
> content of the sst call specific context (see the last line: "sst::
> requester_flags=4 supported_flags=0 interval=2400"):
> dialog:: hash=898:913256572
> state:: 2
> timestart:: 0
> timeout:: 0
> callid:: [EMAIL PROTECTED]
> from_uri:: sip:[EMAIL PROTECTED]:5050
> from_tag:: 1
> caller_contact:: sip:[EMAIL PROTECTED]:5050
> caller_cseq:: 1
> caller_route_set::
> caller_bind_addr:: udp:10.11.10.63:5060
> to_uri:: sip:[EMAIL PROTECTED]:5060
> to_tag::
> callee_contact::
> callee_cseq::
> callee_route_set::
> callee_bind_addr::
> sst:: requester_flags=4 supported_flags=0 interval=2400
>
>
> Hope this answer your question.
>
>
> Regards,
> Ovidiu Sas
>
>
>
>
> On Thu, Apr 17, 2008 at 5:31 PM, Dan Pascu <[EMAIL PROTECTED]> wrote:
> > On Thursday 17 April 2008, Ovidiu Sas wrote:
> >
> > > Well ... define generic.
> > > This particular callback is meant to be used via the MI interface.
> > > You can define other type of callbacks and reuse the extra pointer
> > > that was defined (see void **x_param inside struct dlg_cb_params).
> >
> > That's exactly my point. I was asking the question with a purpose, that is
> > to highlight that the proposed change would define a dialog callback that
> > can only be used by one module and in a very specific context, callback
> > that is on the other hand made public. What is the use of a callback that
> > is advertised as public, but can only be used by one module for a very
> > specific task?
> >
> > I mean, can't that module export a public API that the dialog module can
> > use to get the information it needs? That would be more clean, yet it
> > would still be an awkward reverse dependency.
> >
> > IMO, I still find such a dependency to be very problematic to be forged
> > into any kind of generic interface. The direct dependency is fine. Any
> > module built on top of the dialog module can use the dialog's public API
> > to access the dialog state/events. But when you have it the other way
> > around, the dialog module cannot possibly know what modules will be built
> > on top of it to be able to generically extract information from them.
> > This kind of dependency is not only awkward, but it is very narrow in its
> > scope, which hardly justifies it being put in a public API that none
> > uses, except that module.
> >
> > I'm sure that if we would know in more detail what problem you are trying
> > to solve (as opposed to how you try to solve it), many people here could
> > offer good suggestions that may turn into a better design.
> >
> > --
> > Dan
> >
>
_______________________________________________
Devel mailing list
[email protected]
http://lists.openser.org/cgi-bin/mailman/listinfo/devel