예제 #1
0
void server_answer(db_t* self,list_t* list,http_request_t req, socket_t * clientSocket,lanser ** freelanser)
{
    if(strcmp(req.uri,"/Freelancer/api/?"))
    {
        server_Sort(req,clientSocket,self);
    }
    else if (!strcmp(req.uri, "/Freelancer-count"))
    {
        server_count(clientSocket,list);
    }
    else if (!strcmp(req.uri, "/Freelancer/api"))
    {
        if (!strcmp(req.method, "GET"))
            server_GET_all(req,clientSocket,list);
        else if(!strcmp(req.method, "DELETE"))
            server_DELETE_all(req,clientSocket,list);
        else
            socket_write_string(clientSocket, "Method not allowed!\n");

    }
    else if (strncmp(req.uri, "/Freelancer/api/",16)==0)
    {
        if(!strcmp(req.method,"GET"))
            server_GET_id(req,clientSocket,list);
        else if(!strcmp(req.method,"DELETE"))
            server_DELETE_id(req,clientSocket,list,self);
        else if(!strcmp(req.method,"POST"))
        {
            server_POST(req,clientSocket,list,self);
        }
    }
    else if(!strncmp(req.uri,"/Freelancer/delete/",19))
    {
        server_DELETE_id(req,clientSocket,list,self);
    }
    else  if(!strcmp(req.uri,"/Freelancer"))
    {
        server_start_page(clientSocket);
    }
    else if(!strcmp(req.uri,"/Freelancer/"))
    {
        server_GET_html(clientSocket,list);
    }
    else if(!strcmp(req.uri,"/Freelancer/paste"))
    {
        server_Paste_html(req,clientSocket,list);
    }
    else if(!strncmp(req.uri,"/Freelancer/",12))
    {
        server_GET_id_html(req,clientSocket,list);
    }
    else
        socket_write_string(clientSocket,"\nHTTP1.1 404 NOT FOUND\n"
                            "Content-Type: application/json\n"
                            "Content-Length: %i\r\n\r\n""Freelancer not found\n");
}
예제 #2
0
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);
}
void server_answer(http_request_t req, socket_t * clientSocket, sqlite3 * db) {
    puts(req.method);
    puts(req.uri);
    if (!strcmp(req.uri, "/Teacher-count"))
    {
        server_count(clientSocket, db);
    }
    else

        if (strncmp(req.uri, "/api/Teacher/", 13) == 0)
    {
        if(!strcmp(req.method, "GET"))
            server_GET_id(req, clientSocket, db);
        else if(!strcmp(req.method,"DELETE"))
            server_DELETE_id(req, clientSocket, db);
        else if(!strcmp(req.method,"POST"))
        {
            puts("1");
            server_POST(req, clientSocket, db);
        }
    }
    else


    if (!strncmp(req.uri, "/api/Teacher", 12))
    {
        if (!strcmp(req.method, "GET")) {
            if (!strncmp(req.uri, "/api/Teacher?", 13))  {
                int filtSubj, filtYears;
                char* str = req.uri;
                sscanf (str, "/api/Teacher?subjects=%i|years=%i", &filtSubj, &filtYears);
                server_GET_filt(req, clientSocket, db, filtSubj, filtYears);
            }
        else
            server_GET_all(req, clientSocket, db);
        }
        else if(!strcmp(req.method, "DELETE"))
            server_DELETE_all(req, clientSocket, db);
        else
            socket_write_string(clientSocket, "Method not allowed!\n");

    }
    else




    if(!strncmp(req.uri,"/Teacher/delete/",16))
    {
        server_DELETE_id(req, clientSocket, db);
    }
    else
    if (!strncmp(req.uri, "/Teacher?", 9)) {
        int filtSubj, filtYears;
        char* str = req.uri;
        sscanf (str, "/api/Teacher?subjects=%i|years=%i", &filtSubj, &filtYears);
        server_GET_filt_html(req, clientSocket, db, filtSubj, filtYears);
    }
    else  if(!strcmp(req.uri,"/Teacher"))
    {
        server_start_page(clientSocket);
    }
    else if(!strcmp(req.uri,"/Teacher/"))
    {
        server_GET_html(clientSocket, db);
    }
    else if(!strcmp(req.uri,"/Teacher/paste"))
    {
        server_Paste_html(req, clientSocket, db);
    }
    else if(!strncmp(req.uri, "/Teacher/", 9))
    {
        server_GET_id_html(req, clientSocket, db);
    }
    else
        socket_write_string(clientSocket,"\nHTTP1.1 404 NOT FOUND\n"
            "Content-Type: application/json\n"
            "Content-Length: %i\r\n\r\n""Teacher not found\n");
}