summaryrefslogtreecommitdiff
path: root/src/webserver/parse.cpp
blob: 66ef43ba8a471af7f7ddb386edf469dca5f19242 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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;
    }
}