コード例 #1
1
ファイル: server.c プロジェクト: vitalik296/CoursesRepo
void get_bd(http_request_t req, socket_t * clientSocket,db_t * db)
{
    char text[20];
    strcpy(text,req.uri+4);
    int count= db_count(db,text);
    char buf[10000];
    char tmp[1000];
    sqlite3_stmt * stmt = NULL;

    strcpy(buf,"<html>"
                    "<head>"
                    "<title>Page Title</title>"
                    "</head>"
                    "<body>"
                    "<table border=\"3\" align=\"center\">"
                    "<tr>"
                    "<th>NAME</th>"
                    "<th>SURNAME</th>"
                    "<th>AGE</th>"
                    "</tr>");
    for(int i=0;i<count;i++)
    {
    stmt=db_getrow(db,text,i);
    sprintf(tmp,"<tr>"
                "<th><a href=\"/db/%s/%i\">%s</a></th>"
                "<th><a href=\"/db/%s/%i\">%s</a></th>"
                "<th><a href=\"/db/%s/%i\">%i</a></a></th>"
                "</tr>",text,i,sqlite3_column_text(stmt, 0),text,i,sqlite3_column_text(stmt, 1),text,i,sqlite3_column_int(stmt, 2));
    strcat(buf,tmp);
    sqlite3_finalize(stmt);
    }
    strcat(buf,"</table>");

    sprintf(tmp,"<p align=\"center\">Count: %i<br><br><br></p>"
                "<p align=\"center\"><a href=\"/db/paste/%s\">Insert new row</a></p>"
                "<p align=\"center\"><a href=\"/db\">To Databases</a></p>",count,text);
    strcat(buf,tmp);

    strcat(buf, "</body>"
                "</html>");
    socket_write_string(clientSocket,buf);
}
コード例 #2
0
ファイル: server.c プロジェクト: lemeshkob/Repo1
void server_mastersByID(socket_t * client, http_request_t * req, db_t * db)
{
    char buffer[10240] = "";

    char * point = strstr(req->uri, "/api/ScrumMasters/");
    point += 18;
    int index = atoi(point);

    if(0 < index && index < db_count(db) + 1)
    {
        if (strcmp(req->method, "GET") == 0)
        {
            master_t * master = db_getDataById(db, index - 1);

            cJSON * jText = cJSON_CreateObject();
            cJSON_AddItemToObject(jText, "Name", cJSON_CreateString(master_getName(master)));
            cJSON_AddItemToObject(jText, "Surname", cJSON_CreateString(master_getSurname(master)));
            cJSON_AddItemToObject(jText, "CountK", cJSON_CreateNumber(master_getCountK(master)));
            cJSON_AddItemToObject(jText, "CountP", cJSON_CreateNumber(master_getCountP(master)));
            char * pageText = cJSON_Print(jText);

            free(master);

            char * textJSON = textToJSON(pageText);
            strcat(buffer, textJSON);
            free(textJSON);
        }
        else if (strcmp(req->method, "DELETE") == 0)
        {
            master_t * master = db_getDataById(db, index - 1);
            db_deleteData(db, master_getID(master));
            free(master);

            cJSON * jText = cJSON_CreateObject();
            cJSON_AddItemToObject(jText, "Success", cJSON_CreateString("Successfully deleted"));
            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("ID Not Found"));
        char * pageText = cJSON_Print(jText);

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

    socket_write_string(client, buffer);
    socket_close(client);
}
コード例 #3
0
ファイル: server.c プロジェクト: vitalik296/CoursesRepo
void parse_from_db(list_t* list,db_t* db)
{
    sqlite3_stmt * stmt=NULL;

    lanser * lan=Freelanser_new();

    for(int i=0; i<db_count(db,"database"); i++)
    {
        lanser * lan=Freelanser_new();
        stmt=db_getrow(db,"database",i);
        Freelanser_set(lan,sqlite3_column_text(stmt, 0),sqlite3_column_text(stmt, 1),sqlite3_column_double(stmt, 2),sqlite3_column_text(stmt, 4),sqlite3_column_int(stmt, 3));
        list_push(list,lan,get_size());
        free(lan);
    }
    Freelanser_free(lan);
}
コード例 #4
0
ファイル: server.c プロジェクト: vitalik296/CoursesRepo
void server_Sort(http_request_t req,socket_t* clientSocket,db_t* self)
{

    char* key;
    char *com;
    char buf[500]="SELECT * FROM database WHERE ";
    char* tmp=strchr(req.uri,'?')+1;
    key=strtok(tmp,"&");
    list_t* list=list_new();
    int count;
    while(key!=NULL)
    {
        list_push(list,key,strlen(key)+1);
        key=strtok(NULL,"&");
    }

    count=db_count(self,"database");

    while(list_get_count(list))
    {
        com=list_pop(list);
        if(!strncmp(com,"age",3))
        {
            if(strpbrk(com,"0987654321"))
            {

                char * qw=strstr(com,"_")+1;

                if(!strncmp(qw,"gt",2))
                {
                    sprintf(com,"age<%i",atoi(strpbrk(com,"0123456789")));
                }
                else if(!strncmp(qw,"lt",2))
                {
                    sprintf(com,"age>%i",atoi(strpbrk(com,"0123456789")));
                }
                else
                {
                    parse_from_db(list,self);
                    server_GET_all(req,clientSocket,list);
                    return;
                }
            }
            else
            {
                parse_from_db(list,self);
                server_GET_all(req,clientSocket,list);
                return;
            }
            strcat(buf,com);
            if(list_get_count(list))
                strcat(buf," AND ");
        }
        else if(!strncmp(com,"salary",6))
        {
            if(strpbrk(com,"0987654321"))
            {

                char * qw=strstr(com,"_")+1;

                if(!strncmp(qw,"gt",2))
                {
                    sprintf(com,"salary<%.2f",atof(strpbrk(com,"0123456789")));
                }
                else if(!strncmp(qw,"lt",2))
                {
                    sprintf(com,"salary>%.2f",atof(strpbrk(com,"0123456789")));
                }
                else
                {
                    parse_from_db(list,self);
                    server_GET_all(req,clientSocket,list);
                    return;
                }
            }
            else
            {
                parse_from_db(list,self);
                server_GET_all(req,clientSocket,list);
                return;
            }
            strcat(buf,com);
            if(list_get_count(list))
                strcat(buf," AND ");
        }
        else if(!strncmp(com,"count",5))
        {
            if(strpbrk(com,"0987654321"))
            {
                count=atoi(strpbrk(com,"0123456789"));
            }
            else
            {
                parse_from_db(list,self);
                server_GET_all(req,clientSocket,list);
                return;
            }
        }
    }


    sqlite3_stmt * stmt = NULL;
    sqlite3_prepare_v2(get_db(self), buf, strlen(buf), &stmt, NULL);

    int i=0;

    puts(buf);

    while(1)
    {
        int rc = sqlite3_step(stmt);
            if (SQLITE_ROW == rc)
            {
                if(i<count)
                {
                    lanser * FL=Freelanser_new();
                    Freelanser_set(FL,sqlite3_column_text(stmt, 0),sqlite3_column_text(stmt, 1),sqlite3_column_double(stmt, 2),sqlite3_column_text(stmt, 4),sqlite3_column_int(stmt, 3));
                    list_push(list,FL,get_size());
                    free(FL);
                }
                else
                    break;
                i++;
            }
            else if (SQLITE_DONE == rc)
            {
                break;
            }
    }

    server_GET_all(req,clientSocket,list);
}
コード例 #5
0
ファイル: test.c プロジェクト: senarukana/apuedb
int main(int argc, char **argv) {
	DBHANDLE db;
	int rc,c, flags, len;
	char *ptr_command, *ptr_key, *find;
	char *command, *key, *value;
	command = key = value = NULL;
	char *help_cmd = "command list:\n [add | update] key value \n [del | find] key \n [open | close] dbname\n [help count iterate exit]";

	flags = O_RDWR;
	while ((c = getopt(argc, argv, "nt?")) != -1) {
		switch (c) {
		case 'n':
			flags |= O_CREAT;
			break;
		case 't':
			flags |= O_TRUNC;
			break;
		case '?':
			err_quit("usage: [-n] create new file [-t] truncate db <filename>");
			break;
		}
	}
	if (optind != argc - 1) {
		err_quit("usage: [-n] create new file [-t] truncate db <filename>");
	}

	if ((db = db_open(argv[optind], flags, FILE_MODE)) == NULL) {
		err_sys("db_open %s error", argv[optind]);
	}

	for (;;) {
		char buf[MAX_LEN];
		printf("APUEDB> ");
		if (fgets(buf, MAX_LEN, stdin) == NULL) {
			printf("Bye~\n");
			exit(1);
		}
		to_lowercase(buf);
		len = strlen(buf);
		if ((ptr_command = strchr(buf,COMMAND_SEP)) == NULL) {
			buf[len-1] = '\0';
			if (strcmp(buf,"help") == 0) {
				printf("%s\n", help_cmd);
				continue;
			} else if (strcmp(buf, "count") == 0) {
				printf("%d\n", db_count(db));
			} else if (strcmp(buf, "iterate") == 0) {
				char *ptr;
				db_rewind(db);
				while ((ptr = db_nextrec(db, NULL)) != NULL) {
					printf("%s\n", ptr);
				}
				continue;
			} else if (strcmp(buf, "exit") == 0) {
				printf("Bye~\n");
				exit(1);
			} else {
				printf("invalid command, use command help for help\n");
				continue;
			}
		}
		command = strndup(buf, ptr_command - buf);

		if (strcmp(command, "add") == 0) {
			if ((ptr_key = strchr(ptr_command+1, COMMAND_SEP)) == NULL) {
				printf("invalid add command, usage: add key value\n");
			} else {
				key = strndup(ptr_command+1, ptr_key - ptr_command - 1);
				value = strndup(ptr_key+1, buf + len - 1 - ptr_key - 1);
				rc = db_store(db, key, value, DB_INSERT);
				if (rc == 0) {
					printf("add +OK\n");
				} else {
					printf("key %s already exist\n", key);
				}
			}
		} else if (strcmp(command, "update") == 0) {
			if ((ptr_key = strchr(ptr_command+1, COMMAND_SEP)) == NULL) {
				printf("invalid add command, usage: add key value\n");
			} else {
				key = strndup(ptr_command+1, ptr_key - ptr_command - 1);
				value = strndup(ptr_key+1, buf + len - 1 - ptr_key - 1);
				rc = db_store(db, key, value, DB_REPLACE);
				if (rc == 0) {
					printf("update +OK\n");
				} else {
					printf("key %s not found\n", key);
				}
			}
		} else if (strcmp(command, "del") == 0) {
			if ((ptr_key = strchr(ptr_command+1, COMMAND_SEP)) != NULL) {
				printf("invalid del command, usage: del key\n");
				continue;
			}
			key = strndup(ptr_command+1, buf + len - 1 - ptr_command -1);
			rc = db_delete(db, key);
			if (rc == 0) {
				printf("del +OK\n");
			} else {
				printf("key %s not found\n", key);
			}
		} else if (strcmp(command, "find") == 0) {
			if ((ptr_key = strchr(ptr_command+1, COMMAND_SEP)) != NULL) {
				printf("invalid find command, usage: find key\n");
				continue;
			}
			key = strndup(ptr_command+1, buf + len - 1 - ptr_command -1);
			find = db_fetch(db, key);
			if (find != NULL) {
				printf("%d,%s\n", strlen(find), find);
			} else {
				printf("key %s not found\n", key);
			}
		}
		if (key != NULL) {
			free(key);
			key = NULL;
		}
		if (command != NULL) {
			free(command);
			command = NULL;
		}
		if (value != NULL) {
			free(value);
			value = NULL;
		}
	}
}
コード例 #6
0
ファイル: server.c プロジェクト: lemeshkob/Repo1
void server_mastersHtmlByID(socket_t * client, http_request_t * req, db_t * db)
{
    char buffer[10240] = "";

    char * point = strstr(req->uri, "/ScrumMasters/");
    point += 14;
    int index = atoi(point);

    if(0 < index && index < db_count(db) + 1)
    {
        if (strcmp(req->method, "GET") == 0)
        {
            char pageText[10240] = "";

            master_t * master = db_getDataById(db, index - 1);

            char text[1024] = "";
            sprintf(text,
                    "<p>"
                    "Name: %s<br>"
                    "Surname: %s<br>"
                    "CountK: %i<br>"
                    "CountP: %i<br>"
                    "</p>",
                    master_getName(master),
                    master_getSurname(master),
                    master_getCountK(master),
                    master_getCountP(master));
            strcat(pageText, text);

            free(master);

            char * pageTextLink = "<a href=\"#\" onclick=\"doDelete()\"/>Delete Scrum Master<br><br></a>\n";
            strcat(pageText, pageTextLink);

            char pageTextScript[1024];
            sprintf(pageTextScript,
                        "<script>"
                        "function doDelete() {"
                        "var xhttp = new XMLHttpRequest();"
                        "xhttp.open(\"DELETE\", \"http://127.0.0.1:5000/ScrumMasters/%i\", true);"
                        "xhttp.send();"
                        "}"
                        "</script>", index);
            strcat(pageText, pageTextScript);

            char * textHTML = textToHTML(pageText);
            strcat(buffer, textHTML);
            free(textHTML);
        }
        else if (strcmp(req->method, "DELETE") == 0)
        {
            master_t * master = db_getDataById(db, index - 1);
            db_deleteData(db, master_getID(master));
            free(master);

            char * pageText = "<h4>Successfully deleted</h4>";
            sprintf(buffer,
                    "HTTP/1.1 200 OK\n"
                    "Content-Type: text/html\n"
                    "Content-Length: %zu\n"
                    "Access-Control-Allow-Origin: *\n"
                    "Access-Control-Allow-Methods: DELETE\n"
                    "\n%s",
                    strlen(pageText), pageText);
        }
    }
    else
    {
        char * pageText = "<h4>ID Not Found</h4>";
        char * textHTML = textToHTML(pageText);
        strcat(buffer, textHTML);
        free(textHTML);
    }

    socket_write_string(client, buffer);
    socket_close(client);
}
コード例 #7
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);
}