void server_GET_all(http_request_t req, socket_t * clientSocket,lanser** freelancer) { char text[10000]=""; char * buf=NULL; int count=0,check=0; for(int i = 0; i < 10; i++) if(Freelanser_name_get(freelancer[i])!=NULL) count++; strcat(text, "["); for(int i = 0; i < 10; i++) { if(Freelanser_name_get(freelancer[i])==NULL) { i++; } else { buf = lanser_toJSON(freelancer[i]); strcat(text, buf); if(check != count-1) { strcat(text, ","); check++; } } } strcat(text, "]"); server_sent(clientSocket, text); }
void server_DELETE_id(http_request_t req,socket_t * clientSocket,lanser** freelanser) { 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,"HTTP1.1 404 NOT FOUND\n" "Content-Type: json\n" "Content-Length: %i\r\n\r\n" "%s\n""<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; } Freelanser_set(freelanser[id],NULL,NULL,0,NULL,0); server_sent(clientSocket, "<body>Delete success<br>" "<a href=\"/Freelancer/\">To Freelancers</a></body>"); }
void server_GET_id(http_request_t req,socket_t * clientSocket,lanser** freelancer) { char text[1000]=""; char *buf=NULL; int id; if(strpbrk(req.uri,"-0123456789")) { id=atoi(strpbrk(req.uri,"-0123456789")); if(id>9 || id<0) { socket_write_string(clientSocket,"HTTP1.1 404 NOT FOUND\n" "Content-Type: json\n" "Content-Length: %i\r\n\r\n" "Id not found"); return; } } else { socket_write_string(clientSocket,"Wrong id"); return; } buf = lanser_toJSON(freelancer[id]); strcat(text, buf); server_sent(clientSocket, text); }
void server_dB(socket_t * client, db_t * db, list_t * lt) { int cntPens = db_countPensioner(db); for(int i = 0; i < cntPens; i++) { list_push_back(lt, db_getPensionerById(db, i)); } cJSON * arr = cJSON_CreateArray(); for(int i = 1; i < list_getSize(lt); i++) { cJSON * pens = cJSON_CreateObject(); pensioner_t * ps = list_get(lt, i); cJSON_AddItemToObject(pens, "name", cJSON_CreateString(pensioner_getName(ps))); cJSON_AddItemToObject(pens, "surname", cJSON_CreateString(pensioner_getSurname(ps))); cJSON_AddItemToObject(pens, "year", cJSON_CreateNumber(pensioner_getAge(ps))); cJSON_AddItemToObject(pens, "experience", cJSON_CreateNumber(pensioner_getExperience(ps))); cJSON_AddItemToObject(pens, "pension", cJSON_CreateNumber(pensioner_getPension(ps))); cJSON_AddItemToObject(pens, "surname", cJSON_CreateString(pensioner_getYear(ps))); cJSON_AddItemToArray(arr, pens); } char * Jtext = cJSON_Print(arr); server_sent(client, Jtext); free(Jtext); }
void server_DELETE_all(http_request_t req,socket_t * clientSocket,lanser** freelanser) { for(int i=0; i<10; i++) { Freelanser_set(freelanser[i],NULL,NULL,0,NULL,0); } server_sent(clientSocket, "Delete success"); }
void server_count( socket_t * clientSocket,list_t * list) { int count=list_get_count(list); cJSON * SM = cJSON_CreateObject(); cJSON_AddItemToObject(SM, "count", cJSON_CreateNumber(count)); char* text =cJSON_Print(SM); server_sent(clientSocket,text); }
void server_info(socket_t* clientSocket) { cJSON * SM = cJSON_CreateObject(); cJSON_AddItemToObject(SM, "student", cJSON_CreateString("Zakharchenko Vitaliy")); cJSON_AddItemToObject(SM, "group", cJSON_CreateString("KP-51")); cJSON_AddItemToObject(SM, "variant", cJSON_CreateNumber(12)); char * jsonSM = cJSON_Print(SM); server_sent(clientSocket,jsonSM); }
void server_count( socket_t * clientSocket,lanser** freelancer) { int count=0; for(int i=0;i<10;i++) if(Freelanser_name_get(freelancer[i])!=NULL) count++; cJSON * SM = cJSON_CreateObject(); cJSON_AddItemToObject(SM, "count", cJSON_CreateNumber(count)); char* text =cJSON_Print(SM); server_sent(clientSocket,text); }
void server_GET_all(http_request_t req, socket_t * clientSocket,list_t* list) { char * buf; int count=0,check=0; cJSON * SM = cJSON_CreateArray(); for(int i = 0; i < list_get_count(list); i++) { cJSON_AddItemToArray(SM, lanser_toJSON(list_get_el(list,i))); } buf=cJSON_Print(SM); server_sent(clientSocket, buf); }
void server_file(socket_t * client, http_request_t * req) { list_t * list = list_new(); if(strcmp(req->method, "GET") == 0) { char * str; str = strtok(req->uri, "/"); while (str != NULL) { list_push_back(list, str); str = strtok(NULL,"/"); } char * word = list_get(list, 3); char * fileName = list_get(list, 2); int fileSt = file_exists(fileName); if(fileSt == 1) { text_t * text = text_new(); text_readFile(text, fileName); text_onSentences(text); int cntW = text_counting(text, word); cJSON * Words = cJSON_CreateObject(); cJSON_AddItemToObject(Words, "FileName", cJSON_CreateString(fileName)); cJSON_AddItemToObject(Words, "CountWord", cJSON_CreateNumber(cntW)); cJSON_AddItemToObject(Words, "experience", cJSON_CreateString(word)); char * Jtext = cJSON_Print(Words); server_sent(client, Jtext); free(Jtext); } else { printf("Error! Wrong file"); return; } } list_free(list); }
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>"); }
int main(void) { WSADATA Data; SOCKADDR_IN recvSockAddr; SOCKET recvSocket; int status; int numrcv = 0; struct hostent * remoteHost; char * ip; const char * host_name = "pb-homework.appspot.com"; char buffer[MAXBUFLEN]; memset(buffer,0,MAXBUFLEN); // Initialize Windows Socket DLL status = WSAStartup(MAKEWORD(2, 2), &Data); if(status != 0) { printf("ERROR: WSAStartup unsuccessful\r\n"); return 0; } // Get IP address from host name remoteHost = gethostbyname(host_name); ip = inet_ntoa(*(struct in_addr *)*remoteHost->h_addr_list); printf("IP address is: %s.\n", ip); memset(&recvSockAddr, 0, sizeof(recvSockAddr)); // zero the sockaddr_in structure recvSockAddr.sin_port=htons(PORT); // specify the port portion of the address recvSockAddr.sin_family=AF_INET; // specify the address family as Internet recvSockAddr.sin_addr.s_addr= inet_addr(ip); // specify ip address // Create socket recvSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(recvSocket == INVALID_SOCKET) { printf("ERROR: socket unsuccessful\r\n"); WSACleanup(); system("pause"); return 0; } // Connect if(connect(recvSocket,(SOCKADDR*)&recvSockAddr,sizeof(SOCKADDR_IN)) == SOCKET_ERROR) { printf("ERROR: socket could not connect\r\n"); closesocket(recvSocket); WSACleanup(); return 0; } // Send request char request[200]; sprintf(request, "GET /test/var/24?format=json HTTP/1.1\r\nHost:%s\r\n\r\n", host_name); // add Host header with host_name value send(recvSocket, request, strlen(request), 0); // Receieve numrcv = recv(recvSocket, buffer, MAXBUFLEN, NO_FLAGS_SET); if (numrcv == SOCKET_ERROR) { printf("ERROR: recvfrom unsuccessful\r\n"); status = closesocket(recvSocket); if(status == SOCKET_ERROR) printf("ERROR: closesocket unsuccessful\r\n"); status = WSACleanup(); if (status == SOCKET_ERROR) printf("ERROR: WSACleanup unsuccessful\r\n"); system("pause"); return(1); } // Print out receieved socket data printf("%s\r\n", buffer); char * json=strstr(buffer,"{"); cJSON * SI = cJSON_CreateObject(); SI=cJSON_Parse(json); author_t * author=malloc(sizeof(author_t)); author->author=malloc(strlen(cJSON_GetObjectItem(SI,"author")->valuestring)+1); strcpy(author->author,cJSON_GetObjectItem(SI,"author")->valuestring); author->quote=malloc(strlen(cJSON_GetObjectItem(SI,"quote")->valuestring)+1); strcpy(author->quote,cJSON_GetObjectItem(SI,"quote")->valuestring); time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); author->time=malloc(strlen(asctime(timeinfo))); strcpy(author->time,asctime(timeinfo)); author->time[strlen(author->time)-1]='\0'; cJSON * SM = cJSON_CreateObject(); cJSON_AddItemToObject(SM, "author", cJSON_CreateString(author->author)); cJSON_AddItemToObject(SM, "quote", cJSON_CreateString(author->quote)); cJSON_AddItemToObject(SM, "time", cJSON_CreateString(author->time)); char * jsonSM = cJSON_Print(SM); system("pause"); lib_init(); socket_t * server = socket_new(); socket_bind(server, 5000); socket_listen(server); char buf[10000]; socket_t * client = NULL; while(1) { client = socket_accept(server); socket_read(client, buf, sizeof(buf)); printf("%s",buf); if (strlen(buf) != 0){ http_request_t rs; rs = http_request_parse(buf); if (strcmp(rs.method,"GET") == 0 && strcmp(rs.uri, "/info") == 0 ) { server_info(client); } if (strcmp(rs.method,"GET") == 0 && strcmp(rs.uri, "/external") == 0 ) { server_sent(client,jsonSM); } } } system("pause"); return 0; }