Advertisement
Guest User

Untitled

a guest
Dec 31st, 2017
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.45 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <errno.h>
  5. #include <unistd.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <stdlib.h>
  9. #include <sqlite3.h>
  10. /* portul folosit */
  11. #define PORT 2099
  12.  
  13. /* codul de eroare returnat de anumite apeluri */
  14. extern int errno;
  15.  
  16.  
  17. static int call(void *data,int argc, char **argv, char **azColName)
  18. {
  19. if (argv==NULL)
  20. return 0;
  21. else
  22. return 4;
  23. }
  24.  
  25.  
  26. void selectOption(int client,int optiune)
  27. {
  28. if (read (client, &optiune,sizeof(optiune)) <= 0)
  29. {
  30. perror ("[server]Eroare la read() de la client.\n");
  31. //close (client); /* inchidem conexiunea cu clientul */
  32. }
  33.  
  34. // Pregatim structurile si descriptorii pentru a accesa baza de date
  35. sqlite3 *db;
  36. char *zErrMsg = 0;
  37. int rc;
  38. char *sql;
  39. rc = sqlite3_open("data.db", &db);
  40. if( rc )
  41. {
  42. fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  43. exit(-1);
  44. }
  45. else
  46. {
  47. fprintf(stderr, "Opened database successfully\n");
  48. }
  49.  
  50.  
  51. /* sql = "INSERT INTO users (userName,password)" \
  52. "VALUES ('cata','nut' );";
  53. rc = sqlite3_exec(db, sql, call, 0, &zErrMsg);
  54. if( rc != SQLITE_OK )
  55. {
  56. fprintf(stderr, "SQL error: %s\n", zErrMsg);
  57. sqlite3_free(zErrMsg);
  58. }
  59. else {
  60. fprintf(stdout, "Records created successfully\n");
  61. }
  62. */
  63.  
  64.  
  65. char userName[30];
  66. char password[30];
  67. char answer[50];
  68. switch(optiune)
  69. {
  70. case 1: // LOGIN
  71. if (read (client, userName, 30) <= 0)
  72. {
  73. perror ("[server]Eroare la read() de la client.\n");
  74. close (client);
  75. }
  76.  
  77. if (read (client, password, 30) <= 0)
  78. {
  79. perror ("[server]Eroare la read() de la client.\n");
  80. close (client);
  81. }
  82.  
  83. /// Verificam daca ii gasim in baza de date
  84. sql=(char*)malloc(100);
  85. bzero(sql,100);
  86. strcat(sql,"SELECT * from USERS WHERE userName='");
  87. strcat(sql,userName);
  88. strcat(sql,"' AND password='");
  89. strcat(sql,password);
  90. strcat(sql,"'");
  91.  
  92. rc = sqlite3_exec(db, sql, call, NULL, &zErrMsg);
  93. if( rc != SQLITE_OK && rc!=4)
  94. {
  95. fprintf(stderr, "SQL error: %s\n", zErrMsg);
  96. sqlite3_free(zErrMsg);
  97. }
  98. else
  99. {
  100. fprintf(stdout, "Operation done successfully\n");
  101. }
  102.  
  103. if(rc ==4 )
  104. {
  105. bzero(answer,50);
  106. strcat(answer,"Te-ai logat cu succes!");
  107. if (write (client,answer,50) <= 0)
  108. {
  109. perror ("[client]Eroare la write() spre server.\n");
  110. exit(-1);
  111. }
  112. }
  113.  
  114. else if(rc ==0)
  115. {
  116. bzero(answer,50);
  117. strcat(answer,"Nu exista un user cu acest nume!\n");
  118. if (write (client,answer,50) <= 0)
  119. {
  120. perror ("[client]Eroare la write() spre server.\n");
  121. exit(-1);
  122. }
  123.  
  124. }
  125.  
  126. //Trebuie sa trimit mesajele primite
  127. // Aici o sa primesc comenzile pt celalat meniu
  128. break;
  129.  
  130. case 2: // INREGISTRARE
  131.  
  132. if (read (client, userName, 30) <= 0)
  133. {
  134. perror ("[server]Eroare la read() de la client.\n");
  135. close (client);
  136. }
  137.  
  138. if (read (client, password, 30) <= 0)
  139. {
  140. perror ("[server]Eroare la read() de la client.\n");
  141. close (client);
  142. }
  143.  
  144. // Verific daca user-ul este deja folosit
  145. sql=(char*)malloc(100);
  146. bzero(sql,100);
  147. strcat(sql,"SELECT * from USERS WHERE userName='");
  148. strcat(sql,userName);
  149. strcat(sql,"'");
  150.  
  151. rc = sqlite3_exec(db, sql, call, NULL, &zErrMsg);
  152. if( rc != SQLITE_OK && rc!=4)
  153. {
  154. fprintf(stderr, "SQL error: %s\n", zErrMsg);
  155. sqlite3_free(zErrMsg);
  156. }
  157. else
  158. {
  159. fprintf(stdout, "Operation done successfully\n");
  160. }
  161.  
  162. if(rc ==4)
  163. {
  164. bzero(answer,50);
  165. strcat(answer,"Exista un alt user cu acest nume!\n");
  166. if (write (client,answer,50) <= 0)
  167. {
  168. perror ("[client]Eroare la write() spre server.\n");
  169. exit(-1);
  170. }
  171. }
  172.  
  173. else if(rc==0)
  174. {
  175. sql=(char*)malloc(100);
  176. bzero(sql,100);
  177. strcpy(sql,"INSERT into USERS(userName,password) values('");
  178. strcat(sql,userName);
  179. strcat(sql,"','");
  180. strcat(sql,password);
  181. strcat(sql,"')");
  182.  
  183. int rc2;
  184. rc2 = sqlite3_exec(db, sql, call, NULL, &zErrMsg);
  185. if( rc2 != SQLITE_OK && rc2!=4)
  186. {
  187. fprintf(stderr, "SQL error: %s\n", zErrMsg);
  188. sqlite3_free(zErrMsg);
  189. }
  190. else
  191. {
  192. fprintf(stdout, "Am inregistrat user-ul !\n");
  193. bzero(answer,50);
  194. strcat(answer,"Ai fost inregistrat !\n");
  195. if (write (client,answer,50) <= 0)
  196. {
  197. perror ("[client]Eroare la write() spre server.\n");
  198. exit(-1);
  199. }
  200.  
  201. }
  202.  
  203. }
  204.  
  205.  
  206.  
  207. break;
  208. case 3:
  209. printf("Stergere");
  210. break;
  211. case 4:
  212. printf("Deconectare");
  213. break;
  214. default:
  215. printf("Gresit");
  216. break;
  217.  
  218. }
  219. }
  220.  
  221. int main ()
  222. {
  223. struct sockaddr_in server;
  224. struct sockaddr_in from;
  225. int sd;
  226. if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
  227. {
  228. perror ("[server]Eroare la socket().\n");
  229. return errno;
  230. }
  231. bzero (&server, sizeof (server));
  232. bzero (&from, sizeof (from));
  233. server.sin_family = AF_INET;
  234. server.sin_addr.s_addr = htonl (INADDR_ANY);
  235. server.sin_port = htons (PORT);
  236. if (bind (sd, (struct sockaddr *) &server, sizeof (struct sockaddr)) == -1)
  237. {
  238. perror ("[server]Eroare la bind().\n");
  239. return errno;
  240. }
  241. if (listen (sd, 5) == -1)
  242. {
  243. perror ("[server]Eroare la listen().\n");
  244. return errno;
  245. }
  246.  
  247.  
  248. while (1)
  249. {
  250. int client;
  251. int length = sizeof (from);
  252. printf ("[server]Asteptam la portul %d...\n",PORT);
  253. fflush (stdout);
  254. client = accept (sd, (struct sockaddr *) &from, &length);
  255. if (client < 0)
  256. {
  257. perror ("[server]Eroare la accept().\n");
  258. continue;
  259. }
  260.  
  261. pid_t pd;
  262. pd = fork();
  263.  
  264. if(pd == 0)
  265. {
  266. fflush (stdout);
  267. int optiune;
  268. selectOption(client,optiune);
  269. }
  270. else
  271. {
  272.  
  273. continue;
  274. } //fork
  275.  
  276. } /* while */
  277. } /* main */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement