Files
snapclient/components/audio_sal/audio_url.c
Carlos 30d2e54dab - completely drop ADF but copy necessary parts
o copy component audio_board from ADF and create custom component from it
  o copy component audio_hal from ADF and create custom component from it
  o copy component audio_sal from ADF and create custom component from it
  o copy component esp_peripherals from ADF and create custom component from it
- add fLaC support through xiph's original repository as a git module
2021-09-05 20:20:36 +02:00

67 lines
1.6 KiB
C

#include "audio_error.h"
#include "audio_mem.h"
#include "esp_log.h"
#include <ctype.h>
#include <string.h>
static char *TAG = "AUDIO_URL";
static unsigned char
char_to_hex (unsigned char x)
{
return x > 9 ? x + 0x37 : x + 0x30;
}
char *
audio_url_encode (const char *str)
{
int out_len = (strlen (str) + 1) * 3;
char *final = audio_malloc (out_len);
AUDIO_MEM_CHECK (TAG, final, return NULL);
char *tmp = final;
for (size_t i = 0; i < strlen (str); i++)
{
if (isalnum ((unsigned char)str[i]) || (str[i] == '-') || (str[i] == '_')
|| (str[i] == '.') || (str[i] == '!') || (str[i] == '@')
|| (str[i] == '#') || (str[i] == '$') || (str[i] == '&')
|| (str[i] == '*') || (str[i] == '(') || (str[i] == ')')
|| (str[i] == '=') || (str[i] == ':') || (str[i] == '/')
|| (str[i] == ',') || (str[i] == ';') || (str[i] == '?')
|| (str[i] == '+') || (str[i] == '\'') || (str[i] == '~'))
{
*final++ = str[i];
}
else
{
*final++ = '%';
*final++ = char_to_hex ((unsigned char)str[i] >> 4);
*final++ = char_to_hex ((unsigned char)str[i] % 16);
}
}
*final = 0;
return tmp;
}
char *
audio_url_decode (const char *str)
{
char *final = audio_malloc (strlen (str) + 1);
AUDIO_MEM_CHECK (TAG, final, return NULL);
char *tmp = final;
while (*str)
{
if (*str == '%')
{
char buffer[3] = { str[1], str[2], 0 };
*final++ = strtol (buffer, NULL, 16);
str += 3;
}
else
{
*final++ = *str++;
}
}
*final = 0;
return tmp;
}