/** * 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); }
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; }