res_rtp_asterisk: Avoid absolute value on unsigned subtraction.
[asterisk/asterisk.git] / channels / iax2 / parser.c
index 6eda982..8683938 100644 (file)
@@ -20,7 +20,7 @@
  *
  * \brief Implementation of Inter-Asterisk eXchange Protocol, v 2
  *
- * \author Mark Spencer <markster@digium.com> 
+ * \author Mark Spencer <markster@digium.com>
  */
 
 /*** MODULEINFO
@@ -52,7 +52,11 @@ static int frames = 0;
 static int iframes = 0;
 static int oframes = 0;
 
-#if !defined(LOW_MEMORY)
+#if (defined(LOW_MEMORY) || defined(MALLOC_DEBUG)) && !defined(NO_FRAME_CACHE)
+#define NO_FRAME_CACHE
+#endif
+
+#if !defined(NO_FRAME_CACHE)
 static void frame_cache_cleanup(void *data);
 
 /*! \brief A per-thread cache of iax_frame structures */
@@ -136,7 +140,7 @@ static void dump_prefs(char *output, int maxlen, void *value, int len)
 
        strncpy(output, value, maxlen);
        output[maxlen] = '\0';
-       
+
        iax2_codec_pref_convert(&pref, output, total_len, 0);
        memset(output,0,total_len);
        iax2_codec_pref_string(&pref, output, total_len);
@@ -147,7 +151,7 @@ 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_unaligned_uint32(value)));
        else
-               ast_copy_string(output, "Invalid INT", maxlen); 
+               ast_copy_string(output, "Invalid INT", maxlen);
 }
 
 static void dump_short(char *output, int maxlen, void *value, int len)
@@ -177,7 +181,7 @@ static void dump_datetime(char *output, int maxlen, void *value, int len)
                tm.tm_mday = (val >> 16) & 0x1f;
                tm.tm_mon  = ((val >> 21) & 0x0f) - 1;
                tm.tm_year = ((val >> 25) & 0x7f) + 100;
-               ast_strftime(output, maxlen, "%Y-%m-%d  %T", &tm); 
+               ast_strftime(output, maxlen, "%Y-%m-%d  %T", &tm);
        } else
                ast_copy_string(output, "Invalid DATETIME format!", maxlen);
 }
@@ -366,7 +370,7 @@ static void dump_prov_ies(char *output, int maxlen, unsigned char *iedata, int l
        char tmp[256];
        if (len < 2)
                return;
-       strcpy(output, "\n"); 
+       strcpy(output, "\n");
        maxlen -= strlen(output); output += strlen(output);
        while(len > 2) {
                ie = iedata[0];
@@ -415,7 +419,7 @@ static void dump_ies(unsigned char *iedata, int len)
        int x;
        int found;
        char interp[1024];
-       char tmp[1024];
+       char tmp[1046];
 
        if (len < 2)
                return;
@@ -748,14 +752,14 @@ int iax_ie_append_versioned_uint64(struct iax_ie_data *ied, unsigned char ie, un
        return iax_ie_append_raw(ied, ie, &newval, (int) sizeof(newval));
 }
 
-int iax_ie_append_int(struct iax_ie_data *ied, unsigned char ie, unsigned int value) 
+int iax_ie_append_int(struct iax_ie_data *ied, unsigned char ie, unsigned int value)
 {
        unsigned int newval;
        newval = htonl(value);
        return iax_ie_append_raw(ied, ie, &newval, (int)sizeof(newval));
 }
 
-int iax_ie_append_short(struct iax_ie_data *ied, unsigned char ie, unsigned short value) 
+int iax_ie_append_short(struct iax_ie_data *ied, unsigned char ie, unsigned short value)
 {
        unsigned short newval;
        newval = htons(value);
@@ -772,7 +776,7 @@ int iax_ie_append_byte(struct iax_ie_data *ied, unsigned char ie, unsigned char
        return iax_ie_append_raw(ied, ie, &dat, 1);
 }
 
-int iax_ie_append(struct iax_ie_data *ied, unsigned char ie) 
+int iax_ie_append(struct iax_ie_data *ied, unsigned char ie)
 {
        return iax_ie_append_raw(ied, ie, NULL, 0);
 }
@@ -978,7 +982,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_unaligned_uint16(data + 2));  
+                               ies->msgcount = ntohs(get_unaligned_uint16(data + 2));
                        break;
                case IAX_IE_AUTOANSWER:
                        ies->autoanswer = 1;
@@ -1005,7 +1009,7 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
                                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_unaligned_uint16(data + 2));       
+                               ies->firmwarever = ntohs(get_unaligned_uint16(data + 2));
                        break;
                case IAX_IE_DEVICETYPE:
                        ies->devicetype = (char *)data + 2;
@@ -1058,7 +1062,7 @@ 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_unaligned_uint16(data + 2));       
+                               ies->calling_tns = ntohs(get_unaligned_uint16(data + 2));
                        break;
                case IAX_IE_RR_JITTER:
                        if (len != (int)sizeof(unsigned int)) {
@@ -1215,7 +1219,7 @@ struct iax_frame *iax_frame_new(int direction, int datalen, unsigned int cacheab
 {
        struct iax_frame *fr;
 
-#if !defined(LOW_MEMORY)
+#if !defined(NO_FRAME_CACHE)
        if (cacheable) {
                struct iax_frames *iax_frames;
                struct iax_frame *smallest;
@@ -1243,13 +1247,13 @@ struct iax_frame *iax_frame_new(int direction, int datalen, unsigned int cacheab
                                        iax_frames->size--;
                                        ast_free(smallest);
                                }
-                               if (!(fr = ast_calloc_cache(1, sizeof(*fr) + datalen))) {
+                               if (!(fr = ast_calloc(1, sizeof(*fr) + datalen))) {
                                        return NULL;
                                }
                                fr->afdatalen = datalen;
                        }
                } else {
-                       if (!(fr = ast_calloc_cache(1, sizeof(*fr) + datalen))) {
+                       if (!(fr = ast_calloc(1, sizeof(*fr) + datalen))) {
                                return NULL;
                        }
                        fr->afdatalen = datalen;
@@ -1267,12 +1271,12 @@ struct iax_frame *iax_frame_new(int direction, int datalen, unsigned int cacheab
 
        fr->direction = direction;
        fr->retrans = -1;
-       
+
        if (fr->direction == DIRECTION_INGRESS)
                ast_atomic_fetchadd_int(&iframes, 1);
        else
                ast_atomic_fetchadd_int(&oframes, 1);
-       
+
        ast_atomic_fetchadd_int(&frames, 1);
 
        return fr;
@@ -1280,7 +1284,7 @@ struct iax_frame *iax_frame_new(int direction, int datalen, unsigned int cacheab
 
 void iax_frame_free(struct iax_frame *fr)
 {
-#if !defined(LOW_MEMORY)
+#if !defined(NO_FRAME_CACHE)
        struct iax_frames *iax_frames = NULL;
 #endif
 
@@ -1295,7 +1299,7 @@ void iax_frame_free(struct iax_frame *fr)
        }
        ast_atomic_fetchadd_int(&frames, -1);
 
-#if !defined(LOW_MEMORY)
+#if !defined(NO_FRAME_CACHE)
        if (!fr->cacheable
                || !ast_opt_cache_media_frames
                || !(iax_frames = ast_threadstorage_get(&frame_cache, sizeof(*iax_frames)))) {
@@ -1319,7 +1323,7 @@ void iax_frame_free(struct iax_frame *fr)
        ast_free(fr);
 }
 
-#if !defined(LOW_MEMORY)
+#if !defined(NO_FRAME_CACHE)
 static void frame_cache_cleanup(void *data)
 {
        struct iax_frames *framelist = data;