aboutsummaryrefslogtreecommitdiff
path: root/dep/gsoap/httpget.c
diff options
context:
space:
mode:
Diffstat (limited to 'dep/gsoap/httpget.c')
-rw-r--r--dep/gsoap/httpget.c277
1 files changed, 0 insertions, 277 deletions
diff --git a/dep/gsoap/httpget.c b/dep/gsoap/httpget.c
deleted file mode 100644
index 34eb3960e64..00000000000
--- a/dep/gsoap/httpget.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- httpget.c
-
- gSOAP HTTP GET plugin.
-
- See instructions below.
-
-gSOAP XML Web services tools
-Copyright (C) 2000-2008, Robert van Engelen, Genivia Inc., All Rights Reserved.
-This part of the software is released under ONE of the following licenses:
-GPL or the gSOAP public license.
---------------------------------------------------------------------------------
-gSOAP public license.
-
-The contents of this file are subject to the gSOAP Public License Version 1.3
-(the "License"); you may not use this file except in compliance with the
-License. You may obtain a copy of the License at
-http://www.cs.fsu.edu/~engelen/soaplicense.html
-Software distributed under the License is distributed on an "AS IS" basis,
-WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-for the specific language governing rights and limitations under the License.
-
-The Initial Developer of the Original Code is Robert A. van Engelen.
-Copyright (C) 2000-2008 Robert A. van Engelen, Genivia inc. All Rights Reserved.
---------------------------------------------------------------------------------
-GPL license.
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any later
-version.
-
-This program 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 General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-Place, Suite 330, Boston, MA 02111-1307 USA
-
-Author contact information:
-engelen@genivia.com / engelen@acm.org
-
-This program is released under the GPL with the additional exemption that
-compiling, linking, and/or using OpenSSL is allowed.
---------------------------------------------------------------------------------
-
- Compile & link with stand-alone gSOAP server for HTTP GET support.
- Compile & link with gSOAP clients for client-side HTTP GET requests.
-
- Usage (server side):
-
- struct soap soap;
- soap_init(&soap);
- soap_register_plugin_arg(&soap, http_get, http_get_handler);
- ...
- ... = soap_copy(&soap); // copies plugin too but not its data: plugin data is shared since fcopy is not set
- ...
- soap_done(&soap); // detach plugin (calls plugin->fdelete)
-
- You need to define a HTTP GET handling function at the server-side:
-
- int http_get_handler(struct soap*)
-
- which will be called from the plugin upon an HTTP GET request.
- The function should return an error code or SOAP_OK;
- This function should produce a valid HTTP response, for example:
-
- soap_response(soap, SOAP_HTML); // use this to return HTML ...
- soap_response(soap, SOAP_OK); // ... or use this to return a SOAP message
- ...
- soap_send(soap, "<HTML>...</HTML>"); // example HTML
- ...
- soap_end_send(soap);
-
- To get query string key-value pairs within a service routine, use:
-
- char *s;
- s = soap_query(soap);
- while (s)
- {
- char *key = soap_query_key(soap, &s);
- char *val = soap_query_val(soap, &s);
- ...
- }
-
- This will garble soap->path, which contains the HTTP path of the form:
- /path?query
- where path and/or ?query may be absent. The path info is obtained from
- the HTTP request URL: http://domain/path?query
- The URL should not exceed the length of SOAP_TAGLEN. Adjust SOAP_TAGLEN
- in stdsoap2.h if necessary.
-
- Usage (client side):
-
- For SOAP GET method calls, declare the service method with protocol GET:
-
- //gsoap ns service method-protocol: someMethod GET
- int ns__someMethod(... in-params ..., struct ns__someMethodResponse { ... out-params ... } *);
-
- and to make the call in your code:
-
- struct ns__someMethodResponse res;
- soap_call_ns__someMethod(soap, "endpoint", "action", ... in-params ...., &res)
-
- Client code for non-SOAP REST GET:
-
- To use general HTTP GET, for example to retrieve an HTML document, use:
-
- struct soap soap;
- char *buf = NULL;
- size_t len = 0;
- soap_init(&soap);
- if (soap_GET(&soap, endpoint, action)
- || soap_begin_recv(&soap))
- ... connect/recv error ...
- else
- buf = soap_http_get_body(&soap, &len);
- soap_end_recv(&soap);
- ... process data in buf[0..len-1]
- soap_destroy(&soap);
- soap_end(&soap);
- soap_done(&soap);
-
- The soap_http_get_body() function above returns the HTTP body content
- as a string.
-
-*/
-
-#include "httpget.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-const char http_get_id[] = HTTP_GET_ID;
-
-static int http_get_init(struct soap *soap, struct http_get_data *data, int (*handler)(struct soap*));
-static void http_get_delete(struct soap *soap, struct soap_plugin *p);
-static int http_get_parse(struct soap *soap);
-static int http_get_handler(struct soap *soap);
-
-int http_get(struct soap *soap, struct soap_plugin *p, void *arg)
-{
- p->id = http_get_id;
- p->data = (void*)SOAP_MALLOC(soap, sizeof(struct http_get_data));
- /* p->fcopy = http_get_copy; obsolete, see note with http_get_copy() */
- p->fdelete = http_get_delete;
- if (!p->data)
- return SOAP_EOM;
- if (http_get_init(soap, (struct http_get_data*)p->data, (int (*)(struct soap*))arg))
- {
- SOAP_FREE(soap, p->data); /* error: could not init */
- return SOAP_EOM; /* return error */
- }
- return SOAP_OK;
-}
-
-static int http_get_init(struct soap *soap, struct http_get_data *data, int (*handler)(struct soap*))
-{
- data->fparse = soap->fparse; /* save old HTTP header parser callback */
- data->fget = handler;
- data->stat_get = 0;
- data->stat_post = 0;
- data->stat_fail = 0;
- memset((void*)data->hist_min, 0, sizeof(data->hist_min));
- memset((void*)data->hist_hour, 0, sizeof(data->hist_hour));
- memset((void*)data->hist_day, 0, sizeof(data->hist_day));
- soap->fparse = http_get_parse; /* replace HTTP header parser callback with ours */
- soap->fget = http_get_handler; /* replace HTTP GET callback with ours */
- return SOAP_OK;
-}
-
-/* We will share the plugin data among all soap copies created with soap_copy(), so we don't have to define this
-static int http_get_copy(struct soap *soap, struct soap_plugin *dst, struct soap_plugin *src)
-{
- *dst = *src;
- return SOAP_OK;
-}
-*/
-
-static void http_get_delete(struct soap *soap, struct soap_plugin *p)
-{
- (void)soap;
- SOAP_FREE(soap, p->data); /* free allocated plugin data (this function is not called for shared plugin data, but only when the final soap_done() is invoked on the original soap struct) */
-}
-
-static int http_get_parse(struct soap *soap)
-{
-#ifndef WITH_LEAN
- time_t t;
-#ifdef HAVE_LOCALTIME_R
- struct tm T;
-#endif
- struct tm *pT;
-#endif
- struct http_get_data *data = (struct http_get_data*)soap_lookup_plugin(soap, http_get_id);
- if (!data)
- return SOAP_PLUGIN_ERROR;
-#ifndef WITH_LEAN
- time(&t);
-#ifdef HAVE_LOCALTIME_R
- pT = localtime_r(&t, &T);
-#else
- pT = localtime(&t);
-#endif
- /* updates should be in mutex, but we don't mind some inaccuracy in the count to preserve performance */
- data->hist_day[pT->tm_yday]++;
- data->hist_day[(pT->tm_yday + 1) % 365] = 0;
- data->hist_hour[pT->tm_hour]++;
- data->hist_hour[(pT->tm_hour + 1) % 24] = 0;
- data->hist_min[pT->tm_min]++;
- data->hist_min[(pT->tm_min + 1) % 60] = 0;
-#endif
- soap->error = data->fparse(soap); /* parse HTTP header */
- if (!soap->error)
- {
- if (soap->status == SOAP_POST)
- data->stat_post++; /* update should be in mutex, but we don't mind some inaccuracy in the count */
- }
- else
- {
- data->stat_fail++; /* update should be in mutex, but we don't mind some inaccuracy in the count */
- }
- return soap->error;
-}
-
-/******************************************************************************/
-
-static int http_get_handler(struct soap *soap)
-{
- struct http_get_data *data = (struct http_get_data*)soap_lookup_plugin(soap, http_get_id);
- if (!data)
- return SOAP_PLUGIN_ERROR;
- soap->error = data->fget(soap); /* call user-defined HTTP GET handler */
- if (soap->error)
- {
- /* update should be in mutex, but we don't mind some inaccuracy in the count */
- data->stat_fail++;
- return soap->error;
- }
- /* update should be in mutex, but we don't mind some inaccuracy in the count */
- data->stat_get++;
- return SOAP_OK;
-}
-
-/******************************************************************************/
-
-void soap_http_get_stats(struct soap *soap, size_t *stat_get, size_t *stat_post, size_t *stat_fail, size_t **hist_min, size_t **hist_hour, size_t **hist_day)
-{
- struct http_get_data *data = (struct http_get_data*)soap_lookup_plugin(soap, http_get_id);
- if (!data)
- return;
- if (stat_get)
- *stat_get = data->stat_get;
- if (stat_post)
- *stat_post = data->stat_post;
- if (stat_fail)
- *stat_fail = data->stat_fail;
- if (hist_min)
- *hist_min = data->hist_min;
- if (hist_hour)
- *hist_hour = data->hist_hour;
- if (hist_day)
- *hist_day = data->hist_day;
-}
-
-/* deprecated: use soap_GET instead */
-int soap_http_get_connect(struct soap *soap, const char *endpoint, const char *action)
-{
- return soap_GET(soap, endpoint, action);
-}
-
-#ifdef __cplusplus
-}
-#endif
-