diff options
Diffstat (limited to 'src/webserver/parse.cpp')
-rw-r--r-- | src/webserver/parse.cpp | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/src/webserver/parse.cpp b/src/webserver/parse.cpp new file mode 100644 index 0000000..66ef43b --- /dev/null +++ b/src/webserver/parse.cpp @@ -0,0 +1,132 @@ +#include <stdlib.h> + +char filtered_query[2000]; +char rdata[500]; +char param_n[500]; +char param_d[500]; + +char *get_query (char *inquery) +{ + memset (filtered_query, 0x0, 2000); + sscanf (inquery, "GET %s %[$]", filtered_query); + return (filtered_query); +} + +void web_send (int sockin, char *in_data) +{ + send (sockin, in_data, strlen (in_data), 0); +} + +//THIS IS BAD CODE BE CAREFULL WITH IT! +//Watch out for buffer overflow... +//When using please make sure to check the string size. + +//Also note: +//I take no pride in this code, it is a really bad way of doing this... +char *get_param (char in_string[500], char swhat[500]) +{ + int i = 0; + int marker, iswitch, pint, dint; + char flux[500]; + memset (flux, 0x0, 500); + + //Get the path of out "page" + if (swhat == 0) + { + //while i is not equal to array size + while (i != 500) + { + //if there is a question mark, halt! + if (in_string[i] == '?') + { + i = 499; + } + else + rdata[i] = in_string[i]; + + i++; + } + return rdata; + } + else //so, we want a param... + { + //calculate where param begins + while (i != 500) + { + if (in_string[i] == '?') + { + marker = i + 1; + i = 499; + } + i++; + } + + i = 0; + + //keep morons from trying to crash this + if ((marker > 500) || (marker < 1)) + marker = 500; + + while (marker != 500) + { + if ((in_string[marker] != '&') && (in_string[marker] != '\0')) + { + flux[i] = in_string[marker]; + i++; + } + else + { + + //we have a param, now we must dig through it + + //clear temp vars + memset (param_n, 0x0, 500); + memset (param_d, 0x0, 500); + iswitch = 0; + pint = 0; + dint = 0; + i = 0; + + //split result into param_n and param_d + while (i != 500) + { + if ((flux[i] != '=') && (flux[i] != '\0')) + { + if (iswitch == 0) + { + param_n[pint] = flux[i]; + pint++; + } + else + { + param_d[dint] = flux[i]; + dint++; + } + } + else + { + iswitch = 1; + } + if (flux[i] == '\0') + i = 499; + + i++; + } + + if (strcmp (param_n, swhat) == 0) + { + return param_d; + } + + i = 0; + } + + if (in_string[marker] == '\0') + { + marker = 499; + } + marker++; + } + return 0; + } +} |