forked from lda/telodendria
Start work on param parsing.
This commit is contained in:
parent
485941e8a8
commit
685b7c016d
2 changed files with 97 additions and 2 deletions
91
src/Http.c
91
src/Http.c
|
@ -27,6 +27,9 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <Constants.h>
|
||||
#include <HashMap.h>
|
||||
|
||||
const char *
|
||||
HttpRequestMethodToString(const HttpRequestMethod method)
|
||||
{
|
||||
|
@ -226,7 +229,7 @@ HttpUrlEncode(char *str)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
size = 16;
|
||||
size = TELODENDRIA_STRING_CHUNK;
|
||||
len = 0;
|
||||
encoded = malloc(size);
|
||||
if (!encoded)
|
||||
|
@ -242,7 +245,7 @@ HttpUrlEncode(char *str)
|
|||
{
|
||||
char *tmp;
|
||||
|
||||
size *= 2;
|
||||
size += TELODENDRIA_STRING_CHUNK;
|
||||
tmp = realloc(encoded, size);
|
||||
if (!tmp)
|
||||
{
|
||||
|
@ -360,3 +363,87 @@ HttpUrlDecode(char *str)
|
|||
|
||||
return decoded;
|
||||
}
|
||||
|
||||
HashMap *
|
||||
HttpParamDecode(char *str)
|
||||
{
|
||||
HashMap *decoded;
|
||||
|
||||
if (!str)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
decoded = HashMapCreate();
|
||||
if (!decoded)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (*str)
|
||||
{
|
||||
char *key;
|
||||
char *val;
|
||||
char *decVal;
|
||||
|
||||
decVal = HttpParamDecode(val);
|
||||
if (!decVal)
|
||||
{
|
||||
/* Memory error */
|
||||
}
|
||||
|
||||
free(val);
|
||||
str++;
|
||||
}
|
||||
|
||||
return decoded;
|
||||
}
|
||||
|
||||
char *
|
||||
HttpParamEncode(HashMap *params)
|
||||
{
|
||||
char *key;
|
||||
char *val;
|
||||
|
||||
size_t len;
|
||||
size_t size = TELODENDRIA_STRING_CHUNK;
|
||||
char *encoded;
|
||||
|
||||
if (!params)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
len = 0;
|
||||
encoded = malloc(size);
|
||||
|
||||
if (!encoded)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (HashMapIterate(params, &key, (void *) &val))
|
||||
{
|
||||
/* Print key */
|
||||
|
||||
/* Print = */
|
||||
|
||||
/* Print encoded value */
|
||||
|
||||
char *encVal = HttpParamEncode(val);
|
||||
if (!encVal)
|
||||
{
|
||||
/* Memory error */
|
||||
free(encoded);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
free(encVal);
|
||||
|
||||
/* Print & */
|
||||
}
|
||||
|
||||
/* Overwrite last & */
|
||||
|
||||
return encoded;
|
||||
}
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
#ifndef TELODENDRIA_HTTP_H
|
||||
#define TELODENDRIA_HTTP_H
|
||||
|
||||
#include <HashMap.h>
|
||||
|
||||
typedef enum HttpRequestMethod
|
||||
{
|
||||
HTTP_METHOD_UNKNOWN,
|
||||
|
@ -115,4 +117,10 @@ extern char *
|
|||
extern char *
|
||||
HttpUrlDecode(char *);
|
||||
|
||||
extern HashMap *
|
||||
HttpParamDecode(char *);
|
||||
|
||||
extern char *
|
||||
HttpParamEncode(HashMap *);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue