[asterisk-commits] rmudgett: branch rmudgett/misdn_facility r166769 - in /team/rmudgett/misdn_fa...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Dec 24 13:20:35 CST 2008
Author: rmudgett
Date: Wed Dec 24 13:20:34 2008
New Revision: 166769
URL: http://svn.digium.com/view/asterisk?view=rev&rev=166769
Log:
Merged from:
https://origsvn.digium.com/svn/asterisk/be/branches/C.2...
..........
r166767 | rmudgett | 2008-12-24 12:36:33 -0600 (Wed, 24 Dec 2008) | 6 lines
JIRA AST-1666/AST-115
* Fixed handling of received call-deflection facility message.
* Added call-diversion and Explicit Call Transfer COLP support.
* Added handling of the NOTIFY message.
* Added more messages that can handle the facility ie.
Modified:
team/rmudgett/misdn_facility/channels/chan_misdn.c
team/rmudgett/misdn_facility/channels/misdn/ie.c
team/rmudgett/misdn_facility/channels/misdn/isdn_lib.c
team/rmudgett/misdn_facility/channels/misdn/isdn_lib.h
team/rmudgett/misdn_facility/channels/misdn/isdn_msg_parser.c
Modified: team/rmudgett/misdn_facility/channels/chan_misdn.c
URL: http://svn.digium.com/view/asterisk/team/rmudgett/misdn_facility/channels/chan_misdn.c?view=diff&rev=166769&r1=166768&r2=166769
==============================================================================
--- team/rmudgett/misdn_facility/channels/chan_misdn.c (original)
+++ team/rmudgett/misdn_facility/channels/chan_misdn.c Wed Dec 24 13:20:34 2008
@@ -649,7 +649,6 @@
static int pbx_start_chan(struct chan_list *ch);
#define MISDN_ASTERISK_TECH_PVT(ast) ast->tech_pvt
-#define MISDN_ASTERISK_PVT(ast) 1
#include "asterisk/strings.h"
@@ -1369,6 +1368,157 @@
#if defined(AST_MISDN_ENHANCEMENTS)
/*!
* \internal
+ * \brief Convert mISDN redirecting reason to diversion reason.
+ *
+ * \param reason mISDN redirecting reason code.
+ *
+ * \return Supported diversion reason code.
+ */
+static unsigned misdn_to_diversion_reason(enum mISDN_REDIRECTING_REASON reason)
+{
+ unsigned diversion_reason;
+
+ switch (reason) {
+ case mISDN_REDIRECTING_REASON_CALL_FWD:
+ diversion_reason = 1;/* cfu */
+ break;
+ case mISDN_REDIRECTING_REASON_CALL_FWD_BUSY:
+ diversion_reason = 2;/* cfb */
+ break;
+ case mISDN_REDIRECTING_REASON_NO_REPLY:
+ diversion_reason = 3;/* cfnr */
+ break;
+ default:
+ diversion_reason = 0;/* unknown */
+ break;
+ } /* end switch */
+
+ return diversion_reason;
+} /* end misdn_to_diversion_reason() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+/*!
+ * \internal
+ * \brief Convert diversion reason to mISDN redirecting reason
+ *
+ * \param diversion_reason Diversion reason to convert
+ *
+ * \return Supported redirecting reason code.
+ */
+static enum mISDN_REDIRECTING_REASON diversion_reason_to_misdn(unsigned diversion_reason)
+{
+ enum mISDN_REDIRECTING_REASON reason;
+
+ switch (diversion_reason) {
+ case 1:/* cfu */
+ reason = mISDN_REDIRECTING_REASON_CALL_FWD;
+ break;
+ case 2:/* cfb */
+ reason = mISDN_REDIRECTING_REASON_CALL_FWD_BUSY;
+ break;
+ case 3:/* cfnr */
+ reason = mISDN_REDIRECTING_REASON_NO_REPLY;
+ break;
+ default:
+ reason = mISDN_REDIRECTING_REASON_UNKNOWN;
+ break;
+ } /* end switch */
+
+ return reason;
+} /* end diversion_reason_to_misdn() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+/*!
+ * \internal
+ * \brief Convert the mISDN presentation to PresentedNumberUnscreened type
+ *
+ * \param presentation mISDN presentation to convert
+ * \param number_present TRUE if the number is present
+ *
+ * \return PresentedNumberUnscreened type
+ */
+static unsigned misdn_to_PresentedNumberUnscreened_type(int presentation, int number_present)
+{
+ unsigned type;
+
+ switch (presentation) {
+ case 0:/* allowed */
+ if (number_present) {
+ type = 0;/* presentationAllowedNumber */
+ } else {
+ type = 2;/* numberNotAvailableDueToInterworking */
+ }
+ break;
+ case 1:/* restricted */
+ if (number_present) {
+ type = 3;/* presentationRestrictedNumber */
+ } else {
+ type = 1;/* presentationRestricted */
+ }
+ break;
+ default:
+ type = 2;/* numberNotAvailableDueToInterworking */
+ break;
+ } /* end switch */
+
+ return type;
+} /* end misdn_to_PresentedNumberUnscreened_type() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+/*!
+ * \internal
+ * \brief Convert the PresentedNumberUnscreened type to mISDN presentation
+ *
+ * \param type PresentedNumberUnscreened type
+ *
+ * \return mISDN presentation
+ */
+static int PresentedNumberUnscreened_to_misdn_pres(unsigned type)
+{
+ int presentation;
+
+ switch (type) {
+ default:
+ case 0:/* presentationAllowedNumber */
+ presentation = 0;/* allowed */
+ break;
+
+ case 1:/* presentationRestricted */
+ case 3:/* presentationRestrictedNumber */
+ presentation = 1;/* restricted */
+ break;
+
+ case 2:/* numberNotAvailableDueToInterworking */
+ presentation = 2;/* unavailable */
+ break;
+ } /* end switch */
+
+ return presentation;
+} /* end PresentedNumberUnscreened_to_misdn_pres() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+/*!
+ * \internal
* \brief Convert the mISDN numbering plan to PartyNumber numbering plan
*
* \param number_plan mISDN numbering plan
@@ -1408,6 +1558,49 @@
return party_plan;
} /* end misdn_to_PartyNumber_plan() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+/*!
+ * \internal
+ * \brief Convert PartyNumber numbering plan to mISDN numbering plan
+ *
+ * \param party_plan PartyNumber numbering plan
+ *
+ * \return mISDN numbering plan
+ */
+static enum mISDN_NUMBER_PLAN PartyNumber_to_misdn_plan(unsigned party_plan)
+{
+ enum mISDN_NUMBER_PLAN number_plan;
+
+ switch (party_plan) {
+ default:
+ case 0:/* unknown */
+ number_plan = NUMPLAN_UNKNOWN;
+ break;
+ case 1:/* public */
+ number_plan = NUMPLAN_ISDN;
+ break;
+ case 3:/* data */
+ number_plan = NUMPLAN_DATA;
+ break;
+ case 4:/* telex */
+ number_plan = NUMPLAN_TELEX;
+ break;
+ case 8:/* nationalStandard */
+ number_plan = NUMPLAN_NATIONAL;
+ break;
+ case 5:/* private */
+ number_plan = NUMPLAN_PRIVATE;
+ break;
+ } /* end switch */
+
+ return number_plan;
+} /* end PartyNumber_to_misdn_plan() */
#endif /* defined(AST_MISDN_ENHANCEMENTS) */
@@ -1465,6 +1658,54 @@
#if defined(AST_MISDN_ENHANCEMENTS)
/*!
* \internal
+ * \brief Convert the PartyNumber public type-of-number to mISDN type-of-number
+ *
+ * \param party_ton PartyNumber public type-of-number
+ *
+ * \return mISDN type-of-number
+ */
+static enum mISDN_NUMBER_TYPE PartyNumber_to_misdn_ton_public(unsigned party_ton)
+{
+ enum mISDN_NUMBER_TYPE ton;
+
+ switch (party_ton) {
+ default:
+ case 0:/* unknown */
+ ton = NUMTYPE_UNKNOWN;
+ break;
+
+ case 1:/* internationalNumber */
+ ton = NUMTYPE_INTERNATIONAL;
+ break;
+
+ case 2:/* nationalNumber */
+ ton = NUMTYPE_NATIONAL;
+ break;
+
+ case 3:/* networkSpecificNumber */
+ ton = NUMTYPE_NETWORK_SPECIFIC;
+ break;
+
+ case 4:/* subscriberNumber */
+ ton = NUMTYPE_SUBSCRIBER;
+ break;
+
+ case 6:/* abbreviatedNumber */
+ ton = NUMTYPE_ABBREVIATED;
+ break;
+ } /* end switch */
+
+ return ton;
+} /* end PartyNumber_to_misdn_ton_public() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+/*!
+ * \internal
* \brief Convert mISDN type-of-number to PartyNumber private type-of-number
*
* \param ton mISDN type-of-number
@@ -1504,6 +1745,54 @@
return party_ton;
} /* end misdn_to_PartyNumber_ton_private() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+/*!
+ * \internal
+ * \brief Convert the PartyNumber private type-of-number to mISDN type-of-number
+ *
+ * \param party_ton PartyNumber private type-of-number
+ *
+ * \return mISDN type-of-number
+ */
+static enum mISDN_NUMBER_TYPE PartyNumber_to_misdn_ton_private(unsigned party_ton)
+{
+ enum mISDN_NUMBER_TYPE ton;
+
+ switch (party_ton) {
+ default:
+ case 0:/* unknown */
+ ton = NUMTYPE_UNKNOWN;
+ break;
+
+ case 1:/* level2RegionalNumber */
+ ton = NUMTYPE_INTERNATIONAL;
+ break;
+
+ case 2:/* level1RegionalNumber */
+ ton = NUMTYPE_NATIONAL;
+ break;
+
+ case 3:/* pTNSpecificNumber */
+ ton = NUMTYPE_NETWORK_SPECIFIC;
+ break;
+
+ case 4:/* localNumber */
+ ton = NUMTYPE_SUBSCRIBER;
+ break;
+
+ case 6:/* abbreviatedNumber */
+ ton = NUMTYPE_ABBREVIATED;
+ break;
+ } /* end switch */
+
+ return ton;
+} /* end PartyNumber_to_misdn_ton_private() */
#endif /* defined(AST_MISDN_ENHANCEMENTS) */
@@ -2164,6 +2453,45 @@
#if defined(AST_MISDN_ENHANCEMENTS)
/*!
* \internal
+ * \brief Extract the information from PartyNumber
+ *
+ * \param id Where to put extracted PartyNumber information
+ * \param party PartyNumber information to extract
+ *
+ * \return Nothing
+ */
+static void misdn_PartyNumber_extract(struct misdn_party_id *id, const struct FacPartyNumber *party)
+{
+ if (party->LengthOfNumber) {
+ ast_copy_string(id->number, (char *) party->Number, sizeof(id->number));
+ id->number_plan = PartyNumber_to_misdn_plan(party->Type);
+ switch (party->Type) {
+ case 1:/* public */
+ id->number_type = PartyNumber_to_misdn_ton_public(party->TypeOfNumber);
+ break;
+ case 5:/* private */
+ id->number_type = PartyNumber_to_misdn_ton_private(party->TypeOfNumber);
+ break;
+ default:
+ id->number_type = NUMTYPE_UNKNOWN;
+ break;
+ } /* end switch */
+ } else {
+ /* Number not present */
+ id->number_type = NUMTYPE_UNKNOWN;
+ id->number_plan = NUMPLAN_ISDN;
+ id->number[0] = 0;
+ }
+} /* end misdn_PartyNumber_extract() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+/*!
+ * \internal
* \brief Fill in facility Address information
*
* \param Address Address structure to fill in.
@@ -2178,6 +2506,49 @@
/* Subaddresses are not supported yet */
Address->Subaddress.Length = 0;
} /* end misdn_Address_fill() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+/*!
+ * \internal
+ * \brief Fill in facility PresentedNumberUnscreened information
+ *
+ * \param presented PresentedNumberUnscreened structure to fill in.
+ * \param id Information to put in PresentedNumberUnscreened structure.
+ *
+ * \return Nothing
+ */
+static void misdn_PresentedNumberUnscreened_fill(struct FacPresentedNumberUnscreened *presented, const struct misdn_party_id *id)
+{
+ presented->Type = misdn_to_PresentedNumberUnscreened_type(id->presentation, id->number[0] ? 1 : 0);
+ misdn_PartyNumber_fill(&presented->Unscreened, id);
+} /* end misdn_PresentedNumberUnscreened_fill() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+/*!
+ * \internal
+ * \brief Extract the information from PartyNumber
+ *
+ * \param id Where to put extracted PresentedNumberUnscreened information
+ * \param presented PresentedNumberUnscreened information to extract
+ *
+ * \return Nothing
+ */
+static void misdn_PresentedNumberUnscreened_extract(struct misdn_party_id *id, const struct FacPresentedNumberUnscreened *presented)
+{
+ id->presentation = PresentedNumberUnscreened_to_misdn_pres(presented->Type);
+ id->screening = 0;/* unscreened */
+ misdn_PartyNumber_extract(id, &presented->Unscreened);
+} /* end misdn_PresentedNumberUnscreened_extract() */
#endif /* defined(AST_MISDN_ENHANCEMENTS) */
@@ -2284,6 +2655,86 @@
/* ******************************************************************* */
#if defined(AST_MISDN_ENHANCEMENTS)
+static void print_facility_PresentedNumberUnscreened(unsigned Level, const struct FacPresentedNumberUnscreened *Presented, const struct misdn_bchannel *bc)
+{
+ const char *Spacing;
+
+ Spacing = &Level_Spacing[sizeof(Level_Spacing) - 1 - Level];
+ chan_misdn_log(1, bc->port, " -->%s Unscreened Type:%d\n", Spacing, Presented->Type);
+ switch (Presented->Type) {
+ case 0: /* presentationAllowedNumber */
+ chan_misdn_log(1, bc->port, " -->%s Allowed:\n", Spacing);
+ print_facility_PartyNumber(Level + 2, &Presented->Unscreened, bc);
+ break;
+ case 1: /* presentationRestricted */
+ chan_misdn_log(1, bc->port, " -->%s Restricted\n", Spacing);
+ break;
+ case 2: /* numberNotAvailableDueToInterworking */
+ chan_misdn_log(1, bc->port, " -->%s Not Available\n", Spacing);
+ break;
+ case 3: /* presentationRestrictedNumber */
+ chan_misdn_log(1, bc->port, " -->%s Restricted:\n", Spacing);
+ print_facility_PartyNumber(Level + 2, &Presented->Unscreened, bc);
+ break;
+ default:
+ break;
+ } /* end switch */
+} /* end print_facility_PresentedNumberUnscreened() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+static void print_facility_AddressScreened(unsigned Level, const struct FacAddressScreened *Address, const struct misdn_bchannel *bc)
+{
+ const char *Spacing;
+
+ Spacing = &Level_Spacing[sizeof(Level_Spacing) - 1 - Level];
+ chan_misdn_log(1, bc->port, " -->%s ScreeningIndicator:%d\n", Spacing, Address->ScreeningIndicator);
+ print_facility_PartyNumber(Level, &Address->Party, bc);
+ print_facility_Subaddress(Level, &Address->Subaddress, bc);
+} /* end print_facility_AddressScreened() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+static void print_facility_PresentedAddressScreened(unsigned Level, const struct FacPresentedAddressScreened *Presented, const struct misdn_bchannel *bc)
+{
+ const char *Spacing;
+
+ Spacing = &Level_Spacing[sizeof(Level_Spacing) - 1 - Level];
+ chan_misdn_log(1, bc->port, " -->%s Screened Type:%d\n", Spacing, Presented->Type);
+ switch (Presented->Type) {
+ case 0: /* presentationAllowedAddress */
+ chan_misdn_log(1, bc->port, " -->%s Allowed:\n", Spacing);
+ print_facility_AddressScreened(Level + 2, &Presented->Address, bc);
+ break;
+ case 1: /* presentationRestricted */
+ chan_misdn_log(1, bc->port, " -->%s Restricted\n", Spacing);
+ break;
+ case 2: /* numberNotAvailableDueToInterworking */
+ chan_misdn_log(1, bc->port, " -->%s Not Available\n", Spacing);
+ break;
+ case 3: /* presentationRestrictedAddress */
+ chan_misdn_log(1, bc->port, " -->%s Restricted:\n", Spacing);
+ print_facility_AddressScreened(Level + 2, &Presented->Address, bc);
+ break;
+ default:
+ break;
+ } /* end switch */
+} /* end print_facility_PresentedAddressScreened() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
static void print_facility_Q931_Bc_Hlc_Llc(unsigned Level, const struct Q931_Bc_Hlc_Llc *Q931ie, const struct misdn_bchannel *bc)
{
const char *Spacing;
@@ -2300,6 +2751,32 @@
chan_misdn_log(1, bc->port, " -->%s Llc Len:%d\n", Spacing, Q931ie->Llc.Length);
}
} /* end print_facility_Q931_Bc_Hlc_Llc() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+static void print_facility_Q931_Bc_Hlc_Llc_Uu(unsigned Level, const struct Q931_Bc_Hlc_Llc_Uu *Q931ie, const struct misdn_bchannel *bc)
+{
+ const char *Spacing;
+
+ Spacing = &Level_Spacing[sizeof(Level_Spacing) - 1 - Level];
+ chan_misdn_log(1, bc->port, " -->%s Q931ie:\n", Spacing);
+ if (Q931ie->Bc.Length) {
+ chan_misdn_log(1, bc->port, " -->%s Bc Len:%d\n", Spacing, Q931ie->Bc.Length);
+ }
+ if (Q931ie->Hlc.Length) {
+ chan_misdn_log(1, bc->port, " -->%s Hlc Len:%d\n", Spacing, Q931ie->Hlc.Length);
+ }
+ if (Q931ie->Llc.Length) {
+ chan_misdn_log(1, bc->port, " -->%s Llc Len:%d\n", Spacing, Q931ie->Llc.Length);
+ }
+ if (Q931ie->UserInfo.Length) {
+ chan_misdn_log(1, bc->port, " -->%s UserInfo Len:%d\n", Spacing, Q931ie->UserInfo.Length);
+ }
+} /* end print_facility_Q931_Bc_Hlc_Llc_Uu() */
#endif /* defined(AST_MISDN_ENHANCEMENTS) */
@@ -2325,6 +2802,47 @@
#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+static void print_facility_ServedUserNr(unsigned Level, const struct FacPartyNumber *Party, const struct misdn_bchannel *bc)
+{
+ const char *Spacing;
+
+ Spacing = &Level_Spacing[sizeof(Level_Spacing) - 1 - Level];
+ if (Party->LengthOfNumber) {
+ print_facility_PartyNumber(Level, Party, bc);
+ } else {
+ chan_misdn_log(1, bc->port, " -->%s All Numbers\n", Spacing);
+ }
+} /* end print_facility_ServedUserNr() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
+/* ******************************************************************* */
+#if defined(AST_MISDN_ENHANCEMENTS)
+static void print_facility_IntResult(unsigned Level, const struct FacForwardingRecord *ForwardingRecord, const struct misdn_bchannel *bc)
+{
+ const char *Spacing;
+
+ Spacing = &Level_Spacing[sizeof(Level_Spacing) - 1 - Level];
+ chan_misdn_log(1, bc->port, " -->%s Procedure:%d BasicService:%d\n",
+ Spacing,
+ ForwardingRecord->Procedure,
+ ForwardingRecord->BasicService);
+ chan_misdn_log(1, bc->port, " -->%s ForwardedTo:\n", Spacing);
+ print_facility_Address(Level + 1, &ForwardingRecord->ForwardedTo, bc);
+ chan_misdn_log(1, bc->port, " -->%s ServedUserNr:\n", Spacing);
+ print_facility_ServedUserNr(Level + 1, &ForwardingRecord->ServedUser, bc);
+} /* end print_facility_IntResult() */
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+
+
+
+
static void print_facility(const struct FacParm *fac, const const struct misdn_bchannel *bc)
{
#if defined(AST_MISDN_ENHANCEMENTS)
@@ -2332,10 +2850,219 @@
#endif /* defined(AST_MISDN_ENHANCEMENTS) */
switch (fac->Function) {
+#if defined(AST_MISDN_ENHANCEMENTS)
+ case Fac_ActivationDiversion:
+ chan_misdn_log(1, bc->port, " --> ActivationDiversion: InvokeID:%d\n",
+ fac->u.ActivationDiversion.InvokeID);
+ switch (fac->u.ActivationDiversion.ComponentType) {
+ case FacComponent_Invoke:
+ chan_misdn_log(1, bc->port, " --> Invoke: Procedure:%d BasicService:%d\n",
+ fac->u.ActivationDiversion.Component.Invoke.Procedure,
+ fac->u.ActivationDiversion.Component.Invoke.BasicService);
+ chan_misdn_log(1, bc->port, " --> ForwardedTo:\n");
+ print_facility_Address(3, &fac->u.ActivationDiversion.Component.Invoke.ForwardedTo, bc);
+ chan_misdn_log(1, bc->port, " --> ServedUserNr:\n");
+ print_facility_ServedUserNr(3, &fac->u.ActivationDiversion.Component.Invoke.ServedUser, bc);
+ break;
+ case FacComponent_Result:
+ chan_misdn_log(1, bc->port, " --> Result\n");
+ break;
+ default:
+ break;
+ } /* end switch */
+ break;
+ case Fac_DeactivationDiversion:
+ chan_misdn_log(1, bc->port, " --> DeactivationDiversion: InvokeID:%d\n",
+ fac->u.DeactivationDiversion.InvokeID);
+ switch (fac->u.DeactivationDiversion.ComponentType) {
+ case FacComponent_Invoke:
+ chan_misdn_log(1, bc->port, " --> Invoke: Procedure:%d BasicService:%d\n",
+ fac->u.DeactivationDiversion.Component.Invoke.Procedure,
+ fac->u.DeactivationDiversion.Component.Invoke.BasicService);
+ chan_misdn_log(1, bc->port, " --> ServedUserNr:\n");
+ print_facility_ServedUserNr(3, &fac->u.DeactivationDiversion.Component.Invoke.ServedUser, bc);
+ break;
+ case FacComponent_Result:
+ chan_misdn_log(1, bc->port, " --> Result\n");
+ break;
+ default:
+ break;
+ } /* end switch */
+ break;
+ case Fac_ActivationStatusNotificationDiv:
+ chan_misdn_log(1, bc->port, " --> ActivationStatusNotificationDiv: InvokeID:%d Procedure:%d BasicService:%d\n",
+ fac->u.ActivationStatusNotificationDiv.InvokeID,
+ fac->u.ActivationStatusNotificationDiv.Procedure,
+ fac->u.ActivationStatusNotificationDiv.BasicService);
+ chan_misdn_log(1, bc->port, " --> ForwardedTo:\n");
+ print_facility_Address(2, &fac->u.ActivationStatusNotificationDiv.ForwardedTo, bc);
+ chan_misdn_log(1, bc->port, " --> ServedUserNr:\n");
+ print_facility_ServedUserNr(2, &fac->u.ActivationStatusNotificationDiv.ServedUser, bc);
+ break;
+ case Fac_DeactivationStatusNotificationDiv:
+ chan_misdn_log(1, bc->port, " --> DeactivationStatusNotificationDiv: InvokeID:%d Procedure:%d BasicService:%d\n",
+ fac->u.DeactivationStatusNotificationDiv.InvokeID,
+ fac->u.DeactivationStatusNotificationDiv.Procedure,
+ fac->u.DeactivationStatusNotificationDiv.BasicService);
+ chan_misdn_log(1, bc->port, " --> ServedUserNr:\n");
+ print_facility_ServedUserNr(2, &fac->u.DeactivationStatusNotificationDiv.ServedUser, bc);
+ break;
+ case Fac_InterrogationDiversion:
+ chan_misdn_log(1, bc->port, " --> InterrogationDiversion: InvokeID:%d\n",
+ fac->u.InterrogationDiversion.InvokeID);
+ switch (fac->u.InterrogationDiversion.ComponentType) {
+ case FacComponent_Invoke:
+ chan_misdn_log(1, bc->port, " --> Invoke: Procedure:%d BasicService:%d\n",
+ fac->u.InterrogationDiversion.Component.Invoke.Procedure,
+ fac->u.InterrogationDiversion.Component.Invoke.BasicService);
+ chan_misdn_log(1, bc->port, " --> ServedUserNr:\n");
+ print_facility_ServedUserNr(3, &fac->u.InterrogationDiversion.Component.Invoke.ServedUser, bc);
+ break;
+ case FacComponent_Result:
+ chan_misdn_log(1, bc->port, " --> Result:\n");
+ if (fac->u.InterrogationDiversion.Component.Result.NumRecords) {
+ for (Index = 0; Index < fac->u.InterrogationDiversion.Component.Result.NumRecords; ++Index) {
+ chan_misdn_log(1, bc->port, " --> IntResult[%d]:\n", Index);
+ print_facility_IntResult(3, &fac->u.InterrogationDiversion.Component.Result.List[Index], bc);
+ } /* end for */
+ }
+ break;
+ default:
+ break;
+ } /* end switch */
+ break;
+ case Fac_DiversionInformation:
+ chan_misdn_log(1, bc->port, " --> DiversionInformation: InvokeID:%d Reason:%d BasicService:%d\n",
+ fac->u.DiversionInformation.InvokeID,
+ fac->u.DiversionInformation.DiversionReason,
+ fac->u.DiversionInformation.BasicService);
+ if (fac->u.DiversionInformation.ServedUserSubaddress.Length) {
+ chan_misdn_log(1, bc->port, " --> ServedUserSubaddress:\n");
+ print_facility_Subaddress(2, &fac->u.DiversionInformation.ServedUserSubaddress, bc);
+ }
+ if (fac->u.DiversionInformation.CallingAddressPresent) {
+ chan_misdn_log(1, bc->port, " --> CallingAddress:\n");
+ print_facility_PresentedAddressScreened(2, &fac->u.DiversionInformation.CallingAddress, bc);
+ }
+ if (fac->u.DiversionInformation.OriginalCalledPresent) {
+ chan_misdn_log(1, bc->port, " --> OriginalCalledNr:\n");
+ print_facility_PresentedNumberUnscreened(2, &fac->u.DiversionInformation.OriginalCalled, bc);
+ }
+ if (fac->u.DiversionInformation.LastDivertingPresent) {
+ chan_misdn_log(1, bc->port, " --> LastDivertingNr:\n");
+ print_facility_PresentedNumberUnscreened(2, &fac->u.DiversionInformation.LastDiverting, bc);
+ }
+ if (fac->u.DiversionInformation.LastDivertingReasonPresent) {
+ chan_misdn_log(1, bc->port, " --> LastDivertingReason:%d\n", fac->u.DiversionInformation.LastDivertingReason);
+ }
+ if (fac->u.DiversionInformation.UserInfo.Length) {
+ chan_misdn_log(1, bc->port, " --> UserInfo Length:%d\n", fac->u.DiversionInformation.UserInfo.Length);
+ }
+ break;
+ case Fac_CallDeflection:
+ chan_misdn_log(1, bc->port, " --> CallDeflection: InvokeID:%d\n",
+ fac->u.CallDeflection.InvokeID);
+ switch (fac->u.CallDeflection.ComponentType) {
+ case FacComponent_Invoke:
+ chan_misdn_log(1, bc->port, " --> Invoke:\n");
+ if (fac->u.CallDeflection.Component.Invoke.PresentationAllowedToDivertedToUserPresent) {
+ chan_misdn_log(1, bc->port, " --> PresentationAllowed:%d\n",
+ fac->u.CallDeflection.Component.Invoke.PresentationAllowedToDivertedToUser);
+ }
+ chan_misdn_log(1, bc->port, " --> DeflectionAddress:\n");
+ print_facility_Address(3, &fac->u.CallDeflection.Component.Invoke.Deflection, bc);
+ break;
+ case FacComponent_Result:
+ chan_misdn_log(1, bc->port, " --> Result\n");
+ break;
+ default:
+ break;
+ } /* end switch */
+ break;
+ case Fac_CallRerouteing:
+ chan_misdn_log(1, bc->port, " --> CallRerouteing: InvokeID:%d\n",
+ fac->u.CallRerouteing.InvokeID);
+ switch (fac->u.CallRerouteing.ComponentType) {
+ case FacComponent_Invoke:
+ chan_misdn_log(1, bc->port, " --> Invoke: Reason:%d Counter:%d\n",
+ fac->u.CallRerouteing.Component.Invoke.ReroutingReason,
+ fac->u.CallRerouteing.Component.Invoke.ReroutingCounter);
+ chan_misdn_log(1, bc->port, " --> CalledAddress:\n");
+ print_facility_Address(3, &fac->u.CallRerouteing.Component.Invoke.CalledAddress, bc);
+ print_facility_Q931_Bc_Hlc_Llc_Uu(2, &fac->u.CallRerouteing.Component.Invoke.Q931ie, bc);
+ chan_misdn_log(1, bc->port, " --> LastReroutingNr:\n");
+ print_facility_PresentedNumberUnscreened(3, &fac->u.CallRerouteing.Component.Invoke.LastRerouting, bc);
+ chan_misdn_log(1, bc->port, " --> SubscriptionOption:%d\n",
+ fac->u.CallRerouteing.Component.Invoke.SubscriptionOption);
+ if (fac->u.CallRerouteing.Component.Invoke.CallingPartySubaddress.Length) {
+ chan_misdn_log(1, bc->port, " --> CallingParty:\n");
+ print_facility_Subaddress(3, &fac->u.CallRerouteing.Component.Invoke.CallingPartySubaddress, bc);
+ }
+ break;
+ case FacComponent_Result:
+ chan_misdn_log(1, bc->port, " --> Result\n");
+ break;
+ default:
+ break;
+ } /* end switch */
+ break;
+ case Fac_InterrogateServedUserNumbers:
+ chan_misdn_log(1, bc->port, " --> InterrogateServedUserNumbers: InvokeID:%d\n",
+ fac->u.InterrogateServedUserNumbers.InvokeID);
+ switch (fac->u.InterrogateServedUserNumbers.ComponentType) {
+ case FacComponent_Invoke:
+ chan_misdn_log(1, bc->port, " --> Invoke\n");
+ break;
+ case FacComponent_Result:
+ chan_misdn_log(1, bc->port, " --> Result:\n");
+ if (fac->u.InterrogateServedUserNumbers.Component.Result.NumRecords) {
+ for (Index = 0; Index < fac->u.InterrogateServedUserNumbers.Component.Result.NumRecords; ++Index) {
+ chan_misdn_log(1, bc->port, " --> ServedUserNr[%d]:\n", Index);
+ print_facility_PartyNumber(3, &fac->u.InterrogateServedUserNumbers.Component.Result.List[Index], bc);
+ } /* end for */
+ }
+ break;
+ default:
+ break;
+ } /* end switch */
+ break;
+ case Fac_DivertingLegInformation1:
+ chan_misdn_log(1, bc->port, " --> DivertingLegInformation1: InvokeID:%d Reason:%d SubscriptionOption:%d\n",
+ fac->u.DivertingLegInformation1.InvokeID,
+ fac->u.DivertingLegInformation1.DiversionReason,
+ fac->u.DivertingLegInformation1.SubscriptionOption);
+ if (fac->u.DivertingLegInformation1.DivertedToPresent) {
+ chan_misdn_log(1, bc->port, " --> DivertedToNr:\n");
+ print_facility_PresentedNumberUnscreened(2, &fac->u.DivertingLegInformation1.DivertedTo, bc);
+ }
+ break;
+ case Fac_DivertingLegInformation2:
+ chan_misdn_log(1, bc->port, " --> DivertingLegInformation2: InvokeID:%d Reason:%d Count:%d\n",
+ fac->u.DivertingLegInformation2.InvokeID,
+ fac->u.DivertingLegInformation2.DiversionReason,
+ fac->u.DivertingLegInformation2.DiversionCounter);
+ if (fac->u.DivertingLegInformation2.DivertingPresent) {
+ chan_misdn_log(1, bc->port, " --> DivertingNr:\n");
+ print_facility_PresentedNumberUnscreened(2, &fac->u.DivertingLegInformation2.Diverting, bc);
+ }
+ if (fac->u.DivertingLegInformation2.OriginalCalledPresent) {
+ chan_misdn_log(1, bc->port, " --> OriginalCalledNr:\n");
+ print_facility_PresentedNumberUnscreened(2, &fac->u.DivertingLegInformation2.OriginalCalled, bc);
+ }
+ break;
+ case Fac_DivertingLegInformation3:
+ chan_misdn_log(1, bc->port, " --> DivertingLegInformation3: InvokeID:%d PresentationAllowed:%d\n",
+ fac->u.DivertingLegInformation3.InvokeID,
+ fac->u.DivertingLegInformation3.PresentationAllowedIndicator);
+ break;
+
+#else /* !defined(AST_MISDN_ENHANCEMENTS) */
+
case Fac_CD:
chan_misdn_log(1,bc->port," --> calldeflect to: %s, presentable: %s\n", fac->u.CDeflection.DeflectedToNumber,
fac->u.CDeflection.PresentationAllowed ? "yes" : "no");
break;
+#endif /* !defined(AST_MISDN_ENHANCEMENTS) */
case Fac_AOCDCurrency:
if (fac->u.AOCDcur.chargeNotAvailable)
chan_misdn_log(1,bc->port," --> AOCD currency: charge not available\n");
@@ -2379,6 +3106,64 @@
chan_misdn_log(1, bc->port, " --> REJECT: Code:0x%02x\n",
fac->u.REJECT.Code);
}
+ break;
+ case Fac_EctExecute:
+ chan_misdn_log(1, bc->port, " --> EctExecute: InvokeID:%d\n",
+ fac->u.EctExecute.InvokeID);
+ break;
+ case Fac_ExplicitEctExecute:
+ chan_misdn_log(1, bc->port, " --> ExplicitEctExecute: InvokeID:%d LinkID:%d\n",
+ fac->u.ExplicitEctExecute.InvokeID,
+ fac->u.ExplicitEctExecute.LinkID);
+ break;
+ case Fac_RequestSubaddress:
+ chan_misdn_log(1, bc->port, " --> RequestSubaddress: InvokeID:%d\n",
+ fac->u.RequestSubaddress.InvokeID);
+ break;
+ case Fac_SubaddressTransfer:
+ chan_misdn_log(1, bc->port, " --> SubaddressTransfer: InvokeID:%d\n",
+ fac->u.SubaddressTransfer.InvokeID);
+ print_facility_Subaddress(1, &fac->u.SubaddressTransfer.Subaddress, bc);
+ break;
+ case Fac_EctLinkIdRequest:
+ chan_misdn_log(1, bc->port, " --> EctLinkIdRequest: InvokeID:%d\n",
+ fac->u.EctLinkIdRequest.InvokeID);
+ switch (fac->u.EctLinkIdRequest.ComponentType) {
+ case FacComponent_Invoke:
+ chan_misdn_log(1, bc->port, " --> Invoke\n");
+ break;
+ case FacComponent_Result:
+ chan_misdn_log(1, bc->port, " --> Result: LinkID:%d\n",
+ fac->u.EctLinkIdRequest.Component.Result.LinkID);
+ break;
+ default:
+ break;
+ } /* end switch */
+ break;
+ case Fac_EctInform:
+ chan_misdn_log(1, bc->port, " --> EctInform: InvokeID:%d Status:%d\n",
+ fac->u.EctInform.InvokeID,
+ fac->u.EctInform.Status);
+ if (fac->u.EctInform.RedirectionPresent) {
+ chan_misdn_log(1, bc->port, " --> Redirection Number\n");
+ print_facility_PresentedNumberUnscreened(2, &fac->u.EctInform.Redirection, bc);
+ }
+ break;
+ case Fac_EctLoopTest:
+ chan_misdn_log(1, bc->port, " --> EctLoopTest: InvokeID:%d\n",
+ fac->u.EctLoopTest.InvokeID);
+ switch (fac->u.EctLoopTest.ComponentType) {
+ case FacComponent_Invoke:
+ chan_misdn_log(1, bc->port, " --> Invoke: CallTransferID:%d\n",
+ fac->u.EctLoopTest.Component.Invoke.CallTransferID);
+ break;
+ case FacComponent_Result:
+ chan_misdn_log(1, bc->port, " --> Result: LoopResult:%d\n",
+ fac->u.EctLoopTest.Component.Result.LoopResult);
+ break;
+ default:
+ break;
+ } /* end switch */
break;
case Fac_StatusRequest:
chan_misdn_log(1, bc->port, " --> StatusRequest: InvokeID:%d\n",
@@ -3382,7 +4167,8 @@
ast_cli(fd,
"* Pid:%d Port:%d Ch:%d Mode:%s Orig:%s dialed:%s\n"
" --> caller:\"%s\" <%s>\n"
- " --> redirecting:\"%s\" <%s>\n"
+ " --> redirecting-from:\"%s\" <%s>\n"
+ " --> redirecting-to:\"%s\" <%s>\n"
" --> context:%s state:%s\n",
bc->pid,
bc->port,
@@ -3394,6 +4180,8 @@
(ast && ast->cid.cid_num) ? ast->cid.cid_num : "",
bc->redirecting.from.name,
bc->redirecting.from.number,
+ bc->redirecting.to.name,
+ bc->redirecting.to.number,
ast ? ast->context : "",
misdn_get_ch_state(help));
if (misdn_debug[bc->port] > 0) {
@@ -4026,6 +4814,348 @@
[50].u.CCNR_T_Request.InvokeID = 53,
[50].u.CCNR_T_Request.ComponentType = FacComponent_Result,
[50].u.CCNR_T_Request.Component.Result.RetentionSupported = 1,
+
+ [51].Function = Fac_EctExecute,
+ [51].u.EctExecute.InvokeID = 54,
+
+ [52].Function = Fac_ExplicitEctExecute,
+ [52].u.ExplicitEctExecute.InvokeID = 55,
+ [52].u.ExplicitEctExecute.LinkID = 23,
+
+ [53].Function = Fac_RequestSubaddress,
+ [53].u.RequestSubaddress.InvokeID = 56,
+
+ [54].Function = Fac_SubaddressTransfer,
+ [54].u.SubaddressTransfer.InvokeID = 57,
+ [54].u.SubaddressTransfer.Subaddress.Type = 1,
+ [54].u.SubaddressTransfer.Subaddress.Length = 4,
+ [54].u.SubaddressTransfer.Subaddress.u.Nsap = "6492",
+
+ [55].Function = Fac_EctLinkIdRequest,
+ [55].u.EctLinkIdRequest.InvokeID = 58,
+ [55].u.EctLinkIdRequest.ComponentType = FacComponent_Invoke,
+
+ [56].Function = Fac_EctLinkIdRequest,
+ [56].u.EctLinkIdRequest.InvokeID = 59,
+ [56].u.EctLinkIdRequest.ComponentType = FacComponent_Result,
+ [56].u.EctLinkIdRequest.Component.Result.LinkID = 76,
+
+ [57].Function = Fac_EctInform,
+ [57].u.EctInform.InvokeID = 60,
+ [57].u.EctInform.Status = 1,
+ [57].u.EctInform.RedirectionPresent = 1,
+ [57].u.EctInform.Redirection.Type = 0,
+ [57].u.EctInform.Redirection.Unscreened.Type = 8,
+ [57].u.EctInform.Redirection.Unscreened.LengthOfNumber = 4,
+ [57].u.EctInform.Redirection.Unscreened.Number = "6229",
+
+ [58].Function = Fac_EctInform,
+ [58].u.EctInform.InvokeID = 61,
+ [58].u.EctInform.Status = 1,
+ [58].u.EctInform.RedirectionPresent = 1,
+ [58].u.EctInform.Redirection.Type = 1,
+
+ [59].Function = Fac_EctInform,
+ [59].u.EctInform.InvokeID = 62,
+ [59].u.EctInform.Status = 1,
+ [59].u.EctInform.RedirectionPresent = 1,
+ [59].u.EctInform.Redirection.Type = 2,
+
+ [60].Function = Fac_EctInform,
+ [60].u.EctInform.InvokeID = 63,
+ [60].u.EctInform.Status = 1,
+ [60].u.EctInform.RedirectionPresent = 1,
+ [60].u.EctInform.Redirection.Type = 3,
+ [60].u.EctInform.Redirection.Unscreened.Type = 8,
+ [60].u.EctInform.Redirection.Unscreened.LengthOfNumber = 4,
+ [60].u.EctInform.Redirection.Unscreened.Number = "3340",
+
+ [61].Function = Fac_EctInform,
+ [61].u.EctInform.InvokeID = 64,
+ [61].u.EctInform.Status = 1,
+ [61].u.EctInform.RedirectionPresent = 0,
+
+ [62].Function = Fac_EctLoopTest,
+ [62].u.EctLoopTest.InvokeID = 65,
+ [62].u.EctLoopTest.ComponentType = FacComponent_Invoke,
+ [62].u.EctLoopTest.Component.Invoke.CallTransferID = 7,
+
+ [63].Function = Fac_EctLoopTest,
+ [63].u.EctLoopTest.InvokeID = 66,
+ [63].u.EctLoopTest.ComponentType = FacComponent_Result,
+ [63].u.EctLoopTest.Component.Result.LoopResult = 2,
+
+ [64].Function = Fac_ActivationDiversion,
+ [64].u.ActivationDiversion.InvokeID = 67,
+ [64].u.ActivationDiversion.ComponentType = FacComponent_Invoke,
+ [64].u.ActivationDiversion.Component.Invoke.Procedure = 2,
+ [64].u.ActivationDiversion.Component.Invoke.BasicService = 3,
+ [64].u.ActivationDiversion.Component.Invoke.ForwardedTo.Party.Type = 4,
+ [64].u.ActivationDiversion.Component.Invoke.ForwardedTo.Party.LengthOfNumber = 4,
+ [64].u.ActivationDiversion.Component.Invoke.ForwardedTo.Party.Number = "1803",
+ [64].u.ActivationDiversion.Component.Invoke.ServedUser.Type = 4,
+ [64].u.ActivationDiversion.Component.Invoke.ServedUser.LengthOfNumber = 4,
+ [64].u.ActivationDiversion.Component.Invoke.ServedUser.Number = "5398",
+
+ [65].Function = Fac_ActivationDiversion,
+ [65].u.ActivationDiversion.InvokeID = 68,
+ [65].u.ActivationDiversion.ComponentType = FacComponent_Invoke,
+ [65].u.ActivationDiversion.Component.Invoke.Procedure = 1,
+ [65].u.ActivationDiversion.Component.Invoke.BasicService = 5,
+ [65].u.ActivationDiversion.Component.Invoke.ForwardedTo.Party.Type = 4,
+ [65].u.ActivationDiversion.Component.Invoke.ForwardedTo.Party.LengthOfNumber = 4,
+ [65].u.ActivationDiversion.Component.Invoke.ForwardedTo.Party.Number = "1803",
+
+ [66].Function = Fac_ActivationDiversion,
+ [66].u.ActivationDiversion.InvokeID = 69,
+ [66].u.ActivationDiversion.ComponentType = FacComponent_Result,
+
+ [67].Function = Fac_DeactivationDiversion,
+ [67].u.DeactivationDiversion.InvokeID = 70,
+ [67].u.DeactivationDiversion.ComponentType = FacComponent_Invoke,
+ [67].u.DeactivationDiversion.Component.Invoke.Procedure = 1,
+ [67].u.DeactivationDiversion.Component.Invoke.BasicService = 5,
+
+ [68].Function = Fac_DeactivationDiversion,
+ [68].u.DeactivationDiversion.InvokeID = 71,
+ [68].u.DeactivationDiversion.ComponentType = FacComponent_Result,
+
+ [69].Function = Fac_ActivationStatusNotificationDiv,
+ [69].u.ActivationStatusNotificationDiv.InvokeID = 72,
+ [69].u.ActivationStatusNotificationDiv.Procedure = 1,
+ [69].u.ActivationStatusNotificationDiv.BasicService = 5,
+ [69].u.ActivationStatusNotificationDiv.ForwardedTo.Party.Type = 4,
+ [69].u.ActivationStatusNotificationDiv.ForwardedTo.Party.LengthOfNumber = 4,
+ [69].u.ActivationStatusNotificationDiv.ForwardedTo.Party.Number = "1803",
+
+ [70].Function = Fac_DeactivationStatusNotificationDiv,
+ [70].u.DeactivationStatusNotificationDiv.InvokeID = 73,
+ [70].u.DeactivationStatusNotificationDiv.Procedure = 1,
+ [70].u.DeactivationStatusNotificationDiv.BasicService = 5,
+
+ [71].Function = Fac_InterrogationDiversion,
+ [71].u.InterrogationDiversion.InvokeID = 74,
+ [71].u.InterrogationDiversion.ComponentType = FacComponent_Invoke,
+ [71].u.InterrogationDiversion.Component.Invoke.Procedure = 1,
+ [71].u.InterrogationDiversion.Component.Invoke.BasicService = 5,
+
+ [72].Function = Fac_InterrogationDiversion,
+ [72].u.InterrogationDiversion.InvokeID = 75,
+ [72].u.InterrogationDiversion.ComponentType = FacComponent_Invoke,
+ [72].u.InterrogationDiversion.Component.Invoke.Procedure = 1,
+
+ [73].Function = Fac_InterrogationDiversion,
+ [73].u.InterrogationDiversion.InvokeID = 76,
+ [73].u.InterrogationDiversion.ComponentType = FacComponent_Result,
+ [73].u.InterrogationDiversion.Component.Result.NumRecords = 2,
+ [73].u.InterrogationDiversion.Component.Result.List[0].Procedure = 2,
+ [73].u.InterrogationDiversion.Component.Result.List[0].BasicService = 5,
+ [73].u.InterrogationDiversion.Component.Result.List[0].ForwardedTo.Party.Type = 4,
+ [73].u.InterrogationDiversion.Component.Result.List[0].ForwardedTo.Party.LengthOfNumber = 4,
+ [73].u.InterrogationDiversion.Component.Result.List[0].ForwardedTo.Party.Number = "1803",
+ [73].u.InterrogationDiversion.Component.Result.List[1].Procedure = 1,
+ [73].u.InterrogationDiversion.Component.Result.List[1].BasicService = 3,
+ [73].u.InterrogationDiversion.Component.Result.List[1].ForwardedTo.Party.Type = 4,
+ [73].u.InterrogationDiversion.Component.Result.List[1].ForwardedTo.Party.LengthOfNumber = 4,
+ [73].u.InterrogationDiversion.Component.Result.List[1].ForwardedTo.Party.Number = "1903",
+ [73].u.InterrogationDiversion.Component.Result.List[1].ServedUser.Type = 4,
+ [73].u.InterrogationDiversion.Component.Result.List[1].ServedUser.LengthOfNumber = 4,
+ [73].u.InterrogationDiversion.Component.Result.List[1].ServedUser.Number = "5398",
+
+ [74].Function = Fac_DiversionInformation,
+ [74].u.DiversionInformation.InvokeID = 77,
+ [74].u.DiversionInformation.DiversionReason = 3,
+ [74].u.DiversionInformation.BasicService = 5,
+ [74].u.DiversionInformation.ServedUserSubaddress.Type = 1,
+ [74].u.DiversionInformation.ServedUserSubaddress.Length = 4,
+ [74].u.DiversionInformation.ServedUserSubaddress.u.Nsap = "6492",
+ [74].u.DiversionInformation.CallingAddressPresent = 1,
+ [74].u.DiversionInformation.CallingAddress.Type = 0,
+ [74].u.DiversionInformation.CallingAddress.Address.ScreeningIndicator = 3,
+ [74].u.DiversionInformation.CallingAddress.Address.Party.Type = 4,
+ [74].u.DiversionInformation.CallingAddress.Address.Party.LengthOfNumber = 4,
+ [74].u.DiversionInformation.CallingAddress.Address.Party.Number = "1803",
+ [74].u.DiversionInformation.OriginalCalledPresent = 1,
+ [74].u.DiversionInformation.OriginalCalled.Type = 1,
+ [74].u.DiversionInformation.LastDivertingPresent = 1,
[... 1553 lines stripped ...]
More information about the asterisk-commits
mailing list