Esempio n. 1
0
/**
 * Send an error message
 * @param res HttpResponse object
 * @param code Error Code to lookup and send
 * @param msg Optional error message (may be NULL)
 */
void send_error(HttpResponse res, int code, const char *msg) {
  char server[STRLEN];
  const char *err= get_status_string(code);

  reset_response(res);
  set_content_type(res, "text/html");
  set_status(res, code);
  StringBuffer_append(res->outputbuffer,
	   "<html><head><title>%d %s</title></head>"\
	   "<body bgcolor=#FFFFFF><h2>%s</h2>%s<p>"\
	   "<hr><a href='%s'><font size=-1>%s</font></a>"\
	   "</body></html>\r\n",
	    code, err, err, msg?msg:"", SERVER_URL, get_server(server, STRLEN));
  DEBUG("HttpRequest error: %s %d %s\n", SERVER_PROTOCOL, code, msg ? msg : err);
}
Esempio n. 2
0
int main(int argc, char *argv[]) {
	int port = 1220;
	if (argc > 1) 
		port = atoi(argv[1]);

	int fd = socket(AF_INET, SOCK_STREAM, 0);
	int flags = 1;
	setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&flags, sizeof(flags));
	setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void *)&flags, sizeof(flags));

	struct sockaddr_in addr;
	memset(&addr, 0, sizeof(addr));
	addr.sin_family = AF_INET;
	addr.sin_port = htons(port);
	addr.sin_addr.s_addr = htonl(INADDR_ANY);

	if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
		perror("bind()");
		if(fd > 0) close(fd);
		exit(1);
	}

	if (listen(fd, 1024) < 0) {
		perror("listen()");
		exit(1);
	}

	RespRequest *req = create_request(BUF_SIZE);
	RespResponse *res = create_response(BUF_SIZE);
	while (1) {
		reset_request(req);
		reset_response(res);	

		socklen_t addr_len = sizeof(addr);
		int cfd = accept(fd, (struct sockaddr*)&addr, &addr_len);
		if (cfd < 0) {
			perror("accept()");
			continue;
		}
		char buf[1024];
		int rnum = read(cfd,buf,sizeof(buf));
		
		if (decode_request(req, buf, rnum) == 0 && 
			(req->state == OK || req->state == PART_OK) ){
			if (req->argc > 1 && strncmp(request_argv(req,0), "add", 3) == 0) {
				int total = 0;
				for (int i = 1; i < req->argc; i++)
					total += atoi(request_argv(req,i));
				encode_response_integer(res, total);
			}
			else {
				encode_response_status(res,0,"ERR unknown command");
			}
		}
		else {
			encode_response_status(res,0,"ERR decode command fail");
		}
		write(cfd, res->buf, res->used_size);
		close(cfd);
	}
	destroy_request(req);
	destroy_response(res);

	close(fd);
	return 0;
}
int main(int argc, char *argv[])
{
	/*check if the directory is provided by the user*/

	if (argc == 3)
	{
		struct dirent *dirpent;
		DIR *dirp;
		dirp= opendir(argv[1]);
		if(dirp)
		{
			/*constructing structure objects*/
			http_response_t *response=(http_response_t *)malloc(sizeof(http_response_t) );
			http_request_t *request=(http_request_t *)malloc(sizeof(http_request_t) );
			/*getting first string*/
			//	char *loc = (char*)malloc(PATH_MAX) ;
			struct sockaddr_in sockaddr;
			int sockfd =0, newfd =0, pid;
			char sendbuff[PATH_MAX];FILE * fp; FILE *fwrite;
			//	printf("first\n");
			sockfd = socket(AF_INET,SOCK_STREAM,0);
			memset(&sockaddr,0,sizeof(sockaddr));
			memset(&sendbuff,0,sizeof(sendbuff));

			sockaddr.sin_family = AF_INET;
			sockaddr.sin_port = htons(atoi(argv[2]));
			sockaddr.sin_addr.s_addr = INADDR_ANY;
			if(bind(sockfd, ( struct sockaddr*) &sockaddr,sizeof(sockaddr)) == -1)
				perror("bind");

			if(listen(sockfd,10) == -1)
				perror("listen");
			while(1)
			{
				newfd=accept(sockfd,(struct sockaddr *) NULL,NULL);
				if (newfd == -1)
				{
					perror("Accept error:");
				}
				else
				{
					fp = fdopen(newfd,"r");
					if(fp)
					{
						pid =fork();

						if(pid == 0)
						{
							fgets(sendbuff,PATH_MAX,fp);
							nextrequest(request,fp);
							strcpy(response->resource_path,argv[1]);
							parse_string(sendbuff,request,response,newfd);
							reset_response(response);
							close(newfd);
							sleep(1);
							free(request);
							free(response);
							return 0;
						}


						else
						{
							if(waitpid(-1,NULL,WNOHANG)>0);
							close(newfd);

						}


					}
					else
					{
						perror("fp");
					}
					fclose(fp);	
				}
				//   close(newfd);

			}

			close(sockfd);
			free(request);
			free(response); 
		}
		else
		{
			printf("Directory Does not exist.\n");
		}
	}
	else
	{
		printf("Please ONLY  give the Directory location and port number\n");

	}
	int closedir(DIR *dirp); // Closing Directory
	return 0;
}