aboutsummaryrefslogtreecommitdiffstats
path: root/funcs/func_connectedline.c
diff options
context:
space:
mode:
authorrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2009-10-22 16:33:22 +0000
committerrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2009-10-22 16:33:22 +0000
commitd7a3a1035d6552d5ef8c30289814efec1c2b0d5f (patch)
tree6e14b9b86b44349743912e3e737f8cbe8c706d22 /funcs/func_connectedline.c
parent43e42a8b82f9459d9deed4559ef2826366d7a91e (diff)
Add support for calling and called subaddress. Partial support for COLP subaddress.
The Telecom Specs in NZ suggests that SUB ADDRESS is always on, so doing "desk to desk" between offices each with an asterisk box over the ISDN should then be possible, without a whole load of DDI numbers required. (closes issue #15604) Reported by: alecdavis Patches: asterisk_subaddr_trunk.diff11.txt uploaded by alecdavis (license 585) Some minor modificatons were made. Tested by: alecdavis, rmudgett Review: https://reviewboard.asterisk.org/r/405/ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@225357 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'funcs/func_connectedline.c')
-rw-r--r--funcs/func_connectedline.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/funcs/func_connectedline.c b/funcs/func_connectedline.c
index 7e1d9b457..936d49047 100644
--- a/funcs/func_connectedline.c
+++ b/funcs/func_connectedline.c
@@ -43,7 +43,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
/*
* Do not document the CONNECTEDLINE(source) datatype.
- * It has turned out to not be needed. The source value is really .
+ * It has turned out to not be needed. The source value is really
* only useful as a possible tracing aid.
*/
/*** DOCUMENTATION
@@ -60,6 +60,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
<enum name = "name" />
<enum name = "ton" />
<enum name = "pres" />
+ <enum name = "subaddr[-valid]|[-type]|[-odd]">
+ <para>ISDN Connected line subaddress</para>
+ </enum>
</enumlist>
</parameter>
<parameter name="i">
@@ -102,6 +105,19 @@ static int connectedline_read(struct ast_channel *chan, const char *cmd, char *d
ast_copy_string(buf, ast_named_caller_presentation(chan->connected.id.number_presentation), len);
} else if (!strncasecmp("source", data, 6)) {
ast_copy_string(buf, ast_connected_line_source_name(chan->connected.source), len);
+ } else if (!strncasecmp("subaddr", data, 7)) {
+ /* also matches subaddr-valid, subaddr-type, subaddr-odd, subaddr */
+ if (!strncasecmp(data + 7 ,"-valid", 6)) { /* subaddr-valid */
+ snprintf(buf, len, "%d", chan->connected.id.subaddress.valid);
+ } else if (!strncasecmp(data + 7 ,"-type", 5)) { /* subaddr-type */
+ snprintf(buf, len, "%d", chan->connected.id.subaddress.type);
+ } else if (!strncasecmp(data + 7 ,"-odd", 4)) { /* subaddr-odd */
+ snprintf(buf, len, "%d", chan->connected.id.subaddress.odd_even_indicator);
+ } else { /* subaddr */
+ if (chan->connected.id.subaddress.str) {
+ ast_copy_string(buf, chan->connected.id.subaddress.str, len);
+ }
+ }
} else {
ast_log(LOG_ERROR, "Unknown connectedline data type '%s'.\n", data);
}
@@ -209,6 +225,19 @@ static int connectedline_write(struct ast_channel *chan, const char *cmd, char *
connected.source = source;
set_it(chan, &connected);
}
+ } else if (!strncasecmp("subaddr", data, 7)) { /* outbound: set calling subaddress */
+ /* also matches subaddr-valid, subaddr-type, subaddr-odd, subaddr */
+ if (!strncasecmp(data + 7 ,"-valid", 6)) { /* subaddr-valid */
+ connected.id.subaddress.valid = atoi(value) ? 1 : 0;
+ } else if (!strncasecmp(data + 7 ,"-type", 5)) { /* subaddr-type */
+ connected.id.subaddress.type = atoi(value) ? 2 : 0;
+ } else if (!strncasecmp(data + 7 ,"-odd", 4)) { /* subaddr-odd */
+ connected.id.subaddress.odd_even_indicator = atoi(value) ? 1 : 0;
+ } else { /* subaddr */
+ connected.id.subaddress.str = ast_strdupa(value);
+ ast_trim_blanks(connected.id.subaddress.str);
+ }
+ set_it(chan, &connected);
} else {
ast_log(LOG_ERROR, "Unknown connectedline data type '%s'.\n", data);
}