Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <errno.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <sqlite3.h>
- /* portul folosit */
- #define PORT 2099
- /* codul de eroare returnat de anumite apeluri */
- extern int errno;
- static int call(void *data,int argc, char **argv, char **azColName)
- {
- if (argv==NULL)
- return 0;
- else
- return 4;
- }
- void selectOption(int client,int optiune)
- {
- if (read (client, &optiune,sizeof(optiune)) <= 0)
- {
- perror ("[server]Eroare la read() de la client.\n");
- //close (client); /* inchidem conexiunea cu clientul */
- }
- // Pregatim structurile si descriptorii pentru a accesa baza de date
- sqlite3 *db;
- char *zErrMsg = 0;
- int rc;
- char *sql;
- rc = sqlite3_open("data.db", &db);
- if( rc )
- {
- fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
- exit(-1);
- }
- else
- {
- fprintf(stderr, "Opened database successfully\n");
- }
- /* sql = "INSERT INTO users (userName,password)" \
- "VALUES ('cata','nut' );";
- rc = sqlite3_exec(db, sql, call, 0, &zErrMsg);
- if( rc != SQLITE_OK )
- {
- fprintf(stderr, "SQL error: %s\n", zErrMsg);
- sqlite3_free(zErrMsg);
- }
- else {
- fprintf(stdout, "Records created successfully\n");
- }
- */
- char userName[30];
- char password[30];
- char answer[50];
- switch(optiune)
- {
- case 1: // LOGIN
- if (read (client, userName, 30) <= 0)
- {
- perror ("[server]Eroare la read() de la client.\n");
- close (client);
- }
- if (read (client, password, 30) <= 0)
- {
- perror ("[server]Eroare la read() de la client.\n");
- close (client);
- }
- /// Verificam daca ii gasim in baza de date
- sql=(char*)malloc(100);
- bzero(sql,100);
- strcat(sql,"SELECT * from USERS WHERE userName='");
- strcat(sql,userName);
- strcat(sql,"' AND password='");
- strcat(sql,password);
- strcat(sql,"'");
- rc = sqlite3_exec(db, sql, call, NULL, &zErrMsg);
- if( rc != SQLITE_OK && rc!=4)
- {
- fprintf(stderr, "SQL error: %s\n", zErrMsg);
- sqlite3_free(zErrMsg);
- }
- else
- {
- fprintf(stdout, "Operation done successfully\n");
- }
- if(rc ==4 )
- {
- bzero(answer,50);
- strcat(answer,"Te-ai logat cu succes!");
- if (write (client,answer,50) <= 0)
- {
- perror ("[client]Eroare la write() spre server.\n");
- exit(-1);
- }
- }
- else if(rc ==0)
- {
- bzero(answer,50);
- strcat(answer,"Nu exista un user cu acest nume!\n");
- if (write (client,answer,50) <= 0)
- {
- perror ("[client]Eroare la write() spre server.\n");
- exit(-1);
- }
- }
- //Trebuie sa trimit mesajele primite
- // Aici o sa primesc comenzile pt celalat meniu
- break;
- case 2: // INREGISTRARE
- if (read (client, userName, 30) <= 0)
- {
- perror ("[server]Eroare la read() de la client.\n");
- close (client);
- }
- if (read (client, password, 30) <= 0)
- {
- perror ("[server]Eroare la read() de la client.\n");
- close (client);
- }
- // Verific daca user-ul este deja folosit
- sql=(char*)malloc(100);
- bzero(sql,100);
- strcat(sql,"SELECT * from USERS WHERE userName='");
- strcat(sql,userName);
- strcat(sql,"'");
- rc = sqlite3_exec(db, sql, call, NULL, &zErrMsg);
- if( rc != SQLITE_OK && rc!=4)
- {
- fprintf(stderr, "SQL error: %s\n", zErrMsg);
- sqlite3_free(zErrMsg);
- }
- else
- {
- fprintf(stdout, "Operation done successfully\n");
- }
- if(rc ==4)
- {
- bzero(answer,50);
- strcat(answer,"Exista un alt user cu acest nume!\n");
- if (write (client,answer,50) <= 0)
- {
- perror ("[client]Eroare la write() spre server.\n");
- exit(-1);
- }
- }
- else if(rc==0)
- {
- sql=(char*)malloc(100);
- bzero(sql,100);
- strcpy(sql,"INSERT into USERS(userName,password) values('");
- strcat(sql,userName);
- strcat(sql,"','");
- strcat(sql,password);
- strcat(sql,"')");
- int rc2;
- rc2 = sqlite3_exec(db, sql, call, NULL, &zErrMsg);
- if( rc2 != SQLITE_OK && rc2!=4)
- {
- fprintf(stderr, "SQL error: %s\n", zErrMsg);
- sqlite3_free(zErrMsg);
- }
- else
- {
- fprintf(stdout, "Am inregistrat user-ul !\n");
- bzero(answer,50);
- strcat(answer,"Ai fost inregistrat !\n");
- if (write (client,answer,50) <= 0)
- {
- perror ("[client]Eroare la write() spre server.\n");
- exit(-1);
- }
- }
- }
- break;
- case 3:
- printf("Stergere");
- break;
- case 4:
- printf("Deconectare");
- break;
- default:
- printf("Gresit");
- break;
- }
- }
- int main ()
- {
- struct sockaddr_in server;
- struct sockaddr_in from;
- int sd;
- if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
- {
- perror ("[server]Eroare la socket().\n");
- return errno;
- }
- bzero (&server, sizeof (server));
- bzero (&from, sizeof (from));
- server.sin_family = AF_INET;
- server.sin_addr.s_addr = htonl (INADDR_ANY);
- server.sin_port = htons (PORT);
- if (bind (sd, (struct sockaddr *) &server, sizeof (struct sockaddr)) == -1)
- {
- perror ("[server]Eroare la bind().\n");
- return errno;
- }
- if (listen (sd, 5) == -1)
- {
- perror ("[server]Eroare la listen().\n");
- return errno;
- }
- while (1)
- {
- int client;
- int length = sizeof (from);
- printf ("[server]Asteptam la portul %d...\n",PORT);
- fflush (stdout);
- client = accept (sd, (struct sockaddr *) &from, &length);
- if (client < 0)
- {
- perror ("[server]Eroare la accept().\n");
- continue;
- }
- pid_t pd;
- pd = fork();
- if(pd == 0)
- {
- fflush (stdout);
- int optiune;
- selectOption(client,optiune);
- }
- else
- {
- continue;
- } //fork
- } /* while */
- } /* main */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement