summaryrefslogtreecommitdiff
path: root/misc/src/webserver/parse.c
blob: 8e54a81dec71217c94ab6ffc1eb884421fc882c4 (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
133
134
135
#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;
	}
}