[asterisk-dev] Contacts, Contact Status and Sorcery

George Joseph george.joseph at fairview5.com
Thu Apr 30 18:20:54 CDT 2015


On Thu, Apr 30, 2015 at 5:06 PM, Joshua Colp <jcolp at digium.com> wrote:

> George Joseph wrote:
>
>>
>>
>> On Thu, Apr 30, 2015 at 3:59 PM, Joshua Colp <jcolp at digium.com
>> <mailto:jcolp at digium.com>> wrote:
>>
>>     George Joseph wrote:
>>
>>     <snip>
>>
>>
>>
>>                       What if contacts are stored in an external
>>         database? Your
>>                  proposal
>>                       would also have them going there as well. This
>>         would require an
>>                       explanation for deployers to know what is going on
>>         exactly
>>                  and what
>>                       they are. As well this means there would be a
>>         period of
>>                  time where
>>                       the permanent contacts would not be present if other
>>                  instances are
>>                       sharing the same database and one restarts.
>>
>>
>>                  They can't be today can they?  The dynamic ones are
>>         explicitly
>>                  mapped to
>>                  astdb and the permanent ones are explicitly placed in
>>         the aor based
>>                  container.  Can you even use sorcery.conf to map contacts
>>                  somewhere else
>>                  given that they're just strings in an aor?
>>
>>
>>              You sure can.
>>
>>
>>         Who would even know they can do that besides you? :)
>>
>>
>>     I believe there's a wiki page which details using PJSIP with
>>     realtime, and there's also the table in alembic.
>>
>>
>> In general there is.  There aren't any specific instructions for
>> contacts though. Permanent contacts specifically.  The ERD on the wiki
>> shows contact but pjsip.conf.sample only mentions contacts in the
>> context of aors.  There's no object mentioned.  If we took a poll, how
>> many people would respond that they know they could define permanent
>> contacts in realtime as separate objects. :)
>>
>
> I was referring to dynamic contacts added externally by registration.
>
>
>>     <snip>
>>
>>                       So. This is what I was originally trying to
>>         express when
>>                  you did the
>>                       wizard work, you've just gone about it in a
>>         different manner. I
>>                       think this is a rather specialized addition that
>>         could be
>>                  done in a
>>                       better way.
>>
>>                       Right now sorcery wizards can't be
>>         programmatically added.
>>                  They just
>>                       can't. You have to do it from the sorcery.conf
>>                  configuration file.
>>
>>
>>                  Not true.  ast_sorcery_apply_wizard_mapping allows yo
>>         to add a
>>                  wizard to
>>                  any object type at run time.  That's what the
>> config_wizard
>>                  does.  When
>>                  the object type registers, it adds a memory wizard to
>>         the object
>>                  type's
>>                  wizard list.  The config wizard then manipulates the
>>         memory wizard.
>>
>>
>>              It adds a wizard but does not return a handle to it. It
>>         also doesn't
>>              allow you to specify where to place it. It's always at the
>> end.
>>
>>
>>         You don't need a handle, you have the wizard itself.  Correct on
>>         the order.
>>
>>
>>     How? What I'm talking about is something like:
>>
>>
>> You can get the wizard as a result of the wizard_mapped observer.
>>
>
> That's an indirect mechanism, and may not order things as expected unless
> you force it.
>
>
>>
>>     int res;
>>     struct ast_sorcery_wizard *wizard;
>>     void *data;
>>     res = ast_sorcery_apply_explicit_wizard(sorcery, "endpoint",
>>     "memory", "", &wizard, &data);
>>
>>     That function would explicit at a wizard to the front, and return
>>     the specific wizard interface and instance. Instant access to
>>     manipulate that specific instance with the CRUD interface and a
>>     guarantee of its position.
>>
>>
>> Agreed and that's easy enough.  I'm not sure it helps any though.
>>
>
> It helps you be able to inject a wizard at the front and have direct
> access to manipulate it - without going through the normal wizards
> applicable to the object type itself.
>
> <snip>
>
>
>>
>>  From who's perspective though?
>>
>
> "I'm implementing qualify/contact status support. I need to store X
> information and keep it around only for the lifetime of Asterisk. I need to
> know when Y happens. I need to be able to get Z information."
>
> The entire reason I'm asking for such a basic definition of what the
> functionality needs is because things keep growing and growing, and we keep
> running into things. We need to step back and look at what the
> functionality is trying to achieve and how best it can be done over all.
> Perhaps without even involving sorcery. Without this basic definition and
> (I hesitate to use the words) use cases we may make this into an even
> bigger thing when a simple solution would have been the best one all along.
>
>
True but we also risk a point solution that's not good for anything else.

How about this, let me start with a patch that adds the wizard mods. Maybe
"ast_sorcery_insert_wizard" that looks like your prototype with a parameter
for order.  WIZARD_FIRST, WIZARD_LAST or something.

Then let me propose how I'd use it to create a wizard specifically for
contacts.  Then we can decide if it could be generalized for other use or
left specifically for contacts.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20150430/d125f679/attachment.html>


More information about the asterisk-dev mailing list