Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Returns MIME type for supported extensions, else NULL.
- */
- const char* lookup(const char* path)
- {
- // char pointer to find dot
- char* dot_ptr;
- // array to store file type extension
- char ext[6];
- int i = 0;
- for(dot_ptr = strrchr(path,'.'); *dot_ptr != '\0'; dot_ptr++)
- {
- ext[i] = *dot_ptr;
- i++;
- }
- if(strcasecmp(".css", ext) == 0)
- return "text/css";
- else if(strcasecmp(".html", ext) == 0)
- return "text/html";
- else if(strcasecmp(".gif", ext) == 0)
- return "image/gif";
- else if(strcasecmp(".ico", ext) == 0)
- return "image/x-icon";
- else if(strcasecmp(".jpg", ext) == 0)
- return "image/jpeg";
- else if(strcasecmp(".js", ext) == 0)
- return "text/javascript";
- else if(strcasecmp(".php", ext) == 0)
- return "text/x-php";
- else if(strcasecmp(".png", ext) == 0)
- return "image/png";
- else
- return NULL;
- }
- /**
- * Parses a request-line, storing its absolute-path at abs_path
- * and its query string at query, both of which are assumed
- * to be at least of length LimitRequestLine + 1.
- */
- bool parse(const char* line, char* abs_path, char* query)
- {
- char* ptr_line;
- // counter for space
- int sp_count = 0;
- for(ptr_line = strchr(line,'G'); *ptr_line != 13; ptr_line++) // 13 = CR
- {
- if(*ptr_line == 32) // equals to space
- sp_count++;
- }
- if(sp_count != 2)
- {
- error(400);
- return false;
- }
- char get[] = "GET ";
- // compare 3 character between line and get
- if(strncmp(get, line, 4) != 0)
- {
- error(405);
- return false;
- }
- // pointer for first space
- char* sp_ptr;
- sp_ptr = strchr(line, 32);
- sp_ptr++;
- if(*sp_ptr != '/')
- {
- error(501);
- return false;
- }
- while(*sp_ptr != 32) // space
- {
- if(*sp_ptr == 34) // double quotation
- {
- error(400);
- return false;
- }
- sp_ptr++;
- }
- // one character forward
- sp_ptr++;
- char http[] = "HTTP/1.1";
- if(strncmp(sp_ptr, http, 8) != 0)
- {
- error(505);
- return false;
- }
- char ab_pass[LimitRequestLine+1];
- int i = 0;
- char* slash_ptr;
- slash_ptr = strchr(line, '/');
- while(*slash_ptr != 32) // 32 = space
- {
- ab_pass[i] = *slash_ptr;
- i++;
- slash_ptr++;
- }
- strcpy(abs_path, ab_pass);
- //array to store query
- char qu[LimitRequestLine+1];
- //pointer of ?
- char* quest_ptr = strchr(line, '?');
- if(quest_ptr == NULL)
- qu[0] = '\0';
- //one byte forward
- quest_ptr++;
- int index = 0;
- if(*quest_ptr == 32) // 32 = space
- qu[0] = '\0';
- else
- {
- while(*quest_ptr != 32)
- {
- qu[index] = *quest_ptr;
- index++;
- quest_ptr++;
- }
- }
- strcpy(query, qu);
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement