|
|
@ -573,7 +573,7 @@ void iax_set_error(void (*func)(const char *))
|
|
|
|
errorf = func;
|
|
|
|
errorf = func;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
|
|
|
|
int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
/* Parse data into information elements */
|
|
|
|
/* Parse data into information elements */
|
|
|
|
int len;
|
|
|
|
int len;
|
|
|
@ -595,28 +595,28 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
switch(ie) {
|
|
|
|
switch(ie) {
|
|
|
|
case IAX_IE_CALLED_NUMBER:
|
|
|
|
case IAX_IE_CALLED_NUMBER:
|
|
|
|
ies->called_number = data + 2;
|
|
|
|
ies->called_number = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_CALLING_NUMBER:
|
|
|
|
case IAX_IE_CALLING_NUMBER:
|
|
|
|
ies->calling_number = data + 2;
|
|
|
|
ies->calling_number = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_CALLING_ANI:
|
|
|
|
case IAX_IE_CALLING_ANI:
|
|
|
|
ies->calling_ani = data + 2;
|
|
|
|
ies->calling_ani = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_CALLING_NAME:
|
|
|
|
case IAX_IE_CALLING_NAME:
|
|
|
|
ies->calling_name = data + 2;
|
|
|
|
ies->calling_name = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_CALLED_CONTEXT:
|
|
|
|
case IAX_IE_CALLED_CONTEXT:
|
|
|
|
ies->called_context = data + 2;
|
|
|
|
ies->called_context = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_USERNAME:
|
|
|
|
case IAX_IE_USERNAME:
|
|
|
|
ies->username = data + 2;
|
|
|
|
ies->username = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_PASSWORD:
|
|
|
|
case IAX_IE_PASSWORD:
|
|
|
|
ies->password = data + 2;
|
|
|
|
ies->password = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_CODEC_PREFS:
|
|
|
|
case IAX_IE_CODEC_PREFS:
|
|
|
|
ies->codec_prefs = data + 2;
|
|
|
|
ies->codec_prefs = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_CAPABILITY:
|
|
|
|
case IAX_IE_CAPABILITY:
|
|
|
|
if (len != (int)sizeof(unsigned int)) {
|
|
|
|
if (len != (int)sizeof(unsigned int)) {
|
|
|
@ -633,7 +633,7 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
|
|
|
|
ies->format = ntohl(get_unaligned_uint32(data + 2));
|
|
|
|
ies->format = ntohl(get_unaligned_uint32(data + 2));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_LANGUAGE:
|
|
|
|
case IAX_IE_LANGUAGE:
|
|
|
|
ies->language = data + 2;
|
|
|
|
ies->language = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_VERSION:
|
|
|
|
case IAX_IE_VERSION:
|
|
|
|
if (len != (int)sizeof(unsigned short)) {
|
|
|
|
if (len != (int)sizeof(unsigned short)) {
|
|
|
@ -657,10 +657,10 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
|
|
|
|
ies->samprate = ntohs(get_unaligned_uint16(data + 2));
|
|
|
|
ies->samprate = ntohs(get_unaligned_uint16(data + 2));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_DNID:
|
|
|
|
case IAX_IE_DNID:
|
|
|
|
ies->dnid = data + 2;
|
|
|
|
ies->dnid = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_RDNIS:
|
|
|
|
case IAX_IE_RDNIS:
|
|
|
|
ies->rdnis = data + 2;
|
|
|
|
ies->rdnis = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_AUTHMETHODS:
|
|
|
|
case IAX_IE_AUTHMETHODS:
|
|
|
|
if (len != (int)sizeof(unsigned short)) {
|
|
|
|
if (len != (int)sizeof(unsigned short)) {
|
|
|
@ -677,13 +677,13 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
|
|
|
|
ies->encmethods = ntohs(get_unaligned_uint16(data + 2));
|
|
|
|
ies->encmethods = ntohs(get_unaligned_uint16(data + 2));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_CHALLENGE:
|
|
|
|
case IAX_IE_CHALLENGE:
|
|
|
|
ies->challenge = data + 2;
|
|
|
|
ies->challenge = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_MD5_RESULT:
|
|
|
|
case IAX_IE_MD5_RESULT:
|
|
|
|
ies->md5_result = data + 2;
|
|
|
|
ies->md5_result = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_RSA_RESULT:
|
|
|
|
case IAX_IE_RSA_RESULT:
|
|
|
|
ies->rsa_result = data + 2;
|
|
|
|
ies->rsa_result = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_APPARENT_ADDR:
|
|
|
|
case IAX_IE_APPARENT_ADDR:
|
|
|
|
ies->apparent_addr = ((struct sockaddr_in *)(data + 2));
|
|
|
|
ies->apparent_addr = ((struct sockaddr_in *)(data + 2));
|
|
|
@ -710,7 +710,7 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
|
|
|
|
ies->callno = ntohs(get_unaligned_uint16(data + 2));
|
|
|
|
ies->callno = ntohs(get_unaligned_uint16(data + 2));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_CAUSE:
|
|
|
|
case IAX_IE_CAUSE:
|
|
|
|
ies->cause = data + 2;
|
|
|
|
ies->cause = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_CAUSECODE:
|
|
|
|
case IAX_IE_CAUSECODE:
|
|
|
|
if (len != 1) {
|
|
|
|
if (len != 1) {
|
|
|
@ -763,10 +763,10 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
|
|
|
|
ies->firmwarever = ntohs(get_unaligned_uint16(data + 2));
|
|
|
|
ies->firmwarever = ntohs(get_unaligned_uint16(data + 2));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_DEVICETYPE:
|
|
|
|
case IAX_IE_DEVICETYPE:
|
|
|
|
ies->devicetype = data + 2;
|
|
|
|
ies->devicetype = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_SERVICEIDENT:
|
|
|
|
case IAX_IE_SERVICEIDENT:
|
|
|
|
ies->serviceident = data + 2;
|
|
|
|
ies->serviceident = (char *)data + 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_FWBLOCKDESC:
|
|
|
|
case IAX_IE_FWBLOCKDESC:
|
|
|
|
if (len != (int)sizeof(unsigned int)) {
|
|
|
|
if (len != (int)sizeof(unsigned int)) {
|
|
|
@ -776,11 +776,11 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
|
|
|
|
ies->fwdesc = ntohl(get_unaligned_uint32(data + 2));
|
|
|
|
ies->fwdesc = ntohl(get_unaligned_uint32(data + 2));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_FWBLOCKDATA:
|
|
|
|
case IAX_IE_FWBLOCKDATA:
|
|
|
|
ies->fwdata = (unsigned char *)data + 2;
|
|
|
|
ies->fwdata = data + 2;
|
|
|
|
ies->fwdatalen = len;
|
|
|
|
ies->fwdatalen = len;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_ENCKEY:
|
|
|
|
case IAX_IE_ENCKEY:
|
|
|
|
ies->enckey = (unsigned char *)data + 2;
|
|
|
|
ies->enckey = data + 2;
|
|
|
|
ies->enckeylen = len;
|
|
|
|
ies->enckeylen = len;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case IAX_IE_PROVVER:
|
|
|
|
case IAX_IE_PROVVER:
|
|
|
|