Update IAX2 parser for sending caller info

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1599 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.0
Mark Spencer 22 years ago
parent b016beaeb1
commit 3b49a87972

@ -1577,6 +1577,22 @@ static int auto_congest(void *nothing)
return 0; 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) static int iax2_call(struct ast_channel *c, char *dest, int timeout)
{ {
struct sockaddr_in sin; 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_FORMAT, c->nativeformats);
iax_ie_append_int(&ied, IAX_IE_CAPABILITY, p->capability); iax_ie_append_int(&ied, IAX_IE_CAPABILITY, p->capability);
iax_ie_append_short(&ied, IAX_IE_ADSICPE, c->adsicpe); 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 */ /* Transmit the string in a "NEW" request */
#if 0 #if 0
/* XXX We have no equivalent XXX */ /* XXX We have no equivalent XXX */

@ -119,6 +119,7 @@ static struct iax2_ie {
{ IAX_IE_RDNIS, "REFERRING DNIS", dump_string }, { IAX_IE_RDNIS, "REFERRING DNIS", dump_string },
{ IAX_IE_PROVISIONING, "PROVISIONING" }, { IAX_IE_PROVISIONING, "PROVISIONING" },
{ IAX_IE_AESPROVISIONING, "AES PROVISIONING" }, { IAX_IE_AESPROVISIONING, "AES PROVISIONING" },
{ IAX_IE_DATETIME, "DATE TIME", dump_int },
}; };
const char *iax_ie2str(int ie) const char *iax_ie2str(int ie)
@ -499,6 +500,13 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
} else } else
ies->transferid = ntohl(*((unsigned int *)(data + 2))); ies->transferid = ntohl(*((unsigned int *)(data + 2)));
break; 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: default:
snprintf(tmp, sizeof(tmp), "Ignoring unknown information element '%s' (%d) of length %d\n", iax_ie2str(ie), ie, len); snprintf(tmp, sizeof(tmp), "Ignoring unknown information element '%s' (%d) of length %d\n", iax_ie2str(ie), ie, len);
errorf(tmp); errorf(tmp);

@ -43,6 +43,7 @@ struct iax_ies {
int autoanswer; int autoanswer;
int musiconhold; int musiconhold;
unsigned int transferid; unsigned int transferid;
unsigned int datetime;
}; };
#define DIRECTION_INGRESS 1 #define DIRECTION_INGRESS 1

@ -103,6 +103,7 @@
#define IAX_IE_RDNIS 28 /* Referring DNIS -- string */ #define IAX_IE_RDNIS 28 /* Referring DNIS -- string */
#define IAX_IE_PROVISIONING 29 /* Provisioning info */ #define IAX_IE_PROVISIONING 29 /* Provisioning info */
#define IAX_IE_AESPROVISIONING 30 /* AES 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_PLAINTEXT (1 << 0)
#define IAX_AUTH_MD5 (1 << 1) #define IAX_AUTH_MD5 (1 << 1)

Loading…
Cancel
Save