[asterisk-dev] Caller/connected line ID updates * I NEED YOUR INPUT!!!
Johansson Olle E
oej at edvina.net
Tue Jul 8 11:06:48 CDT 2008
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.
>> 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.
>
>
> 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
More information about the asterisk-dev
mailing list