Simplify endianness and fix for unaligned reads (bug #3867)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5295 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
f2529d4563
commit
de060dd25b
22
aesopt.h
22
aesopt.h
|
@ -136,6 +136,7 @@
|
|||
#define _AESOPT_H
|
||||
|
||||
#include <asterisk/aes.h>
|
||||
#include <asterisk/endian.h>
|
||||
|
||||
/* CONFIGURATION - USE OF DEFINES
|
||||
|
||||
|
@ -146,27 +147,6 @@
|
|||
#if clauses.
|
||||
*/
|
||||
|
||||
/* PLATFORM SPECIFIC INCLUDES */
|
||||
|
||||
#if defined( __OpenBSD__ )
|
||||
# include <machine/types.h>
|
||||
# include <sys/endian.h>
|
||||
#elif defined( __FreeBSD__ ) || defined( __NetBSD__ )
|
||||
# include <sys/types.h>
|
||||
# include <sys/endian.h>
|
||||
#elif defined( BSD ) && ( BSD >= 199103 ) || defined(__APPLE__)
|
||||
# include <machine/endian.h>
|
||||
#elif defined ( SOLARIS )
|
||||
# include <solaris-compat/compat.h>
|
||||
#elif defined( __GNUC__ ) || defined( __GNU_LIBRARY__ )
|
||||
# include <endian.h>
|
||||
#if !defined(__APPLE__)
|
||||
# include <byteswap.h>
|
||||
#endif
|
||||
#elif defined( linux )
|
||||
# include <endian.h>
|
||||
#endif
|
||||
|
||||
/* BYTE ORDER IN 32-BIT WORDS
|
||||
|
||||
To obtain the highest speed on processors with 32-bit words, this code
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <asterisk/cli.h>
|
||||
#include <asterisk/utils.h>
|
||||
#include <asterisk/causes.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
@ -27,7 +28,6 @@
|
|||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <endian.h>
|
||||
|
||||
#define ALSA_PCM_NEW_HW_PARAMS_API
|
||||
#define ALSA_PCM_NEW_SW_PARAMS_API
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <asterisk/cli.h>
|
||||
#include <asterisk/utils.h>
|
||||
#include <asterisk/causes.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
@ -35,23 +36,6 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined( __OpenBSD__ )
|
||||
# include <sys/endian.h>
|
||||
#elif defined( __FreeBSD__ ) || defined( __NetBSD__ )
|
||||
# include <sys/endian.h>
|
||||
#elif defined( BSD ) && ( BSD >= 199103 ) || defined(__APPLE__)
|
||||
# include <machine/endian.h>
|
||||
#elif defined ( SOLARIS )
|
||||
# include <solaris-compat/compat.h>
|
||||
#elif defined( __GNUC__ ) || defined( __GNU_LIBRARY__ )
|
||||
# include <endian.h>
|
||||
#if !defined(__APPLE__)
|
||||
# include <byteswap.h>
|
||||
#endif
|
||||
#elif defined( linux )
|
||||
# include <endian.h>
|
||||
#endif
|
||||
|
||||
#ifdef __linux
|
||||
#include <linux/soundcard.h>
|
||||
#elif defined(__FreeBSD__)
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <netinet/in.h>
|
||||
#include <asterisk/frame.h>
|
||||
#include <asterisk/utils.h>
|
||||
#include <asterisk/unaligned.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -30,22 +31,6 @@ static int frames = 0;
|
|||
static int iframes = 0;
|
||||
static int oframes = 0;
|
||||
|
||||
#if defined(SOLARIS) && defined(__sparc__)
|
||||
static unsigned int get_uint32(unsigned char *p)
|
||||
{
|
||||
return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
|
||||
}
|
||||
|
||||
static unsigned short get_uint16(unsigned char *p)
|
||||
{
|
||||
return (p[0] << 8) | p[1] ;
|
||||
}
|
||||
|
||||
#else
|
||||
#define get_uint32(p) (*((unsigned int *)(p)))
|
||||
#define get_uint16(p) (*((unsigned short *)(p)))
|
||||
#endif
|
||||
|
||||
static void internaloutput(const char *str)
|
||||
{
|
||||
fputs(str, stdout);
|
||||
|
@ -102,7 +87,7 @@ static void dump_prefs(char *output, int maxlen, void *value, int len)
|
|||
static void dump_int(char *output, int maxlen, void *value, int len)
|
||||
{
|
||||
if (len == (int)sizeof(unsigned int))
|
||||
snprintf(output, maxlen, "%lu", (unsigned long)ntohl(get_uint32(value)));
|
||||
snprintf(output, maxlen, "%lu", (unsigned long)ntohl(get_unaligned_uint32(value)));
|
||||
else
|
||||
snprintf(output, maxlen, "Invalid INT");
|
||||
}
|
||||
|
@ -110,7 +95,7 @@ static void dump_int(char *output, int maxlen, void *value, int len)
|
|||
static void dump_short(char *output, int maxlen, void *value, int len)
|
||||
{
|
||||
if (len == (int)sizeof(unsigned short))
|
||||
snprintf(output, maxlen, "%d", ntohs(get_uint16(value)));
|
||||
snprintf(output, maxlen, "%d", ntohs(get_unaligned_uint16(value)));
|
||||
else
|
||||
snprintf(output, maxlen, "Invalid SHORT");
|
||||
}
|
||||
|
@ -140,8 +125,8 @@ static void dump_prov_flags(char *output, int maxlen, void *value, int len)
|
|||
{
|
||||
char buf[256] = "";
|
||||
if (len == (int)sizeof(unsigned int))
|
||||
snprintf(output, maxlen, "%lu (%s)", (unsigned long)ntohl(get_uint32(value)),
|
||||
iax_provflags2str(buf, sizeof(buf), ntohl(get_uint32(value))));
|
||||
snprintf(output, maxlen, "%lu (%s)", (unsigned long)ntohl(get_unaligned_uint32(value)),
|
||||
iax_provflags2str(buf, sizeof(buf), ntohl(get_unaligned_uint32(value))));
|
||||
else
|
||||
snprintf(output, maxlen, "Invalid INT");
|
||||
}
|
||||
|
@ -600,14 +585,14 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expecting capability to be %d bytes long but was %d\n", (int)sizeof(unsigned int), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->capability = ntohl(get_uint32(data + 2));
|
||||
ies->capability = ntohl(get_unaligned_uint32(data + 2));
|
||||
break;
|
||||
case IAX_IE_FORMAT:
|
||||
if (len != (int)sizeof(unsigned int)) {
|
||||
snprintf(tmp, (int)sizeof(tmp), "Expecting format to be %d bytes long but was %d\n", (int)sizeof(unsigned int), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->format = ntohl(get_uint32(data + 2));
|
||||
ies->format = ntohl(get_unaligned_uint32(data + 2));
|
||||
break;
|
||||
case IAX_IE_LANGUAGE:
|
||||
ies->language = data + 2;
|
||||
|
@ -617,21 +602,21 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expecting version to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->version = ntohs(get_uint16(data + 2));
|
||||
ies->version = ntohs(get_unaligned_uint16(data + 2));
|
||||
break;
|
||||
case IAX_IE_ADSICPE:
|
||||
if (len != (int)sizeof(unsigned short)) {
|
||||
snprintf(tmp, (int)sizeof(tmp), "Expecting adsicpe to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->adsicpe = ntohs(get_uint16(data + 2));
|
||||
ies->adsicpe = ntohs(get_unaligned_uint16(data + 2));
|
||||
break;
|
||||
case IAX_IE_SAMPLINGRATE:
|
||||
if (len != (int)sizeof(unsigned short)) {
|
||||
snprintf(tmp, (int)sizeof(tmp), "Expecting samplingrate to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->samprate = ntohs(get_uint16(data + 2));
|
||||
ies->samprate = ntohs(get_unaligned_uint16(data + 2));
|
||||
break;
|
||||
case IAX_IE_DNID:
|
||||
ies->dnid = data + 2;
|
||||
|
@ -644,14 +629,14 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expecting authmethods to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->authmethods = ntohs(get_uint16(data + 2));
|
||||
ies->authmethods = ntohs(get_unaligned_uint16(data + 2));
|
||||
break;
|
||||
case IAX_IE_ENCRYPTION:
|
||||
if (len != (int)sizeof(unsigned short)) {
|
||||
snprintf(tmp, (int)sizeof(tmp), "Expecting encryption to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->encmethods = ntohs(get_uint16(data + 2));
|
||||
ies->encmethods = ntohs(get_unaligned_uint16(data + 2));
|
||||
break;
|
||||
case IAX_IE_CHALLENGE:
|
||||
ies->challenge = data + 2;
|
||||
|
@ -670,21 +655,21 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expecting refresh to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->refresh = ntohs(get_uint16(data + 2));
|
||||
ies->refresh = ntohs(get_unaligned_uint16(data + 2));
|
||||
break;
|
||||
case IAX_IE_DPSTATUS:
|
||||
if (len != (int)sizeof(unsigned short)) {
|
||||
snprintf(tmp, (int)sizeof(tmp), "Expecting dpstatus to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->dpstatus = ntohs(get_uint16(data + 2));
|
||||
ies->dpstatus = ntohs(get_unaligned_uint16(data + 2));
|
||||
break;
|
||||
case IAX_IE_CALLNO:
|
||||
if (len != (int)sizeof(unsigned short)) {
|
||||
snprintf(tmp, (int)sizeof(tmp), "Expecting callno to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->callno = ntohs(get_uint16(data + 2));
|
||||
ies->callno = ntohs(get_unaligned_uint16(data + 2));
|
||||
break;
|
||||
case IAX_IE_CAUSE:
|
||||
ies->cause = data + 2;
|
||||
|
@ -710,7 +695,7 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expecting msgcount to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->msgcount = ntohs(get_uint16(data + 2));
|
||||
ies->msgcount = ntohs(get_unaligned_uint16(data + 2));
|
||||
break;
|
||||
case IAX_IE_AUTOANSWER:
|
||||
ies->autoanswer = 1;
|
||||
|
@ -723,21 +708,21 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expecting transferid to be %d bytes long but was %d\n", (int)sizeof(unsigned int), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->transferid = ntohl(get_uint32(data + 2));
|
||||
ies->transferid = ntohl(get_unaligned_uint32(data + 2));
|
||||
break;
|
||||
case IAX_IE_DATETIME:
|
||||
if (len != (int)sizeof(unsigned int)) {
|
||||
snprintf(tmp, (int)sizeof(tmp), "Expecting date/time to be %d bytes long but was %d\n", (int)sizeof(unsigned int), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->datetime = ntohl(get_uint32(data + 2));
|
||||
ies->datetime = ntohl(get_unaligned_uint32(data + 2));
|
||||
break;
|
||||
case IAX_IE_FIRMWAREVER:
|
||||
if (len != (int)sizeof(unsigned short)) {
|
||||
snprintf(tmp, (int)sizeof(tmp), "Expecting firmwarever to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->firmwarever = ntohs(get_uint16(data + 2));
|
||||
ies->firmwarever = ntohs(get_unaligned_uint16(data + 2));
|
||||
break;
|
||||
case IAX_IE_DEVICETYPE:
|
||||
ies->devicetype = data + 2;
|
||||
|
@ -750,7 +735,7 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expected block desc to be %d bytes long but was %d\n", (int)sizeof(unsigned int), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->fwdesc = ntohl(get_uint32(data + 2));
|
||||
ies->fwdesc = ntohl(get_unaligned_uint32(data + 2));
|
||||
break;
|
||||
case IAX_IE_FWBLOCKDATA:
|
||||
ies->fwdata = data + 2;
|
||||
|
@ -766,7 +751,7 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
errorf(tmp);
|
||||
} else {
|
||||
ies->provverpres = 1;
|
||||
ies->provver = ntohl(get_uint32(data + 2));
|
||||
ies->provver = ntohl(get_unaligned_uint32(data + 2));
|
||||
}
|
||||
break;
|
||||
case IAX_IE_CALLINGPRES:
|
||||
|
@ -790,14 +775,14 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expecting callingtns to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else
|
||||
ies->calling_tns = ntohs(get_uint16(data + 2));
|
||||
ies->calling_tns = ntohs(get_unaligned_uint16(data + 2));
|
||||
break;
|
||||
case IAX_IE_RR_JITTER:
|
||||
if (len != (int)sizeof(unsigned int)) {
|
||||
snprintf(tmp, (int)sizeof(tmp), "Expected jitter rr to be %d bytes long but was %d\n", (int)sizeof(unsigned int), len);
|
||||
errorf(tmp);
|
||||
} else {
|
||||
ies->rr_jitter = ntohl(get_uint32(data + 2));
|
||||
ies->rr_jitter = ntohl(get_unaligned_uint32(data + 2));
|
||||
}
|
||||
break;
|
||||
case IAX_IE_RR_LOSS:
|
||||
|
@ -805,7 +790,7 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expected loss rr to be %d bytes long but was %d\n", (int)sizeof(unsigned int), len);
|
||||
errorf(tmp);
|
||||
} else {
|
||||
ies->rr_loss = ntohl(get_uint32(data + 2));
|
||||
ies->rr_loss = ntohl(get_unaligned_uint32(data + 2));
|
||||
}
|
||||
break;
|
||||
case IAX_IE_RR_PKTS:
|
||||
|
@ -813,7 +798,7 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expected packets rr to be %d bytes long but was %d\n", (int)sizeof(unsigned int), len);
|
||||
errorf(tmp);
|
||||
} else {
|
||||
ies->rr_pkts = ntohl(get_uint32(data + 2));
|
||||
ies->rr_pkts = ntohl(get_unaligned_uint32(data + 2));
|
||||
}
|
||||
break;
|
||||
case IAX_IE_RR_DELAY:
|
||||
|
@ -821,7 +806,7 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expected loss rr to be %d bytes long but was %d\n", (int)sizeof(unsigned short), len);
|
||||
errorf(tmp);
|
||||
} else {
|
||||
ies->rr_delay = ntohs(get_uint16(data + 2));
|
||||
ies->rr_delay = ntohs(get_unaligned_uint16(data + 2));
|
||||
}
|
||||
break;
|
||||
case IAX_IE_RR_DROPPED:
|
||||
|
@ -829,7 +814,7 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expected packets rr to be %d bytes long but was %d\n", (int)sizeof(unsigned int), len);
|
||||
errorf(tmp);
|
||||
} else {
|
||||
ies->rr_dropped = ntohl(get_uint32(data + 2));
|
||||
ies->rr_dropped = ntohl(get_unaligned_uint32(data + 2));
|
||||
}
|
||||
break;
|
||||
case IAX_IE_RR_OOO:
|
||||
|
@ -837,7 +822,7 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
|
|||
snprintf(tmp, (int)sizeof(tmp), "Expected packets rr to be %d bytes long but was %d\n", (int)sizeof(unsigned int), len);
|
||||
errorf(tmp);
|
||||
} else {
|
||||
ies->rr_ooo = ntohl(get_uint32(data + 2));
|
||||
ies->rr_ooo = ntohl(get_unaligned_uint32(data + 2));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
5
dns.c
5
dns.c
|
@ -19,12 +19,13 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/channel.h>
|
||||
#include <asterisk/dns.h>
|
||||
#include <asterisk/endian.h>
|
||||
|
||||
#define MAX_SIZE 4096
|
||||
|
||||
typedef struct {
|
||||
unsigned id :16; /* query identification number */
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
/* fields in third byte */
|
||||
unsigned qr: 1; /* response flag */
|
||||
unsigned opcode: 4; /* purpose of message */
|
||||
|
@ -38,7 +39,7 @@ typedef struct {
|
|||
unsigned cd: 1; /* checking disabled by resolver */
|
||||
unsigned rcode :4; /* response code */
|
||||
#endif
|
||||
#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN || __BYTE_ORDER == __PDP_ENDIAN
|
||||
/* fields in third byte */
|
||||
unsigned rd :1; /* recursion desired */
|
||||
unsigned tc :1; /* truncated message */
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/sched.h>
|
||||
#include <asterisk/module.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -24,15 +25,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define RATE_40 0
|
||||
#define RATE_32 1
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/sched.h>
|
||||
#include <asterisk/module.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -25,15 +26,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Some Ideas for this code came from makeg729e.c by Jeffrey Chilton */
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/sched.h>
|
||||
#include <asterisk/module.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -25,15 +26,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
#include "msgsm.h"
|
||||
|
||||
/* Some Ideas for this code came from makegsme.c by Jeffrey Chilton */
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/sched.h>
|
||||
#include <asterisk/module.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -25,15 +26,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Some Ideas for this code came from makeh263e.c by Jeffrey Chilton */
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/sched.h>
|
||||
#include <asterisk/module.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -27,15 +28,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Some Ideas for this code came from makeg729e.c by Jeffrey Chilton */
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <asterisk/module.h>
|
||||
#include <asterisk/image.h>
|
||||
#include <asterisk/lock.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -27,15 +28,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
static char *desc = "JPEG (Joint Picture Experts Group) Image Format";
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/sched.h>
|
||||
#include <asterisk/module.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -25,15 +26,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define BUF_SIZE 160 /* 160 samples */
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/sched.h>
|
||||
#include <asterisk/module.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -27,15 +28,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define BUF_SIZE 160 /* 160 samples */
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/sched.h>
|
||||
#include <asterisk/module.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -23,15 +24,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define BUF_SIZE 320 /* 320 samples */
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/sched.h>
|
||||
#include <asterisk/module.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -25,15 +26,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define BUF_SIZE 80 /* 160 samples */
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/sched.h>
|
||||
#include <asterisk/module.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -25,15 +26,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Some Ideas for this code came from makewave.c by Jeffrey Chilton */
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <asterisk/logger.h>
|
||||
#include <asterisk/sched.h>
|
||||
#include <asterisk/module.h>
|
||||
#include <asterisk/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -25,15 +26,6 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
#include "msgsm.h"
|
||||
|
||||
/* Some Ideas for this code came from makewave.c by Jeffrey Chilton */
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Asterisk -- A telephony toolkit for Linux.
|
||||
*
|
||||
* Asterisk internal frame definitions.
|
||||
*
|
||||
* Copyright (C) 1999 - 2005, Digium, Inc.
|
||||
*
|
||||
* Mark Spencer <markster@digium.com>
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU Lesser General Public License. Other components of
|
||||
* Asterisk are distributed under The GNU General Public License
|
||||
* only.
|
||||
*/
|
||||
|
||||
#ifndef _ASTERISK_ENDIAN_H
|
||||
#define _ASTERISK_ENDIAN_H
|
||||
|
||||
/*
|
||||
* Autodetect system endianess
|
||||
*/
|
||||
|
||||
#if defined( __OpenBSD__ )
|
||||
# include <machine/types.h>
|
||||
# include <sys/endian.h>
|
||||
#elif defined( __FreeBSD__ ) || defined( __NetBSD__ )
|
||||
# include <sys/types.h>
|
||||
# include <sys/endian.h>
|
||||
#elif defined( BSD ) && ( BSD >= 199103 ) || defined(__APPLE__)
|
||||
# include <machine/endian.h>
|
||||
#elif defined ( SOLARIS )
|
||||
# include <solaris-compat/compat.h>
|
||||
#elif defined( __GNUC__ ) || defined( __GNU_LIBRARY__ )
|
||||
# include <endian.h>
|
||||
#if !defined(__APPLE__)
|
||||
# include <byteswap.h>
|
||||
#endif
|
||||
#elif defined( linux )
|
||||
# include <endian.h>
|
||||
#endif
|
||||
|
||||
#ifndef BYTE_ORDER
|
||||
#define BYTE_ORDER __BYTE_ORDER
|
||||
#endif
|
||||
|
||||
#ifndef __BYTE_ORDER
|
||||
#error Endianess needs to be defined
|
||||
#endif
|
||||
#endif /* _ASTERISK_ENDIAN_H */
|
||||
|
|
@ -22,45 +22,7 @@ extern "C" {
|
|||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#ifdef SOLARIS
|
||||
#include "solaris-compat/compat.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Autodetect system endianess
|
||||
*/
|
||||
#ifndef __BYTE_ORDER
|
||||
#ifdef __linux__
|
||||
#include <endian.h>
|
||||
#elif defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__APPLE__)
|
||||
#if defined(__OpenBSD__)
|
||||
#include <machine/types.h>
|
||||
#endif /* __OpenBSD__ */
|
||||
#include <machine/endian.h>
|
||||
#define __BYTE_ORDER BYTE_ORDER
|
||||
#define __LITTLE_ENDIAN LITTLE_ENDIAN
|
||||
#define __BIG_ENDIAN BIG_ENDIAN
|
||||
#else
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
||||
#endif /* __LITTLE_ENDIAN */
|
||||
|
||||
#if defined(i386) || defined(__i386__)
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
||||
#endif /* defined i386 */
|
||||
|
||||
#if defined(sun) && defined(unix) && defined(sparc)
|
||||
#define __BYTE_ORDER __BIG_ENDIAN
|
||||
#endif /* sun unix sparc */
|
||||
|
||||
#endif /* linux */
|
||||
|
||||
#endif /* __BYTE_ORDER */
|
||||
|
||||
#ifndef __BYTE_ORDER
|
||||
#error Need to know endianess
|
||||
#endif /* __BYTE_ORDER */
|
||||
#include <asterisk/endian.h>
|
||||
|
||||
struct ast_codec_pref {
|
||||
char order[32];
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* Asterisk -- A telephony toolkit for Linux.
|
||||
*
|
||||
* Asterisk internal frame definitions.
|
||||
*
|
||||
* Copyright (C) 1999 - 2005, Digium, Inc.
|
||||
*
|
||||
* Mark Spencer <markster@digium.com>
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU Lesser General Public License. Other components of
|
||||
* Asterisk are distributed under The GNU General Public License
|
||||
* only.
|
||||
*/
|
||||
|
||||
#ifndef _ASTERISK_UNALIGNED_H
|
||||
#define _ASTERISK_UNALIGNED_H
|
||||
|
||||
#if defined(__cplusplus) || defined(c_plusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC__
|
||||
/* If we just tell GCC what's going on, we can trust it to behave optimally */
|
||||
static inline unsigned int get_unaligned_uint32(void *p)
|
||||
{
|
||||
struct { unsigned int d; } __attribute__((packed)) *pp = (void *)p;
|
||||
|
||||
return pp->d;
|
||||
}
|
||||
static inline unsigned short get_unaligned_uint16(void *p)
|
||||
{
|
||||
struct { unsigned short d; } __attribute__((packed)) *pp = (void *)p;
|
||||
|
||||
return pp->d;
|
||||
}
|
||||
|
||||
static inline void put_unaligned_uint32(void *p, unsigned int datum)
|
||||
{
|
||||
struct { unsigned int d; } __attribute__((packed)) *pp = (void *)p;
|
||||
|
||||
pp->d = datum;
|
||||
}
|
||||
|
||||
static inline void put_unaligned_uint16(void *p, unsigned short datum)
|
||||
{
|
||||
struct { unsigned short d; } __attribute__((packed)) *pp = (void *)p;
|
||||
|
||||
pp->d = datum;
|
||||
}
|
||||
#elif defined(SOLARIS) && defined(__sparc__)
|
||||
static inline unsigned int get_unaligned_uint32(void *p)
|
||||
{
|
||||
unsigned char *cp = p;
|
||||
|
||||
return (cp[0] << 24) | (cp[1] << 16) | (cp[2] << 8) | cp[3];
|
||||
}
|
||||
|
||||
static inline unsigned short get_unaligned_uint16(void *p)
|
||||
{
|
||||
unsigned char *cp = p;
|
||||
|
||||
return (cp[0] << 8) | cp[1] ;
|
||||
}
|
||||
|
||||
static inline void put_unaligned_uint32(void *p, unsigned int datum)
|
||||
{
|
||||
unsigned char *cp = p;
|
||||
|
||||
cp[0] = datum >> 24;
|
||||
cp[1] = datum >> 16;
|
||||
cp[2] = datum >> 8;
|
||||
cp[3] = datum;
|
||||
}
|
||||
|
||||
static inline void put_unaligned_uint16(void *p, unsigned int datum)
|
||||
{
|
||||
unsigned char *cp = p;
|
||||
|
||||
cp[0] = datum >> 8;
|
||||
cp[1] = datum;
|
||||
}
|
||||
#else /* Not GCC, not Solaris/SPARC. Assume we can handle direct load/store. */
|
||||
#define get_unaligned_uint32(p) (*((unsigned int *)(p)))
|
||||
#define get_unaligned_uint16(p) (*((unsigned short *)(p)))
|
||||
#define put_unaligned_uint32(p,d) do { unsigned int *__P = (p); *__P = d; } while(0)
|
||||
#define put_unaligned_uint16(p,d) do { unsigned short *__P = (p); *__P = d; } while(0)
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus) || defined(c_plusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* _ASTERISK_UNALIGNED_H */
|
21
md5.c
21
md5.c
|
@ -1,22 +1,5 @@
|
|||
/* MD5 checksum routines used for authentication. Not covered by GPL, but
|
||||
in the public domain as per the copyright below */
|
||||
#if defined( __OpenBSD__ )
|
||||
# include <machine/types.h>
|
||||
# include <sys/endian.h>
|
||||
#elif defined( __FreeBSD__ ) || defined( __NetBSD__ )
|
||||
# include <sys/types.h>
|
||||
# include <sys/endian.h>
|
||||
#elif defined( BSD ) && ( BSD >= 199103 ) || defined(__APPLE__)
|
||||
# include <machine/endian.h>
|
||||
#elif defined( __sparc__ ) && defined( SOLARIS )
|
||||
# define BIG_ENDIAN 4321
|
||||
# define BYTE_ORDER BIG_ENDIAN
|
||||
#else
|
||||
# include <endian.h>
|
||||
#endif
|
||||
# if __BYTE_ORDER == __BIG_ENDIAN || BYTE_ORDER == BIG_ENDIAN
|
||||
# define HIGHFIRST 1
|
||||
# endif
|
||||
|
||||
/*
|
||||
* This code implements the MD5 message-digest algorithm.
|
||||
|
@ -35,8 +18,12 @@
|
|||
* will fill a supplied 16-byte array with the digest.
|
||||
*/
|
||||
#include <string.h> /* for memcpy() */
|
||||
#include <asterisk/endian.h>
|
||||
#include <asterisk/md5.h>
|
||||
|
||||
# if __BYTE_ORDER == __BIG_ENDIAN
|
||||
# define HIGHFIRST 1
|
||||
# endif
|
||||
#ifndef HIGHFIRST
|
||||
#define byteReverse(buf, len) /* Nothing */
|
||||
#else
|
||||
|
|
19
rtp.c
19
rtp.c
|
@ -37,6 +37,7 @@
|
|||
#include <asterisk/lock.h>
|
||||
#include <asterisk/utils.h>
|
||||
#include <asterisk/cli.h>
|
||||
#include <asterisk/unaligned.h>
|
||||
|
||||
#define MAX_TIMESTAMP_SKEW 640
|
||||
|
||||
|
@ -1173,18 +1174,6 @@ int ast_rtp_sendcng(struct ast_rtp *rtp, int level)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#if defined(SOLARIS) && defined(__sparc__)
|
||||
static void put_uint32(unsigned char *buf, int i)
|
||||
{
|
||||
buf[0] = (i>>24) & 0xff;
|
||||
buf[1] = (i>>16) & 0xff;
|
||||
buf[2] = (i>>8) & 0xff;
|
||||
buf[3] = i & 0xff;
|
||||
}
|
||||
#else
|
||||
#define put_uint32(p,v) ((*((unsigned int *)(p))) = (v))
|
||||
#endif
|
||||
|
||||
static int ast_rtp_raw_write(struct ast_rtp *rtp, struct ast_frame *f, int codec)
|
||||
{
|
||||
unsigned char *rtpheader;
|
||||
|
@ -1270,9 +1259,9 @@ static int ast_rtp_raw_write(struct ast_rtp *rtp, struct ast_frame *f, int codec
|
|||
/* Get a pointer to the header */
|
||||
rtpheader = (unsigned char *)(f->data - hdrlen);
|
||||
|
||||
put_uint32(rtpheader, htonl((2 << 30) | (codec << 16) | (rtp->seqno) | (mark << 23)));
|
||||
put_uint32(rtpheader + 4, htonl(rtp->lastts));
|
||||
put_uint32(rtpheader + 8, htonl(rtp->ssrc));
|
||||
put_unaligned_uint32(rtpheader, htonl((2 << 30) | (codec << 16) | (rtp->seqno) | (mark << 23)));
|
||||
put_unaligned_uint32(rtpheader + 4, htonl(rtp->lastts));
|
||||
put_unaligned_uint32(rtpheader + 8, htonl(rtp->ssrc));
|
||||
|
||||
if (rtp->them.sin_port && rtp->them.sin_addr.s_addr) {
|
||||
res = sendto(rtp->s, (void *)rtpheader, f->datalen + hdrlen, 0, (struct sockaddr *)&rtp->them, sizeof(rtp->them));
|
||||
|
|
Reference in New Issue