示例#1
0
static void server_post(http_request_t request, socket_t* client, leading_t** leadings){
    int id = 0;
    int count = leading_leadingsCount(leadings);
    char buffer[2000] ="";
    char* str;
    char* name = http_request_getArg(&request, "name");
    char* surname = http_request_getArg(&request, "surname");
    char* birthdate = http_request_getArg(&request, "birthdate");
    char* experience = http_request_getArg(&request, "experience");
    char* rating = http_request_getArg(&request, "rating");

    if(strlen(name) <= 1 || strlen(surname) <= 1 || strlen(birthdate) <= 1){
        server_send(client, "Name/Surname/Birthday wasn't filled in"
                            "<p><a href=\"/leadings/new/\">Back to POST</a></p>");
        return;
    }

    str = birthdate;

   if(strlen(birthdate) > 10 || str[4] != '-' || str[7] != '-' || isdigit(birthdate[0])==0 || isdigit(experience[0]) == 0 || isdigit(rating[0])==0){
        server_send(client, "Wrong data!"
                    "<p><a href=\"/leadings/new/\">Back to POST</a></p>");
        return;
    }

    if(experience == " ")
        experience = "0";

    if(rating == " ")
        rating = "0.0";

    if(count >= MAX_LEADINGS){
        char fail[] = "Limit of leadings!";
        sprintf(buffer,
            "HTTP/1.1 404 \n"
            "Content-Type: text\n"
            "Content-Length: %i\r\n\r\n"
            "\n%s", strlen(fail), fail);

        socket_write_string(client, buffer);
        socket_close(client);
        return;
    }

    for(int i = 0; i<MAX_LEADINGS; i++, id++)
    {
        if(leading_getId(leadings[i]) == -1)
            break;
    }

    int exp = atoi(experience);
    double rate = atof(rating);

    leading_fill(leadings[id], id, name, surname, birthdate, exp, rate);
    server_send(client, "Success"
                "<p><a href=\"/leadings/\">All leadings</a></p>");

}
示例#2
0
void db_edit(http_request_t req, db_t* self) {

    puts(req.uri);

    const char * name_b= http_request_getArg(&req,"name");
    const char * surname= http_request_getArg(&req,"surname");
    const char * age_s= http_request_getArg(&req,"age");

    int id=atoi(strpbrk(req.uri,"0123456789"));
    ptrdiff_t nameLeng=(strpbrk(req.uri,"0123456789")-1)-(req.uri+9);
    char *name=malloc(sizeof(char)*nameLeng+1);

    memcpy(name,req.uri+9,nameLeng);
    name[nameLeng]='\0';

    sqlite3_stmt * stmt = NULL;

    stmt=db_getrow(self,name,id);
    int check=0;
    int age;


    for(int i=0; i<strlen(age_s); i++)
        if(!isdigit(age_s[i]))
            check++;
    if(check==0)
        age=atoi(age_s);
    else
    {
        return -1;
    }

    char text[500];
    sprintf(text,"UPDATE %s SET Name = ?, Surname = ?, age = ? WHERE Name = ?;",name);

    sqlite3_stmt * res = NULL;


    sqlite3_prepare_v2(self->db, text, strlen(text), &res, NULL);
    sqlite3_bind_text(res, 1, name_b,strlen(name_b),SQLITE_TRANSIENT);
    sqlite3_bind_text(res, 2, surname,strlen(surname),SQLITE_TRANSIENT);
    sqlite3_bind_int(res, 3, age);
    sqlite3_bind_text(res, 4, (char*)sqlite3_column_text(stmt, 0),strlen((const char*)sqlite3_column_text(stmt, 0)),SQLITE_TRANSIENT);
    int rc = sqlite3_step(res);
    if (SQLITE_ERROR == rc) {
        printf("can't get by id\n");
        exit(1);
    }
    sqlite3_finalize(res);
    sqlite3_finalize(stmt);
}
示例#3
0
int db_insert(db_t * self, char * name,http_request_t req)
 {

    const char * name_b= http_request_getArg(&req,"name");
    const char * surname= http_request_getArg(&req,"surname");
    const char * age_s= http_request_getArg(&req,"age");

    int check=0;
    int age;

    for(int i=0; i<strlen(age_s); i++)
        if(!isdigit(age_s[i]))
            check++;
    if(check==0)
        age=atoi(age_s);
    else
    {
        return -1;
    }

    sqlite3_stmt * stmt = NULL;
    char buf[500];
    sprintf(buf,"INSERT INTO %s (Name,Surname,age) VALUES(?, ?, ?);",name);
    sqlite3_prepare_v2(self->db, buf, strlen(buf), &stmt, 0);
    sqlite3_bind_text(stmt, 1,name_b, strlen(name_b),SQLITE_TRANSIENT);
    sqlite3_bind_text(stmt, 2,surname,strlen(surname),SQLITE_TRANSIENT);
    sqlite3_bind_int(stmt, 3, age);

    int rc = sqlite3_step(stmt);

    if (SQLITE_ERROR == rc) {
        printf("can't get by id\n");
        exit(1);
    }

    sqlite3_finalize(stmt);
    return 0;
}
示例#4
0
文件: server.c 项目: gribo4eg/repos1
static void server_post(http_request_t request, socket_t* client, db_t* base)
{
    char buffer[2000] ="";

    char* name = http_request_getArg(&request, "name");
    char* surname = http_request_getArg(&request, "surname");
    char* salary = http_request_getArg(&request, "salary");
    char* year = http_request_getArg(&request, "year");

    if(strlen(name) <= 1 || strlen(surname) <= 1)
    {
        server_send(client, "Name/Surname wasn't filled in"
                            "<p><a href=\"/workers/new/\">Back to POST</a></p>");
        return;
    }

   if(isdigit(salary[0]) == 0 || isdigit(year[0])==0)
    {
        server_send(client, "Wrong data!"
                    "<p><a href=\"/workers/new/\">Back to POST</a></p>");
        return;
    }

    if(salary == " ")
        salary = "0";

    if(year == " ")
        year = "0";

    worker_t* worker = worker_new();
    worker_fill(worker, -1, name, surname, atoi(salary), atoi(year));
    db_insertWorker(base, worker);
    worker_free(worker);
    server_send(client, "Success"
                "<p><a href=\"/workers/\">All workers</a></p>");

}
示例#5
0
文件: server.c 项目: DariaDar/Reposit
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void server_pensioners(socket_t * client, resource_t * lt, http_request_t * req)
{
    char buf[10200] = "";
    if(strcmp(req->method, "GET") == 0)
    {
        cJSON * arr = cJSON_CreateArray();

        for(int i = 0; i < resource_getCnt(lt); i++)
        {
            cJSON * pens = cJSON_CreateObject();
            pensioner_t * ps = resource_getPens(lt, i);
            cJSON_AddItemToObject(pens, "id", cJSON_CreateNumber(pensioner_getID(ps)));
            cJSON_AddItemToObject(pens, "name", cJSON_CreateString(pensioner_getName(ps)));
            cJSON_AddItemToObject(pens, "surname", cJSON_CreateString(pensioner_getSurname(ps)));
            cJSON_AddItemToObject(pens, "year", cJSON_CreateString(pensioner_getYear(ps)));
            cJSON_AddItemToObject(pens, "experience", cJSON_CreateNumber(pensioner_getExperience(ps)));
            cJSON_AddItemToObject(pens, "pension", cJSON_CreateNumber(pensioner_getPension(ps)));
            cJSON_AddItemToArray(arr, pens);
        }
    char * Jtext = cJSON_Print(arr);
    char * textP = textToBuf_JSON(Jtext);

    strcat(buf, textP);
    free(textP);
    }
    else if(strcmp(req->method, "POST") == 0)
    {
        pensioner_t * pens = pensioner_new();
        char * id = (char *)http_request_getArg(req, "id");
        char * name = (char *)http_request_getArg(req, "name");
        char * surname = (char *)http_request_getArg(req, "surname");
        char * birthdate = (char *)http_request_getArg(req, "birthday");
        char * pension = (char *)http_request_getArg(req, "pension");
        char * experience = (char *)http_request_getArg(req, "experience");

        pensioner_set(pens, atoi(id), birthdate, name, surname, atof(pension), atoi(experience));
        resource_add(lt, pens);
        char * Jst = pensioner_toJSON(pens);
        char * pageT = textToBuf_JSON(Jst);
        strcat(buf, pageT);
        free(pageT);
    }

    socket_write_string(client, buf);
    socket_close(client);
}
示例#6
0
void server_newHtmlPupil(socket_t * client,list_t * pupils,char * buf,db_t * db){
     http_request_t req = http_request_parse(buf);
         char * id = (char *)http_request_getArg(&req, "id");
        char * name = (char *)http_request_getArg(&req, "name");
        char * surname = (char *)http_request_getArg(&req, "surname");
        char * score = (char *)http_request_getArg(&req, "score");
        char * Class = (char *)http_request_getArg(&req, "class");
        char * growth = (char *)http_request_getArg(&req,"growth");

//        if(checkInputData(name,surname,birthday,sex,Class,score,year) == 1){
            pupil_t * p = pupil_create();
            pupil_addInfo(p,db_getNewId(db),name,surname, atoi(Class),atof(score),atof(growth));
            printf("%s",pupil_getName(p));
            list_push_back(pupils,p);
            db_addPupil(db,pupils,buf);

            server_sendHtml(client,pupil_getHtml(p,atoi(id)));
 //       }

}
示例#7
0
文件: server.c 项目: Tayum/di0d
//COMMAND:	GET					POST					DELETE						FOR A SINGLE INVESTOR (BY INDEX)
//RETURNS: INVESTOR		MODIFIED INVESTOR		MSG ABOUT SUCCESSFUL DELETING =====OR===== ERROR MSG
void server_investorById(socket_t * client, http_request_t * req, int index) {
	char strbuf[10240];
	//=====GET COMMAND=====
	if (strcmp(req->method, "GET") == 0) {
		char * invJSON = investor_parseToJSON(&investorArray[index]);
		sprintf(strbuf,
			"HTTP/1.1 200 OK\n"
			"Content-Type: application/json\n"
			"Content-Length: %zu\n"
			"Connection: keep-alive\n"
			"\n%s", strlen(invJSON), invJSON);
		free(invJSON);
	}
	//=====POST COMMAND=====
	else if (strcmp(req->method, "POST") == 0) {
		//ID FIELD NOT ALLOWED TO BE MODIFIED!
		//EVERY FIELD IS BRIEFLY CHECKED ON VALIDITY
		//NAME FIELD
		char * str = http_request_getArg(req, "name");
		if (str != NULL && strlen(str) < 25) {
			investorArray[index].name = str;
		}
		//NICKNAME FIELD
		str = http_request_getArg(req, "nickname");
		if (str != NULL && strlen(str) < 25) {
			investorArray[index].nickname = str;
		}
		//SURNAME FIELD
		str = http_request_getArg(req, "surname");
		if (str != NULL && strlen(str) < 25) {
			investorArray[index].surname = str;
		}
		//RATING FIELD
		str = http_request_getArg(req, "rating");
		if (str != NULL && isdigit(str[0]) != 0 && strlen(str) < 7) {
			investorArray[index].rating = atof(str);
		}
		//FIRST INVESTMENT (DATE STRUCT) FIELD
		str = http_request_getArg(req, "firstInvestmentDate");
		if (str != NULL) {
			//CHECKING IF DATA OF EVERY FIELD IS VALID
			if (str[5] != NULL && str[5] == '-' && atoi(str) > 1900 && atoi(str) < 2016) {
				str = strtok(str, "-");
				str = strtok(NULL, "-");
				if (str != NULL && (atoi(str) >= 1 && atoi(str) <= 12)) {
					str = strtok(NULL, "-");
					if (str != NULL && (atoi(str) >= 1 && atoi(str) <= 31)) {
						//ALL DATA IS VALID:
						str = http_request_getArg(req, "firstInvestmentDate");
						//YEAR
						investorArray[index].firstInv.tm_year = atoi(str);
						//MON
						str = strtok(str, "-");
						str = strtok(NULL, "-");
						investorArray[index].firstInv.tm_mon = atoi(str);
						//DAY
						str = strtok(NULL, "-");
						investorArray[index].firstInv.tm_mday = atoi(str);
					}
				}
			}
		}
		//EXPERIENCE FIELD
		str = http_request_getArg(req, "experienceYears");
		if (str != NULL && isdigit(str[0]) != 0 && atoi(str) >= 0) {
			investorArray[index].exp = atoi(str);
		}
		//TOTAL MONEY INVESTED FIELD
		str = http_request_getArg(req, "totalMoneyInvested");
		if (str != NULL && isdigit(str[0]) != 0 && atoi(str) >= 0) {
			investorArray[index].moneyInv = atoi(str);
		}
		//CURRENT INVESTMENT PROJECT FIELD
		str = http_request_getArg(req, "curInvest");
		if (str != NULL && strlen(str) < 100) {
			investorArray[index].curInv = str;
		}

		char * modInvJSON = investor_parseToJSON(&investorArray[index]);

		//PRINTF'ING TO CONSOLE
		printf("New student (instead of %i-th one):\n%s\n", index, modInvJSON);
		//GIVING INFO TO CLIENT
		sprintf(strbuf,
			"HTTP/1.1 200 OK\n"
			"Content-Type: application/json\n"
			"Content-Length: %zu\n"
			"Connection: keep-alive\n"
			"\n%s", strlen(modInvJSON), modInvJSON);
		free(modInvJSON);
	}
	//=====DELETE COMMAND=====
	else if (strcmp(req->method, "DELETE") == 0) {
		investorArray[index] = investor_new();

		//ID FIELD IS KEPT!
		investorArray[index].id = index;

		char * delInvJSON = investor_parseToJSON(&investorArray[index]);
		//PRINTF'ING TO CONSOLE
		printf("Deleted student (%i-th one):\n%s\n", index, delInvJSON);
		//GIVING INFO TO CLIENT
		char * delText = "Student deleted successfully!";
		sprintf(strbuf,
			"HTTP/1.1 200 OK\n"
			"Content-Type: application/json\n"
			"Content-Length: %zu\n"
			"Connection: keep-alive\n"
			"\n%s", strlen(delText), delText);
		free(delInvJSON);
	}
	//=====INVALID COMMAND=====
	else {
		char * errText = "Invalid command!";
		sprintf(strbuf,
			"HTTP/1.1 404 \n"
			"Content-Type: text/html\n"
			"Content-Length: %zu\n"
			"\n%s", strlen(errText), errText);
	}
	socket_write_string(client, strbuf);
	socket_close(client);
}
示例#8
0
void server_POST(http_request_t req,socket_t * clientSocket,lanser** freelanser)
{
    const char * name= http_request_getArg(&req,"name");
    const char * surname= http_request_getArg(&req,"surname");
    const char * age= http_request_getArg(&req,"age");
    const char * date= http_request_getArg(&req,"date");
    const char * salary= http_request_getArg(&req,"salary");

    if(name==NULL || surname==NULL || age ==NULL || date==NULL || salary==NULL)
    {
        socket_write_string(clientSocket,"<body> POST argument/arguments is/are empty<br>"
                                  "<a href=""/Freelancer/"">To Freelancers</a></body>");
        return;
    }

    char buf[1000]="";
    int id;

    if(strpbrk(req.uri,"-0123456789"))
    {
        id=atoi(strpbrk(req.uri,"-0123456789"));
        if(id>9 || id<0)
        {
            socket_write_string(clientSocket,"<body>Id not found<br>"
                                  "<a href=""/Freelancer/"">To Freelancers</a></body>");
            return;
        }
    }
    else
    {
        socket_write_string(clientSocket,"<body>Wrong id<br>"
                                  "<a href=""/Freelancer/"">To Freelancers</a></body>");
        return;
    }

    int check=0;
    int dot=0;

    for(int i=0; i<strlen(age); i++)
        if(!isdigit(age[i]))
        {
            if(age[i]=='.'||dot==0)
                dot++;
            else
                check++;
        }

    for(int i=0; i<strlen(salary); i++)
        if(!isdigit(salary[i]))
            check++;

    for(int i=0; i<4; i++)
        if(!isdigit(date[i]))
            check++;

    if(date[4]!='-')
        check++;

    for(int i=5; i<7; i++)
        if(!isdigit(date[i]))
            check++;

    if(date[7]!='-')
        check++;

    for(int i=8; i<strlen(date); i++)
        if(!isdigit(date[i]))
            check++;

    if(atoi(date+5)>12)
        check++;

    if(dot>1||dot<0)
    {
        socket_write_string(clientSocket,"<body>Invalid POST argument<br>"
                                  "<a href=""/Freelancer/"">To Freelancers</a></body>");
        return;
    }

    if(check==0)
    {
        Freelanser_set(freelanser[id],name,surname,atof(age),date,atoi(salary));

        server_sent(clientSocket, "<body>Post success<br>"
                                  "<a href=\"/Freelancer/\">To Freelancers</a></body>");
    }
    else
        socket_write_string(clientSocket,"<body>Invalid POST argument<br>"
                                  "<a href=\"/Freelancer/\">To Freelancers</a></body>");
}
示例#9
0
void server_musicianById(socket_t * client, http_request_t * req, const char * pathBuf)
{
    const char * pattern = "/musicians/";
    char * c = NULL;
    const char * Text = " \0";
    char strbuf[10240];
    error_t * err = error_t_new ();
    int count = get_size_mus_arr ();
    long musIndex = strtol(pathBuf + strlen(pattern), &c, 10);
    if (musIndex < 0 || musIndex >= count) {
        error_t_add_err(err, NULL, "Wrong Index of musician");
        server_sendJson(client, &err);
        return;
    }
    if (strcmp (req->method, "GET") == 0)
    {
        const char * musJson = musician_toJSON(&musicians_arr[musIndex]);
        sprintf(strbuf,
        "HTTP/1.1 200 OK\n"
        "Content-Type: application/json\n"
        "Content-Length: %zu\n"
        "Connection: keep-alive\n"
        "\n%s", strlen(musJson), musJson);
        free(musJson);
    }
    else
        if (strcmp (req->method, "POST") == 0)
    {
        musicians_arr[musIndex] = musician_empty();
        musicians_arr[musIndex].id = musIndex;
        const char * str = http_request_getArg(req, "name");
        if (strlen(str) > 0 && strlen (str) < 20)
        {
            musicians_arr[musIndex].name = str;
            str = http_request_getArg(req, "surname");
            if (strlen(str) > 0 && strlen (str) < 20)
             {
                musicians_arr[musIndex].surname = str;
                str = http_request_getArg (req, "birthdate");
                if (strlen(str) > 0)
                {
                    if (atoi(str) > 1800 && atoi(str) < 2000)
                    {
                        char text [10] = " ";
                        strcpy(text, str);
                        char * string = strtok(text, "-");
                        string  = strtok(NULL, "-");
                        if (atoi(string) > 0 && atoi (string) < 32)
                        {
                           string = strtok (NULL, "-");
                           if (atoi(string) > 0 && atoi (string) < 13)
                              {
                                  musicians_arr [musIndex].birthdate = http_request_getArg(req, "birthdate");
                                  str = http_request_getArg(req, "year");
                                  if (strlen(str) > 0 && atoi(str) > 1850 && atoi (str) < 2016)
                                   {
                                       musicians_arr[musIndex].year = atoi(str);
                                       str = http_request_getArg (req, "rating");
                                       if (strlen(str) > 0 && atof (str) >= 0.0 && atof (str) <= 5.0)
                                       {
                                          musicians_arr[musIndex].rating = atof (str);
                                          str = http_request_getArg(req, "style");
                                          if (strlen(str) > 0 && strlen (str) < 20)
                                          {
                                              musicians_arr[musIndex].band.style = str;
                                              str = http_request_getArg(req, "role");
                                              if (strlen(str) > 0 && strlen (str) < 20)
                                            {
                                                   musicians_arr[musIndex].band.role = str;
                                                   Text = musician_toJSON(&musicians_arr);
                                                   printf("New musician:\n%s\n", Text);
                                                   sprintf(strbuf,
                                                   "HTTP/1.1 200 OK\n"
                                                   "Content-Type: application/json\n"
                                                   "Content-Length: %zu\n"
                                                   "Connection: keep-alive\n"
                                                   "\n%s", strlen(Text), Text);
                                                   free(Text);
                                            } else
                                            {
                                                error_t_add_err(err, NULL, "Wrong role");
                                                server_sendJson(client, &err);
                                            }
                                          } else
                                            {
                                                error_t_add_err(err, NULL, "Wrong style");
                                                server_sendJson(client, &err);
                                            }
                                       } else
                                        {
                                                error_t_add_err(err, NULL, "Wrong rating");
                                                server_sendJson(client, &err);
                                        }
                                   } else
                                       {
                                                error_t_add_err(err, NULL, "Wrong year of death");
                                                server_sendJson(client, &err);
                                       }
                              } else
                               {
                                                error_t_add_err(err, NULL, "Wrong month of birthdate");
                                                server_sendJson(client, &err);
                                }
                         } else
                         {
                                                error_t_add_err(err, NULL, "Wrong day of birthdate");
                                                server_sendJson(client, &err);
                         }
                    } else
                    {
                                                error_t_add_err(err, NULL, "Wrong year of birthdate");
                                                server_sendJson(client, &err);
                    }
                 } else
                 {
                                                error_t_add_err(err, NULL, "Wrong birthdate ");
                                                server_sendJson(client, &err);
                  }
              } else
                 {
                                                error_t_add_err(err, NULL, "Wrong surname");
                                                server_sendJson(client, &err);
                 }
            } else
            {
                                                error_t_add_err(err, NULL, "Wrong name");
                                                server_sendJson(client, &err);
            }
    } else
     {
        if (strcmp(req->method, "DELETE") == 0)
            {
                 musicians_arr[musIndex] = musician_empty();
		         musicians_arr[musIndex].id = musIndex;
		         if (musicians_arr[musIndex].year == 0)
		         error_t_add_err(err, NULL, "Deleted successfully, no errors");
		         else error_t_add_err (err, NULL, "Deleted unsuccessfully, Error");
                 server_sendJson(client, &err);
        	}
        	else
            {
                error_t_add_err(err, NULL, "Wrong method");
                server_sendJson(client, &err);
            }
    }
    socket_write_string(client, strbuf);
    socket_close(client);
}
示例#10
0
文件: server.c 项目: DariaDar/Reposit
void server_pensionersHtml(socket_t * client, resource_t * lt, http_request_t * req)
{
    char buf[10000] = "";

    if(strcmp(req->method, "GET") == 0)
    {
        char text[4000] = "";
        for(int i = 0; i < resource_getCnt(lt); i++)
        {
            char pageText[300] = "";
            sprintf(pageText, "<a href=\"http://127.0.0.1:5000/pensioners/%i\">%s %s<br></a>\n", pensioner_getID(resource_getPens(lt, i)),
                    pensioner_getName(resource_getPens(lt, i)), pensioner_getSurname(resource_getPens(lt, i)));
            strcat(text, pageText);
        }

        char * pageText = "<a href=\"http://127.0.0.1:5000/new-pensioner\"><br>New pensioner</a>";
        strcat(text, pageText);

        char * textHTML = textToBuf_HTML(text);
        strcat(buf, textHTML);
        free(textHTML);
    }
    else if(strcmp(req->method, "POST") == 0)
    {
        char * id = (char *) http_request_getArg(req, "id");
        char * name = (char *)http_request_getArg(req, "name");
        char * surname = (char *)http_request_getArg(req, "surname");
        char * birthday = (char *)http_request_getArg(req, "birthday");
        char * pension = (char *)http_request_getArg(req, "pension");
        char * experience = (char *)http_request_getArg(req, "experience");

        int ch = check(id, name, surname, birthday, pension, experience, lt);
        char * message;
        switch(ch)
         {
         case 1:
            {
                pensioner_t * pens = pensioner_new();
                pensioner_set(pens, atoi(id), birthday, name, surname, atof(pension), atoi(experience));
                resource_add(lt, pens);
                message = "<h3>Success</h3>"
                "<a href=\"http://127.0.0.1:5000/pensioners\"><br>Back to the list.</a>";
                break;
            }
         case 2:
            {
                message = "<h3 style=\"color:green\">This index is already occupied.</h3>";
                break;
            }
         case 3:
            {
                message = "<h3 style=\"color:green\">Wrong index. Number must be > 0.</h3>";
                break;
            }
         case 4:
            {
                message = "<h3 style=\"color:green\">Wrong data format.</h3>";
                break;
            }
         default:
                message = "<h3 style=\"color:green\">Wrong input or empty field.</h3>";
                break;
         }
            char * textHtml = textToBuf_HTML(message);
            strcat(buf, textHtml);
            free(textHtml);
    }


        socket_write_string(client, buf);
        socket_close(client);
}
示例#11
0
void server_teacherId(socket_t * client, http_request_t * req, int index) {
	char strbuf[10000];
	if (strcmp(req->method, "GET") == 0) {
            for(int i=0;i<5;i++)
            {
                printStruct(&teachers[index]);
                printf("\n");
            }

		char * teachJSON = teacher_parseToJSON(&teachers[index]);
		sprintf(strbuf,
			"HTTP/1.1 200 OK\n"
			"Content-Type: application/json\n"
			"Content-Length: %zu\n"
			"Connection: keep-alive\n"
			"\n%s", strlen(teachJSON), teachJSON);
		free(teachJSON);
	}
	else if (strcmp(req->method, "POST") == 0) {
		char * str = http_request_getArg(req, "firstName");
		if(str==NULL)
        {
             server_error(client);
             return;
        }

		if (str != NULL && strlen(str) < 25) {
            strcpy(teachers[index].firstName,str);
		}
		str = http_request_getArg(req, "lastName");
		if (str != NULL && strlen(str) < 25) {
			  strcpy(teachers[index].lastName,str);
		}
		str = http_request_getArg(req, "id");
		if (str != NULL && isdigit(str[0]) != 0 && strlen(str) < 7) {
			teachers[index].id = atof(str);
		}
		str = http_request_getArg(req, "lessonName");
		if (str != NULL && strlen(str) < 25) {
		     strcpy(teachers[index].teacher_lesson.lessonName,str);
		}
		str = http_request_getArg(req, "average");
		if (str != NULL) {
		    float p = atof(str);
			teachers[index].teacher_lesson.average = p;
		}
		str = http_request_getArg(req, "birthTown");
		if (str != NULL && strlen(str) < 25) {
		     strcpy(teachers[index].idCard.birthTown,str);
		}
		str = http_request_getArg(req, "birthday");
		int size = 10;
		if(str!=NULL)
             size = strlen(str);
        const char tmp[size];
        if(str!=NULL)
            strcpy(tmp,str);
		if (str != NULL) {
			if (str[5] != NULL && str[4] == '-' && atoi(str) > 1900 && atoi(str) < 2016) {
				str = strtok(str, "-");
				str = strtok(NULL, "-");
				if (str != NULL && (atoi(str) >= 1 && atoi(str) <= 12)) {
					str = strtok(NULL, "-");
					if (str != NULL && (atoi(str) >= 1 && atoi(str) <= 31)) {
						str = http_request_getArg(req, "birthday");
						teachers[index].idCard.birthday.tm_year = atoi(str);
						strcpy(str,tmp);
						str = strtok(str, "-");
						str = strtok(NULL, "-");
						teachers[index].idCard.birthday.tm_mon = atoi(str);
						str = strtok(NULL, "-");
						teachers[index].idCard.birthday.tm_mday = atoi(str);
					}
				}
			}
		}


        printStruct(&teachers[index]);
		char * tJSON = teacher_parseToJSON(&teachers[index]);
		printf("New student with id %i , type /teachers/%i to get full info", teachers[index].id,teachers[index].id , tJSON);
		sprintf(strbuf,
			"HTTP/1.1 200 OK\n"
			"Content-Type: application/json\n"
			"Content-Length: %zu\n"
			"Connection: keep-alive\n"
			"\n%s", strlen(tJSON), tJSON);
		free(tJSON);
	}
	else if (strcmp(req->method, "DELETE") == 0) {

         teacher_init(&teachers[index]);
         for(int i=0;i<5;i++)
        {
            printStruct(&teachers[i]);
        }

		char * delTeachJSON = teacher_parseToJSON(&teachers[index]);
		printf("Deleted student (%i-th one):\n%s\n", index, delTeachJSON);
		char * delText = "Student deleted successfully!";
		sprintf(strbuf,
			"HTTP/1.1 200 OK\n"
			"Content-Type: application/json\n"
			"Content-Length: %zu\n"
			"Connection: keep-alive\n"
			"\n%s", strlen(delText), delText);
		free(delTeachJSON);
	}
	else {
		char * errText = "Invalid command!";
		sprintf(strbuf,
			"HTTP/1.1 404 \n"
			"Content-Type: text/html\n"
			"Content-Length: %zu\n"
			"\n%s", strlen(errText), errText);
	}
	socket_write_string(client, strbuf);
	socket_close(client);
}
示例#12
0
void http_request_chooseMethod(http_request_t req, socket_t * clientSocket, pupils_t pupils){
    if(strcmp(req.uri, "/") == 0)
        {
        char msg[MSG_LENGTH];
        sprintf(msg, "<message>\n"
                    "\t<status>ok</status>\n"
                    "\t<text>HELLO, USER!</text>\n"
                    "</message>\n");
        socket_write_string(clientSocket, msg);
        }
    else if (strcmp(req.uri, "/pupils/") == 0)
        {
        char msg[MSG_LENGTH];
        sprintf(msg, "<message>\n"
                    "\t<status>error</status>\n"
                    "\t<text>Not Found</text>\n"
                    "</message>\n");
        socket_write_string(clientSocket, msg);
        }
    else if (strcmp(req.uri, "/pupils") > 0)
        {
        int id = atoi(strtok(req.uri, "/pupils"));
        if(pupils_checkID(pupils, id) == 0)
            {
            if(strcmp(req.method, "GET") == 0)
                {
                if(pupils_pupilByIdToMessage(pupils, id) != 0)
                    {
                        char result[BUFFER_LENGTH];
                        sprintf(result,
                            "HTTP/1.1 200 OK\n"
                            "Content-length: %zu\n"
                            "Content-type: application/xml\n"
                            "\n"
                            "%s\0",
                            strlen(pupils_pupilByIdToMessage(pupils, id)), pupils_pupilByIdToMessage(pupils, id));
                        socket_write_string(clientSocket, result);
                    }
                }
            else if(strcmp(req.method, "POST") == 0)
                {
                    char result[MSG_LENGTH];
                    const char * stName = http_request_getArg(&req, "name");
                    const char * stSurname = http_request_getArg(&req, "surname");
                    const char * stBirthdate = http_request_getArg(&req, "birthdate");
                    const char * stNameForm = http_request_getArg(&req, "nameForm");
                    int stNumberInList = atoi(http_request_getArg(&req, "numberInList"));
                    int stId = atoi(http_request_getArg(&req, "id"));
                    double stScore = atof(http_request_getArg(&req, "score"));
                    if(strlen(stName) == 0 || strlen(stName) > WORD_LENGTH){
                            sprintf(result,
                            "<message>\n"
                            "\t<status>error</status>\n"
                            "\t<text>Invalid name</text>\n"
                            "</message>\n");
                            socket_write_string(clientSocket, result);
                            return 1;
                    } else if(strlen(stSurname) == 0 || strlen(stSurname) > WORD_LENGTH){
                        sprintf(result,
                            "<message>\n"
                            "\t<status>error</status>\n"
                            "\t<text>Invalid surname</text>\n"
                            "</message>\n");
                            socket_write_string(clientSocket, result);
                            return 1;
                    } else if(strlen(stBirthdate) == 0 || strlen(stBirthdate) > WORD_LENGTH){
                        sprintf(result,
                            "<message>\n"
                            "\t<status>error</status>\n"
                            "\t<text>Invalid birthdate</text>\n"
                            "</message>\n");
                            socket_write_string(clientSocket, result);
                            return 1;
                    } else if(strlen(stNameForm) == 0 || strlen(stNameForm) > WORD_LENGTH){
                        sprintf(result,
                            "<message>\n"
                            "\t<status>error</status>\n"
                            "\t<text>Invalid name form</text>\n"
                            "</message>\n");
                            socket_write_string(clientSocket, result);
                            return 1;
                    } else if(stId < 0 || pupils_checkID(pupils, stId) == 0){
                        sprintf(result,
                            "<message>\n"
                            "\t<status>error</status>\n"
                            "\t<text>Invalid id</text>\n"
                            "</message>\n");
                            socket_write_string(clientSocket, result);
                            return 1;
                    } else if(stScore < 0 || stScore > 12.0){
                        sprintf(result,
                            "<message>\n"
                            "\t<status>error</status>\n"
                            "\t<text>Invalid score</text>\n"
                            "</message>\n");
                            socket_write_string(clientSocket, result);
                            return 1;
                    } else if(stNumberInList < 0 || stNumberInList > 50){
                        sprintf(result,
                            "<message>\n"
                            "\t<status>error</status>\n"
                            "\t<text>Invalid number in list</text>\n"
                            "</message>\n");
                            socket_write_string(clientSocket, result);
                            return 1;
                    } else {
                    pupils_changePupil(pupils, id, stId, stName, stSurname, stBirthdate,
                             stScore, stNumberInList, stNameForm);
                       printf("New:\n"
                           "<pupil>\n"
                            "\t<id>%i</id>\n"
                            "\t<name>%s</name>\n"
                            "\t<surname>%s</surname>\n"
                            "\t<birthdate>%s</birthdate>\n"
                            "\t<form nameForm=\"%s\">\n"
                            "\t\t<numberInList>%i</numberInList>\n"
                            "\t</form>\n"
                            "\t<score>%.2f</score>\n"
                            "</pupil>\n\n",
                           stId, stName, stSurname,
                           stBirthdate, stNameForm, stNumberInList, stScore);
                        char res[MSG_LENGTH];
                        sprintf(res, "<pupil>\n"
                                "\t<id>%i</id>\n"
                                "\t<name>%s</name>\n"
                                "\t<surname>%s</surname>\n"
                                "\t<birthdate>%s</birthdate>\n"
                                "\t<form nameForm=\"%s\">\n"
                                "\t\t<numberInList>%i</numberInList>\n"
                                "\t</form>\n"
                                "\t<score>%.2f</score>\n"
                                "</pupil>\n\n",
                               stId, stName, stSurname,
                               stBirthdate, stNameForm, stNumberInList, stScore);
                        sprintf(result,
                                "HTTP/1.1 200 OK\n"
                                "Content-length: %zu\n"
                                "Content-type: application/xml\n"
                                "\n"
                                "%s\0",
                                strlen(res), res);
                        socket_write_string(clientSocket, result);
                        }
                    }
            else if(strcmp(req.method, "DELETE") == 0)
                {
                    pupils_deletePupil(pupils, id);
                    char result_msg[MSG_LENGTH];
                    sprintf(result_msg,
                            "<message>\n"
                            "\t<status>ok</status>\n"
                            "\t<text>Pupil (id%i) has been deleted</text>\n"
                            "</message>\n", id);
                    socket_write_string(clientSocket, result_msg);
                }
            }
            else
                {
                    char result_msg[MSG_LENGTH];
                    sprintf(result_msg,
                            "<message>\n"
                            "\t<status>error</status>\n"
                            "\t<text>Pupil (id%i) not found</text>\n"
                            "</message>\n", id);
                    socket_write_string(clientSocket, result_msg);
                }
        }
    else if (strcmp(req.uri, "/pupils") == 0)
        {
            if(strcmp(req.method, "GET") == 0)
                {
                    char result[10000];
                    sprintf(result,
                        "HTTP/1.1 200 OK\n"
                        "Content-length: %zu\n"
                        "Content-type: application/xml\n"
                        "\n"
                        "%s\0",
                        strlen(pupils_allPupilsToMessage(pupils)), pupils_allPupilsToMessage(pupils));
                    socket_write_string(clientSocket, result);
                }
            else
                {
                    char result_msg[MSG_LENGTH];
                    sprintf(result_msg,
                            "<message>\n"
                            "\t<status>error</status>\n"
                            "\t<text>NOT ALLOWED</text>\n"
                            "</message>\n");
                    socket_write_string(clientSocket, result_msg);
                }
        }
    else
        {
            char result_msg[MSG_LENGTH];
            sprintf(result_msg,
                            "<message>\n"
                            "\t<status>error</status>\n"
                            "\t<text>Not Found</text>\n"
                            "</message>\n");
            socket_write_string(clientSocket, result_msg);
    }
}
void server_POST(http_request_t req, socket_t * clientSocket, sqlite3 * db) {
    const char * name = http_request_getArg(&req, "name");
    const char * birthdate = http_request_getArg(&req, "birthdate");
    const char * years = http_request_getArg(&req, "years");
    const char * rate = http_request_getArg(&req, "rate");
    const char * subjects = http_request_getArg(&req, "subjects");

    if(name == NULL || birthdate == NULL || years == NULL || rate == NULL || subjects == NULL)
    {
        socket_write_string(clientSocket,"<body> POST argument/arguments is/are empty<br>"
                                  "<a href=""/Teacher/"">To Teachers</a></body>");
        return;
    }

    char buf[1000] = "";
    int id;



    int check = 0;
    int dot = 0;

    for(int i = 0; i < strlen(rate); i++)
        if(!isdigit(rate[i]))
        {
            if(rate[i]=='.'||dot==0)
                dot++;
            else
                check++;
        }

    for(int i = 0; i < strlen(years); i++)
        if(!isdigit(years[i]))
            check++;

    for(int i = 0; i < strlen(subjects); i++)
        if(!isdigit(subjects[i]))
            check++;

    for(int i = 0; i < 4; i++)
        if(!isdigit(birthdate[i]))
            check++;

    if(birthdate[4]!='-')
        check++;

    for(int i = 5; i < 7; i++)
        if(!isdigit(birthdate[i]))
            check++;

    if(birthdate[7] != '-')
        check++;

    for(int i = 8; i < strlen(birthdate); i++)
        if(!isdigit(birthdate[i]))
            check++;

    if(atoi(birthdate+5) > 12)
        check++;

    if(dot > 1 || dot < 0)
    {
        socket_write_string(clientSocket,"<body>Invalid POST argument<br>"
                                  "<a href=""/Teacher/"">To Teachers</a></body>");
        return;
    }

    if(check == 0)
    {
        db_insertTeacher(db, name, atof(rate), atoi(subjects), atoi(years),  birthdate);



        socket_write_string(clientSocket, "<body>Post success<br>"
                                  "<a href=\"/Teacher/\">To Teachers</a></body>");
    }
    else
        socket_write_string(clientSocket,"<body>Invalid POST argument<br>"
                                  "<a href=\"/Teacher/\">To Teachers</a></body>");
}
示例#14
0
文件: server.c 项目: lemeshkob/Repo1
void server_mastersHtml(socket_t * client, http_request_t * req, db_t * db)
{
    char buffer[10240] = "";

    if (strcmp(req->method, "GET") == 0)
    {
        char pageText[10240] = "";

        for(int i = 0; i < db_count(db); i++)
        {
            master_t * master = db_getDataById(db, i);

            char text[100] = "";
            sprintf(text, "<a href=\"http://127.0.0.1:5000/ScrumMasters/%i\">%s %s<br></a>\n", i + 1, master_getSurname(master), master_getName(master));
            strcat(pageText, text);

            master_free(master);
        }

        char * text = "<a href=\"http://127.0.0.1:5000/new-ScrumMaster\"><br>New Scrum Master</a>";
        strcat(pageText, text);

        char * textHTML = textToHTML(pageText);
        strcat(buffer, textHTML);
        free(textHTML);
    }
    else if (strcmp(req->method, "POST") == 0)
    {
        char * name = (char *)http_request_getArg(req, "name");
        char * surname = (char *)http_request_getArg(req, "surname");
        char * countK = (char *)http_request_getArg(req, "countK");
        char * countP = (char *)http_request_getArg(req, "countP");

        if(verification(name, surname, countK, countP) == 1)
        {
            db_insertData(db, name, surname, atoi(countK), atoi(countP));

            char pageText[1024] = "";
            sprintf(pageText,
                    "<p>"
                    "Name: %s<br>"
                    "Surname: %s<br>"
                    "CountK: %i<br>"
                    "CountP: %i<br>"
                    "</p>",
                    name, surname,
                    atoi(countK),
                    atoi(countP));

            char * textHTML = textToHTML(pageText);
            strcat(buffer, textHTML);
            free(textHTML);
        }
        else
        {
            char * pageText = "<h3>Wrong input</h3>";
            char * textHTML = textToHTML(pageText);
            strcat(buffer, textHTML);
            free(textHTML);
        }
    }

    socket_write_string(client, buffer);
    socket_close(client);
}
示例#15
0
文件: server.c 项目: lemeshkob/Repo1
void server_masters(socket_t * client, http_request_t * req, db_t * db)
{
    char buffer[10240] = "";

    if (strcmp(req->method, "GET") == 0)
    {
        list_t * masters = list_new();

        char * countK = (char *)http_request_getArg(req, "countK");
        char * countP = (char *)http_request_getArg(req, "countP");

        if(countK != NULL && countP != NULL)
        {
            db_filtration(db, masters, atoi(countK), atoi(countP));
        }
        else
        {
            db_parse(db, masters);
        }

        cJSON * jPageText = cJSON_CreateArray();

        for(int i = 0; i < list_size(masters); i++)
        {
            master_t * sm = list_get(masters, i);

            cJSON * jText = cJSON_CreateObject();
            cJSON_AddItemToObject(jText, "Name", cJSON_CreateString(master_getName(sm)));
            cJSON_AddItemToObject(jText, "Surname", cJSON_CreateString(master_getSurname(sm)));
            cJSON_AddItemToObject(jText, "CountK", cJSON_CreateNumber(master_getCountK(sm)));
            cJSON_AddItemToObject(jText, "CountP", cJSON_CreateNumber(master_getCountP(sm)));
            cJSON_AddItemToArray(jPageText, jText);
        }

        char * pageText = cJSON_Print(jPageText);

        list_free(masters);

        char * textJSON = textToJSON(pageText);
        strcat(buffer, textJSON);
        free(textJSON);
    }
    else if (strcmp(req->method, "POST") == 0)
    {
        char * name = (char *)http_request_getArg(req, "name");
        char * surname = (char *)http_request_getArg(req, "surname");
        char * countK = (char *)http_request_getArg(req, "countK");
        char * countP = (char *)http_request_getArg(req, "countP");

        if(verification(name, surname, countK, countP) == 1)
        {
            db_insertData(db, name, surname, atoi(countK), atoi(countP));

            cJSON * jText = cJSON_CreateObject();
            cJSON_AddItemToObject(jText, "Name", cJSON_CreateString(name));
            cJSON_AddItemToObject(jText, "Surname", cJSON_CreateString(surname));
            cJSON_AddItemToObject(jText, "CountK", cJSON_CreateNumber(atoi(countK)));
            cJSON_AddItemToObject(jText, "CountP", cJSON_CreateNumber(atoi(countP)));
            char * pageText = cJSON_Print(jText);

            char * textJSON = textToJSON(pageText);
            strcat(buffer, textJSON);
            free(textJSON);
        }
        else
        {
            cJSON * jText = cJSON_CreateObject();
            cJSON_AddItemToObject(jText, "Error", cJSON_CreateString("Wrong input"));
            char * pageText = cJSON_Print(jText);

            char * textJSON = textToJSON(pageText);
            strcat(buffer, textJSON);
            free(textJSON);
        }
    }

    socket_write_string(client, buffer);
    socket_close(client);
}