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");
- }
- char userName[30];
- char password[30];
- switch(optiune)
- {
- case 1: // LOGIN
- // read la user si parola verificare baza de date rezolvare
- 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);
- strcat(sql,"SELECT * from USERS WHERE userName='");
- strcat(sql,userName);
- strcat(sql,"' AND password='");
- strcat(sql,password);
- rc = sqlite3_exec(db, sql, call, NULL, &zErrMsg);
- if( rc != SQLITE_OK )
- {
- fprintf(stderr, "SQL error: %s\n", zErrMsg);
- sqlite3_free(zErrMsg);
- }
- else
- {
- fprintf(stdout, "Operation done successfully\n");
- }
- /////////////////////////// rc=0 eroare |||||||||||||||||| rc=4 done
- break;
- case 2:
- printf("Inregistrare");
- 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