[Asterisk-code-review] callerid: Allow specifying timezone for date/time. (asterisk[master])

N A asteriskteam at digium.com
Fri Nov 25 08:10:45 CST 2022


N A has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/19600 )


Change subject: callerid: Allow specifying timezone for date/time.
......................................................................

callerid: Allow specifying timezone for date/time.

The Caller ID generation routine currently is hardcoded
to always use the system time zone. This makes it possible
to optionally specify any TZ-format time zone.

ASTERISK-30330 #close

Change-Id: Ia1a5f438c6a67c7a7874ede8ac0ded4496411332
---
M include/asterisk/callerid.h
M main/callerid.c
2 files changed, 91 insertions(+), 12 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/00/19600/1

diff --git a/include/asterisk/callerid.h b/include/asterisk/callerid.h
index 16a3df1..77b5822 100644
--- a/include/asterisk/callerid.h
+++ b/include/asterisk/callerid.h
@@ -129,6 +129,26 @@
 int callerid_full_generate(unsigned char *buf, const char *number, const char *name, const char *ddn, int redirecting,
 	int flags, int format, int callwaiting, struct ast_format *codec);
 
+/*! \brief Generates a CallerID FSK stream in ulaw format suitable for transmission.
+ * \param buf Buffer to use. If "buf" is supplied, it will use that buffer instead of allocating its own.
+ *   "buf" must be at least 32000 bytes in size of you want to be sure you don't have an overrun.
+ * \param number Use NULL for no number or "P" for "private"
+ * \param name name to be used
+ * \param ddn Dialable Directory Number (or NULL)
+ * \param redirecting Redirecting reason
+ * \param flags passed flags
+ * \param format Message format
+ * \param callwaiting callwaiting flag
+ * \param codec -- either AST_FORMAT_ULAW or AST_FORMAT_ALAW
+ * \param tz TZ-format time zone to use for date/time (NULL for system default)
+ * \details
+ * This function creates a stream of callerid (a callerid spill) data in ulaw format.
+ * \return It returns the size
+ * (in bytes) of the data (if it returns a size of 0, there is probably an error)
+ */
+int callerid_full_tz_generate(unsigned char *buf, const char *number, const char *name, const char *ddn, int redirecting,
+	int flags, int format, int callwaiting, struct ast_format *codec, const char *tz);
+
 /*! \brief Create a callerID state machine
  * \param cid_signalling Type of signalling in use
  *
@@ -220,6 +240,24 @@
 int ast_callerid_full_generate(unsigned char *buf, const char *name, const char *number,
 	const char *ddn, int redirecting, int pres, int qualifier, int format, struct ast_format *codec);
 
+/*! \brief Generate Caller-ID spill from the "callerid" field of asterisk (in e-mail address like format)
+ * \param buf buffer for output samples. See callerid_generate() for details regarding buffer.
+ * \param name Caller-ID Name
+ * \param number Caller-ID Number
+ * \param ddn Dialable Directory Number (or NULL)
+ * \param redirecting Redirecting Reason (-1 if N/A)
+ * \param pres Presentation (0 for default)
+ * \param qualifier Call Qualifier (0 for no, 1 for yes)
+ * \param format Message Format
+ * \param codec Asterisk codec (either AST_FORMAT_ALAW or AST_FORMAT_ULAW)
+ * \param tz TZ-format time zone name to use for date/time (NULL for system default)
+ *
+ * \details
+ * Like ast_callerid_generate but with additional parameters.
+ */
+int ast_callerid_full_tz_generate(unsigned char *buf, const char *name, const char *number,
+	const char *ddn, int redirecting, int pres, int qualifier, int format, struct ast_format *codec, const char *tz);
+
 /*!
  * \brief Generate message waiting indicator
  * \param buf
@@ -247,6 +285,13 @@
 int ast_callerid_callwaiting_full_generate(unsigned char *buf, const char *name, const char *number,
 	const char *ddn, int redirecting, int pres, int qualifier, struct ast_format *codec);
 
+/*! \brief Generate Caller-ID spill but in a format suitable for Call Waiting(tm)'s Caller*ID(tm)
+ * \param tz TZ-format time zone for date/time (NULL for system default)
+ * \see ast_callerid_generate() for other details
+ */
+int ast_callerid_callwaiting_full_tz_generate(unsigned char *buf, const char *name, const char *number,
+	const char *ddn, int redirecting, int pres, int qualifier, struct ast_format *codec, const char *tz);
+
 /*! \brief Destructively parse inbuf into name and location (or number)
  * \details
  * Parses callerid stream from inbuf and changes into useable form, outputted in name and location.
diff --git a/main/callerid.c b/main/callerid.c
index c6c29a0..e8ff0b0 100644
--- a/main/callerid.c
+++ b/main/callerid.c
@@ -737,7 +737,7 @@
 }
 
 static int callerid_genmsg(char *msg, int size, const char *number, const char *name, int flags, int format,
-	const char *ddn, int redirecting)
+	const char *ddn, int redirecting, const char *tz)
 {
 	struct timeval now = ast_tvnow();
 	struct ast_tm tm;
@@ -746,7 +746,7 @@
 	int i, x;
 
 	/* Get the time */
-	ast_localtime(&now, &tm, NULL);
+	ast_localtime(&now, &tm, tz);
 
 	ptr = msg;
 
@@ -850,8 +850,7 @@
 	return (ptr - msg);
 }
 
-int ast_callerid_vmwi_generate(unsigned char *buf, int active, int type, struct ast_format *codec,
-			       const char* name, const char* number, int flags)
+int ast_callerid_vmwi_generate(unsigned char *buf, int active, int type, struct ast_format *codec, const char* name, const char* number, int flags)
 {
 	char msg[256];
 	int len = 0;
@@ -867,7 +866,7 @@
 		msg[0] = 0x82;
 
 		/* put date, number info at the right place */
-		len = callerid_genmsg(msg+2, sizeof(msg)-2, number, name, flags, CID_TYPE_MDMF, "", -1);
+		len = callerid_genmsg(msg+2, sizeof(msg)-2, number, name, flags, CID_TYPE_MDMF, "", -1, NULL);
 
 		/* length of MDMF CLI plus Message Waiting Structure */
 		msg[1] = len+3;
@@ -946,6 +945,13 @@
 int callerid_full_generate(unsigned char *buf, const char *number, const char *name, const char *ddn, int redirecting,
 	int flags, int format, int callwaiting, struct ast_format *codec)
 {
+	/* Default time zone is NULL (system time zone) */
+	return callerid_full_tz_generate(buf, number, name, ddn, redirecting, flags, format, callwaiting, codec, NULL);
+}
+
+int callerid_full_tz_generate(unsigned char *buf, const char *number, const char *name, const char *ddn, int redirecting,
+	int flags, int format, int callwaiting, struct ast_format *codec, const char *tz)
+{
 	int bytes = 0;
 	int x, sum;
 	int len;
@@ -955,7 +961,7 @@
 	float ci = 0.0;
 	float scont = 0.0;
 	char msg[256];
-	len = callerid_genmsg(msg, sizeof(msg), number, name, flags, format, ddn, redirecting);
+	len = callerid_genmsg(msg, sizeof(msg), number, name, flags, format, ddn, redirecting, tz);
 	if (!callwaiting) {
 		/* Wait a half a second */
 		for (x = 0; x < 4000; x++)
@@ -1101,7 +1107,7 @@
 }
 
 static int __ast_callerid_generate(unsigned char *buf, const char *name, const char *number,
-	const char *ddn, int redirecting, int pres, int qualifier, int format, int callwaiting, struct ast_format *codec)
+	const char *ddn, int redirecting, int pres, int qualifier, int format, int callwaiting, struct ast_format *codec, const char *tz)
 {
 	int flags = 0;
 
@@ -1126,30 +1132,43 @@
 		flags |= CID_QUALIFIER;
 	}
 
-	return callerid_full_generate(buf, number, name, ddn, redirecting, flags, format, callwaiting, codec);
+	return callerid_full_tz_generate(buf, number, name, ddn, redirecting, flags, format, callwaiting, codec, tz);
 }
 
 int ast_callerid_generate(unsigned char *buf, const char *name, const char *number, struct ast_format *codec)
 {
-	return __ast_callerid_generate(buf, name, number, "", -1, 0, 0, CID_TYPE_MDMF, 0, codec);
+	return __ast_callerid_generate(buf, name, number, "", -1, 0, 0, CID_TYPE_MDMF, 0, codec, NULL);
 }
 
 int ast_callerid_callwaiting_generate(unsigned char *buf, const char *name, const char *number, struct ast_format *codec)
 {
-	return __ast_callerid_generate(buf, name, number, "", -1, 0, 0, CID_TYPE_MDMF, 1, codec);
+	return __ast_callerid_generate(buf, name, number, "", -1, 0, 0, CID_TYPE_MDMF, 1, codec, NULL);
 }
 
 int ast_callerid_full_generate(unsigned char *buf, const char *name, const char *number,
 	const char *ddn, int redirecting, int pres, int qualifier, int format, struct ast_format *codec)
 {
-	return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, format, 0, codec);
+	return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, format, 0, codec, NULL);
 }
 
 int ast_callerid_callwaiting_full_generate(unsigned char *buf, const char *name, const char *number,
 	const char *ddn, int redirecting, int pres, int qualifier, struct ast_format *codec)
 {
 	/* Type II Caller ID (CWCID) only uses MDMF, so format isn't an argument */
-	return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, CID_TYPE_MDMF, 1, codec);
+	return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, CID_TYPE_MDMF, 1, codec, NULL);
+}
+
+int ast_callerid_full_tz_generate(unsigned char *buf, const char *name, const char *number,
+	const char *ddn, int redirecting, int pres, int qualifier, int format, struct ast_format *codec, const char *tz)
+{
+	return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, format, 0, codec, tz);
+}
+
+int ast_callerid_callwaiting_full_tz_generate(unsigned char *buf, const char *name, const char *number,
+	const char *ddn, int redirecting, int pres, int qualifier, struct ast_format *codec, const char *tz)
+{
+	/* Type II Caller ID (CWCID) only uses MDMF, so format isn't an argument */
+	return __ast_callerid_generate(buf, name, number, ddn, redirecting, pres, qualifier, CID_TYPE_MDMF, 1, codec, tz);
 }
 
 char *ast_callerid_merge(char *buf, int bufsiz, const char *name, const char *num, const char *unknown)

-- 
To view, visit https://gerrit.asterisk.org/c/asterisk/+/19600
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Change-Id: Ia1a5f438c6a67c7a7874ede8ac0ded4496411332
Gerrit-Change-Number: 19600
Gerrit-PatchSet: 1
Gerrit-Owner: N A <asterisk at phreaknet.org>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20221125/cd1d56e8/attachment-0001.html>


More information about the asterisk-code-review mailing list