Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h> //strlen
- #include <stdlib.h> //strlen
- #include <sys/socket.h>
- #include <arpa/inet.h> //inet_addr
- #include <unistd.h> //write
- #include <pthread.h> //for threading , link with lpthread
- void *login_handler(void *);
- int main(int argc , char *argv[])
- {
- int flag=0 , socket_desc , new_socket , c , *new_sock;
- struct sockaddr_in server , client;
- char *message;
- //Create socket
- socket_desc = socket(AF_INET , SOCK_STREAM , 0);
- if (socket_desc == -1)
- {
- printf("Could not create socket");
- }
- //Prepare the sockaddr_in structure
- server.sin_family = AF_INET;
- server.sin_addr.s_addr = INADDR_ANY;
- server.sin_port = htons( 8888 );
- //Bind
- if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
- {
- puts("bind failed");
- return 1;
- }
- puts("Bind done");
- //Listen
- listen(socket_desc , 3);
- //Accept and incoming connection
- puts("Waiting for incoming connections...");
- c = sizeof(struct sockaddr_in);
- while( (new_socket = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) )
- {
- puts("Connection accepted");
- //Reply to the client
- message = "Welcome,you are now connected.\n";
- write(new_socket , message , 2000);
- pthread_t sniffer_thread;
- new_sock = malloc(1);
- *new_sock = new_socket;
- if( pthread_create( &sniffer_thread , NULL , login_handler , (void*) new_sock) < 0)
- {
- perror("could not create thread");
- return 1;
- }
- while ( flag == 1 )
- {
- if( pthread_create( &sniffer_thread , NULL , login_handler , (void*) new_sock) < 0)
- {
- perror("could not create thread");
- return 1;
- }
- }
- //Now join the thread , so that we dont terminate before the thread
- //pthread_join( sniffer_thread , NULL);
- puts("Authentication progress iniciated.");
- }
- if (new_socket<0)
- {
- perror("accept failed");
- return 1;
- }
- return 0;
- }
- /*
- * This will handle connection for each client
- * */
- void *login_handler(void *socket_desc)
- {
- //Get the socket descriptor
- int sock = *(int*)socket_desc;
- int option , password , client_nummessage[2000];
- char username , *message , client_message[2000];
- //Send some messages to the client
- message = "Welcome to NTF.\n";
- write(sock , message , 2000);
- message = "What do you want to do?.\n";
- write(sock , message , 2000);
- message = "1-Login.\n2-Create new account.\n3-Exit NTF.\n";
- write(sock , message , 2000);
- //Receive a message from client
- recv(sock , client_nummessage , 1 , 0);
- if (*client_nummessage == 1)
- {
- puts("Login request.Requesting username and password.");
- message = "Please insert username.\n->";
- write(sock , message , 2000);
- recv(sock , client_message , 2000 , 0);
- //verificar se user existe. se existir,pedir passe.
- printf("%s",client_message);
- message = "Please insert password.\n->";
- write(sock , message , 2000);
- recv(sock , client_message , 5 , 0);
- //se a passe estiver correta,deu login no sistema. dar return 1 e passar a menu_handler.
- printf("%s",client_message);
- }
- else if (*client_nummessage == 2)
- {
- message = "Please insert desired username. \n->";
- write(sock , message , strlen(message));
- username = recv(sock , client_message , 2000 , 0);
- //verificar se o username existe. se existir, continuar.
- message = "Please insert password. \n->";
- write(sock , message , strlen(message));
- password = recv(sock , client_message , 2000 , 0);
- //verificar requerimentos da passe(opcional)
- //se ambas as credenciais estiverem corretas, repetir o login_handler.
- }
- else if (*client_nummessage == 3)
- {
- free(socket_desc);
- }
- else
- {
- message = "Invalid option. \n->";
- write(sock , message , strlen(message));
- }
- //Free the socket pointer
- free(socket_desc);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement