mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-20 12:20:12 +00:00
Allow ENUM query functions to report lookup errors
The ENUM dialplan functions do not report DNS query errors properly. It is useful to differentiate between failed query (e.g. non-existent domain) vs. no data records of the appropriate type. This is required to make overlapped dialing work. (closes issue ASTERISK-13769) Review: https://reviewboard.asterisk.org/r/1355/ Patch-by: Timo Teras git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@331201 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -22,7 +22,10 @@
|
|||||||
|
|
||||||
From 10 to 12:
|
From 10 to 12:
|
||||||
|
|
||||||
* No significant changes as of yet.
|
func_enum:
|
||||||
|
- ENUM query functions now return a count of -1 on lookup error to
|
||||||
|
differentiate between a failed query and a successful query with 0 results
|
||||||
|
matching the specified type.
|
||||||
|
|
||||||
From 1.8 to 10:
|
From 1.8 to 10:
|
||||||
|
|
||||||
|
@@ -82,7 +82,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|||||||
<para>The number of the result that you want to retrieve.</para>
|
<para>The number of the result that you want to retrieve.</para>
|
||||||
<para>Results start at <literal>1</literal>. If this argument is specified
|
<para>Results start at <literal>1</literal>. If this argument is specified
|
||||||
as <literal>getnum</literal>, then it will return the total number of results
|
as <literal>getnum</literal>, then it will return the total number of results
|
||||||
that are available.</para>
|
that are available or -1 on error.</para>
|
||||||
</parameter>
|
</parameter>
|
||||||
</syntax>
|
</syntax>
|
||||||
<description>
|
<description>
|
||||||
@@ -105,7 +105,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|||||||
<option name="c">
|
<option name="c">
|
||||||
<para>Returns an integer count of the number of NAPTRs of a certain RR type.</para>
|
<para>Returns an integer count of the number of NAPTRs of a certain RR type.</para>
|
||||||
<para>Combination of <literal>c</literal> and Method-type of <literal>ALL</literal> will
|
<para>Combination of <literal>c</literal> and Method-type of <literal>ALL</literal> will
|
||||||
return a count of all NAPTRs for the record.</para>
|
return a count of all NAPTRs for the record or -1 on error.</para>
|
||||||
</option>
|
</option>
|
||||||
<option name="u">
|
<option name="u">
|
||||||
<para>Returns the full URI and does not strip off the URI-scheme.</para>
|
<para>Returns the full URI and does not strip off the URI-scheme.</para>
|
||||||
@@ -363,7 +363,7 @@ static int enum_result_read(struct ast_channel *chan, const char *cmd, char *dat
|
|||||||
erds = datastore->data;
|
erds = datastore->data;
|
||||||
|
|
||||||
if (!strcasecmp(args.resultnum, "getnum")) {
|
if (!strcasecmp(args.resultnum, "getnum")) {
|
||||||
snprintf(buf, len, "%u", erds->context->naptr_rrs_count);
|
snprintf(buf, len, "%d", erds->context->naptr_rrs_count);
|
||||||
res = 0;
|
res = 0;
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
@@ -856,6 +856,7 @@ int ast_get_enum(struct ast_channel *chan, const char *number, char *dst, int ds
|
|||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ast_debug(1, "No such number found: %s (%s)\n", tmp, strerror(errno));
|
ast_debug(1, "No such number found: %s (%s)\n", tmp, strerror(errno));
|
||||||
|
context->naptr_rrs_count = -1;
|
||||||
strcpy(dst, "0");
|
strcpy(dst, "0");
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
@@ -896,7 +897,7 @@ int ast_get_enum(struct ast_channel *chan, const char *number, char *dst, int ds
|
|||||||
} else if (!(context->options & ENUMLOOKUP_OPTIONS_COUNT)) {
|
} else if (!(context->options & ENUMLOOKUP_OPTIONS_COUNT)) {
|
||||||
context->dst[0] = 0;
|
context->dst[0] = 0;
|
||||||
} else if ((context->options & ENUMLOOKUP_OPTIONS_COUNT)) {
|
} else if ((context->options & ENUMLOOKUP_OPTIONS_COUNT)) {
|
||||||
snprintf(context->dst, context->dstlen, "%d", context->count);
|
snprintf(context->dst, context->dstlen, "%d", context->naptr_rrs_count + context->count);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chan) {
|
if (chan) {
|
||||||
|
Reference in New Issue
Block a user