Beispiel #1
0
int  
Mediator::initClient(char* ip, int cmd_fd, int cmd_port, int data_port, int time_port, int info_port){
	int data_fd = socketManager->find_data_fd(ip, data_port);
	string client_ip(ip);
	ClientNode node(client_ip, cmd_port, cmd_fd, data_fd, time_port, info_port);
	clientList.setActiveClient(node);
}
Beispiel #2
0
	/*
	 *
	 * Recebe os HELLO packets dos clientes e zera o tempo deles.
	 *
	 */ 
	static void* receive_hellos(void *param) {
		int iSockFd=-1;
		int iLength=0;
		struct sockaddr_in servAddr,cliAddr;
		char buff[1024];
		iSockFd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
		memset(&servAddr,0,sizeof(servAddr));
		memset(&cliAddr,0,sizeof(cliAddr));
		servAddr.sin_family=AF_INET;
		servAddr.sin_addr.s_addr=inet_addr(Server::server_ip.c_str());
		servAddr.sin_port=htons(HELLO_PORT);
		int cliAddrLen=sizeof(struct sockaddr_in);
		int bindRet=bind(iSockFd,(struct sockaddr*)&servAddr,sizeof(servAddr));
		//cout <<"Bind returned "<<bindRet<<endl;
		while(true) {
			int num_bytes = recvfrom(iSockFd,buff,1024,0,
								(struct sockaddr*)&cliAddr,(socklen_t*)&cliAddrLen);
			/* pegar IP do client que mandou HELLO */
			std::string client_ip(inet_ntoa(cliAddr.sin_addr));

			/* zerar tempo de HELLO do client SE ele existir */
			if(clients.count(client_ip) != 1) {
				/* recebeu HELLO de client NAO registrado */
				cout << "Received HELLO packet from non registered client";
				cout << ": ip=" << client_ip << endl;
			} else {
				clients[client_ip].received_hello();
			}
			//close(iSockFd);
		}
	}
Beispiel #3
0
 //--------------------------------------------------------------
 unsigned int
 Reactor::_allow(Protocol* const protocol, const long fd){
     std::string client_ip(128, 0);
     std::string client_name(128, 0);
     
     libwebsockets_get_peer_addresses((int)fd,
                                      &client_name[0], client_name.size(),
                                      &client_ip[0], client_ip.size());
     return protocol->_allowClient(client_name, client_ip);
 }
 //--------------------------------------------------------------
 unsigned int
 Reactor::_allow(struct libwebsocket *ws, Protocol* const protocol, const long fd){
     std::string client_ip(128, 0);
     std::string client_name(128, 0);
     
     libwebsockets_get_peer_addresses(context, ws, libwebsocket_get_socket_fd(ws),
                                      &client_name[0], client_name.size(),
                                      &client_ip[0], client_ip.size());
     return protocol->_allowClient(client_name, client_ip);
 }
Beispiel #5
0
unsigned int WebSockets::onAllow(
			WebSocketProtocol* protocol
			,const long fd
)
{
	string client_ip(128, 0);
	string client_name(128, 0);
	
	libwebsockets_get_peer_addresses(
			(int)fd
			,&client_name[0]
			,client_name.size()
			,&client_ip[0]
			,client_ip.size()
	);
	
	return protocol->allowClient(client_name, client_ip);
}
Beispiel #6
0
    void handleConnect (RPCServerImp::pointer new_connection,
        boost::system::error_code const& error)
    {
        bool delay = false;

        if (!error)
        {
            // Restrict callers by IP
            std::string client_ip (
                new_connection->getRemoteEndpoint ().address ().to_string ());

            if (! isClientAllowed (client_ip))
            {
                startListening ();
                return;
            }

            new_connection->getSocket ().async_handshake (AutoSocket::ssl_socket::server,
                    std::bind (&RPCServer::connected, new_connection));
        }
        else
        {
            if (error == boost::system::errc::too_many_files_open)
                delay = true;

            WriteLog (lsINFO, RPCDoor) << "RPCDoorImp::handleConnect Error: " << error;
        }

        if (delay)
        {
            mDelayTimer.expires_from_now (boost::posix_time::milliseconds (1000));
            mDelayTimer.async_wait (std::bind (&RPCDoorImp::startListening, this));
        }
        else
        {
            startListening ();
        }
    }
Beispiel #7
0
void 
Mediator::
initRemote(char* msg, int cmd_fd){

	string username = string(strtok(msg, "|\n"));
	int data_port 	= atoi(strtok(NULL, "|\n"));
	
	char* ip = socketManager->getPeerIP(cmd_fd);
	int	cmd_port = socketManager->getPeerPort(cmd_fd);
	int data_fd = socketManager->find_data_fd(ip, data_port);
	string client_ip(ip);
	ClientNode node(client_ip, cmd_port, cmd_fd, data_fd, 0, 0);

	int filedes[2];
	pipe(filedes);
	
	pid_t 	childpid;
	if ((childpid = fork()) < 0){
		cerr << "Can not fork!\n";
		return;
	}
	else if (childpid == 0){
		char c_temp[64];
		ioStream->readLine(filedes[0], c_temp, 64);
	    	//sleep(1);
		RemoteHandler remote_handler(node, username, socketManager);
		remote_handler.run();
		_exit(7);
	}
	else {
		ZombieHandleThread z_thread(childpid);
		socketManager->closeByFD(cmd_fd);
		socketManager->closeByFD(data_fd);
		const char *p_temp = "Here goes child\n";
		ioStream->writen(filedes[1], p_temp, strlen(p_temp));
	}

}