static void server_deleteByIdJSON(http_request_t request, socket_t* client, worker_t** workers) { int id; char* getId = strpbrk(request.uri, "0123456"); if(getId) { id = atoi(getId); if(id<0 || id>6 || worker_getId(workers[id]) == -1) { socket_write_string(client, "<h1>Wrong ID</h1><p><a href=\"/workers/\">All workers</a></p>"); return; } } else { server_notFound(client); return; } char toSend[2000]; char buffer[2000]; sprintf(buffer, "Success!" "Worker %s successfully deleted!", worker_getName(workers[id])); workers[id] = worker_new(); sprintf(toSend, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %i\r\n\r\n" "\n%s", strlen(buffer), buffer); socket_write_string(client, toSend); socket_close(client); }
static void server_getByIdJSON(http_request_t request, socket_t* client, worker_t** workers) { int id; char* getId = strpbrk(request.uri, "0123456"); if(getId) { id = atoi(getId); if(id>6 || id<0 || worker_getId(workers[id]) == -1) { socket_write_string(client, "Wrong ID"); return; } } else { server_notFound(client); return; } char buffer[1000] = ""; char* worker = worker_makeWorkerJSON(workers[id]); sprintf(buffer, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %i\r\n\r\n" "\n%s", strlen(worker)+1, worker); socket_write_string(client, buffer); socket_close(client); }
void server_answerRequest(http_request_t request, socket_t* client, leading_t** leadings){ puts(request.method); puts(request.uri); if(!strcmp(request.uri, "/")){ server_homepage(client); } else if(!strcmp(request.uri, "/leadings") || !strcmp(request.uri, "/leadings/")){ server_sendLeadingsHTML(client, leadings); } else if(strncmp(request.uri, "/api/leadings/", 13) == 0){ if(!strcmp(request.method, "GET")){ server_getByIdJSON(request, client, leadings); } else if(!strcmp(request.method, "DELETE")){ server_deleteByIdJSON(request, client, leadings); } else if(!strcmp(request.method, "POST")){ server_post(request, client, leadings); } } else if(!strcmp(request.uri, "/api/leadings") || !strcmp(request.uri, "/api/leadings/")){ server_sendLeadingsJSON(client, leadings); } else if(!strcmp(request.uri, "/leadings/new/") || !strcmp(request.uri, "/leadings/new")){ server_postHTML(client, leadings); } else if(strncmp(request.uri, "/leadings/delete/", 16) == 0){ server_deleteByIdHTML(request, client, leadings); } else if(strncmp(request.uri, "/leadings/", 9) == 0){ server_getByIdHTML(request, client, leadings); } else server_notFound(client); }
static void server_getByIdHTML(http_request_t request, socket_t* client, worker_t** workers) { int id; char* getId = strpbrk(request.uri, "0123456"); if(getId) { id = atoi(getId); if(id<0 || id>6 || worker_getId(workers[id]) == -1) { socket_write_string(client, "<h1>Wrong ID</h1><p><a href=\"/workers/\">All workers</a></p>"); return; } } else { server_notFound(client); return; } char toSend[2000]; char buffer[2000] = "<head><title>Worker</title></head><h1>Worker</h1><p><a href=\"/workers/\">All workers</a></p><p>"; strcat(buffer, server_getWorkerHTML(workers[id])); strcat(buffer, "</p>"); sprintf(toSend, "HTTP/1.1 200 OK\n" "Content-Type: text/html\n" "Content-Length: %i\r\n\r\n" "\n%s", strlen(buffer), buffer); socket_write_string(client, toSend); socket_close(client); }
static void server_deleteByIdHTML(http_request_t request, socket_t* client, leading_t** leadings){ int id; char* getId = strpbrk(request.uri, "0123456"); if(getId){ id = atoi(getId); if(id < 0 || id > 6 || leading_getId(leadings[id]) == -1){ socket_write_string(client, "<h1>Wrong ID</h1><p><a href=\"/leadings/\">All leadings</a></p>"); return; } }else{ server_notFound(client); return; } char toSend[2000]; char buffer[2000]; sprintf(buffer, "<head><title>Delete</title></head>" "<h1>Success</h1><p><a href=\"/leadings/\">All leadings</a></p>" "<p>Leading %s successfully deleted!</p>", leading_getName(leadings[id])); leading_fill(leadings[id], -1, "qqq", "qqq", "1111-11-11", 0, 0); sprintf(toSend, "HTTP/1.1 200 OK\n" "Content-Type: text/html\n" "Content-Length: %i\r\n\r\n" "\n%s", strlen(buffer), buffer); socket_write_string(client, toSend); socket_close(client); }
void server_addPupil(socket_t * client,list_t * pupils,char * buf,db_t * self){ int status = db_addPupil(self,pupils,buf); if(status == 0){ server_notFound(client); } else if (status == -1){ server_sendWrongInputData(client); } }
void server_answerRequest(http_request_t request, socket_t* client, db_t* base) { puts(request.method); puts(request.uri); if(!strcmp(request.uri, "/")) { server_homepage(client); } else if(!strcmp(request.uri, "/workers") || !strcmp(request.uri, "/workers/")) { server_sendWorkersHTML(client, base); } else if(strncmp(request.uri, "/api/workers/", 13) == 0) { if(!strcmp(request.method, "POST")) { server_post(request, client, base); } else if(!strcmp(request.method, "GET")) { server_getByIdJSON(request, client, base); } else if(!strcmp(request.method, "DELETE")) { server_deleteByIdJSON(request, client, base); } } if(!strcmp(request.uri, "/api/workers") || !strcmp(request.uri, "/api/workers/")) { server_sendWorkersJSON(client, base); } else if(strstr(request.uri, "/api/workers/") == NULL && strstr(request.uri, "/api/workers") != NULL) { server_personalTask(request, client, base); } else if(!strcmp(request.uri, "/workers/new/") || !strcmp(request.uri, "/workers/new")) { server_postHTML(client); } else if(strncmp(request.uri, "/workers/delete/", 16) == 0) { server_deleteByIdHTML(request, client, base); } else if(strncmp(request.uri, "/workers/", 9) == 0) { server_getByIdHTML(request, client, base); } else server_notFound(client); }
int main() { lib_init(); socket_t * server = socket_new(); socket_bind(server, 5000); socket_listen(server); char buf[10000]; char pathBuf[256]; socket_t * client = NULL; while(1) { client = socket_accept(server); socket_read(client, buf, sizeof(buf)); if (strlen(buf) == 0) continue; printf(">> Got request:\n%s\n", buf); http_getPath(buf, pathBuf, sizeof(pathBuf)); http_request_t request = http_request_parse(buf); if (strcmp(request.uri, "/") == 0) { server_homepage(client); } else if (strcmp(request.uri, "/database") == 0) { server_students(client, &request); } else if (strcmp(request.uri, "/info") == 0) { server_info(client); } else if (strcmp(request.uri, "/filename") == 0) { server_file_parse(client); } else { server_notFound(client); } socket_free(client); } socket_free(server); lib_free(); return 0; }
static void server_deleteByIdHTML(http_request_t request, socket_t* client, db_t* base) { int id; int count = db_countWorkers(base); char* getId = strpbrk(request.uri, "0123456789"); if(getId) { id = atoi(getId); if(id<=0 || !db_checkId(base, id)) { socket_write_string(client, "<h1>Wrong ID</h1><p><a href=\"/workers/\">All workers</a></p>"); return; } } else { server_notFound(client); return; } worker_t* worker = db_getWorkerById(base, id); char toSend[2000]; char buffer[2000]; sprintf(buffer, "<head><title>Delete</title></head>" "<h1>Success</h1><p><a href=\"/workers/\">All workers</a></p>" "<p>Worker %s successfully deleted!</p>", worker_getName(worker)); db_deleteWorker(base, id); sprintf(toSend, "HTTP/1.1 200 OK\n" "Content-Type: text/html\n" "Content-Length: %i\r\n\r\n" "\n%s", strlen(buffer), buffer); socket_write_string(client, toSend); socket_close(client); }
static void server_getByIdJSON(http_request_t request, socket_t* client, db_t* base) { int id; char* getId = strpbrk(request.uri, "0123456789"); if(getId) { id = atoi(getId); if(id <= 0 || !db_checkId(base, id)) { socket_write_string(client, "Wrong ID"); return; } } else { server_notFound(client); return; } char buffer[1000] = ""; worker_t* worker = db_getWorkerById(base, id); char* workerJSON = worker_makeWorkerJSON(worker); if(workerJSON == NULL) { socket_write_string(client, "Wrong ID"); return; } sprintf(buffer, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %i\r\n\r\n" "\n%s", strlen(workerJSON)+1, workerJSON); socket_write_string(client, buffer); worker_free(worker); socket_close(client); }
static void server_deleteByIdJSON(http_request_t request, socket_t* client, db_t* base) { int id; char* getId = strpbrk(request.uri, "0123456789"); if(getId) { id = atoi(getId); if(id<=0 || !db_checkId(base, id)) { socket_write_string(client, "{\nWrong ID\n}"); return; } } else { server_notFound(client); return; } worker_t* worker = db_getWorkerById(base, id); char toSend[2000]; char buffer[2000]; sprintf(buffer, "Success!" "Worker %s successfully deleted!", worker_getName(worker)); db_deleteWorker(base, id); sprintf(toSend, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %i\r\n\r\n" "\n%s", strlen(buffer), buffer); socket_write_string(client, toSend); socket_close(client); }
int main() { lib_init(); printf("PORT: %i\n\n", PORT); socket_t * server = socket_new(); socket_bind(server, PORT); socket_listen(server); char buffer[10000]; socket_t * client = NULL; // работа с базой данных const char * dbFile = "ScrumMaster.db"; db_t * db = db_new(dbFile); // работа с базой данных while(1) { client = socket_accept(server); socket_read(client, buffer, sizeof(buffer)); if(strlen(buffer) != 0) { printf(">> Got request:\n%s\n", buffer); http_request_t request = http_request_parse(buffer); if (strcmp(request.uri, "/") == 0) { server_homepage(client); } else if (strcmp(request.uri, "/api/ScrumMasters") == 0) // else if (strncmp(request.uri, "/api/ScrumMasters?", 18) == 0) { server_masters(client, &request, db); } else if (strncmp(request.uri, "/api/ScrumMasters/", 18) == 0) { server_mastersByID(client, &request, db); } else if (strcmp(request.uri, "/ScrumMasters") == 0) { server_mastersHtml(client, &request, db); } else if (strncmp(request.uri, "/ScrumMasters/", 14) == 0) { server_mastersHtmlByID(client, &request, db); } else if (strcmp(request.uri, "/new-ScrumMaster") == 0) { server_mastersHtmlPOST(client, &request, db); } else { server_notFound(client); } } } db_free(db); socket_free(client); socket_free(server); lib_free(); return 0; }