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 Devel@lists.openser.org http://lists.openser.org/cgi-bin/mailman/listinfo/devel