summaryrefslogtreecommitdiffstats
path: root/libcsoap
diff options
context:
space:
mode:
authorGravatar snowdrop2004-11-02 23:09:19 +0000
committerGravatar snowdrop2004-11-02 23:09:19 +0000
commit402e8748593a42cf6d42fda772f207e3e9300a3e (patch)
tree8c87ecde3498891a6de178f2a77dc4d9cf20fe57 /libcsoap
parent15b392f1e21d3dae8f83da401199959e9f0b0db6 (diff)
downloadcsoap-402e8748593a42cf6d42fda772f207e3e9300a3e.tar.gz
csoap-402e8748593a42cf6d42fda772f207e3e9300a3e.tar.bz2
dos2unix
Diffstat (limited to 'libcsoap')
-rw-r--r--libcsoap/soap-client.c116
-rw-r--r--libcsoap/soap-client.h146
-rwxr-xr-xlibcsoap/soap-ctx.c270
-rwxr-xr-xlibcsoap/soap-ctx.h142
-rw-r--r--libcsoap/soap-env.c212
-rw-r--r--libcsoap/soap-env.h28
-rw-r--r--libcsoap/soap-server.c94
-rw-r--r--libcsoap/soap-server.h8
8 files changed, 508 insertions, 508 deletions
diff --git a/libcsoap/soap-client.c b/libcsoap/soap-client.c
index bec9044..fa65864 100644
--- a/libcsoap/soap-client.c
+++ b/libcsoap/soap-client.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-client.c,v 1.13 2004/11/02 22:42:52 snowdrop Exp $
+* $Id: soap-client.c,v 1.14 2004/11/02 23:09:26 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -25,21 +25,21 @@
#include <nanohttp/nanohttp-client.h>
#include <string.h>
-/*--------------------------------- */
+/*--------------------------------- */
static int _block_socket = 0;
static herror_t _soap_client_build_result(hresponse_t *res, SoapEnv **out);
/*--------------------------------- */
-
-void soap_client_block_socket(int block)
-{
- _block_socket = block;
-}
-
-int soap_client_get_blockmode()
-{
- return _block_socket;
-}
-
+
+void soap_client_block_socket(int block)
+{
+ _block_socket = block;
+}
+
+int soap_client_get_blockmode()
+{
+ return _block_socket;
+}
+
herror_t soap_client_init_args(int argc, char *argv[])
@@ -50,10 +50,10 @@ herror_t soap_client_init_args(int argc, char *argv[])
}
-void soap_client_destroy()
-{
- httpc_destroy();
-}
+void soap_client_destroy()
+{
+ httpc_destroy();
+}
static
long _file_get_size(const char* filename)
@@ -69,7 +69,7 @@ long _file_get_size(const char* filename)
return size;
}
-
+
herror_t
soap_client_invoke(SoapCtx *call, SoapCtx** response, const char *url, const char *soap_action)
{
@@ -93,17 +93,17 @@ soap_client_invoke(SoapCtx *call, SoapCtx** response, const char *url, const cha
static int counter=1;
part_t *part;
int file_count=0;
-
+
/* for copy attachments */
- char href[MAX_HREF_SIZE];
-
+ 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();
+ conn = httpc_new();
conn->block = soap_client_get_blockmode();
/* Set soap action */
@@ -123,7 +123,7 @@ soap_client_invoke(SoapCtx *call, SoapCtx** response, const char *url, const cha
if (status != H_OK) {
httpc_free(conn);
- xmlBufferFree(buffer);
+ xmlBufferFree(buffer);
return status;
}
@@ -131,14 +131,14 @@ soap_client_invoke(SoapCtx *call, SoapCtx** response, const char *url, const cha
if (status != H_OK) {
httpc_free(conn);
xmlBufferFree(buffer);
- return status;
+ return status;
}
status = httpc_post_end(conn, &res);
if (status != H_OK) {
httpc_free(conn);
xmlBufferFree(buffer);
- return status;
+ return status;
}
}
else
@@ -152,21 +152,21 @@ soap_client_invoke(SoapCtx *call, SoapCtx** response, const char *url, const cha
if (status != H_OK) {
httpc_free(conn);
xmlBufferFree(buffer);
- return status;
+ return status;
}
status = httpc_mime_next(conn, start_id, "text/xml", "binary");
if (status != H_OK) {
httpc_free(conn);
xmlBufferFree(buffer);
- return status;
+ return status;
}
status = http_output_stream_write(conn->out, content, strlen(content));
if (status != H_OK) {
httpc_free(conn);
xmlBufferFree(buffer);
- return status;
+ return status;
}
@@ -178,7 +178,7 @@ soap_client_invoke(SoapCtx *call, SoapCtx** response, const char *url, const cha
log_error2("Send file failed. Status:%d", status);
httpc_free(conn);
xmlBufferFree(buffer);
- return status;
+ return status;
}
}
@@ -187,7 +187,7 @@ soap_client_invoke(SoapCtx *call, SoapCtx** response, const char *url, const cha
{
httpc_free(conn);
xmlBufferFree(buffer);
- return status;
+ return status;
}
}
@@ -196,58 +196,58 @@ soap_client_invoke(SoapCtx *call, SoapCtx** response, const char *url, const cha
/* Build result */
status = _soap_client_build_result(res, &res_env);
- if (status != H_OK) {
- hresponse_free(res);
- httpc_free(conn);
- return status;
- }
+ if (status != H_OK) {
+ hresponse_free(res);
+ httpc_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;
- }
- }
-
-
+/* 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_free(conn);
+ httpc_free(conn);
return H_OK;
}
-static
+static
herror_t
_soap_client_build_result(hresponse_t *res, SoapEnv** env)
-{
+{
herror_t err;
log_verbose2("Building result (%p)", res);
if (res == NULL)
- return herror_new("_soap_client_build_result",
+ 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",
+ return herror_new("_soap_client_build_result",
GENERAL_INVALID_PARAM, "Empty response from server");
err = soap_env_new_from_stream(res->in, env);
- if (err != H_OK) {
+ if (err != H_OK) {
return err;
}
diff --git a/libcsoap/soap-client.h b/libcsoap/soap-client.h
index 7042aad..e0f79bf 100644
--- a/libcsoap/soap-client.h
+++ b/libcsoap/soap-client.h
@@ -1,73 +1,73 @@
-/******************************************************************
- * $Id: soap-client.h,v 1.8 2004/11/02 22:42:52 snowdrop Exp $
- *
- * CSOAP Project: A SOAP client/server library in C
- * Copyright (C) 2003 Ferhat Ayaz
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Email: ayaz@jprogrammer.net
- ******************************************************************/
-#ifndef cSOAP_CLIENT_H
-#define cSOAP_CLIENT_H
-
-#include <libcsoap/soap-env.h>
-#include <libcsoap/soap-ctx.h>
-
-/**
- Initializes the client side soap engine
-*/
-herror_t soap_client_init_args(int argc, char *argv[]);
-
-
-/**
- Destroy the soap client module
-*/
-void soap_client_destroy();
-
-
-/**
- Establish connection to the soap server and send
- the given envelope.
-
- @param env envelope to send
- @param response the result envelope
- @param url url to the soap server
- @soap_action value for "SoapAction:" in the
- HTTP request header.
-
- @returns H_OK if success
- */
-herror_t soap_client_invoke(SoapCtx *ctx, SoapCtx** response,
- const char *url,
- const char *soap_action);
-
-
-
-/**
- Sets the underlaying socket to use while connecting
- into block mode or not block mode.
- The default mode is always non-blocking mode.
-
- @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();
-
-#endif
-
-
+/******************************************************************
+ * $Id: soap-client.h,v 1.9 2004/11/02 23:09:26 snowdrop Exp $
+ *
+ * CSOAP Project: A SOAP client/server library in C
+ * Copyright (C) 2003 Ferhat Ayaz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Email: ayaz@jprogrammer.net
+ ******************************************************************/
+#ifndef cSOAP_CLIENT_H
+#define cSOAP_CLIENT_H
+
+#include <libcsoap/soap-env.h>
+#include <libcsoap/soap-ctx.h>
+
+/**
+ Initializes the client side soap engine
+*/
+herror_t soap_client_init_args(int argc, char *argv[]);
+
+
+/**
+ Destroy the soap client module
+*/
+void soap_client_destroy();
+
+
+/**
+ Establish connection to the soap server and send
+ the given envelope.
+
+ @param env envelope to send
+ @param response the result envelope
+ @param url url to the soap server
+ @soap_action value for "SoapAction:" in the
+ HTTP request header.
+
+ @returns H_OK if success
+ */
+herror_t soap_client_invoke(SoapCtx *ctx, SoapCtx** response,
+ const char *url,
+ const char *soap_action);
+
+
+
+/**
+ Sets the underlaying socket to use while connecting
+ into block mode or not block mode.
+ The default mode is always non-blocking mode.
+
+ @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();
+
+#endif
+
+
diff --git a/libcsoap/soap-ctx.c b/libcsoap/soap-ctx.c
index 423bcfe..5fe0685 100755
--- a/libcsoap/soap-ctx.c
+++ b/libcsoap/soap-ctx.c
@@ -1,135 +1,135 @@
-/******************************************************************
- * $Id: soap-ctx.c,v 1.3 2004/11/01 15:16:26 snowdrop Exp $
- *
- * CSOAP Project: A SOAP client/server library in C
- * Copyright (C) 2003-2004 Ferhat Ayaz
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Email: ferhatayaz@jprogrammer.net
- ******************************************************************/
-#include <libcsoap/soap-ctx.h>
-
-
-SoapCtx* soap_ctx_new(SoapEnv *env) /* should only be used internally */
-{
- SoapCtx* ctx = (SoapCtx*)malloc(sizeof(SoapCtx));
- ctx->env = env;
- ctx->attachments = NULL;
-
- return ctx;
-}
-
-
-void soap_ctx_add_files(SoapCtx* ctx, attachments_t *attachments)
-{
- part_t *part;
- char href[MAX_HREF_SIZE];
-
- if (attachments==NULL) return;
-
- part = attachments->parts;
- 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)
-{
- 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);
-
- /* generate an 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);
-
- return H_OK;
-}
-
-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) 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)
-{
- if (!ctx) return;
-
- if (ctx->attachments)
- attachments_free(ctx->attachments);
- if (ctx->env)
- soap_env_free(ctx->env);
-
- free(ctx);
-}
-
-
-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);
-
- return H_OK;
-}
-
+/******************************************************************
+ * $Id: soap-ctx.c,v 1.4 2004/11/02 23:09:26 snowdrop Exp $
+ *
+ * CSOAP Project: A SOAP client/server library in C
+ * Copyright (C) 2003-2004 Ferhat Ayaz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Email: ferhatayaz@jprogrammer.net
+ ******************************************************************/
+#include <libcsoap/soap-ctx.h>
+
+
+SoapCtx* soap_ctx_new(SoapEnv *env) /* should only be used internally */
+{
+ SoapCtx* ctx = (SoapCtx*)malloc(sizeof(SoapCtx));
+ ctx->env = env;
+ ctx->attachments = NULL;
+
+ return ctx;
+}
+
+
+void soap_ctx_add_files(SoapCtx* ctx, attachments_t *attachments)
+{
+ part_t *part;
+ char href[MAX_HREF_SIZE];
+
+ if (attachments==NULL) return;
+
+ part = attachments->parts;
+ 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)
+{
+ 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);
+
+ /* generate an 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);
+
+ return H_OK;
+}
+
+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) 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)
+{
+ if (!ctx) return;
+
+ if (ctx->attachments)
+ attachments_free(ctx->attachments);
+ if (ctx->env)
+ soap_env_free(ctx->env);
+
+ free(ctx);
+}
+
+
+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);
+
+ return H_OK;
+}
+
diff --git a/libcsoap/soap-ctx.h b/libcsoap/soap-ctx.h
index a55f18f..a8a8337 100755
--- a/libcsoap/soap-ctx.h
+++ b/libcsoap/soap-ctx.h
@@ -1,71 +1,71 @@
-/******************************************************************
- * $Id: soap-ctx.h,v 1.4 2004/11/01 15:16:26 snowdrop Exp $
- *
- * CSOAP Project: A SOAP client/server library in C
- * Copyright (C) 2003-2004 Ferhat Ayaz
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Email: ferhatayaz@jprogrammer.net
- ******************************************************************/
-#ifndef cSOAP_CTX_H
-#define cSOAP_CTX_H
-
-
-#include <libcsoap/soap-env.h>
-#include <nanohttp/nanohttp-common.h>
-
-
-#define SOAP_ERROR_NO_FILE_ATTACHED 4001
-#define SOAP_ERROR_EMPTY_ATTACHMENT 4002
-
-#define MAX_HREF_SIZE 150
-
-typedef struct _SoapCtx
-{
- SoapEnv *env;
- attachments_t *attachments;
-}SoapCtx;
-
-
-SoapCtx* soap_ctx_new(SoapEnv *env); /* should only be used internally */
-
-/**
- Returns the attached file if any found.
- @param ctx the SoapCtx object which should contain the part
- @param node the xml node which points to a file via the "href" xml attribute
-
- @returns a part_t object of attachment was found, NULL otherwise.
-
-*/
-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);
-
-/* 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);
-/*
-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);
-
-#endif
-
+/******************************************************************
+ * $Id: soap-ctx.h,v 1.5 2004/11/02 23:09:26 snowdrop Exp $
+ *
+ * CSOAP Project: A SOAP client/server library in C
+ * Copyright (C) 2003-2004 Ferhat Ayaz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Email: ferhatayaz@jprogrammer.net
+ ******************************************************************/
+#ifndef cSOAP_CTX_H
+#define cSOAP_CTX_H
+
+
+#include <libcsoap/soap-env.h>
+#include <nanohttp/nanohttp-common.h>
+
+
+#define SOAP_ERROR_NO_FILE_ATTACHED 4001
+#define SOAP_ERROR_EMPTY_ATTACHMENT 4002
+
+#define MAX_HREF_SIZE 150
+
+typedef struct _SoapCtx
+{
+ SoapEnv *env;
+ attachments_t *attachments;
+}SoapCtx;
+
+
+SoapCtx* soap_ctx_new(SoapEnv *env); /* should only be used internally */
+
+/**
+ Returns the attached file if any found.
+ @param ctx the SoapCtx object which should contain the part
+ @param node the xml node which points to a file via the "href" xml attribute
+
+ @returns a part_t object of attachment was found, NULL otherwise.
+
+*/
+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);
+
+/* 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);
+/*
+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);
+
+#endif
+
diff --git a/libcsoap/soap-env.c b/libcsoap/soap-env.c
index 6527028..2018b3d 100644
--- a/libcsoap/soap-env.c
+++ b/libcsoap/soap-env.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-env.c,v 1.9 2004/10/28 10:30:46 snowdrop Exp $
+* $Id: soap-env.c,v 1.10 2004/11/02 23:09:26 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -102,91 +102,91 @@ static
/* ---------------------------------------------------------------------------- */
-
-
-herror_t
-soap_env_new_from_doc (xmlDocPtr doc, SoapEnv **out)
-{
- xmlNodePtr node;
- SoapEnv *env;
-
- 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");
- }
-
- 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!");
- }
-
- env = (SoapEnv *) malloc (sizeof (SoapEnv));
-
- /* 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 ! */
-
- *out = env;
- return H_OK;
-}
-
-
-
-
-herror_t
-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");
-
- doc = xmlParseDoc (BAD_CAST buffer);
- if (doc == NULL)
- 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) {
- xmlFreeDoc (doc);
- }
-
- return err;
-}
-
-
+
+
+herror_t
+soap_env_new_from_doc (xmlDocPtr doc, SoapEnv **out)
+{
+ xmlNodePtr node;
+ SoapEnv *env;
+
+ 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");
+ }
+
+ 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!");
+ }
+
+ env = (SoapEnv *) malloc (sizeof (SoapEnv));
+
+ /* 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 ! */
+
+ *out = env;
+ return H_OK;
+}
+
+
+
+
+herror_t
+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");
+
+ doc = xmlParseDoc (BAD_CAST buffer);
+ if (doc == NULL)
+ 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) {
+ xmlFreeDoc (doc);
+ }
+
+ return err;
+}
+
+
herror_t
soap_env_new_with_fault (fault_code_t faultcode,
const char *faultstring,
const char *faultactor, const char *detail, SoapEnv **out)
{
xmlDocPtr doc;
- herror_t err;
-
+ 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");
-
- err = soap_env_new_from_doc (doc, out);
- if (err != H_OK) {
- xmlFreeDoc (doc);
- }
-
- return err;
+ 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) {
+ xmlFreeDoc (doc);
+ }
+
+ return err;
}
@@ -199,20 +199,20 @@ 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))
@@ -263,29 +263,29 @@ soap_env_new_with_method (const char *urn, const char *method, SoapEnv **out)
#endif
}
-
- env = xmlParseDoc (buffer);
- if (!env)
- return herror_new("soap_env_new_with_method",
- XML_ERROR_PARSE, "Can not parse xml");
+
+ env = xmlParseDoc (buffer);
+ if (!env)
+ return herror_new("soap_env_new_with_method",
+ XML_ERROR_PARSE, "Can not parse xml");
return soap_env_new_from_doc (env, out);
}
-
-
+
+
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;
+ 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 0;
+
+ readed = http_input_stream_read(in, buffer, len);
+ if (readed == -1)
+ return 0;
return readed;
}
@@ -296,21 +296,21 @@ int _soap_env_xml_io_close(void *ctx)
return 0;
}
-
+
herror_t
soap_env_new_from_stream(http_input_stream_t *in, SoapEnv **out)
{
- xmlDocPtr doc;
+ 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",
+
+ 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;
+ err = soap_env_new_from_doc (doc, out);
+ return err;
}
diff --git a/libcsoap/soap-env.h b/libcsoap/soap-env.h
index 58af136..523438d 100644
--- a/libcsoap/soap-env.h
+++ b/libcsoap/soap-env.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-env.h,v 1.8 2004/10/28 10:30:46 snowdrop Exp $
+ * $Id: soap-env.h,v 1.9 2004/11/02 23:09:26 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -71,7 +71,7 @@ typedef struct _SoapEnv
</pre>
- */
+ */
herror_t
soap_env_new_with_fault(fault_code_t faultcode,
const char *faultstring,
@@ -85,8 +85,8 @@ soap_env_new_with_fault(fault_code_t faultcode,
@param urn The urn of the soap service to invoke
@param method The method name of the soap service
- @param out the result envelope out parameter like follows
- @returns H_OK if success
+ @param out the result envelope out parameter like follows
+ @returns H_OK if success
<pre>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="..." SOAP-ENV:encoding="..."
@@ -103,7 +103,7 @@ soap_env_new_with_fault(fault_code_t faultcode,
</pre>
*/
-herror_t
+herror_t
soap_env_new_with_method(const char *urn, const char *method, SoapEnv **out);
@@ -118,8 +118,8 @@ soap_env_new_with_method(const char *urn, const char *method, SoapEnv **out);
@param req The request object. A response object will be created
to this request.
- @param out the result envelope out paramter like follows
- @returns H_OK if success
+ @param out the result envelope out paramter like follows
+ @returns H_OK if success
<pre>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="..." SOAP-ENV:encoding="..."
@@ -144,8 +144,8 @@ herror_t soap_env_new_with_response(SoapEnv *req,SoapEnv **out);
Creates an envelope from a given libxml2 xmlDoc
pointer.
- @param doc the xml document pointer
- @param out the output envelope object
+ @param doc the xml document pointer
+ @param out the output envelope object
@returns H_OK if success
*/
@@ -157,18 +157,18 @@ herror_t soap_env_new_from_doc(xmlDocPtr doc, SoapEnv **out);
The string must be in xml format.
@param buffer The string to parse into a envelope.
- @param out the output envelope object
+ @param out the output envelope object
@returns H_OK if success
*/
herror_t soap_env_new_from_buffer(const char* buffer,SoapEnv **out);
/**
- Create an envelope from input stream
+ Create an envelope from input stream
- @param in the input stream object to read from
- @param out the output envelope object
- @returns H_OK if success
+ @param in the input stream object to read from
+ @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);
diff --git a/libcsoap/soap-server.c b/libcsoap/soap-server.c
index 8313eb8..2ebefef 100644
--- a/libcsoap/soap-server.c
+++ b/libcsoap/soap-server.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-server.c,v 1.8 2004/11/02 22:42:52 snowdrop Exp $
+* $Id: soap-server.c,v 1.9 2004/11/02 23:09:26 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -100,7 +100,7 @@ void soap_server_destroy()
free(node->context);
free(node);
node = tmp;
- }
+ }
httpd_destroy();
}
@@ -114,7 +114,7 @@ void soap_server_entry(httpd_conn_t *conn, hrequest_t *req)
SoapCtx *ctx, *ctxres;
SoapRouter *router;
SoapService *service;
- SoapEnv *env;
+ SoapEnv *env;
herror_t err;
if (req->method != HTTP_REQUEST_POST) {
@@ -128,15 +128,15 @@ void soap_server_entry(httpd_conn_t *conn, hrequest_t *req)
}
- 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;
- }
+ 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) {
@@ -192,20 +192,20 @@ void soap_server_entry(httpd_conn_t *conn, hrequest_t *req)
return;
} else {
- log_verbose2("func: %p", service->func);
+ 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;
- }
+ 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) {
@@ -289,37 +289,37 @@ static
void _soap_server_send_fault(httpd_conn_t *conn, hpair_t *header,
const char* errmsg)
{
- SoapEnv *envres;
- herror_t err;
+ 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 = 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);
+ "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);
+ _soap_server_send_env(conn->out, envres);
}
}
diff --git a/libcsoap/soap-server.h b/libcsoap/soap-server.h
index 62d136c..5290642 100644
--- a/libcsoap/soap-server.h
+++ b/libcsoap/soap-server.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-server.h,v 1.4 2004/10/28 10:30:46 snowdrop Exp $
+ * $Id: soap-server.h,v 1.5 2004/11/02 23:09:26 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -34,9 +34,9 @@
<TABLE border=1>
<TR><TH>Argument</TH><TH>Description</TH></TR>
- <TR><TD>-NHTTPport [port]</TD><TD>Port to listen (default: 10000)</TD></TR>
- <TR><TD>-NHTTPmaxconn [num]</TD><TD>Maximum thread connections</TD></TR>
- <TR><TD>-NHTTPlog [logfilename]</TD><TD>logfile</TD></TR>
+ <TR><TD>-NHTTPport [port]</TD><TD>Port to listen (default: 10000)</TD></TR>
+ <TR><TD>-NHTTPmaxconn [num]</TD><TD>Maximum thread connections</TD></TR>
+ <TR><TD>-NHTTPlog [logfilename]</TD><TD>logfile</TD></TR>
</TABLE>
@param argc commandline arg count