[asterisk-dev] Caller/connected line ID updates * I NEED YOUR INPUT!!!
Gareth Palmer
gareth at acsdata.co.nz
Thu Jul 10 06:17:00 CDT 2008
On Wed, 2008-07-09 at 10:50 +0200, Johansson Olle E wrote:
> 8 jul 2008 kl. 15.48 skrev Russell Bryant:
>
> > Johansson Olle E wrote:
> >> I've tried to compile my thoughts and input from various documents as
> >> well as
> >> a review of "gareth"'s work in the bug tracker.
> >> http://svn.digium.com/view/asterisk/team/oej/calleridupdate/README-calleridupdate.txt?view=co
> >
> > From the document ...
> >
> >> Updating caller IDs during a call in Asterisk
> >> -----------------------------------------------------
> >> There are multiple situations where a caller ID for connected line or
> >> caller can happen in Asterisk calls.
> >
> > I would add shared line appearances here, as well. For example, on
> > incoming calls on a shared line, Asterisk has no clue what the
> > connected
> > party information is going to be until one of the phones actually
> > answers. The situation is similar for a list of different call
> > scenarios with that code.
> >
> I'll add that.
There is an example of this in the patch, when you call multiple
channels using Dial() it will send an indication as to who answered.
> >> Current proposals
> >> -----------------
> >> There are a few patches in the bug tracker, one that has been
> >> worked quite a lot on by several members of the community.
> >>
> >> Bug 8824 - http://bugs.digium.com/view.php?id=8824
> >> has been the topic of a lot of testing and discussions,
> >> and a lot of good work. It's based on sending a new
> >> AST_CONTROL message with payload across the bridge.
> >
> > I would agree with this approach. This is surely the most logical way
> > to do it.
> >
> > I wouldn't say "across the bridge", though. There are situations
> > where
> ...and he lost his train of thought. I will rephrase.
> >
> >
> >> The payload contains the updated information to be
> >> sent out.
> >> The patch updates a lot of channel drivers, especially
> >> chan_sip where it massively changes the code for
> >> remote-party-id handling.
> >>
> >> It implements a new structure in channel.h that replicates the
> >> current caller ID structure. I think we could stay with one
> >> format instead of two very similar.
> >>
> >> +/* \brief Structure for all kinds of connected line ID
> >> indentifications.
> >> + * \note All string fields here are malloc'ed, so they need to be
> >> + * freed when the structure is deleted.
> >> + * Also, NULL and "" must be considered equivalent.
> >> + */
> >> +struct ast_connectedline {
> >> + char *lid_dnid; /*!< Malloc'd Dialed Number Identifier */
> >> + char *lid_num; /*!< Malloc'd Line Number */
> >> + char *lid_name; /*!< Malloc'd Line Name */
> >> + char *lid_ani; /*!< Malloc'd ANI */
> >> + char *lid_rdnis; /*!< Malloc'd RDNIS */
> >> + int lid_pres; /*!< Line presentation/screening */
> >> + int lid_ani2; /*!< Line ANI 2 (Info digits) */
> >> + int lid_ton; /*!< Line Type of Number */
> >> + int lid_tns; /*!< Line Transit Network Select */
> >> +};
> >
> > Actually, I don't think either structure is appropriate. If this data
> > was _only_ staying in one instance of Asterisk, then I would agree
> > that
> > using the existing ast_callerid struct would be the best choice.
> The structure is not used as a payload, I think you misunderstand.
> But we need to use your proposed format for the payload.
The payload implementation in the patch is currently 0 or more tuples
of:
<element id (1 byte)><element length (1 byte)><element data (element
length bytes)>
The implementation was somewhat inspired by the way IAX2 adds IE data to
it's packets.
> >
> >
> > However, ast_frames are sent directly over the network via IAX2.
> > Having
> > a payload of pointers becomes useless at that point. You can't even
> > have the pointers be relative offsets instead of addresses. The
> > control
> > frame payload must be the exactly the same regardless of the system
> > (and
> > how big a pointer is on that system).
> >
> > I'm afraid that we will need to define a new struct for this. We
> > could
> > basically copy ast_callerid (which is the same as ast_connectedline),
> > except define all members as uint32_t. For the fields that are
> > actually
> > strings, the value would represent an offset for where to find the
> > data
> > for that field.
> >
> > Simplified demonstration ...
> >
> > const char *name = "my name";
> > const char *num = "1234";
> >
> > struct cid {
> > uint32_t name;
> > uint32_t num
> > uint32_t pres;
> > } *cid;
> >
> > cid = malloc(sizeof(*cid) + strlen(name) + strlen(num) + 2);
> >
> > cid->pres = AST_PRES_NUMBER_NOT_AVAILABLE;
> >
> > cid->name = sizeof(*cid);
> >
> > cid->num = sizeof(*cid) + strlen(name) + 1;
> >
> >> We can use a majority of the code in this bug report for the work
> >> needed. A big thank you to "gareth" for this work, and for being
> >> very responsive to input during the process.
> >
> > And thanks for pulling all of this documentation together.
> NP.
>
> /O
>
> _______________________________________________
> --Bandwidth and Colocation Provided by http://www.api-digital.com--
>
> AstriCon 2008 - September 22 - 25 Phoenix, Arizona
> Register Now: http://www.astricon.net
>
> asterisk-dev mailing list
> To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/asterisk-dev
More information about the asterisk-dev
mailing list