[OpenSER-Devel] dialog callbacks: mi enhancements
Ovidiu Sas
osas at voipembedded.com
Fri Apr 18 00:23:44 CEST 2008
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:: 1-24613 at 10.11.10.148
from_uri:: sip:sipp at 10.11.10.148:5050
from_tag:: 1
caller_contact:: sip:sipp at 10.11.10.148:5050
caller_cseq:: 1
caller_route_set::
caller_bind_addr:: udp:10.11.10.63:5060
to_uri:: sip:4165555001 at 10.11.10.63: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 <dan at ag-projects.com> 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
>
More information about the Devel
mailing list