aboutsummaryrefslogtreecommitdiffstats
path: root/callerid.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-10-02 00:58:31 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-10-02 00:58:31 +0000
commit6868babd229a635c5fd89c7b284025a92e0a3f9d (patch)
tree25a4ee6dff29d18acfdfbbc42485333db7aa5311 /callerid.c
parentb201da1a3eb1cae654cdd3fe89ef8f9e55dd0b83 (diff)
Huge callerid rework (might break H.323, others)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3874 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'callerid.c')
-rwxr-xr-xcallerid.c62
1 files changed, 43 insertions, 19 deletions
diff --git a/callerid.c b/callerid.c
index 5481676ec..d88822a2a 100755
--- a/callerid.c
+++ b/callerid.c
@@ -24,6 +24,7 @@
#include <asterisk/ulaw.h>
#include <asterisk/alaw.h>
#include <asterisk/frame.h>
+#include <asterisk/channel.h>
#include <asterisk/callerid.h>
#include <asterisk/logger.h>
#include <asterisk/fskmodem.h>
@@ -638,30 +639,53 @@ int ast_callerid_parse(char *instr, char **name, char **location)
return -1;
}
-static int __ast_callerid_generate(unsigned char *buf, char *callerid, int callwaiting, int codec)
+static int __ast_callerid_generate(unsigned char *buf, char *name, char *number, int callwaiting, int codec)
{
- char tmp[256];
- char *n, *l;
- if (!callerid)
- return callerid_generate(buf, NULL, NULL, 0, callwaiting, codec);
- strncpy(tmp, callerid, sizeof(tmp)-1);
- if (ast_callerid_parse(tmp, &n, &l)) {
- ast_log(LOG_WARNING, "Unable to parse '%s' into CallerID name & number\n", callerid);
- return callerid_generate(buf, NULL, NULL, 0, callwaiting, codec);
- }
- if (l)
- ast_shrink_phone_number(l);
- if (!ast_isphonenumber(l))
- return callerid_generate(buf, NULL, n, 0, callwaiting, codec);
- return callerid_generate(buf, l, n, 0, callwaiting, codec);
+ if (name && ast_strlen_zero(name))
+ name = NULL;
+ if (number && ast_strlen_zero(number))
+ number = NULL;
+ return callerid_generate(buf, number, name, 0, callwaiting, codec);
}
-int ast_callerid_generate(unsigned char *buf, char *callerid, int codec)
+int ast_callerid_generate(unsigned char *buf, char *name, char *number, int codec)
{
- return __ast_callerid_generate(buf, callerid, 0, codec);
+ return __ast_callerid_generate(buf, name, number, 0, codec);
}
-int ast_callerid_callwaiting_generate(unsigned char *buf, char *callerid, int codec)
+int ast_callerid_callwaiting_generate(unsigned char *buf, char *name, char *number, int codec)
+{
+ return __ast_callerid_generate(buf, name, number, 1, codec);
+}
+
+char *ast_callerid_merge(char *buf, int bufsiz, const char *name, const char *num)
+{
+ if (name && num)
+ snprintf(buf, bufsiz, "\"%s\" <%s>", name, num);
+ else if (name)
+ strncpy(buf, name, bufsiz - 1);
+ else if (num)
+ strncpy(buf, num, bufsiz - 1);
+ else
+ strncpy(buf, "<unknown>", bufsiz - 1);
+ return buf;
+}
+int ast_callerid_split(const char *buf, char *name, int namelen, char *num, int numlen)
{
- return __ast_callerid_generate(buf, callerid, 1, codec);
+ char *tmp;
+ char *l = NULL, *n = NULL;
+ tmp = ast_strdupa(buf);
+ if (!tmp) {
+ name[0] = '\0';
+ num[0] = '\0';
+ return -1;
+ }
+ ast_callerid_parse(tmp, &n, &l);
+ if (n)
+ strncpy(name, n, namelen - 1);
+ if (l) {
+ ast_shrink_phone_number(l);
+ strncpy(num, l, numlen - 1);
+ }
+ return 0;
}