summaryrefslogblamecommitdiff
path: root/webserver/parse.c
blob: 8e54a81dec71217c94ab6ffc1eb884421fc882c4 (plain) (tree)






































































































































                                                                                      
#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;
	}
}