mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 10:47:18 +00:00 
			
		
		
		
	Simplify endianness and fix for unaligned reads (bug #3867)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5295 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		
							
								
								
									
										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 */ | ||||
|   | ||||
							
								
								
									
										50
									
								
								include/asterisk/endian.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										50
									
								
								include/asterisk/endian.h
									
									
									
									
									
										Executable file
									
								
							| @@ -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]; | ||||
|   | ||||
							
								
								
									
										95
									
								
								include/asterisk/unaligned.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										95
									
								
								include/asterisk/unaligned.h
									
									
									
									
									
										Executable file
									
								
							| @@ -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
	
	Block a user