int main(int argc , char *argv[]){

	unsigned char* my_id=(unsigned char*)DEFAULT_ID_SERVER;
	unsigned char *session_key=NULL;
	unsigned char *secret=NULL;
	int secret_size;
	int key_size;
	int block_size;
	//initialization of variables
	enc_inizialization(&secret_size, &key_size, &block_size);
	

	//Check on command line inputs
	//In case of second argument is 2,then set the second value as a ID server
	if(argc==2) my_id=(unsigned char*)argv[1];

	int socket_desc , client_sock , c;
	struct sockaddr_in server , client;
	int socket_dest=0;

	//The secret actually must be retrived from an ecrypted file
	secret=calloc(secret_size, sizeof(unsigned char));
	session_key=calloc(key_size, sizeof(unsigned char));

	secret=retrieve_secret(NULL,secret_size);
    
	socket_desc = socket(AF_INET , SOCK_STREAM , 0);
	if (socket_desc == -1){
        	fprintf(stderr,"Could not create socket");
    	}
    	puts("Socket created");
     
    //Prepare the sockaddr_in structure
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons( PORT_NUMBER );
    
	int optval=1;
	setsockopt(socket_desc, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); 
    //Bind
	if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0){
        	perror("bind failed. Error");
        	return 1;
    	}
    	puts("Bind done");


	    //Listen
	if(socket_dest<0) return -1;
    	listen(socket_desc , 3);
     
    //Accept and incoming connection
    	puts("Waiting for incoming connections...");
    	c = sizeof(struct sockaddr_in);
     
    //accept connection from an incoming client
    	client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c);
   	 if (client_sock < 0){
        	perror("accept failed");
        	return 1;
    }
   
	fprintf(stderr,"Connection accepted");
	session_key=protocol_server(client_sock, my_id,secret, secret_size, block_size,key_size);
	fprintf(stderr,"\nStart Session\n");
	session_server(client_sock, block_size, session_key, key_size);
	return 0;

}
Пример #2
0
int make_session(ne_session **sess, server_fn fn, void *ud)
{
    return session_server(sess, fn, ud);
}