<p>N A has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/19600">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">callerid: Allow specifying timezone for date/time.<br><br>The Caller ID generation routine currently is hardcoded<br>to always use the system time zone. This makes it possible<br>to optionally specify any TZ-format time zone.<br><br>ASTERISK-30330 #close<br><br>Change-Id: Ia1a5f438c6a67c7a7874ede8ac0ded4496411332<br>---<br>M include/asterisk/callerid.h<br>M main/callerid.c<br>2 files changed, 91 insertions(+), 12 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/00/19600/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/asterisk/callerid.h b/include/asterisk/callerid.h</span><br><span>index 16a3df1..77b5822 100644</span><br><span>--- a/include/asterisk/callerid.h</span><br><span>+++ b/include/asterisk/callerid.h</span><br><span>@@ -129,6 +129,26 @@</span><br><span> int callerid_full_generate(unsigned char *buf, const char *number, const char *name, const char *ddn, int redirecting,</span><br><span>     int flags, int format, int callwaiting, struct ast_format *codec);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! \brief Generates a CallerID FSK stream in ulaw format suitable for transmission.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param buf Buffer to use. If "buf" is supplied, it will use that buffer instead of allocating its own.</span><br><span style="color: hsl(120, 100%, 40%);">+ *   "buf" must be at least 32000 bytes in size of you want to be sure you don't have an overrun.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param number Use NULL for no number or "P" for "private"</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param name name to be used</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param ddn Dialable Directory Number (or NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param redirecting Redirecting reason</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param flags passed flags</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param format Message format</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param callwaiting callwaiting flag</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param codec -- either AST_FORMAT_ULAW or AST_FORMAT_ALAW</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param tz TZ-format time zone to use for date/time (NULL for system default)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \details</span><br><span style="color: hsl(120, 100%, 40%);">+ * This function creates a stream of callerid (a callerid spill) data in ulaw format.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return It returns the size</span><br><span style="color: hsl(120, 100%, 40%);">+ * (in bytes) of the data (if it returns a size of 0, there is probably an error)</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int callerid_full_tz_generate(unsigned char *buf, const char *number, const char *name, const char *ddn, int redirecting,</span><br><span style="color: hsl(120, 100%, 40%);">+        int flags, int format, int callwaiting, struct ast_format *codec, const char *tz);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! \brief Create a callerID state machine</span><br><span>  * \param cid_signalling Type of signalling in use</span><br><span>  *</span><br><span>@@ -220,6 +240,24 @@</span><br><span> int ast_callerid_full_generate(unsigned char *buf, const char *name, const char *number,</span><br><span>    const char *ddn, int redirecting, int pres, int qualifier, int format, struct ast_format *codec);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! \brief Generate Caller-ID spill from the "callerid" field of asterisk (in e-mail address like format)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param buf buffer for output samples. See callerid_generate() for details regarding buffer.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param name Caller-ID Name</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param number Caller-ID Number</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param ddn Dialable Directory Number (or NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param redirecting Redirecting Reason (-1 if N/A)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param pres Presentation (0 for default)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param qualifier Call Qualifier (0 for no, 1 for yes)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param format Message Format</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param codec Asterisk codec (either AST_FORMAT_ALAW or AST_FORMAT_ULAW)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param tz TZ-format time zone name to use for date/time (NULL for system default)</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \details</span><br><span style="color: hsl(120, 100%, 40%);">+ * Like ast_callerid_generate but with additional parameters.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int ast_callerid_full_tz_generate(unsigned char *buf, const char *name, const char *number,</span><br><span style="color: hsl(120, 100%, 40%);">+     const char *ddn, int redirecting, int pres, int qualifier, int format, struct ast_format *codec, const char *tz);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*!</span><br><span>  * \brief Generate message waiting indicator</span><br><span>  * \param buf</span><br><span>@@ -247,6 +285,13 @@</span><br><span> int ast_callerid_callwaiting_full_generate(unsigned char *buf, const char *name, const char *number,</span><br><span>   const char *ddn, int redirecting, int pres, int qualifier, struct ast_format *codec);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! \brief Generate Caller-ID spill but in a format suitable for Call Waiting(tm)'s Caller*ID(tm)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param tz TZ-format time zone for date/time (NULL for system default)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \see ast_callerid_generate() for other details</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int ast_callerid_callwaiting_full_tz_generate(unsigned char *buf, const char *name, const char *number,</span><br><span style="color: hsl(120, 100%, 40%);">+   const char *ddn, int redirecting, int pres, int qualifier, struct ast_format *codec, const char *tz);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! \brief Destructively parse inbuf into name and location (or number)</span><br><span>  * \details</span><br><span>  * Parses callerid stream from inbuf and changes into useable form, outputted in name and location.</span><br><span>diff --git a/main/callerid.c b/main/callerid.c</span><br><span>index c6c29a0..e8ff0b0 100644</span><br><span>--- a/main/callerid.c</span><br><span>+++ b/main/callerid.c</span><br><span>@@ -737,7 +737,7 @@</span><br><span> }</span><br><span> </span><br><span> static int callerid_genmsg(char *msg, int size, const char *number, const char *name, int flags, int format,</span><br><span style="color: hsl(0, 100%, 40%);">-        const char *ddn, int redirecting)</span><br><span style="color: hsl(120, 100%, 40%);">+     const char *ddn, int redirecting, const char *tz)</span><br><span> {</span><br><span>       struct timeval now = ast_tvnow();</span><br><span>    struct ast_tm tm;</span><br><span>@@ -746,7 +746,7 @@</span><br><span>      int i, x;</span><br><span> </span><br><span>        /* Get the time */</span><br><span style="color: hsl(0, 100%, 40%);">-      ast_localtime(&now, &tm, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+       ast_localtime(&now, &tm, tz);</span><br><span> </span><br><span>    ptr = msg;</span><br><span> </span><br><span>@@ -850,8 +850,7 @@</span><br><span>         return (ptr - msg);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int ast_callerid_vmwi_generate(unsigned char *buf, int active, int type, struct ast_format *codec,</span><br><span style="color: hsl(0, 100%, 40%);">-                         const char* name, const char* number, int flags)</span><br><span style="color: hsl(120, 100%, 40%);">+int ast_callerid_vmwi_generate(unsigned char *buf, int active, int type, struct ast_format *codec, const char* name, const char* number, int flags)</span><br><span> {</span><br><span>    char msg[256];</span><br><span>       int len = 0;</span><br><span>@@ -867,7 +866,7 @@</span><br><span>           msg[0] = 0x82;</span><br><span> </span><br><span>           /* put date, number info at the right place */</span><br><span style="color: hsl(0, 100%, 40%);">-          len = callerid_genmsg(msg+2, sizeof(msg)-2, number, name, flags, CID_TYPE_MDMF, "", -1);</span><br><span style="color: hsl(120, 100%, 40%);">+            len = callerid_genmsg(msg+2, sizeof(msg)-2, number, name, flags, CID_TYPE_MDMF, "", -1, NULL);</span><br><span> </span><br><span>                 /* length of MDMF CLI plus Message Waiting Structure */</span><br><span>              msg[1] = len+3;</span><br><span>@@ -946,6 +945,13 @@</span><br><span> int callerid_full_generate(unsigned char *buf, const char *number, const char *name, const char *ddn, int redirecting,</span><br><span>     int flags, int format, int callwaiting, struct ast_format *codec)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Default time zone is NULL (system time zone) */</span><br><span style="color: hsl(120, 100%, 40%);">+    return callerid_full_tz_generate(buf, number, name, ddn, redirecting, flags, format, callwaiting, codec, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int callerid_full_tz_generate(unsigned char *buf, const char *number, const char *name, const char *ddn, int redirecting,</span><br><span style="color: hsl(120, 100%, 40%);">+       int flags, int format, int callwaiting, struct ast_format *codec, const char *tz)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span>         int bytes = 0;</span><br><span>       int x, sum;</span><br><span>  int len;</span><br><span>@@ -955,7 +961,7 @@</span><br><span>       float ci = 0.0;</span><br><span>      float scont = 0.0;</span><br><span>   char msg[256];</span><br><span style="color: hsl(0, 100%, 40%);">-  len = callerid_genmsg(msg, sizeof(msg), number, name, flags, format, ddn, redirecting);</span><br><span style="color: hsl(120, 100%, 40%);">+       len = callerid_genmsg(msg, sizeof(msg), number, name, flags, format, ddn, redirecting, tz);</span><br><span>  if (!callwaiting) {</span><br><span>          /* Wait a half a second */</span><br><span>           for (x = 0; x < 4000; x++)</span><br><span>@@ -1101,7 +1107,7 @@</span><br><span> }</span><br><span> </span><br><span> static int __ast_callerid_generate(unsigned char *buf, const char *name, const char *number,</span><br><span style="color: hsl(0, 100%, 40%);">-  const char *ddn, int redirecting, int pres, int qualifier, int format, int callwaiting, struct ast_format *codec)</span><br><span style="color: hsl(120, 100%, 40%);">+     const char *ddn, int redirecting, int pres, int qualifier, int format, int callwaiting, struct ast_format *codec, const char *tz)</span><br><span> {</span><br><span>       int flags = 0;</span><br><span> </span><br><span>@@ -1126,30 +1132,43 @@</span><br><span>                 flags |= CID_QUALIFIER;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   return callerid_full_generate(buf, number, name, ddn, redirecting, flags, format, callwaiting, codec);</span><br><span style="color: hsl(120, 100%, 40%);">+        return callerid_full_tz_generate(buf, number, name, ddn, redirecting, flags, format, callwaiting, codec, tz);</span><br><span> }</span><br><span> </span><br><span> int ast_callerid_generate(unsigned char *buf, const char *name, const char *number, struct ast_format *codec)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    return __ast_callerid_generate(buf, name, number, "", -1, 0, 0, CID_TYPE_MDMF, 0, codec);</span><br><span style="color: hsl(120, 100%, 40%);">+   return __ast_callerid_generate(buf, name, number, "", -1, 0, 0, CID_TYPE_MDMF, 0, codec, NULL);</span><br><span> }</span><br><span> </span><br><span> int ast_callerid_callwaiting_generate(unsigned char *buf, const char *name, const char *number, struct ast_format *codec)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    return __ast_callerid_generate(buf, name, number, "", -1, 0, 0, CID_TYPE_MDMF, 1, codec);</span><br><span style="color: hsl(120, 100%, 40%);">+   return __ast_callerid_generate(buf, name, number, "", -1, 0, 0, CID_TYPE_MDMF, 1, codec, NULL);</span><br><span> }</span><br><span> </span><br><span> int ast_callerid_full_generate(unsigned char *buf, const char *name, const char *number,</span><br><span>       const char *ddn, int redirecting, int pres, int qualifier, int format, struct ast_format *codec)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, format, 0, codec);</span><br><span style="color: hsl(120, 100%, 40%);">+       return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, format, 0, codec, NULL);</span><br><span> }</span><br><span> </span><br><span> int ast_callerid_callwaiting_full_generate(unsigned char *buf, const char *name, const char *number,</span><br><span>       const char *ddn, int redirecting, int pres, int qualifier, struct ast_format *codec)</span><br><span> {</span><br><span>    /* Type II Caller ID (CWCID) only uses MDMF, so format isn't an argument */</span><br><span style="color: hsl(0, 100%, 40%);">- return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, CID_TYPE_MDMF, 1, codec);</span><br><span style="color: hsl(120, 100%, 40%);">+        return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, CID_TYPE_MDMF, 1, codec, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int ast_callerid_full_tz_generate(unsigned char *buf, const char *name, const char *number,</span><br><span style="color: hsl(120, 100%, 40%);">+        const char *ddn, int redirecting, int pres, int qualifier, int format, struct ast_format *codec, const char *tz)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, format, 0, codec, tz);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int ast_callerid_callwaiting_full_tz_generate(unsigned char *buf, const char *name, const char *number,</span><br><span style="color: hsl(120, 100%, 40%);">+     const char *ddn, int redirecting, int pres, int qualifier, struct ast_format *codec, const char *tz)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Type II Caller ID (CWCID) only uses MDMF, so format isn't an argument */</span><br><span style="color: hsl(120, 100%, 40%);">+       return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, CID_TYPE_MDMF, 1, codec, tz);</span><br><span> }</span><br><span> </span><br><span> char *ast_callerid_merge(char *buf, int bufsiz, const char *name, const char *num, const char *unknown)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/19600">change 19600</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/19600"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia1a5f438c6a67c7a7874ede8ac0ded4496411332 </div>
<div style="display:none"> Gerrit-Change-Number: 19600 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: N A <asterisk@phreaknet.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>