[svn-commits] rmudgett: branch rmudgett/subaddr_xfer r2163 - /team/rmudgett/subaddr_xfer/
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Thu Dec 9 21:20:18 CST 2010
Author: rmudgett
Date: Thu Dec 9 21:20:14 2010
New Revision: 2163
URL: http://svnview.digium.com/svn/libpri?view=rev&rev=2163
Log:
Suppress subaddress ies if the subaddress is not presentable.
Modified:
team/rmudgett/subaddr_xfer/q931.c
Modified: team/rmudgett/subaddr_xfer/q931.c
URL: http://svnview.digium.com/svn/libpri/team/rmudgett/subaddr_xfer/q931.c?view=diff&rev=2163&r1=2162&r2=2163
==============================================================================
--- team/rmudgett/subaddr_xfer/q931.c (original)
+++ team/rmudgett/subaddr_xfer/q931.c Thu Dec 9 21:20:14 2010
@@ -864,6 +864,50 @@
}
/*!
+ * \internal
+ * \brief Determine if the subaddress is presentable.
+ *
+ * \param number Party number associated with subaddress.
+ * \param subaddr Subaddress to determine if presentable.
+ *
+ * \retval TRUE if the subaddress is presentable.
+ * \retval FALSE if the subaddress is not presentable.
+ */
+static int is_number_subaddress_presentable(const struct q931_party_number *number, const struct q931_party_subaddress *subaddr)
+{
+ /* If unsure about the presentation, we will restrict it. */
+ if (!subaddr->valid) {
+ return 0;
+ }
+ if (!number->valid) {
+ return 0;
+ }
+ switch (number->presentation & PRI_PRES_RESTRICTION) {
+ case PRI_PRES_ALLOWED:
+ case PRI_PRES_UNAVAILABLE:
+ break;
+ default:
+ case PRI_PRES_RESTRICTED:
+ return 0;
+ }
+ return 1;
+}
+
+/*!
+ * \internal
+ * \brief Determine if the subaddress in the party address is presentable.
+ *
+ * \param addr Party address to check.
+ *
+ * \retval TRUE if the subaddress is presentable.
+ * \retval FALSE if the subaddress is not presentable.
+ */
+static int q931_party_address_is_subaddress_presentable(const struct q931_party_address *addr)
+{
+ return is_number_subaddress_presentable(&addr->number, &addr->subaddress);
+}
+
+/*!
* \brief Determine if the subaddress in the party id is presentable.
*
* \param id Party ID to check.
@@ -873,22 +917,7 @@
*/
int q931_party_id_is_subaddress_presentable(const struct q931_party_id *id)
{
- /* If unsure about the presentation, we will restrict it. */
- if (!id->subaddress.valid) {
- return 0;
- }
- if (!id->number.valid) {
- return 0;
- }
- switch (id->number.presentation & PRI_PRES_RESTRICTION) {
- case PRI_PRES_ALLOWED:
- case PRI_PRES_UNAVAILABLE:
- break;
- default:
- case PRI_PRES_RESTRICTED:
- return 0;
- }
- return 1;
+ return is_number_subaddress_presentable(&id->number, &id->subaddress);
}
/*!
@@ -2081,6 +2110,9 @@
static int transmit_connected_subaddr(int full_ie, struct pri *ctrl, q931_call *call, int msgtype, q931_ie *ie, int len, int order)
{
+ if (!q931_party_id_is_subaddress_presentable(&call->local_id)) {
+ return 0;
+ }
return transmit_subaddr_helper(full_ie, ctrl, &call->local_id.subaddress, msgtype, ie,
1, len, order);
}
@@ -2204,6 +2236,9 @@
static int transmit_calling_party_subaddr(int full_ie, struct pri *ctrl, q931_call *call, int msgtype, q931_ie *ie, int len, int order)
{
+ if (!q931_party_id_is_subaddress_presentable(&call->local_id)) {
+ return 0;
+ }
return transmit_subaddr_helper(full_ie, ctrl, &call->local_id.subaddress, msgtype, ie,
1, len, order);
}
@@ -2219,6 +2254,9 @@
static int transmit_called_party_subaddr(int full_ie, struct pri *ctrl, q931_call *call, int msgtype, q931_ie *ie, int len, int order)
{
+ if (!q931_party_address_is_subaddress_presentable(&call->called)) {
+ return 0;
+ }
return transmit_subaddr_helper(full_ie, ctrl, &call->called.subaddress, msgtype, ie,
1, len, order);
}
More information about the svn-commits
mailing list