diff options
Diffstat (limited to 'nanohttp')
-rw-r--r-- | nanohttp/nanohttp-client.c | 4 | ||||
-rw-r--r-- | nanohttp/nanohttp-common.c | 44 | ||||
-rw-r--r-- | nanohttp/nanohttp-common.h | 11 |
3 files changed, 55 insertions, 4 deletions
diff --git a/nanohttp/nanohttp-client.c b/nanohttp/nanohttp-client.c index 14b024f..f670c71 100644 --- a/nanohttp/nanohttp-client.c +++ b/nanohttp/nanohttp-client.c @@ -1,5 +1,5 @@ /****************************************************************** - * $Id: nanohttp-client.c,v 1.5 2003/12/18 11:14:37 snowdrop Exp $ + * $Id: nanohttp-client.c,v 1.6 2003/12/18 12:23:44 snowdrop Exp $ * * CSOAP Project: A http client/server library in C * Copyright (C) 2003 Ferhat Ayaz @@ -375,7 +375,7 @@ int httpc_talk_to_server(hreq_method method, httpc_conn_t *conn, const char *url /* Check if server communicates with content-length */ content_length_str = - hpairnode_get(res->header, HEADER_CONTENT_LENGTH); + hpairnode_get_ignore_case(res->header, HEADER_CONTENT_LENGTH); if (content_length_str != NULL) { diff --git a/nanohttp/nanohttp-common.c b/nanohttp/nanohttp-common.c index 4c196a9..d7396d6 100644 --- a/nanohttp/nanohttp-common.c +++ b/nanohttp/nanohttp-common.c @@ -1,5 +1,5 @@ /****************************************************************** - * $Id: nanohttp-common.c,v 1.4 2003/12/18 11:14:37 snowdrop Exp $ + * $Id: nanohttp-common.c,v 1.5 2003/12/18 12:23:44 snowdrop Exp $ * * CSOAP Project: A http client/server library in C * Copyright (C) 2003 Ferhat Ayaz @@ -106,6 +106,29 @@ void log_error(const char* FUNC, const char *format, ...) } +/* ----------------------------------------- + FUNCTION: strcmpigcase + ------------------------------------------ */ +int strcmpigcase(const char *s1, const char *s2) +{ + int l1, l2, i; + + if (s1 == NULL && s2 == NULL) return 1; + if (s1 == NULL || s2 == NULL) return 0; + + l1 = strlen(s1); + l2 = strlen(s2); + + if (l1 != l2) return; + + for (i=0;i<l1;i++) + if (toupper(s1[i]) != toupper(s2[i])) + return 0; + + return 1; +} + + hpair_t *hpairnode_new(const char* key, const char* value, hpair_t *next) { hpair_t *pair; @@ -232,6 +255,25 @@ void hpairnode_free(hpair_t *pair) } +char *hpairnode_get_ignore_case(hpair_t *pair, const char* key) +{ + if (key == NULL) { + log_error1("key is NULL"); + return NULL; + } + + while (pair != NULL) { + if (pair->key != NULL) { + if (strcmpigcase(pair->key, key)) { + return pair->value; + } + } + pair = pair->next; + } + + return NULL; +} + char *hpairnode_get(hpair_t *pair, const char* key) { if (key == NULL) { diff --git a/nanohttp/nanohttp-common.h b/nanohttp/nanohttp-common.h index 326a4e4..79db58b 100644 --- a/nanohttp/nanohttp-common.h +++ b/nanohttp/nanohttp-common.h @@ -1,5 +1,5 @@ /****************************************************************** - * $Id: nanohttp-common.h,v 1.4 2003/12/18 11:14:37 snowdrop Exp $ + * $Id: nanohttp-common.h,v 1.5 2003/12/18 12:23:44 snowdrop Exp $ * * CSOAP Project: A http client/server library in C * Copyright (C) 2003 Ferhat Ayaz @@ -38,6 +38,14 @@ #define SAVE_STR(str) ((str==0)?("(null)"):(str)) #endif + +/* + string function to compare strings ignoring case + Returns 1 if s1 equals s2 and 0 otherwise. + */ +int strcmpigcase(const char *s1, const char *s2); + + /* hpairnode_t represents a pair (key, value) pair. This is also a linked list. @@ -54,6 +62,7 @@ struct hpair hpair_t *hpairnode_new(const char* key, const char* value, hpair_t* next); void hpairnode_free(hpair_t *pair); char *hpairnode_get(hpair_t *pair, const char* key); +char *hpairnode_get_ignore_case(hpair_t *pair, const char* key); hpair_t* hpairnode_copy(const hpair_t *src); hpair_t* hpairnode_copy_deep(const hpair_t *src); void hpairnode_dump_deep(hpair_t *pair); |