If the peer record is from realtime, it could be set to 0, due to MySQL not represent...
authorTilghman Lesher <tilghman@meg.abyt.es>
Thu, 18 Feb 2010 21:42:53 +0000 (21:42 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Thu, 18 Feb 2010 21:42:53 +0000 (21:42 +0000)
NULL means the value is not specified for the column, which normally means
the driver uses whatever is the default value.  However, on MySQL, placing
a NULL in either a float or integer column results in a retrieval of the 0
value.  Hence, users get an errant error on load.  This patch suppresses
that error and makes the value as if it was not there.

Note that this cannot be done in the realtime driver, because the lack of
difference between NULL and 0 can only be intepreted correctly by the
driver itself.  If we did it in the realtime driver, then it would be
effectively impossible to set any realtime field to 0, because it would act
as if the field were unspecified and possibly take on a different value.

(closes issue #16683)
 Reported by: wdoekes

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@247787 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 6fa8e09..aa3a706 100644 (file)
@@ -23007,7 +23007,12 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
                        } else if (!strcasecmp(v->name, "port")) {
                                peer->portinuri = 1;
                                if (!(port = port_str2int(v->value, 0))) {
-                                       ast_log(LOG_WARNING, "Invalid peer port configuration at line %d : %s\n", v->lineno, v->value);
+                                       if (realtime) {
+                                               /* If stored as integer, could be 0 for some DBs (notably MySQL) */
+                                               peer->portinuri = 0;
+                                       } else {
+                                               ast_log(LOG_WARNING, "Invalid peer port configuration at line %d : %s\n", v->lineno, v->value);
+                                       }
                                }
                        } else if (!strcasecmp(v->name, "callingpres")) {
                                peer->callingpres = ast_parse_caller_presentation(v->value);