2
0
Fork 0

add http_method_string() to utils

This commit is contained in:
Thomas Porzelt 2008-12-10 16:36:38 +01:00
parent 4a02223f7c
commit 20e0a9e4e8
2 changed files with 47 additions and 0 deletions

View File

@ -30,6 +30,8 @@ LI_API void path_simplify(GString *path);
/* returns the description for a given http status code and sets the len to the length of the returned string */
LI_API gchar *http_status_string(guint status_code, guint *len);
/* returns the http method as a string and sets len to the length of the returned string */
LI_API gchar *http_method_string(http_method_t method, guint *len);
/* converts a given 3 digit http status code to a gchar[3] string. e.g. 403 to {'4','0','3'} */
LI_API void http_status_to_str(gint status_code, gchar status_str[]);

View File

@ -177,6 +177,7 @@ void path_simplify(GString *path) {
*len = sizeof(x) - 1; \
return x; \
} while(0)
gchar *http_status_string(guint status_code, guint *len) {
/* RFC 2616 (as well as RFC 2518, RFC 2817, RFC 2295, RFC 2774, RFC 4918) */
switch (status_code) {
@ -243,6 +244,38 @@ gchar *http_status_string(guint status_code, guint *len) {
default: SET_LEN_AND_RETURN_STR("unknown status");
}
}
gchar *http_method_string(http_method_t method, guint *len) {
switch (method) {
case HTTP_METHOD_UNSET: SET_LEN_AND_RETURN_STR("UNKNOWN");
case HTTP_METHOD_GET: SET_LEN_AND_RETURN_STR("GET");
case HTTP_METHOD_POST: SET_LEN_AND_RETURN_STR("POST");
case HTTP_METHOD_HEAD: SET_LEN_AND_RETURN_STR("HEAD");
case HTTP_METHOD_OPTIONS: SET_LEN_AND_RETURN_STR("OPTIONS");
case HTTP_METHOD_PROPFIND: SET_LEN_AND_RETURN_STR("PROPFIND");
case HTTP_METHOD_MKCOL: SET_LEN_AND_RETURN_STR("MKCOL");
case HTTP_METHOD_PUT: SET_LEN_AND_RETURN_STR("PUT");
case HTTP_METHOD_DELETE: SET_LEN_AND_RETURN_STR("DELETE");
case HTTP_METHOD_COPY: SET_LEN_AND_RETURN_STR("COPY");
case HTTP_METHOD_MOVE: SET_LEN_AND_RETURN_STR("MOVE");
case HTTP_METHOD_PROPPATCH: SET_LEN_AND_RETURN_STR("PROPPATCH");
case HTTP_METHOD_REPORT: SET_LEN_AND_RETURN_STR("REPORT");
case HTTP_METHOD_CHECKOUT: SET_LEN_AND_RETURN_STR("CHECKOUT");
case HTTP_METHOD_CHECKIN: SET_LEN_AND_RETURN_STR("CHECKIN");
case HTTP_METHOD_VERSION_CONTROL: SET_LEN_AND_RETURN_STR("VERSION_CONTROL");
case HTTP_METHOD_UNCHECKOUT: SET_LEN_AND_RETURN_STR("UNCHECKOUT");
case HTTP_METHOD_MKACTIVITY: SET_LEN_AND_RETURN_STR("MKACTIVITY");
case HTTP_METHOD_MERGE: SET_LEN_AND_RETURN_STR("MERGE");
case HTTP_METHOD_LOCK: SET_LEN_AND_RETURN_STR("LOCK");
case HTTP_METHOD_UNLOCK: SET_LEN_AND_RETURN_STR("UNLOCK");
case HTTP_METHOD_LABEL: SET_LEN_AND_RETURN_STR("LABEL");
case HTTP_METHOD_CONNECT: SET_LEN_AND_RETURN_STR("CONNECT");
}
*len = 0;
return NULL;
}
#undef SET_LEN_AND_RETURN_STR
void http_status_to_str(gint status_code, gchar status_str[]) {
@ -512,3 +545,15 @@ GString *sockaddr_to_string(sock_addr *saddr, GString *dest) {
return dest;
}
void gstring_replace_char_with_str_len(GString *gstr, gchar c, gchar *str, guint len) {
for (guint i = 0; i < gstr->len; i++) {
if (gstr->str[i] == c) {
/* char found, replace */
gstr->str[i] = str[0];
if (len > 1)
g_string_insert_len(gstr, i, &str[1], len-1);
i += len - 1;
}
}
}