diff --git a/aesopt.h b/aesopt.h index f476de09e..85ad46688 100755 --- a/aesopt.h +++ b/aesopt.h @@ -136,6 +136,7 @@ #define _AESOPT_H #include +#include /* CONFIGURATION - USE OF DEFINES @@ -146,27 +147,6 @@ #if clauses. */ -/* PLATFORM SPECIFIC INCLUDES */ - -#if defined( __OpenBSD__ ) -# include -# include -#elif defined( __FreeBSD__ ) || defined( __NetBSD__ ) -# include -# include -#elif defined( BSD ) && ( BSD >= 199103 ) || defined(__APPLE__) -# include -#elif defined ( SOLARIS ) -# include -#elif defined( __GNUC__ ) || defined( __GNU_LIBRARY__ ) -# include -#if !defined(__APPLE__) -# include -#endif -#elif defined( linux ) -# include -#endif - /* BYTE ORDER IN 32-BIT WORDS To obtain the highest speed on processors with 32-bit words, this code diff --git a/channels/chan_alsa.c b/channels/chan_alsa.c index 9811cb8d2..fb2b93b30 100755 --- a/channels/chan_alsa.c +++ b/channels/chan_alsa.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -27,7 +28,6 @@ #include #include #include -#include #define ALSA_PCM_NEW_HW_PARAMS_API #define ALSA_PCM_NEW_SW_PARAMS_API diff --git a/channels/chan_oss.c b/channels/chan_oss.c index 480408eb7..6a580d48c 100755 --- a/channels/chan_oss.c +++ b/channels/chan_oss.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -35,23 +36,6 @@ #include #include -#if defined( __OpenBSD__ ) -# include -#elif defined( __FreeBSD__ ) || defined( __NetBSD__ ) -# include -#elif defined( BSD ) && ( BSD >= 199103 ) || defined(__APPLE__) -# include -#elif defined ( SOLARIS ) -# include -#elif defined( __GNUC__ ) || defined( __GNU_LIBRARY__ ) -# include -#if !defined(__APPLE__) -# include -#endif -#elif defined( linux ) -# include -#endif - #ifdef __linux #include #elif defined(__FreeBSD__) diff --git a/channels/iax2-parser.c b/channels/iax2-parser.c index 66a69b447..3472b5008 100755 --- a/channels/iax2-parser.c +++ b/channels/iax2-parser.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -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: diff --git a/dns.c b/dns.c index 359fd9e8e..807d2c279 100755 --- a/dns.c +++ b/dns.c @@ -19,12 +19,13 @@ #include #include #include +#include #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 */ diff --git a/formats/format_g726.c b/formats/format_g726.c index d549823c8..0371a7558 100755 --- a/formats/format_g726.c +++ b/formats/format_g726.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -24,15 +25,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif #define RATE_40 0 #define RATE_32 1 diff --git a/formats/format_g729.c b/formats/format_g729.c index 5e79c00e1..46fd0953f 100755 --- a/formats/format_g729.c +++ b/formats/format_g729.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -25,15 +26,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif /* Some Ideas for this code came from makeg729e.c by Jeffrey Chilton */ diff --git a/formats/format_gsm.c b/formats/format_gsm.c index 8c3f2d517..c4a63aa68 100755 --- a/formats/format_gsm.c +++ b/formats/format_gsm.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -25,15 +26,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif #include "msgsm.h" /* Some Ideas for this code came from makegsme.c by Jeffrey Chilton */ diff --git a/formats/format_h263.c b/formats/format_h263.c index 17805b231..a676cf8fb 100755 --- a/formats/format_h263.c +++ b/formats/format_h263.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -25,15 +26,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif /* Some Ideas for this code came from makeh263e.c by Jeffrey Chilton */ diff --git a/formats/format_ilbc.c b/formats/format_ilbc.c index 571e74d67..c34099461 100755 --- a/formats/format_ilbc.c +++ b/formats/format_ilbc.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -27,15 +28,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif /* Some Ideas for this code came from makeg729e.c by Jeffrey Chilton */ diff --git a/formats/format_jpeg.c b/formats/format_jpeg.c index b08403009..d750e567e 100755 --- a/formats/format_jpeg.c +++ b/formats/format_jpeg.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -27,15 +28,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif static char *desc = "JPEG (Joint Picture Experts Group) Image Format"; diff --git a/formats/format_pcm.c b/formats/format_pcm.c index 14edd0bb6..79f5f226a 100755 --- a/formats/format_pcm.c +++ b/formats/format_pcm.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -25,15 +26,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif #define BUF_SIZE 160 /* 160 samples */ diff --git a/formats/format_pcm_alaw.c b/formats/format_pcm_alaw.c index b677bb6fe..b5f27be39 100755 --- a/formats/format_pcm_alaw.c +++ b/formats/format_pcm_alaw.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -27,15 +28,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif #define BUF_SIZE 160 /* 160 samples */ diff --git a/formats/format_sln.c b/formats/format_sln.c index d1826a366..4c0b1bc52 100755 --- a/formats/format_sln.c +++ b/formats/format_sln.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -23,15 +24,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif #define BUF_SIZE 320 /* 320 samples */ diff --git a/formats/format_vox.c b/formats/format_vox.c index 7601994fd..3413a4aa2 100755 --- a/formats/format_vox.c +++ b/formats/format_vox.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -25,15 +26,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif #define BUF_SIZE 80 /* 160 samples */ diff --git a/formats/format_wav.c b/formats/format_wav.c index c0781f6f0..66b82d468 100755 --- a/formats/format_wav.c +++ b/formats/format_wav.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -25,15 +26,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif /* Some Ideas for this code came from makewave.c by Jeffrey Chilton */ diff --git a/formats/format_wav_gsm.c b/formats/format_wav_gsm.c index b1a0c1c1e..fcd4c2ac2 100755 --- a/formats/format_wav_gsm.c +++ b/formats/format_wav_gsm.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -25,15 +26,6 @@ #include #include #include -#ifdef __linux__ -#include -#else -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#else -#include -#endif -#endif #include "msgsm.h" /* Some Ideas for this code came from makewave.c by Jeffrey Chilton */ diff --git a/include/asterisk/endian.h b/include/asterisk/endian.h new file mode 100755 index 000000000..66f796250 --- /dev/null +++ b/include/asterisk/endian.h @@ -0,0 +1,50 @@ +/* + * Asterisk -- A telephony toolkit for Linux. + * + * Asterisk internal frame definitions. + * + * Copyright (C) 1999 - 2005, Digium, Inc. + * + * Mark Spencer + * + * 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 +# include +#elif defined( __FreeBSD__ ) || defined( __NetBSD__ ) +# include +# include +#elif defined( BSD ) && ( BSD >= 199103 ) || defined(__APPLE__) +# include +#elif defined ( SOLARIS ) +# include +#elif defined( __GNUC__ ) || defined( __GNU_LIBRARY__ ) +# include +#if !defined(__APPLE__) +# include +#endif +#elif defined( linux ) +# include +#endif + +#ifndef BYTE_ORDER +#define BYTE_ORDER __BYTE_ORDER +#endif + +#ifndef __BYTE_ORDER +#error Endianess needs to be defined +#endif +#endif /* _ASTERISK_ENDIAN_H */ + diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h index 4e7ef0343..2edf248a3 100755 --- a/include/asterisk/frame.h +++ b/include/asterisk/frame.h @@ -22,45 +22,7 @@ extern "C" { #include #include - -#ifdef SOLARIS -#include "solaris-compat/compat.h" -#endif - -/* - * Autodetect system endianess - */ -#ifndef __BYTE_ORDER -#ifdef __linux__ -#include -#elif defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__APPLE__) -#if defined(__OpenBSD__) -#include -#endif /* __OpenBSD__ */ -#include -#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 struct ast_codec_pref { char order[32]; diff --git a/include/asterisk/unaligned.h b/include/asterisk/unaligned.h new file mode 100755 index 000000000..fc012049f --- /dev/null +++ b/include/asterisk/unaligned.h @@ -0,0 +1,95 @@ +/* + * Asterisk -- A telephony toolkit for Linux. + * + * Asterisk internal frame definitions. + * + * Copyright (C) 1999 - 2005, Digium, Inc. + * + * Mark Spencer + * + * 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 */ diff --git a/md5.c b/md5.c index d39e0fe1a..c60652c00 100755 --- a/md5.c +++ b/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 -# include -#elif defined( __FreeBSD__ ) || defined( __NetBSD__ ) -# include -# include -#elif defined( BSD ) && ( BSD >= 199103 ) || defined(__APPLE__) -# include -#elif defined( __sparc__ ) && defined( SOLARIS ) -# define BIG_ENDIAN 4321 -# define BYTE_ORDER BIG_ENDIAN -#else -# include -#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 /* for memcpy() */ +#include #include +# if __BYTE_ORDER == __BIG_ENDIAN +# define HIGHFIRST 1 +# endif #ifndef HIGHFIRST #define byteReverse(buf, len) /* Nothing */ #else diff --git a/rtp.c b/rtp.c index 80484fc41..d5c6b99bc 100755 --- a/rtp.c +++ b/rtp.c @@ -37,6 +37,7 @@ #include #include #include +#include #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));