Ejemplo n.º 1
0
boost::tuple<shared_data::action, client_info> shared_data::process_user(const std::string& uname,
        const std::string& phash,
        int session_id)
{
    boost::mutex::scoped_lock lock(guard_);
    // XXX Get password from database.
    // if(lookup_username_in_database_fails) {
    //     return boost::make_tuple(user_not_found, it->second);
    // }
    auto it = clients_.find(uname);
    if(session_id == -1) {
        // No session id, check if user name in list already.
        if(it == clients_.end()) {
            // User name not in list. Let's add it.
            auto ret = clients_.insert(std::pair<std::string, client_info>(uname, client_info(generate_session_id(), true, generate_salt())));
            it = ret.first;
        }
    } else {
        if(it == clients_.end()) {
            // user not in list, but we've got a session id. Expire session and generate a new id.
            auto ret = clients_.insert(std::pair<std::string, client_info>(uname, client_info(generate_session_id(), true, generate_salt())));
            it = ret.first;
        } else {
            // We have been sent a session_id, check if it's valid.
            if(it->second.session_id != session_id) {
                it->second.signed_in = false;
                return boost::make_tuple(bad_session_id, it->second);
            }
        }
    }
    if(phash.empty()) {
        return boost::make_tuple(send_salt, it->second);
    } else {
        if(check_password(it->second.salt, fixed_password, phash)) {
            it->second.signed_in = true;
            return boost::make_tuple(login_success, it->second);
        } else {
            it->second.signed_in = false;
            return boost::make_tuple(password_failed, it->second);
        }
    }
}
Ejemplo n.º 2
0
int main(int argc, char const *argv[])
{
	if( argc < 2)
	{
		printf("请传入参数\n");
		exit(1);
	}

	int sockfd;
	sockfd = socket(AF_INET,SOCK_STREAM,0);
	if( sockfd < 0 )
	{
		printf("socekt错误%s\n",strerror(errno));
		exit(1);
	}

	struct sockaddr_in addr;
	memset(&addr,0,sizeof(addr));
	addr.sin_family = AF_INET;
    addr.sin_port = htons(atoi(argv[1]));
    addr.sin_addr.s_addr = INADDR_ANY;

    if( bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)) < 0)
    {
    	printf("socket绑定错误%s\n",strerror(errno));
    	exit(1);
    }

    if( listen(sockfd,10) < 0 )
    {
    	printf("socket监听错误%s\n",strerror(errno));
    	exit(1);
    }   

    while(1)
    {
    	struct sockaddr_in clientaddr;
    	socklen_t len = sizeof(clientaddr);
    	int clientfd = accept(sockfd,(struct sockaddr*)&clientaddr,&len);
    	if( clientfd < 0 )
    	{
    		printf("接收客户端数据失败%s\n",strerror(errno));
    		continue;
    	}
    	client_info(clientaddr);
    	do_service(clientfd);
    	close(clientfd);
    }
	return 0;
}
Ejemplo n.º 3
0
int main(int argc, char const *argv[])
{

	socked = socket(AF_INET,SOCK_DGRAM,0);
	if( socked < 0 )
	{
		printf("socket创建失败%s\n",strerror(errno));
		exit(1);
	}
	
	struct sockaddr_in udpaddr;
	memset(&udpaddr,0,sizeof(udpaddr));

	udpaddr.sin_family = AF_INET;
	udpaddr.sin_port = htons(atoi(argv[1]));
	udpaddr.sin_addr.s_addr = INADDR_ANY;

	if( bind(socked,(struct sockaddr*)&udpaddr,sizeof(udpaddr)) < 0 )
	{
		printf("绑定失败%s\n",strerror(errno));
		exit(1);
	}

	char buff[1024];
	memset(buff,0,1024);

	struct sockaddr_in clientaddr;
	socklen_t len = sizeof(clientaddr);
	ssize_t n;
	while(1)
	{
		if( (n = recvfrom(socked,buff,sizeof(buff),0,(struct sockaddr*)&clientaddr,&len)) < 0)
		{
			printf("接收数据失败%s\n",strerror(errno));
			continue;
		}
		client_info(n,buff,clientaddr);	
		//do_service(clientaddr);
	}
	return 0;
}
Ejemplo n.º 4
0
int main(int argc, char **argv)
{
	char buff[MAX_BUFF], result_buff[SEND_BUFF]; // array for 'converted command(input)', 'result (output)'
	int n;				
	int server_fd, conn_fd;						 // socket discriptor for server and client
	int clilen;									// client struct's size
	struct sockaddr_in srvaddr, cliaddr;		// socket address struct
	

	if(argc != 2)  // if wrong input case
	{
		write(STDOUT_FILENO, "Server error : Check Port Numver\n", strlen("Server error : Check Port Numver\n"));
		return -1;
	}

	/* open socket */
	if((server_fd = socket(PF_INET, SOCK_STREAM,0)) < 0)
	{	
		write(STDERR_FILENO, "Server : socket() err!!\n", strlen("Server : socket() err!!\n"));
		return -1;
	}		
	
	/* initialize server socket struct */
	memset(&srvaddr, 0, sizeof(srvaddr));
	srvaddr.sin_family= PF_INET;
	srvaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	srvaddr.sin_port = htons(atoi(argv[1]));
	
	//bind socket with address
	if(bind(server_fd, (struct sockaddr*)&srvaddr, sizeof(srvaddr)) < 0)
	{
		write(STDERR_FILENO, "Server : bind() err!!\n", strlen("Server : bind() err!!\n"));
		return -1;//exit(1);
	}



	// listen	(5 time)
	if(listen(server_fd, 5) < 0)
	{
		write(STDERR_FILENO, "Server : listen() err!!\n", strlen("Server : listen() err!!\n"));
		return -1;

	}



	for(;;)
	{

		clilen = sizeof(cliaddr);
		/* accept client's connection */
		conn_fd = accept(server_fd, (struct sockaddr* ) &cliaddr, &clilen);
		if(conn_fd < 0)  // connection falied case
		{
			write(STDERR_FILENO, "Server : accept() err!!\n", strlen("Server : accept() err!!\n"));
			return -1;
		}
		/*display client ip and port*/
		if(client_info(&cliaddr) < 0)
		{
			write(STDERR_FILENO,"Server : client_info() err!!\n", strlen("Server : client_info() err!!\n"));
			return -1;
		}

		while(1)
		{
			n = read(conn_fd, buff, MAX_BUFF);
			buff[n] = '\0';
			
			if(cmd_process(buff, result_buff) < 0)
			/*command execute and result*/
			{
				write(STDERR_FILENO, "Server : cmd_process() err!!\n", strlen("Server : cmd_process() err!!\n"));
				break;
			}
			/* send result to client */
			write(conn_fd, result_buff, strlen(result_buff));
			
			/* if converted command is QUIT*/
			if(!strcmp(result_buff, "QUIT"))
			{
				write(STDOUT_FILENO, "Server Quit!!\n", strlen("Server Quit!!\n"));
				break;
			}
		}
		if(!strcmp(result_buff, "QUIT")) // break loop
			break;

	}
	close(server_fd); // close server socket
	return 0;
}