diff options
author | Mark Spencer <markster@digium.com> | 2003-10-01 22:59:06 +0000 |
---|---|---|
committer | Mark Spencer <markster@digium.com> | 2003-10-01 22:59:06 +0000 |
commit | 3b49a87972b07b800f88e9a8fbe6f66ed18205cd (patch) | |
tree | b54d06c4a2a8217cb171edef2bed5931122b50cf | |
parent | b016beaeb1f48816c0d0280919b378c61dc05239 (diff) |
Update IAX2 parser for sending caller info
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1599 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rwxr-xr-x | channels/chan_iax2.c | 17 | ||||
-rwxr-xr-x | channels/iax2-parser.c | 8 | ||||
-rwxr-xr-x | channels/iax2-parser.h | 1 | ||||
-rwxr-xr-x | channels/iax2.h | 1 |
4 files changed, 27 insertions, 0 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 4de1bbfbb..fa635242a 100755 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -1577,6 +1577,22 @@ static int auto_congest(void *nothing) return 0; } +static unsigned int iax2_datetime(void) +{ + time_t t; + struct tm tm; + unsigned int tmp; + time(&t); + localtime_r(&t, &tm); + tmp = (tm.tm_sec >> 1) & 0x1f; /* 5 bits of seconds */ + tmp |= (tm.tm_min & 0x3f) << 5; /* 6 bits of minutes */ + tmp |= (tm.tm_hour & 0x1f) << 11; /* 5 bits of hours */ + tmp |= (tm.tm_mday & 0x1f) << 16; /* 5 bits of day of month */ + tmp |= ((tm.tm_mon + 1) & 0xf) << 21; /* 4 bits of month */ + tmp |= ((tm.tm_year - 100) & 0x7f) << 25; /* 7 bits of year */ + return tmp; +} + static int iax2_call(struct ast_channel *c, char *dest, int timeout) { struct sockaddr_in sin; @@ -1697,6 +1713,7 @@ static int iax2_call(struct ast_channel *c, char *dest, int timeout) iax_ie_append_int(&ied, IAX_IE_FORMAT, c->nativeformats); iax_ie_append_int(&ied, IAX_IE_CAPABILITY, p->capability); iax_ie_append_short(&ied, IAX_IE_ADSICPE, c->adsicpe); + iax_ie_append_int(&ied, IAX_IE_DATETIME, iax2_datetime()); /* Transmit the string in a "NEW" request */ #if 0 /* XXX We have no equivalent XXX */ diff --git a/channels/iax2-parser.c b/channels/iax2-parser.c index 4d9244ba9..5b78a50c4 100755 --- a/channels/iax2-parser.c +++ b/channels/iax2-parser.c @@ -119,6 +119,7 @@ static struct iax2_ie { { IAX_IE_RDNIS, "REFERRING DNIS", dump_string }, { IAX_IE_PROVISIONING, "PROVISIONING" }, { IAX_IE_AESPROVISIONING, "AES PROVISIONING" }, + { IAX_IE_DATETIME, "DATE TIME", dump_int }, }; const char *iax_ie2str(int ie) @@ -499,6 +500,13 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen) } else ies->transferid = ntohl(*((unsigned int *)(data + 2))); break; + case IAX_IE_DATETIME: + if (len != sizeof(unsigned int)) { + snprintf(tmp, sizeof(tmp), "Expecting date/time to be %d bytes long but was %d\n", sizeof(unsigned int), len); + errorf(tmp); + } else + ies->datetime = ntohl(*((unsigned int *)(data + 2))); + break; default: snprintf(tmp, sizeof(tmp), "Ignoring unknown information element '%s' (%d) of length %d\n", iax_ie2str(ie), ie, len); errorf(tmp); diff --git a/channels/iax2-parser.h b/channels/iax2-parser.h index 9f20a1817..0e74df3e3 100755 --- a/channels/iax2-parser.h +++ b/channels/iax2-parser.h @@ -43,6 +43,7 @@ struct iax_ies { int autoanswer; int musiconhold; unsigned int transferid; + unsigned int datetime; }; #define DIRECTION_INGRESS 1 diff --git a/channels/iax2.h b/channels/iax2.h index 36b127bf1..c9cf280ca 100755 --- a/channels/iax2.h +++ b/channels/iax2.h @@ -103,6 +103,7 @@ #define IAX_IE_RDNIS 28 /* Referring DNIS -- string */ #define IAX_IE_PROVISIONING 29 /* Provisioning info */ #define IAX_IE_AESPROVISIONING 30 /* AES Provisioning info */ +#define IAX_IE_DATETIME 31 /* Date/Time */ #define IAX_AUTH_PLAINTEXT (1 << 0) #define IAX_AUTH_MD5 (1 << 1) |