summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar snowdrop2006-01-10 11:21:55 +0000
committerGravatar snowdrop2006-01-10 11:21:55 +0000
commitc24e5b5135d745098ea6e5c4664a88ada6b99225 (patch)
tree5a699cafd54fe64e08c10f2a2912f1d800cc0a6b
parent56841f81e5c0082ec7c36e44737d07f60fada535 (diff)
downloadcsoap-c24e5b5135d745098ea6e5c4664a88ada6b99225.tar.gz
csoap-c24e5b5135d745098ea6e5c4664a88ada6b99225.tar.bz2
indent with 'indent -nut -bli0 -fca' command
-rwxr-xr-xexamples/csoap/echoattachments-client.c227
-rwxr-xr-xexamples/csoap/echoattachments-server.c64
-rw-r--r--examples/csoap/simpleclient.c61
-rw-r--r--examples/csoap/simpleserver.c64
-rw-r--r--examples/csoap/soapclient.c301
-rw-r--r--libcsoap/soap-client.c353
-rw-r--r--libcsoap/soap-client.h17
-rwxr-xr-xlibcsoap/soap-ctx.c152
-rwxr-xr-xlibcsoap/soap-ctx.h19
-rw-r--r--libcsoap/soap-env.c191
-rw-r--r--libcsoap/soap-env.h87
-rw-r--r--libcsoap/soap-fault.c96
-rw-r--r--libcsoap/soap-fault.h14
-rw-r--r--libcsoap/soap-router.c118
-rw-r--r--libcsoap/soap-router.h20
-rw-r--r--libcsoap/soap-server.c589
-rw-r--r--libcsoap/soap-server.h12
-rw-r--r--libcsoap/soap-service.c94
-rw-r--r--libcsoap/soap-service.h20
-rw-r--r--libcsoap/soap-xml.c162
-rw-r--r--libcsoap/soap-xml.h19
-rw-r--r--nanohttp/nanohttp-client.c607
-rw-r--r--nanohttp/nanohttp-client.h70
-rw-r--r--nanohttp/nanohttp-common.c1115
-rw-r--r--nanohttp/nanohttp-common.h139
-rwxr-xr-xnanohttp/nanohttp-mime.c621
-rwxr-xr-xnanohttp/nanohttp-mime.h19
-rwxr-xr-xnanohttp/nanohttp-request.c389
-rwxr-xr-xnanohttp/nanohttp-request.h18
-rwxr-xr-xnanohttp/nanohttp-response.c267
-rwxr-xr-xnanohttp/nanohttp-response.h18
-rw-r--r--nanohttp/nanohttp-server.c344
-rw-r--r--nanohttp/nanohttp-server.h60
-rw-r--r--nanohttp/nanohttp-socket.c438
-rw-r--r--nanohttp/nanohttp-socket.h68
-rw-r--r--nanohttp/nanohttp-ssl.c509
-rw-r--r--nanohttp/nanohttp-ssl.h20
-rwxr-xr-xnanohttp/nanohttp-stream.c453
-rwxr-xr-xnanohttp/nanohttp-stream.h56
39 files changed, 4163 insertions, 3728 deletions
diff --git a/examples/csoap/echoattachments-client.c b/examples/csoap/echoattachments-client.c
index 0d8e9dc..353e1d2 100755
--- a/examples/csoap/echoattachments-client.c
+++ b/examples/csoap/echoattachments-client.c
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: echoattachments-client.c,v 1.8 2004/11/02 23:09:19 snowdrop Exp $
+ * $Id: echoattachments-client.c,v 1.9 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: CSOAP examples project
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -31,66 +31,79 @@ static const char *url = "http://localhost:10000/echoattachments";
static const char *method = "echo";
-void compareFiles(const char* received, const char *sent)
+void
+compareFiles (const char *received, const char *sent)
{
FILE *f1, *f2;
char c1, c2;
- long s1,s2;
+ long s1, s2;
- printf("Opening received file to compare: '%s'\n", received);
- f1 = fopen(received, "r");
- if (!f1) {
- fprintf(stderr, "Can not open '%s'\n", received);
+ printf ("Opening received file to compare: '%s'\n", received);
+ f1 = fopen (received, "r");
+ if (!f1)
+ {
+ fprintf (stderr, "Can not open '%s'\n", received);
return;
}
- printf("Opening sent file to compare: '%s'\n", sent);
- f2 = fopen(sent, "r");
- if (!f2) {
- fprintf(stderr, "Can not open '%s'\n", sent);
- fclose(f1);
+ printf ("Opening sent file to compare: '%s'\n", sent);
+ f2 = fopen (sent, "r");
+ if (!f2)
+ {
+ fprintf (stderr, "Can not open '%s'\n", sent);
+ fclose (f1);
return;
}
- fseek(f1, 0, SEEK_END);
- fseek(f2, 0, SEEK_END);
+ fseek (f1, 0, SEEK_END);
+ fseek (f2, 0, SEEK_END);
- s1 = ftell(f1);
- s2 = ftell(f2);
+ s1 = ftell (f1);
+ s2 = ftell (f2);
- fseek(f1, 0, SEEK_SET);
- fseek(f2, 0, SEEK_SET);
+ fseek (f1, 0, SEEK_SET);
+ fseek (f2, 0, SEEK_SET);
- if (s1 > s2) {
+ if (s1 > s2)
+ {
- printf("ERROR: files are not equal! Received file is bigger\n");
- fclose(f1); fclose(f2);
- return;
+ printf ("ERROR: files are not equal! Received file is bigger\n");
+ fclose (f1);
+ fclose (f2);
+ return;
- } else if (s2 > s1) {
+ }
+ else if (s2 > s1)
+ {
- printf("ERROR: files are not equal! Sent file is bigger\n");
- fclose(f1); fclose(f2);
- return;
+ printf ("ERROR: files are not equal! Sent file is bigger\n");
+ fclose (f1);
+ fclose (f2);
+ return;
}
- while (feof(f1)) {
-
- c1= fgetc(f1);
- c2= fgetc(f2);
- if (c1 != c2){
- printf("ERROR: files are not equal! Byte compare failed\n");
- fclose(f1); fclose(f2);
+ while (feof (f1))
+ {
+
+ c1 = fgetc (f1);
+ c2 = fgetc (f2);
+ if (c1 != c2)
+ {
+ printf ("ERROR: files are not equal! Byte compare failed\n");
+ fclose (f1);
+ fclose (f2);
break;
}
}
-
- printf("OK: files are equal!\n");
- fclose(f1); fclose(f2);
-
+
+ printf ("OK: files are equal!\n");
+ fclose (f1);
+ fclose (f2);
+
}
-int main(int argc, char *argv[])
+int
+main (int argc, char *argv[])
{
SoapCtx *ctx, *ctx2;
char href[MAX_HREF_SIZE];
@@ -98,86 +111,88 @@ int main(int argc, char *argv[])
herror_t err;
- if (argc < 2) {
- fprintf(stderr, "usage: %s <filename> [url]\n", argv[0]);
- exit(1);
+ if (argc < 2)
+ {
+ fprintf (stderr, "usage: %s <filename> [url]\n", argv[0]);
+ exit (1);
+ }
+
+ /*
+ Initialize soap client */
+ err = soap_client_init_args (argc, argv);
+ if (err != H_OK)
+ {
+ log_error4 ("[%d] %s():%s ", herror_code (err), herror_func (err),
+ herror_message (err));
+ herror_release (err);
+ return 1;
}
- /*
- Initialize soap client
- */
- err = soap_client_init_args(argc, argv);
- if (err != H_OK) {
- log_error4("[%d] %s():%s ", herror_code(err), herror_func(err), herror_message(err));
- herror_release(err);
- return 1;
+ /*
+ Create a context object */
+ err = soap_ctx_new_with_method (urn, method, &ctx);
+ if (err != H_OK)
+ {
+ log_error4 ("[%d] %s():%s ", herror_code (err), herror_func (err),
+ herror_message (err));
+ herror_release (err);
+ return 1;
}
- /*
- Create a context object
- */
- err = soap_ctx_new_with_method(urn, method, &ctx);
- if (err != H_OK) {
- log_error4("[%d] %s():%s ", herror_code(err), herror_func(err), herror_message(err));
- herror_release(err);
- return 1;
+ /*
+ Add file to the context */
+ err = soap_ctx_add_file (ctx, argv[1], "application/octet-stream", href);
+ if (err != H_OK)
+ {
+ log_error4 ("%s():%s [%d]", herror_func (err), herror_message (err),
+ herror_code (err));
+ herror_release (err);
+ return 1;
}
-
- /*
- Add file to the context
- */
- err = soap_ctx_add_file(ctx, argv[1], "application/octet-stream", href);
- if (err != H_OK) {
- log_error4("%s():%s [%d]", herror_func(err), herror_message(err), herror_code(err));
- herror_release(err);
- return 1;
- }
-
- /*
- Add file reference to the envelope
- */
- soap_env_add_attachment(ctx->env,"source", href);
-
- /*
- Send soap request to the server
- */
- printf("sending request ...\n");
+
+ /*
+ Add file reference to the envelope */
+ soap_env_add_attachment (ctx->env, "source", href);
+
+ /*
+ Send soap request to the server */
+ printf ("sending request ...\n");
if (argc > 2)
- err = soap_client_invoke(ctx, &ctx2, argv[2], "");
+ err = soap_client_invoke (ctx, &ctx2, argv[2], "");
else
- err = soap_client_invoke(ctx, &ctx2, url, "");
-
- if (err != H_OK) {
- log_error4("%s():%s [%d]", herror_func(err), herror_message(err), herror_code(err));
- herror_release(err);
- return 1;
+ err = soap_client_invoke (ctx, &ctx2, url, "");
+
+ if (err != H_OK)
+ {
+ log_error4 ("%s():%s [%d]", herror_func (err), herror_message (err),
+ herror_code (err));
+ herror_release (err);
+ return 1;
}
- /*
- Handle response (just print to the screen)
- */
- fault = soap_env_get_fault(ctx2->env);
- if (fault) {
- soap_xml_doc_print(ctx2->env->root->doc);
- } else if (ctx2->attachments) {
- compareFiles(ctx2->attachments->parts->filename, argv[1]);
- } else {
- printf("No attachments!");
- soap_xml_doc_print(ctx2->env->root->doc);
+ /*
+ Handle response (just print to the screen) */
+ fault = soap_env_get_fault (ctx2->env);
+ if (fault)
+ {
+ soap_xml_doc_print (ctx2->env->root->doc);
+ }
+ else if (ctx2->attachments)
+ {
+ compareFiles (ctx2->attachments->parts->filename, argv[1]);
+ }
+ else
+ {
+ printf ("No attachments!");
+ soap_xml_doc_print (ctx2->env->root->doc);
}
- /*
- Clean up
- */
- soap_ctx_free(ctx2);
- soap_ctx_free(ctx);
+ /*
+ Clean up */
+ soap_ctx_free (ctx2);
+ soap_ctx_free (ctx);
- soap_client_destroy();
+ soap_client_destroy ();
return 0;
}
-
-
-
-
-
diff --git a/examples/csoap/echoattachments-server.c b/examples/csoap/echoattachments-server.c
index 01299b4..151d020 100755
--- a/examples/csoap/echoattachments-server.c
+++ b/examples/csoap/echoattachments-server.c
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: echoattachments-server.c,v 1.5 2004/11/02 23:09:19 snowdrop Exp $
+ * $Id: echoattachments-server.c,v 1.6 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: CSOAP examples project
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -31,55 +31,59 @@ static const char *method = "echo";
-herror_t echo_attachments(SoapCtx *req, SoapCtx* res)
+herror_t
+echo_attachments (SoapCtx * req, SoapCtx * res)
{
herror_t err;
part_t *part;
char href[MAX_HREF_SIZE];
- err = soap_env_new_with_response(req->env, &res->env);
- if (err != H_OK) {
- return err;
+ err = soap_env_new_with_response (req->env, &res->env);
+ if (err != H_OK)
+ {
+ return err;
}
- if (req->attachments)
+ if (req->attachments)
{
- for (part = req->attachments->parts; part != NULL; part = part->next)
- {
- soap_ctx_add_file(res, part->filename, part->content_type, href);
- soap_env_add_attachment(res->env, "echoFile", href);
+ for (part = req->attachments->parts; part != NULL; part = part->next)
+ {
+ soap_ctx_add_file (res, part->filename, part->content_type, href);
+ soap_env_add_attachment (res->env, "echoFile", href);
}
}
-
+
return H_OK;
}
-int main(int argc, char *argv[])
+int
+main (int argc, char *argv[])
{
- herror_t err;
+ herror_t err;
SoapRouter *router;
-
- log_set_level(HLOG_VERBOSE);
-
- err = soap_server_init_args(argc, argv);
- if (err != H_OK) {
- log_error4("%s():%s [%d]", herror_func(err), herror_message(err), herror_code(err));
- herror_release(err);
- return 1;
+
+ log_set_level (HLOG_VERBOSE);
+
+ err = soap_server_init_args (argc, argv);
+ if (err != H_OK)
+ {
+ log_error4 ("%s():%s [%d]", herror_func (err), herror_message (err),
+ herror_code (err));
+ herror_release (err);
+ return 1;
}
-
- router = soap_router_new();
- soap_router_register_service(router, echo_attachments, method, urn);
- soap_server_register_router(router, url);
- log_info1("send SIGTERM to shutdown");
- soap_server_run();
+ router = soap_router_new ();
+ soap_router_register_service (router, echo_attachments, method, urn);
+ soap_server_register_router (router, url);
- log_info1("shutting down\n");
- soap_server_destroy();
+ log_info1 ("send SIGTERM to shutdown");
+ soap_server_run ();
+
+ log_info1 ("shutting down\n");
+ soap_server_destroy ();
return 0;
}
-
diff --git a/examples/csoap/simpleclient.c b/examples/csoap/simpleclient.c
index 29c4c1e..4e0e843 100644
--- a/examples/csoap/simpleclient.c
+++ b/examples/csoap/simpleclient.c
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: simpleclient.c,v 1.9 2004/11/02 23:09:19 snowdrop Exp $
+ * $Id: simpleclient.c,v 1.10 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: CSOAP examples project
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -29,44 +29,51 @@ static const char *urn = "urn:examples";
static const char *method = "sayHello";
-int main(int argc, char *argv[])
+int
+main (int argc, char *argv[])
{
SoapCtx *ctx, *ctx2;
herror_t err;
-
- /*log_set_level(HLOG_VERBOSE);*/
- err = soap_client_init_args(argc, argv);
- if (err != H_OK) {
- log_error4("%s():%s [%d]", herror_func(err), herror_message(err), herror_code(err));
- herror_release(err);
- return 1;
+
+ /* log_set_level(HLOG_VERBOSE); */
+ err = soap_client_init_args (argc, argv);
+ if (err != H_OK)
+ {
+ log_error4 ("%s():%s [%d]", herror_func (err), herror_message (err),
+ herror_code (err));
+ herror_release (err);
+ return 1;
}
- err = soap_ctx_new_with_method(urn, method, &ctx);
- if (err != H_OK) {
- log_error4("%s():%s [%d]", herror_func(err), herror_message(err), herror_code(err));
- herror_release(err);
- return 1;
+ err = soap_ctx_new_with_method (urn, method, &ctx);
+ if (err != H_OK)
+ {
+ log_error4 ("%s():%s [%d]", herror_func (err), herror_message (err),
+ herror_code (err));
+ herror_release (err);
+ return 1;
}
- soap_env_add_item(ctx->env, "xsd:string", "name", "Jonny B. Good");
-
+ soap_env_add_item (ctx->env, "xsd:string", "name", "Jonny B. Good");
+
if (argc > 1)
- err = soap_client_invoke(ctx, &ctx2, argv[1], "");
+ err = soap_client_invoke (ctx, &ctx2, argv[1], "");
else
- err = soap_client_invoke(ctx, &ctx2, url, "");
+ err = soap_client_invoke (ctx, &ctx2, url, "");
- if (err != H_OK) {
- log_error4("[%d] %s(): %s ", herror_code(err), herror_func(err), herror_message(err));
- herror_release(err);
- soap_ctx_free(ctx);
- return 1;
+ if (err != H_OK)
+ {
+ log_error4 ("[%d] %s(): %s ", herror_code (err), herror_func (err),
+ herror_message (err));
+ herror_release (err);
+ soap_ctx_free (ctx);
+ return 1;
}
- soap_xml_doc_print(ctx2->env->root->doc);
- soap_ctx_free(ctx2);
- soap_ctx_free(ctx);
+ soap_xml_doc_print (ctx2->env->root->doc);
+ soap_ctx_free (ctx2);
+ soap_ctx_free (ctx);
- soap_client_destroy();
+ soap_client_destroy ();
return 0;
}
diff --git a/examples/csoap/simpleserver.c b/examples/csoap/simpleserver.c
index 90c62db..b0d37f9 100644
--- a/examples/csoap/simpleserver.c
+++ b/examples/csoap/simpleserver.c
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: simpleserver.c,v 1.14 2005/07/22 13:27:26 snowdrop Exp $
+ * $Id: simpleserver.c,v 1.15 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: CSOAP examples project
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -29,7 +29,8 @@ static const char *urn = "urn:examples";
static const char *method = "sayHello";
-herror_t say_hello(SoapCtx *req, SoapCtx* res)
+herror_t
+say_hello (SoapCtx * req, SoapCtx * res)
{
herror_t err;
@@ -37,49 +38,54 @@ herror_t say_hello(SoapCtx *req, SoapCtx* res)
xmlNodePtr method, node;
- err = soap_env_new_with_response(req->env, &res->env);
- if (err != H_OK) {
- return err;
+ err = soap_env_new_with_response (req->env, &res->env);
+ if (err != H_OK)
+ {
+ return err;
}
- method = soap_env_get_method(req->env);
- node = soap_xml_get_children(method);
+ method = soap_env_get_method (req->env);
+ node = soap_xml_get_children (method);
- while (node) {
- name = (char*)xmlNodeListGetString(node->doc, node->xmlChildrenNode, 1);
- soap_env_add_itemf(res->env,"xsd:string", "echo", "Hello '%s'", name);
- node = soap_xml_get_next(node);
+ while (node)
+ {
+ name =
+ (char *) xmlNodeListGetString (node->doc, node->xmlChildrenNode, 1);
+ soap_env_add_itemf (res->env, "xsd:string", "echo", "Hello '%s'", name);
+ node = soap_xml_get_next (node);
}
return H_OK;
}
-int main(int argc, char *argv[])
+int
+main (int argc, char *argv[])
{
herror_t err;
SoapRouter *router;
-
- log_set_level(HLOG_INFO);
-
- err = soap_server_init_args(argc, argv);
- if (err != H_OK) {
- log_error4("%s():%s [%d]", herror_func(err), herror_message(err), herror_code(err));
- herror_release(err);
- return 1;
+
+ log_set_level (HLOG_INFO);
+
+ err = soap_server_init_args (argc, argv);
+ if (err != H_OK)
+ {
+ log_error4 ("%s():%s [%d]", herror_func (err), herror_message (err),
+ herror_code (err));
+ herror_release (err);
+ return 1;
}
-
- router = soap_router_new();
- soap_router_register_service(router, say_hello, method, urn);
- soap_server_register_router(router, url);
- log_info1("send SIGTERM to shutdown");
- soap_server_run();
+ router = soap_router_new ();
+ soap_router_register_service (router, say_hello, method, urn);
+ soap_server_register_router (router, url);
- log_info1("shutting down\n");
- soap_server_destroy();
+ log_info1 ("send SIGTERM to shutdown");
+ soap_server_run ();
+
+ log_info1 ("shutting down\n");
+ soap_server_destroy ();
return 0;
}
-
diff --git a/examples/csoap/soapclient.c b/examples/csoap/soapclient.c
index 5603da1..826d518 100644
--- a/examples/csoap/soapclient.c
+++ b/examples/csoap/soapclient.c
@@ -10,185 +10,244 @@
#define MAX_LINE_LENGTH 65535
// stripcslashes - unescapes the string
-void stripcslashes(char *str, int *len) {
+void
+stripcslashes (char *str, int *len)
+{
char *source, *target, *end;
- int nlen = *len, i;
+ int nlen = *len, i;
char numtmp[4];
- for (source=str, end=str+nlen, target=str; source < end; source++) {
- if (*source == '\\' && source+1 < end) {
+ for (source = str, end = str + nlen, target = str; source < end; source++)
+ {
+ if (*source == '\\' && source + 1 < end)
+ {
source++;
- switch (*source) {
- case 'n': *target++='\n'; nlen--; break;
- case 'r': *target++='\r'; nlen--; break;
- case 'a': *target++='\a'; nlen--; break;
- case 't': *target++='\t'; nlen--; break;
- case 'v': *target++='\v'; nlen--; break;
- case 'b': *target++='\b'; nlen--; break;
- case 'f': *target++='\f'; nlen--; break;
- case '\\': *target++='\\'; nlen--; break;
+ switch (*source)
+ {
+ case 'n':
+ *target++ = '\n';
+ nlen--;
+ break;
+ case 'r':
+ *target++ = '\r';
+ nlen--;
+ break;
+ case 'a':
+ *target++ = '\a';
+ nlen--;
+ break;
+ case 't':
+ *target++ = '\t';
+ nlen--;
+ break;
+ case 'v':
+ *target++ = '\v';
+ nlen--;
+ break;
+ case 'b':
+ *target++ = '\b';
+ nlen--;
+ break;
+ case 'f':
+ *target++ = '\f';
+ nlen--;
+ break;
+ case '\\':
+ *target++ = '\\';
+ nlen--;
+ break;
case 'x':
- if (source+1 < end && isxdigit((int)(*(source+1)))) {
- numtmp[0] = *++source;
- if (source+1 < end && isxdigit((int)(*(source+1)))) {
- numtmp[1] = *++source;
- numtmp[2] = '\0';
- nlen-=3;
- } else {
- numtmp[1] = '\0';
- nlen-=2;
- }
- *target++=(char)strtol(numtmp, NULL, 16);
- break;
- }
- default:
- i=0;
- while (source < end && *source >= '0' && *source <= '7' && i<3) {
- numtmp[i++] = *source++;
- }
- if (i) {
- numtmp[i]='\0';
- *target++=(char)strtol(numtmp, NULL, 8);
- nlen -= i;
- source--;
- } else {
- *target++ = *source;
- nlen--;
- }
+ if (source + 1 < end && isxdigit ((int) (*(source + 1))))
+ {
+ numtmp[0] = *++source;
+ if (source + 1 < end && isxdigit ((int) (*(source + 1))))
+ {
+ numtmp[1] = *++source;
+ numtmp[2] = '\0';
+ nlen -= 3;
+ }
+ else
+ {
+ numtmp[1] = '\0';
+ nlen -= 2;
+ }
+ *target++ = (char) strtol (numtmp, NULL, 16);
+ break;
+ }
+ default:
+ i = 0;
+ while (source < end && *source >= '0' && *source <= '7' && i < 3)
+ {
+ numtmp[i++] = *source++;
+ }
+ if (i)
+ {
+ numtmp[i] = '\0';
+ *target++ = (char) strtol (numtmp, NULL, 8);
+ nlen -= i;
+ source--;
+ }
+ else
+ {
+ *target++ = *source;
+ nlen--;
+ }
}
- } else {
+ }
+ else
+ {
*target++ = *source;
}
}
- if (nlen != 0) *target='\0';
+ if (nlen != 0)
+ *target = '\0';
*len = nlen;
-}
+}
// ParseLine - gets a line, finds the commas, unescapes the value and adds it
// to the SOAP request
-void ParseLine(SoapCtx *ctx, char * Buffer, int LineLen) {
+void
+ParseLine (SoapCtx * ctx, char *Buffer, int LineLen)
+{
// if wrong line length, return
- if (LineLen <= 0) return;
-
+ if (LineLen <= 0)
+ return;
+
// alloc buffer for the line, copy it
- char * Line = (char *)malloc(LineLen + 1);
- memcpy(Line, Buffer, LineLen);
+ char *Line = (char *) malloc (LineLen + 1);
+ memcpy (Line, Buffer, LineLen);
Line[LineLen] = '\0';
-
+
// find first comma
- char * FirstCommaPos = strchr(Line, ',');
- if (!FirstCommaPos) return;
-
+ char *FirstCommaPos = strchr (Line, ',');
+ if (!FirstCommaPos)
+ return;
+
// find second comma
- char * SecondCommaPos = strchr(FirstCommaPos + 1, ',');
- if (!SecondCommaPos) return;
-
+ char *SecondCommaPos = strchr (FirstCommaPos + 1, ',');
+ if (!SecondCommaPos)
+ return;
+
// separate the three strings
FirstCommaPos[0] = '\0';
SecondCommaPos[0] = '\0';
-
+
// unescape
- int len = strlen(SecondCommaPos + 1);
- stripcslashes(SecondCommaPos + 1, &len);
-
+ int len = strlen (SecondCommaPos + 1);
+ stripcslashes (SecondCommaPos + 1, &len);
+
// add to the request
- soap_env_add_item(ctx->env, Line, FirstCommaPos + 1, SecondCommaPos
- + 1);
-
+ soap_env_add_item (ctx->env, Line, FirstCommaPos + 1, SecondCommaPos + 1);
+
// free the buffer
- free(Line);
+ free (Line);
}
-void printusage(char *FileName) {
- printf("Usage: %s [URL] [URN] [SOAPMETHOD]\n\n", FileName);
- printf("- [URL] is the url of the SOAP server.\n");
- printf("- [URN] is the namespace for the method/webservice.\n");
- printf("- [SOAPMETHOD] is the method to call.\n\n");
- printf("All commandline paramaters are mandatory.\n\n");
- printf("%s reads the parameters for the SOAPMETHOD from STDIN as a comma-separated list\n\n", FileName);
- printf("Each line is one parameter and has the following form:\n\n");
- printf("xsd:[TYPE],[PARAMETERNAME],[PARAMETERVALUE]\n\n");
- printf("- [TYPE] is a basic type for SOAP or a complex type defined by the WSDL.\n");
- printf("- [PARAMETERNAME] is the name for the parameter of the SOAPMETHOD on this line.\n");
- printf("- [PARAMETERVALUE] is the value for the parameter. N.B. \nand other escapes are recognized.\n");
+void
+printusage (char *FileName)
+{
+ printf ("Usage: %s [URL] [URN] [SOAPMETHOD]\n\n", FileName);
+ printf ("- [URL] is the url of the SOAP server.\n");
+ printf ("- [URN] is the namespace for the method/webservice.\n");
+ printf ("- [SOAPMETHOD] is the method to call.\n\n");
+ printf ("All commandline paramaters are mandatory.\n\n");
+ printf
+ ("%s reads the parameters for the SOAPMETHOD from STDIN as a comma-separated list\n\n",
+ FileName);
+ printf ("Each line is one parameter and has the following form:\n\n");
+ printf ("xsd:[TYPE],[PARAMETERNAME],[PARAMETERVALUE]\n\n");
+ printf
+ ("- [TYPE] is a basic type for SOAP or a complex type defined by the WSDL.\n");
+ printf
+ ("- [PARAMETERNAME] is the name for the parameter of the SOAPMETHOD on this line.\n");
+ printf
+ ("- [PARAMETERVALUE] is the value for the parameter. N.B. \nand other escapes are recognized.\n");
}
-int main(int argc, char *argv[]) {
+int
+main (int argc, char *argv[])
+{
SoapCtx *ctx, *ctx2;
herror_t err;
-
+
// check the parameter count
- if (argc != 4) {
- printusage(argv[0]);
+ if (argc != 4)
+ {
+ printusage (argv[0]);
return 1;
}
-
+
// init cSOAP client
- err = soap_client_init_args(argc, argv);
- if (err != H_OK) {
- log_error4("%s():%s [%d]", herror_func(err),
- herror_message(err), herror_code(err));
- herror_release(err);
+ err = soap_client_init_args (argc, argv);
+ if (err != H_OK)
+ {
+ log_error4 ("%s():%s [%d]", herror_func (err),
+ herror_message (err), herror_code (err));
+ herror_release (err);
return 1;
}
// create a SoapCtx object
- err = soap_ctx_new_with_method(argv[2], argv[3], &ctx);
- if (err != H_OK) {
- log_error4("%s():%s [%d]", herror_func(err),
- herror_message(err), herror_code(err));
- herror_release(err);
+ err = soap_ctx_new_with_method (argv[2], argv[3], &ctx);
+ if (err != H_OK)
+ {
+ log_error4 ("%s():%s [%d]", herror_func (err),
+ herror_message (err), herror_code (err));
+ herror_release (err);
return 1;
}
-
+
// create buffer
char Buffer[MAX_LINE_LENGTH];
int bytes_read, bytes_left;
-
+
// read from stdin until EOF
- while (!feof(stdin)) {
- bytes_read = fread(Buffer, 1, MAX_LINE_LENGTH, stdin);
+ while (!feof (stdin))
+ {
+ bytes_read = fread (Buffer, 1, MAX_LINE_LENGTH, stdin);
// pass each line into ParseLine
- char * EndLinePos;
- while (EndLinePos = strchr(Buffer, '\n')) {
- ParseLine(ctx, Buffer, EndLinePos - Buffer);
- memmove(Buffer, EndLinePos + 1, bytes_read - (EndLinePos -
- Buffer + 1));
+ char *EndLinePos;
+ while (EndLinePos = strchr (Buffer, '\n'))
+ {
+ ParseLine (ctx, Buffer, EndLinePos - Buffer);
+ memmove (Buffer, EndLinePos + 1, bytes_read - (EndLinePos -
+ Buffer + 1));
Buffer[bytes_read - (EndLinePos - Buffer + 1)] = '\0';
}
-
+
// no '\n' found in the whole Buffer, that means line's too
-long
- bytes_left = strlen(Buffer);
- if (bytes_left == MAX_LINE_LENGTH) {
- log_error1("The parameter line is too long.");
- herror_release(err);
- soap_ctx_free(ctx);
- return 1;
- }
+ long bytes_left = strlen (Buffer);
+ if (bytes_left == MAX_LINE_LENGTH)
+ {
+ log_error1 ("The parameter line is too long.");
+ herror_release (err);
+ soap_ctx_free (ctx);
+ return 1;
+ }
}
// invoke
- err = soap_client_invoke(ctx, &ctx2, argv[1], "");
- if (err != H_OK) {
- log_error4("[%d] %s(): %s ", herror_code(err),
- herror_func(err), herror_message(err));
- herror_release(err);
- soap_ctx_free(ctx);
+ err = soap_client_invoke (ctx, &ctx2, argv[1], "");
+ if (err != H_OK)
+ {
+ log_error4 ("[%d] %s(): %s ", herror_code (err),
+ herror_func (err), herror_message (err));
+ herror_release (err);
+ soap_ctx_free (ctx);
return 1;
}
-
+
// print the result
- soap_xml_doc_print(ctx2->env->root->doc);
-
+ soap_xml_doc_print (ctx2->env->root->doc);
+
// free the objects
- soap_ctx_free(ctx2);
- soap_ctx_free(ctx);
+ soap_ctx_free (ctx2);
+ soap_ctx_free (ctx);
// destroy the cSOAP client
- soap_client_destroy();
-
+ soap_client_destroy ();
+
return 0;
}
diff --git a/libcsoap/soap-client.c b/libcsoap/soap-client.c
index 5c3aeac..d1599bd 100644
--- a/libcsoap/soap-client.c
+++ b/libcsoap/soap-client.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-client.c,v 1.19 2005/12/19 14:18:26 snowdrop Exp $
+* $Id: soap-client.c,v 1.20 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -27,236 +27,255 @@
/*--------------------------------- */
static int _block_socket = 0;
-static herror_t _soap_client_build_result(hresponse_t *res, SoapEnv **out);
+static herror_t _soap_client_build_result (hresponse_t * res, SoapEnv ** out);
/*--------------------------------- */
-void soap_client_block_socket(int block)
+void
+soap_client_block_socket (int block)
{
- _block_socket = block;
+ _block_socket = block;
}
-int soap_client_get_blockmode()
+int
+soap_client_get_blockmode ()
{
- return _block_socket;
+ return _block_socket;
}
-herror_t soap_client_init_args(int argc, char *argv[])
-
+herror_t
+soap_client_init_args (int argc, char *argv[])
{
- return httpc_init(argc, argv);
+ return httpc_init (argc, argv);
}
-void soap_client_destroy()
+void
+soap_client_destroy ()
{
- httpc_destroy();
+ httpc_destroy ();
}
-static
-long _file_get_size(const char* filename)
+static long
+_file_get_size (const char *filename)
{
- FILE *f = fopen(filename, "r");
+ FILE *f = fopen (filename, "r");
long size;
- if (!f) return -1;
+ if (!f)
+ return -1;
- fseek(f, 0, SEEK_END);
- size=ftell(f);
- fclose(f);
+ fseek (f, 0, SEEK_END);
+ size = ftell (f);
+ fclose (f);
return size;
}
herror_t
-soap_client_invoke(SoapCtx *call, SoapCtx** response, const char *url, const char *soap_action)
+soap_client_invoke (SoapCtx * call, SoapCtx ** response, const char *url,
+ const char *soap_action)
{
/* Status */
herror_t status;
- /* Result document */
- SoapEnv* res_env;
+ /* Result document */
+ SoapEnv *res_env;
- /* Buffer variables*/
- xmlBufferPtr buffer;
- char *content;
- char tmp[15];
+ /* Buffer variables */
+ xmlBufferPtr buffer;
+ char *content;
+ char tmp[15];
- /* Transport variables */
- httpc_conn_t *conn;
- hresponse_t *res;
+ /* Transport variables */
+ httpc_conn_t *conn;
+ hresponse_t *res;
- /* multipart/related start id*/
- char start_id[150];
- static int counter=1;
- part_t *part;
+ /* multipart/related start id */
+ char start_id[150];
+ static int counter = 1;
+ part_t *part;
- /* for copy attachments */
+ /* for copy attachments */
char href[MAX_HREF_SIZE];
-
- /* Create buffer */
- buffer = xmlBufferCreate();
- xmlNodeDump(buffer, call->env->root->doc,call->env->root, 1 ,0);
- content = (char*)xmlBufferContent(buffer);
-
- /* Transport via HTTP */
- conn = httpc_new();
- if(!conn){
- return herror_new("soap_client_invoke", SOAP_ERROR_CLIENT_INIT, "Unable to create SOAP client!" );
- }
- conn->block = soap_client_get_blockmode();
-
- /* Set soap action */
- if (soap_action != NULL) {
- httpc_set_header(conn, "SoapAction", soap_action);
- }
-
- /* check for attachments */
- if (!call->attachments)
- {
- /* content-type is always 'text/xml' */
- httpc_set_header(conn, HEADER_CONTENT_TYPE, "text/xml");
-
- sprintf(tmp, "%d", (int)strlen(content));
- httpc_set_header(conn, HEADER_CONTENT_LENGTH, tmp);
- status = httpc_post_begin(conn, url);
-
- if (status != H_OK) {
- httpc_close_free(conn);
- xmlBufferFree(buffer);
- return status;
+
+ /* Create buffer */
+ buffer = xmlBufferCreate ();
+ xmlNodeDump (buffer, call->env->root->doc, call->env->root, 1, 0);
+ content = (char *) xmlBufferContent (buffer);
+
+ /* Transport via HTTP */
+ conn = httpc_new ();
+ if (!conn)
+ {
+ return herror_new ("soap_client_invoke", SOAP_ERROR_CLIENT_INIT,
+ "Unable to create SOAP client!");
+ }
+ conn->block = soap_client_get_blockmode ();
+
+ /* Set soap action */
+ if (soap_action != NULL)
+ {
+ httpc_set_header (conn, "SoapAction", soap_action);
+ }
+
+ /* check for attachments */
+ if (!call->attachments)
+ {
+ /* content-type is always 'text/xml' */
+ httpc_set_header (conn, HEADER_CONTENT_TYPE, "text/xml");
+
+ sprintf (tmp, "%d", (int) strlen (content));
+ httpc_set_header (conn, HEADER_CONTENT_LENGTH, tmp);
+ status = httpc_post_begin (conn, url);
+
+ if (status != H_OK)
+ {
+ httpc_close_free (conn);
+ xmlBufferFree (buffer);
+ return status;
}
-
- status = http_output_stream_write_string(conn->out, content);
- if (status != H_OK) {
- httpc_close_free(conn);
- xmlBufferFree(buffer);
- return status;
+
+ status = http_output_stream_write_string (conn->out, content);
+ if (status != H_OK)
+ {
+ httpc_close_free (conn);
+ xmlBufferFree (buffer);
+ return status;
}
-
- status = httpc_post_end(conn, &res);
- if (status != H_OK) {
- httpc_close_free(conn);
- xmlBufferFree(buffer);
- return status;
+
+ status = httpc_post_end (conn, &res);
+ if (status != H_OK)
+ {
+ httpc_close_free (conn);
+ xmlBufferFree (buffer);
+ return status;
}
- }
- else
- {
-
+ }
+ else
+ {
+
/* Use chunked transport */
- httpc_set_header(conn, HEADER_TRANSFER_ENCODING, TRANSFER_ENCODING_CHUNKED);
-
- sprintf(start_id, "289247829121218%d", counter++);
- status = httpc_mime_begin(conn, url, start_id, "", "text/xml");
- if (status != H_OK) {
- httpc_close_free(conn);
- xmlBufferFree(buffer);
- return status;
- }
-
- status = httpc_mime_next(conn, start_id, "text/xml", "binary");
- if (status != H_OK) {
- httpc_close_free(conn);
- xmlBufferFree(buffer);
- return status;
- }
+ httpc_set_header (conn, HEADER_TRANSFER_ENCODING,
+ TRANSFER_ENCODING_CHUNKED);
- status = http_output_stream_write(conn->out, content, strlen(content));
- if (status != H_OK) {
- httpc_close_free(conn);
- xmlBufferFree(buffer);
- return status;
+ sprintf (start_id, "289247829121218%d", counter++);
+ status = httpc_mime_begin (conn, url, start_id, "", "text/xml");
+ if (status != H_OK)
+ {
+ httpc_close_free (conn);
+ xmlBufferFree (buffer);
+ return status;
}
-
- for (part=call->attachments->parts; part; part=part->next)
+ status = httpc_mime_next (conn, start_id, "text/xml", "binary");
+ if (status != H_OK)
{
- status = httpc_mime_send_file(conn, part->id,
- part->content_type, part->transfer_encoding, part->filename);
- if (status != H_OK) {
- log_error2("Send file failed. Status:%d", status);
- httpc_close_free(conn);
- xmlBufferFree(buffer);
- return status;
- }
+ httpc_close_free (conn);
+ xmlBufferFree (buffer);
+ return status;
}
- status = httpc_mime_end(conn, &res);
+ status = http_output_stream_write (conn->out, content, strlen (content));
if (status != H_OK)
{
- httpc_close_free(conn);
- xmlBufferFree(buffer);
- return status;
+ httpc_close_free (conn);
+ xmlBufferFree (buffer);
+ return status;
}
- }
- /* Free buffer */
- xmlBufferFree(buffer);
- /* Build result */
- status = _soap_client_build_result(res, &res_env);
- if (status != H_OK) {
- hresponse_free(res);
- httpc_close_free(conn);
- return status;
- }
+ for (part = call->attachments->parts; part; part = part->next)
+ {
+ status = httpc_mime_send_file (conn, part->id,
+ part->content_type,
+ part->transfer_encoding, part->filename);
+ if (status != H_OK)
+ {
+ log_error2 ("Send file failed. Status:%d", status);
+ httpc_close_free (conn);
+ xmlBufferFree (buffer);
+ return status;
+ }
+ }
- /* Create Context */
- *response = soap_ctx_new(res_env);
+ status = httpc_mime_end (conn, &res);
+ if (status != H_OK)
+ {
+ httpc_close_free (conn);
+ xmlBufferFree (buffer);
+ return status;
+ }
+ }
+
+ /* Free buffer */
+ xmlBufferFree (buffer);
+
+ /* Build result */
+ status = _soap_client_build_result (res, &res_env);
+ if (status != H_OK)
+ {
+ hresponse_free (res);
+ httpc_close_free (conn);
+ return status;
+ }
+
+ /* Create Context */
+ *response = soap_ctx_new (res_env);
/* soap_ctx_add_files(*response, res->attachments);*/
- if (res->attachments!=NULL) {
- part = res->attachments->parts;
- while (part) {
- soap_ctx_add_file(*response, part->filename, part->content_type, href);
- part->deleteOnExit = 0;
- part = part->next;
- }
- part = (*response)->attachments->parts;
- while (part) {
- part->deleteOnExit = 1;
- part = part->next;
- }
- }
-
-
- hresponse_free(res);
- httpc_close_free(conn);
- return H_OK;
+ if (res->attachments != NULL)
+ {
+ part = res->attachments->parts;
+ while (part)
+ {
+ soap_ctx_add_file (*response, part->filename, part->content_type, href);
+ part->deleteOnExit = 0;
+ part = part->next;
+ }
+ part = (*response)->attachments->parts;
+ while (part)
+ {
+ part->deleteOnExit = 1;
+ part = part->next;
+ }
+ }
+
+
+ hresponse_free (res);
+ httpc_close_free (conn);
+ return H_OK;
}
-static
-herror_t
- _soap_client_build_result(hresponse_t *res, SoapEnv** env)
+static herror_t
+_soap_client_build_result (hresponse_t * res, SoapEnv ** env)
{
- herror_t err;
+ herror_t err;
- log_verbose2("Building result (%p)", res);
+ log_verbose2 ("Building result (%p)", res);
- if (res == NULL)
- return herror_new("_soap_client_build_result",
- GENERAL_INVALID_PARAM, "hresponse_t is NULL");
+ if (res == NULL)
+ return herror_new ("_soap_client_build_result",
+ GENERAL_INVALID_PARAM, "hresponse_t is NULL");
- if (res->in == NULL)
- return herror_new("_soap_client_build_result",
- GENERAL_INVALID_PARAM, "Empty response from server");
+ if (res->in == NULL)
+ return herror_new ("_soap_client_build_result",
+ GENERAL_INVALID_PARAM, "Empty response from server");
- if (res->errcode != 200)
- return herror_new("_soap_client_build_result",
- GENERAL_INVALID_PARAM, "HTTP code is not 200 OK");
+ if (res->errcode != 200)
+ return herror_new ("_soap_client_build_result",
+ GENERAL_INVALID_PARAM, "HTTP code is not 200 OK");
- err = soap_env_new_from_stream(res->in, env);
+ err = soap_env_new_from_stream (res->in, env);
- if (err != H_OK) {
- return err;
- }
+ if (err != H_OK)
+ {
+ return err;
+ }
- return H_OK;
+ return H_OK;
}
-
-
diff --git a/libcsoap/soap-client.h b/libcsoap/soap-client.h
index b99d2aa..0795a29 100644
--- a/libcsoap/soap-client.h
+++ b/libcsoap/soap-client.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-client.h,v 1.10 2005/12/19 14:06:16 snowdrop Exp $
+ * $Id: soap-client.h,v 1.11 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -32,13 +32,13 @@
/**
Initializes the client side soap engine
*/
-herror_t soap_client_init_args(int argc, char *argv[]);
+herror_t soap_client_init_args (int argc, char *argv[]);
/**
Destroy the soap client module
*/
-void soap_client_destroy();
+void soap_client_destroy ();
/**
@@ -53,9 +53,8 @@ void soap_client_destroy();
@returns H_OK if success
*/
-herror_t soap_client_invoke(SoapCtx *ctx, SoapCtx** response,
- const char *url,
- const char *soap_action);
+herror_t soap_client_invoke (SoapCtx * ctx, SoapCtx ** response,
+ const char *url, const char *soap_action);
@@ -67,9 +66,7 @@ herror_t soap_client_invoke(SoapCtx *ctx, SoapCtx** response,
@param block 1 to creat blocked sockets, 0 to create non
blocking sockets.
*/
-void soap_client_block_socket(int block);
-int soap_client_get_blockmode();
+void soap_client_block_socket (int block);
+int soap_client_get_blockmode ();
#endif
-
-
diff --git a/libcsoap/soap-ctx.c b/libcsoap/soap-ctx.c
index 291a161..b2d1db2 100755
--- a/libcsoap/soap-ctx.c
+++ b/libcsoap/soap-ctx.c
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-ctx.c,v 1.5 2005/05/27 19:28:15 snowdrop Exp $
+ * $Id: soap-ctx.c,v 1.6 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -25,112 +25,128 @@
#include <string.h>
-SoapCtx* soap_ctx_new(SoapEnv *env) /* should only be used internally */
+SoapCtx *
+soap_ctx_new (SoapEnv * env) /* should only be used internally */
{
- SoapCtx* ctx = (SoapCtx*)malloc(sizeof(SoapCtx));
+ SoapCtx *ctx = (SoapCtx *) malloc (sizeof (SoapCtx));
ctx->env = env;
ctx->attachments = NULL;
-
+
return ctx;
}
-void soap_ctx_add_files(SoapCtx* ctx, attachments_t *attachments)
+void
+soap_ctx_add_files (SoapCtx * ctx, attachments_t * attachments)
{
part_t *part;
char href[MAX_HREF_SIZE];
-
- if (attachments==NULL) return;
+
+ if (attachments == NULL)
+ return;
part = attachments->parts;
- while (part) {
- soap_ctx_add_file(ctx, part->filename, part->content_type, href);
+ while (part)
+ {
+ soap_ctx_add_file (ctx, part->filename, part->content_type, href);
part = part->next;
}
}
-herror_t soap_ctx_add_file(SoapCtx* ctx, const char* filename, const char* content_type, char *dest_href)
+herror_t
+soap_ctx_add_file (SoapCtx * ctx, const char *filename,
+ const char *content_type, char *dest_href)
{
char cid[250];
char id[250];
part_t *part;
static int counter = 1;
- FILE *test = fopen(filename, "r");
- if (!test)
- return herror_new("soap_ctx_add_file", FILE_ERROR_OPEN,
- "Can not open file '%s'", filename);
-
- fclose(test);
-
+ FILE *test = fopen (filename, "r");
+ if (!test)
+ return herror_new ("soap_ctx_add_file", FILE_ERROR_OPEN,
+ "Can not open file '%s'", filename);
+
+ fclose (test);
+
/* generate an id */
- sprintf(id, "005512345894583%d", counter++);
- sprintf(dest_href, "cid:%s", id);
- sprintf(cid, "<%s>", id);
+ sprintf (id, "005512345894583%d", counter++);
+ sprintf (dest_href, "cid:%s", id);
+ sprintf (cid, "<%s>", id);
/* add part to context */
- part = part_new(cid, filename, content_type, NULL, NULL);
- if (!ctx->attachments) ctx->attachments = attachments_new();
- attachments_add_part(ctx->attachments, part);
+ part = part_new (cid, filename, content_type, NULL, NULL);
+ if (!ctx->attachments)
+ ctx->attachments = attachments_new ();
+ attachments_add_part (ctx->attachments, part);
return H_OK;
}
-part_t *soap_ctx_get_file(SoapCtx* ctx, xmlNodePtr node)
+part_t *
+soap_ctx_get_file (SoapCtx * ctx, xmlNodePtr node)
{
- xmlChar *prop;
- char href[MAX_HREF_SIZE];
- char buffer[MAX_HREF_SIZE];
- part_t *part;
-
- if (!ctx->attachments) return NULL;
-
- prop = xmlGetProp(node, "href");
-
- if (!prop) return NULL;
-
- strcpy(href, (const char*)prop);
- if (!strncmp(href, "cid:", 4)) {
- for (part = ctx->attachments->parts; part; part=part->next)
- {
- sprintf(buffer, "<%s>", href+4);
- if (!strcmp(part->id, buffer))
- return part;
-
- }
- } else {
- for (part = ctx->attachments->parts; part; part=part->next)
- {
- if (!strcmp(part->location, href))
- return part;
-
- }
- }
-
- return NULL;
+ xmlChar *prop;
+ char href[MAX_HREF_SIZE];
+ char buffer[MAX_HREF_SIZE];
+ part_t *part;
+
+ if (!ctx->attachments)
+ return NULL;
+
+ prop = xmlGetProp (node, "href");
+
+ if (!prop)
+ return NULL;
+
+ strcpy (href, (const char *) prop);
+ if (!strncmp (href, "cid:", 4))
+ {
+ for (part = ctx->attachments->parts; part; part = part->next)
+ {
+ sprintf (buffer, "<%s>", href + 4);
+ if (!strcmp (part->id, buffer))
+ return part;
+
+ }
+ }
+ else
+ {
+ for (part = ctx->attachments->parts; part; part = part->next)
+ {
+ if (!strcmp (part->location, href))
+ return part;
+
+ }
+ }
+
+ return NULL;
}
-void soap_ctx_free(SoapCtx* ctx)
+void
+soap_ctx_free (SoapCtx * ctx)
{
- if (!ctx) return;
-
+ if (!ctx)
+ return;
+
if (ctx->attachments)
- attachments_free(ctx->attachments);
+ attachments_free (ctx->attachments);
if (ctx->env)
- soap_env_free(ctx->env);
-
- free(ctx);
+ soap_env_free (ctx->env);
+
+ free (ctx);
}
-herror_t soap_ctx_new_with_method(const char *urn, const char *method, SoapCtx **out)
+herror_t
+soap_ctx_new_with_method (const char *urn, const char *method, SoapCtx ** out)
{
- SoapEnv *env;
- herror_t err;
- err = soap_env_new_with_method(urn, method, &env);
- if (err != H_OK) return err;
- *out = soap_ctx_new(env);
+ SoapEnv *env;
+ herror_t err;
+ err = soap_env_new_with_method (urn, method, &env);
+ if (err != H_OK)
+ return err;
+ *out = soap_ctx_new (env);
return H_OK;
}
-
diff --git a/libcsoap/soap-ctx.h b/libcsoap/soap-ctx.h
index a8a8337..2df74b9 100755
--- a/libcsoap/soap-ctx.h
+++ b/libcsoap/soap-ctx.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-ctx.h,v 1.5 2004/11/02 23:09:26 snowdrop Exp $
+ * $Id: soap-ctx.h,v 1.6 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -38,10 +38,10 @@ typedef struct _SoapCtx
{
SoapEnv *env;
attachments_t *attachments;
-}SoapCtx;
+} SoapCtx;
-SoapCtx* soap_ctx_new(SoapEnv *env); /* should only be used internally */
+SoapCtx *soap_ctx_new (SoapEnv * env); /* should only be used internally */
/**
Returns the attached file if any found.
@@ -51,21 +51,22 @@ SoapCtx* soap_ctx_new(SoapEnv *env); /* should only be used internally */
@returns a part_t object of attachment was found, NULL otherwise.
*/
-part_t *soap_ctx_get_file(SoapCtx* ctx, xmlNodePtr node);
+part_t *soap_ctx_get_file (SoapCtx * ctx, xmlNodePtr node);
/**
Creates a new soap context object.
*/
-herror_t soap_ctx_new_with_method(const char *urn, const char *method, SoapCtx **out);
+herror_t soap_ctx_new_with_method (const char *urn, const char *method,
+ SoapCtx ** out);
/* Size of destination dest_href should be MAX_HREF_SIZE */
-herror_t soap_ctx_add_file(SoapCtx* ctx, const char* filename, const char* content_type, char *dest_href);
+herror_t soap_ctx_add_file (SoapCtx * ctx, const char *filename,
+ const char *content_type, char *dest_href);
/*
Used internally. Will switch the deleteOnExit flag from the
given one to the added part.
*/
-void soap_ctx_add_files(SoapCtx* ctx, attachments_t *attachments);
-void soap_ctx_free(SoapCtx* ctx);
+void soap_ctx_add_files (SoapCtx * ctx, attachments_t * attachments);
+void soap_ctx_free (SoapCtx * ctx);
#endif
-
diff --git a/libcsoap/soap-env.c b/libcsoap/soap-env.c
index 2018b3d..ec27137 100644
--- a/libcsoap/soap-env.c
+++ b/libcsoap/soap-env.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-env.c,v 1.10 2004/11/02 23:09:26 snowdrop Exp $
+* $Id: soap-env.c,v 1.11 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -90,12 +90,12 @@ struct XmlNodeHolder
static
void xmlbuilder_start_element (const xmlChar * element_name, int attr_count,
- xmlChar ** keys, xmlChar ** values,
- void *userData);
+ xmlChar ** keys, xmlChar ** values,
+ void *userData);
static
void xmlbuilder_characters (const xmlChar * element_name,
- const xmlChar * chars, void *userData);
+ const xmlChar * chars, void *userData);
static
void xmlbuilder_end_element (const xmlChar * element_name, void *userData);
@@ -105,7 +105,7 @@ static
herror_t
-soap_env_new_from_doc (xmlDocPtr doc, SoapEnv **out)
+soap_env_new_from_doc (xmlDocPtr doc, SoapEnv ** out)
{
xmlNodePtr node;
SoapEnv *env;
@@ -113,16 +113,17 @@ soap_env_new_from_doc (xmlDocPtr doc, SoapEnv **out)
if (doc == NULL)
{
log_error1 ("Can not create xml document!");
- return herror_new("soap_env_new_from_doc",
- GENERAL_INVALID_PARAM, "XML Document (xmlDocPtr) is NULL");
+ return herror_new ("soap_env_new_from_doc",
+ GENERAL_INVALID_PARAM,
+ "XML Document (xmlDocPtr) is NULL");
}
node = xmlDocGetRootElement (doc);
if (node == NULL)
{
log_error1 ("xml document is empty!");
- return herror_new("soap_env_new_from_doc",
- XML_ERROR_EMPTY_DOCUMENT, "XML Document is empty!");
+ return herror_new ("soap_env_new_from_doc",
+ XML_ERROR_EMPTY_DOCUMENT, "XML Document is empty!");
}
env = (SoapEnv *) malloc (sizeof (SoapEnv));
@@ -130,12 +131,10 @@ soap_env_new_from_doc (xmlDocPtr doc, SoapEnv **out)
/* set root */
env->root = node;
- /* set method root
- set call->cur (current node) to <method>.
- xpath: //Envelope/Body/
- */
- node = soap_xml_get_children (env->root);/* Check for NULL ! */
- env->cur = soap_xml_get_children (node); /* Check for NULL ! */
+ /* set method root set call->cur (current node) to <method>. xpath:
+ //Envelope/Body/ */
+ node = soap_xml_get_children (env->root); /* Check for NULL ! */
+ env->cur = soap_xml_get_children (node); /* Check for NULL ! */
*out = env;
return H_OK;
@@ -145,22 +144,23 @@ soap_env_new_from_doc (xmlDocPtr doc, SoapEnv **out)
herror_t
-soap_env_new_from_buffer (const char *buffer, SoapEnv **out)
+soap_env_new_from_buffer (const char *buffer, SoapEnv ** out)
{
xmlDocPtr doc;
herror_t err;
if (buffer == NULL)
- return herror_new("soap_env_new_from_buffer",
- GENERAL_INVALID_PARAM, "buffer (first param) is NULL");
+ return herror_new ("soap_env_new_from_buffer",
+ GENERAL_INVALID_PARAM, "buffer (first param) is NULL");
doc = xmlParseDoc (BAD_CAST buffer);
if (doc == NULL)
- return herror_new("soap_env_new_from_buffer",
- XML_ERROR_PARSE, "Can not parse xml");
+ return herror_new ("soap_env_new_from_buffer",
+ XML_ERROR_PARSE, "Can not parse xml");
err = soap_env_new_from_doc (doc, out);
- if (err != H_OK) {
+ if (err != H_OK)
+ {
xmlFreeDoc (doc);
}
@@ -170,19 +170,21 @@ soap_env_new_from_buffer (const char *buffer, SoapEnv **out)
herror_t
soap_env_new_with_fault (fault_code_t faultcode,
- const char *faultstring,
- const char *faultactor, const char *detail, SoapEnv **out)
+ const char *faultstring,
+ const char *faultactor, const char *detail,
+ SoapEnv ** out)
{
xmlDocPtr doc;
herror_t err;
-
+
doc = soap_fault_build (faultcode, faultstring, faultactor, detail);
if (doc == NULL)
- return herror_new("soap_env_new_with_fault",
- XML_ERROR_PARSE, "Can not parse fault xml");
+ return herror_new ("soap_env_new_with_fault",
+ XML_ERROR_PARSE, "Can not parse fault xml");
err = soap_env_new_from_doc (doc, out);
- if (err != H_OK) {
+ if (err != H_OK)
+ {
xmlFreeDoc (doc);
}
@@ -191,7 +193,7 @@ soap_env_new_with_fault (fault_code_t faultcode,
herror_t
-soap_env_new_with_response (SoapEnv * request, SoapEnv **out)
+soap_env_new_with_response (SoapEnv * request, SoapEnv ** out)
{
char urn[100];
char methodname[150];
@@ -199,20 +201,24 @@ soap_env_new_with_response (SoapEnv * request, SoapEnv **out)
if (request == NULL)
{
- return herror_new("soap_env_new_with_response",
- GENERAL_INVALID_PARAM, "request (first param) is NULL");
+ return herror_new ("soap_env_new_with_response",
+ GENERAL_INVALID_PARAM,
+ "request (first param) is NULL");
}
if (request->root == NULL)
{
- return herror_new("soap_env_new_with_response",
- GENERAL_INVALID_PARAM, "request (first param) has no xml structure");
- }
+ return herror_new ("soap_env_new_with_response",
+ GENERAL_INVALID_PARAM,
+ "request (first param) has no xml structure");
+ }
if (!soap_env_find_methodname (request, methodname))
{
- return herror_new("soap_env_new_with_response",
- GENERAL_INVALID_PARAM, "Method name '%s' not found in request", SAVE_STR(methodname));
+ return herror_new ("soap_env_new_with_response",
+ GENERAL_INVALID_PARAM,
+ "Method name '%s' not found in request",
+ SAVE_STR (methodname));
}
if (!soap_env_find_urn (request, urn))
@@ -229,7 +235,7 @@ soap_env_new_with_response (SoapEnv * request, SoapEnv **out)
herror_t
-soap_env_new_with_method (const char *urn, const char *method, SoapEnv **out)
+soap_env_new_with_method (const char *urn, const char *method, SoapEnv ** out)
{
xmlDocPtr env;
xmlChar buffer[1054];
@@ -238,36 +244,38 @@ soap_env_new_with_method (const char *urn, const char *method, SoapEnv **out)
log_verbose2 ("URN = '%s'", urn);
log_verbose2 ("Method = '%s'", method);
- if (!strcmp(urn, ""))
+ if (!strcmp (urn, ""))
{
#ifdef USE_XMLSTRING
xmlStrPrintf (buffer, 1054, BAD_CAST _SOAP_MSG_TEMPLATE_EMPTY_TARGET_,
- soap_env_ns, soap_env_enc, soap_xsi_ns,
- soap_xsd_ns, BAD_CAST method, BAD_CAST urn, BAD_CAST method);
+ soap_env_ns, soap_env_enc, soap_xsi_ns,
+ soap_xsd_ns, BAD_CAST method, BAD_CAST urn,
+ BAD_CAST method);
#else
- sprintf(buffer, _SOAP_MSG_TEMPLATE_EMPTY_TARGET_,
- soap_env_ns, soap_env_enc, soap_xsi_ns,
- soap_xsd_ns, method, urn, method);
+ sprintf (buffer, _SOAP_MSG_TEMPLATE_EMPTY_TARGET_,
+ soap_env_ns, soap_env_enc, soap_xsi_ns,
+ soap_xsd_ns, method, urn, method);
#endif
}
else
{
#ifdef USE_XMLSTRING
xmlStrPrintf (buffer, 1054, BAD_CAST _SOAP_MSG_TEMPLATE_,
- soap_env_ns, soap_env_enc, soap_xsi_ns,
- soap_xsd_ns, BAD_CAST method, BAD_CAST urn, BAD_CAST method);
-#else
- sprintf(buffer, _SOAP_MSG_TEMPLATE_,
- soap_env_ns, soap_env_enc, soap_xsi_ns,
- soap_xsd_ns, method, urn, method);
+ soap_env_ns, soap_env_enc, soap_xsi_ns,
+ soap_xsd_ns, BAD_CAST method, BAD_CAST urn,
+ BAD_CAST method);
+#else
+ sprintf (buffer, _SOAP_MSG_TEMPLATE_,
+ soap_env_ns, soap_env_enc, soap_xsi_ns,
+ soap_xsd_ns, method, urn, method);
#endif
}
-
+
env = xmlParseDoc (buffer);
if (!env)
- return herror_new("soap_env_new_with_method",
- XML_ERROR_PARSE, "Can not parse xml");
+ return herror_new ("soap_env_new_with_method",
+ XML_ERROR_PARSE, "Can not parse xml");
return soap_env_new_from_doc (env, out);
@@ -275,22 +283,22 @@ soap_env_new_with_method (const char *urn, const char *method, SoapEnv **out)
-static
-int _soap_env_xml_io_read(void* ctx, char *buffer, int len)
+static int
+_soap_env_xml_io_read (void *ctx, char *buffer, int len)
{
- int readed;
- http_input_stream_t *in = (http_input_stream_t*)ctx;
- if(!http_input_stream_is_ready(in))
- return 0;
-
- readed = http_input_stream_read(in, buffer, len);
- if (readed == -1)
- return 0;
- return readed;
+ int readed;
+ http_input_stream_t *in = (http_input_stream_t *) ctx;
+ if (!http_input_stream_is_ready (in))
+ return 0;
+
+ readed = http_input_stream_read (in, buffer, len);
+ if (readed == -1)
+ return 0;
+ return readed;
}
-static
-int _soap_env_xml_io_close(void *ctx)
+static int
+_soap_env_xml_io_close (void *ctx)
{
/* do nothing */
return 0;
@@ -298,17 +306,19 @@ int _soap_env_xml_io_close(void *ctx)
herror_t
-soap_env_new_from_stream(http_input_stream_t *in, SoapEnv **out)
+soap_env_new_from_stream (http_input_stream_t * in, SoapEnv ** out)
{
xmlDocPtr doc;
herror_t err;
-
- doc = xmlReadIO(_soap_env_xml_io_read,
- _soap_env_xml_io_close, in, "", NULL, 0);
- if (in->err != H_OK) return in->err;
- if (doc == NULL) return herror_new("soap_env_new_from_stream",
- XML_ERROR_PARSE, "Trying to parse not valid xml");
+ doc = xmlReadIO (_soap_env_xml_io_read,
+ _soap_env_xml_io_close, in, "", NULL, 0);
+
+ if (in->err != H_OK)
+ return in->err;
+ if (doc == NULL)
+ return herror_new ("soap_env_new_from_stream",
+ XML_ERROR_PARSE, "Trying to parse not valid xml");
err = soap_env_new_from_doc (doc, out);
return err;
}
@@ -316,7 +326,7 @@ soap_env_new_from_stream(http_input_stream_t *in, SoapEnv **out)
xmlNodePtr
soap_env_add_item (SoapEnv * call, const char *type,
- const char *name, const char *value)
+ const char *name, const char *value)
{
xmlNodePtr newnode;
@@ -345,7 +355,7 @@ soap_env_add_item (SoapEnv * call, const char *type,
xmlNodePtr
soap_env_add_itemf (SoapEnv * call, const char *type,
- const char *name, const char *format, ...)
+ const char *name, const char *format, ...)
{
va_list ap;
@@ -361,8 +371,8 @@ soap_env_add_itemf (SoapEnv * call, const char *type,
-xmlNodePtr
-soap_env_add_attachment(SoapEnv* call, const char *name, const char *href)
+xmlNodePtr
+soap_env_add_attachment (SoapEnv * call, const char *name, const char *href)
{
xmlNodePtr newnode;
@@ -388,7 +398,7 @@ soap_env_add_attachment(SoapEnv* call, const char *name, const char *href)
void
soap_env_add_custom (SoapEnv * call, void *obj, XmlSerializerCallback cb,
- const char *type, const char *name)
+ const char *type, const char *name)
{
struct XmlNodeHolder holder;
@@ -470,14 +480,15 @@ soap_env_get_body (SoapEnv * env)
xmlNodePtr
-soap_env_get_fault(SoapEnv * env)
+soap_env_get_fault (SoapEnv * env)
{
xmlNodePtr node;
-
- node = soap_env_get_body(env);
- if (!node) return NULL;
+ node = soap_env_get_body (env);
+
+ if (!node)
+ return NULL;
while (node != NULL)
{
@@ -530,9 +541,7 @@ _soap_env_get_body (SoapEnv * env)
}
/*
- find <Body> tag find out namespace
- xpath: //Envelope/Body/
- */
+ find <Body> tag find out namespace xpath: //Envelope/Body/ */
xpathobj = soap_xpath_eval (env->root->doc, "//Envelope/Body");
if (!xpathobj)
@@ -556,7 +565,7 @@ _soap_env_get_body (SoapEnv * env)
return NULL;
}
- body = nodeset->nodeTab[0]; /* body is <Body> */
+ body = nodeset->nodeTab[0]; /* body is <Body> */
xmlXPathFreeObject (xpathobj);
return body;
@@ -591,13 +600,13 @@ soap_env_find_urn (SoapEnv * env, char *urn)
if (ns != NULL)
{
strcpy (urn, (char *) ns->href);
- return 1; /* namespace found! */
+ return 1; /* namespace found! */
}
}
else
- {
- strcpy(urn,"");
- log_warn1("No namespace found");
+ {
+ strcpy (urn, "");
+ log_warn1 ("No namespace found");
return 1;
}
@@ -614,7 +623,7 @@ soap_env_find_methodname (SoapEnv * env, char *method)
if (body == NULL)
return 0;
- node = soap_xml_get_children (body); /* node is the first child */
+ node = soap_xml_get_children (body); /* node is the first child */
if (node == NULL)
{
@@ -643,7 +652,7 @@ soap_env_find_methodname (SoapEnv * env, char *method)
static void
xmlbuilder_start_element (const xmlChar * element_name, int attr_count,
- xmlChar ** keys, xmlChar ** values, void *userData)
+ xmlChar ** keys, xmlChar ** values, void *userData)
{
struct XmlNodeHolder *holder = (struct XmlNodeHolder *) userData;
xmlNodePtr parent = NULL;
@@ -660,7 +669,7 @@ xmlbuilder_start_element (const xmlChar * element_name, int attr_count,
static void
xmlbuilder_characters (const xmlChar * element_name, const xmlChar * chars,
- void *userData)
+ void *userData)
{
struct XmlNodeHolder *holder = (struct XmlNodeHolder *) userData;
xmlNodePtr parent = NULL;
diff --git a/libcsoap/soap-env.h b/libcsoap/soap-env.h
index 523438d..6a3d909 100644
--- a/libcsoap/soap-env.h
+++ b/libcsoap/soap-env.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-env.h,v 1.9 2004/11/02 23:09:26 snowdrop Exp $
+ * $Id: soap-env.h,v 1.10 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -33,10 +33,10 @@
The SOAP envelope object.
*/
typedef struct _SoapEnv
-{
+{
xmlNodePtr root; /** Pointer to the firts xml element (envelope) */
xmlNodePtr cur; /** Pointer to the current xml element. (stack) */
-}SoapEnv;
+} SoapEnv;
/* -------------------------------------------------------------- */
@@ -73,10 +73,10 @@ typedef struct _SoapEnv
*/
herror_t
-soap_env_new_with_fault(fault_code_t faultcode,
- const char *faultstring,
- const char *faultactor,
- const char *detail, SoapEnv **out);
+soap_env_new_with_fault (fault_code_t faultcode,
+ const char *faultstring,
+ const char *faultactor,
+ const char *detail, SoapEnv ** out);
/**
Creates an envelope with a method to invoke a soap service.
@@ -104,7 +104,8 @@ soap_env_new_with_fault(fault_code_t faultcode,
*/
herror_t
-soap_env_new_with_method(const char *urn, const char *method, SoapEnv **out);
+soap_env_new_with_method (const char *urn, const char *method,
+ SoapEnv ** out);
/**
@@ -137,7 +138,7 @@ soap_env_new_with_method(const char *urn, const char *method, SoapEnv **out);
*/
-herror_t soap_env_new_with_response(SoapEnv *req,SoapEnv **out);
+herror_t soap_env_new_with_response (SoapEnv * req, SoapEnv ** out);
/**
@@ -149,7 +150,7 @@ herror_t soap_env_new_with_response(SoapEnv *req,SoapEnv **out);
@returns H_OK if success
*/
-herror_t soap_env_new_from_doc(xmlDocPtr doc, SoapEnv **out);
+herror_t soap_env_new_from_doc (xmlDocPtr doc, SoapEnv ** out);
/**
@@ -160,7 +161,7 @@ herror_t soap_env_new_from_doc(xmlDocPtr doc, SoapEnv **out);
@param out the output envelope object
@returns H_OK if success
*/
-herror_t soap_env_new_from_buffer(const char* buffer,SoapEnv **out);
+herror_t soap_env_new_from_buffer (const char *buffer, SoapEnv ** out);
/**
@@ -170,18 +171,21 @@ herror_t soap_env_new_from_buffer(const char* buffer,SoapEnv **out);
@param out the output envelope object
@returns H_OK if success
*/
-herror_t soap_env_new_from_stream(http_input_stream_t *in, SoapEnv **out);
+herror_t soap_env_new_from_stream (http_input_stream_t * in, SoapEnv ** out);
/* --------------------------------------------------- */
/* XML Serializer functions and typedefs */
/* --------------------------------------------------- */
typedef void (*XmlSerializerCallback)
- (void* /*obj*/, const xmlChar * /*root_element_name*/,
- void (*OnStartElement)(const xmlChar* element_name, int attr_count, xmlChar **keys, xmlChar **values, void* userData),
- void (*OnCharacters)(const xmlChar* element_name, const xmlChar* chars, void* userData),
- void (*OnEndElement)(const xmlChar* element_name, void* userData),
- void* /* userdata*/);
+ (void * /* obj */ , const xmlChar * /* root_element_name */ ,
+ void (*OnStartElement) (const xmlChar * element_name, int attr_count,
+ xmlChar ** keys, xmlChar ** values,
+ void *userData),
+ void (*OnCharacters) (const xmlChar * element_name, const xmlChar * chars,
+ void *userData),
+ void (*OnEndElement) (const xmlChar * element_name, void *userData),
+ void * /* userdata */ );
/* ------------------------------------------------------ */
@@ -206,9 +210,9 @@ typedef void (*XmlSerializerCallback)
@see tutorial
*/
-xmlNodePtr
-soap_env_add_item(SoapEnv* env, const char *type,
- const char *name, const char *value);
+xmlNodePtr
+soap_env_add_item (SoapEnv * env, const char *type,
+ const char *name, const char *value);
/**
@@ -227,8 +231,8 @@ soap_env_add_item(SoapEnv* env, const char *type,
@see soap_ctx_add_file tutorial
*/
-xmlNodePtr
-soap_env_add_attachment(SoapEnv* env, const char *name, const char *href);
+xmlNodePtr
+soap_env_add_attachment (SoapEnv * env, const char *name, const char *href);
/**
@@ -239,8 +243,8 @@ soap_env_add_attachment(SoapEnv* env, const char *name, const char *href);
*/
void
-soap_env_add_custom(SoapEnv* env, void *obj, XmlSerializerCallback cb,
- const char *type, const char *name);
+soap_env_add_custom (SoapEnv * env, void *obj, XmlSerializerCallback cb,
+ const char *type, const char *name);
/**
Same as soap_env_add_item() with c style arguments
@@ -251,9 +255,9 @@ soap_env_add_custom(SoapEnv* env, void *obj, XmlSerializerCallback cb,
@see soap_env_add_item
*/
-xmlNodePtr
-soap_env_add_itemf(SoapEnv* env, const char *type,
- const char *name, const char *value, ...);
+xmlNodePtr
+soap_env_add_itemf (SoapEnv * env, const char *type,
+ const char *name, const char *value, ...);
/**
@@ -280,9 +284,8 @@ soap_env_add_itemf(SoapEnv* env, const char *type,
@see tutorial
*/
-xmlNodePtr
-soap_env_push_item(SoapEnv *env, const char *type,
- const char *name);
+xmlNodePtr
+soap_env_push_item (SoapEnv * env, const char *type, const char *name);
/**
Sets the xml pointer 1 level higher.
@@ -290,16 +293,14 @@ soap_env_push_item(SoapEnv *env, const char *type,
@param env The envelope object
@see soap_env_push_item
*/
-void
-soap_env_pop_item(SoapEnv* env);
+void soap_env_pop_item (SoapEnv * env);
/**
Free the envelope.
@param env The envelope object
*/
-void
-soap_env_free(SoapEnv *env);
+void soap_env_free (SoapEnv * env);
/* --------------------------------------------------- */
@@ -310,33 +311,29 @@ soap_env_free(SoapEnv *env);
/**
Gets the xml node pointing to SOAP Body.
*/
-xmlNodePtr
-soap_env_get_body(SoapEnv* env);
+xmlNodePtr soap_env_get_body (SoapEnv * env);
/**
Get the xml node pointing to SOAP method (call)
*/
-xmlNodePtr
-soap_env_get_method(SoapEnv* env);
+xmlNodePtr soap_env_get_method (SoapEnv * env);
/**
Get the xml node pointing to SOAP Fault
*/
-xmlNodePtr
-soap_env_get_fault(SoapEnv* env);
+xmlNodePtr soap_env_get_fault (SoapEnv * env);
/**
Get the xml node pointing to SOAP Header
*/
-xmlNodePtr
-soap_env_get_header(SoapEnv* env);
+xmlNodePtr soap_env_get_header (SoapEnv * env);
-int soap_env_find_urn(SoapEnv *env, char *urn);
-int soap_env_find_methodname(SoapEnv *env, char *methodname);
+int soap_env_find_urn (SoapEnv * env, char *urn);
+int soap_env_find_methodname (SoapEnv * env, char *methodname);
@@ -344,5 +341,3 @@ int soap_env_find_methodname(SoapEnv *env, char *methodname);
#endif
-
-
diff --git a/libcsoap/soap-fault.c b/libcsoap/soap-fault.c
index eeb146d..3c8f5c1 100644
--- a/libcsoap/soap-fault.c
+++ b/libcsoap/soap-fault.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-fault.c,v 1.6 2005/12/19 14:06:16 snowdrop Exp $
+* $Id: soap-fault.c,v 1.7 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -62,67 +62,67 @@ static char *fault_mu = "MustUnderstand";
static char *fault_client = "Client";
static char *fault_server = "Server";
-xmlDocPtr soap_fault_build(fault_code_t fcode,
- const char *faultstring,
- const char *faultactor,
- const char *detail)
+xmlDocPtr
+soap_fault_build (fault_code_t fcode,
+ const char *faultstring,
+ const char *faultactor, const char *detail)
{
- /* variables */
- char *faultcode;
- int bufferlen = 2000;
- char *buffer;
- xmlDocPtr fault; /* result */
+ /* variables */
+ char *faultcode;
+ int bufferlen = 2000;
+ char *buffer;
+ xmlDocPtr fault; /* result */
- log_verbose1("Build fault");
+ log_verbose1 ("Build fault");
- switch (fcode) {
+ switch (fcode)
+ {
case Fault_VersionMismatch:
- faultcode = fault_vm;
- break;
+ faultcode = fault_vm;
+ break;
case Fault_MustUnderstand:
- faultcode = fault_mu;
- break;
+ faultcode = fault_mu;
+ break;
case Fault_Client:
- faultcode = fault_client;
- break;
+ faultcode = fault_client;
+ break;
case Fault_Server:
- faultcode = fault_server;
- break;
+ faultcode = fault_server;
+ break;
default:
- faultcode = fault_client;
- }
+ faultcode = fault_client;
+ }
- /* calculate buffer length */
- if (faultstring) bufferlen += strlen(faultstring);
- if (faultactor) bufferlen += strlen(faultactor);
- if (detail) bufferlen += strlen(detail);
+ /* calculate buffer length */
+ if (faultstring)
+ bufferlen += strlen (faultstring);
+ if (faultactor)
+ bufferlen += strlen (faultactor);
+ if (detail)
+ bufferlen += strlen (detail);
- log_verbose2("Creating buffer with %d bytes", bufferlen);
- buffer = (char*)malloc(bufferlen);
+ log_verbose2 ("Creating buffer with %d bytes", bufferlen);
+ buffer = (char *) malloc (bufferlen);
- sprintf(buffer, _SOAP_FAULT_TEMPLATE_,
- soap_env_ns, soap_env_enc, soap_xsi_ns,
- soap_xsd_ns, faultcode,
- faultstring?faultstring:"error",
- faultactor?faultactor:"",
- detail?detail:"");
+ sprintf (buffer, _SOAP_FAULT_TEMPLATE_,
+ soap_env_ns, soap_env_enc, soap_xsi_ns,
+ soap_xsd_ns, faultcode,
+ faultstring ? faultstring : "error",
+ faultactor ? faultactor : "", detail ? detail : "");
- fault = xmlParseDoc(BAD_CAST buffer);
- free(buffer);
-
- if (fault == NULL) {
- log_error1("Can not create xml document!");
-
- return soap_fault_build(fcode, "Can not create fault object in xml",
- "soap_fault_build()", NULL);
- }
-
- log_verbose2("Returning fault (%p)", fault);
- return fault;
-
-}
+ fault = xmlParseDoc (BAD_CAST buffer);
+ free (buffer);
+ if (fault == NULL)
+ {
+ log_error1 ("Can not create xml document!");
+ return soap_fault_build (fcode, "Can not create fault object in xml",
+ "soap_fault_build()", NULL);
+ }
+ log_verbose2 ("Returning fault (%p)", fault);
+ return fault;
+}
diff --git a/libcsoap/soap-fault.h b/libcsoap/soap-fault.h
index dcc18e2..46471a0 100644
--- a/libcsoap/soap-fault.h
+++ b/libcsoap/soap-fault.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-fault.h,v 1.2 2004/10/15 13:34:02 snowdrop Exp $
+ * $Id: soap-fault.h,v 1.3 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -28,18 +28,18 @@
-typedef enum _fault_code {
+typedef enum _fault_code
+{
Fault_VersionMismatch,
Fault_MustUnderstand,
Fault_Client,
Fault_Server
-}fault_code_t;
+} fault_code_t;
-xmlDocPtr soap_fault_build(fault_code_t faultcode,
- const char *faultstring,
- const char *faultactor,
- const char *detail);
+xmlDocPtr soap_fault_build (fault_code_t faultcode,
+ const char *faultstring,
+ const char *faultactor, const char *detail);
#endif
diff --git a/libcsoap/soap-router.c b/libcsoap/soap-router.c
index 966edad..74c53be 100644
--- a/libcsoap/soap-router.c
+++ b/libcsoap/soap-router.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-router.c,v 1.3 2004/08/26 17:06:18 rans Exp $
+* $Id: soap-router.c,v 1.4 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -24,80 +24,88 @@
#include <libcsoap/soap-router.h>
#include <string.h>
-SoapRouter *soap_router_new()
+SoapRouter *
+soap_router_new ()
{
- SoapRouter *router;
+ SoapRouter *router;
- router = (SoapRouter*)malloc(sizeof(SoapRouter));
- router->service_head = NULL;
- router->service_tail = NULL;
+ router = (SoapRouter *) malloc (sizeof (SoapRouter));
+ router->service_head = NULL;
+ router->service_tail = NULL;
- return router;
+ return router;
}
-void soap_router_register_service(SoapRouter *router,
- SoapServiceFunc func,
- const char* method,
- const char* urn)
+void
+soap_router_register_service (SoapRouter * router,
+ SoapServiceFunc func,
+ const char *method, const char *urn)
{
- SoapService *service;
-
- service = soap_service_new(urn, method, func);
-
- if (router->service_tail == NULL) {
- router->service_head =
- router->service_tail = soap_service_node_new(service, NULL);
- } else {
- router->service_tail->next =
- soap_service_node_new(service, NULL);
- router->service_tail = router->service_tail->next;
- }
+ SoapService *service;
+
+ service = soap_service_new (urn, method, func);
+
+ if (router->service_tail == NULL)
+ {
+ router->service_head =
+ router->service_tail = soap_service_node_new (service, NULL);
+ }
+ else
+ {
+ router->service_tail->next = soap_service_node_new (service, NULL);
+ router->service_tail = router->service_tail->next;
+ }
}
-SoapService* soap_router_find_service(SoapRouter *router,
- const char* urn,
- const char* method)
+SoapService *
+soap_router_find_service (SoapRouter * router,
+ const char *urn, const char *method)
{
- SoapServiceNode *node;
+ SoapServiceNode *node;
- if (router == NULL || urn == NULL || method == NULL)
- return NULL;
+ if (router == NULL || urn == NULL || method == NULL)
+ return NULL;
- node = router->service_head;
+ node = router->service_head;
- while (node) {
- if (node->service && node->service->urn
- && node->service->method) {
+ while (node)
+ {
+ if (node->service && node->service->urn && node->service->method)
+ {
- if (!strcmp(node->service->urn, urn)
- && !strcmp(node->service->method, method))
- return node->service;
+ if (!strcmp (node->service->urn, urn)
+ && !strcmp (node->service->method, method))
+ return node->service;
- }
+ }
- node = node->next;
- }
+ node = node->next;
+ }
- return NULL;
+ return NULL;
}
-void soap_router_free(SoapRouter *router)
+void
+soap_router_free (SoapRouter * router)
{
- SoapServiceNode *node;
- log_verbose2("enter: router=%p", router);
- if (router == NULL) return;
-
- while (router->service_head) {
- node = router->service_head->next;
- /* log_verbose2("soap_service_free(%p)\n", router->service_head->service);*/
- soap_service_free(router->service_head->service);
- free(router->service_head);
- router->service_head = node;
- }
-
- free(router);
- log_verbose1("leave with success");
+ SoapServiceNode *node;
+ log_verbose2 ("enter: router=%p", router);
+ if (router == NULL)
+ return;
+
+ while (router->service_head)
+ {
+ node = router->service_head->next;
+ /* log_verbose2("soap_service_free(%p)\n",
+ router->service_head->service); */
+ soap_service_free (router->service_head->service);
+ free (router->service_head);
+ router->service_head = node;
+ }
+
+ free (router);
+ log_verbose1 ("leave with success");
}
diff --git a/libcsoap/soap-router.h b/libcsoap/soap-router.h
index b0a2536..f82d43c 100644
--- a/libcsoap/soap-router.h
+++ b/libcsoap/soap-router.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-router.h,v 1.2 2004/02/10 09:51:10 snowdrop Exp $
+ * $Id: soap-router.h,v 1.3 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -35,7 +35,7 @@ typedef struct _SoapRouter
{
SoapServiceNode *service_head;
SoapServiceNode *service_tail;
-}SoapRouter;
+} SoapRouter;
/**
@@ -47,7 +47,7 @@ typedef struct _SoapRouter
@returns Soap router
@see soap_router_free
*/
-SoapRouter *soap_router_new();
+SoapRouter *soap_router_new ();
/**
@@ -60,10 +60,9 @@ SoapRouter *soap_router_new();
the client side.
@param urn The urn for this service
*/
-void soap_router_register_service(SoapRouter *router,
- SoapServiceFunc func,
- const char* method,
- const char* urn);
+void soap_router_register_service (SoapRouter * router,
+ SoapServiceFunc func,
+ const char *method, const char *urn);
/**
@@ -75,9 +74,8 @@ void soap_router_register_service(SoapRouter *router,
@return The service if found, NULL otherwise.
*/
-SoapService* soap_router_find_service(SoapRouter *router,
- const char* urn,
- const char* method);
+SoapService *soap_router_find_service (SoapRouter * router,
+ const char *urn, const char *method);
/**
@@ -85,6 +83,6 @@ SoapService* soap_router_find_service(SoapRouter *router,
@param router The router object to free
*/
-void soap_router_free(SoapRouter *router);
+void soap_router_free (SoapRouter * router);
#endif
diff --git a/libcsoap/soap-server.c b/libcsoap/soap-server.c
index 591ecc0..9daf639 100644
--- a/libcsoap/soap-server.c
+++ b/libcsoap/soap-server.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-server.c,v 1.12 2005/12/19 14:06:16 snowdrop Exp $
+* $Id: soap-server.c,v 1.13 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -28,362 +28,409 @@
typedef struct _SoapRouterNode
{
- char *context;
- SoapRouter *router;
- struct _SoapRouterNode *next;
+ char *context;
+ SoapRouter *router;
+ struct _SoapRouterNode *next;
-}SoapRouterNode;
+} SoapRouterNode;
SoapRouterNode *head = NULL;
SoapRouterNode *tail = NULL;
static
-SoapRouterNode *router_node_new(SoapRouter *router,
- const char *context,
- SoapRouterNode *next);
+ SoapRouterNode *router_node_new (SoapRouter * router,
+ const char *context,
+ SoapRouterNode * next);
-static
-SoapRouter *router_find(const char *context);
+static SoapRouter *router_find (const char *context);
-static
-void _soap_server_send_ctx(httpd_conn_t* conn, SoapCtx *ctxres);
+static void _soap_server_send_ctx (httpd_conn_t * conn, SoapCtx * ctxres);
/*---------------------------------*/
-void soap_server_entry(httpd_conn_t *conn, hrequest_t *req);
+void soap_server_entry (httpd_conn_t * conn, hrequest_t * req);
+static void _soap_server_send_env (http_output_stream_t * out, SoapEnv * env);
static
-void _soap_server_send_env(http_output_stream_t *out, SoapEnv* env);
-static
-void _soap_server_send_fault(httpd_conn_t *conn, hpair_t *header,
- const char* errmsg);
+ void _soap_server_send_fault (httpd_conn_t * conn, hpair_t * header,
+ const char *errmsg);
/*---------------------------------*/
-herror_t soap_server_init_args(int argc, char *argv[])
+herror_t
+soap_server_init_args (int argc, char *argv[])
{
- return httpd_init(argc, argv);
+ return httpd_init (argc, argv);
}
-int soap_server_register_router(SoapRouter *router, const char* context)
+int
+soap_server_register_router (SoapRouter * router, const char *context)
{
- if (!httpd_register(context, soap_server_entry)) {
- return 0;
- }
-
- if (tail == NULL) {
- head = tail = router_node_new(router, context, NULL);
- } else {
- tail->next = router_node_new(router, context, NULL);
- tail = tail->next;
- }
-
- return 1;
+ if (!httpd_register (context, soap_server_entry))
+ {
+ return 0;
+ }
+
+ if (tail == NULL)
+ {
+ head = tail = router_node_new (router, context, NULL);
+ }
+ else
+ {
+ tail->next = router_node_new (router, context, NULL);
+ tail = tail->next;
+ }
+
+ return 1;
}
-herror_t soap_server_run()
+herror_t
+soap_server_run ()
{
- return httpd_run();
+ return httpd_run ();
}
-void soap_server_destroy()
+void
+soap_server_destroy ()
{
- SoapRouterNode *node = head;
- SoapRouterNode *tmp;
-
- while (node != NULL) {
- tmp = node->next;
- log_verbose2("soap_router_free(%p)", node->router);
- soap_router_free(node->router);
- free(node->context);
- free(node);
- node = tmp;
- }
- httpd_destroy();
+ SoapRouterNode *node = head;
+ SoapRouterNode *tmp;
+
+ while (node != NULL)
+ {
+ tmp = node->next;
+ log_verbose2 ("soap_router_free(%p)", node->router);
+ soap_router_free (node->router);
+ free (node->context);
+ free (node);
+ node = tmp;
+ }
+ httpd_destroy ();
}
-void soap_server_entry(httpd_conn_t *conn, hrequest_t *req)
+void
+soap_server_entry (httpd_conn_t * conn, hrequest_t * req)
{
- hpair_t *header = NULL;
- char buffer[1054];
- char urn[150];
- char method[150];
- SoapCtx *ctx, *ctxres;
- SoapRouter *router;
- SoapService *service;
- SoapEnv *env;
- herror_t err;
-
- if (req->method != HTTP_REQUEST_POST) {
-
- httpd_send_header(conn, 200, "OK");
- http_output_stream_write_string(conn->out, "<html><head></head><body>");
- http_output_stream_write_string(conn->out, "<h1>Sorry! </h1><hr>");
- http_output_stream_write_string(conn->out, "I only speak with 'POST' method");
- http_output_stream_write_string(conn->out, "</body></html>");
- return;
- }
-
-
- header = hpairnode_new(HEADER_CONTENT_TYPE, "text/xml", NULL);
-
- err = soap_env_new_from_stream(req->in, &env);
- if (err != H_OK)
- {
- _soap_server_send_fault(conn, header, herror_message(err));
- herror_release(err);
- return;
- }
-
-
- if (env == NULL) {
-
- _soap_server_send_fault(conn, header,"Can not receive POST data!");
-
- } else {
-
- ctx = soap_ctx_new(env);
- soap_ctx_add_files(ctx, req->attachments);
+ hpair_t *header = NULL;
+ char buffer[1054];
+ char urn[150];
+ char method[150];
+ SoapCtx *ctx, *ctxres;
+ SoapRouter *router;
+ SoapService *service;
+ SoapEnv *env;
+ herror_t err;
- if (ctx->env == NULL) {
+ if (req->method != HTTP_REQUEST_POST)
+ {
- _soap_server_send_fault(conn, header,"Can not parse POST data!");
+ httpd_send_header (conn, 200, "OK");
+ http_output_stream_write_string (conn->out, "<html><head></head><body>");
+ http_output_stream_write_string (conn->out, "<h1>Sorry! </h1><hr>");
+ http_output_stream_write_string (conn->out,
+ "I only speak with 'POST' method");
+ http_output_stream_write_string (conn->out, "</body></html>");
+ return;
+ }
- } else {
- /*soap_xml_doc_print(env->root->doc);*/
+ header = hpairnode_new (HEADER_CONTENT_TYPE, "text/xml", NULL);
- router = router_find(req->path);
+ err = soap_env_new_from_stream (req->in, &env);
+ if (err != H_OK)
+ {
+ _soap_server_send_fault (conn, header, herror_message (err));
+ herror_release (err);
+ return;
+ }
- if ( router == NULL) {
- _soap_server_send_fault(conn, header, "Can not find router!");
+ if (env == NULL)
+ {
- } else {
+ _soap_server_send_fault (conn, header, "Can not receive POST data!");
- if (!soap_env_find_urn(ctx->env, urn)) {
+ }
+ else
+ {
- _soap_server_send_fault(conn, header, "No URN found!");
- soap_ctx_free(ctx);
- return;
- } else {
- log_verbose2("urn: '%s'", urn);
- }
+ ctx = soap_ctx_new (env);
+ soap_ctx_add_files (ctx, req->attachments);
- if (!soap_env_find_methodname(ctx->env, method)) {
+ if (ctx->env == NULL)
+ {
- _soap_server_send_fault(conn, header, "No method found!");
- soap_ctx_free(ctx);
- return;
- }else {
- log_verbose2("method: '%s'", method);
- }
+ _soap_server_send_fault (conn, header, "Can not parse POST data!");
- service = soap_router_find_service(router, urn, method);
+ }
+ else
+ {
- if (service == NULL) {
+ /* soap_xml_doc_print(env->root->doc); */
- sprintf(buffer, "URN '%s' not found", urn);
- _soap_server_send_fault(conn, header, buffer);
- soap_ctx_free(ctx);
- return;
- } else {
+ router = router_find (req->path);
- log_verbose2("func: %p", service->func);
- ctxres = soap_ctx_new(NULL);
- /* ===================================== */
- /* CALL SERVICE FUNCTION */
- /* ===================================== */
- err = service->func(ctx, ctxres);
- if (err != H_OK) {
- sprintf(buffer, "Service returned following error message: '%s'",
- herror_message(err));
- herror_release(err);
- _soap_server_send_fault(conn, header, buffer);
- soap_ctx_free(ctx);
- return;
- }
+ if (router == NULL)
+ {
- if (ctxres->env == NULL) {
+ _soap_server_send_fault (conn, header, "Can not find router!");
- sprintf(buffer, "Service '%s' returned no envelope", urn);
- _soap_server_send_fault(conn, header, buffer);
- soap_ctx_free(ctx);
- return;
-
- } else {
+ }
+ else
+ {
+
+ if (!soap_env_find_urn (ctx->env, urn))
+ {
+
+ _soap_server_send_fault (conn, header, "No URN found!");
+ soap_ctx_free (ctx);
+ return;
+ }
+ else
+ {
+ log_verbose2 ("urn: '%s'", urn);
+ }
+
+ if (!soap_env_find_methodname (ctx->env, method))
+ {
+
+ _soap_server_send_fault (conn, header, "No method found!");
+ soap_ctx_free (ctx);
+ return;
+ }
+ else
+ {
+ log_verbose2 ("method: '%s'", method);
+ }
+
+ service = soap_router_find_service (router, urn, method);
+
+ if (service == NULL)
+ {
+
+ sprintf (buffer, "URN '%s' not found", urn);
+ _soap_server_send_fault (conn, header, buffer);
+ soap_ctx_free (ctx);
+ return;
+ }
+ else
+ {
+
+ log_verbose2 ("func: %p", service->func);
+ ctxres = soap_ctx_new (NULL);
+ /* ===================================== */
+ /* CALL SERVICE FUNCTION */
+ /* ===================================== */
+ err = service->func (ctx, ctxres);
+ if (err != H_OK)
+ {
+ sprintf (buffer, "Service returned following error message: '%s'",
+ herror_message (err));
+ herror_release (err);
+ _soap_server_send_fault (conn, header, buffer);
+ soap_ctx_free (ctx);
+ return;
+ }
+
+ if (ctxres->env == NULL)
+ {
+
+ sprintf (buffer, "Service '%s' returned no envelope", urn);
+ _soap_server_send_fault (conn, header, buffer);
+ soap_ctx_free (ctx);
+ return;
+
+ }
+ else
+ {
/* httpd_send_header(conn, 200, "OK");
_soap_server_send_env(conn->out, ctxres->env);
*/
- _soap_server_send_ctx(conn, ctxres);
- /* free envctx */
- soap_ctx_free(ctxres);
- }
+ _soap_server_send_ctx (conn, ctxres);
+ /* free envctx */
+ soap_ctx_free (ctxres);
+ }
- }
+ }
- }
- }
- soap_ctx_free(ctx);
- }
+ }
+ }
+ soap_ctx_free (ctx);
+ }
}
-static
-void _soap_server_send_ctx(httpd_conn_t* conn, SoapCtx *ctx)
+static void
+_soap_server_send_ctx (httpd_conn_t * conn, SoapCtx * ctx)
{
- xmlBufferPtr buffer;
- static int counter = 1;
- char strbuffer[150];
- part_t *part;
+ xmlBufferPtr buffer;
+ static int counter = 1;
+ char strbuffer[150];
+ part_t *part;
- if (ctx->env == NULL || ctx->env->root == NULL) return;
+ if (ctx->env == NULL || ctx->env->root == NULL)
+ return;
- buffer = xmlBufferCreate();
+ buffer = xmlBufferCreate ();
/* xmlIndentTreeOutput = 1;*/
- xmlThrDefIndentTreeOutput(1);
+ xmlThrDefIndentTreeOutput (1);
/* xmlKeepBlanksDefault(0);*/
- xmlNodeDump(buffer, ctx->env->root->doc, ctx->env->root, 1 ,1);
-
- if (ctx->attachments)
- {
- sprintf(strbuffer, "000128590350940924234%d", counter++);
- httpd_mime_send_header(conn, strbuffer, "", "text/xml", 200, "OK");
- httpd_mime_next(conn, strbuffer, "text/xml", "binary");
- http_output_stream_write_string(conn->out, (const char*)xmlBufferContent(buffer));
- part = ctx->attachments->parts;
- while (part)
- {
- httpd_mime_send_file(conn, part->id, part->content_type, part->transfer_encoding, part->filename);
- part = part->next;
- }
- httpd_mime_end(conn);
- }
- else
- {
- char buflen[100];
- xmlXPathContextPtr xpathCtx;
- xmlXPathObjectPtr xpathObj;
- xpathCtx = xmlXPathNewContext(ctx->env->root->doc);
- xpathObj = xmlXPathEvalExpression("//Fault", xpathCtx);
+ xmlNodeDump (buffer, ctx->env->root->doc, ctx->env->root, 1, 1);
+
+ if (ctx->attachments)
+ {
+ sprintf (strbuffer, "000128590350940924234%d", counter++);
+ httpd_mime_send_header (conn, strbuffer, "", "text/xml", 200, "OK");
+ httpd_mime_next (conn, strbuffer, "text/xml", "binary");
+ http_output_stream_write_string (conn->out,
+ (const char *)
+ xmlBufferContent (buffer));
+ part = ctx->attachments->parts;
+ while (part)
+ {
+ httpd_mime_send_file (conn, part->id, part->content_type,
+ part->transfer_encoding, part->filename);
+ part = part->next;
+ }
+ httpd_mime_end (conn);
+ }
+ else
+ {
+ char buflen[100];
+ xmlXPathContextPtr xpathCtx;
+ xmlXPathObjectPtr xpathObj;
+ xpathCtx = xmlXPathNewContext (ctx->env->root->doc);
+ xpathObj = xmlXPathEvalExpression ("//Fault", xpathCtx);
#ifdef WIN32
#define snprintf(buffer, num, s1, s2) sprintf(buffer, s1,s2)
#endif
- snprintf(buflen,100,"%d", strlen((const char*)xmlBufferContent (buffer)));
- httpd_set_header (conn, HEADER_CONTENT_LENGTH, buflen);
- if((xpathObj->nodesetval) ? xpathObj->nodesetval->nodeNr : 0){
- httpd_send_header(conn, 500, "FAILED");
- } else {
- httpd_send_header(conn, 200, "OK");
- }
-
- http_output_stream_write_string(conn->out, (const char*)xmlBufferContent(buffer));
- xmlXPathFreeObject(xpathObj);
- xmlXPathFreeContext(xpathCtx);
-
- }
- xmlBufferFree(buffer);
+ snprintf (buflen, 100, "%d",
+ strlen ((const char *) xmlBufferContent (buffer)));
+ httpd_set_header (conn, HEADER_CONTENT_LENGTH, buflen);
+ if ((xpathObj->nodesetval) ? xpathObj->nodesetval->nodeNr : 0)
+ {
+ httpd_send_header (conn, 500, "FAILED");
+ }
+ else
+ {
+ httpd_send_header (conn, 200, "OK");
+ }
+
+ http_output_stream_write_string (conn->out,
+ (const char *)
+ xmlBufferContent (buffer));
+ xmlXPathFreeObject (xpathObj);
+ xmlXPathFreeContext (xpathCtx);
+
+ }
+ xmlBufferFree (buffer);
}
-static
-void _soap_server_send_env(http_output_stream_t *out, SoapEnv* env)
+static void
+_soap_server_send_env (http_output_stream_t * out, SoapEnv * env)
{
- xmlBufferPtr buffer;
- if (env == NULL || env->root == NULL) return;
+ xmlBufferPtr buffer;
+ if (env == NULL || env->root == NULL)
+ return;
- buffer = xmlBufferCreate();
- xmlNodeDump(buffer, env->root->doc, env->root, 1 ,1);
- http_output_stream_write_string(out, (const char*)xmlBufferContent(buffer));
- xmlBufferFree(buffer);
+ buffer = xmlBufferCreate ();
+ xmlNodeDump (buffer, env->root->doc, env->root, 1, 1);
+ http_output_stream_write_string (out,
+ (const char *) xmlBufferContent (buffer));
+ xmlBufferFree (buffer);
}
-static
-void _soap_server_send_fault(httpd_conn_t *conn, hpair_t *header,
- const char* errmsg)
+static void
+_soap_server_send_fault (httpd_conn_t * conn, hpair_t * header,
+ const char *errmsg)
{
- SoapEnv *envres;
- herror_t err;
- char buffer[45];
- httpd_set_headers(conn, header);
- err = httpd_send_header(conn, 500, "FAILED");
- if (err != H_OK) {
- /* WARNING: unhandled exception !*/
- log_error4("%s():%s [%d]", herror_func(err), herror_message(err), herror_code(err));
- return;
- }
-
- err = soap_env_new_with_fault(Fault_Server,
- errmsg?errmsg:"General error",
- "cSOAP_Server", NULL, &envres);
- if (err != H_OK) {
- log_error1(herror_message(err));
- http_output_stream_write_string(conn->out, "<html><head></head><body>");
- http_output_stream_write_string(conn->out, "<h1>Error</h1><hr>");
- http_output_stream_write_string(conn->out, "Error while sending fault object:<br>Message: ");
- http_output_stream_write_string(conn->out, herror_message(err));
- http_output_stream_write_string(conn->out, "<br>Function: ");
- http_output_stream_write_string(conn->out, herror_func(err));
- http_output_stream_write_string(conn->out, "<br>Error code: ");
- sprintf(buffer, "%d", herror_code(err));
- http_output_stream_write_string(conn->out, buffer);
- http_output_stream_write_string(conn->out, "</body></html>");
- return;
-
- herror_release(err);
- } else {
- _soap_server_send_env(conn->out, envres);
- }
+ SoapEnv *envres;
+ herror_t err;
+ char buffer[45];
+ httpd_set_headers (conn, header);
+ err = httpd_send_header (conn, 500, "FAILED");
+ if (err != H_OK)
+ {
+ /* WARNING: unhandled exception ! */
+ log_error4 ("%s():%s [%d]", herror_func (err), herror_message (err),
+ herror_code (err));
+ return;
+ }
+
+ err = soap_env_new_with_fault (Fault_Server,
+ errmsg ? errmsg : "General error",
+ "cSOAP_Server", NULL, &envres);
+ if (err != H_OK)
+ {
+ log_error1 (herror_message (err));
+ http_output_stream_write_string (conn->out, "<html><head></head><body>");
+ http_output_stream_write_string (conn->out, "<h1>Error</h1><hr>");
+ http_output_stream_write_string (conn->out,
+ "Error while sending fault object:<br>Message: ");
+ http_output_stream_write_string (conn->out, herror_message (err));
+ http_output_stream_write_string (conn->out, "<br>Function: ");
+ http_output_stream_write_string (conn->out, herror_func (err));
+ http_output_stream_write_string (conn->out, "<br>Error code: ");
+ sprintf (buffer, "%d", herror_code (err));
+ http_output_stream_write_string (conn->out, buffer);
+ http_output_stream_write_string (conn->out, "</body></html>");
+ return;
+
+ herror_release (err);
+ }
+ else
+ {
+ _soap_server_send_env (conn->out, envres);
+ }
}
-static
-SoapRouterNode *router_node_new(SoapRouter *router,
- const char *context,
- SoapRouterNode *next)
+static SoapRouterNode *
+router_node_new (SoapRouter * router,
+ const char *context, SoapRouterNode * next)
{
- SoapRouterNode *node;
- const char *noname = "/lost_found";
-
- node = (SoapRouterNode*)malloc(sizeof(SoapRouterNode));
- if (context) {
- node->context = (char*)malloc(strlen(context)+1);
- strcpy(node->context, context);
- } else {
- log_warn2("context is null. Using '%s'", noname);
- node->context = (char*)malloc(strlen(noname)+1);
- strcpy(node->context, noname);
- }
-
- node->router = router;
- node->next = next;
-
- return node;
+ SoapRouterNode *node;
+ const char *noname = "/lost_found";
+
+ node = (SoapRouterNode *) malloc (sizeof (SoapRouterNode));
+ if (context)
+ {
+ node->context = (char *) malloc (strlen (context) + 1);
+ strcpy (node->context, context);
+ }
+ else
+ {
+ log_warn2 ("context is null. Using '%s'", noname);
+ node->context = (char *) malloc (strlen (noname) + 1);
+ strcpy (node->context, noname);
+ }
+
+ node->router = router;
+ node->next = next;
+
+ return node;
}
-static
-SoapRouter *router_find(const char* context)
+static SoapRouter *
+router_find (const char *context)
{
- SoapRouterNode *node = head;
+ SoapRouterNode *node = head;
- while (node != NULL) {
- if (!strcmp(node->context, context))
- return node->router;
- node = node->next;
- }
+ while (node != NULL)
+ {
+ if (!strcmp (node->context, context))
+ return node->router;
+ node = node->next;
+ }
- return NULL;
+ return NULL;
}
-
-
-
-
-
diff --git a/libcsoap/soap-server.h b/libcsoap/soap-server.h
index 5290642..b829909 100644
--- a/libcsoap/soap-server.h
+++ b/libcsoap/soap-server.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-server.h,v 1.5 2004/11/02 23:09:26 snowdrop Exp $
+ * $Id: soap-server.h,v 1.6 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -44,7 +44,7 @@
@returns 1 if success, 0 otherwise
*/
-herror_t soap_server_init_args(int argc, char *argv[]);
+herror_t soap_server_init_args (int argc, char *argv[]);
/**
@@ -61,22 +61,20 @@ herror_t soap_server_init_args(int argc, char *argv[]);
@see soap_router_register_service
*/
-int soap_server_register_router(SoapRouter *router, const char* context);
+int soap_server_register_router (SoapRouter * router, const char *context);
/**
Enters the server loop and starts to listen to
http requests.
*/
-herror_t soap_server_run();
+herror_t soap_server_run ();
/**
Frees the soap server.
*/
-void soap_server_destroy();
+void soap_server_destroy ();
#endif
-
-
diff --git a/libcsoap/soap-service.c b/libcsoap/soap-service.c
index e8ef81d..91be66e 100644
--- a/libcsoap/soap-service.c
+++ b/libcsoap/soap-service.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-service.c,v 1.4 2004/09/19 07:05:03 snowdrop Exp $
+* $Id: soap-service.c,v 1.5 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -25,65 +25,71 @@
#include <nanohttp/nanohttp-common.h>
#include <string.h>
-SoapServiceNode *soap_service_node_new(SoapService *service,
- SoapServiceNode *next)
+SoapServiceNode *
+soap_service_node_new (SoapService * service, SoapServiceNode * next)
{
- SoapServiceNode *node ;
+ SoapServiceNode *node;
- node = (SoapServiceNode*)malloc(sizeof(SoapServiceNode));
- node->service = service;
- node->next = next;
+ node = (SoapServiceNode *) malloc (sizeof (SoapServiceNode));
+ node->service = service;
+ node->next = next;
- return node;
+ return node;
}
-SoapService *soap_service_new(const char* urn,
- const char *method,
- SoapServiceFunc f)
+SoapService *
+soap_service_new (const char *urn, const char *method, SoapServiceFunc f)
{
- SoapService *service;
-
-
- service = (SoapService*)malloc(sizeof(SoapService));
- service->func = f;
-
- if (urn != NULL) {
- service->urn = (char*)malloc(strlen(urn)+1);
- strcpy(service->urn, urn);
- } else {
- log_warn1("urn is NULL");
- service->urn = "";
- }
-
- if (method != NULL) {
- service->method = (char*)malloc(strlen(method)+1);
- strcpy(service->method, method);
- } else {
- log_warn1("method is NULL");
- service->method = "";
- }
-
- return service;
+ SoapService *service;
+
+
+ service = (SoapService *) malloc (sizeof (SoapService));
+ service->func = f;
+
+ if (urn != NULL)
+ {
+ service->urn = (char *) malloc (strlen (urn) + 1);
+ strcpy (service->urn, urn);
+ }
+ else
+ {
+ log_warn1 ("urn is NULL");
+ service->urn = "";
+ }
+
+ if (method != NULL)
+ {
+ service->method = (char *) malloc (strlen (method) + 1);
+ strcpy (service->method, method);
+ }
+ else
+ {
+ log_warn1 ("method is NULL");
+ service->method = "";
+ }
+
+ return service;
}
-void soap_service_free(SoapService *service)
+void
+soap_service_free (SoapService * service)
{
- log_verbose2("enter: service=%p", service);
+ log_verbose2 ("enter: service=%p", service);
- if (service == NULL) return;
+ if (service == NULL)
+ return;
- if (strcmp(service->urn, ""))
- free(service->urn);
+ if (strcmp (service->urn, ""))
+ free (service->urn);
- if (strcmp(service->method, ""))
- free(service->method);
+ if (strcmp (service->method, ""))
+ free (service->method);
- free(service);
- log_verbose1("leave with success");
+ free (service);
+ log_verbose1 ("leave with success");
}
-
diff --git a/libcsoap/soap-service.h b/libcsoap/soap-service.h
index c03d7df..497e77b 100644
--- a/libcsoap/soap-service.h
+++ b/libcsoap/soap-service.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-service.h,v 1.3 2004/10/28 10:30:46 snowdrop Exp $
+ * $Id: soap-service.h,v 1.4 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -28,7 +28,7 @@
#include <libcsoap/soap-env.h>
#include <libcsoap/soap-ctx.h>
-typedef herror_t (*SoapServiceFunc)(SoapCtx*, SoapCtx*);
+typedef herror_t (*SoapServiceFunc) (SoapCtx *, SoapCtx *);
typedef struct _SoapService
@@ -36,24 +36,22 @@ typedef struct _SoapService
char *urn;
char *method;
SoapServiceFunc func;
-}SoapService;
+} SoapService;
typedef struct _SoapServiceNode
{
SoapService *service;
struct _SoapServiceNode *next;
-}SoapServiceNode;
+} SoapServiceNode;
-SoapServiceNode *soap_service_node_new(SoapService *service,
- SoapServiceNode *next);
+SoapServiceNode *soap_service_node_new (SoapService * service,
+ SoapServiceNode * next);
-SoapService *soap_service_new(const char* urn, const char *method,
- SoapServiceFunc f);
-void soap_service_free(SoapService *service);
+SoapService *soap_service_new (const char *urn, const char *method,
+ SoapServiceFunc f);
+void soap_service_free (SoapService * service);
#endif
-
-
diff --git a/libcsoap/soap-xml.c b/libcsoap/soap-xml.c
index f973036..288e5ff 100644
--- a/libcsoap/soap-xml.c
+++ b/libcsoap/soap-xml.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-xml.c,v 1.6 2004/10/15 13:34:02 snowdrop Exp $
+* $Id: soap-xml.c,v 1.7 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -23,111 +23,125 @@
******************************************************************/
#include <libcsoap/soap-xml.h>
-static const char* soap_env_ns = "http://schemas.xmlsoap.org/soap/envelope/";
+static const char *soap_env_ns = "http://schemas.xmlsoap.org/soap/envelope/";
-xmlNodePtr soap_xml_get_children(xmlNodePtr param)
+xmlNodePtr
+soap_xml_get_children (xmlNodePtr param)
{
- xmlNodePtr children;
-
- if (param == NULL) {
- log_error1("Invalid parameter 'param' (null)");
- return NULL;
- }
-
- children = param->xmlChildrenNode;
- while (children != NULL) {
- if (children->type != XML_ELEMENT_NODE)
- children = children->next;
- else break;
- }
-
- return children;
+ xmlNodePtr children;
+
+ if (param == NULL)
+ {
+ log_error1 ("Invalid parameter 'param' (null)");
+ return NULL;
+ }
+
+ children = param->xmlChildrenNode;
+ while (children != NULL)
+ {
+ if (children->type != XML_ELEMENT_NODE)
+ children = children->next;
+ else
+ break;
+ }
+
+ return children;
}
-xmlNodePtr soap_xml_get_next(xmlNodePtr param)
+xmlNodePtr
+soap_xml_get_next (xmlNodePtr param)
{
- xmlNodePtr node = param->next;
+ xmlNodePtr node = param->next;
- while (node != NULL) {
- if (node->type != XML_ELEMENT_NODE)
- node = node->next;
- else break;
- }
+ while (node != NULL)
+ {
+ if (node->type != XML_ELEMENT_NODE)
+ node = node->next;
+ else
+ break;
+ }
- return node;
+ return node;
}
-xmlXPathObjectPtr
-soap_xpath_eval(xmlDocPtr doc, const char *xpath)
+xmlXPathObjectPtr
+soap_xpath_eval (xmlDocPtr doc, const char *xpath)
{
- xmlXPathContextPtr context;
- xmlXPathObjectPtr result;
-
- context = xmlXPathNewContext(doc);
- result = xmlXPathEvalExpression(BAD_CAST xpath, context);
- if(xmlXPathNodeSetIsEmpty(result->nodesetval)){
- /* no result */
- return NULL;
- }
-
- xmlXPathFreeContext(context);
- return result;
+ xmlXPathContextPtr context;
+ xmlXPathObjectPtr result;
+
+ context = xmlXPathNewContext (doc);
+ result = xmlXPathEvalExpression (BAD_CAST xpath, context);
+ if (xmlXPathNodeSetIsEmpty (result->nodesetval))
+ {
+ /* no result */
+ return NULL;
+ }
+
+ xmlXPathFreeContext (context);
+ return result;
}
int
-soap_xpath_foreach(xmlDocPtr doc, const char *xpath,
- soap_xmlnode_callback cb, void *userdata)
+soap_xpath_foreach (xmlDocPtr doc, const char *xpath,
+ soap_xmlnode_callback cb, void *userdata)
{
- int i = 0;
- xmlNodeSetPtr nodeset;
- xmlXPathObjectPtr xpathobj;
+ int i = 0;
+ xmlNodeSetPtr nodeset;
+ xmlXPathObjectPtr xpathobj;
- xpathobj = soap_xpath_eval(doc, xpath);
+ xpathobj = soap_xpath_eval (doc, xpath);
- if (!xpathobj) return 0;
+ if (!xpathobj)
+ return 0;
- nodeset = xpathobj->nodesetval;
- if (!nodeset) return 0;
+ nodeset = xpathobj->nodesetval;
+ if (!nodeset)
+ return 0;
- for (i=0;i < nodeset->nodeNr; i++) {
- if (!cb(nodeset->nodeTab[i], userdata))
- break;
- }
+ for (i = 0; i < nodeset->nodeNr; i++)
+ {
+ if (!cb (nodeset->nodeTab[i], userdata))
+ break;
+ }
- xmlXPathFreeObject((xmlXPathObjectPtr)nodeset);
- return i;
+ xmlXPathFreeObject ((xmlXPathObjectPtr) nodeset);
+ return i;
}
-void soap_xml_doc_print(xmlDocPtr doc)
+void
+soap_xml_doc_print (xmlDocPtr doc)
{
- xmlBufferPtr buffer;
- xmlNodePtr root;
+ xmlBufferPtr buffer;
+ xmlNodePtr root;
- if (doc == NULL) {
- puts("xmlDocPtr is NULL!");
- return;
- }
+ if (doc == NULL)
+ {
+ puts ("xmlDocPtr is NULL!");
+ return;
+ }
- root = xmlDocGetRootElement(doc);
- if (root == NULL) {
- puts("Empty document!");
- return;
- }
+ root = xmlDocGetRootElement (doc);
+ if (root == NULL)
+ {
+ puts ("Empty document!");
+ return;
+ }
- buffer = xmlBufferCreate();
- xmlNodeDump(buffer, doc, root, 1 ,0);
- puts( (const char*)xmlBufferContent(buffer));
- xmlBufferFree(buffer);
+ buffer = xmlBufferCreate ();
+ xmlNodeDump (buffer, doc, root, 1, 0);
+ puts ((const char *) xmlBufferContent (buffer));
+ xmlBufferFree (buffer);
}
-char *soap_xml_get_text(xmlNodePtr node)
+char *
+soap_xml_get_text (xmlNodePtr node)
{
- return (char*)xmlNodeListGetString(node->doc, node->xmlChildrenNode, 1);
+ return (char *) xmlNodeListGetString (node->doc, node->xmlChildrenNode, 1);
}
-
diff --git a/libcsoap/soap-xml.h b/libcsoap/soap-xml.h
index 5c0a599..de11e2d 100644
--- a/libcsoap/soap-xml.h
+++ b/libcsoap/soap-xml.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-xml.h,v 1.5 2004/10/15 13:34:02 snowdrop Exp $
+ * $Id: soap-xml.h,v 1.6 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -29,21 +29,20 @@
#include <nanohttp/nanohttp-common.h>
-typedef int (*soap_xmlnode_callback)(xmlNodePtr, void*);
+typedef int (*soap_xmlnode_callback) (xmlNodePtr, void *);
-xmlNodePtr soap_xml_get_children(xmlNodePtr param);
-xmlNodePtr soap_xml_get_next(xmlNodePtr param);
+xmlNodePtr soap_xml_get_children (xmlNodePtr param);
+xmlNodePtr soap_xml_get_next (xmlNodePtr param);
-xmlXPathObjectPtr
-soap_xpath_eval(xmlDocPtr doc, const char *xpath);
+xmlXPathObjectPtr soap_xpath_eval (xmlDocPtr doc, const char *xpath);
int
-soap_xpath_foreach(xmlDocPtr doc, const char *xpath,
- soap_xmlnode_callback cb, void* userdata);
+soap_xpath_foreach (xmlDocPtr doc, const char *xpath,
+ soap_xmlnode_callback cb, void *userdata);
-void soap_xml_doc_print(xmlDocPtr doc);
-char *soap_xml_get_text(xmlNodePtr node);
+void soap_xml_doc_print (xmlDocPtr doc);
+char *soap_xml_get_text (xmlNodePtr node);
#endif
diff --git a/nanohttp/nanohttp-client.c b/nanohttp/nanohttp-client.c
index 02d6c3c..b5a3fd0 100644
--- a/nanohttp/nanohttp-client.c
+++ b/nanohttp/nanohttp-client.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: nanohttp-client.c,v 1.31 2006/01/06 15:16:03 mrcsys Exp $
+* $Id: nanohttp-client.c,v 1.32 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -39,8 +39,8 @@
#endif
#if 0
-static
-int httpc_send_data(httpc_conn_t *conn, const unsigned char* data, size_t size)
+static int
+httpc_send_data (httpc_conn_t * conn, const unsigned char *data, size_t size)
{
return -1;
}
@@ -50,11 +50,11 @@ FUNCTION: httpc_init
DESC: Initialize http client connection
NOTE: This will be called from soap_client_init_args()
----------------------------------------------------*/
-herror_t
-httpc_init(int argc, char *argv[])
+herror_t
+httpc_init (int argc, char *argv[])
{
- hoption_init_args(argc, argv);
- hsocket_module_init();
+ hoption_init_args (argc, argv);
+ hsocket_module_init ();
return H_OK;
}
@@ -63,9 +63,10 @@ httpc_init(int argc, char *argv[])
FUNCTION: httpc_destroy
DESC: Destroy the http client module
----------------------------------------------------*/
-void httpc_destroy()
+void
+httpc_destroy ()
{
- hsocket_module_destroy();
+ hsocket_module_destroy ();
}
@@ -75,23 +76,24 @@ DESC: Creates a new http client connection object
You need to create at least 1 http client connection
to communicate via http.
----------------------------------------------------*/
-httpc_conn_t *
-httpc_new()
+httpc_conn_t *
+httpc_new ()
{
static int counter = 10000;
- httpc_conn_t *res = (httpc_conn_t *) malloc(sizeof(httpc_conn_t));
+ httpc_conn_t *res = (httpc_conn_t *) malloc (sizeof (httpc_conn_t));
- if(hsocket_init(&res->sock)!= H_OK){
- return NULL;
- }
- res->header = NULL;
- res->version = HTTP_1_1;
- res->out = NULL;
- res->_dime_package_nr = 0;
- res->_dime_sent_bytes = 0;
- res->id = counter++;
- res->block = 0;
- return res;
+ if (hsocket_init (&res->sock) != H_OK)
+ {
+ return NULL;
+ }
+ res->header = NULL;
+ res->version = HTTP_1_1;
+ res->out = NULL;
+ res->_dime_package_nr = 0;
+ res->_dime_sent_bytes = 0;
+ res->id = counter++;
+ res->block = 0;
+ return res;
}
@@ -99,30 +101,30 @@ httpc_new()
FUNCTION: httpc_free
DESC: Free the given http client object.
----------------------------------------------------*/
-void
-httpc_free(httpc_conn_t * conn)
+void
+httpc_free (httpc_conn_t * conn)
{
- hpair_t *tmp;
+ hpair_t *tmp;
- if (conn == NULL)
- return;
+ if (conn == NULL)
+ return;
- while (conn->header != NULL)
+ while (conn->header != NULL)
{
tmp = conn->header;
conn->header = conn->header->next;
- hpairnode_free(tmp);
+ hpairnode_free (tmp);
}
- if (conn->out != NULL)
- {
- http_output_stream_free(conn->out);
- conn->out = NULL;
- }
+ if (conn->out != NULL)
+ {
+ http_output_stream_free (conn->out);
+ conn->out = NULL;
+ }
- hsocket_free(conn->sock);
- free(conn);
+ hsocket_free (conn->sock);
+ free (conn);
}
@@ -131,13 +133,13 @@ httpc_free(httpc_conn_t * conn)
DESC: Close and free the given http client object.
----------------------------------------------------*/
void
-httpc_close_free(httpc_conn_t * conn)
+httpc_close_free (httpc_conn_t * conn)
{
- if (conn == NULL)
- return;
+ if (conn == NULL)
+ return;
- hsocket_close(conn->sock);
- httpc_free(conn);
+ hsocket_close (conn->sock);
+ httpc_free (conn);
}
@@ -147,30 +149,34 @@ DESC: Adds a new (key, value) pair to the header
or modifies the old pair if this function will
finds another pair with the same 'key' value.
----------------------------------------------------*/
-int
-httpc_set_header(httpc_conn_t * conn, const char *key, const char *value)
+int
+httpc_set_header (httpc_conn_t * conn, const char *key, const char *value)
{
- hpair_t *p;
+ hpair_t *p;
- if (conn == NULL) {
- log_warn1("Connection object is NULL");
- return 0;
- }
- p = conn->header;
- while (p != NULL) {
- if (p->key != NULL) {
- if (!strcmp(p->key, key)) {
- free(p->value);
- p->value = (char *) malloc(strlen(value) + 1);
- strcpy(p->value, value);
- return 1;
- }
- }
- p = p->next;
- }
+ if (conn == NULL)
+ {
+ log_warn1 ("Connection object is NULL");
+ return 0;
+ }
+ p = conn->header;
+ while (p != NULL)
+ {
+ if (p->key != NULL)
+ {
+ if (!strcmp (p->key, key))
+ {
+ free (p->value);
+ p->value = (char *) malloc (strlen (value) + 1);
+ strcpy (p->value, value);
+ return 1;
+ }
+ }
+ p = p->next;
+ }
- conn->header = hpairnode_new(key, value, conn->header);
- return 0;
+ conn->header = hpairnode_new (key, value, conn->header);
+ return 0;
}
@@ -178,36 +184,34 @@ httpc_set_header(httpc_conn_t * conn, const char *key, const char *value)
FUNCTION: httpc_header_add_date
DESC: Adds the current date to the header.
----------------------------------------------------*/
-static
-void _httpc_set_error(httpc_conn_t *conn, int errcode,
- const char *format, ...)
+static void
+_httpc_set_error (httpc_conn_t * conn, int errcode, const char *format, ...)
{
- va_list ap;
+ va_list ap;
conn->errcode = errcode;
- va_start(ap, format);
- vsprintf(conn->errmsg, format, ap);
- va_end(ap);
+ va_start (ap, format);
+ vsprintf (conn->errmsg, format, ap);
+ va_end (ap);
}
/*--------------------------------------------------
FUNCTION: httpc_header_add_date
DESC: Adds the current date to the header.
----------------------------------------------------*/
-static
-void
-httpc_header_add_date(httpc_conn_t * conn)
+static void
+httpc_header_add_date (httpc_conn_t * conn)
{
- char buffer[255];
- time_t nw;
- struct tm stm;
+ char buffer[255];
+ time_t nw;
+ struct tm stm;
- /* Set date */
- nw = time(NULL);
- localtime_r(&nw, &stm);
- strftime(buffer, 255, "%a, %d %b %Y %T GMT", &stm);
- httpc_set_header(conn, HEADER_DATE, buffer);
+ /* Set date */
+ nw = time (NULL);
+ localtime_r (&nw, &stm);
+ strftime (buffer, 255, "%a, %d %b %Y %T GMT", &stm);
+ httpc_set_header (conn, HEADER_DATE, buffer);
}
@@ -217,26 +221,28 @@ FUNCTION: httpc_send_header
DESC: Sends the current header information stored
in conn through conn->sock.
----------------------------------------------------*/
-herror_t
-httpc_send_header(httpc_conn_t * conn)
+herror_t
+httpc_send_header (httpc_conn_t * conn)
{
- hpair_t *p;
- herror_t status;
- char buffer[1024];
-
- p = conn->header;
- while (p != NULL) {
- if (p->key && p->value) {
- sprintf(buffer, "%s: %s\r\n", p->key, p->value);
- status = hsocket_send(conn->sock, buffer);
- if (status != H_OK)
- return status;
- }
- p = p->next;
- }
+ hpair_t *p;
+ herror_t status;
+ char buffer[1024];
- status = hsocket_send(conn->sock, "\r\n");
- return status;
+ p = conn->header;
+ while (p != NULL)
+ {
+ if (p->key && p->value)
+ {
+ sprintf (buffer, "%s: %s\r\n", p->key, p->value);
+ status = hsocket_send (conn->sock, buffer);
+ if (status != H_OK)
+ return status;
+ }
+ p = p->next;
+ }
+
+ status = hsocket_send (conn->sock, "\r\n");
+ return status;
}
/*--------------------------------------------------
@@ -284,90 +290,98 @@ can also be NULL.
If success, this function will return 0.
>0 otherwise.
----------------------------------------------------*/
-static
-herror_t
-httpc_talk_to_server(hreq_method_t method, httpc_conn_t * conn,
- const char *urlstr)
+static herror_t
+httpc_talk_to_server (hreq_method_t method, httpc_conn_t * conn,
+ const char *urlstr)
{
- hurl_t url;
- char buffer[4096];
- herror_t status;
+ hurl_t url;
+ char buffer[4096];
+ herror_t status;
- if (conn == NULL) {
- return herror_new(
- "httpc_talk_to_server",
- GENERAL_INVALID_PARAM,
- "httpc_conn_t param is NULL");
- }
- /* Build request header */
- httpc_header_add_date(conn);
+ if (conn == NULL)
+ {
+ return herror_new ("httpc_talk_to_server",
+ GENERAL_INVALID_PARAM, "httpc_conn_t param is NULL");
+ }
+ /* Build request header */
+ httpc_header_add_date (conn);
- /* Create url */
- status = hurl_parse(&url, urlstr);
- if (status != H_OK) {
- log_error2("Can not parse URL '%s'", SAVE_STR(urlstr));
- return status;
- }
+ /* Create url */
+ status = hurl_parse (&url, urlstr);
+ if (status != H_OK)
+ {
+ log_error2 ("Can not parse URL '%s'", SAVE_STR (urlstr));
+ return status;
+ }
/* TODO (#1#): Check for HTTP protocol in URL */
- /* Set hostname */
- httpc_set_header(conn, HEADER_HOST, url.host);
+ /* Set hostname */
+ httpc_set_header (conn, HEADER_HOST, url.host);
- /* Open connection */
- status = hsocket_open(&conn->sock, url.host, url.port);
- if (status != H_OK) {
- return status;
- }
+ /* Open connection */
+ status = hsocket_open (&conn->sock, url.host, url.port);
+ if (status != H_OK)
+ {
+ return status;
+ }
#ifdef HAVE_SSL
- /* TODO XXX XXX this is probably not right -- matt */
- if(!&conn->sock.ssl){
- status = hsocket_block(conn->sock, conn->block);
- if (status != H_OK) {
- log_error1("Cannot make socket non-blocking");
- return status;
- }
+ /* TODO XXX XXX this is probably not right -- matt */
+ if (!&conn->sock.ssl)
+ {
+ status = hsocket_block (conn->sock, conn->block);
+ if (status != H_OK)
+ {
+ log_error1 ("Cannot make socket non-blocking");
+ return status;
}
+ }
#endif
- /* check method */
- if (method == HTTP_REQUEST_GET) {
-
- /* Set GET Header */
- sprintf(buffer, "GET %s HTTP/%s\r\n",
- (url.context[0] != '\0') ? url.context : ("/"),
- (conn->version == HTTP_1_0)?"1.0":"1.1");
-
- } else if (method == HTTP_REQUEST_POST) {
-
- /* Set POST Header */
- sprintf(buffer, "POST %s HTTP/%s\r\n",
- (url.context[0] != '\0') ? url.context : ("/"),
- (conn->version == HTTP_1_0)?"1.0":"1.1");
- } else {
-
- log_error1("Unknown method type!");
- return herror_new(
- "httpc_talk_to_server",
- GENERAL_INVALID_PARAM,
- "hreq_method_t must be HTTP_REQUEST_GET or HTTP_REQUEST_POST");
- }
+ /* check method */
+ if (method == HTTP_REQUEST_GET)
+ {
- log_verbose1("Sending header...");
- status = hsocket_send(conn->sock, buffer);
- if (status != H_OK) {
- log_error2("Can not send request (status:%d)", status);
- hsocket_close(conn->sock);
- return status;
- }
- /* Send Header */
- status = httpc_send_header(conn);
- if (status != H_OK) {
- log_error2("Can not send header (status:%d)", status);
- hsocket_close(conn->sock);
- return status;
- }
+ /* Set GET Header */
+ sprintf (buffer, "GET %s HTTP/%s\r\n",
+ (url.context[0] != '\0') ? url.context : ("/"),
+ (conn->version == HTTP_1_0) ? "1.0" : "1.1");
+
+ }
+ else if (method == HTTP_REQUEST_POST)
+ {
+
+ /* Set POST Header */
+ sprintf (buffer, "POST %s HTTP/%s\r\n",
+ (url.context[0] != '\0') ? url.context : ("/"),
+ (conn->version == HTTP_1_0) ? "1.0" : "1.1");
+ }
+ else
+ {
+
+ log_error1 ("Unknown method type!");
+ return herror_new ("httpc_talk_to_server",
+ GENERAL_INVALID_PARAM,
+ "hreq_method_t must be HTTP_REQUEST_GET or HTTP_REQUEST_POST");
+ }
+
+ log_verbose1 ("Sending header...");
+ status = hsocket_send (conn->sock, buffer);
+ if (status != H_OK)
+ {
+ log_error2 ("Can not send request (status:%d)", status);
+ hsocket_close (conn->sock);
+ return status;
+ }
+ /* Send Header */
+ status = httpc_send_header (conn);
+ if (status != H_OK)
+ {
+ log_error2 ("Can not send header (status:%d)", status);
+ hsocket_close (conn->sock);
+ return status;
+ }
- return H_OK;
+ return H_OK;
}
@@ -376,25 +390,25 @@ FUNCTION: httpc_get
DESC:
----------------------------------------------------*/
herror_t
-httpc_get(httpc_conn_t *conn, hresponse_t** out, const char *urlstr)
+httpc_get (httpc_conn_t * conn, hresponse_t ** out, const char *urlstr)
{
- herror_t status;
+ herror_t status;
- status = httpc_talk_to_server(HTTP_REQUEST_GET, conn, urlstr);
+ status = httpc_talk_to_server (HTTP_REQUEST_GET, conn, urlstr);
- if (status != H_OK)
- {
- return status;
- }
+ if (status != H_OK)
+ {
+ return status;
+ }
- status = hresponse_new_from_socket(conn->sock, out);
- if (status != H_OK)
- {
- return status;
- }
-
+ status = hresponse_new_from_socket (conn->sock, out);
+ if (status != H_OK)
+ {
+ return status;
+ }
- return H_OK;
+
+ return H_OK;
}
@@ -402,16 +416,17 @@ httpc_get(httpc_conn_t *conn, hresponse_t** out, const char *urlstr)
FUNCTION: httpc_post_begin
DESC: Returns H_OK if success
----------------------------------------------------*/
-herror_t httpc_post_begin(httpc_conn_t *conn, const char *url)
+herror_t
+httpc_post_begin (httpc_conn_t * conn, const char *url)
{
-
- herror_t status;
- status = httpc_talk_to_server(HTTP_REQUEST_POST, conn, url);
- if (status != H_OK)
- return status;
+ herror_t status;
- conn->out = http_output_stream_new(conn->sock, conn->header);
+ status = httpc_talk_to_server (HTTP_REQUEST_POST, conn, url);
+ if (status != H_OK)
+ return status;
+
+ conn->out = http_output_stream_new (conn->sock, conn->header);
return H_OK;
}
@@ -422,24 +437,25 @@ FUNCTION: httpc_post_begin
DESC: End a "POST" method and receive the response.
You MUST call httpc_post_end() before!
----------------------------------------------------*/
-herror_t httpc_post_end(httpc_conn_t *conn, hresponse_t** out)
+herror_t
+httpc_post_end (httpc_conn_t * conn, hresponse_t ** out)
{
herror_t status;
- status = http_output_stream_flush(conn->out);
+ status = http_output_stream_flush (conn->out);
if (status != H_OK)
{
return status;
}
- status = hresponse_new_from_socket(conn->sock, out);
- if (status != H_OK)
- {
- return status;
- }
+ status = hresponse_new_from_socket (conn->sock, out);
+ if (status != H_OK)
+ {
+ return status;
+ }
- return H_OK;
+ return H_OK;
}
@@ -595,128 +611,134 @@ hresponse_t* httpc_dime_end(httpc_conn_t *conn)
MIME support functions httpc_mime_* function set
-----------------------------------------------------*/
-static
-void _httpc_mime_get_boundary(httpc_conn_t *conn, char *dest)
+static void
+_httpc_mime_get_boundary (httpc_conn_t * conn, char *dest)
{
- sprintf(dest, "---=.Part_NH_%d", conn->id);
- log_verbose2("boundary= \"%s\"", dest);
+ sprintf (dest, "---=.Part_NH_%d", conn->id);
+ log_verbose2 ("boundary= \"%s\"", dest);
}
-herror_t httpc_mime_begin(httpc_conn_t *conn, const char *url,
- const char* related_start,
- const char* related_start_info,
- const char* related_type)
+herror_t
+httpc_mime_begin (httpc_conn_t * conn, const char *url,
+ const char *related_start,
+ const char *related_start_info, const char *related_type)
{
- herror_t status;
- char buffer[300];
- char temp[75];
- char boundary[75];
-
- /*
- Set Content-type
- Set multipart/related parameter
- type=..; start=.. ; start-info= ..; boundary=...
-
- */
- sprintf(buffer, "multipart/related;");
- /*
- using sprintf instead of snprintf because visual c does not support snprintf
- */
+ herror_t status;
+ char buffer[300];
+ char temp[75];
+ char boundary[75];
+
+ /*
+ Set Content-type Set multipart/related parameter type=..; start=.. ;
+ start-info= ..; boundary=...
+
+ */
+ sprintf (buffer, "multipart/related;");
+ /*
+ using sprintf instead of snprintf because visual c does not support
+ snprintf */
#ifdef WIN32
#define snprintf(buffer, num, s1, s2) sprintf(buffer, s1,s2)
#endif
- if (related_type) {
- snprintf(temp, 75, " type=\"%s\";", related_type);
- strcat(buffer, temp);
+ if (related_type)
+ {
+ snprintf (temp, 75, " type=\"%s\";", related_type);
+ strcat (buffer, temp);
}
-
- if (related_start) {
- snprintf(temp, 75, " start=\"%s\";", related_start);
- strcat(buffer, temp);
+
+ if (related_start)
+ {
+ snprintf (temp, 75, " start=\"%s\";", related_start);
+ strcat (buffer, temp);
}
- if (related_start_info) {
- snprintf(temp, 75, " start-info=\"%s\";", related_start_info);
- strcat(buffer, temp);
+ if (related_start_info)
+ {
+ snprintf (temp, 75, " start-info=\"%s\";", related_start_info);
+ strcat (buffer, temp);
}
- _httpc_mime_get_boundary(conn, boundary);
- snprintf(temp, 75, " boundary=\"%s\"", boundary);
- strcat(buffer, temp);
+ _httpc_mime_get_boundary (conn, boundary);
+ snprintf (temp, 75, " boundary=\"%s\"", boundary);
+ strcat (buffer, temp);
- httpc_set_header(conn, HEADER_CONTENT_TYPE, buffer);
+ httpc_set_header (conn, HEADER_CONTENT_TYPE, buffer);
- status = httpc_post_begin(conn, url);
- return status;
+ status = httpc_post_begin (conn, url);
+ return status;
}
-herror_t httpc_mime_next(httpc_conn_t *conn,
- const char* content_id,
- const char* content_type,
- const char* transfer_encoding)
+herror_t
+httpc_mime_next (httpc_conn_t * conn,
+ const char *content_id,
+ const char *content_type, const char *transfer_encoding)
{
- herror_t status;
- char buffer[512];
- char boundary[75];
+ herror_t status;
+ char buffer[512];
+ char boundary[75];
/* Get the boundary string */
- _httpc_mime_get_boundary(conn, boundary);
- sprintf(buffer, "\r\n--%s\r\n", boundary);
+ _httpc_mime_get_boundary (conn, boundary);
+ sprintf (buffer, "\r\n--%s\r\n", boundary);
/* Send boundary */
- status = http_output_stream_write(conn->out,
- (const byte_t*)buffer, strlen(buffer));
+ status = http_output_stream_write (conn->out,
+ (const byte_t *) buffer,
+ strlen (buffer));
- if (status != H_OK)
- return status;
+ if (status != H_OK)
+ return status;
- /* Send Content header */
- sprintf(buffer, "%s: %s\r\n%s: %s\r\n%s: %s\r\n\r\n",
- HEADER_CONTENT_TYPE, content_type,
- HEADER_CONTENT_TRANSFER_ENCODING, transfer_encoding,
- HEADER_CONTENT_ID, content_id);
+ /* Send Content header */
+ sprintf (buffer, "%s: %s\r\n%s: %s\r\n%s: %s\r\n\r\n",
+ HEADER_CONTENT_TYPE, content_type,
+ HEADER_CONTENT_TRANSFER_ENCODING, transfer_encoding,
+ HEADER_CONTENT_ID, content_id);
- status = http_output_stream_write(conn->out,
- (const byte_t*)buffer, strlen(buffer));
+ status = http_output_stream_write (conn->out,
+ (const byte_t *) buffer,
+ strlen (buffer));
- return status;
+ return status;
}
-herror_t httpc_mime_end(httpc_conn_t *conn, hresponse_t** out)
+herror_t
+httpc_mime_end (httpc_conn_t * conn, hresponse_t ** out)
{
- herror_t status;
- char buffer[512];
- char boundary[75];
+ herror_t status;
+ char buffer[512];
+ char boundary[75];
/* Get the boundary string */
- _httpc_mime_get_boundary(conn, boundary);
- sprintf(buffer, "\r\n--%s--\r\n\r\n", boundary);
+ _httpc_mime_get_boundary (conn, boundary);
+ sprintf (buffer, "\r\n--%s--\r\n\r\n", boundary);
/* Send boundary */
- status = http_output_stream_write(conn->out,
- (const byte_t*)buffer, strlen(buffer));
+ status = http_output_stream_write (conn->out,
+ (const byte_t *) buffer,
+ strlen (buffer));
if (status != H_OK)
return status;
/* Flush put stream */
- status = http_output_stream_flush(conn->out);
+ status = http_output_stream_flush (conn->out);
if (status != H_OK)
{
return status;
}
- status = hresponse_new_from_socket(conn->sock, out);
- if (status != H_OK)
- {
- return status;
- }
-
- return H_OK;
+ status = hresponse_new_from_socket (conn->sock, out);
+ if (status != H_OK)
+ {
+ return status;
+ }
+
+ return H_OK;
}
@@ -737,11 +759,11 @@ httpc_mime_send_file (httpc_conn_t * conn,
size_t size;
if (fd == NULL)
- return herror_new("httpc_mime_send_file", FILE_ERROR_OPEN,
- "Can not open file '%s'", filename);
+ return herror_new ("httpc_mime_send_file", FILE_ERROR_OPEN,
+ "Can not open file '%s'", filename);
status =
- httpc_mime_next(conn, content_id, content_type, transfer_encoding);
+ httpc_mime_next (conn, content_id, content_type, transfer_encoding);
if (status != H_OK)
{
fclose (fd);
@@ -754,24 +776,23 @@ httpc_mime_send_file (httpc_conn_t * conn,
if (size == -1)
{
fclose (fd);
- return herror_new("httpc_mime_send_file", FILE_ERROR_READ,
- "Can not read from file '%s'", filename);
+ return herror_new ("httpc_mime_send_file", FILE_ERROR_READ,
+ "Can not read from file '%s'", filename);
}
- if (size>0)
- {
- /*DEBUG: fwrite(buffer, 1, size, stdout);*/
- status = http_output_stream_write (conn->out, buffer, size);
- if (status != H_OK) {
- fclose (fd);
- return status;
- }
- }
+ if (size > 0)
+ {
+ /* DEBUG: fwrite(buffer, 1, size, stdout); */
+ status = http_output_stream_write (conn->out, buffer, size);
+ if (status != H_OK)
+ {
+ fclose (fd);
+ return status;
+ }
+ }
}
fclose (fd);
- log_verbose1("file sent!");
+ log_verbose1 ("file sent!");
return H_OK;
}
-
-
diff --git a/nanohttp/nanohttp-client.h b/nanohttp/nanohttp-client.h
index 395b29a..77c8e8e 100644
--- a/nanohttp/nanohttp-client.h
+++ b/nanohttp/nanohttp-client.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-client.h,v 1.16 2005/12/19 14:18:26 snowdrop Exp $
+ * $Id: nanohttp-client.h,v 1.17 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -21,8 +21,8 @@
*
* Email: ferhatayaz@yahoo.com
******************************************************************/
-#ifndef NANO_HTTP_CLIENT_H
-#define NANO_HTTP_CLIENT_H
+#ifndef NANO_HTTP_CLIENT_H
+#define NANO_HTTP_CLIENT_H
#include <nanohttp/nanohttp-common.h>
@@ -36,19 +36,16 @@ typedef struct httpc_conn
hpair_t *header;
hurl_t url;
http_version_t version;
- /*
- -1 : last dime package
- 0 : no dime connection
- >0 : dime package number
- */
+ /*
+ -1 : last dime package 0 : no dime connection >0 : dime package number */
int _dime_package_nr;
- long _dime_sent_bytes;
+ long _dime_sent_bytes;
int errcode;
char errmsg[150];
http_output_stream_t *out;
- int id; /* uniq id */
+ int id; /* uniq id */
int block;
-}httpc_conn_t;
+} httpc_conn_t;
/* --------------------------------------------------------------
@@ -58,56 +55,57 @@ typedef struct httpc_conn
/**
initialize the httpc_* module
*/
-herror_t httpc_init(int argc, char *argv[]);
-
+herror_t httpc_init (int argc, char *argv[]);
+
/**
Destroy the httpc_* module
*/
-void httpc_destroy();
+void httpc_destroy ();
/**
Creates a new connection
*/
-httpc_conn_t* httpc_new();
+httpc_conn_t *httpc_new ();
/**
Close and release a connection
*/
-void httpc_close_free(httpc_conn_t* conn);
+void httpc_close_free (httpc_conn_t * conn);
/**
Release a connection
(use httpc_close_free() instead)
*/
-void httpc_free(httpc_conn_t* conn);
+void httpc_free (httpc_conn_t * conn);
/**
* Close and release a connection
*/
-void httpc_close_free(httpc_conn_t* conn);
+void httpc_close_free (httpc_conn_t * conn);
/**
Set header element (key,value) pair.
*/
-int httpc_set_header(httpc_conn_t *conn, const char* key, const char* value);
+int httpc_set_header (httpc_conn_t * conn, const char *key,
+ const char *value);
/**
Invoke a "GET" method request and receive the response
*/
herror_t
-httpc_get(httpc_conn_t *conn, hresponse_t** out, const char *urlstr);
+httpc_get (httpc_conn_t * conn, hresponse_t ** out, const char *urlstr);
/**
Start a "POST" method request
Returns: HSOCKET_OK or error flag
*/
-herror_t httpc_post_begin(httpc_conn_t *conn, const char *url);
+herror_t httpc_post_begin (httpc_conn_t * conn, const char *url);
/**
End a "POST" method and receive the response.
You MUST call httpc_post_end() before!
*/
-herror_t httpc_post_end(httpc_conn_t *conn, hresponse_t **out);
+herror_t httpc_post_end (httpc_conn_t * conn, hresponse_t ** out);
/* --------------------------------------------------------------
@@ -136,24 +134,24 @@ hresponse_t* httpc_dime_end(httpc_conn_t *conn);
Begin MIME multipart/related POST request
Returns: HSOCKET_OK or error flag
*/
-herror_t httpc_mime_begin(httpc_conn_t *conn, const char *url,
- const char* related_start,
- const char* related_start_info,
- const char* related_type);
+herror_t httpc_mime_begin (httpc_conn_t * conn, const char *url,
+ const char *related_start,
+ const char *related_start_info,
+ const char *related_type);
/**
Send boundary and part header and continue
with next part
*/
-herror_t httpc_mime_next(httpc_conn_t *conn,
- const char* content_id,
- const char* content_type,
- const char* transfer_encoding);
+herror_t httpc_mime_next (httpc_conn_t * conn,
+ const char *content_id,
+ const char *content_type,
+ const char *transfer_encoding);
/**
Finish MIME request and get the response
*/
-herror_t httpc_mime_end(httpc_conn_t *conn, hresponse_t** out);
+herror_t httpc_mime_end (httpc_conn_t * conn, hresponse_t ** out);
/**
Send boundary and part header and continue
@@ -161,11 +159,9 @@ herror_t httpc_mime_end(httpc_conn_t *conn, hresponse_t** out);
*/
herror_t httpc_mime_send_file (httpc_conn_t * conn,
- const char *content_id,
- const char *content_type,
- const char *transfer_encoding,
- const char *filename);
+ const char *content_id,
+ const char *content_type,
+ const char *transfer_encoding,
+ const char *filename);
#endif
-
-
diff --git a/nanohttp/nanohttp-common.c b/nanohttp/nanohttp-common.c
index aa1ab45..7d7b141 100644
--- a/nanohttp/nanohttp-common.c
+++ b/nanohttp/nanohttp-common.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: nanohttp-common.c,v 1.20 2006/01/06 16:16:10 snowdrop Exp $
+* $Id: nanohttp-common.c,v 1.21 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -39,7 +39,7 @@
#define MAX_OPTION_SIZE 50
#define MAX_OPTION_VALUE_SIZE 150
-static char _hoption_table[MAX_OPTION_SIZE][MAX_OPTION_VALUE_SIZE];
+static char _hoption_table[MAX_OPTION_SIZE][MAX_OPTION_VALUE_SIZE];
#ifdef HAVE_SSL
extern char *SSLCert;
@@ -49,49 +49,56 @@ extern int SSLCertLess;
#endif
/* option stuff */
-void hoption_set(int opt, const char* value)
+void
+hoption_set (int opt, const char *value)
{
- if (opt >= MAX_OPTION_SIZE) {
- log_warn3("Option to high (%d >= %d)", opt, MAX_OPTION_SIZE);
- return;
- }
+ if (opt >= MAX_OPTION_SIZE)
+ {
+ log_warn3 ("Option to high (%d >= %d)", opt, MAX_OPTION_SIZE);
+ return;
+ }
- strncpy(_hoption_table[opt], value, MAX_OPTION_VALUE_SIZE);
+ strncpy (_hoption_table[opt], value, MAX_OPTION_VALUE_SIZE);
}
-char *hoption_get(int opt)
+char *
+hoption_get (int opt)
{
- if (opt >= MAX_OPTION_SIZE) {
- log_warn3("Option to high (%d >= %d)", opt, MAX_OPTION_SIZE);
- return "";
- }
+ if (opt >= MAX_OPTION_SIZE)
+ {
+ log_warn3 ("Option to high (%d >= %d)", opt, MAX_OPTION_SIZE);
+ return "";
+ }
- return _hoption_table[opt];
+ return _hoption_table[opt];
}
-void hoption_init_args(int argc, char* argv[])
+void
+hoption_init_args (int argc, char *argv[])
{
int i;
- hoption_set(HOPTION_TMP_DIR, "."); /* default value */
+ hoption_set (HOPTION_TMP_DIR, "."); /* default value */
/* initialize from arguments */
for (i = 0; i < argc; i++)
{
if (!strcmp (argv[i], NHTTP_ARG_TMPDIR) && i < argc - 1)
{
- hoption_set(HOPTION_TMP_DIR, argv[i+1]);
+ hoption_set (HOPTION_TMP_DIR, argv[i + 1]);
}
else if (!strcmp (argv[i], NHTTP_ARG_LOGFILE) && i < argc - 1)
{
- log_set_file(argv[i+1]);
+ log_set_file (argv[i + 1]);
}
else if (!strcmp (argv[i], NHTTP_ARG_CERT) && i < argc - 1)
{
#ifndef HAVE_SSL
- fprintf(stderr,"WARNING: csoap compiled without '--with-ssl' flag. Parameter '%s' is disabled", NHTTP_ARG_CERT);
+ fprintf (stderr,
+ "WARNING: csoap compiled without '--with-ssl' flag. Parameter '%s' is disabled",
+ NHTTP_ARG_CERT);
#else
SSLCert = argv[i + 1];
#endif
@@ -99,7 +106,9 @@ void hoption_init_args(int argc, char* argv[])
else if (!strcmp (argv[i], NHTTP_ARG_CERTPASS) && i < argc - 1)
{
#ifndef HAVE_SSL
- fprintf(stderr,"WARNING: csoap compiled without '--with-ssl' flag. Parameter '%s' is disabled", NHTTP_ARG_CERTPASS);
+ fprintf (stderr,
+ "WARNING: csoap compiled without '--with-ssl' flag. Parameter '%s' is disabled",
+ NHTTP_ARG_CERTPASS);
#else
SSLPass = argv[i + 1];
#endif
@@ -107,15 +116,19 @@ void hoption_init_args(int argc, char* argv[])
else if (!strcmp (argv[i], NHTTP_ARG_CA) && i < argc - 1)
{
#ifndef HAVE_SSL
- fprintf(stderr,"WARNING: csoap compiled without '--with-ssl' flag. Parameter '%s' is disabled", NHTTP_ARG_CA);
+ fprintf (stderr,
+ "WARNING: csoap compiled without '--with-ssl' flag. Parameter '%s' is disabled",
+ NHTTP_ARG_CA);
#else
SSLCA = argv[i + 1];
#endif
}
- else if (!strcmp (argv[i], NHTTP_ARG_HTTPS) )
+ else if (!strcmp (argv[i], NHTTP_ARG_HTTPS))
{
#ifndef HAVE_SSL
- fprintf(stderr,"WARNING: csoap compiled without '--with-ssl' flag. Parameter '%s' is disabled", NHTTP_ARG_HTTPS);
+ fprintf (stderr,
+ "WARNING: csoap compiled without '--with-ssl' flag. Parameter '%s' is disabled",
+ NHTTP_ARG_HTTPS);
#else
SSLCertLess = 1;
#endif
@@ -127,613 +140,667 @@ void hoption_init_args(int argc, char* argv[])
#ifdef WIN32
-#ifndef __MINGW32__
+#ifndef __MINGW32__
/* not thread safe!*/
-char *VisualC_funcname(const char* file, int line)
+char *
+VisualC_funcname (const char *file, int line)
{
- static char buffer[256];
- int i = strlen(file)-1;
- while (i>0 && file[i]!='\\')i--;
- sprintf(buffer, "%s:%d", (file[i]!='\\')?file:(file+i+1), line);
- return buffer;
-}
+ static char buffer[256];
+ int i = strlen (file) - 1;
+ while (i > 0 && file[i] != '\\')
+ i--;
+ sprintf (buffer, "%s:%d", (file[i] != '\\') ? file : (file + i + 1), line);
+ return buffer;
+}
#endif
#endif
typedef struct _herror_impl_t
{
- int errcode;
- char message[250];
- char func[100];
-}herror_impl_t;
+ int errcode;
+ char message[250];
+ char func[100];
+} herror_impl_t;
-herror_t herror_new(const char* func, int errcode, const char* format, ...)
+herror_t
+herror_new (const char *func, int errcode, const char *format, ...)
{
- va_list ap;
+ va_list ap;
- herror_impl_t *impl = (herror_impl_t*)malloc(sizeof(herror_impl_t));
- impl->errcode = errcode;
- strcpy(impl->func, func);
- va_start(ap, format);
- vsprintf(impl->message, format, ap);
- va_end(ap);
+ herror_impl_t *impl = (herror_impl_t *) malloc (sizeof (herror_impl_t));
+ impl->errcode = errcode;
+ strcpy (impl->func, func);
+ va_start (ap, format);
+ vsprintf (impl->message, format, ap);
+ va_end (ap);
- return (herror_t)impl;
+ return (herror_t) impl;
}
-int herror_code(herror_t err)
+int
+herror_code (herror_t err)
{
- herror_impl_t* impl = (herror_impl_t*)err;
- if (!err) return H_OK;
- return impl->errcode;
+ herror_impl_t *impl = (herror_impl_t *) err;
+ if (!err)
+ return H_OK;
+ return impl->errcode;
}
-char* herror_func(herror_t err)
+char *
+herror_func (herror_t err)
{
- herror_impl_t* impl = (herror_impl_t*)err;
- if (!err) return "";
- return impl->func;
+ herror_impl_t *impl = (herror_impl_t *) err;
+ if (!err)
+ return "";
+ return impl->func;
}
-char* herror_message(herror_t err)
+char *
+herror_message (herror_t err)
{
- herror_impl_t* impl = (herror_impl_t*)err;
- if (!err) return "";
- return impl->message;
+ herror_impl_t *impl = (herror_impl_t *) err;
+ if (!err)
+ return "";
+ return impl->message;
}
-void herror_release(herror_t err)
+void
+herror_release (herror_t err)
{
- herror_impl_t* impl = (herror_impl_t*)err;
- if (!err) return;
- free(impl);
+ herror_impl_t *impl = (herror_impl_t *) err;
+ if (!err)
+ return;
+ free (impl);
}
static log_level_t loglevel = HLOG_DEBUG;
-static char logfile[75] = {'\0'};
-static int log_background=0;
+static char logfile[75] = { '\0' };
+static int log_background = 0;
-log_level_t
-log_set_level(log_level_t level)
+log_level_t
+log_set_level (log_level_t level)
{
- log_level_t old = loglevel;
- loglevel = level;
- return old;
+ log_level_t old = loglevel;
+ loglevel = level;
+ return old;
}
-log_level_t
-log_get_level()
+log_level_t
+log_get_level ()
{
- return loglevel;
+ return loglevel;
}
-void log_set_file(const char *filename)
+void
+log_set_file (const char *filename)
{
- if (filename)
- strncpy(logfile, filename, 75);
- else
- logfile[0] = '\0';
+ if (filename)
+ strncpy (logfile, filename, 75);
+ else
+ logfile[0] = '\0';
}
-void log_set_background(int state)
+void
+log_set_background (int state)
{
- log_background=state;
+ log_background = state;
}
-char *log_get_file()
+char *
+log_get_file ()
{
- if (logfile[0] == '\0') return NULL;
- return logfile;
+ if (logfile[0] == '\0')
+ return NULL;
+ return logfile;
}
-static
-void
-log_write(log_level_t level, const char *prefix,
- const char *func, const char *format, va_list ap)
+static void
+log_write (log_level_t level, const char *prefix,
+ const char *func, const char *format, va_list ap)
{
- char buffer[1054];
- char buffer2[1054];
- FILE *f;
+ char buffer[1054];
+ char buffer2[1054];
+ FILE *f;
- if (level < loglevel)
- return;
+ if (level < loglevel)
+ return;
- if(!log_background || log_get_file()){
+ if (!log_background || log_get_file ())
+ {
#ifdef WIN32
- sprintf(buffer, "*%s*: [%s] %s\n",
- prefix, func, format);
+ sprintf (buffer, "*%s*: [%s] %s\n", prefix, func, format);
#else
- sprintf(buffer, "*%s*:(%d) [%s] %s\n",
- prefix, pthread_self(),func, format);
+ sprintf (buffer, "*%s*:(%d) [%s] %s\n",
+ prefix, pthread_self (), func, format);
#endif
- vsprintf(buffer2, buffer, ap);
- if(!log_background){
- printf(buffer2);
- fflush(stdout);
- }
+ vsprintf (buffer2, buffer, ap);
+ if (!log_background)
+ {
+ printf (buffer2);
+ fflush (stdout);
+ }
- if (log_get_file()) {
- f = fopen(log_get_file(), "a");
- if (!f) f = fopen(log_get_file(), "w");
- if (f) {
- fprintf(f, buffer2);
- fflush(f);
- fclose(f);
- }
- }
- }
+ if (log_get_file ())
+ {
+ f = fopen (log_get_file (), "a");
+ if (!f)
+ f = fopen (log_get_file (), "w");
+ if (f)
+ {
+ fprintf (f, buffer2);
+ fflush (f);
+ fclose (f);
+ }
+ }
+ }
}
-void
-log_verbose(const char *FUNC, const char *format,...)
+void
+log_verbose (const char *FUNC, const char *format, ...)
{
- va_list ap;
+ va_list ap;
- va_start(ap, format);
- log_write(HLOG_VERBOSE, "VERBOSE", FUNC, format, ap);
- va_end(ap);
+ va_start (ap, format);
+ log_write (HLOG_VERBOSE, "VERBOSE", FUNC, format, ap);
+ va_end (ap);
}
-void
-log_debug(const char *FUNC, const char *format,...)
+void
+log_debug (const char *FUNC, const char *format, ...)
{
- va_list ap;
+ va_list ap;
- va_start(ap, format);
- log_write(HLOG_DEBUG, "DEBUG", FUNC, format, ap);
- va_end(ap);
+ va_start (ap, format);
+ log_write (HLOG_DEBUG, "DEBUG", FUNC, format, ap);
+ va_end (ap);
}
-void
-log_info(const char *FUNC, const char *format,...)
+void
+log_info (const char *FUNC, const char *format, ...)
{
- va_list ap;
+ va_list ap;
- va_start(ap, format);
- log_write(HLOG_INFO, "INFO", FUNC, format, ap);
- va_end(ap);
+ va_start (ap, format);
+ log_write (HLOG_INFO, "INFO", FUNC, format, ap);
+ va_end (ap);
}
-void
-log_warn(const char *FUNC, const char *format,...)
+void
+log_warn (const char *FUNC, const char *format, ...)
{
- va_list ap;
+ va_list ap;
- va_start(ap, format);
- log_write(HLOG_WARN, "WARN", FUNC, format, ap);
- va_end(ap);
+ va_start (ap, format);
+ log_write (HLOG_WARN, "WARN", FUNC, format, ap);
+ va_end (ap);
}
-void
-log_error(const char *FUNC, const char *format,...)
+void
+log_error (const char *FUNC, const char *format, ...)
{
- va_list ap;
+ va_list ap;
- va_start(ap, format);
- log_write(HLOG_ERROR, "ERROR", FUNC, format, ap);
- va_end(ap);
+ va_start (ap, format);
+ log_write (HLOG_ERROR, "ERROR", FUNC, format, ap);
+ va_end (ap);
}
/* -----------------------------------------
FUNCTION: strcmpigcase
------------------------------------------*/
-int
-strcmpigcase(const char *s1, const char *s2)
+int
+strcmpigcase (const char *s1, const char *s2)
{
- int l1, l2, i;
+ int l1, l2, i;
- if (s1 == NULL && s2 == NULL)
- return 1;
- if (s1 == NULL || s2 == NULL)
- return 0;
+ if (s1 == NULL && s2 == NULL)
+ return 1;
+ if (s1 == NULL || s2 == NULL)
+ return 0;
- l1 = strlen(s1);
- l2 = strlen(s2);
+ l1 = strlen (s1);
+ l2 = strlen (s2);
- if (l1 != l2)
- return 0;
+ if (l1 != l2)
+ return 0;
- for (i = 0; i < l1; i++)
- if (toupper(s1[i]) != toupper(s2[i]))
- return 0;
+ for (i = 0; i < l1; i++)
+ if (toupper (s1[i]) != toupper (s2[i]))
+ return 0;
- return 1;
+ return 1;
}
-hpair_t *
-hpairnode_new(const char *key, const char *value, hpair_t * next)
+hpair_t *
+hpairnode_new (const char *key, const char *value, hpair_t * next)
{
- hpair_t *pair;
+ hpair_t *pair;
- log_verbose3("new pair ('%s','%s')", SAVE_STR(key), SAVE_STR(value));
- pair = (hpair_t *) malloc(sizeof(hpair_t));
+ log_verbose3 ("new pair ('%s','%s')", SAVE_STR (key), SAVE_STR (value));
+ pair = (hpair_t *) malloc (sizeof (hpair_t));
- if (key != NULL) {
- pair->key = (char *) malloc(strlen(key) + 1);
- strcpy(pair->key, key);
- } else {
- pair->key = NULL;
- }
+ if (key != NULL)
+ {
+ pair->key = (char *) malloc (strlen (key) + 1);
+ strcpy (pair->key, key);
+ }
+ else
+ {
+ pair->key = NULL;
+ }
- if (value != NULL) {
- pair->value = (char *) malloc(strlen(value) + 1);
- strcpy(pair->value, value);
- } else {
- pair->value = NULL;
- }
+ if (value != NULL)
+ {
+ pair->value = (char *) malloc (strlen (value) + 1);
+ strcpy (pair->value, value);
+ }
+ else
+ {
+ pair->value = NULL;
+ }
- pair->next = next;
+ pair->next = next;
- return pair;
+ return pair;
}
-hpair_t *
-hpairnode_parse(const char *str, const char *delim, hpair_t * next)
+hpair_t *
+hpairnode_parse (const char *str, const char *delim, hpair_t * next)
{
- hpair_t *pair;
- char *key, *value;
- int c;
+ hpair_t *pair;
+ char *key, *value;
+ int c;
- pair = (hpair_t *) malloc(sizeof(hpair_t));
- pair->key = "";
- pair->value = "";
- pair->next = next;
+ pair = (hpair_t *) malloc (sizeof (hpair_t));
+ pair->key = "";
+ pair->value = "";
+ pair->next = next;
- key = strtok_r((char *) str, delim, &value);
+ key = strtok_r ((char *) str, delim, &value);
- if (key != NULL) {
- pair->key = (char *) malloc(strlen(key) + 1);
- strcpy(pair->key, key);
- }
- if (value != NULL) {
- for (c = 0; value[c] == ' '; c++); /* skip white space */
- pair->value = (char *) malloc(strlen(&value[c]) + 1);
- strcpy(pair->value, &value[c]);
- }
- return pair;
+ if (key != NULL)
+ {
+ pair->key = (char *) malloc (strlen (key) + 1);
+ strcpy (pair->key, key);
+ }
+ if (value != NULL)
+ {
+ for (c = 0; value[c] == ' '; c++); /* skip white space */
+ pair->value = (char *) malloc (strlen (&value[c]) + 1);
+ strcpy (pair->value, &value[c]);
+ }
+ return pair;
}
-hpair_t *
-hpairnode_copy(const hpair_t * src)
+hpair_t *
+hpairnode_copy (const hpair_t * src)
{
- hpair_t *pair;
+ hpair_t *pair;
- if (src == NULL)
- return NULL;
+ if (src == NULL)
+ return NULL;
- pair = hpairnode_new(src->key, src->value, NULL);
- return pair;
+ pair = hpairnode_new (src->key, src->value, NULL);
+ return pair;
}
-hpair_t *
-hpairnode_copy_deep(const hpair_t * src)
+hpair_t *
+hpairnode_copy_deep (const hpair_t * src)
{
- hpair_t *pair, *result, *next;
+ hpair_t *pair, *result, *next;
- if (src == NULL)
- return NULL;
+ if (src == NULL)
+ return NULL;
- result = hpairnode_copy(src);
+ result = hpairnode_copy (src);
- next = src->next;
- pair = result;
+ next = src->next;
+ pair = result;
- while (next != NULL) {
- pair->next = hpairnode_copy(next);
- pair = pair->next;
- next = next->next;
- }
+ while (next != NULL)
+ {
+ pair->next = hpairnode_copy (next);
+ pair = pair->next;
+ next = next->next;
+ }
- return result;
+ return result;
}
-void
-hpairnode_dump(hpair_t * pair)
+void
+hpairnode_dump (hpair_t * pair)
{
- if (pair == NULL) {
- log_verbose1("(NULL)[]");
- return;
- }
- log_verbose5("(%p)['%s','%s','%p']", pair,
- SAVE_STR(pair->key), SAVE_STR(pair->value),
- pair->next);
+ if (pair == NULL)
+ {
+ log_verbose1 ("(NULL)[]");
+ return;
+ }
+ log_verbose5 ("(%p)['%s','%s','%p']", pair,
+ SAVE_STR (pair->key), SAVE_STR (pair->value), pair->next);
}
-void
-hpairnode_dump_deep(hpair_t * pair)
+void
+hpairnode_dump_deep (hpair_t * pair)
{
- hpair_t *p;
- p = pair;
+ hpair_t *p;
+ p = pair;
- log_verbose1("-- BEGIN dump hpairnode_t --");
+ log_verbose1 ("-- BEGIN dump hpairnode_t --");
- while (p != NULL) {
- hpairnode_dump(p);
- p = p->next;
- }
+ while (p != NULL)
+ {
+ hpairnode_dump (p);
+ p = p->next;
+ }
- log_verbose1("-- END dump hpairnode_t --\n");
+ log_verbose1 ("-- END dump hpairnode_t --\n");
}
-void
-hpairnode_free(hpair_t * pair)
+void
+hpairnode_free (hpair_t * pair)
{
- if (pair == NULL)
- return;
+ if (pair == NULL)
+ return;
- free(pair->key);
- free(pair->value);
+ free (pair->key);
+ free (pair->value);
- free(pair);
+ free (pair);
}
-void
-hpairnode_free_deep(hpair_t * pair)
+void
+hpairnode_free_deep (hpair_t * pair)
{
- hpair_t *tmp;
+ hpair_t *tmp;
+
+ while (pair != NULL)
+ {
+ tmp = pair->next;
+ hpairnode_free (pair);
+ pair = tmp;
+ }
+}
+
+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)
+ {
+ log_error1 ("key is NULL");
+ return NULL;
+ }
+ while (pair != NULL)
+ {
+ if (pair->key != NULL)
+ {
+ if (!strcmp (pair->key, key))
+ {
+ return pair->value;
+ }
+ }
+ pair = pair->next;
+ }
- while (pair != NULL) {
- tmp = pair->next;
- hpairnode_free(pair);
- pair = tmp;
- }
+ return NULL;
}
-char *
-hpairnode_get_ignore_case(hpair_t * pair, const char *key)
+static void
+hurl_dump (const hurl_t * url)
{
- 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;
+ if (url == NULL)
+ {
+ log_error1 ("url is NULL!");
+ return;
+ }
+ log_verbose2 ("PROTOCOL : %d", url->protocol);
+ log_verbose2 (" HOST : %s", url->host);
+ log_verbose2 (" PORT : %d", url->port);
+ log_verbose2 (" CONTEXT : %s", url->context);
}
-char *
-hpairnode_get(hpair_t * pair, const char *key)
+
+herror_t
+hurl_parse (hurl_t * url, const char *urlstr)
{
- if (key == NULL) {
- log_error1("key is NULL");
- return NULL;
- }
- while (pair != NULL) {
- if (pair->key != NULL) {
- if (!strcmp(pair->key, key)) {
- return pair->value;
- }
- }
- pair = pair->next;
- }
-
- return NULL;
-}
-
-static
-void
-hurl_dump(const hurl_t * url)
-{
-
- if (url == NULL) {
- log_error1("url is NULL!");
- return;
- }
- log_verbose2("PROTOCOL : %d", url->protocol);
- log_verbose2(" HOST : %s", url->host);
- log_verbose2(" PORT : %d", url->port);
- log_verbose2(" CONTEXT : %s", url->context);
-}
-
-
-herror_t hurl_parse(hurl_t* url, const char *urlstr)
-{
- int iprotocol;
- int ihost;
- int iport;
- int len;
- int size;
- char tmp[8];
- char protocol[1024];
-
- iprotocol = 0;
- len = strlen(urlstr);
-
- /* find protocol */
- while (urlstr[iprotocol] != ':' && urlstr[iprotocol] != '\0') {
- iprotocol++;
- }
-
- if (iprotocol == 0) {
- log_error1("no protocol");
- return herror_new("hurl_parse", URL_ERROR_NO_PROTOCOL, "No protocol");
- }
- if (iprotocol + 3 >= len) {
- log_error1("no host");
- return herror_new("hurl_parse", URL_ERROR_NO_HOST, "No host");
- }
- if (urlstr[iprotocol] != ':'
- && urlstr[iprotocol + 1] != '/'
- && urlstr[iprotocol + 2] != '/') {
- log_error1("no protocol");
- return herror_new("hurl_parse", URL_ERROR_NO_PROTOCOL, "No protocol");
- }
- /* find host */
- ihost = iprotocol + 3;
- while (urlstr[ihost] != ':'
- && urlstr[ihost] != '/'
- && urlstr[ihost] != '\0') {
- ihost++;
- }
-
- if (ihost == iprotocol + 1) {
- log_error1("no host");
- return herror_new("hurl_parse", URL_ERROR_NO_HOST, "No host");
- }
- /* find port */
- iport = ihost;
- if (ihost + 1 < len) {
- if (urlstr[ihost] == ':') {
- while (urlstr[iport] != '/' && urlstr[iport] != '\0') {
- iport++;
- }
- }
- }
-
- /* find protocol */
- strncpy(protocol, urlstr, iprotocol);
- protocol[iprotocol] = '\0';
- if (strcmpigcase(protocol, "http"))
- url->protocol = PROTOCOL_HTTP;
- else if (strcmpigcase(protocol, "https"))
- url->protocol = PROTOCOL_HTTPS;
- else if (strcmpigcase(protocol, "ftp"))
- url->protocol = PROTOCOL_FTP;
- else return herror_new("hurl_parse",
- URL_ERROR_UNKNOWN_PROTOCOL, "Unknown protocol '%s'", protocol);
-
- /* TODO (#1#): add max of size and URL_MAX_HOST_SIZE */
- size = ihost - iprotocol - 3;
- strncpy(url->host, &urlstr[iprotocol + 3], size);
- url->host[size] = '\0';
-
- if (iport > ihost) {
- size = iport - ihost;
- strncpy(tmp, &urlstr[ihost + 1], size);
- url->port = atoi(tmp);
- } else {
- switch (url->protocol) {
- case PROTOCOL_HTTP:
- url->port = URL_DEFAULT_PORT_HTTP;
- break;
- case PROTOCOL_HTTPS:
- url->port = URL_DEFAULT_PORT_HTTPS;
- break;
- case PROTOCOL_FTP:
- url->port = URL_DEFAULT_PORT_FTP;
- break;
- }
- }
-
- len = strlen(urlstr);
- if (len > iport) {
- /* TODO (#1#): find max of size and URL_MAX_CONTEXT_SIZE */
- size = len - iport;
- strncpy(url->context, &urlstr[iport], size);
- url->context[size] = '\0';
- } else {
- url->context[0] = '\0';
- }
-
- hurl_dump(url);
-
- return H_OK;
+ int iprotocol;
+ int ihost;
+ int iport;
+ int len;
+ int size;
+ char tmp[8];
+ char protocol[1024];
+
+ iprotocol = 0;
+ len = strlen (urlstr);
+
+ /* find protocol */
+ while (urlstr[iprotocol] != ':' && urlstr[iprotocol] != '\0')
+ {
+ iprotocol++;
+ }
+
+ if (iprotocol == 0)
+ {
+ log_error1 ("no protocol");
+ return herror_new ("hurl_parse", URL_ERROR_NO_PROTOCOL, "No protocol");
+ }
+ if (iprotocol + 3 >= len)
+ {
+ log_error1 ("no host");
+ return herror_new ("hurl_parse", URL_ERROR_NO_HOST, "No host");
+ }
+ if (urlstr[iprotocol] != ':'
+ && urlstr[iprotocol + 1] != '/' && urlstr[iprotocol + 2] != '/')
+ {
+ log_error1 ("no protocol");
+ return herror_new ("hurl_parse", URL_ERROR_NO_PROTOCOL, "No protocol");
+ }
+ /* find host */
+ ihost = iprotocol + 3;
+ while (urlstr[ihost] != ':'
+ && urlstr[ihost] != '/' && urlstr[ihost] != '\0')
+ {
+ ihost++;
+ }
+
+ if (ihost == iprotocol + 1)
+ {
+ log_error1 ("no host");
+ return herror_new ("hurl_parse", URL_ERROR_NO_HOST, "No host");
+ }
+ /* find port */
+ iport = ihost;
+ if (ihost + 1 < len)
+ {
+ if (urlstr[ihost] == ':')
+ {
+ while (urlstr[iport] != '/' && urlstr[iport] != '\0')
+ {
+ iport++;
+ }
+ }
+ }
+
+ /* find protocol */
+ strncpy (protocol, urlstr, iprotocol);
+ protocol[iprotocol] = '\0';
+ if (strcmpigcase (protocol, "http"))
+ url->protocol = PROTOCOL_HTTP;
+ else if (strcmpigcase (protocol, "https"))
+ url->protocol = PROTOCOL_HTTPS;
+ else if (strcmpigcase (protocol, "ftp"))
+ url->protocol = PROTOCOL_FTP;
+ else
+ return herror_new ("hurl_parse",
+ URL_ERROR_UNKNOWN_PROTOCOL, "Unknown protocol '%s'",
+ protocol);
+
+ /* TODO (#1#): add max of size and URL_MAX_HOST_SIZE */
+ size = ihost - iprotocol - 3;
+ strncpy (url->host, &urlstr[iprotocol + 3], size);
+ url->host[size] = '\0';
+
+ if (iport > ihost)
+ {
+ size = iport - ihost;
+ strncpy (tmp, &urlstr[ihost + 1], size);
+ url->port = atoi (tmp);
+ }
+ else
+ {
+ switch (url->protocol)
+ {
+ case PROTOCOL_HTTP:
+ url->port = URL_DEFAULT_PORT_HTTP;
+ break;
+ case PROTOCOL_HTTPS:
+ url->port = URL_DEFAULT_PORT_HTTPS;
+ break;
+ case PROTOCOL_FTP:
+ url->port = URL_DEFAULT_PORT_FTP;
+ break;
+ }
+ }
+
+ len = strlen (urlstr);
+ if (len > iport)
+ {
+ /* TODO (#1#): find max of size and URL_MAX_CONTEXT_SIZE */
+ size = len - iport;
+ strncpy (url->context, &urlstr[iport], size);
+ url->context[size] = '\0';
+ }
+ else
+ {
+ url->context[0] = '\0';
+ }
+
+ hurl_dump (url);
+
+ return H_OK;
}
/* Content-type stuff */
-content_type_t *content_type_new(const char* content_type_str)
+content_type_t *
+content_type_new (const char *content_type_str)
{
hpair_t *pair = NULL, *last = NULL;
- content_type_t * ct;
+ content_type_t *ct;
char ch, key[256], value[256];
- int inQuote = 0, i=0, c=0, begin=0, len;
- int mode = 0;
- /* 0: searching ';'
- 1: process key
- 2: process value
- */
-
+ int inQuote = 0, i = 0, c = 0, begin = 0, len;
+ int mode = 0;
+ /* 0: searching ';' 1: process key 2: process value */
+
/* Create object */
- ct = (content_type_t*)malloc(sizeof(content_type_t));
+ ct = (content_type_t *) malloc (sizeof (content_type_t));
ct->params = NULL;
- len = strlen(content_type_str);
+ len = strlen (content_type_str);
while (i <= len)
{
if (i != len)
ch = content_type_str[i++];
- else
+ else
{
- ch = ' '; i++;
+ ch = ' ';
+ i++;
}
switch (mode)
{
- case 0:
-
- if (ch == ';')
- {
- ct->type[c] = '\0';
- c = 0;
- mode = 1;
- }
- else if (ch != ' ' && ch != '\t' && ch != '\r')
- ct->type[c++] = ch;
- break;
-
- case 1:
-
- if (ch == '=')
- {
- key[c] = '\0';
- c = 0;
- mode = 2;
- }
- else if (ch != ' ' && ch != '\t' && ch != '\r')
- key[c++] = ch;
- break;
-
- case 2:
-
- if (ch != ' ') begin = 1;
-
- if ((ch == ' ' || ch == ';') && !inQuote && begin)
- {
- value[c] = '\0';
-
- pair = hpairnode_new(key, value, NULL);
- if (ct->params == NULL)
- ct->params = pair;
- else
- last->next = pair;
- last = pair;
-
- c = 0;
- begin = 0;
- mode = 1;
- }
- else if (ch == '"')
- inQuote = !inQuote;
- else if (begin && ch != '\r')
- value[c++] = ch;
-
- break;
+ case 0:
+
+ if (ch == ';')
+ {
+ ct->type[c] = '\0';
+ c = 0;
+ mode = 1;
+ }
+ else if (ch != ' ' && ch != '\t' && ch != '\r')
+ ct->type[c++] = ch;
+ break;
+
+ case 1:
+
+ if (ch == '=')
+ {
+ key[c] = '\0';
+ c = 0;
+ mode = 2;
+ }
+ else if (ch != ' ' && ch != '\t' && ch != '\r')
+ key[c++] = ch;
+ break;
+
+ case 2:
+
+ if (ch != ' ')
+ begin = 1;
+
+ if ((ch == ' ' || ch == ';') && !inQuote && begin)
+ {
+ value[c] = '\0';
+
+ pair = hpairnode_new (key, value, NULL);
+ if (ct->params == NULL)
+ ct->params = pair;
+ else
+ last->next = pair;
+ last = pair;
+
+ c = 0;
+ begin = 0;
+ mode = 1;
+ }
+ else if (ch == '"')
+ inQuote = !inQuote;
+ else if (begin && ch != '\r')
+ value[c++] = ch;
+
+ break;
}
}
@@ -742,61 +809,74 @@ content_type_t *content_type_new(const char* content_type_str)
}
-void content_type_free(content_type_t *ct)
+void
+content_type_free (content_type_t * ct)
{
- if (!ct) return;
+ if (!ct)
+ return;
- hpairnode_free_deep(ct->params);
- free(ct);
+ hpairnode_free_deep (ct->params);
+ free (ct);
}
-part_t *part_new(const char *id, const char* filename,
- const char* content_type, const char* transfer_encoding, part_t *next)
+part_t *
+part_new (const char *id, const char *filename,
+ const char *content_type, const char *transfer_encoding,
+ part_t * next)
{
- part_t *part = (part_t*)malloc(sizeof(part_t));
+ part_t *part = (part_t *) malloc (sizeof (part_t));
part->header = NULL;
part->next = next;
part->deleteOnExit = 0;
- strcpy(part->id, id);
- strcpy(part->filename, filename);
+ strcpy (part->id, id);
+ strcpy (part->filename, filename);
if (content_type)
- strcpy(part->content_type, content_type);
+ strcpy (part->content_type, content_type);
else
part->content_type[0] = '\0';
- part->header = hpairnode_new(HEADER_CONTENT_ID, id, part->header);
+ part->header = hpairnode_new (HEADER_CONTENT_ID, id, part->header);
/* TODO (#1#): encoding is always binary. implement also others! */
/* part->header = hpairnode_new(HEADER_CONTENT_TRANSFER_ENCODING, "binary", part->header);*/
-
- strcpy(part->transfer_encoding, transfer_encoding?transfer_encoding:"binary");
- if (content_type) {
- part->header = hpairnode_new(HEADER_CONTENT_TYPE, content_type, part->header);
- } else {
+ strcpy (part->transfer_encoding,
+ transfer_encoding ? transfer_encoding : "binary");
+
+ if (content_type)
+ {
+ part->header =
+ hpairnode_new (HEADER_CONTENT_TYPE, content_type, part->header);
+ }
+ else
+ {
/* TODO (#1#): get content-type from mime type list */
}
return part;
}
-void part_free(part_t *part)
+void
+part_free (part_t * part)
{
if (part == NULL)
return;
- if (part->deleteOnExit) {
- remove(part->filename);
+ if (part->deleteOnExit)
+ {
+ remove (part->filename);
}
- hpairnode_free_deep(part->header);
+ hpairnode_free_deep (part->header);
- free(part);
+ free (part);
}
-attachments_t *attachments_new() /* should be used internally */
+attachments_t *
+attachments_new () /* should be used internally */
{
- attachments_t *attachments= (attachments_t*)malloc(sizeof(attachments_t));
+ attachments_t *attachments =
+ (attachments_t *) malloc (sizeof (attachments_t));
attachments->parts = NULL;
attachments->last = NULL;
attachments->root_part = NULL;
@@ -804,41 +884,44 @@ attachments_t *attachments_new() /* should be used internally */
return attachments;
}
-void attachments_add_part(attachments_t *attachments, part_t *part)
+void
+attachments_add_part (attachments_t * attachments, part_t * part)
{
/* paranoya check */
- if (!attachments)
+ if (!attachments)
return;
- if (attachments->last)
+ if (attachments->last)
attachments->last->next = part;
else
attachments->parts = part;
-
+
attachments->last = part;
}
/*
Free a mime message
*/
-void attachments_free(attachments_t *message)
+void
+attachments_free (attachments_t * message)
{
part_t *tmp, *part;
- if (message == NULL)
+ if (message == NULL)
return;
part = message->parts;
- while (part) {
+ while (part)
+ {
tmp = part->next;
- part_free(part);
- part= tmp;
+ part_free (part);
+ part = tmp;
}
if (message->root_part)
- part_free(message->root_part);
+ part_free (message->root_part);
/* TODO (#1#): HERE IS A BUG!!!! */
- free(message);
+ free (message);
}
@@ -846,30 +929,31 @@ void attachments_free(attachments_t *message)
/* strtok_r() */
char *
-strtok_r(char *s, const char *delim, char **save_ptr)
+strtok_r (char *s, const char *delim, char **save_ptr)
{
- char *token;
+ char *token;
- if (s == NULL)
- s = *save_ptr;
+ if (s == NULL)
+ s = *save_ptr;
- /* Scan leading delimiters. */
- s += strspn(s, delim);
- if (*s == '\0')
- return NULL;
+ /* Scan leading delimiters. */
+ s += strspn (s, delim);
+ if (*s == '\0')
+ return NULL;
- /* Find the end of the token. */
- token = s;
- s = strpbrk(token, delim);
- if (s == NULL)
- /* This token finishes the string. */
- *save_ptr = strchr(token, '\0');
- else {
- /* Terminate the token and make *SAVE_PTR point past it. */
- *s = '\0';
- *save_ptr = s + 1;
- }
- return token;
+ /* Find the end of the token. */
+ token = s;
+ s = strpbrk (token, delim);
+ if (s == NULL)
+ /* This token finishes the string. */
+ *save_ptr = strchr (token, '\0');
+ else
+ {
+ /* Terminate the token and make *SAVE_PTR point past it. */
+ *s = '\0';
+ *save_ptr = s + 1;
+ }
+ return token;
}
/* localtime_r() */
@@ -887,4 +971,3 @@ localtime_r (const time_t * const timep, struct tm *p_tm)
}
#endif
-
diff --git a/nanohttp/nanohttp-common.h b/nanohttp/nanohttp-common.h
index f23d165..36136b5 100644
--- a/nanohttp/nanohttp-common.h
+++ b/nanohttp/nanohttp-common.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-common.h,v 1.20 2005/12/19 14:06:16 snowdrop Exp $
+ * $Id: nanohttp-common.h,v 1.21 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -21,8 +21,8 @@
*
* Email: ferhatayaz@yahoo.com
******************************************************************/
-#ifndef NANO_HTTP_COMMON_H
-#define NANO_HTTP_COMMON_H
+#ifndef NANO_HTTP_COMMON_H
+#define NANO_HTTP_COMMON_H
#include <stdlib.h>
#include <time.h>
@@ -85,7 +85,7 @@
/* TODO (#1#): find proper ports */
#define URL_DEFAULT_PORT_HTTP 80
#define URL_DEFAULT_PORT_HTTPS 81
-#define URL_DEFAULT_PORT_FTP 120
+#define URL_DEFAULT_PORT_FTP 120
/* Success flag */
#define H_OK 0
@@ -123,7 +123,7 @@
#define MIME_ERROR_NO_BOUNDARY_PARAM 1301
#define MIME_ERROR_NO_START_PARAM 1302
#define MIME_ERROR_PARSE_ERROR 1303
-#define MIME_ERROR_NO_ROOT_PART 1304
+#define MIME_ERROR_NO_ROOT_PART 1304
#define MIME_ERROR_NOT_MIME_MESSAGE 1305
@@ -145,19 +145,19 @@
Set Sleep function platform depended
*/
#ifdef WIN32
- #define system_sleep(seconds) Sleep(seconds*1000);
+#define system_sleep(seconds) Sleep(seconds*1000);
#else
- #define system_sleep(seconds) sleep(seconds);
+#define system_sleep(seconds) sleep(seconds);
#endif
#ifdef WIN32
#include <string.h>
-char* strtok_r(char *s, const char *delim, char **save_ptr);
-struct tm *localtime_r(const time_t *const timep, struct tm *p_tm);
+char *strtok_r (char *s, const char *delim, char **save_ptr);
+struct tm *localtime_r (const time_t * const timep, struct tm *p_tm);
#endif
typedef unsigned char byte_t;
-typedef void* herror_t;
+typedef void *herror_t;
@@ -165,35 +165,35 @@ typedef void* herror_t;
Indicates the version of the
used HTTP protocol.
*/
-typedef enum _http_version {
- HTTP_1_0,
- HTTP_1_1 /* default */
-}http_version_t;
+typedef enum _http_version
+{
+ HTTP_1_0,
+ HTTP_1_1 /* default */
+} http_version_t;
/**
Indicates the used method
*/
-typedef enum _hreq_method
+typedef enum _hreq_method
{
HTTP_REQUEST_POST,
HTTP_REQUEST_GET
-}hreq_method_t ;
+} hreq_method_t;
-herror_t herror_new(const char* func,
- int errcode, const char* format, ...);
-int herror_code(herror_t err);
-char* herror_func(herror_t err);
-char* herror_message(herror_t err);
-void herror_release(herror_t err);
+herror_t herror_new (const char *func, int errcode, const char *format, ...);
+int herror_code (herror_t err);
+char *herror_func (herror_t err);
+char *herror_message (herror_t err);
+void herror_release (herror_t err);
/*
string function to compare strings ignoring case
Returns 1 if s1 equals s2 and 0 otherwise.
*/
-int strcmpigcase(const char *s1, const char *s2);
+int strcmpigcase (const char *s1, const char *s2);
@@ -221,7 +221,7 @@ struct hpair
@returns A newly crated hpair_t object. Use hpair_free()
or hpair_free_deep() to free the pair.
*/
-hpair_t *hpairnode_new(const char* key, const char* value, hpair_t* next);
+hpair_t *hpairnode_new (const char *key, const char *value, hpair_t * next);
/**
@@ -239,7 +239,7 @@ hpair_t *hpairnode_new(const char* key, const char* value, hpair_t* next);
@returns A newly crated hpair_t object. Use hpair_free()
or hpair_free_deep() to free the pair.
*/
-hpair_t *hpairnode_parse(const char *str, const char *delim, hpair_t * next);
+hpair_t *hpairnode_parse (const char *str, const char *delim, hpair_t * next);
/**
@@ -247,7 +247,7 @@ hpair_t *hpairnode_parse(const char *str, const char *delim, hpair_t * next);
@param pair the pair to free
*/
-void hpairnode_free(hpair_t *pair);
+void hpairnode_free (hpair_t * pair);
/**
@@ -257,7 +257,7 @@ void hpairnode_free(hpair_t *pair);
@param pair the pair to start to free the linked list
*/
-void hpairnode_free_deep(hpair_t * pair);
+void hpairnode_free_deep (hpair_t * pair);
/**
@@ -270,7 +270,7 @@ void hpairnode_free_deep(hpair_t * pair);
return the value (do not free this string) or NULL
if no pair was found with the key 'key'.
*/
-char *hpairnode_get(hpair_t *pair, const char* key);
+char *hpairnode_get (hpair_t * pair, const char *key);
/**
@@ -284,7 +284,7 @@ char *hpairnode_get(hpair_t *pair, const char* key);
return the value (do not free this string) or NULL
if no pair was found with the key 'key'.
*/
-char *hpairnode_get_ignore_case(hpair_t *pair, const char* key);
+char *hpairnode_get_ignore_case (hpair_t * pair, const char *key);
/**
@@ -300,7 +300,7 @@ char *hpairnode_get_ignore_case(hpair_t *pair, const char* key);
@see hpairnode_copy_deep
*/
-hpair_t* hpairnode_copy(const hpair_t *src);
+hpair_t *hpairnode_copy (const hpair_t * src);
/**
@@ -312,11 +312,11 @@ hpair_t* hpairnode_copy(const hpair_t *src);
@see hpairnode_copy
*/
-hpair_t* hpairnode_copy_deep(const hpair_t *src);
+hpair_t *hpairnode_copy_deep (const hpair_t * src);
/* Debug functions */
-void hpairnode_dump_deep(hpair_t *pair);
-void hpairnode_dump(hpair_t *pair);
+void hpairnode_dump_deep (hpair_t * pair);
+void hpairnode_dump (hpair_t * pair);
/**
The protocol types in enumeration
@@ -330,7 +330,7 @@ typedef enum _hprotocol
PROTOCOL_HTTP,
PROTOCOL_HTTPS,
PROTOCOL_FTP
-}hprotocol_t;
+} hprotocol_t;
@@ -355,7 +355,7 @@ typedef struct _hurl
URL_HTTP_DEFAULT_PORT
URL_HTTPS_DEFAULT_PORT
URL_FTP_DEFAULT_PORT
- */
+ */
int port;
/** The hostname */
@@ -363,7 +363,7 @@ typedef struct _hurl
/** The string after the hostname. */
char context[URL_MAX_CONTEXT_SIZE];
-}hurl_t;
+} hurl_t;
/**
@@ -378,7 +378,7 @@ typedef struct _hurl
URL_ERROR_NO_PROTOCOL
URL_ERROR_NO_HOST
*/
-herror_t hurl_parse(hurl_t *obj, const char* url);
+herror_t hurl_parse (hurl_t * obj, const char *url);
/*
Object representation of the content-type field
@@ -392,7 +392,7 @@ typedef struct _content_type
{
char type[128];
hpair_t *params;
-}content_type_t;
+} content_type_t;
/**
@@ -407,13 +407,13 @@ typedef struct _content_type
@see content_type_free
*/
-content_type_t *content_type_new(const char* content_type_str);
+content_type_t *content_type_new (const char *content_type_str);
/**
Frees the given content_type_t object
*/
-void content_type_free(content_type_t *ct);
+void content_type_free (content_type_t * ct);
@@ -429,13 +429,14 @@ typedef struct _part
char transfer_encoding[128];
char filename[250];
struct _part *next;
- int deleteOnExit; /* default is 0 */
-}part_t;
+ int deleteOnExit; /* default is 0 */
+} part_t;
-part_t *part_new(const char *id, const char* filename,
- const char* content_type, const char* transfer_encoding, part_t *next);
-void part_free(part_t *part);
+part_t *part_new (const char *id, const char *filename,
+ const char *content_type, const char *transfer_encoding,
+ part_t * next);
+void part_free (part_t * part);
@@ -448,9 +449,9 @@ typedef struct _attachments
part_t *parts;
part_t *last;
part_t *root_part;
-}attachments_t;
+} attachments_t;
-attachments_t *attachments_new(); /* should be used internally */
+attachments_t *attachments_new (); /* should be used internally */
/*
Free a attachment. Create attachments with MIME
@@ -458,15 +459,15 @@ attachments_t *attachments_new(); /* should be used internally */
@see mime_get_attachments
*/
-void attachments_free(attachments_t *message);
-void attachments_add_part(attachments_t *attachments, part_t *part);
+void attachments_free (attachments_t * message);
+void attachments_add_part (attachments_t * attachments, part_t * part);
/* tmp directory for multipart/related stuff */
#define HOPTION_TMP_DIR 2
-void hoption_init_args(int argc, char* argv[]);
-void hoption_set(int opt, const char* value);
-char *hoption_get(int opt);
+void hoption_init_args (int argc, char *argv[]);
+void hoption_set (int opt, const char *value);
+char *hoption_get (int opt);
/* logging stuff */
typedef enum log_level
@@ -477,21 +478,21 @@ typedef enum log_level
HLOG_WARN,
HLOG_ERROR,
HLOG_FATAL
-}log_level_t;
+} log_level_t;
-log_level_t log_set_level(log_level_t level);
-log_level_t log_get_level();
+log_level_t log_set_level (log_level_t level);
+log_level_t log_get_level ();
-void log_set_file(const char *filename);
-char *log_get_file();
+void log_set_file (const char *filename);
+char *log_get_file ();
#ifdef WIN32
- #if defined(_MSC_VER) && _MSC_VER <= 1200
- char *VisualC_funcname(const char* file, int line); /* not thread safe!*/
- #define __FUNCTION__ VisualC_funcname(__FILE__, __LINE__)
- #endif
+#if defined(_MSC_VER) && _MSC_VER <= 1200
+char *VisualC_funcname (const char *file, int line); /* not thread safe! */
+#define __FUNCTION__ VisualC_funcname(__FILE__, __LINE__)
+#endif
#endif
#define log_verbose1(a1) log_verbose(__FUNCTION__, a1)
@@ -524,18 +525,12 @@ char *log_get_file();
#define log_error4(a1,a2,a3,a4) log_error(__FUNCTION__, a1,a2,a3,a4)
#define log_error5(a1,a2,a3,a4,a5) log_error(__FUNCTION__, a1,a2,a3,a4,a5)
-void log_verbose(const char* FUNC, const char *format, ...);
-void log_debug(const char* FUNC, const char *format, ...);
-void log_info(const char* FUNC, const char *format, ...);
-void log_warn(const char* FUNC, const char *format, ...);
-void log_error(const char* FUNC, const char *format, ...);
+void log_verbose (const char *FUNC, const char *format, ...);
+void log_debug (const char *FUNC, const char *format, ...);
+void log_info (const char *FUNC, const char *format, ...);
+void log_warn (const char *FUNC, const char *format, ...);
+void log_error (const char *FUNC, const char *format, ...);
#endif
-
-
-
-
-
-
diff --git a/nanohttp/nanohttp-mime.c b/nanohttp/nanohttp-mime.c
index f4ff487..3f17d38 100755
--- a/nanohttp/nanohttp-mime.c
+++ b/nanohttp/nanohttp-mime.c
@@ -3,7 +3,7 @@
* | \/ | | | | \/ | | _/
* |_''_| |_| |_''_| |_'/ PARSER
*
-* $Id: nanohttp-mime.c,v 1.7 2005/05/27 19:28:15 snowdrop Exp $
+* $Id: nanohttp-mime.c,v 1.8 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -45,32 +45,32 @@ Buffered Reader. A helper object to read bytes from a source
/* ------------------------------------------------------------------
MIME Parser
------------------------------------------------------------------*/
-typedef void (*MIME_part_begin) (void*);
-typedef void (*MIME_part_end) (void*);
-typedef void (*MIME_parse_begin) (void*);
-typedef void (*MIME_parse_end) (void*);
-typedef void (*MIME_ERROR_bytes) (void*,
- const unsigned char*, int);
-
-typedef enum _MIME_parser_status
+typedef void (*MIME_part_begin) (void *);
+typedef void (*MIME_part_end) (void *);
+typedef void (*MIME_parse_begin) (void *);
+typedef void (*MIME_parse_end) (void *);
+typedef void (*MIME_ERROR_bytes) (void *, const unsigned char *, int);
+
+typedef enum _MIME_parser_status
{
MIME_PARSER_INCOMPLETE_MESSAGE,
MIME_PARSER_READ_ERROR,
MIME_PARSER_OK
-}MIME_parser_status;
+} MIME_parser_status;
typedef enum _MIME_read_status
{
MIME_READ_OK,
MIME_READ_EOF,
MIME_READ_ERROR
-}MIME_read_status;
+} MIME_read_status;
#define MIME_READER_MAX_BUFFER_SIZE 1054
#define MIME_PARSER_BUFFER_SIZE 1054
-typedef MIME_read_status (*MIME_read_function) (void*, unsigned char*, int*);
+typedef MIME_read_status (*MIME_read_function) (void *, unsigned char *,
+ int *);
/**
@@ -85,36 +85,35 @@ typedef struct _MIME_reader
MIME_read_function read_function;
char buffer[MIME_READER_MAX_BUFFER_SIZE];
void *userdata;
-}MIME_reader;
+} MIME_reader;
-MIME_read_status MIME_filereader_function(void* userdata,
- unsigned char* dest, int* size);
+MIME_read_status MIME_filereader_function (void *userdata,
+ unsigned char *dest, int *size);
typedef struct _MIME_callbacks
{
- MIME_part_begin part_begin_cb;
- MIME_part_end part_end_cb;
- MIME_parse_begin parse_begin_cb;
- MIME_parse_end parse_end_cb;
+ MIME_part_begin part_begin_cb;
+ MIME_part_end part_end_cb;
+ MIME_parse_begin parse_begin_cb;
+ MIME_parse_end parse_end_cb;
MIME_ERROR_bytes received_bytes_cb;
-}MIME_callbacks;
+} MIME_callbacks;
-MIME_parser_status MIME_parse(
- MIME_read_function reader_function,
- void *reader_userdata,
- const char* user_boundary,
- const MIME_callbacks* callbacks,
- void *callbacks_userdata
-);
+MIME_parser_status MIME_parse (MIME_read_function reader_function,
+ void *reader_userdata,
+ const char *user_boundary,
+ const MIME_callbacks * callbacks,
+ void *callbacks_userdata);
/**
Initialize a reader
*/
-void MIME_reader_init(MIME_reader *reader,
- MIME_read_function reader_function,void *userdata)
+void
+MIME_reader_init (MIME_reader * reader,
+ MIME_read_function reader_function, void *userdata)
{
reader->size = 0;
reader->marker = -1;
@@ -127,8 +126,8 @@ void MIME_reader_init(MIME_reader *reader,
/**
Read data from a reader source.
*/
-MIME_read_status MIME_reader_read(MIME_reader *reader,
- unsigned char *buffer, int size)
+MIME_read_status
+MIME_reader_read (MIME_reader * reader, unsigned char *buffer, int size)
{
MIME_read_status status;
int readed_size;
@@ -145,64 +144,66 @@ MIME_read_status MIME_reader_read(MIME_reader *reader,
{
if (reader->marker != 0)
{
- memcpy(tempBuffer, reader->buffer + reader->marker,
- reader->size - reader->marker);
- memcpy(reader->buffer, tempBuffer,
+ memcpy (tempBuffer, reader->buffer + reader->marker,
reader->size - reader->marker);
+ memcpy (reader->buffer, tempBuffer, reader->size - reader->marker);
reader->current = reader->size - reader->marker;
}
- else if (reader->current == MIME_READER_MAX_BUFFER_SIZE-1)
+ else if (reader->current == MIME_READER_MAX_BUFFER_SIZE - 1)
{
- fprintf(stderr, "Marker error");
- return MIME_READ_ERROR;
+ fprintf (stderr, "Marker error");
+ return MIME_READ_ERROR;
}
reader->marker = 0;
}
else
reader->current = 0;
-
- readed_size = MIME_READER_MAX_BUFFER_SIZE - reader->current -1;
- status = reader->read_function(reader->userdata,
- reader->buffer + reader->current, &readed_size);
+
+ readed_size = MIME_READER_MAX_BUFFER_SIZE - reader->current - 1;
+ status = reader->read_function (reader->userdata,
+ reader->buffer + reader->current,
+ &readed_size);
if (status == MIME_READ_OK)
{
reader->size = readed_size + reader->current;
- }
+ }
else
return status;
}
if (size <= reader->size - reader->current)
{
- memcpy(buffer, reader->buffer + reader->current, size);
+ memcpy (buffer, reader->buffer + reader->current, size);
reader->current += size;
return MIME_READ_OK;
- }
+ }
else
{
/* Fill rest data */
rest_size = reader->size - reader->current;
- memcpy(buffer, reader->buffer + reader->current, rest_size);
+ memcpy (buffer, reader->buffer + reader->current, rest_size);
reader->current = reader->size;
- return MIME_reader_read(reader, buffer + rest_size,
- size - rest_size);
+ return MIME_reader_read (reader, buffer + rest_size, size - rest_size);
}
}
-void MIME_reader_set_marker(MIME_reader *reader)
+void
+MIME_reader_set_marker (MIME_reader * reader)
{
reader->marker = reader->current;
}
-void MIME_reader_unset_marker(MIME_reader *reader)
+void
+MIME_reader_unset_marker (MIME_reader * reader)
{
reader->marker = -1;
}
-void MIME_reader_jump_marker(MIME_reader *reader)
+void
+MIME_reader_jump_marker (MIME_reader * reader)
{
reader->current = reader->marker;
}
@@ -213,85 +214,89 @@ typedef struct _MIME_buffer
{
unsigned char data[MIME_PARSER_BUFFER_SIZE];
int size;
-}MIME_buffer;
+} MIME_buffer;
-void MIME_buffer_init(MIME_buffer *buffer)
+void
+MIME_buffer_init (MIME_buffer * buffer)
{
buffer->size = 0;
}
-void MIME_buffer_add(MIME_buffer *buffer, unsigned char ch)
+void
+MIME_buffer_add (MIME_buffer * buffer, unsigned char ch)
{
buffer->data[buffer->size++] = ch;
}
-void MIME_buffer_add_bytes(MIME_buffer *buffer, unsigned char *bytes, int size)
+void
+MIME_buffer_add_bytes (MIME_buffer * buffer, unsigned char *bytes, int size)
{
- memcpy(buffer->data, bytes, size);
+ memcpy (buffer->data, bytes, size);
buffer->size += size;
}
-int MIME_buffer_is_full(MIME_buffer *buffer)
+int
+MIME_buffer_is_full (MIME_buffer * buffer)
{
return buffer->size + 150 >= MIME_PARSER_BUFFER_SIZE;
}
-int MIME_buffer_is_empty(MIME_buffer *buffer)
+int
+MIME_buffer_is_empty (MIME_buffer * buffer)
{
return buffer->size == 0;
}
-void MIME_buffer_clear(MIME_buffer *buffer)
+void
+MIME_buffer_clear (MIME_buffer * buffer)
{
buffer->size = 0;
}
-MIME_parser_status MIME_parse(
- MIME_read_function reader_function,
- void *reader_userdata,
- const char* user_boundary,
- const MIME_callbacks* callbacks,
- void *callbacks_userdata
-)
+MIME_parser_status
+MIME_parse (MIME_read_function reader_function,
+ void *reader_userdata,
+ const char *user_boundary,
+ const MIME_callbacks * callbacks, void *callbacks_userdata)
{
- char boundary[150];
+ char boundary[150];
unsigned char ch[153];
- int boundary_length, n, ignore = 0;
+ int boundary_length, n, ignore = 0;
MIME_reader reader;
MIME_buffer buffer;
MIME_read_status status;
/* Init reader */
- MIME_reader_init(&reader, reader_function, reader_userdata);
+ MIME_reader_init (&reader, reader_function, reader_userdata);
/* Init buffer */
- MIME_buffer_init(&buffer);
+ MIME_buffer_init (&buffer);
/* Set boundary related stuff */
- sprintf(boundary, "\n--%s", user_boundary);
- boundary_length = strlen(boundary);
+ sprintf (boundary, "\n--%s", user_boundary);
+ boundary_length = strlen (boundary);
/* Call parse begin callback */
- callbacks->parse_begin_cb(callbacks_userdata);
+ callbacks->parse_begin_cb (callbacks_userdata);
while (1)
{
-set_marker:
+ set_marker:
/* Set marker */
- MIME_reader_set_marker(&reader);
+ MIME_reader_set_marker (&reader);
-read_byte:
+ read_byte:
/* Read 1 byte */
- status = MIME_reader_read(&reader, ch, 1);
- _log_str("buffer.log", ch,1);
+ status = MIME_reader_read (&reader, ch, 1);
+ _log_str ("buffer.log", ch, 1);
if (status == MIME_READ_EOF)
- return MIME_PARSER_INCOMPLETE_MESSAGE;
+ return MIME_PARSER_INCOMPLETE_MESSAGE;
else if (status == MIME_READ_ERROR)
- return MIME_PARSER_READ_ERROR;
+ return MIME_PARSER_READ_ERROR;
if (ch[0] == '\r' && !ignore)
{
@@ -299,181 +304,181 @@ read_byte:
while (n < boundary_length)
{
/* Read 1 byte */
- status = MIME_reader_read(&reader, ch, 1);
- _log_str("buffer.log", ch,1);
+ status = MIME_reader_read (&reader, ch, 1);
+ _log_str ("buffer.log", ch, 1);
if (status == MIME_READ_EOF)
- return MIME_PARSER_INCOMPLETE_MESSAGE;
+ return MIME_PARSER_INCOMPLETE_MESSAGE;
else if (status == MIME_READ_ERROR)
- return MIME_PARSER_READ_ERROR;
-
- /* Check if byte is in boundary */
- if (ch[0] == boundary[n])
+ return MIME_PARSER_READ_ERROR;
+
+ /* Check if byte is in boundary */
+ if (ch[0] == boundary[n])
{
n = n + 1;
- continue;
+ continue;
}
else
{
- MIME_reader_jump_marker(&reader);
+ MIME_reader_jump_marker (&reader);
ignore = 1;
goto read_byte;
}
-
- } /* while n < boundary_length*/
+
+ } /* while n < boundary_length */
/* Read 1 byte */
- status = MIME_reader_read(&reader, ch, 1);
- _log_str("buffer.log", ch,1);
+ status = MIME_reader_read (&reader, ch, 1);
+ _log_str ("buffer.log", ch, 1);
if (status == MIME_READ_EOF)
- return MIME_PARSER_INCOMPLETE_MESSAGE;
+ return MIME_PARSER_INCOMPLETE_MESSAGE;
else if (status == MIME_READ_ERROR)
- return MIME_PARSER_READ_ERROR;
-
+ return MIME_PARSER_READ_ERROR;
+
/* Show if byte is '\r' */
if (ch[0] == '\r')
{
/* Read 1 byte */
- status = MIME_reader_read(&reader, ch, 1);
- _log_str("buffer.log", ch,1);
+ status = MIME_reader_read (&reader, ch, 1);
+ _log_str ("buffer.log", ch, 1);
if (status == MIME_READ_EOF)
- return MIME_PARSER_INCOMPLETE_MESSAGE;
+ return MIME_PARSER_INCOMPLETE_MESSAGE;
else if (status == MIME_READ_ERROR)
- return MIME_PARSER_READ_ERROR;
+ return MIME_PARSER_READ_ERROR;
- /* Check if byte is '\n' */
+ /* Check if byte is '\n' */
if (ch[0] == '\n')
{
- if (!MIME_buffer_is_empty(&buffer))
+ if (!MIME_buffer_is_empty (&buffer))
{
/* Invoke callback */
- callbacks->received_bytes_cb(
- callbacks_userdata, buffer.data, buffer.size);
+ callbacks->received_bytes_cb (callbacks_userdata, buffer.data,
+ buffer.size);
/* Empty the buffer */
- MIME_buffer_clear(&buffer);
-
+ MIME_buffer_clear (&buffer);
+
/* Invoke End Part */
- callbacks->part_end_cb(callbacks_userdata);
+ callbacks->part_end_cb (callbacks_userdata);
}
-
+
/* Invoke start new Part */
- callbacks->part_begin_cb(callbacks_userdata);
+ callbacks->part_begin_cb (callbacks_userdata);
goto set_marker;
- } /* if (ch[0] == '\n') */
+ } /* if (ch[0] == '\n') */
else
{
/* Jump to marker and read bytes */
- MIME_reader_jump_marker(&reader);
- MIME_reader_read(&reader, ch, boundary_length+2);
- _log_str("buffer.log", ch,1);
+ MIME_reader_jump_marker (&reader);
+ MIME_reader_read (&reader, ch, boundary_length + 2);
+ _log_str ("buffer.log", ch, 1);
- MIME_buffer_add_bytes(&buffer, ch, boundary_length+2);
-
- if (MIME_buffer_is_full(&buffer))
+ MIME_buffer_add_bytes (&buffer, ch, boundary_length + 2);
+
+ if (MIME_buffer_is_full (&buffer))
{
/* Invoke callback */
- callbacks->received_bytes_cb(
- callbacks_userdata, buffer.data, buffer.size);
-
+ callbacks->received_bytes_cb (callbacks_userdata, buffer.data,
+ buffer.size);
+
/* Empty the buffer */
- MIME_buffer_clear(&buffer);
+ MIME_buffer_clear (&buffer);
}
- } /* else of if (ch[0] == '\n') */
+ } /* else of if (ch[0] == '\n') */
- } /* if (ch[0] == '\r') */
+ } /* if (ch[0] == '\r') */
else
{
if (ch[0] == '-')
{
/* Read 1 byte */
- status = MIME_reader_read(&reader, ch, 1);
- _log_str("buffer.log", ch,1);
+ status = MIME_reader_read (&reader, ch, 1);
+ _log_str ("buffer.log", ch, 1);
if (status == MIME_READ_EOF)
- return MIME_PARSER_INCOMPLETE_MESSAGE;
+ return MIME_PARSER_INCOMPLETE_MESSAGE;
else if (status == MIME_READ_ERROR)
- return MIME_PARSER_READ_ERROR;
+ return MIME_PARSER_READ_ERROR;
if (ch[0] == '-')
{
- if (!MIME_buffer_is_empty(&buffer))
+ if (!MIME_buffer_is_empty (&buffer))
{
/* Invoke callback */
- callbacks->received_bytes_cb(
- callbacks_userdata, buffer.data, buffer.size);
-
+ callbacks->received_bytes_cb (callbacks_userdata, buffer.data,
+ buffer.size);
+
/* Empty the buffer */
- MIME_buffer_clear(&buffer);
+ MIME_buffer_clear (&buffer);
/* Invoke End Part */
- callbacks->part_end_cb(callbacks_userdata);
+ callbacks->part_end_cb (callbacks_userdata);
}
-
+
/* Invoke start new Part */
- callbacks->parse_end_cb(callbacks_userdata);
+ callbacks->parse_end_cb (callbacks_userdata);
+
+ /* Finish parsing */
+ /* TODO (#1#): We assume that after -- comes \r\n This is not
+ always correct */
- /* Finish parsing*/
- /* TODO (#1#): We assume that after -- comes \r\n
- This is not always correct */
-
return MIME_PARSER_OK;
- } /* if (ch[0] == '-') */
+ } /* if (ch[0] == '-') */
else
{
- MIME_reader_jump_marker(&reader);
+ MIME_reader_jump_marker (&reader);
ignore = 1;
goto read_byte;
- } /* else of if (ch[0] == '-') */
-
- } /* if (ch[0] == '-') */
+ } /* else of if (ch[0] == '-') */
+
+ } /* if (ch[0] == '-') */
else
{
- MIME_reader_jump_marker(&reader);
+ MIME_reader_jump_marker (&reader);
ignore = 1;
goto read_byte;
- } /* else of if (ch[0] == '-') */
+ } /* else of if (ch[0] == '-') */
- } /* else of if (ch[0] == '\r') */
+ } /* else of if (ch[0] == '\r') */
- } /* if ch[0] == '\r' && !ignore */
+ } /* if ch[0] == '\r' && !ignore */
else
{
ignore = 0;
- MIME_buffer_add(&buffer, ch[0]);
+ MIME_buffer_add (&buffer, ch[0]);
- /* Chec if buffer is full*/
- if (MIME_buffer_is_full(&buffer))
+ /* Chec if buffer is full */
+ if (MIME_buffer_is_full (&buffer))
{
/* Invoke callback */
- callbacks->received_bytes_cb(
- callbacks_userdata, buffer.data, buffer.size);
-
+ callbacks->received_bytes_cb (callbacks_userdata, buffer.data,
+ buffer.size);
+
/* Empty the buffer */
- MIME_buffer_clear(&buffer);
+ MIME_buffer_clear (&buffer);
}
- } /* else of if ch[0] == '\r' && !ignore */
- } /* while (1) */
+ } /* else of if ch[0] == '\r' && !ignore */
+ } /* while (1) */
}
-MIME_read_status MIME_filereader_function(void* userdata,
- unsigned char* dest, int* size)
+MIME_read_status
+MIME_filereader_function (void *userdata, unsigned char *dest, int *size)
{
- FILE *f = (FILE*)userdata;
+ FILE *f = (FILE *) userdata;
- if (feof(f))
+ if (feof (f))
return MIME_READ_EOF;
- *size = fread(dest, 1, *size, f);
+ *size = fread (dest, 1, *size, f);
return MIME_READ_OK;
}
@@ -487,44 +492,45 @@ MIME_read_status MIME_filereader_function(void* userdata,
*/
typedef struct _mime_callback_data
{
- int part_id;
+ int part_id;
attachments_t *message;
- part_t *current_part;
- int buffer_capacity;
- char header[4064];
- char root_id[256];
- int header_index;
- int header_search;
- FILE *current_fd;
- char root_dir[512];
-}mime_callback_data_t;
+ part_t *current_part;
+ int buffer_capacity;
+ char header[4064];
+ char root_id[256];
+ int header_index;
+ int header_search;
+ FILE *current_fd;
+ char root_dir[512];
+} mime_callback_data_t;
-MIME_read_status mime_streamreader_function(void* userdata,
- unsigned char* dest, int* size)
+MIME_read_status
+mime_streamreader_function (void *userdata, unsigned char *dest, int *size)
{
- int readed=0;
- http_input_stream_t *in = (http_input_stream_t*)userdata;
+ int readed = 0;
+ http_input_stream_t *in = (http_input_stream_t *) userdata;
- if (!http_input_stream_is_ready(in))
+ if (!http_input_stream_is_ready (in))
return MIME_READ_EOF;
- readed = http_input_stream_read(in, dest, *size);
- /*
- log_info1("http_input_stream_read() returned 0");
- */
- if (readed == -1) {
- log_error4("[%d] %s():%s ", herror_code(in->err), herror_func(in->err), herror_message(in->err));
+ readed = http_input_stream_read (in, dest, *size);
+ /*
+ log_info1("http_input_stream_read() returned 0"); */
+ if (readed == -1)
+ {
+ log_error4 ("[%d] %s():%s ", herror_code (in->err), herror_func (in->err),
+ herror_message (in->err));
}
*size = readed;
- if (*size!=-1) {
- /*
- _log_str("reader.log", dest, *size);
- */
- return MIME_READ_OK;
- }
+ if (*size != -1)
+ {
+ /*
+ _log_str("reader.log", dest, *size); */
+ return MIME_READ_OK;
+ }
return MIME_READ_ERROR;
}
@@ -532,35 +538,35 @@ MIME_read_status mime_streamreader_function(void* userdata,
/*
Start Callback functions
*/
-static
-void _mime_parse_begin(void *data)
+static void
+_mime_parse_begin (void *data)
{
/* Nothing to do
mime_callback_data_t *cbdata = (mime_callback_data_t)data;
*/
- log_verbose2("Begin parse (%p)", data);
+ log_verbose2 ("Begin parse (%p)", data);
}
-static
-void _mime_parse_end(void *data)
+static void
+_mime_parse_end (void *data)
{
/* Nothing to do
mime_callback_data_t *cbdata = (mime_callback_data_t)data;
*/
- log_verbose2("End parse (%p)", data);
+ log_verbose2 ("End parse (%p)", data);
}
-static
-void _mime_part_begin(void *data)
+static void
+_mime_part_begin (void *data)
{
char buffer[1054];
- mime_callback_data_t *cbdata = (mime_callback_data_t*)data;
+ mime_callback_data_t *cbdata = (mime_callback_data_t *) data;
part_t *part;
- log_verbose2("Begin Part (%p)", data);
- part = (part_t *)malloc(sizeof(part_t));
+ log_verbose2 ("Begin Part (%p)", data);
+ part = (part_t *) malloc (sizeof (part_t));
part->next = NULL;
@@ -577,40 +583,40 @@ void _mime_part_begin(void *data)
cbdata->header_search = 0;
#ifdef WIN32
- sprintf(buffer, "%s\\mime_%p_%d.part", cbdata->root_dir,
- cbdata, cbdata->part_id++);
+ sprintf (buffer, "%s\\mime_%p_%d.part", cbdata->root_dir,
+ cbdata, cbdata->part_id++);
#else
- sprintf(buffer, "%s/mime_%p_%d.part", cbdata->root_dir,
- cbdata, cbdata->part_id++);
+ sprintf (buffer, "%s/mime_%p_%d.part", cbdata->root_dir,
+ cbdata, cbdata->part_id++);
#endif
/* log_info2("Creating FILE ('%s') deleteOnExit=1", buffer);*/
part->deleteOnExit = 1;
- cbdata->current_fd = fopen(buffer, "wb");
+ cbdata->current_fd = fopen (buffer, "wb");
if (cbdata->current_fd)
- strcpy(cbdata->current_part->filename, buffer);
+ strcpy (cbdata->current_part->filename, buffer);
else
- log_error2("Can not open file for write '%s'", buffer);
+ log_error2 ("Can not open file for write '%s'", buffer);
}
-static
-void _mime_part_end(void *data)
+static void
+_mime_part_end (void *data)
{
- mime_callback_data_t *cbdata = (mime_callback_data_t*)data;
- log_verbose2("End Part (%p)", data);
+ mime_callback_data_t *cbdata = (mime_callback_data_t *) data;
+ log_verbose2 ("End Part (%p)", data);
if (cbdata->current_fd)
{
- fclose(cbdata->current_fd);
+ fclose (cbdata->current_fd);
cbdata->current_fd = NULL;
}
}
-static
-hpair_t *_mime_process_header(char *buffer)
+static hpair_t *
+_mime_process_header (char *buffer)
{
- int i=0, c=0, proc_key, begin=0;
+ int i = 0, c = 0, proc_key, begin = 0;
hpair_t *first = NULL, *last = NULL;
char key[1054], value[1054];
@@ -620,22 +626,22 @@ hpair_t *_mime_process_header(char *buffer)
while (buffer[i] != '\0')
{
- if (buffer[i] == '\r' && buffer[i+1] == '\n')
+ if (buffer[i] == '\r' && buffer[i + 1] == '\n')
{
value[c] = '\0';
if (last)
{
- last->next = hpairnode_new(key, value, NULL);
- last = last->next;
+ last->next = hpairnode_new (key, value, NULL);
+ last = last->next;
}
else
{
- first = last = hpairnode_new(key, value, NULL);
+ first = last = hpairnode_new (key, value, NULL);
}
proc_key = 1;
c = 0;
i++;
- }
+ }
else if (buffer[i] == ':')
{
key[c] = '\0';
@@ -643,7 +649,7 @@ hpair_t *_mime_process_header(char *buffer)
begin = 0;
proc_key = 0;
}
- else
+ else
{
if (proc_key)
key[c++] = buffer[i];
@@ -661,19 +667,23 @@ hpair_t *_mime_process_header(char *buffer)
}
-static
-void _mime_received_bytes(void *data, const unsigned char* bytes, int size)
+static void
+_mime_received_bytes (void *data, const unsigned char *bytes, int size)
{
- int i=0;
+ int i = 0;
char *id, *type, *location;
- mime_callback_data_t *cbdata = (mime_callback_data_t*)data;
+ mime_callback_data_t *cbdata = (mime_callback_data_t *) data;
- if (!cbdata ) {
- log_error1("MIME transport error Called <received bytes> without initializing\n");
+ if (!cbdata)
+ {
+ log_error1
+ ("MIME transport error Called <received bytes> without initializing\n");
return;
}
- if (!cbdata->current_part) {
- log_error1("MIME transport error Called <received bytes> without initializing\n");
+ if (!cbdata->current_part)
+ {
+ log_error1
+ ("MIME transport error Called <received bytes> without initializing\n");
return;
}
/* log_verbose4("Received %d bytes (%p), header_search = %d",
@@ -682,7 +692,7 @@ void _mime_received_bytes(void *data, const unsigned char* bytes, int size)
if (cbdata->header_search < 4)
{
/* Find \r\n\r\n in bytes */
- for (i=0;i<size;i++)
+ for (i = 0; i < size; i++)
{
if (cbdata->header_search == 0)
{
@@ -728,25 +738,30 @@ void _mime_received_bytes(void *data, const unsigned char* bytes, int size)
cbdata->header[cbdata->header_index++] = '\n';
cbdata->header[cbdata->header_index++] = '\0';
cbdata->header_search = 4;
- cbdata->current_part->header = _mime_process_header(cbdata->header);
- hpairnode_dump_deep(cbdata->current_part->header);
+ cbdata->current_part->header =
+ _mime_process_header (cbdata->header);
+ hpairnode_dump_deep (cbdata->current_part->header);
/* set id */
- id = hpairnode_get(cbdata->current_part->header, HEADER_CONTENT_ID);
+ id =
+ hpairnode_get (cbdata->current_part->header, HEADER_CONTENT_ID);
if (id != NULL)
{
- strcpy(cbdata->current_part->id, id);
- if (!strcmp(id, cbdata->root_id))
+ strcpy (cbdata->current_part->id, id);
+ if (!strcmp (id, cbdata->root_id))
cbdata->message->root_part = cbdata->current_part;
}
- location = hpairnode_get(cbdata->current_part->header, HEADER_CONTENT_LOCATION);
+ location =
+ hpairnode_get (cbdata->current_part->header,
+ HEADER_CONTENT_LOCATION);
if (location != NULL)
{
- strcpy(cbdata->current_part->location, location);
+ strcpy (cbdata->current_part->location, location);
}
- type = hpairnode_get(cbdata->current_part->header, HEADER_CONTENT_TYPE);
+ type =
+ hpairnode_get (cbdata->current_part->header, HEADER_CONTENT_TYPE);
if (type != NULL)
{
- strcpy(cbdata->current_part->content_type, type);
+ strcpy (cbdata->current_part->content_type, type);
}
i++;
break;
@@ -761,17 +776,17 @@ void _mime_received_bytes(void *data, const unsigned char* bytes, int size)
}
}
/* TODO (#1#): Check for cbdata->header overflow */
-
- } /* for (i=0;i<size;i++) */
- } /* if (cbdata->header_search < 4) */
- if (i >= size-1)
+ } /* for (i=0;i<size;i++) */
+ } /* if (cbdata->header_search < 4) */
+
+ if (i >= size - 1)
return;
- /* Write remaining bytes into the file or buffer (if root)
- (buffer is disabled in this version) */
+ /* Write remaining bytes into the file or buffer (if root) (buffer is
+ disabled in this version) */
if (cbdata->current_fd)
- fwrite(&(bytes[i]), 1, size - i, cbdata->current_fd);
+ fwrite (&(bytes[i]), 1, size - i, cbdata->current_fd);
}
@@ -780,25 +795,25 @@ void _mime_received_bytes(void *data, const unsigned char* bytes, int size)
*/
attachments_t *
-mime_message_parse(http_input_stream_t *in, const char* root_id,
- const char* boundary, const char* dest_dir)
+mime_message_parse (http_input_stream_t * in, const char *root_id,
+ const char *boundary, const char *dest_dir)
{
MIME_parser_status status;
MIME_callbacks callbacks;
- attachments_t* message;
+ attachments_t *message;
- mime_callback_data_t *cbdata = (mime_callback_data_t*)
- malloc(sizeof(mime_callback_data_t));
+ mime_callback_data_t *cbdata = (mime_callback_data_t *)
+ malloc (sizeof (mime_callback_data_t));
cbdata->part_id = 100;
cbdata->buffer_capacity = 0;
- cbdata-> current_fd = NULL;
+ cbdata->current_fd = NULL;
cbdata->current_part = NULL;
cbdata->header_index = 0;
cbdata->header_search = 0;
- strcpy(cbdata->root_id, root_id);
- strcpy(cbdata->root_dir, dest_dir);
- message = (attachments_t*)malloc(sizeof(attachments_t));
+ strcpy (cbdata->root_id, root_id);
+ strcpy (cbdata->root_dir, dest_dir);
+ message = (attachments_t *) malloc (sizeof (attachments_t));
cbdata->message = message;
cbdata->message->parts = NULL;
cbdata->message->root_part = NULL;
@@ -809,42 +824,43 @@ mime_message_parse(http_input_stream_t *in, const char* root_id,
callbacks.part_end_cb = _mime_part_end;
callbacks.received_bytes_cb = _mime_received_bytes;
- status = MIME_parse(mime_streamreader_function,
- in, boundary, &callbacks, cbdata);
+ status = MIME_parse (mime_streamreader_function,
+ in, boundary, &callbacks, cbdata);
if (status == MIME_PARSER_OK)
{
- free(cbdata);
+ free (cbdata);
return message;
}
else
{
- log_error2("MIME parser error '%s'!",
- status == MIME_PARSER_READ_ERROR ? "read error" : "Incomplete message");
+ log_error2 ("MIME parser error '%s'!",
+ status ==
+ MIME_PARSER_READ_ERROR ? "read error" : "Incomplete message");
return NULL;
}
}
attachments_t *
-mime_message_parse_from_file(FILE *in, const char* root_id,
- const char* boundary, const char* dest_dir)
+mime_message_parse_from_file (FILE * in, const char *root_id,
+ const char *boundary, const char *dest_dir)
{
MIME_parser_status status;
MIME_callbacks callbacks;
- attachments_t* message;
+ attachments_t *message;
- mime_callback_data_t *cbdata = (mime_callback_data_t*)
- malloc(sizeof(mime_callback_data_t));
+ mime_callback_data_t *cbdata = (mime_callback_data_t *)
+ malloc (sizeof (mime_callback_data_t));
cbdata->part_id = 100;
cbdata->buffer_capacity = 0;
- cbdata-> current_fd = NULL;
+ cbdata->current_fd = NULL;
cbdata->current_part = NULL;
cbdata->header_index = 0;
cbdata->header_search = 0;
- strcpy(cbdata->root_id, root_id);
- strcpy(cbdata->root_dir, dest_dir);
- message = (attachments_t*)malloc(sizeof(attachments_t));
+ strcpy (cbdata->root_id, root_id);
+ strcpy (cbdata->root_dir, dest_dir);
+ message = (attachments_t *) malloc (sizeof (attachments_t));
cbdata->message = message;
cbdata->message->parts = NULL;
cbdata->message->root_part = NULL;
@@ -855,77 +871,82 @@ mime_message_parse_from_file(FILE *in, const char* root_id,
callbacks.part_end_cb = _mime_part_end;
callbacks.received_bytes_cb = _mime_received_bytes;
- status = MIME_parse(MIME_filereader_function,
- in, boundary, &callbacks, cbdata);
+ status = MIME_parse (MIME_filereader_function,
+ in, boundary, &callbacks, cbdata);
if (status == MIME_PARSER_OK)
{
- free(cbdata);
+ free (cbdata);
return message;
}
else
{
/* TODO (#1#): Free objects */
- log_error2("MIME parser error '%s'!",
- status == MIME_PARSER_READ_ERROR ? "general error" : "Incomplete message");
+ log_error2 ("MIME parser error '%s'!",
+ status ==
+ MIME_PARSER_READ_ERROR ? "general error" :
+ "Incomplete message");
return NULL;
}
}
-herror_t mime_get_attachments(content_type_t *ctype, http_input_stream_t *in, attachments_t **dest)
+herror_t
+mime_get_attachments (content_type_t * ctype, http_input_stream_t * in,
+ attachments_t ** dest)
{
/* MIME variables */
- attachments_t *mimeMessage;
- part_t *part, *tmp_part=NULL;
- char *boundary, *root_id;
+ attachments_t *mimeMessage;
+ part_t *part, *tmp_part = NULL;
+ char *boundary, *root_id;
/* Check for MIME message */
- if (!(ctype &&
- !strcmp(ctype->type, "multipart/related")))
- return herror_new("mime_get_attachments", MIME_ERROR_NOT_MIME_MESSAGE,
- "Not a MIME message '%s'", ctype->type);
+ if (!(ctype && !strcmp (ctype->type, "multipart/related")))
+ return herror_new ("mime_get_attachments", MIME_ERROR_NOT_MIME_MESSAGE,
+ "Not a MIME message '%s'", ctype->type);
- boundary = hpairnode_get(ctype->params, "boundary");
- root_id = hpairnode_get(ctype->params, "start");
+ boundary = hpairnode_get (ctype->params, "boundary");
+ root_id = hpairnode_get (ctype->params, "start");
if (boundary == NULL)
{
- /* TODO (#1#): Handle Error in http form */
- log_error1("'boundary' not set for multipart/related");
- return herror_new("mime_get_attachments", MIME_ERROR_NO_BOUNDARY_PARAM,
- "'boundary' not set for multipart/related");
+ /* TODO (#1#): Handle Error in http form */
+ log_error1 ("'boundary' not set for multipart/related");
+ return herror_new ("mime_get_attachments", MIME_ERROR_NO_BOUNDARY_PARAM,
+ "'boundary' not set for multipart/related");
}
if (root_id == NULL)
{
- /* TODO (#1#): Handle Error in http form */
- log_error1("'start' not set for multipart/related");
- return herror_new("mime_get_attachments", MIME_ERROR_NO_START_PARAM,
- "'start' not set for multipart/related");
+ /* TODO (#1#): Handle Error in http form */
+ log_error1 ("'start' not set for multipart/related");
+ return herror_new ("mime_get_attachments", MIME_ERROR_NO_START_PARAM,
+ "'start' not set for multipart/related");
}
- mimeMessage = mime_message_parse(in, root_id, boundary, hoption_get(HOPTION_TMP_DIR));
+ mimeMessage =
+ mime_message_parse (in, root_id, boundary, hoption_get (HOPTION_TMP_DIR));
if (mimeMessage == NULL)
{
- /* TODO (#1#): Handle Error in http form */
- log_error1("MIME Parse Error");
- return herror_new("mime_get_attachments", MIME_ERROR_PARSE_ERROR,
- "MIME Parse Error");
+ /* TODO (#1#): Handle Error in http form */
+ log_error1 ("MIME Parse Error");
+ return herror_new ("mime_get_attachments", MIME_ERROR_PARSE_ERROR,
+ "MIME Parse Error");
}
/* Find root */
if (!mimeMessage->root_part)
{
- attachments_free(mimeMessage);
- return herror_new("mime_get_attachments", MIME_ERROR_NO_ROOT_PART,
- "No root part found!");
+ attachments_free (mimeMessage);
+ return herror_new ("mime_get_attachments", MIME_ERROR_NO_ROOT_PART,
+ "No root part found!");
}
/* delete root_part from list */
part = mimeMessage->parts;
- while (part) {
+ while (part)
+ {
if (part == mimeMessage->root_part)
{
if (tmp_part)
@@ -941,5 +962,3 @@ herror_t mime_get_attachments(content_type_t *ctype, http_input_stream_t *in, at
*dest = mimeMessage;
return H_OK;
}
-
-
diff --git a/nanohttp/nanohttp-mime.h b/nanohttp/nanohttp-mime.h
index be2abfa..6b160ab 100755
--- a/nanohttp/nanohttp-mime.h
+++ b/nanohttp/nanohttp-mime.h
@@ -3,7 +3,7 @@
* | \/ | | | | \/ | | _/
* |_''_| |_| |_''_| |_'/ PARSER
*
-* $Id: nanohttp-mime.h,v 1.4 2004/11/02 23:09:26 snowdrop Exp $
+* $Id: nanohttp-mime.h,v 1.5 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -40,20 +40,9 @@
-herror_t mime_get_attachments(content_type_t *ctype,
- http_input_stream_t *in, attachments_t **dest);
+herror_t mime_get_attachments (content_type_t * ctype,
+ http_input_stream_t * in,
+ attachments_t ** dest);
#endif
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/nanohttp/nanohttp-request.c b/nanohttp/nanohttp-request.c
index 9f4fb8b..5f15e93 100755
--- a/nanohttp/nanohttp-request.c
+++ b/nanohttp/nanohttp-request.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: nanohttp-request.c,v 1.6 2005/12/19 14:06:16 snowdrop Exp $
+* $Id: nanohttp-request.c,v 1.7 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -34,253 +34,260 @@
/* request stuff */
-static
-hrequest_t *hrequest_new()
+static hrequest_t *
+hrequest_new ()
{
- hrequest_t * req = (hrequest_t *) malloc(sizeof(hrequest_t));
+ hrequest_t *req = (hrequest_t *) malloc (sizeof (hrequest_t));
- req->method = HTTP_REQUEST_GET;
- req->version = HTTP_1_1;
- req->query = NULL;
- req->header = NULL;
- req->in = NULL;
- req->attachments = NULL;
- req->content_type = NULL;
+ req->method = HTTP_REQUEST_GET;
+ req->version = HTTP_1_1;
+ req->query = NULL;
+ req->header = NULL;
+ req->in = NULL;
+ req->attachments = NULL;
+ req->content_type = NULL;
- return req;
+ return req;
}
-static
-hrequest_t *
-_hrequest_parse_header(char *data)
+static hrequest_t *
+_hrequest_parse_header (char *data)
{
- hrequest_t *req;
- hpair_t *hpair = NULL, *qpair = NULL, *tmppair = NULL;
-
- char *tmp;
- char *tmp2;
- char *saveptr;
- char *saveptr2;
- char *saveptr3;
- char *result;
- char *key;
- char *opt_key;
- char *opt_value;
- int firstline = 1;
-
- req = hrequest_new();
- tmp = data;
-
- for (;;) {
- result = (char *) strtok_r(tmp, "\r\n", &saveptr);
- tmp = saveptr;
-
- if (result == NULL)
- break;
-
- if (firstline) {
- firstline = 0;
- tmp2 = result;
-
- /* parse [GET|POST] [PATH] [SPEC] */
- key = (char *) strtok_r(tmp2, " ", &saveptr2);
-
- /* save method (get or post) */
- tmp2 = saveptr2;
- if (key != NULL) {
- if (!strcmp(key, "POST"))
- req->method = HTTP_REQUEST_POST;
- else
- req->method = HTTP_REQUEST_GET;
- }
- /* below is key the path and tmp2 the spec */
- key = (char *) strtok_r(tmp2, " ", &saveptr2);
-
- /* save version */
- tmp2 = saveptr2;
- if (tmp2 != NULL) {
- /*req->spec = (char *) malloc(strlen(tmp2) + 1);
- strcpy(req->spec, tmp2);
- */
- if (!strcmp(tmp2, "HTTP/1.0"))
- req-> version = HTTP_1_0;
- else
- req-> version = HTTP_1_1;
- }
- /*
- * parse and save path+query parse:
- * /path/of/target?key1=value1&key2=value2...
- */
-
- if (key != NULL) {
- tmp2 = key;
- key = (char *) strtok_r(tmp2, "?", &saveptr2);
- tmp2 = saveptr2;
-
- /* save path */
- /*req->path = (char *) malloc(strlen(key) + 1);*/
- strncpy(req->path, key, REQUEST_MAX_PATH_SIZE);
-
- /* parse options */
- for (;;) {
- key = (char *) strtok_r(tmp2, "&", &saveptr2);
- tmp2 = saveptr2;
-
- if (key == NULL)
- break;
-
- opt_key = (char *) strtok_r(key, "=", &saveptr3);
- opt_value = saveptr3;
-
- if (opt_value == NULL)
- opt_value = "";
-
- /* create option pair */
- if (opt_key != NULL) {
- tmppair = (hpair_t *) malloc(sizeof(hpair_t));
-
- if (req->query == NULL) {
- req->query = qpair = tmppair;
- } else {
- qpair->next = tmppair;
- qpair = tmppair;
- }
-
- /* fill hpairnode_t struct */
- qpair->next = NULL;
- qpair->key = (char *) malloc(strlen(opt_key) + 1);
- qpair->value = (char *) malloc(strlen(opt_value) + 1);
-
- strcpy(qpair->key, opt_key);
- strcpy(qpair->value, opt_value);
-
- }
- }
- }
- } else {
-
- /* parse "key: value" */
- /* tmp2 = result;
- key = (char *) strtok_r(tmp2, ": ", &saveptr2);
- value = saveptr2;*/
-
- /* create pair */
+ hrequest_t *req;
+ hpair_t *hpair = NULL, *qpair = NULL, *tmppair = NULL;
+
+ char *tmp;
+ char *tmp2;
+ char *saveptr;
+ char *saveptr2;
+ char *saveptr3;
+ char *result;
+ char *key;
+ char *opt_key;
+ char *opt_value;
+ int firstline = 1;
+
+ req = hrequest_new ();
+ tmp = data;
+
+ for (;;)
+ {
+ result = (char *) strtok_r (tmp, "\r\n", &saveptr);
+ tmp = saveptr;
+
+ if (result == NULL)
+ break;
+
+ if (firstline)
+ {
+ firstline = 0;
+ tmp2 = result;
+
+ /* parse [GET|POST] [PATH] [SPEC] */
+ key = (char *) strtok_r (tmp2, " ", &saveptr2);
+
+ /* save method (get or post) */
+ tmp2 = saveptr2;
+ if (key != NULL)
+ {
+ if (!strcmp (key, "POST"))
+ req->method = HTTP_REQUEST_POST;
+ else
+ req->method = HTTP_REQUEST_GET;
+ }
+ /* below is key the path and tmp2 the spec */
+ key = (char *) strtok_r (tmp2, " ", &saveptr2);
+
+ /* save version */
+ tmp2 = saveptr2;
+ if (tmp2 != NULL)
+ {
+ /* req->spec = (char *) malloc(strlen(tmp2) + 1); strcpy(req->spec,
+ tmp2); */
+ if (!strcmp (tmp2, "HTTP/1.0"))
+ req->version = HTTP_1_0;
+ else
+ req->version = HTTP_1_1;
+ }
+ /*
+ * parse and save path+query parse:
+ * /path/of/target?key1=value1&key2=value2...
+ */
+
+ if (key != NULL)
+ {
+ tmp2 = key;
+ key = (char *) strtok_r (tmp2, "?", &saveptr2);
+ tmp2 = saveptr2;
+
+ /* save path */
+ /* req->path = (char *) malloc(strlen(key) + 1); */
+ strncpy (req->path, key, REQUEST_MAX_PATH_SIZE);
+
+ /* parse options */
+ for (;;)
+ {
+ key = (char *) strtok_r (tmp2, "&", &saveptr2);
+ tmp2 = saveptr2;
+
+ if (key == NULL)
+ break;
+
+ opt_key = (char *) strtok_r (key, "=", &saveptr3);
+ opt_value = saveptr3;
+
+ if (opt_value == NULL)
+ opt_value = "";
+
+ /* create option pair */
+ if (opt_key != NULL)
+ {
+ tmppair = (hpair_t *) malloc (sizeof (hpair_t));
+
+ if (req->query == NULL)
+ {
+ req->query = qpair = tmppair;
+ }
+ else
+ {
+ qpair->next = tmppair;
+ qpair = tmppair;
+ }
+
+ /* fill hpairnode_t struct */
+ qpair->next = NULL;
+ qpair->key = (char *) malloc (strlen (opt_key) + 1);
+ qpair->value = (char *) malloc (strlen (opt_value) + 1);
+
+ strcpy (qpair->key, opt_key);
+ strcpy (qpair->value, opt_value);
+
+ }
+ }
+ }
+ }
+ else
+ {
+
+ /* parse "key: value" */
+ /* tmp2 = result; key = (char *) strtok_r(tmp2, ": ", &saveptr2); value
+ = saveptr2; */
+
+ /* create pair */
/* tmppair = (hpair_t *) malloc(sizeof(hpair_t));*/
- tmppair = hpairnode_parse(result, ":", NULL);
-
- if (req->header == NULL) {
- req->header = hpair = tmppair;
- } else {
- hpair->next = tmppair;
- hpair = tmppair;
- }
-
- /* fill pairnode_t struct */
- /*
- hpair->next = NULL;
- hpair->key = (char *) malloc(strlen(key) + 1);
- hpair->value = (char *) malloc(strlen(value) + 1);
-
- strcpy(hpair->key, key);
- strcpy(hpair->value, value);
- */
- }
- }
-
+ tmppair = hpairnode_parse (result, ":", NULL);
+
+ if (req->header == NULL)
+ {
+ req->header = hpair = tmppair;
+ }
+ else
+ {
+ hpair->next = tmppair;
+ hpair = tmppair;
+ }
+
+ /* fill pairnode_t struct */
+ /*
+ hpair->next = NULL; hpair->key = (char *) malloc(strlen(key) + 1);
+ hpair->value = (char *) malloc(strlen(value) + 1);
+
+ strcpy(hpair->key, key); strcpy(hpair->value, value); */
+ }
+ }
+
/* Check Content-type */
- tmp = hpairnode_get(req->header, HEADER_CONTENT_TYPE);
+ tmp = hpairnode_get (req->header, HEADER_CONTENT_TYPE);
if (tmp != NULL)
- req->content_type = content_type_new(tmp);
+ req->content_type = content_type_new (tmp);
- return req;
+ return req;
}
-void
-hrequest_free(hrequest_t * req)
+void
+hrequest_free (hrequest_t * req)
{
- if (req == NULL)
- return;
+ if (req == NULL)
+ return;
- hpairnode_free_deep(req->header);
- hpairnode_free_deep(req->query);
+ hpairnode_free_deep (req->header);
+ hpairnode_free_deep (req->query);
- if (req->in)
- http_input_stream_free(req->in);
+ if (req->in)
+ http_input_stream_free (req->in);
if (req->content_type)
- content_type_free(req->content_type);
+ content_type_free (req->content_type);
if (req->attachments)
- attachments_free(req->attachments);
+ attachments_free (req->attachments);
- free(req);
+ free (req);
}
herror_t
-hrequest_new_from_socket(hsocket_t sock, hrequest_t **out)
+hrequest_new_from_socket (hsocket_t sock, hrequest_t ** out)
{
- int i=0, readed;
- herror_t status;
- hrequest_t *req;
- char buffer[MAX_HEADER_SIZE+1];
- attachments_t *mimeMessage;
+ int i = 0, readed;
+ herror_t status;
+ hrequest_t *req;
+ char buffer[MAX_HEADER_SIZE + 1];
+ attachments_t *mimeMessage;
- memset(buffer, 0, MAX_HEADER_SIZE);
+ memset (buffer, 0, MAX_HEADER_SIZE);
/* Read header */
- while (i<MAX_HEADER_SIZE)
+ while (i < MAX_HEADER_SIZE)
{
- status = hsocket_read(sock, &(buffer[i]), 1, 1, &readed);
+ status = hsocket_read (sock, &(buffer[i]), 1, 1, &readed);
if (status != H_OK)
{
- if(herror_code(status) != HSOCKET_SSL_CLOSE){
- log_error1("Socket read error");
- }
- return status;
+ if (herror_code (status) != HSOCKET_SSL_CLOSE)
+ {
+ log_error1 ("Socket read error");
+ }
+ return status;
}
- buffer[i+1] = '\0'; /* for strmp */
+ buffer[i + 1] = '\0'; /* for strmp */
if (i > 3)
{
- if (!strcmp(&(buffer[i-1]), "\n\n") ||
- !strcmp(&(buffer[i-2]), "\n\r\n"))
- break;
+ if (!strcmp (&(buffer[i - 1]), "\n\n") ||
+ !strcmp (&(buffer[i - 2]), "\n\r\n"))
+ break;
}
i++;
}
/* Create response */
- req = _hrequest_parse_header(buffer);
+ req = _hrequest_parse_header (buffer);
/* Create input stream */
- req->in = http_input_stream_new(sock, req->header);
+ req->in = http_input_stream_new (sock, req->header);
/* Check for MIME message */
- if ((req->content_type &&
- !strcmp(req->content_type->type, "multipart/related")))
+ if ((req->content_type &&
+ !strcmp (req->content_type->type, "multipart/related")))
{
- status = mime_get_attachments(req->content_type, req->in, &mimeMessage);
+ status = mime_get_attachments (req->content_type, req->in, &mimeMessage);
if (status != H_OK)
{
/* TODO (#1#): Handle error */
- hrequest_free(req);
- return status;
+ hrequest_free (req);
+ return status;
}
else
{
req->attachments = mimeMessage;
- req->in = http_input_stream_new_from_file(mimeMessage->root_part->filename);
+ req->in =
+ http_input_stream_new_from_file (mimeMessage->root_part->filename);
}
}
-
+
*out = req;
return H_OK;
}
-
-
-
-
diff --git a/nanohttp/nanohttp-request.h b/nanohttp/nanohttp-request.h
index 8989247..e7b7b3e 100755
--- a/nanohttp/nanohttp-request.h
+++ b/nanohttp/nanohttp-request.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-request.h,v 1.2 2004/10/28 10:30:46 snowdrop Exp $
+ * $Id: nanohttp-request.h,v 1.3 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -21,8 +21,8 @@
*
* Email: ferhatayaz@yahoo.com
******************************************************************/
-#ifndef NANO_HTTP_REQUEST_H
-#define NANO_HTTP_REQUEST_H
+#ifndef NANO_HTTP_REQUEST_H
+#define NANO_HTTP_REQUEST_H
#include <nanohttp/nanohttp-stream.h>
#include <nanohttp/nanohttp-mime.h>
@@ -43,15 +43,9 @@ typedef struct hrequest
content_type_t *content_type;
attachments_t *attachments;
char root_part_id[150];
-}hrequest_t;
+} hrequest_t;
-herror_t hrequest_new_from_socket(hsocket_t sock, hrequest_t **out);
-void hrequest_free(hrequest_t *req);
+herror_t hrequest_new_from_socket (hsocket_t sock, hrequest_t ** out);
+void hrequest_free (hrequest_t * req);
#endif
-
-
-
-
-
-
diff --git a/nanohttp/nanohttp-response.c b/nanohttp/nanohttp-response.c
index 1447345..ee9e762 100755
--- a/nanohttp/nanohttp-response.c
+++ b/nanohttp/nanohttp-response.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: nanohttp-response.c,v 1.5 2005/05/27 19:28:15 snowdrop Exp $
+* $Id: nanohttp-response.c,v 1.6 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -31,196 +31,205 @@
#include <utils/alloc.h>
#endif
-static
-hresponse_t*
-hresponse_new()
+static hresponse_t *
+hresponse_new ()
{
- hresponse_t *res;
-
- /* create response object */
- res = (hresponse_t *) malloc(sizeof(hresponse_t));
- res->version = HTTP_1_1;
- res->errcode = -1;
- res->desc[0] = '\0';
- res->header = NULL;
- res->in = NULL;
- res->content_type = NULL;
- res->attachments = NULL;
- return res;
+ hresponse_t *res;
+
+ /* create response object */
+ res = (hresponse_t *) malloc (sizeof (hresponse_t));
+ res->version = HTTP_1_1;
+ res->errcode = -1;
+ res->desc[0] = '\0';
+ res->header = NULL;
+ res->in = NULL;
+ res->content_type = NULL;
+ res->attachments = NULL;
+ return res;
}
-static
-hresponse_t*
-_hresponse_parse_header(const char *buffer)
+static hresponse_t *
+_hresponse_parse_header (const char *buffer)
{
- hresponse_t *res;
- char *s1, *s2, *str;
-
- /* create response object */
- res = hresponse_new();
-
- /* *** parse spec *** */
- /* [HTTP/1.1 | 1.2] [CODE] [DESC] */
-
- /* stage 1: HTTP spec */
- str = (char *) strtok_r((char *) buffer, " ", &s2);
- s1 = s2;
- if (str == NULL) {
- log_error1("Parse error reading HTTP spec");
- return NULL;
- }
-
- if (!strcmp(str, "HTTP/1.0"))
- res->version = HTTP_1_0;
- else
- res->version = HTTP_1_1;
-
- /* stage 2: http code */
- str = (char *) strtok_r(s1, " ", &s2);
- s1 = s2;
- if (str == NULL) {
- log_error1("Parse error reading HTTP code");
- return NULL;
- }
- res->errcode = atoi(str);
-
- /* stage 3: description text */
- str = (char *) strtok_r(s1, "\r\n", &s2);
- s1 = s2;
- if (str == NULL) {
- log_error1("Parse error reading HTTP description");
- return NULL;
- }
+ hresponse_t *res;
+ char *s1, *s2, *str;
+
+ /* create response object */
+ res = hresponse_new ();
+
+ /* *** parse spec *** */
+ /* [HTTP/1.1 | 1.2] [CODE] [DESC] */
+
+ /* stage 1: HTTP spec */
+ str = (char *) strtok_r ((char *) buffer, " ", &s2);
+ s1 = s2;
+ if (str == NULL)
+ {
+ log_error1 ("Parse error reading HTTP spec");
+ return NULL;
+ }
+
+ if (!strcmp (str, "HTTP/1.0"))
+ res->version = HTTP_1_0;
+ else
+ res->version = HTTP_1_1;
+
+ /* stage 2: http code */
+ str = (char *) strtok_r (s1, " ", &s2);
+ s1 = s2;
+ if (str == NULL)
+ {
+ log_error1 ("Parse error reading HTTP code");
+ return NULL;
+ }
+ res->errcode = atoi (str);
+
+ /* stage 3: description text */
+ str = (char *) strtok_r (s1, "\r\n", &s2);
+ s1 = s2;
+ if (str == NULL)
+ {
+ log_error1 ("Parse error reading HTTP description");
+ return NULL;
+ }
/* res->desc = (char *) malloc(strlen(str) + 1);*/
- strncpy(res->desc, str, RESPONSE_MAX_DESC_SIZE);
- res->desc[strlen(str)] = '\0';
-
- /* *** parse header *** */
- /* [key]: [value] */
- for (;;) {
- str = strtok_r(s1, "\n", &s2);
- s1 = s2;
-
- /* check if header ends without body */
- if (str == NULL) {
- return res;
- }
- /* check also for end of header */
- if (!strcmp(str, "\r")) {
- break;
- }
- str[strlen(str) - 1] = '\0';
- res->header = hpairnode_parse(str, ":", res->header);
- }
+ strncpy (res->desc, str, RESPONSE_MAX_DESC_SIZE);
+ res->desc[strlen (str)] = '\0';
+
+ /* *** parse header *** */
+ /* [key]: [value] */
+ for (;;)
+ {
+ str = strtok_r (s1, "\n", &s2);
+ s1 = s2;
+
+ /* check if header ends without body */
+ if (str == NULL)
+ {
+ return res;
+ }
+ /* check also for end of header */
+ if (!strcmp (str, "\r"))
+ {
+ break;
+ }
+ str[strlen (str) - 1] = '\0';
+ res->header = hpairnode_parse (str, ":", res->header);
+ }
/* Check Content-type */
- str = hpairnode_get(res->header, HEADER_CONTENT_TYPE);
+ str = hpairnode_get (res->header, HEADER_CONTENT_TYPE);
if (str != NULL)
- res->content_type = content_type_new(str);
+ res->content_type = content_type_new (str);
- /* return response object */
- return res;
+ /* return response object */
+ return res;
}
herror_t
-hresponse_new_from_socket(hsocket_t sock, hresponse_t **out)
+hresponse_new_from_socket (hsocket_t sock, hresponse_t ** out)
{
- int i=0, readed;
- herror_t status;
- hresponse_t *res;
- attachments_t *mimeMessage;
- char buffer[MAX_HEADER_SIZE+1];
+ int i = 0, readed;
+ herror_t status;
+ hresponse_t *res;
+ attachments_t *mimeMessage;
+ char buffer[MAX_HEADER_SIZE + 1];
-read_header: /* for errorcode: 100 (continue) */
+read_header: /* for errorcode: 100 (continue) */
/* Read header */
- while (i<MAX_HEADER_SIZE)
+ while (i < MAX_HEADER_SIZE)
{
- status = hsocket_read(sock, &(buffer[i]), 1, 1, &readed);
+ status = hsocket_read (sock, &(buffer[i]), 1, 1, &readed);
if (status != H_OK)
{
- log_error1("Socket read error");
- return status;
+ log_error1 ("Socket read error");
+ return status;
}
- buffer[i+1] = '\0'; /* for strmp */
+ buffer[i + 1] = '\0'; /* for strmp */
if (i > 3)
{
- if (!strcmp(&(buffer[i-1]), "\n\n") ||
- !strcmp(&(buffer[i-2]), "\n\r\n"))
- break;
+ if (!strcmp (&(buffer[i - 1]), "\n\n") ||
+ !strcmp (&(buffer[i - 2]), "\n\r\n"))
+ break;
}
i++;
}
/* Create response */
- res = _hresponse_parse_header(buffer);
+ res = _hresponse_parse_header (buffer);
if (res == NULL)
{
- log_error1("Header parse error");
- return herror_new("hresponse_new_from_socket",
- GENERAL_HEADER_PARSE_ERROR, "Can not parse response header");
+ log_error1 ("Header parse error");
+ return herror_new ("hresponse_new_from_socket",
+ GENERAL_HEADER_PARSE_ERROR,
+ "Can not parse response header");
}
/* Chec for Errorcode: 100 (continue) */
- if (res->errcode == 100) {
- hresponse_free(res);
- i=0;
+ if (res->errcode == 100)
+ {
+ hresponse_free (res);
+ i = 0;
goto read_header;
}
/* Create input stream */
- res->in = http_input_stream_new(sock, res->header);
+ res->in = http_input_stream_new (sock, res->header);
/* Check for MIME message */
- if ((res->content_type &&
- !strcmp(res->content_type->type, "multipart/related")))
+ if ((res->content_type &&
+ !strcmp (res->content_type->type, "multipart/related")))
{
- status = mime_get_attachments(res->content_type, res->in, &mimeMessage);
+ status = mime_get_attachments (res->content_type, res->in, &mimeMessage);
if (status != H_OK)
{
/* TODO (#1#): Handle error */
- hresponse_free(res);
- return status;
+ hresponse_free (res);
+ return status;
}
else
{
res->attachments = mimeMessage;
- http_input_stream_free(res->in);
- res->in = http_input_stream_new_from_file(mimeMessage->root_part->filename);
- if (!res->in) {
- /* TODO (#1#): Handle error */
-
- } else {
- /*res->in->deleteOnExit = 1;*/
- }
+ http_input_stream_free (res->in);
+ res->in =
+ http_input_stream_new_from_file (mimeMessage->root_part->filename);
+ if (!res->in)
+ {
+ /* TODO (#1#): Handle error */
+
+ }
+ else
+ {
+ /* res->in->deleteOnExit = 1; */
+ }
}
}
- *out = res;
+ *out = res;
return H_OK;
}
-
-void
-hresponse_free(hresponse_t * res)
+
+void
+hresponse_free (hresponse_t * res)
{
- if (res == NULL)
- return;
+ if (res == NULL)
+ return;
if (res->header)
- hpairnode_free_deep(res->header);
+ hpairnode_free_deep (res->header);
if (res->in)
- http_input_stream_free(res->in);
+ http_input_stream_free (res->in);
if (res->content_type)
- content_type_free(res->content_type);
+ content_type_free (res->content_type);
if (res->attachments)
- attachments_free(res->attachments);
- free(res);
+ attachments_free (res->attachments);
+ free (res);
}
-
diff --git a/nanohttp/nanohttp-response.h b/nanohttp/nanohttp-response.h
index 63dd463..70e5348 100755
--- a/nanohttp/nanohttp-response.h
+++ b/nanohttp/nanohttp-response.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-response.h,v 1.2 2004/10/28 10:30:46 snowdrop Exp $
+ * $Id: nanohttp-response.h,v 1.3 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -21,8 +21,8 @@
*
* Email: ferhatayaz@yahoo.com
******************************************************************/
-#ifndef NANO_HTTP_RESPONSE_H
-#define NANO_HTTP_RESPONSE_H
+#ifndef NANO_HTTP_RESPONSE_H
+#define NANO_HTTP_RESPONSE_H
#include <nanohttp/nanohttp-stream.h>
#include <nanohttp/nanohttp-common.h>
@@ -41,17 +41,11 @@ typedef struct hresponse
content_type_t *content_type;
attachments_t *attachments;
char root_part_id[150];
-}hresponse_t;
+} hresponse_t;
-herror_t hresponse_new_from_socket(hsocket_t sock, hresponse_t **out);
-void hresponse_free(hresponse_t *res);
+herror_t hresponse_new_from_socket (hsocket_t sock, hresponse_t ** out);
+void hresponse_free (hresponse_t * res);
#endif
-
-
-
-
-
-
diff --git a/nanohttp/nanohttp-server.c b/nanohttp/nanohttp-server.c
index 0ff7d08..102c62a 100644
--- a/nanohttp/nanohttp-server.c
+++ b/nanohttp/nanohttp-server.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: nanohttp-server.c,v 1.37 2006/01/06 15:16:03 mrcsys Exp $
+* $Id: nanohttp-server.c,v 1.38 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -51,7 +51,7 @@
#else
-#include <process.h>
+#include <process.h>
#endif
@@ -62,15 +62,15 @@
typedef struct _conndata
{
- hsocket_t sock;
+ hsocket_t sock;
#ifdef WIN32
- HANDLE tid;
+ HANDLE tid;
#else
- pthread_t tid;
- pthread_attr_t attr;
+ pthread_t tid;
+ pthread_attr_t attr;
#endif
- time_t atime;
-}conndata_t;
+ time_t atime;
+} conndata_t;
/*
* -----------------------------------------------------
@@ -96,13 +96,13 @@ static conndata_t *_httpd_connection;
#ifdef WIN32
-static void WSAReaper(void *x);
+static void WSAReaper (void *x);
#else
sigset_t thrsigset;
#endif
#ifdef HAVE_SSL
-extern SSL_CTX* SSLctx;
+extern SSL_CTX *SSLctx;
#endif
@@ -118,9 +118,9 @@ httpd_init (int argc, char *argv[])
int i;
herror_t status;
- hoption_init_args(argc, argv);
+ hoption_init_args (argc, argv);
- status = hsocket_module_init ();
+ status = hsocket_module_init ();
if (status != H_OK)
return status;
@@ -159,19 +159,17 @@ httpd_init (int argc, char *argv[])
}
#ifdef WIN32
- /*
- if (_beginthread (WSAReaper, 0, NULL) == -1)
- {
- log_error1 ("Winsock reaper thread failed to start");
- return herror_new("httpd_init", THREAD_BEGIN_ERROR,
- "_beginthread() failed while starting WSAReaper");
- }
- */
+ /*
+ if (_beginthread (WSAReaper, 0, NULL) == -1) { log_error1 ("Winsock
+ reaper thread failed to start"); return herror_new("httpd_init",
+ THREAD_BEGIN_ERROR, "_beginthread() failed while starting WSAReaper");
+ } */
#endif
/* create socket */
status = hsocket_init (&_httpd_socket);
- if( status != H_OK ){
+ if (status != H_OK)
+ {
return status;
}
status = hsocket_bind (&_httpd_socket, _httpd_port);
@@ -226,10 +224,10 @@ httpd_services ()
* FUNCTION: httpd_services
* -----------------------------------------------------
*/
-static
-void hservice_free(hservice_t *service)
+static void
+hservice_free (hservice_t * service)
{
- free(service);
+ free (service);
}
/*
@@ -293,7 +291,7 @@ httpd_send_header (httpd_conn_t * res, int code, const char *text)
strcat (header, "\r\n");
/* set content-type */
- /*
+ /*
* if (res->content_type[0] == '\0') { strcat(header, "Content-Type:
* text/html\r\n"); } else { sprintf(buffer, "Content-Type: %s\r\n",
* res->content_type); strcat(header, buffer); }
@@ -303,7 +301,7 @@ httpd_send_header (httpd_conn_t * res, int code, const char *text)
strcat (header, "Server: Nano HTTPD library\r\n");
/* set _httpd_connection status */
- //strcat (header, "Connection: close\r\n");
+ // strcat (header, "Connection: close\r\n");
/* add pairs */
cur = res->header;
@@ -319,9 +317,9 @@ httpd_send_header (httpd_conn_t * res, int code, const char *text)
/* send header */
status = hsocket_nsend (res->sock, header, strlen (header));
- if (status != H_OK)
- return status;
-
+ if (status != H_OK)
+ return status;
+
res->out = http_output_stream_new (res->sock, res->header);
return H_OK;
}
@@ -339,7 +337,7 @@ httpd_send_internal_error (httpd_conn_t * conn, const char *errmsg)
#ifdef WIN32
#define snprintf(buffer, num, s1, s2) sprintf(buffer, s1,s2)
#endif
- snprintf(buflen, 5, "%d", strlen(buffer));
+ snprintf (buflen, 5, "%d", strlen (buffer));
httpd_set_header (conn, HEADER_CONTENT_LENGTH, buflen);
httpd_send_header (conn, 500, "INTERNAL");
return hsocket_nsend (conn->sock, buffer, strlen (buffer));
@@ -356,9 +354,11 @@ httpd_request_print (hrequest_t * req)
hpair_t *pair;
log_verbose1 ("++++++ Request +++++++++");
- log_verbose2 (" Method : '%s'", (req->method == HTTP_REQUEST_POST)?"POST":"GET");
+ log_verbose2 (" Method : '%s'",
+ (req->method == HTTP_REQUEST_POST) ? "POST" : "GET");
log_verbose2 (" Path : '%s'", req->path);
- log_verbose2 (" Spec : '%s'", (req->version==HTTP_1_0)?"HTTP/1.0":"HTTP/1.1");
+ log_verbose2 (" Spec : '%s'",
+ (req->version == HTTP_1_0) ? "HTTP/1.0" : "HTTP/1.1");
log_verbose1 (" Parsed query string :");
pair = req->query;
@@ -379,7 +379,8 @@ httpd_request_print (hrequest_t * req)
}
-httpd_conn_t *httpd_new(hsocket_t sock)
+httpd_conn_t *
+httpd_new (hsocket_t sock)
{
httpd_conn_t *conn = (httpd_conn_t *) malloc (sizeof (httpd_conn_t));
conn->sock = sock;
@@ -391,18 +392,21 @@ httpd_conn_t *httpd_new(hsocket_t sock)
}
-void httpd_free(httpd_conn_t *conn)
+void
+httpd_free (httpd_conn_t * conn)
{
if (conn->out != NULL)
- http_output_stream_free(conn->out);
+ http_output_stream_free (conn->out);
if (conn->header != NULL)
- hpairnode_free_deep(conn->header);
+ hpairnode_free_deep (conn->header);
- free(conn);
+ free (conn);
}
-void do_req_timeout(int signum){
+void
+do_req_timeout (int signum)
+{
/*
struct sigaction req_timeout;
memset(&req_timeout, 0, sizeof(&req_timeout));
@@ -410,12 +414,12 @@ void do_req_timeout(int signum){
sigaction(SIGALRM, &req_timeout, NULL);
*/
- // XXX this is not real pretty, is there a better way?
- log_verbose1("Thread timeout.");
+ // XXX this is not real pretty, is there a better way?
+ log_verbose1 ("Thread timeout.");
#ifdef WIN32
- _endthread ();
- #else
- pthread_exit(0);
+ _endthread ();
+#else
+ pthread_exit (0);
#endif
}
@@ -435,7 +439,7 @@ httpd_session_main (void *data)
conndata_t *conn = (conndata_t *) data;
const char *msg = "SESSION 1.0\n";
int len = strlen (msg);
- int done=0;
+ int done = 0;
char buffer[256]; /* temp buffer for recv() */
char header[4064]; /* received header */
hrequest_t *req = NULL; /* only for test */
@@ -448,14 +452,19 @@ httpd_session_main (void *data)
log_verbose1 ("starting httpd_session_main()");
#ifdef HAVE_SSL
- if( !SSLctx ){
- log_verbose1("Using HTTP");
- } else {
- log_verbose1("Using HTTPS");
- conn->sock.ssl = init_ssl(SSLctx, conn->sock.sock, SSL_SERVER);
+ if (!SSLctx)
+ {
+ log_verbose1 ("Using HTTP");
+ }
+ else
+ {
+ log_verbose1 ("Using HTTPS");
+ conn->sock.ssl = init_ssl (SSLctx, conn->sock.sock, SSL_SERVER);
hsocket_block (conn->sock, 0);
- if( conn->sock.ssl == NULL ){
- return herror_new("hsocket_accept", SSL_ERROR_INIT, "Unable to initialize SSL");
+ if (conn->sock.ssl == NULL)
+ {
+ return herror_new ("hsocket_accept", SSL_ERROR_INIT,
+ "Unable to initialize SSL");
}
}
#endif
@@ -463,69 +472,77 @@ httpd_session_main (void *data)
/* call the service */
/* req = hrequest_new_from_buffer (header);*/
- do{
- log_verbose1("starting HTTP request");
- rconn = httpd_new(conn->sock);
+ do
+ {
+ log_verbose1 ("starting HTTP request");
+ rconn = httpd_new (conn->sock);
- status = hrequest_new_from_socket (conn->sock, &req);
+ status = hrequest_new_from_socket (conn->sock, &req);
- if (status != H_OK)
+ if (status != H_OK)
+ {
+ if (herror_code (status) != HSOCKET_SSL_CLOSE)
{
- if(herror_code(status) != HSOCKET_SSL_CLOSE){
- httpd_send_internal_error (rconn, herror_message(status)/*"Request parse error!"*/);
- herror_release(status);
- }
- done=1;
+ httpd_send_internal_error (rconn, herror_message (status) /* "Request
+ parse
+ error!" */ );
+ herror_release (status);
}
- else
- {
- char *conn_str = hpairnode_get_ignore_case (req->header, HEADER_CONNECTION);
+ done = 1;
+ }
+ else
+ {
+ char *conn_str =
+ hpairnode_get_ignore_case (req->header, HEADER_CONNECTION);
#ifdef WIN32
#define strncasecmp(s1, s2, num) strncmp(s1, s2, num)
#endif
- if(conn_str && strncasecmp( conn_str, "close",5 ) == 0){
- done=1;
- }
- if(!done){
- done = req->version==HTTP_1_0?1:0;
- }
- httpd_request_print (req);
+ if (conn_str && strncasecmp (conn_str, "close", 5) == 0)
+ {
+ done = 1;
+ }
+ if (!done)
+ {
+ done = req->version == HTTP_1_0 ? 1 : 0;
+ }
+ httpd_request_print (req);
- service = httpd_find_service (req->path);
- if (service != NULL)
+ service = httpd_find_service (req->path);
+ if (service != NULL)
+ {
+ log_verbose2 ("service '%s' found", req->path);
+ if (service->func != NULL)
{
- log_verbose2 ("service '%s' found", req->path);
- if (service->func != NULL)
- {
- service->func (rconn, req);
- }
- else
- {
- sprintf (buffer,
- "service '%s' not registered properly (func == NULL)",
- req->path);
- log_verbose1 (buffer);
- httpd_send_internal_error (rconn, buffer);
- }
+ service->func (rconn, req);
}
else
{
- sprintf (buffer, "service '%s' not found", req->path);
+ sprintf (buffer,
+ "service '%s' not registered properly (func == NULL)",
+ req->path);
log_verbose1 (buffer);
httpd_send_internal_error (rconn, buffer);
}
-
- /* httpd_response_free(res); */
- /*hrequest_free (req);*/
}
- }while(!done);
+ else
+ {
+ sprintf (buffer, "service '%s' not found", req->path);
+ log_verbose1 (buffer);
+ httpd_send_internal_error (rconn, buffer);
+ }
+
+ /* httpd_response_free(res); */
+ /* hrequest_free (req); */
+ }
+ }
+ while (!done);
- hsocket_close(conn->sock);
- log_verbose1("Marking connection as available");
+ hsocket_close (conn->sock);
+ log_verbose1 ("Marking connection as available");
conn->sock.sock = 0;
- hrequest_free(req);
- httpd_free(rconn);
+ hrequest_free (req);
+ httpd_free (rconn);
#ifdef WIN32
CloseHandle ((HANDLE) conn->tid);
_endthread ();
@@ -567,10 +584,12 @@ httpd_set_header (httpd_conn_t * conn, const char *key, const char *value)
}
-void httpd_set_headers(httpd_conn_t *conn, hpair_t *header)
+void
+httpd_set_headers (httpd_conn_t * conn, hpair_t * header)
{
- while (header) {
- httpd_set_header(conn, header->key, header->value);
+ while (header)
+ {
+ httpd_set_header (conn, header->key, header->value);
header = header->next;
}
}
@@ -584,7 +603,7 @@ void httpd_set_headers(httpd_conn_t *conn, hpair_t *header)
BOOL WINAPI
httpd_term (DWORD sig)
{
- //log_debug2 ("Got signal %d", sig);
+ // log_debug2 ("Got signal %d", sig);
if (sig == _httpd_terminate_signal)
_httpd_run = 0;
return TRUE;
@@ -671,7 +690,7 @@ _httpd_start_thread (conndata_t * conn)
#ifdef PTHREAD_CREATE_DETACHED
pthread_attr_setdetachstate (&(conn->attr), PTHREAD_CREATE_DETACHED);
#endif
- pthread_sigmask(SIG_BLOCK, &thrsigset, NULL);
+ pthread_sigmask (SIG_BLOCK, &thrsigset, NULL);
err = pthread_create (&(conn->tid), &(conn->attr), httpd_session_main,
conn);
if (err)
@@ -704,8 +723,8 @@ httpd_run ()
timeout.tv_usec = 0;
#ifdef WIN32
#else
- sigemptyset(&thrsigset);
- sigaddset(&thrsigset, SIGALRM);
+ sigemptyset (&thrsigset);
+ sigaddset (&thrsigset, SIGALRM);
#endif
@@ -713,7 +732,7 @@ httpd_run ()
err = hsocket_listen (_httpd_socket);
if (err != H_OK)
{
- log_error2 ("httpd_run(): '%d'", herror_message(err));
+ log_error2 ("httpd_run(): '%d'", herror_message (err));
return err;
}
log_verbose2 ("listening to port '%d'", _httpd_port);
@@ -725,7 +744,7 @@ httpd_run ()
err = hsocket_block (_httpd_socket, 0);
if (err != H_OK)
{
- log_error2 ("httpd_run(): '%s'", herror_message(err));
+ log_error2 ("httpd_run(): '%s'", herror_message (err));
return err;
}
@@ -775,18 +794,20 @@ httpd_run ()
/* Accept a socket */
err = hsocket_accept (_httpd_socket, &(conn->sock));
- if (err != H_OK && herror_code(err) == SSL_ERROR_INIT) {
- hsocket_close(conn->sock);
+ if (err != H_OK && herror_code (err) == SSL_ERROR_INIT)
+ {
+ hsocket_close (conn->sock);
conn->sock.sock = -1;
#ifdef HAVE_SSL
conn->sock.ssl = NULL;
#endif
- log_error1(herror_message(err));
+ log_error1 (herror_message (err));
continue;
- } else if (err != H_OK)
+ }
+ else if (err != H_OK)
{
- log_error2 ("Can not accept socket: %s", herror_message(err));
- return err; /* this is hard core! */
+ log_error2 ("Can not accept socket: %s", herror_message (err));
+ return err; /* this is hard core! */
}
/* Now start a thread */
@@ -796,54 +817,65 @@ httpd_run ()
return 0;
}
-void httpd_destroy()
+void
+httpd_destroy ()
{
hservice_t *tmp, *cur = _httpd_services_head;
while (cur != NULL)
{
tmp = cur->next;
- hservice_free(cur);
+ hservice_free (cur);
cur = tmp;
}
- hsocket_module_destroy();
+ hsocket_module_destroy ();
}
#ifdef WIN32
-static
-void WSAReaper(void *x)
+static void
+WSAReaper (void *x)
{
- short int connections;
- short int i;
- char junk[10];
- int rc;
- time_t ctime;
-
- for (;;) {
- connections=0;
- ctime=time((time_t)0);
- for (i=0;i<_httpd_max_connections;i++) {
- if (_httpd_connection[i].tid==0) continue;
- GetExitCodeThread((HANDLE)_httpd_connection[i].tid,(PDWORD) &rc);
- if (rc!=STILL_ACTIVE) continue;
- connections++;
- if ((ctime-_httpd_connection[i].atime<_httpd_max_idle)||
- (_httpd_connection[i].atime==0)) continue;
- log_verbose3("Reaping socket %u from (runtime ~= %d seconds)",
- _httpd_connection[i].sock, ctime-_httpd_connection[i].atime);
- shutdown(_httpd_connection[i].sock.sock, 2);
- while (recv(_httpd_connection[i].sock.sock, junk, sizeof(junk), 0)>0) { };
- closesocket(_httpd_connection[i].sock.sock);
- _httpd_connection[i].sock.sock = 0;
- TerminateThread(_httpd_connection[i].tid, (DWORD)&rc);
- CloseHandle(_httpd_connection[i].tid);
- memset((char *)&_httpd_connection[i], 0, sizeof(_httpd_connection[i]));
- }
- Sleep(100);
- }
- return;
+ short int connections;
+ short int i;
+ char junk[10];
+ int rc;
+ time_t ctime;
+
+ for (;;)
+ {
+ connections = 0;
+ ctime = time ((time_t) 0);
+ for (i = 0; i < _httpd_max_connections; i++)
+ {
+ if (_httpd_connection[i].tid == 0)
+ continue;
+ GetExitCodeThread ((HANDLE) _httpd_connection[i].tid, (PDWORD) & rc);
+ if (rc != STILL_ACTIVE)
+ continue;
+ connections++;
+ if ((ctime - _httpd_connection[i].atime < _httpd_max_idle) ||
+ (_httpd_connection[i].atime == 0))
+ continue;
+ log_verbose3 ("Reaping socket %u from (runtime ~= %d seconds)",
+ _httpd_connection[i].sock,
+ ctime - _httpd_connection[i].atime);
+ shutdown (_httpd_connection[i].sock.sock, 2);
+ while (recv (_httpd_connection[i].sock.sock, junk, sizeof (junk), 0) >
+ 0)
+ {
+ };
+ closesocket (_httpd_connection[i].sock.sock);
+ _httpd_connection[i].sock.sock = 0;
+ TerminateThread (_httpd_connection[i].tid, (DWORD) & rc);
+ CloseHandle (_httpd_connection[i].tid);
+ memset ((char *) &_httpd_connection[i], 0,
+ sizeof (_httpd_connection[i]));
+ }
+ Sleep (100);
+ }
+ return;
}
#endif
@@ -888,7 +920,7 @@ httpd_get_postdata (httpd_conn_t * conn, hrequest_t * req, long *received,
log_error1 ("Not enough memory");
return NULL;
}
- if (http_input_stream_read(req->in, postdata, (int) content_length) > 0)
+ if (http_input_stream_read (req->in, postdata, (int) content_length) > 0)
{
*received = content_length;
postdata[content_length] = '\0';
@@ -928,14 +960,13 @@ httpd_mime_send_header (httpd_conn_t * conn,
char boundary[250];
/*
- Set Content-type
- Set multipart/related parameter
- type=..; start=.. ; start-info= ..; boundary=...
+ Set Content-type Set multipart/related parameter type=..; start=.. ;
+ start-info= ..; boundary=...
*/
- /*
- using sprintf instead of snprintf because visual c does not support snprintf
- */
+ /*
+ using sprintf instead of snprintf because visual c does not support
+ snprintf */
sprintf (buffer, "multipart/related;");
@@ -1023,8 +1054,8 @@ httpd_mime_send_file (httpd_conn_t * conn,
size_t size;
if (fd == NULL)
- return herror_new("httpd_mime_send_file", FILE_ERROR_OPEN,
- "Can not open file '%d'", filename);
+ return herror_new ("httpd_mime_send_file", FILE_ERROR_OPEN,
+ "Can not open file '%d'", filename);
status =
httpd_mime_next (conn, content_id, content_type, transfer_encoding);
@@ -1040,12 +1071,13 @@ httpd_mime_send_file (httpd_conn_t * conn,
if (size == -1)
{
fclose (fd);
- return herror_new("httpd_mime_send_file", FILE_ERROR_READ,
- "Can not read from file '%d'", filename);
+ return herror_new ("httpd_mime_send_file", FILE_ERROR_READ,
+ "Can not read from file '%d'", filename);
}
status = http_output_stream_write (conn->out, buffer, size);
- if (status != H_OK) {
+ if (status != H_OK)
+ {
fclose (fd);
return status;
}
diff --git a/nanohttp/nanohttp-server.h b/nanohttp/nanohttp-server.h
index f0550f8..101a4b7 100644
--- a/nanohttp/nanohttp-server.h
+++ b/nanohttp/nanohttp-server.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-server.h,v 1.9 2004/11/02 23:09:27 snowdrop Exp $
+ * $Id: nanohttp-server.h,v 1.10 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -21,8 +21,8 @@
*
* Email: ferhatayaz@yahoo.com
******************************************************************/
-#ifndef NANO_HTTP_SERVER_H
-#define NANO_HTTP_SERVER_H
+#ifndef NANO_HTTP_SERVER_H
+#define NANO_HTTP_SERVER_H
#include <nanohttp/nanohttp-common.h>
@@ -38,13 +38,13 @@ typedef struct httpd_conn
char content_type[25];
http_output_stream_t *out;
hpair_t *header;
-}httpd_conn_t;
+} httpd_conn_t;
/*
Service callback
*/
-typedef void (*httpd_service)(httpd_conn_t*, hrequest_t*);
+typedef void (*httpd_service) (httpd_conn_t *, hrequest_t *);
/*
@@ -55,25 +55,25 @@ typedef struct tag_hservice
char ctx[255];
httpd_service func;
struct tag_hservice *next;
-}hservice_t;
+} hservice_t;
/*
Begin httpd_* function set
*/
-herror_t httpd_init(int argc, char *argv[]);
-int httpd_register(const char* ctx, httpd_service service);
-herror_t httpd_run();
-void httpd_destroy();
+herror_t httpd_init (int argc, char *argv[]);
+int httpd_register (const char *ctx, httpd_service service);
+herror_t httpd_run ();
+void httpd_destroy ();
-hservice_t *httpd_services();
+hservice_t *httpd_services ();
-herror_t httpd_send_header(httpd_conn_t *res,
- int code, const char* text);
+herror_t httpd_send_header (httpd_conn_t * res, int code, const char *text);
-int httpd_set_header(httpd_conn_t *conn, const char *key, const char* value);
-void httpd_set_headers(httpd_conn_t *conn, hpair_t *header);
+int httpd_set_header (httpd_conn_t * conn, const char *key,
+ const char *value);
+void httpd_set_headers (httpd_conn_t * conn, hpair_t * header);
/*
unsigned char *httpd_get_postdata(httpd_conn_t *conn,
@@ -90,36 +90,36 @@ unsigned char *httpd_get_postdata(httpd_conn_t *conn,
Begin MIME multipart/related POST
Returns: HSOCKET_OK or error flag
*/
-herror_t httpd_mime_send_header(httpd_conn_t *conn,
- const char* related_start,
- const char* related_start_info,
- const char* related_type, int code, const char* text);
+herror_t httpd_mime_send_header (httpd_conn_t * conn,
+ const char *related_start,
+ const char *related_start_info,
+ const char *related_type, int code,
+ const char *text);
/**
Send boundary and part header and continue
with next part
*/
-herror_t httpd_mime_next(httpd_conn_t *conn,
- const char* content_id,
- const char* content_type,
- const char* transfer_encoding);
+herror_t httpd_mime_next (httpd_conn_t * conn,
+ const char *content_id,
+ const char *content_type,
+ const char *transfer_encoding);
/**
Send boundary and part header and continue
with next part
*/
-herror_t httpd_mime_send_file(httpd_conn_t *conn,
- const char* content_id,
- const char* content_type,
- const char* transfer_encoding,
- const char* filename);
+herror_t httpd_mime_send_file (httpd_conn_t * conn,
+ const char *content_id,
+ const char *content_type,
+ const char *transfer_encoding,
+ const char *filename);
/**
Finish MIME request
Returns: HSOCKET_OK or error flag
*/
-herror_t httpd_mime_end(httpd_conn_t *conn);
+herror_t httpd_mime_end (httpd_conn_t * conn);
#endif
-
diff --git a/nanohttp/nanohttp-socket.c b/nanohttp/nanohttp-socket.c
index 684585c..ee69561 100644
--- a/nanohttp/nanohttp-socket.c
+++ b/nanohttp/nanohttp-socket.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: nanohttp-socket.c,v 1.41 2006/01/06 16:17:36 snowdrop Exp $
+* $Id: nanohttp-socket.c,v 1.42 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -26,16 +26,16 @@
#include <nanohttp/nanohttp-ssl.h>
#ifdef WIN32
- #include "wsockcompat.h"
- #include <winsock2.h>
- #include <process.h>
-
- #ifndef __MINGW32__
- typedef int ssize_t;
- #endif
-
+#include "wsockcompat.h"
+#include <winsock2.h>
+#include <process.h>
+
+#ifndef __MINGW32__
+typedef int ssize_t;
+#endif
+
#else
- #include <fcntl.h>
+#include <fcntl.h>
#endif
#ifdef HAVE_CONFIG_H
@@ -78,7 +78,7 @@
#ifdef HAVE_SSL
-SSL_CTX* SSLctx = NULL;
+SSL_CTX *SSLctx = NULL;
char *SSLCert = NULL;
char *SSLPass = NULL;
char *SSLCA = NULL;
@@ -121,19 +121,22 @@ hsocket_module_destroy ()
FUNCTION: hsocket_init
----------------------------------------------------*/
herror_t
-hsocket_init (hsocket_t * sock )
+hsocket_init (hsocket_t * sock)
{
- log_verbose1("Starting hsocket init");
+ log_verbose1 ("Starting hsocket init");
/* just set the descriptor to -1 */
sock->sock = -1;
#ifdef HAVE_SSL
sock->ssl = NULL;
- if(SSLCert || SSLCertLess){
- log_verbose1("calling init ctx");
- SSLctx=initialize_ctx( SSLCert,SSLPass,SSLCA);
- if(SSLctx==NULL){
- return herror_new("hsocket_init", HSOCKET_ERROR_CONNECT, "Unable to initialize SSL CTX" );
- }
+ if (SSLCert || SSLCertLess)
+ {
+ log_verbose1 ("calling init ctx");
+ SSLctx = initialize_ctx (SSLCert, SSLPass, SSLCA);
+ if (SSLctx == NULL)
+ {
+ return herror_new ("hsocket_init", HSOCKET_ERROR_CONNECT,
+ "Unable to initialize SSL CTX");
+ }
}
#endif
return H_OK;
@@ -161,33 +164,40 @@ hsocket_open (hsocket_t * dsock, const char *hostname, int port)
sock.sock = socket (AF_INET, SOCK_STREAM, 0);
if (sock.sock <= 0)
- return herror_new("hsocket_open", HSOCKET_ERROR_CREATE, "Socket error: %d", errno);
+ return herror_new ("hsocket_open", HSOCKET_ERROR_CREATE,
+ "Socket error: %d", errno);
/* Get host data */
host = gethostbyname (hostname);
if (host == NULL)
- return herror_new("hsocket_open", HSOCKET_ERROR_GET_HOSTNAME, "Socket error: %d", errno);
+ return herror_new ("hsocket_open", HSOCKET_ERROR_GET_HOSTNAME,
+ "Socket error: %d", errno);
ip = inet_ntoa (*(struct in_addr *) *host->h_addr_list);
address.sin_addr.s_addr = inet_addr (ip);
/* set server addresss */
address.sin_family = host->h_addrtype;
- address.sin_port = htons((unsigned short)port);
+ address.sin_port = htons ((unsigned short) port);
/* connect to the server */
- if (connect (sock.sock, (struct sockaddr *) &address, sizeof (address)) != 0)
- return herror_new("hsocket_open", HSOCKET_ERROR_CONNECT, "Socket error: %d", errno);
+ if (connect (sock.sock, (struct sockaddr *) &address, sizeof (address)) !=
+ 0)
+ return herror_new ("hsocket_open", HSOCKET_ERROR_CONNECT,
+ "Socket error: %d", errno);
#ifdef HAVE_SSL
- if( !SSLctx ){
+ if (!SSLctx)
+ {
#endif
- log_verbose1("Using HTTP");
+ log_verbose1 ("Using HTTP");
dsock->sock = sock.sock;
#ifdef HAVE_SSL
- } else {
- log_verbose1("Using HTTPS");
- dsock->ssl = init_ssl(SSLctx, sock.sock, SSL_CLIENT);
+ }
+ else
+ {
+ log_verbose1 ("Using HTTPS");
+ dsock->ssl = init_ssl (SSLctx, sock.sock, SSL_CLIENT);
}
#endif
return H_OK;
@@ -201,28 +211,31 @@ hsocket_bind (hsocket_t * dsock, int port)
{
hsocket_t sock;
struct sockaddr_in addr;
- int opt=1;
+ int opt = 1;
/* create socket */
sock.sock = socket (AF_INET, SOCK_STREAM, 0);
if (sock.sock == -1)
{
log_error3 ("Can not create socket: '%s'", "Socket error: %d", errno);
- return herror_new("hsocket_bind", HSOCKET_ERROR_CREATE, "Socket error: %d", errno);
+ return herror_new ("hsocket_bind", HSOCKET_ERROR_CREATE,
+ "Socket error: %d", errno);
}
- setsockopt( sock.sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt) );
+ setsockopt (sock.sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof (opt));
/* bind socket */
addr.sin_family = AF_INET;
- addr.sin_port = htons ((unsigned short)port); /* short, network byte order */
+ addr.sin_port = htons ((unsigned short) port); /* short, network
+ byte order */
addr.sin_addr.s_addr = INADDR_ANY;
- memset (&(addr.sin_zero), '\0', 8); /* zero the rest of the
- * struct */
+ memset (&(addr.sin_zero), '\0', 8); /* zero the rest of the struct */
- if (bind (sock.sock, (struct sockaddr *) &addr, sizeof (struct sockaddr)) == -1)
+ if (bind (sock.sock, (struct sockaddr *) &addr, sizeof (struct sockaddr)) ==
+ -1)
{
log_error3 ("Can not bind: '%s'", "Socket error: %d", errno);
- return herror_new("hsocket_bind", HSOCKET_ERROR_BIND, "Socket error: %d", errno);
+ return herror_new ("hsocket_bind", HSOCKET_ERROR_BIND, "Socket error: %d",
+ errno);
}
dsock->sock = sock.sock;
return H_OK;
@@ -239,28 +252,34 @@ hsocket_accept (hsocket_t sock, hsocket_t * dest)
struct sockaddr_in addr;
if (sock.sock <= 0)
- return herror_new("hsocket_accept", HSOCKET_ERROR_NOT_INITIALIZED,
- "Called hsocket_listen() before initializing!");
+ return herror_new ("hsocket_accept", HSOCKET_ERROR_NOT_INITIALIZED,
+ "Called hsocket_listen() before initializing!");
asize = sizeof (struct sockaddr_in);
#ifdef WIN32
while (1)
{
sockfd.sock = accept (sock.sock, (struct sockaddr *) &addr, &asize);
- if (sockfd.sock == INVALID_SOCKET) {
+ if (sockfd.sock == INVALID_SOCKET)
+ {
if (WSAGetLastError () != WSAEWOULDBLOCK)
- return herror_new("hsocket_accept", HSOCKET_ERROR_ACCEPT, "Socket error: %d", errno);
- } else {
+ return herror_new ("hsocket_accept", HSOCKET_ERROR_ACCEPT,
+ "Socket error: %d", errno);
+ }
+ else
+ {
break;
}
}
-#else
+#else
/* TODO (#1#): why not a loop like in win32? */
sockfd.sock = accept (sock.sock, (struct sockaddr *) &addr, &asize);
- if (sockfd.sock == -1) {
- return herror_new("hsocket_accept", HSOCKET_ERROR_ACCEPT, "Socket error: %d", errno);
+ if (sockfd.sock == -1)
+ {
+ return herror_new ("hsocket_accept", HSOCKET_ERROR_ACCEPT,
+ "Socket error: %d", errno);
}
-#endif
+#endif
/* TODO (#1#): Write to access.log file */
log_verbose3 ("accept new socket (%d) from '%s'", sockfd.sock,
@@ -277,21 +296,22 @@ herror_t
hsocket_listen (hsocket_t sock)
{
if (sock.sock <= 0)
- return herror_new("hsocket_listen", HSOCKET_ERROR_NOT_INITIALIZED,
- "Called hsocket_listen() before initializing!");
+ return herror_new ("hsocket_listen", HSOCKET_ERROR_NOT_INITIALIZED,
+ "Called hsocket_listen() before initializing!");
if (listen (sock.sock, 15) == -1)
{
log_error3 ("Can not listen: '%s'", "Socket error: %d", errno);
- return herror_new("hsocket_listen", HSOCKET_ERROR_LISTEN, "Socket error: %d", errno);
+ return herror_new ("hsocket_listen", HSOCKET_ERROR_LISTEN,
+ "Socket error: %d", errno);
}
return H_OK;
}
#if 0
-static
-void _hsocket_wait_until_receive(hsocket_t sock)
+static void
+_hsocket_wait_until_receive (hsocket_t sock)
{
fd_set fds;
struct timeval timeout;
@@ -300,15 +320,15 @@ void _hsocket_wait_until_receive(hsocket_t sock)
timeout.tv_sec = 1;
timeout.tv_usec = 0;
- while (1)
+ while (1)
{
log_verbose1 ("waiting until receive mode");
/* zero and set file descriptior */
FD_ZERO (&fds);
FD_SET (sock, &fds);
-
+
/* select socket descriptor */
- switch (select (sock + 1, &fds, NULL, NULL, &timeout))
+ switch (select (sock + 1, &fds, NULL, NULL, &timeout))
{
case 0:
/* descriptor is not ready */
@@ -344,31 +364,40 @@ hsocket_close (hsocket_t sock)
_linger.l_linger = 30000;
setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char*)&_linger, sizeof(struct linger));
*/
-
+
#ifdef WIN32
- /*shutdown(sock,SD_RECEIVE);*/
-
+ /* shutdown(sock,SD_RECEIVE); */
+
+
+ shutdown (sock.sock, SD_SEND);
+ while (recv (sock.sock, junk, sizeof (junk), 0) > 0)
+ {
+ };
+ closesocket (sock.sock);
- shutdown(sock.sock, SD_SEND);
- while (recv(sock.sock, junk, sizeof(junk), 0)>0) { };
- closesocket(sock.sock);
-
#else
/* XXX m. campbell - It seems like the while loop here needs this */
- fcntl( sock.sock, F_SETFL, O_NONBLOCK);
+ fcntl (sock.sock, F_SETFL, O_NONBLOCK);
#ifdef HAVE_SSL
- if( sock.ssl ){
- log_verbose1("Closing SSL");
- ssl_cleanup(sock.ssl);
- shutdown(sock.sock, SHUT_RDWR);
- while (recv(sock.sock, junk, sizeof(junk), 0)>0) { };
+ if (sock.ssl)
+ {
+ log_verbose1 ("Closing SSL");
+ ssl_cleanup (sock.ssl);
+ shutdown (sock.sock, SHUT_RDWR);
+ while (recv (sock.sock, junk, sizeof (junk), 0) > 0)
+ {
+ };
close (sock.sock);
- }else {
+ }
+ else
+ {
#endif
- shutdown(sock.sock, SHUT_RDWR);
- while (recv(sock.sock, junk, sizeof(junk), 0)>0) { };
- close (sock.sock);
+ shutdown (sock.sock, SHUT_RDWR);
+ while (recv (sock.sock, junk, sizeof (junk), 0) > 0)
+ {
+ };
+ close (sock.sock);
#ifdef HAVE_SSL
}
#endif
@@ -377,70 +406,80 @@ hsocket_close (hsocket_t sock)
}
#if 0
-static int _test_send_to_file(const char* filename, const byte_t* bytes,int n)
+static int
+_test_send_to_file (const char *filename, const byte_t * bytes, int n)
{
- int size;
- FILE *f = fopen(filename, "ab");
- if (!f) f = fopen(filename, "wb");
- size= fwrite(bytes, 1, n, f);
- fclose(f);
- return size;
+ int size;
+ FILE *f = fopen (filename, "ab");
+ if (!f)
+ f = fopen (filename, "wb");
+ size = fwrite (bytes, 1, n, f);
+ fclose (f);
+ return size;
}
#endif
/*--------------------------------------------------
FUNCTION: hsocket_send
----------------------------------------------------*/
herror_t
-hsocket_nsend (hsocket_t sock, const byte_t *bytes, int n)
+hsocket_nsend (hsocket_t sock, const byte_t * bytes, int n)
{
int size;
- int total=0;
+ int total = 0;
- log_verbose1( "Starting to send" );
+ log_verbose1 ("Starting to send");
#ifdef HAVE_SSL
if (sock.sock <= 0 && !sock.ssl)
#else
if (sock.sock <= 0)
#endif
- return herror_new("hsocket_nsend", HSOCKET_ERROR_NOT_INITIALIZED,
- "Called hsocket_listen() before initializing!");
+ return herror_new ("hsocket_nsend", HSOCKET_ERROR_NOT_INITIALIZED,
+ "Called hsocket_listen() before initializing!");
- //log_verbose2( "SENDING %s", bytes );
+ // log_verbose2( "SENDING %s", bytes );
/* TODO (#1#): check return value and send again until n bytes sent */
while (1)
{
#ifdef HAVE_SSL
- if(sock.ssl){
- size = SSL_write(sock.ssl, bytes + total, n);
- } else {
+ if (sock.ssl)
+ {
+ size = SSL_write (sock.ssl, bytes + total, n);
+ }
+ else
+ {
#endif
- size = send((int) sock.sock, bytes + total, n, 0);
+ size = send ((int) sock.sock, bytes + total, n, 0);
#ifdef HAVE_SSL
}
#endif
- log_verbose2("Sent %d", size );
- /* size = _test_send_to_file(filename, bytes, n);*/
+ log_verbose2 ("Sent %d", size);
+ /* size = _test_send_to_file(filename, bytes, n); */
#ifdef WIN32
if (size == INVALID_SOCKET)
- if (WSAGetLastError () == WSAEWOULDBLOCK)
- continue;
- else
- return herror_new("hsocket_nsend", HSOCKET_ERROR_SEND, "Socket error: %d", errno);
+ if (WSAGetLastError () == WSAEWOULDBLOCK)
+ continue;
+ else
+ return herror_new ("hsocket_nsend", HSOCKET_ERROR_SEND,
+ "Socket error: %d", errno);
#else
- if (size == -1){
+ if (size == -1)
+ {
#ifdef HAVE_SSL
- if(sock.ssl){
- log_error1("Send error");
- log_ssl_error(sock.ssl, size);
- }
+ if (sock.ssl)
+ {
+ log_error1 ("Send error");
+ log_ssl_error (sock.ssl, size);
+ }
#endif
- return herror_new("hsocket_nsend", HSOCKET_ERROR_SEND, "Socket error: %d", errno);
+ return herror_new ("hsocket_nsend", HSOCKET_ERROR_SEND,
+ "Socket error: %d", errno);
}
#endif
n -= size;
- total += size;
- if (n<=0) break;
+ total += size;
+ if (n <= 0)
+ break;
}
return H_OK;
}
@@ -458,7 +497,8 @@ hsocket_send (hsocket_t sock, const char *str)
return: -1 is error. read bytes otherwise
*/
herror_t
-hsocket_read (hsocket_t sock, byte_t *buffer, int total, int force, int *received)
+hsocket_read (hsocket_t sock, byte_t * buffer, int total, int force,
+ int *received)
{
int status;
int totalRead;
@@ -469,72 +509,81 @@ hsocket_read (hsocket_t sock, byte_t *buffer, int total, int force, int *receive
/*
log_verbose3("Entering hsocket_read(total=%d,force=%d)", total, force);
*/
- do {
+ do
+ {
#ifdef HAVE_SSL
- if(sock.ssl){
- struct timeval timeout;
- int i=0;
- fd_set fds;
- FD_ZERO (&fds);
- FD_SET (sock.sock, &fds);
- timeout.tv_sec = 10;
- timeout.tv_usec = 0;
+ if (sock.ssl)
+ {
+ struct timeval timeout;
+ int i = 0;
+ fd_set fds;
+ FD_ZERO (&fds);
+ FD_SET (sock.sock, &fds);
+ timeout.tv_sec = 10;
+ timeout.tv_usec = 0;
#ifdef WIN32
#else
- fcntl( sock.sock, F_SETFL, O_NONBLOCK);
-#endif
- // log_verbose1("START READ LOOP");
- //do{
- //log_verbose2("DEBUG A %d",i);
- status = SSL_read(sock.ssl, &buffer[totalRead], total - totalRead);
- if(status < 1){
- int ret = select (sock.sock + 1, &fds, NULL, NULL, &timeout);
- //log_verbose2("DEBUG %d",ret);
+ fcntl (sock.sock, F_SETFL, O_NONBLOCK);
+#endif
+ // log_verbose1("START READ LOOP");
+ // do{
+ // log_verbose2("DEBUG A %d",i);
+ status = SSL_read (sock.ssl, &buffer[totalRead], total - totalRead);
+ if (status < 1)
+ {
+ int ret = select (sock.sock + 1, &fds, NULL, NULL, &timeout);
+ // log_verbose2("DEBUG %d",ret);
#ifdef WIN32
- if (ret == SOCKET_ERROR)
- {
- wsa_error = WSAGetLastError();
- log_error2("WSAGetLastError()=%d", wsa_error);
- return herror_new("hsocket_read", HSOCKET_ERROR_RECEIVE, "Socket error: %d", errno);
-
- }
-#endif
- if(ret==0){
- log_verbose1("Socket timeout");
- return herror_new("hsocket_read", HSOCKET_SSL_CLOSE, "Timeout");
- } else {
- //log_verbose1("DEBUG C");
- status = SSL_read(sock.ssl, &buffer[totalRead], total - totalRead);
- }
- //log_verbose3("DEBUG D char: %d status: %d",
- // buffer[totalRead], SSL_get_error(sock.ssl, status));
+ if (ret == SOCKET_ERROR)
+ {
+ wsa_error = WSAGetLastError ();
+ log_error2 ("WSAGetLastError()=%d", wsa_error);
+ return herror_new ("hsocket_read", HSOCKET_ERROR_RECEIVE,
+ "Socket error: %d", errno);
+
+ }
+#endif
+ if (ret == 0)
+ {
+ log_verbose1 ("Socket timeout");
+ return herror_new ("hsocket_read", HSOCKET_SSL_CLOSE, "Timeout");
+ }
+ else
+ {
+ // log_verbose1("DEBUG C");
+ status = SSL_read (sock.ssl, &buffer[totalRead], total - totalRead);
}
- //} while( SSL_get_error(sock.ssl, status) == SSL_ERROR_WANT_READ);
+ // log_verbose3("DEBUG D char: %d status: %d",
+ // buffer[totalRead], SSL_get_error(sock.ssl, status));
+ }
+ // } while( SSL_get_error(sock.ssl, status) == SSL_ERROR_WANT_READ);
#ifdef WIN32
#else
- fcntl( sock.sock, F_SETFL, 0);
+ fcntl (sock.sock, F_SETFL, 0);
#endif
- } else {
+ }
+ else
+ {
#else // HAVE_SSL
{
-#endif //HAVE_SSL
- status = recv(sock.sock, &buffer[totalRead], total - totalRead, 0);
+#endif // HAVE_SSL
+ status = recv (sock.sock, &buffer[totalRead], total - totalRead, 0);
#ifdef WIN32
- if (status == INVALID_SOCKET)
+ if (status == INVALID_SOCKET)
+ {
+ wsa_error = WSAGetLastError ();
+ switch (wsa_error)
{
- wsa_error = WSAGetLastError();
- switch (wsa_error)
- {
- case WSAEWOULDBLOCK:
- /* case WSAEALREADY:
- case WSAEINPROGRESS: */
- continue;
- default:
- log_error2("WSAGetLastError()=%d", wsa_error);
- return herror_new("hsocket_read", HSOCKET_ERROR_RECEIVE, "Socket error: %d", errno);
- }
+ case WSAEWOULDBLOCK:
+ /* case WSAEALREADY: case WSAEINPROGRESS: */
+ continue;
+ default:
+ log_error2 ("WSAGetLastError()=%d", wsa_error);
+ return herror_new ("hsocket_read", HSOCKET_ERROR_RECEIVE,
+ "Socket error: %d", errno);
}
+ }
}
#else
}
@@ -548,66 +597,75 @@ hsocket_read (hsocket_t sock, byte_t *buffer, int total, int force, int *receive
*/
#ifdef HAVE_SSL
- if( sock.ssl && status < 1 ){
+ if (sock.ssl && status < 1)
+ {
- // XXX I'm not sure this err_syscall is right here...
- if( SSL_get_shutdown( sock.ssl ) == SSL_RECEIVED_SHUTDOWN ||
- SSL_get_error(sock.ssl, status) == SSL_ERROR_SYSCALL){
- *received = NULL;;
- return herror_new("hsocket_read", HSOCKET_SSL_CLOSE, "SSL Closed");
- }
- log_error2("Read error (%d)", status);
- log_ssl_error( sock.ssl, status );
- return herror_new("hsocket_read", HSOCKET_ERROR_RECEIVE, "SSL Error");
+ // XXX I'm not sure this err_syscall is right here...
+ if (SSL_get_shutdown (sock.ssl) == SSL_RECEIVED_SHUTDOWN ||
+ SSL_get_error (sock.ssl, status) == SSL_ERROR_SYSCALL)
+ {
+ *received = NULL;;
+ return herror_new ("hsocket_read", HSOCKET_SSL_CLOSE, "SSL Closed");
+ }
+ log_error2 ("Read error (%d)", status);
+ log_ssl_error (sock.ssl, status);
+ return herror_new ("hsocket_read", HSOCKET_ERROR_RECEIVE, "SSL Error");
}
#endif
if (status == -1)
- return herror_new("hsocket_read", HSOCKET_ERROR_RECEIVE, "Socket error: %d", errno);
-#endif
-
- if (!force) {
- *received = status;
- /*
- log_verbose3("Leaving !force (received=%d)(status=%d)", *received, status);
- */
- return H_OK;
+ return herror_new ("hsocket_read", HSOCKET_ERROR_RECEIVE,
+ "Socket error: %d", errno);
+#endif
+
+ if (!force)
+ {
+ *received = status;
+ /*
+ log_verbose3("Leaving !force (received=%d)(status=%d)", *received,
+ status); */
+ return H_OK;
}
-
+
totalRead += status;
- if (totalRead == total) {
- *received = totalRead;
- /*
- log_verbose4("Leaving totalRead == total (received=%d)(status=%d)(totalRead=%d)", *received, status, totalRead);
- */
- return H_OK;
+ if (totalRead == total)
+ {
+ *received = totalRead;
+ /*
+ log_verbose4("Leaving totalRead == total
+ (received=%d)(status=%d)(totalRead=%d)", *received, status,
+ totalRead); */
+ return H_OK;
}
- } while (1);
+ }
+ while (1);
}
herror_t
-hsocket_block(hsocket_t sock, int block)
+hsocket_block (hsocket_t sock, int block)
{
#ifdef WIN32
unsigned long iMode;
#endif
if (sock.sock <= 0)
- return herror_new("hsocket_block", HSOCKET_ERROR_NOT_INITIALIZED,
- "Called hsocket_listen() before initializing!");
+ return herror_new ("hsocket_block", HSOCKET_ERROR_NOT_INITIALIZED,
+ "Called hsocket_listen() before initializing!");
#ifdef WIN32
/*#define HSOCKET_BLOCKMODE 0
#define HSOCKET_NONBLOCKMODE 1
*/
- iMode = (block==0)?1:0; /* Non block mode */
- if (ioctlsocket (sock.sock, FIONBIO, (u_long FAR *) & iMode) == INVALID_SOCKET)
+ iMode = (block == 0) ? 1 : 0; /* Non block mode */
+ if (ioctlsocket (sock.sock, FIONBIO, (u_long FAR *) & iMode) ==
+ INVALID_SOCKET)
{
- int err = WSAGetLastError();
+ int err = WSAGetLastError ();
log_error2 ("ioctlsocket error %d", err);
- return herror_new("hsocket_block", HSOCKET_ERROR_IOCTL, "Socket error: %d", err);
+ return herror_new ("hsocket_block", HSOCKET_ERROR_IOCTL,
+ "Socket error: %d", err);
}
#else /* fcntl(sock, F_SETFL, O_NONBLOCK); */
/* TODO (#1#): check for *nix the non blocking sockets */
@@ -615,5 +673,3 @@ hsocket_block(hsocket_t sock, int block)
#endif
return H_OK;
}
-
-
diff --git a/nanohttp/nanohttp-socket.h b/nanohttp/nanohttp-socket.h
index 7410690..68f6c5b 100644
--- a/nanohttp/nanohttp-socket.h
+++ b/nanohttp/nanohttp-socket.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-socket.h,v 1.18 2006/01/06 15:16:03 mrcsys Exp $
+ * $Id: nanohttp-socket.h,v 1.19 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -21,8 +21,8 @@
*
* Email: ayaz@jprogrammer.net
******************************************************************/
-#ifndef NANO_HTTP_SOCKET_H
-#define NANO_HTTP_SOCKET_H
+#ifndef NANO_HTTP_SOCKET_H
+#define NANO_HTTP_SOCKET_H
#include <nanohttp/nanohttp-common.h>
@@ -33,25 +33,27 @@
#endif
#ifdef WIN32
- #include <winsock2.h>
+#include <winsock2.h>
#endif
#ifdef WIN32
- typedef struct hsocket_t {
-#ifdef HAVE_SSL
- SSL *ssl;
+typedef struct hsocket_t
+{
+#ifdef HAVE_SSL
+ SSL *ssl;
#endif
- SOCKET sock;
- } hsocket_t;
- typedef int socklen_t;
+ SOCKET sock;
+} hsocket_t;
+typedef int socklen_t;
#else
- typedef struct hsocket_t {
+typedef struct hsocket_t
+{
#ifdef HAVE_SSL
- SSL *ssl;
+ SSL *ssl;
#endif
- int sock;
- } hsocket_t;
+ int sock;
+} hsocket_t;
#endif
@@ -62,14 +64,14 @@
@returns This function should always return H_OK.
*/
-herror_t hsocket_module_init();
+herror_t hsocket_module_init ();
/**
Destroys the socket modul. This should be called after
finishing an application.
*/
-void hsocket_module_destroy();
+void hsocket_module_destroy ();
/**
@@ -80,7 +82,7 @@ void hsocket_module_destroy();
@returns This function should always return H_OK.
*/
-herror_t hsocket_init(hsocket_t *sock );
+herror_t hsocket_init (hsocket_t * sock);
/**
@@ -88,7 +90,7 @@ herror_t hsocket_init(hsocket_t *sock );
@param sock the socket to destroy
*/
-void hsocket_free(hsocket_t sock);
+void hsocket_free (hsocket_t sock);
/**
@@ -104,7 +106,7 @@ void hsocket_free(hsocket_t sock);
<BR>HSOCKET_ERROR_GET_HOSTNAME
<BR>HSOCKET_ERROR_CONNECT
*/
-herror_t hsocket_open(hsocket_t *sock, const char* host, int port);
+herror_t hsocket_open (hsocket_t * sock, const char *host, int port);
/**
@@ -112,7 +114,7 @@ herror_t hsocket_open(hsocket_t *sock, const char* host, int port);
@param sock the socket to close
*/
-void hsocket_close(hsocket_t sock);
+void hsocket_close (hsocket_t sock);
/**
@@ -128,7 +130,7 @@ void hsocket_close(hsocket_t sock);
@see hsocket_listen
*/
-herror_t hsocket_bind(hsocket_t *sock, int port);
+herror_t hsocket_bind (hsocket_t * sock, int port);
/**
@@ -142,7 +144,7 @@ herror_t hsocket_bind(hsocket_t *sock, int port);
<BR>HSOCKET_ERROR_NOT_INITIALIZED
<BR>HSOCKET_ERROR_LISTEN
*/
-herror_t hsocket_listen(hsocket_t sock);
+herror_t hsocket_listen (hsocket_t sock);
/**
@@ -156,7 +158,7 @@ herror_t hsocket_listen(hsocket_t sock);
<BR>HSOCKET_ERROR_NOT_INITIALIZED
<BR>HSOCKET_ERROR_ACCEPT
*/
-herror_t hsocket_accept(hsocket_t sock, hsocket_t *dest);
+herror_t hsocket_accept (hsocket_t sock, hsocket_t * dest);
/**
@@ -170,7 +172,7 @@ herror_t hsocket_accept(hsocket_t sock, hsocket_t *dest);
<BR>HSOCKET_ERROR_NOT_INITIALIZED
<BR>HSOCKET_ERROR_SEND
*/
-herror_t hsocket_nsend(hsocket_t sock, const byte_t* bytes, int size);
+herror_t hsocket_nsend (hsocket_t sock, const byte_t * bytes, int size);
/**
@@ -183,7 +185,7 @@ herror_t hsocket_nsend(hsocket_t sock, const byte_t* bytes, int size);
<BR>HSOCKET_ERROR_NOT_INITIALIZED
<BR>HSOCKET_ERROR_SEND
*/
-herror_t hsocket_send(hsocket_t sock, const char* str);
+herror_t hsocket_send (hsocket_t sock, const char *str);
/**
@@ -202,7 +204,8 @@ herror_t hsocket_send(hsocket_t sock, const char* str);
the socket.
*/
-herror_t hsocket_read(hsocket_t sock, byte_t* buffer, int size, int force, int *readed);
+herror_t hsocket_read (hsocket_t sock, byte_t * buffer, int size, int force,
+ int *readed);
/**
Sets the goven socket to non-blocking socket mode.
@@ -213,18 +216,7 @@ herror_t hsocket_read(hsocket_t sock, byte_t* buffer, int size, int force, int *
<BR>HSOCKET_ERROR_NOT_INITIALIZED
<BR>HSOCKET_ERROR_IOCTL
*/
-herror_t hsocket_block(hsocket_t sock, int block);
+herror_t hsocket_block (hsocket_t sock, int block);
#endif
-
-
-
-
-
-
-
-
-
-
-
diff --git a/nanohttp/nanohttp-ssl.c b/nanohttp/nanohttp-ssl.c
index 766ac98..38b3595 100644
--- a/nanohttp/nanohttp-ssl.c
+++ b/nanohttp/nanohttp-ssl.c
@@ -22,7 +22,7 @@
*/
/* Enter only if --with-ssl was specified to the configure script */
-#ifdef HAVE_SSL
+#ifdef HAVE_SSL
#include <sys/types.h>
#ifndef WIN32
@@ -60,7 +60,7 @@ typedef unsigned int uint32_t;
#define MAXCHUNK 1024
#define HEADER_LEN 5
-char HEADER[HEADER_LEN] = {186, 84, 202, 86, 224};
+char HEADER[HEADER_LEN] = { 186, 84, 202, 86, 224 };
static char *pass;
/*
@@ -69,303 +69,342 @@ static char *pass;
* the SSL random number generator
*/
-void superseed()
+void
+superseed ()
{
- int buf[256], i;
+ int buf[256], i;
- srand(time(NULL));
+ srand (time (NULL));
- for(i = 0; i < 256; i++) {
- buf[i] = rand();
- } RAND_seed( (unsigned char*)buf, sizeof(buf));
+ for (i = 0; i < 256; i++)
+ {
+ buf[i] = rand ();
+ }
+ RAND_seed ((unsigned char *) buf, sizeof (buf));
}
-static int pw_cb(char* buf, int num, int rwflag, void *userdata)
+static int
+pw_cb (char *buf, int num, int rwflag, void *userdata)
{
- if( num < (int)strlen(pass) + 1)
- return(0);
+ if (num < (int) strlen (pass) + 1)
+ return (0);
- strcpy(buf, pass);
- return strlen(pass);
+ strcpy (buf, pass);
+ return strlen (pass);
}
-int verify_sn(X509* cert, int who, int nid, char* str)
+int
+verify_sn (X509 * cert, int who, int nid, char *str)
{
- char name[256];
- char buf[256];
-
- memset(name, '\0', 256);
- memset(buf, '\0', 256);
-
- if(who == CERT_SUBJECT) {
- X509_NAME_oneline(X509_get_subject_name(cert), name, 256);
- } else {
- X509_NAME_oneline(X509_get_issuer_name(cert), name, 256);
- }
-
- buf[0] = '/';
- strcat(buf, OBJ_nid2sn(nid));
- strcat(buf, "=");
- strcat(buf, str);
-
- if(strstr(name, buf)) {
- return 1;
- } else {
- return 0;
- }
+ char name[256];
+ char buf[256];
+
+ memset (name, '\0', 256);
+ memset (buf, '\0', 256);
+
+ if (who == CERT_SUBJECT)
+ {
+ X509_NAME_oneline (X509_get_subject_name (cert), name, 256);
+ }
+ else
+ {
+ X509_NAME_oneline (X509_get_issuer_name (cert), name, 256);
+ }
+
+ buf[0] = '/';
+ strcat (buf, OBJ_nid2sn (nid));
+ strcat (buf, "=");
+ strcat (buf, str);
+
+ if (strstr (name, buf))
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
}
-static int verify_cb(int prev_ok, X509_STORE_CTX* ctx)
+static int
+verify_cb (int prev_ok, X509_STORE_CTX * ctx)
{
- X509* cert = X509_STORE_CTX_get_current_cert(ctx);
- int depth = X509_STORE_CTX_get_error_depth(ctx);
- int err = X509_STORE_CTX_get_error(ctx);
+ X509 *cert = X509_STORE_CTX_get_current_cert (ctx);
+ int depth = X509_STORE_CTX_get_error_depth (ctx);
+ int err = X509_STORE_CTX_get_error (ctx);
/*
if( err = X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN ){
log_verbose1("Self signed cert in chain");
return 1;
}
*/
-#ifdef NOUSER_VERIFY /* ifdef's added by Ferhat. because of unresolved reference while compiling */
- if(depth == 0) {
- return user_verify(cert);
- } else {
+#ifdef NOUSER_VERIFY /* ifdef's added by Ferhat. because of
+ unresolved reference while compiling */
+ if (depth == 0)
+ {
+ return user_verify (cert);
+ }
+ else
+ {
#endif
- log_verbose1( "Cert ok (prev)" );
- return prev_ok;
+ log_verbose1 ("Cert ok (prev)");
+ return prev_ok;
#ifdef NOUSER_VERIFY
- }
+ }
#endif
}
#ifdef NOUSER_VERIFY
-int user_verify(X509* cert)
-{
- //TODO: Make sure that the client is providing a client cert,
- //or that the Module is providing the Module cert
- /* connect to anyone */
- log_verbose1("Validating certificate.");
- return 1;
-}
+int
+user_verify (X509 * cert)
+{
+ // TODO: Make sure that the client is providing a client cert,
+ // or that the Module is providing the Module cert
+ /* connect to anyone */
+ log_verbose1 ("Validating certificate.");
+ return 1;
+}
#endif
-SSL_CTX *initialize_ctx(char* keyfile, char* password, char* calist)
+SSL_CTX *
+initialize_ctx (char *keyfile, char *password, char *calist)
{
- SSL_CTX* ctx = NULL;
-
- if(password == NULL) password = "";
-
-
- /* Global system initialization */
- log_verbose1( "Initializing library");
- SSL_library_init();
- SSL_load_error_strings();
- ERR_load_crypto_strings();
- OpenSSL_add_ssl_algorithms();
-
- /* Create our context*/
- ctx = SSL_CTX_new( SSLv23_method() );
-
- if(ctx == NULL) {
- log_error1( "Cannot create SSL context");
- return NULL;
- }
- log_verbose1( "SSL context created ok");
-
- /* Load our keys and certificates*/
- if(keyfile != NULL && password != NULL ){
-
- if(!( SSL_CTX_use_certificate_file(ctx, keyfile, SSL_FILETYPE_PEM))){
- log_error2( "Couldn't read certificate file: %s", keyfile);
- SSL_CTX_free(ctx);
- return ctx = NULL;
- }
-
- log_verbose1("Certificate file read ok");
+ SSL_CTX *ctx = NULL;
+
+ if (password == NULL)
+ password = "";
+
+
+ /* Global system initialization */
+ log_verbose1 ("Initializing library");
+ SSL_library_init ();
+ SSL_load_error_strings ();
+ ERR_load_crypto_strings ();
+ OpenSSL_add_ssl_algorithms ();
+
+ /* Create our context */
+ ctx = SSL_CTX_new (SSLv23_method ());
+
+ if (ctx == NULL)
+ {
+ log_error1 ("Cannot create SSL context");
+ return NULL;
+ }
+ log_verbose1 ("SSL context created ok");
+
+ /* Load our keys and certificates */
+ if (keyfile != NULL && password != NULL)
+ {
+
+ if (!(SSL_CTX_use_certificate_file (ctx, keyfile, SSL_FILETYPE_PEM)))
+ {
+ log_error2 ("Couldn't read certificate file: %s", keyfile);
+ SSL_CTX_free (ctx);
+ return ctx = NULL;
+ }
- pass = password;
- SSL_CTX_set_default_passwd_cb(ctx, pw_cb);
+ log_verbose1 ("Certificate file read ok");
- if( !( SSL_CTX_use_PrivateKey_file(ctx, keyfile, SSL_FILETYPE_PEM) ) ) {
- log_error2( "Couldn't read key file: %s", keyfile);
- SSL_CTX_free(ctx);
- return ctx = NULL;
- }
+ pass = password;
+ SSL_CTX_set_default_passwd_cb (ctx, pw_cb);
- log_verbose1("Keyfile read ok");
+ if (!(SSL_CTX_use_PrivateKey_file (ctx, keyfile, SSL_FILETYPE_PEM)))
+ {
+ log_error2 ("Couldn't read key file: %s", keyfile);
+ SSL_CTX_free (ctx);
+ return ctx = NULL;
}
- if( calist != NULL) {
- /* Load the CAs we trust */
- if( !( SSL_CTX_load_verify_locations(ctx, calist, NULL) ) ) {
- log_error2("Couldn't read CA list: %s", calist);
- SSL_CTX_free(ctx);
- return ctx = NULL;
- }
+ log_verbose1 ("Keyfile read ok");
+ }
+ if (calist != NULL)
+ {
+
+ /* Load the CAs we trust */
+ if (!(SSL_CTX_load_verify_locations (ctx, calist, NULL)))
+ {
+ log_error2 ("Couldn't read CA list: %s", calist);
+ SSL_CTX_free (ctx);
+ return ctx = NULL;
+ }
- SSL_CTX_set_client_CA_list( ctx, SSL_load_client_CA_file(calist) );
- log_verbose1("Certificate Authority contacted");
+ SSL_CTX_set_client_CA_list (ctx, SSL_load_client_CA_file (calist));
+ log_verbose1 ("Certificate Authority contacted");
- }
- SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE,
- verify_cb);
- log_verbose1("Verify callback registered");
+ }
+ SSL_CTX_set_verify (ctx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE,
+ verify_cb);
+ log_verbose1 ("Verify callback registered");
- SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF );
+ SSL_CTX_set_session_cache_mode (ctx, SSL_SESS_CACHE_OFF);
- /* Load randomness */
- superseed();
+ /* Load randomness */
+ superseed ();
- return ctx;
+ return ctx;
}
-void log_ssl_error(SSL* ssl, int ret)
+void
+log_ssl_error (SSL * ssl, int ret)
{
- int errqueue;
- char errorbuf[256] = "Error: ";
-
- if(ret == 0) {
- log_error1("SSL handshake was not successful, contolled shutdown");
- } else if(ret == -1) {
- log_error1("SSL handshake was not successful, fatal error at protocol");
- }
-
- errqueue = SSL_get_error(ssl, ret);
-
- switch(errqueue) {
- case SSL_ERROR_NONE:
- strcat(errorbuf, "None");
- break;
- case SSL_ERROR_ZERO_RETURN:
- strcat(errorbuf, "Zero return");
- break;
- case SSL_ERROR_WANT_READ:
- strcat(errorbuf, "Want read");
- break;
- case SSL_ERROR_WANT_WRITE:
- strcat(errorbuf, "Want write");
- break;
- case SSL_ERROR_WANT_X509_LOOKUP:
- strcat(errorbuf, "Want x509 lookup");
- break;
- case SSL_ERROR_SYSCALL:
- strcat(errorbuf, "Syscall:");
- if(ret == 0) {
- strcat(errorbuf, "Protocol violation");
- } else if(ret == -1) {
- strcat(errorbuf, "BIO reported an I/O error");
- } else {
- strcat(errorbuf, "Unknown syscall error");
- } /* if */
-
- break;
- case SSL_ERROR_SSL:
- strcat(errorbuf, "SSL library");
- while(errqueue=ERR_get_error()){
- log_error2("SSL %s", ERR_error_string(errqueue, NULL));
- }
- break;
- } /* switch code */
-
- log_error1( errorbuf);
+ int errqueue;
+ char errorbuf[256] = "Error: ";
+
+ if (ret == 0)
+ {
+ log_error1 ("SSL handshake was not successful, contolled shutdown");
+ }
+ else if (ret == -1)
+ {
+ log_error1 ("SSL handshake was not successful, fatal error at protocol");
+ }
+
+ errqueue = SSL_get_error (ssl, ret);
+
+ switch (errqueue)
+ {
+ case SSL_ERROR_NONE:
+ strcat (errorbuf, "None");
+ break;
+ case SSL_ERROR_ZERO_RETURN:
+ strcat (errorbuf, "Zero return");
+ break;
+ case SSL_ERROR_WANT_READ:
+ strcat (errorbuf, "Want read");
+ break;
+ case SSL_ERROR_WANT_WRITE:
+ strcat (errorbuf, "Want write");
+ break;
+ case SSL_ERROR_WANT_X509_LOOKUP:
+ strcat (errorbuf, "Want x509 lookup");
+ break;
+ case SSL_ERROR_SYSCALL:
+ strcat (errorbuf, "Syscall:");
+ if (ret == 0)
+ {
+ strcat (errorbuf, "Protocol violation");
+ }
+ else if (ret == -1)
+ {
+ strcat (errorbuf, "BIO reported an I/O error");
+ }
+ else
+ {
+ strcat (errorbuf, "Unknown syscall error");
+ } /* if */
+
+ break;
+ case SSL_ERROR_SSL:
+ strcat (errorbuf, "SSL library");
+ while (errqueue = ERR_get_error ())
+ {
+ log_error2 ("SSL %s", ERR_error_string (errqueue, NULL));
+ }
+ break;
+ } /* switch code */
+
+ log_error1 (errorbuf);
}
-SSL* init_ssl(SSL_CTX* ctx, int sock, int type)
+SSL *
+init_ssl (SSL_CTX * ctx, int sock, int type)
{
- int ret;
- int status;
- SSL* ssl;
+ int ret;
+ int status;
+ SSL *ssl;
#if 0
#ifdef WIN32
- BIO* rbio;
- BIO* wbio;
+ BIO *rbio;
+ BIO *wbio;
#else
- BIO* sbio;
+ BIO *sbio;
#endif
#endif
- log_verbose1("Starting SSL Initialization");
-
- ssl = SSL_new(ctx);
-
- if(ssl == NULL) {
- log_error1( "Cannot create new ssl object");
- return NULL;
- }
+ log_verbose1 ("Starting SSL Initialization");
+
+ ssl = SSL_new (ctx);
+
+ if (ssl == NULL)
+ {
+ log_error1 ("Cannot create new ssl object");
+ return NULL;
+ }
#if 0
#ifdef WIN32
- log_error1("Setting up BIO with socket");
- rbio = BIO_new_socket(sock, BIO_NOCLOSE);
- if( rbio == NULL ) {
- log_error1( "BIO_new_socket failed");
- return NULL;
- }
- SSL_set_bio(ssl, rbio, rbio);
+ log_error1 ("Setting up BIO with socket");
+ rbio = BIO_new_socket (sock, BIO_NOCLOSE);
+ if (rbio == NULL)
+ {
+ log_error1 ("BIO_new_socket failed");
+ return NULL;
+ }
+ SSL_set_bio (ssl, rbio, rbio);
#else
- sbio = BIO_new_socket(sock, BIO_NOCLOSE);
-
- if( sbio == NULL ) {
- log_error1( "BIO_new_socket failed");
- return NULL;
- }
- SSL_set_bio(ssl, sbio, sbio);
+ sbio = BIO_new_socket (sock, BIO_NOCLOSE);
+
+ if (sbio == NULL)
+ {
+ log_error1 ("BIO_new_socket failed");
+ return NULL;
+ }
+ SSL_set_bio (ssl, sbio, sbio);
#endif
#endif
- SSL_set_fd(ssl, sock);
-
- if(type == SSL_SERVER) {
- hsocket_t sock_t;
- sock_t.sock = sock;
- hsocket_block(sock_t, 1);
- ret = SSL_accept(ssl);
- hsocket_block(sock_t, 0);
- if(ret <= 0) {
- log_error1( "SSL accept error");
- log_ssl_error(ssl, ret);
- SSL_free(ssl);
- return ssl = NULL;
- } /* if error */
- } else { /* client */
- ret = SSL_connect(ssl);
- if(ret <= 0) {
- log_error1( "SSL connect error");
- log_ssl_error(ssl, ret);
- SSL_free(ssl);
- return ssl = NULL;
- } /* if error */
- /* SSL_connect should take care of this for us.
- if(SSL_get_peer_certificate(ssl) == NULL) {
- log_error1( "No certificate provided");
- SSL_free(ssl);
- return ssl = NULL;
- }
- if(SSL_get_verify_result(ssl) != X509_V_OK) {
- log_error1( "Certificate did not verify");
- SSL_free(ssl);
- return ssl = NULL;
- }
- */
- }
-
- log_verbose1("Completed SSL Initialization");
- return ssl;
+ SSL_set_fd (ssl, sock);
+
+ if (type == SSL_SERVER)
+ {
+ hsocket_t sock_t;
+ sock_t.sock = sock;
+ hsocket_block (sock_t, 1);
+ ret = SSL_accept (ssl);
+ hsocket_block (sock_t, 0);
+ if (ret <= 0)
+ {
+ log_error1 ("SSL accept error");
+ log_ssl_error (ssl, ret);
+ SSL_free (ssl);
+ return ssl = NULL;
+ } /* if error */
+ }
+ else
+ { /* client */
+ ret = SSL_connect (ssl);
+ if (ret <= 0)
+ {
+ log_error1 ("SSL connect error");
+ log_ssl_error (ssl, ret);
+ SSL_free (ssl);
+ return ssl = NULL;
+ } /* if error */
+ /* SSL_connect should take care of this for us.
+ if(SSL_get_peer_certificate(ssl) == NULL) { log_error1( "No
+ certificate provided"); SSL_free(ssl); return ssl = NULL; }
+ if(SSL_get_verify_result(ssl) != X509_V_OK) { log_error1( "Certificate
+ did not verify"); SSL_free(ssl); return ssl = NULL; } */
+ }
+
+ log_verbose1 ("Completed SSL Initialization");
+ return ssl;
}
-void ssl_cleanup(SSL* ssl)
+void
+ssl_cleanup (SSL * ssl)
{
- /* does nothing to context */
+ /* does nothing to context */
- if(ssl != NULL) {
+ if (ssl != NULL)
+ {
- SSL_shutdown(ssl);
+ SSL_shutdown (ssl);
// SSL_clear(ssl);
- SSL_free(ssl);
- ssl = NULL;
- }
+ SSL_free (ssl);
+ ssl = NULL;
+ }
}
#endif /* end of ifdef HAVE_SSL */
-
diff --git a/nanohttp/nanohttp-ssl.h b/nanohttp/nanohttp-ssl.h
index c783812..449c78c 100644
--- a/nanohttp/nanohttp-ssl.h
+++ b/nanohttp/nanohttp-ssl.h
@@ -23,7 +23,7 @@
*/
/* Do enter only if --with-ssl was specified by the configure script */
-#ifdef HAVE_SSL
+#ifdef HAVE_SSL
#ifdef TRU64
#include <arpa/inet.h>
@@ -47,9 +47,10 @@ typedef unsigned int uint32_t;
#define CERT_SUBJECT 0
#define CERT_ISSUER 1
-typedef struct Con {
- SSL* ssl;
- int sock;
+typedef struct Con
+{
+ SSL *ssl;
+ int sock;
} Con;
/*
@@ -62,7 +63,7 @@ typedef struct Con {
* Initialize the context
*/
-SSL_CTX *initialize_ctx(char *keyfile, char *password, char* calist);
+SSL_CTX *initialize_ctx (char *keyfile, char *password, char *calist);
/*
* Quick function for verifying a portion of the cert
@@ -70,7 +71,7 @@ SSL_CTX *initialize_ctx(char *keyfile, char *password, char* calist);
* returns non-zero if everything went ok
*/
-int verify_sn(X509* cert, int who, int nid, char* str);
+int verify_sn (X509 * cert, int who, int nid, char *str);
/*
* Called by framework for verify
@@ -82,22 +83,21 @@ int verify_sn(X509* cert, int who, int nid, char* str);
* This function MUST be implemented by user client/server code somewhere
*/
-int user_verify(X509* cert);
+int user_verify (X509 * cert);
/*
* Create the ssl socket and return it
* pass in the context and an open socket
*/
-SSL* init_ssl(SSL_CTX* ctx, int sock, int type);
+SSL *init_ssl (SSL_CTX * ctx, int sock, int type);
/*
* Close the ssl connection (socket is still left open)
*/
-void ssl_cleanup();
+void ssl_cleanup ();
#endif
#endif /* HAVE_SSL */
-
diff --git a/nanohttp/nanohttp-stream.c b/nanohttp/nanohttp-stream.c
index 1440e63..7700867 100755
--- a/nanohttp/nanohttp-stream.c
+++ b/nanohttp/nanohttp-stream.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: nanohttp-stream.c,v 1.7 2005/05/27 19:28:16 snowdrop Exp $
+* $Id: nanohttp-stream.c,v 1.8 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -29,7 +29,8 @@
#ifdef MEM_DEBUG
#include <utils/alloc.h>
#endif
-void _log_str(char *fn, char *str, int size)
+void
+_log_str (char *fn, char *str, int size)
{
/* FILE *f = fopen(fn, "ab");
if (!f) f=fopen(fn,"wb");
@@ -47,24 +48,23 @@ HTTP INPUT STREAM
-------------------------------------------------------------------
*/
-static
-int _http_stream_is_content_length(hpair_t *header)
+static int
+_http_stream_is_content_length (hpair_t * header)
{
- return
- hpairnode_get_ignore_case(header, HEADER_CONTENT_LENGTH) != NULL;
+ return hpairnode_get_ignore_case (header, HEADER_CONTENT_LENGTH) != NULL;
}
-static
-int _http_stream_is_chunked(hpair_t *header)
+static int
+_http_stream_is_chunked (hpair_t * header)
{
char *chunked;
- chunked = hpairnode_get_ignore_case(header, HEADER_TRANSFER_ENCODING);
+ chunked = hpairnode_get_ignore_case (header, HEADER_TRANSFER_ENCODING);
if (chunked != NULL)
{
- if (!strcmp(chunked, TRANSFER_ENCODING_CHUNKED))
- {
- return 1;
- }
+ if (!strcmp (chunked, TRANSFER_ENCODING_CHUNKED))
+ {
+ return 1;
+ }
}
return 0;
@@ -73,35 +73,35 @@ int _http_stream_is_chunked(hpair_t *header)
/**
Creates a new input stream.
*/
-http_input_stream_t *http_input_stream_new(hsocket_t sock, hpair_t *header)
+http_input_stream_t *
+http_input_stream_new (hsocket_t sock, hpair_t * header)
{
http_input_stream_t *result;
- char *content_length;
+ char *content_length;
/* Paranoya check */
- /*if (header == NULL)
- return NULL;
- */
+ /* if (header == NULL) return NULL; */
/* Create object */
- result = (http_input_stream_t*)malloc(sizeof(http_input_stream_t));
+ result = (http_input_stream_t *) malloc (sizeof (http_input_stream_t));
result->sock = sock;
result->err = H_OK;
/* Find connection type */
- hpairnode_dump_deep(header);
+ hpairnode_dump_deep (header);
/* Check if Content-type */
- if (_http_stream_is_content_length(header))
+ if (_http_stream_is_content_length (header))
{
- log_verbose1("Stream transfer with 'Content-length'");
- content_length = hpairnode_get_ignore_case(header, HEADER_CONTENT_LENGTH);
- result->content_length = atoi(content_length);
+ log_verbose1 ("Stream transfer with 'Content-length'");
+ content_length =
+ hpairnode_get_ignore_case (header, HEADER_CONTENT_LENGTH);
+ result->content_length = atoi (content_length);
result->received = 0;
- result->type = HTTP_TRANSFER_CONTENT_LENGTH;
+ result->type = HTTP_TRANSFER_CONTENT_LENGTH;
}
/* Check if Chunked */
- else if (_http_stream_is_chunked(header))
+ else if (_http_stream_is_chunked (header))
{
- log_verbose1("Stream transfer with 'chunked'");
+ log_verbose1 ("Stream transfer with 'chunked'");
result->type = HTTP_TRANSFER_CHUNKED;
result->chunk_size = -1;
result->received = -1;
@@ -109,7 +109,7 @@ http_input_stream_t *http_input_stream_new(hsocket_t sock, hpair_t *header)
/* Assume connection close */
else
{
- log_verbose1("Stream transfer with 'Connection: close'");
+ log_verbose1 ("Stream transfer with 'Connection: close'");
result->type = HTTP_TRANSFER_CONNECTION_CLOSE;
result->connection_closed = 0;
result->received = 0;
@@ -122,70 +122,69 @@ http_input_stream_t *http_input_stream_new(hsocket_t sock, hpair_t *header)
This function was added for MIME messages
and for debugging.
*/
-http_input_stream_t *http_input_stream_new_from_file(const char* filename)
+http_input_stream_t *
+http_input_stream_new_from_file (const char *filename)
{
http_input_stream_t *result;
- FILE *fd = fopen(filename, "rb");
+ FILE *fd = fopen (filename, "rb");
- if (fd == NULL)
+ if (fd == NULL)
return NULL;
/* Create object */
- result = (http_input_stream_t*)malloc(sizeof(http_input_stream_t));
+ result = (http_input_stream_t *) malloc (sizeof (http_input_stream_t));
result->type = HTTP_TRANSFER_FILE;
result->fd = fd;
result->deleteOnExit = 0;
- strcpy(result->filename, filename);
+ strcpy (result->filename, filename);
return result;
}
/**
Free input stream
*/
-void http_input_stream_free(http_input_stream_t *stream)
+void
+http_input_stream_free (http_input_stream_t * stream)
{
- if (stream->type == HTTP_TRANSFER_FILE && stream->fd) {
- fclose(stream->fd);
- if (stream->deleteOnExit)
- log_info2("Removing '%s'", stream->filename);
- /*remove(stream->filename);*/
- }
-
- free(stream);
+ if (stream->type == HTTP_TRANSFER_FILE && stream->fd)
+ {
+ fclose (stream->fd);
+ if (stream->deleteOnExit)
+ log_info2 ("Removing '%s'", stream->filename);
+ /* remove(stream->filename); */
+ }
+
+ free (stream);
}
-static
-int _http_input_stream_is_content_length_ready(
- http_input_stream_t *stream)
+static int
+_http_input_stream_is_content_length_ready (http_input_stream_t * stream)
{
return (stream->content_length > stream->received);
}
-static
-int _http_input_stream_is_chunked_ready(
- http_input_stream_t *stream)
+static int
+_http_input_stream_is_chunked_ready (http_input_stream_t * stream)
{
return stream->chunk_size != 0;
}
-static
-int _http_input_stream_is_connection_closed_ready(
- http_input_stream_t *stream)
+static int
+_http_input_stream_is_connection_closed_ready (http_input_stream_t * stream)
{
- return !stream->connection_closed;
+ return !stream->connection_closed;
}
-static
-int _http_input_stream_is_file_ready(
- http_input_stream_t *stream)
+static int
+_http_input_stream_is_file_ready (http_input_stream_t * stream)
{
- return !feof(stream->fd);
+ return !feof (stream->fd);
}
-static
-int _http_input_stream_content_length_read(
- http_input_stream_t *stream, byte_t *dest, int size)
+static int
+_http_input_stream_content_length_read (http_input_stream_t * stream,
+ byte_t * dest, int size)
{
herror_t status;
int read;
@@ -195,8 +194,9 @@ int _http_input_stream_content_length_read(
size = stream->content_length - stream->received;
/* read from socket */
- status = hsocket_read(stream->sock, dest, size, 1, &read);
- if (status != H_OK) {
+ status = hsocket_read (stream->sock, dest, size, 1, &read);
+ if (status != H_OK)
+ {
stream->err = status;
return -1;
}
@@ -205,106 +205,112 @@ int _http_input_stream_content_length_read(
return read;
}
-static
-int _http_input_stream_chunked_read_chunk_size(
- http_input_stream_t *stream)
+static int
+_http_input_stream_chunked_read_chunk_size (http_input_stream_t * stream)
{
- char chunk[25];
+ char chunk[25];
int status, i = 0;
int chunk_size;
herror_t err;
-
+
while (1)
{
- err = hsocket_read(stream->sock, &(chunk[i]), 1, 1, &status);
- if (status != 1) {
- stream->err = herror_new("_http_input_stream_chunked_read_chunk_size",
- GENERAL_INVALID_PARAM, "This should never happens!");
+ err = hsocket_read (stream->sock, &(chunk[i]), 1, 1, &status);
+ if (status != 1)
+ {
+ stream->err = herror_new ("_http_input_stream_chunked_read_chunk_size",
+ GENERAL_INVALID_PARAM,
+ "This should never happens!");
return -1;
- }
+ }
+
+ if (err != H_OK)
+ {
+ log_error4 ("[%d] %s(): %s ", herror_code (err), herror_func (err),
+ herror_message (err));
- if (err != H_OK) {
- log_error4("[%d] %s(): %s ", herror_code(err), herror_func(err), herror_message(err));
-
stream->err = err;
return -1;
}
if (chunk[i] == '\r' || chunk[i] == ';')
{
- chunk[i] = '\0';
+ chunk[i] = '\0';
}
else if (chunk[i] == '\n')
{
- chunk[i] = '\0'; /* double check*/
- chunk_size = strtol(chunk, (char **) NULL, 16); /* hex to dec */
- /*
- log_verbose3("chunk_size: '%s' as dec: '%d'", chunk, chunk_size);
- */
- return chunk_size;
+ chunk[i] = '\0'; /* double check */
+ chunk_size = strtol (chunk, (char **) NULL, 16); /* hex to dec */
+ /*
+ log_verbose3("chunk_size: '%s' as dec: '%d'", chunk, chunk_size); */
+ return chunk_size;
}
-
- if (i == 24) {
- stream->err = herror_new(
- "_http_input_stream_chunked_read_chunk_size", STREAM_ERROR_NO_CHUNK_SIZE,
- "reached max line == %d", i);
- return -1;
+
+ if (i == 24)
+ {
+ stream->err =
+ herror_new ("_http_input_stream_chunked_read_chunk_size",
+ STREAM_ERROR_NO_CHUNK_SIZE, "reached max line == %d", i);
+ return -1;
}
else
- i++;
+ i++;
}
/* this should never happens */
- stream->err = herror_new(
- "_http_input_stream_chunked_read_chunk_size", STREAM_ERROR_NO_CHUNK_SIZE,
- "reached max line == %d", i);
- return -1;
+ stream->err =
+ herror_new ("_http_input_stream_chunked_read_chunk_size",
+ STREAM_ERROR_NO_CHUNK_SIZE, "reached max line == %d", i);
+ return -1;
}
-static
-int _http_input_stream_chunked_read(
- http_input_stream_t *stream, byte_t *dest, int size)
+static int
+_http_input_stream_chunked_read (http_input_stream_t * stream, byte_t * dest,
+ int size)
{
int status, counter;
- int remain, read=0;
+ int remain, read = 0;
char ch;
herror_t err;
while (size > 0)
{
- remain = stream->chunk_size - stream->received ;
+ remain = stream->chunk_size - stream->received;
if (remain == 0 && stream->chunk_size != -1)
{
- /* This is not the first chunk.
- so skip new line until chunk size string */
- counter = 100; /* maximum for stop infinity */
- while (1)
+ /* This is not the first chunk. so skip new line until chunk size
+ string */
+ counter = 100; /* maximum for stop infinity */
+ while (1)
+ {
+ err = hsocket_read (stream->sock, &ch, 1, 1, &status);
+
+ if (err != H_OK)
{
- err = hsocket_read(stream->sock, &ch, 1, 1, &status );
-
- if (err != H_OK) {
- stream->err = err;
- return -1;
- }
-
- if (ch == '\n')
- {
- break;
- }
- if (counter-- == 0) {
- stream->err = herror_new("_http_input_stream_chunked_read",
- STREAM_ERROR_WRONG_CHUNK_SIZE,"Wrong chunk-size");
- return -1;
- }
+ stream->err = err;
+ return -1;
}
+
+ if (ch == '\n')
+ {
+ break;
+ }
+ if (counter-- == 0)
+ {
+ stream->err = herror_new ("_http_input_stream_chunked_read",
+ STREAM_ERROR_WRONG_CHUNK_SIZE,
+ "Wrong chunk-size");
+ return -1;
+ }
+ }
}
if (remain == 0)
{
/* receive new chunk size */
- stream->chunk_size =
- _http_input_stream_chunked_read_chunk_size(stream);
+ stream->chunk_size =
+ _http_input_stream_chunked_read_chunk_size (stream);
stream->received = 0;
if (stream->chunk_size < 0)
@@ -323,27 +329,35 @@ int _http_input_stream_chunked_read(
if (remain < size)
{
/* read from socket */
- err = hsocket_read(stream->sock, &(dest[read]), remain, 1, &status);
- if (err != H_OK) {
+ err = hsocket_read (stream->sock, &(dest[read]), remain, 1, &status);
+ if (err != H_OK)
+ {
stream->err = err;
return -1;
}
- if (status != remain) {
- stream->err = herror_new("_http_input_stream_chunked_read",
- GENERAL_INVALID_PARAM, "This should never happens(remain=%d)(status=%d)!", remain, status);
- return -1;
- }
+ if (status != remain)
+ {
+ stream->err = herror_new ("_http_input_stream_chunked_read",
+ GENERAL_INVALID_PARAM,
+ "This should never happens(remain=%d)(status=%d)!",
+ remain, status);
+ return -1;
+ }
}
else
{
/* read from socket */
- err = hsocket_read(stream->sock, &(dest[read]), size, 1, &status);
- if (status != size) {
- stream->err = herror_new("_http_input_stream_chunked_read",
- GENERAL_INVALID_PARAM, "This should never happens(size=%d)(status=%d)!", size, status);
- return -1;
- }
- if (err != H_OK) {
+ err = hsocket_read (stream->sock, &(dest[read]), size, 1, &status);
+ if (status != size)
+ {
+ stream->err = herror_new ("_http_input_stream_chunked_read",
+ GENERAL_INVALID_PARAM,
+ "This should never happens(size=%d)(status=%d)!",
+ size, status);
+ return -1;
+ }
+ if (err != H_OK)
+ {
stream->err = err;
return -1;
}
@@ -358,16 +372,17 @@ int _http_input_stream_chunked_read(
}
-static
-int _http_input_stream_connection_closed_read(
- http_input_stream_t *stream, byte_t *dest, int size)
+static int
+_http_input_stream_connection_closed_read (http_input_stream_t * stream,
+ byte_t * dest, int size)
{
int status;
herror_t err;
/* read from socket */
- err = hsocket_read(stream->sock, dest, size, 0, &status );
- if (err != H_OK) {
+ err = hsocket_read (stream->sock, dest, size, 0, &status);
+ if (err != H_OK)
+ {
stream->err = err;
return -1;
}
@@ -376,20 +391,21 @@ int _http_input_stream_connection_closed_read(
stream->connection_closed = 1;
stream->received += status;
- _log_str("stream.in", dest, size);
+ _log_str ("stream.in", dest, size);
return status;
}
-static
-int _http_input_stream_file_read(
- http_input_stream_t *stream, byte_t *dest, int size)
+static int
+_http_input_stream_file_read (http_input_stream_t * stream, byte_t * dest,
+ int size)
{
int readed;
-
- readed = fread(dest, 1, size, stream->fd);
- if (readed == -1) {
- stream->err = herror_new("_http_input_stream_file_read",
- HSOCKET_ERROR_RECEIVE, "fread() returned -1");
+
+ readed = fread (dest, 1, size, stream->fd);
+ if (readed == -1)
+ {
+ stream->err = herror_new ("_http_input_stream_file_read",
+ HSOCKET_ERROR_RECEIVE, "fread() returned -1");
return -1;
}
@@ -399,7 +415,8 @@ int _http_input_stream_file_read(
/**
Returns the actual status of the stream.
*/
-int http_input_stream_is_ready(http_input_stream_t *stream)
+int
+http_input_stream_is_ready (http_input_stream_t * stream)
{
/* paranoya check */
if (stream == NULL)
@@ -410,16 +427,16 @@ int http_input_stream_is_ready(http_input_stream_t *stream)
switch (stream->type)
{
- case HTTP_TRANSFER_CONTENT_LENGTH:
- return _http_input_stream_is_content_length_ready(stream);
- case HTTP_TRANSFER_CHUNKED:
- return _http_input_stream_is_chunked_ready(stream);
- case HTTP_TRANSFER_CONNECTION_CLOSE:
- return _http_input_stream_is_connection_closed_ready(stream);
- case HTTP_TRANSFER_FILE:
- return _http_input_stream_is_file_ready(stream);
- default:
- return 0;
+ case HTTP_TRANSFER_CONTENT_LENGTH:
+ return _http_input_stream_is_content_length_ready (stream);
+ case HTTP_TRANSFER_CHUNKED:
+ return _http_input_stream_is_chunked_ready (stream);
+ case HTTP_TRANSFER_CONNECTION_CLOSE:
+ return _http_input_stream_is_connection_closed_ready (stream);
+ case HTTP_TRANSFER_FILE:
+ return _http_input_stream_is_file_ready (stream);
+ default:
+ return 0;
}
}
@@ -428,36 +445,38 @@ int http_input_stream_is_ready(http_input_stream_t *stream)
Returns the actual read bytes
<0 on error
*/
-int http_input_stream_read(http_input_stream_t *stream,
- byte_t *dest, int size)
+int
+http_input_stream_read (http_input_stream_t * stream, byte_t * dest, int size)
{
- int readed=0;
+ int readed = 0;
/* paranoya check */
- if (stream == NULL) {
+ if (stream == NULL)
+ {
return -1;
}
-
+
/* reset error flag */
stream->err = H_OK;
switch (stream->type)
{
- case HTTP_TRANSFER_CONTENT_LENGTH:
- readed=_http_input_stream_content_length_read(stream, dest, size);
- break;
- case HTTP_TRANSFER_CHUNKED:
- readed=_http_input_stream_chunked_read(stream, dest, size);
- break;
- case HTTP_TRANSFER_CONNECTION_CLOSE:
- readed=_http_input_stream_connection_closed_read(stream, dest, size);
- break;
- case HTTP_TRANSFER_FILE:
- readed=_http_input_stream_file_read(stream, dest, size);
- break;
- default:
- stream->err = herror_new("http_input_stream_read",
- STREAM_ERROR_INVALID_TYPE, "%d is invalid stream type", stream->type);
- return -1;
+ case HTTP_TRANSFER_CONTENT_LENGTH:
+ readed = _http_input_stream_content_length_read (stream, dest, size);
+ break;
+ case HTTP_TRANSFER_CHUNKED:
+ readed = _http_input_stream_chunked_read (stream, dest, size);
+ break;
+ case HTTP_TRANSFER_CONNECTION_CLOSE:
+ readed = _http_input_stream_connection_closed_read (stream, dest, size);
+ break;
+ case HTTP_TRANSFER_FILE:
+ readed = _http_input_stream_file_read (stream, dest, size);
+ break;
+ default:
+ stream->err = herror_new ("http_input_stream_read",
+ STREAM_ERROR_INVALID_TYPE,
+ "%d is invalid stream type", stream->type);
+ return -1;
}
return readed;
@@ -477,40 +496,42 @@ HTTP OUTPUT STREAM
/**
Creates a new output stream. Transfer code will be found from header.
*/
-http_output_stream_t *http_output_stream_new(hsocket_t sock, hpair_t *header)
+http_output_stream_t *
+http_output_stream_new (hsocket_t sock, hpair_t * header)
{
http_output_stream_t *result;
- char *content_length;
+ char *content_length;
/* Paranoya check */
/* if (header == NULL)
return NULL;
*/
/* Create object */
- result = (http_output_stream_t*)malloc(sizeof(http_output_stream_t));
+ result = (http_output_stream_t *) malloc (sizeof (http_output_stream_t));
result->sock = sock;
result->sent = 0;
/* Find connection type */
-
+
/* Check if Content-type */
- if (_http_stream_is_content_length(header))
+ if (_http_stream_is_content_length (header))
{
- log_verbose1("Stream transfer with 'Content-length'");
- content_length = hpairnode_get_ignore_case(header, HEADER_CONTENT_LENGTH);
- result->content_length = atoi(content_length);
- result->type = HTTP_TRANSFER_CONTENT_LENGTH;
+ log_verbose1 ("Stream transfer with 'Content-length'");
+ content_length =
+ hpairnode_get_ignore_case (header, HEADER_CONTENT_LENGTH);
+ result->content_length = atoi (content_length);
+ result->type = HTTP_TRANSFER_CONTENT_LENGTH;
}
/* Check if Chunked */
- else if (_http_stream_is_chunked(header))
+ else if (_http_stream_is_chunked (header))
{
- log_verbose1("Stream transfer with 'chunked'");
+ log_verbose1 ("Stream transfer with 'chunked'");
result->type = HTTP_TRANSFER_CHUNKED;
}
/* Assume connection close */
else
{
- log_verbose1("Stream transfer with 'Connection: close'");
+ log_verbose1 ("Stream transfer with 'Connection: close'");
result->type = HTTP_TRANSFER_CONNECTION_CLOSE;
}
@@ -520,42 +541,44 @@ http_output_stream_t *http_output_stream_new(hsocket_t sock, hpair_t *header)
/**
Free output stream
*/
-void http_output_stream_free(http_output_stream_t *stream)
+void
+http_output_stream_free (http_output_stream_t * stream)
{
- free(stream);
+ free (stream);
}
/**
Writes 'size' bytes of 'bytes' into stream.
Returns socket error flags or H_OK.
*/
-herror_t http_output_stream_write(http_output_stream_t *stream,
- const byte_t *bytes, int size)
+herror_t
+http_output_stream_write (http_output_stream_t * stream,
+ const byte_t * bytes, int size)
{
herror_t status;
char chunked[15];
if (stream->type == HTTP_TRANSFER_CHUNKED)
{
- sprintf(chunked, "%x\r\n", size);
- status = hsocket_send(stream->sock, chunked);
+ sprintf (chunked, "%x\r\n", size);
+ status = hsocket_send (stream->sock, chunked);
if (status != H_OK)
- return status;
+ return status;
}
if (size > 0)
{
- _log_str("stream.out", (char*)bytes, size);
- status = hsocket_nsend(stream->sock, bytes, size);
+ _log_str ("stream.out", (char *) bytes, size);
+ status = hsocket_nsend (stream->sock, bytes, size);
if (status != H_OK)
- return status;
+ return status;
}
- if (stream->type == HTTP_TRANSFER_CHUNKED)
+ if (stream->type == HTTP_TRANSFER_CHUNKED)
{
- status = hsocket_send(stream->sock, "\r\n");
+ status = hsocket_send (stream->sock, "\r\n");
if (status != H_OK)
- return status;
+ return status;
}
return H_OK;
@@ -565,29 +588,25 @@ herror_t http_output_stream_write(http_output_stream_t *stream,
Writes 'strlen()' bytes of 'str' into stream.
Returns socket error flags or H_OK.
*/
-herror_t http_output_stream_write_string(http_output_stream_t *stream,
- const char *str)
+herror_t
+http_output_stream_write_string (http_output_stream_t * stream,
+ const char *str)
{
- return http_output_stream_write(stream, str, strlen(str));
+ return http_output_stream_write (stream, str, strlen (str));
}
-herror_t http_output_stream_flush(http_output_stream_t *stream)
+herror_t
+http_output_stream_flush (http_output_stream_t * stream)
{
herror_t status;
if (stream->type == HTTP_TRANSFER_CHUNKED)
{
- status = hsocket_send(stream->sock, "0\r\n\r\n");
+ status = hsocket_send (stream->sock, "0\r\n\r\n");
if (status != H_OK)
- return status;
+ return status;
}
- return H_OK;
+ return H_OK;
}
-
-
-
-
-
-
diff --git a/nanohttp/nanohttp-stream.h b/nanohttp/nanohttp-stream.h
index d0a234a..2ef12a2 100755
--- a/nanohttp/nanohttp-stream.h
+++ b/nanohttp/nanohttp-stream.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-stream.h,v 1.5 2004/11/02 23:09:27 snowdrop Exp $
+ * $Id: nanohttp-stream.h,v 1.6 2006/01/10 11:21:55 snowdrop Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -21,11 +21,11 @@
*
* Email: ferhatayaz@yahoo.com
******************************************************************/
-#ifndef NANO_HTTP_STREAM_H
-#define NANO_HTTP_STREAM_H
+#ifndef NANO_HTTP_STREAM_H
+#define NANO_HTTP_STREAM_H
#include <stdio.h>
-void _log_str(char *fn, char *str, int size);
+void _log_str (char *fn, char *str, int size);
/*
HTTP Stream modul:
@@ -77,8 +77,7 @@ typedef enum http_transfer_type
/** This transfer style will be used by MIME support
and for debug purposes.*/
HTTP_TRANSFER_FILE
-
-}http_transfer_type_t;
+} http_transfer_type_t;
/**
@@ -87,9 +86,9 @@ typedef enum http_transfer_type
*/
typedef struct http_input_stream
{
- hsocket_t sock;
+ hsocket_t sock;
herror_t err;
- http_transfer_type_t type;
+ http_transfer_type_t type;
int received;
int content_length;
int chunk_size;
@@ -98,8 +97,8 @@ typedef struct http_input_stream
/* file handling */
FILE *fd;
char filename[255];
- int deleteOnExit; /* default is 0 */
-}http_input_stream_t;
+ int deleteOnExit; /* default is 0 */
+} http_input_stream_t;
/**
@@ -109,10 +108,10 @@ typedef struct http_input_stream
typedef struct http_output_stream
{
hsocket_t sock;
- http_transfer_type_t type;
+ http_transfer_type_t type;
int content_length;
int sent;
-}http_output_stream_t;
+} http_output_stream_t;
/*
@@ -135,7 +134,7 @@ typedef struct http_output_stream
@see http_input_stream_free
*/
-http_input_stream_t *http_input_stream_new(hsocket_t sock, hpair_t *header);
+http_input_stream_t *http_input_stream_new (hsocket_t sock, hpair_t * header);
/**
@@ -151,7 +150,7 @@ http_input_stream_t *http_input_stream_new(hsocket_t sock, hpair_t *header);
@see http_input_stream_free
*/
-http_input_stream_t *http_input_stream_new_from_file(const char* filename);
+http_input_stream_t *http_input_stream_new_from_file (const char *filename);
/**
@@ -160,7 +159,7 @@ http_input_stream_t *http_input_stream_new_from_file(const char* filename);
@param stream the input stream to free.
*/
-void http_input_stream_free(http_input_stream_t *stream);
+void http_input_stream_free (http_input_stream_t * stream);
/**
@@ -170,7 +169,7 @@ void http_input_stream_free(http_input_stream_t *stream);
@returns <br>1 if there are still data to read.
<br>0 if no more data exists.
*/
-int http_input_stream_is_ready(http_input_stream_t *stream);
+int http_input_stream_is_ready (http_input_stream_t * stream);
/**
@@ -194,8 +193,8 @@ int http_input_stream_is_ready(http_input_stream_t *stream);
@returns the actual readed bytes or -1 on error.
*/
-int http_input_stream_read(http_input_stream_t *stream,
- byte_t *dest, int size);
+int http_input_stream_read (http_input_stream_t * stream,
+ byte_t * dest, int size);
/*
@@ -217,7 +216,8 @@ int http_input_stream_read(http_input_stream_t *stream,
@see http_output_stream_free
*/
-http_output_stream_t *http_output_stream_new(hsocket_t sock, hpair_t *header);
+http_output_stream_t *http_output_stream_new (hsocket_t sock,
+ hpair_t * header);
/**
@@ -226,7 +226,7 @@ http_output_stream_t *http_output_stream_new(hsocket_t sock, hpair_t *header);
@param stream the stream to free.
*/
-void http_output_stream_free(http_output_stream_t *stream);
+void http_output_stream_free (http_output_stream_t * stream);
/**
@@ -240,8 +240,8 @@ void http_output_stream_free(http_output_stream_t *stream);
<BR>HSOCKET_ERROR_NOT_INITIALIZED
<BR>HSOCKET_ERROR_SEND
*/
-herror_t http_output_stream_write(http_output_stream_t *stream,
- const byte_t *bytes, int size);
+herror_t http_output_stream_write (http_output_stream_t * stream,
+ const byte_t * bytes, int size);
/**
Writes a null terminated string to the stream.
@@ -253,8 +253,8 @@ herror_t http_output_stream_write(http_output_stream_t *stream,
<BR>HSOCKET_ERROR_NOT_INITIALIZED
<BR>HSOCKET_ERROR_SEND
*/
-herror_t http_output_stream_write_string(http_output_stream_t *stream,
- const char *str);
+herror_t http_output_stream_write_string (http_output_stream_t * stream,
+ const char *str);
/**
@@ -267,12 +267,6 @@ herror_t http_output_stream_write_string(http_output_stream_t *stream,
<BR>HSOCKET_ERROR_NOT_INITIALIZED
<BR>HSOCKET_ERROR_SEND
*/
-herror_t http_output_stream_flush(http_output_stream_t *stream);
+herror_t http_output_stream_flush (http_output_stream_t * stream);
#endif
-
-
-
-
-
-