rendered paste body/************************************************************************** * IPK projekt 2 * * varianta 1 - Jednoduchá adresárová sluba * * * autor: Matus Kovac xkovac18 * * datum: 27.4 * **************************************************************************/ #include <stdlib.h>#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <netdb.h>#include <string.h>#include <time.h>#include "packet.h"#include <sys/types.h>#include <sys/wait.h>s_packet packet;int main(int argc, char *argv[]){ extern char *optarg; int c; int port = -1; /* Pomocne premenne pre vytvorenie socketu */ int s, t, sinlen; struct sockaddr_in sock_in; char mess[80]; struct hostent *hostptr; int j; int cislo = 0;// ulozenie udajov zo suboru char priezvisko[20]; char meno[20]; char login[9]; char fakulta[5]; char bciarka;//Parametre vyhladavania int emptyN=0; int emptyS=0; int emptyL=0; int emptyF=0; /* ziskanie cisla portu */ /* kontrola, spravneho paramertu - cislo portu*/ while((c = getopt(argc, argv, "p:")) != EOF) { switch(c) { case 'p': port = atoi(optarg); /* ulozenie cisla portu */ break; case '?': printf("Neznamy alebo ziadny parameter.\n"); return -1; break; } } if(argc < 3 || port == -1 || !port) { printf("Wrong port number.\n"); return -1; } /* Vytvorenie noveho socketu pre pripojenie */ fprintf(stderr, "Creating socket..\t\t\t\t"); if((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "CHYBA\n"); return -1; } fprintf(stderr, "DONE\n"); /* parametry socketu */ /* protokolu na Internet */ sock_in.sin_family = PF_INET; /* cislo portu */ sock_in.sin_port = htons(port); /* nastavenie adresy*/ sock_in.sin_addr.s_addr = INADDR_ANY; fprintf(stderr, "Connecting to port..\t\t\t\t"); if(bind(s, (struct sockaddr *)&sock_in, sizeof(sock_in)) < 0) { fprintf(stderr, "CHYBA\n"); return -1; } fprintf(stderr, "DONE\n"); /* test */ fprintf(stderr, "Listening..\t\t\t\t"); if(listen(s, 5)) { fprintf(stderr, "CHYBA\n"); return -1; } fprintf(stderr, "DONE\n"); sinlen = sizeof(sock_in); fprintf(stderr, "Server is running\n"); /* cakanie v nekonecnej smycke na ulohu od klienta */ while(1) { /* kontrola prijatych dat */ if((t = accept(s, (struct sockaddr*)&sock_in, &sinlen)) < 0) { fprintf(stderr, "CHYBA : Chyba pri prijmani dat\n"); return -1; } if (fork() == 0){ /* zistenie adresy hosta */ hostptr = (struct hostent *)gethostbyaddr((char *)&sock_in.sin_addr, 4, AF_INET); j = (int)hostptr->h_length; /*Vypis informacii o naviazani spojenia */ printf("Z %s (%s): %d. ", inet_ntoa(sock_in.sin_addr), hostptr->h_name, ntohs(sock_in.sin_port)); /* kontrola precitanych dat + nacitanie dat*/ if(read(t, &packet, sizeof(packet)) < 0) { fprintf(stderr, "CHYBA: Chyba pri citani dat\n"); return -1; } FILE *f; f = fopen("ipk_database.txt", "r"); if (f == NULL) { fprintf(stderr, "Nepodarilo sa otvorit subor !\n"); exit(EXIT_FAILURE); } if(strchr(packet.name,'*')!=NULL) emptyN=1; if(strchr(packet.surname,'*')!=NULL) emptyS=1; if(strchr(packet.login,'*')!=NULL) emptyL=1; if(strchr(packet.faculty,'*')!=NULL) emptyF=1;cislo = 0;while (cislo < 536){fscanf(f, "%d", &cislo);//cislobciarka = getc(f);//prva bodkociarkafscanf(f, "%[^;]s", priezvisko);//priezviskobciarka = getc(f);//druha bodkociarkafscanf(f, "%[^;]s", meno);//menobciarka = getc(f);//tretia bodkociarkafscanf(f, "%[^;]s", login);//loginbciarka = getc(f);//stvrta bodkociarkafscanf(f, "%s", fakulta);//fakulta if(emptyN==1) strcpy(packet.name,meno); if(emptyS==1) strcpy(packet.surname,priezvisko); if(emptyL==1) strcpy(packet.login,login); if(emptyF==1) strcpy(packet.faculty,fakulta); strcpy(mess,"");if (( (strcmp(packet.name, meno)) == 0) && ( (strcmp(packet.surname, priezvisko)) == 0) && ( (strcmp(packet.login, login)) == 0) && ( (strcmp(packet.faculty, fakulta)) == 0) ) { if(strchr(packet.mode,'N')!=NULL){strcat(mess,meno); strcat(mess," ");} if(strchr(packet.mode,'S')!=NULL){strcat(mess,priezvisko); strcat(mess," ");} if(strchr(packet.mode,'L')!=NULL){strcat(mess,login); strcat(mess," ");} if(strchr(packet.mode,'F')!=NULL){strcat(mess,fakulta); strcat(mess," ");} if(write(t, mess, strlen(mess)+1) < 0) { fprintf(stderr, "CHYBA : Chyba pri zapisu kontrolniho paketu\n"); return -1; } } //if}// while subor fclose(f); close(t); // zavrenie spojenia soketu exit(0); } } //nekonecna smycka na dotaz klientawaitpid(0,NULL,WNOHANG);waitpid(0,NULL,WNOHANG); return 0; }