if (!context) {\r
return SWITCH_STATUS_FALSE;\r
}\r
- gsm_encode(context, (void *)decoded_data, (void *)encoded_data);\r
- *encoded_data_len = 33;\r
+ if (decoded_data_len % 160 == 0) {\r
+ unsigned int new_len = 0;\r
+ gsm_signal *ddp = decoded_data;\r
+ gsm_byte *edp = encoded_data;\r
+ int x;\r
+ int loops = (int) decoded_data_len / 160;\r
+ \r
+ for(x = 0; x < loops && new_len < *encoded_data_len; x++) {\r
+ gsm_encode(context, ddp, edp);\r
+ edp += 10;\r
+ ddp += 80;\r
+ new_len += 10;\r
+ }\r
+ if( new_len <= *encoded_data_len ) {\r
+ *encoded_data_len = new_len;\r
+ } else {\r
+ switch_console_printf(SWITCH_CHANNEL_CONSOLE, "buffer overflow!!! %u >= %u\n", new_len, *encoded_data_len);\r
+ return SWITCH_STATUS_FALSE; \r
+ }\r
+ }\r
\r
return SWITCH_STATUS_SUCCESS;\r
}\r
\r
if (encoded_data_len % 33 == 0) {\r
int loops = (int) encoded_data_len / 33;\r
- char *edp = encoded_data;\r
- short *ddp = decoded_data;\r
+ gsm_byte *edp = encoded_data;\r
+ gsm_signal *ddp = decoded_data;\r
int x;\r
unsigned int new_len = 0;\r
for(x = 0; x < loops && new_len < *decoded_data_len; x++) {\r
- gsm_decode(&context, ddp, edp, 33);\r
+ gsm_decode(&context, ddp, edp);\r
ddp += 80;\r
edp += 10;\r
new_len += 320;\r