Esempio n. 1
0
void HTTPRequestHandler::handleRequest()
{
    int err = 0;
    
    switch (msg.request) {
        case HTTP_RT_GET:
            INFO("Dispatching GET Request.");
            err = handleGetRequest();
            break;
            
        case HTTP_RT_POST:
            INFO("Dispatching POST request.");
            err = handlePostRequest();
            break;
            
        case HTTP_RT_PUT:
            INFO("Dispatching PUT request.");
            err = handlePutRequest();
            break;
            
        default:
            INFO("Error in handleRequest, unhandled request type.");
            err = HTTP_NotImplemented;
            break;
    }
    
    //  if any of these functions returns a negative number, call the error handler
    if (err > 0) {
        handleError(err);
    }        
}
Esempio n. 2
0
uint16_t handleRequest(char* req, cSocket* sock) {
	if(req == NULL || sock == NULL)
		return -1;
		
	if(strlen(req) == 0)
		return -1;

	// init buffer for requests
	char buffer[1024];
	bzero(buffer,1024);
	uint16_t offset = 0;
	uint16_t bufferoffset = 0;
	
	while(offset < strlen(req) && req[offset] != '\0') {
		// copy request to buffer
		buffer[bufferoffset] = req[offset];
		
		// if string is ended
		if(req[offset] == '\n' || req[offset] == '\0') {
			buffer[bufferoffset] = '\0';
			// check what request is it and create header for request
			if(preg_match(buffer,"^GET[ ](.+)$") == 0) {
				uint16_t retcode = handleGetRequest(buffer,sock);
				if(retcode != HTTP_OK) forgeHeader(retcode,sock,"");
				return retcode;
			}
			else if(preg_match(buffer,"^POST[ ](.+)$") == 0) {
				uint16_t retcode = handlePostRequest(buffer,sock);
				if(retcode != HTTP_OK) forgeHeader(retcode,sock,"");
				return retcode;
			}
			else if(preg_match(buffer,"^PUT[ ](.+)$") == 0) {
				uint16_t retcode = handlePutRequest(buffer,sock);
				if(retcode != HTTP_OK) forgeHeader(retcode,sock,"");
				return retcode;
			}
			else {
				forgeHeader(HTTP_ERROR_NOT_IMPLEMENTED,sock,"");
				return HTTP_ERROR_NOT_IMPLEMENTED;
			}
			bzero(buffer,1024);
			bufferoffset = 0;
		}
		else
			bufferoffset++;
		
		offset++;
	}
	
	return 0;
}