summaryrefslogtreecommitdiffstats
path: root/examples/csoap/soapclient.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/csoap/soapclient.c')
-rw-r--r--examples/csoap/soapclient.c301
1 files changed, 180 insertions, 121 deletions
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;
}