summaryrefslogtreecommitdiffstats
path: root/src/soap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/soap.c')
-rw-r--r--src/soap.c157
1 files changed, 0 insertions, 157 deletions
diff --git a/src/soap.c b/src/soap.c
deleted file mode 100644
index 8a8d245..0000000
--- a/src/soap.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/* Asterisk Manager Proxy
- Copyright (c) 2005 David C. Troy <dave@popvox.com>
-
- This program is free software, distributed under the terms of
- the GNU General Public License.
-
- HTTP Input Handler
-*/
-
-#include "astmanproxy.h"
-
-int ParseHTTPInput(char *buf, struct message *m) {
- char *n, *v;
-
- n = buf;
- while ( (v = strstr(n, "=")) ) {
- v += 1;
- debugmsg("n: %s, v: %s", n, v);
- strncat(m->headers[m->hdrcount], n, v-n-1);
- strcat(m->headers[m->hdrcount], ": ");
-
- if ( (n = strstr(v, "&")) ) {
- n += 1;
- } else {
- n = (v + strlen(v) + 1);
- }
- strncat(m->headers[m->hdrcount], v, n-v-1);
- debugmsg("got hdr: %s", m->headers[m->hdrcount]);
- m->hdrcount++;
- }
-
- return (m->hdrcount > 0);
-}
-
-int HTTPHeader(struct mansession *s, char *status) {
-
-
- time_t t;
- struct tm tm;
- char date[80];
- char ctype[15], hdr[MAX_LEN];
-
- time(&t);
- localtime_r(&t, &tm);
- strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %z", &tm);
-
- if ( !strcasecmp("xml", s->output->formatname) )
- sprintf(ctype, "text/xml");
- else
- sprintf(ctype, "text/plain");
-
- if (!strcmp("200 OK", status) )
- sprintf(hdr,
- "HTTP/1.1 %s\r\n"
- "Date: %s\r\n"
- "Content-Type: %s\r\n"
- "Connection: close\r\n"
- "Server: %s/%s\r\n\r\n", status,
- date, ctype, PROXY_BANNER, PROXY_VERSION);
- else
- sprintf(hdr,
- "HTTP/1.1 %s\r\n"
- "Date: %s\r\n"
- "Status: %s\r\n"
- "Server: %s/%s\r\n\r\n", status, date, status, PROXY_BANNER, PROXY_VERSION);
-
- pthread_mutex_lock(&s->lock);
- s->inputcomplete = 1;
- ast_carefulwrite(s->fd, hdr, strlen(hdr), s->writetimeout);
- pthread_mutex_unlock(&s->lock);
- debugmsg("http header: %s", hdr);
-
- return 0;
-}
-
-int _read(struct mansession *s, struct message *m) {
-
- /* Note: No single line may be longer than MAX_LEN/s->inbuf, as per get_input */
- /* No HTTP Input may be longer than BUFSIZE */
-
- char line[MAX_LEN], method[10], formdata[MAX_LEN], status[15];
- int res, clength = 0;
-
- memset(method, 0, sizeof method);
- memset(formdata, 0, sizeof formdata);
- memset(status, 0, sizeof status);
-
- /* for http, don't do get_input forever */
- for (;;) {
-
- if (s->inputcomplete && !s->outputcomplete)
- continue;
- else if (s->inputcomplete && s->outputcomplete)
- return -1;
-
- memset(line, 0, sizeof line);
- res = get_input(s, line);
- debugmsg("res=%d, line: %s",res, line);
-
- if (res > 0) {
- debugmsg("Got http: %s", line);
-
- if ( !clength && !strncasecmp(line, "Content-Length: ", 16) )
- clength = atoi(line+16);
-
- if (!*method) {
- if ( !strncmp(line,"POST",4) ) {
- strncpy(method, line, 4);
- } else if ( !strncmp(line,"GET",3)) {
- if ( strlen(line) > 14 ) {
- /* GET / HTTP/1.1 ---- this is bad */
- /* GET /?Action=Ping&ActionID=Foo HTTP/1.1 */
- strncpy(method, line, 3);
- memcpy(formdata, line+6, strstr(line, " HTTP")-line-6);
- sprintf(status, "200 OK");
- } else
- sprintf(status, "501 Not Implemented");
- }
- }
- } else if (res == 0) {
- if (*method && !*formdata) {
- if ( !strcasecmp(method, "POST") && clength && s->inlen==clength) {
- pthread_mutex_lock(&s->lock);
- strncpy(formdata, s->inbuf, clength);
- s->inlen = 0;
- pthread_mutex_unlock(&s->lock);
- sprintf(status, "200 OK");
- }
- }
- }
-
- if (res < 0)
- break;
-
- if (*status) {
- HTTPHeader(s, status);
-
- /* now, let's transform and copy into a standard message block */
- if (!strcmp("200 OK", status) ) {
- res = ParseHTTPInput(formdata, m);
- return res;
- } else {
- pthread_mutex_lock(&s->lock);
- s->outputcomplete = 1;
- pthread_mutex_unlock(&s->lock);
- return 0;
- }
- }
- }
- return -1;
-}
-
-int _autodisconnect() {
- return 1;
-}
-
-/* We do not define a _write or _onconnect method */