int NaClSrpcServerLoop(NaClSrpcImcDescType imc_socket_desc,
                       const NaClSrpcHandlerDesc methods[],
                       void* instance_data) {
  NaClSrpcService* service;

  /* Ensure we are passed a valid socket descriptor. */
  if (NACL_INVALID_DESCRIPTOR == imc_socket_desc) {
    NaClSrpcLog(NACL_SRPC_LOG_ERROR,
                "NaClSrpcServerLoop: bad imc_socket_desc\n");
    return 0;
  }
  /* Allocate the service structure. */
  service = (struct NaClSrpcService*) malloc(sizeof(*service));
  if (NULL == service) {
    NaClSrpcLog(NACL_SRPC_LOG_ERROR,
                "NaClSrpcServerLoop: service malloc failed\n");
    return 0;
  }
  /* Build the service descriptor. */
  if (!NaClSrpcServiceHandlerCtor(service, methods)) {
    NaClSrpcLog(NACL_SRPC_LOG_ERROR,
                "NaClSrpcServerLoop: NaClSrpcServiceHandlerCtor failed\n");
    free(service);
    return 0;
  }
  /* Process the RPCs.  ServerLoop takes ownership of service. */
  return ServerLoop(service, imc_socket_desc, instance_data);
}
Пример #2
0
void RunServer(void *pData)
{
	try
    {
		// start server, assume started
        Server::Get()->SetRunning(true);
        
        // launch server loop (blocking call)
        ServerLoop(); 
    }
    catch(...)
    {
        // server failed to start
		OutputDebugString("Exception caught: ServerLoop failed.\n");

		// stop server
        Server::Get()->Stop();
    }

	// update ui, ignonred if not visible
	//SendMessage(gConfigWnd, APP_EN_START, 0, (LPARAM)(BOOL)TRUE);
	//SendMessage(gConfigWnd, APP_EN_STOP, 0, (LPARAM)(BOOL)FALSE);

	// server has shut down
	OutputDebugString("Server: Server Shutdown.\n");
	
    Server::Get()->SetRunning(false);
}
Пример #3
0
int EntryPoint(void) {
    SOCKET s;

    StartLogger(TEXT(LOGFILE));

    if(StartWinsock() != 0)
        return -1;

    s = CreateListenSocket(SERVER_PORT);
    if((s == SOCKET_ERROR) || (s == INVALID_SOCKET))
        return -1;
    ServerLoop(s);

    WSACleanup();

    return 1;
}
Пример #4
0
main (int argc, char *argv[])
{
    int socketFD;
    int connectionFD;
    char buffer[80];
    int ret;
    int port;
    int schem;
    if (argc < 3)
    {
        strcpy (buffer, "Usage: ServerSocket PortNumber ServerScheme [MaxClients]\n");
        write (2, buffer, strlen (buffer));
        exit (1);
    }
    port = atoi(argv[1]);
    schem = atoi(argv[2]);

#ifdef DEBUG
    printf("port: %s\n", argv[1]);
    printf("schem: %s\n",argv[2]);
#endif

    MAX_CLIENTS = 100;
    if(argc == 4)
        MAX_CLIENTS = atoi(argv[3]);
    NUM_CONECTIONS = 0;

    socketFD = createServerSocket (port);
    if (socketFD < 0)
    {
        perror ("Error creating socket\n");
        exit (1);
    }
    setScheme(schem);
    signal(SIGCHLD,func_sigchild);  // reprogramacio del signal sigchld, quan un fill acaba descompta el nombre de conexions totals
    while (1) {
#ifdef DEBUG
        printf("Conexions: [%d/%d]\n",NUM_CONECTIONS, MAX_CLIENTS);
#endif
        ServerLoop(socketFD);
    }
}
Пример #5
0
int main(int argc, char *argv[])
{
    long_t     master;
    int32_t    Signal;
    GMI_RESULT Result = GMI_SUCCESS;
    struct soap soap;
    sigset_t   NewMask;
    sigset_t   OldMask;
    struct sigaction Sa;

    //signal
    Sa.sa_handler = SignalHandler;
    sigfillset(&Sa.sa_mask);
    Sa.sa_flags = SA_NOMASK;
    sigemptyset(&NewMask);
    for (Signal = 1; Signal <= _NSIG; ++Signal)
    {
        if ( ( Signal == SIGIO )
                || ( Signal == SIGPOLL )
                || ( Signal == SIGINT )
                || ( Signal == SIGQUIT )
                || ( Signal == SIGHUP )
                || ( Signal == SIGPIPE )
                || ( Signal == SIGSEGV )
           )
        {
            sigaction(Signal, &Sa, NULL);
        }
        else
        {
            sigaddset(&NewMask, Signal);
        }
    }
    sigprocmask(SIG_BLOCK, &NewMask, &OldMask);

    //get debug opt
    const char_t *OptString = "ei";
    struct option Opts[] = {
    		{"error", no_argument, NULL, 'e'},
    		{"info", no_argument, NULL, 'i'},
    		{0, 0, 0, 0},
    	};
    int C;
    boolean_t ErrLog  = false;
    boolean_t InfoLog = false;
    while ((C = getopt_long(argc, argv, OptString, Opts, NULL)) != -1)
    {    	
    	switch (C)
    	{
    	case 'e':
    		ErrLog = true;
    		break;
    	case 'i':
    		InfoLog = true;
    		break;
    	default:
    		break;
    	}    
    	printf("opts:%d:%d\n", ErrLog, InfoLog);
    }
    //log init    
    Result = LogInitial(ErrLog, InfoLog);
    if (FAILED(Result))
    {
        ONVIF_ERROR("LogInitial fail, Result = 0x%lx\n", Result);
        return Result;
    }    
    
    //daemon register to daemon server
    Result = DaemonRegister();
    if (FAILED(Result))
    {
        ONVIF_ERROR("DaemonRegister fail, Result = 0x%lx\n", Result);
        DEBUG_LOG(g_DefaultLogClient, e_DebugLogLevel_Exception, " DaemonRegister fail, Result = 0x%lx\n", Result);
        return Result;
    }    

    //system initial
    Result = SysInitialize(GMI_ONVIF_AUTH_PORT);
    if (FAILED(Result))
    {
        DaemonUnregister();
        ONVIF_ERROR("SysInitialize fail, Result = 0x%lx\n", Result);
        DEBUG_LOG(g_DefaultLogClient, e_DebugLogLevel_Exception, " SysInitialize fail, Result = 0x%lx\n", Result);
        return Result;
    }

    //get onvif port, rtsp port
    uint16_t SessionId = 0;
    uint32_t AuthValue = 0;
    SysPkgNetworkPort SysNetworkPort;
    Result = SysGetNetworkPort(SessionId, AuthValue, &SysNetworkPort);
    if (FAILED(Result))
    {
    	g_ONVIF_Port = DEFAULT_SERVER_PORT;
    	g_RTSP_Port  = DEFAULT_RTSP_PORT;
    	ONVIF_ERROR("SysGetNetworkPort fail, Result = 0x%lx\n", Result);
    }
    else
    {
    	g_ONVIF_Port = SysNetworkPort.s_ONVIF_Port;
    	g_RTSP_Port  = SysNetworkPort.s_RTSP_Port;
    }
    ONVIF_INFO("ONVIF_Port %d, RTSP_Port %d\n", g_ONVIF_Port, g_RTSP_Port);
    
    //ptz service
    __tptz__Initialize();

    //soap server init
    soap_init1(&soap, SOAP_ENC_MTOM);
    soap.socket_flags    = MSG_NOSIGNAL;
    soap.accept_flags   |= SO_LINGER;
    soap.connect_flags  |= SO_LINGER;
    soap.linger_time     = 2;
    soap.bind_flags      = SO_REUSEADDR;
    soap.send_timeout    = 2;
    soap.recv_timeout    = 2;
    soap.accept_timeout  = 10;
    soap.connect_timeout = 10;
    soap.keep_alive      = 5;
    soap_set_mode(&soap, SOAP_C_UTFSTRING);
    master = soap_bind(&soap, NULL, g_ONVIF_Port, 30);
    if (!soap_valid_socket(master))
    {
        ONVIF_ERROR("soap_bind fail, Result = 0x%lx\n", Result);
        DEBUG_LOG(g_DefaultLogClient, e_DebugLogLevel_Exception, " soap_bind fail, Result = 0x%lx\n", Result);
        soap_print_fault(&soap, stderr);
        SysDeinitialize();
        DaemonUnregister();
        exit(1);
    }

    //main server start
    ServerLoop(&soap);

    ONVIF_INFO("soap_end start\n");
    //soap release
    soap_end(&soap);
    soap_done(&soap);
    ONVIF_INFO("soap_end stop\n");

	//ptz deinitialize
    __tptz__Deinitialize();
    ONVIF_INFO("SysDeinitialize start\n");
    SysDeinitialize();
    ONVIF_INFO("SysDeinitialize end\n");
    ONVIF_INFO("DaemonUnregister start\n");
    //daemon unregister
    DaemonUnregister();
    ONVIF_INFO("DaemonUnregister end\n");

    return 0;
}
Пример #6
0
int SSL_SOCKET :: ServerInit(bool NoLoop)
	{
	SECURITY_STATUS ss = 0;

/*	if (wcslen(un))
		{
		// Find certificate in the store
		// Open Certificate Store
		hCS = CertOpenSystemStore(0,_T("MY"));
		if (!hCS)
			return -1;

		CERT_RDN cert_rdn;
		CERT_RDN_ATTR cert_rdn_attr;

		cert_rdn.cRDNAttr = 1;
		cert_rdn.rgRDNAttr = &cert_rdn_attr;

		cert_rdn_attr.pszObjId = szOID_COMMON_NAME;
		cert_rdn_attr.dwValueType = CERT_RDN_ANY_TYPE;
		cert_rdn_attr.Value.cbData = (DWORD)wcslen(un);

		cert_rdn_attr.Value.pbData = (BYTE *)un;
		OurCertificate = CertFindCertificateInStore(hCS, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING ,0,cft,&cert_rdn,NULL);
		}*/
	if (IsExternalCert)
		{
		;
		}
	else
		{
		//BOOL AX;
		OurCertificate = CreateOurCertificate();
		}

	// Configure our SSL SChannel
	memset(&m_SchannelCred,0,sizeof(m_SchannelCred));
	m_SchannelCred.dwVersion = SCHANNEL_CRED_VERSION;
	m_SchannelCred.dwFlags |= SCH_CRED_NO_DEFAULT_CREDS;
	m_SchannelCred.dwFlags = SCH_CRED_NO_DEFAULT_CREDS | SCH_CRED_NO_SYSTEM_MAPPER | SCH_CRED_REVOCATION_CHECK_CHAIN;
	m_SchannelCred.hRootStore = hCS;
	m_SchannelCred.dwMinimumCipherStrength = 128;




	if (OurCertificate)
		{
		m_SchannelCred.cCreds     = 1;
		m_SchannelCred.paCred     = &OurCertificate;
		}

	// AcquireCredentialsHandle

	ss = AcquireCredentialsHandle(0,SCHANNEL_NAME,SECPKG_CRED_INBOUND,0,&m_SchannelCred,0,0,&hCred,0);
//	ss = AcquireCredentialsHandle(0,UNISP_NAME,SECPKG_CRED_INBOUND,0,&m_SchannelCred,0,0,&hCred,0);
	if (FAILED(ss))
		return -1;

	if (NoLoop)
		return 0;
	return ServerLoop();
	}
Пример #7
0
// Start up our server
bool CServerSocket::StartServer( )
{
	//struct sockaddr_in ain;

	sock = socket( AF_INET, SOCK_STREAM, 0 );
	if (sock == INVALID_SOCKET) 
    {
		Log( MSG_FATALERROR, "Could not create a socket : %s", strerror(errno) );
		return false;
	}

    int optval = 1;
    if(setsockopt(sock, SOL_SOCKET,SO_KEEPALIVE,(const char*)&optval,sizeof(optval))==-1)
    {
        Log(MSG_ERROR, "setsockopt:SO_KEEPALIVE" );        
    }    
    setsockopt(sock, IPPROTO_TCP,TCP_NODELAY,(const char*)&optval,sizeof(optval));
	ain.sin_family		= AF_INET;
	ain.sin_addr.s_addr	= INADDR_ANY;
	ain.sin_port		= htons( port );
	memset(&(ain.sin_zero), '\0', 8);
	if ( bind( sock, (const sockaddr*)&ain, sizeof( struct sockaddr ) ) ) 
    {
		Log( MSG_FATALERROR, "Could not bind socket: %s", strerror(errno) );
		closesocket( sock );
		sock = INVALID_SOCKET;
		return false;
	}
	if ( listen( sock, SOMAXCONN ) == -1 )
    {
		Log( MSG_FATALERROR, "Could not listen on socket : %s", strerror(errno) );
		closesocket( sock );
		sock = INVALID_SOCKET;
		return false;
	}
    if (LOG_THISSERVER == LOG_CHARACTER_SERVER)
    {
        //struct sockaddr_in ain;
        sckISC = socket( AF_INET, SOCK_STREAM, 0 );
    	if (sckISC == INVALID_SOCKET) {
    		Log( MSG_ERROR, "Could not create valid ISC socket (WSK2 ERROR: %i)", WSAGetLastError( ) );
    		return false;
   		}
    	int optval = 1;
        if(setsockopt(sckISC, SOL_SOCKET,SO_KEEPALIVE,(const char*)&optval,sizeof(optval))==-1)
        {
            Log(MSG_ERROR, "setsockopt:SO_KEEPALIVE" );        
        }    
        setsockopt(sckISC, IPPROTO_TCP,TCP_NODELAY,(const char*)&optval,sizeof(optval));
	    sain.sin_family		= AF_INET;
	    sain.sin_addr.s_addr	= INADDR_ANY;
	    sain.sin_port		= htons( Config.CharsPort);//29110 );
	    memset(&(sain.sin_zero), '\0', 8);
	    if ( bind( sckISC, (const sockaddr*)&sain, sizeof( struct sockaddr ) ) ) 
        {
		    Log( MSG_FATALERROR, "Could not bind socket: %s", strerror(errno) );
            closesocket( sckISC );
		    sckISC = INVALID_SOCKET;
		    return false;
	    }
	    if ( listen( sckISC, SOMAXCONN ) == -1 )
        {
		    Log( MSG_FATALERROR, "Could not listen on socket : %s", strerror(errno) );
		    closesocket( sckISC );
		    sckISC = INVALID_SOCKET;
		    return false;
	    }
	    Log( MSG_INFO, "opened ISC poort %i",29110 );
    	
    }
                       
    if (LOG_THISSERVER == LOG_WORLD_SERVER)
    {
        struct sockaddr_in ain;
    	sckISC = socket( AF_INET, SOCK_STREAM, 0 );
    	if (sckISC == INVALID_SOCKET) {
    		Log( MSG_ERROR, "Could not create valid ISC socket (WSK2 ERROR: %i)", WSAGetLastError( ) );
    		return false;
    	}
    	ain.sin_family		= AF_INET;
    	ain.sin_addr.s_addr	= inet_addr(Config.CharIP);//( "127.0.0.1" );
    	ain.sin_port		= htons( Config.CharPort);//29110 );
    	if ( connect( sckISC, (const sockaddr*)&ain, sizeof( ain ) ) == SOCKET_ERROR ) {
    		Log( MSG_ERROR, "Could not connect to ISC (WSK2 ERROR: %i)", WSAGetLastError( ) );
    		closesocket( sckISC );
    		sckISC = INVALID_SOCKET;
    		return false;
    	}
    	
    	
   	    sckISCII = socket( AF_INET, SOCK_STREAM, 0 );
    	if (sckISCII == INVALID_SOCKET) {
    		Log( MSG_ERROR, "Could not create valid ISC socket (WSK2 ERROR: %i)", WSAGetLastError( ) );
    		return false;
   		}
    	int optval = 1;
        if(setsockopt(sckISCII, SOL_SOCKET,SO_KEEPALIVE,(const char*)&optval,sizeof(optval))==-1)
        {
            Log(MSG_ERROR, "setsockopt:SO_KEEPALIVE" );        
        }    
        setsockopt(sckISCII, IPPROTO_TCP,TCP_NODELAY,(const char*)&optval,sizeof(optval));
	    sain.sin_family		= AF_INET;
	    sain.sin_addr.s_addr	= INADDR_ANY;
	    sain.sin_port		= htons( Config.WorldsPort );//29210 );
	    memset(&(sain.sin_zero), '\0', 8);
	    if ( bind( sckISCII, (const sockaddr*)&sain, sizeof( struct sockaddr ) ) ) 
        {
		    Log( MSG_FATALERROR, "Could not bind socket: %s", strerror(errno) );
            closesocket( sckISCII );
		    sckISCII = INVALID_SOCKET;
		    return false;
	    }
	    if ( listen( sckISCII, SOMAXCONN ) == -1 )
        {
		    Log( MSG_FATALERROR, "Could not listen on socket : %s", strerror(errno) );
		    closesocket( sckISCII );
		    sckISCII = INVALID_SOCKET;
		    return false;
	    }
	    Log( MSG_INFO, "opened ISC poort %i",Config.WorldsPort );//29210 );
    }
    if (LOG_THISSERVER == LOG_LOGIN_SERVER)
    {
        /* struct sockaddr_in ain; */
    	sckISC = socket( AF_INET, SOCK_STREAM, 0 );
    	if (sckISC == INVALID_SOCKET) {
    		Log( MSG_ERROR, "Could not create valid ISC socket (WSK2 ERROR: %i)", WSAGetLastError( ) );
    		return false;
    	}
		if (listen(sckISC, SOMAXCONN) == -1)
		{
			Log(MSG_FATALERROR, "Could not listen on socket : %s", strerror(errno));
			closesocket(sckISC);
			sckISC = INVALID_SOCKET;
			return false;
		}
     }
	isActive = true;

	if ( !this->OnServerReady( ) )
    {
		Log( MSG_FATALERROR, "Server could not start" );
		closesocket( sock );
		sock = INVALID_SOCKET;
		isActive = false;
		return false;
	}
	Log( MSG_INFO, "Server started on port %i and is listening.", port );
	//ISCThread( );
	ServerLoop( );
	// Nothing past here is ever really called
	OnServerDie( );
	closesocket( sock );

	return true;
}
Пример #8
0
void StartHost( char const *host_name, 
   char const *service, 
   int addr_family = AF_INET )
{
   addrinfo hints;
   addrinfo *addr;

   if (nullptr == host_name) {
      host_name = "localhost";
   }

   memset( &hints, 0, sizeof(hints) );

   // Which network layer it's using - usually want to UNSPEC, since it doesn't matter.  But since we're hard coding
   // the client sides connection, we will likely want to use AF_INET when we want to bind an address
   hints.ai_family = addr_family;  
   hints.ai_socktype = SOCK_STREAM; // STREAM based, determines transport layer (TCP)
   hints.ai_flags = AI_PASSIVE; // used for binding/listening

   int status = getaddrinfo( host_name, service, &hints, &addr );
   if (status != 0) {
      printf( "Failed to create socket address: %s\n", gai_strerror(status) );
      return;
   }

   addrinfo *iter;
   char addr_name[INET6_ADDRSTRLEN];

   SOCKET host_socket = INVALID_SOCKET;
   for (iter = addr; iter != nullptr; iter = iter->ai_next) {
      inet_ntop( iter->ai_family, GetInAddr(iter->ai_addr), addr_name, INET6_ADDRSTRLEN );
      printf( "Trying to bind addr: family[%i] type[%i] %s : %s\n", 
         iter->ai_family, 
         iter->ai_socktype, 
         addr_name, service );

      host_socket = socket( iter->ai_family, iter->ai_socktype, iter->ai_protocol );
      if (host_socket == INVALID_SOCKET) {
         int error = WSAGetLastError();
         printf( "Failed to create socket:  Socket Error[%i]\n", error );
         continue;
      }

      int result = bind( host_socket, iter->ai_addr, (int)(iter->ai_addrlen) );
      if (SOCKET_ERROR == result) {
         closesocket(host_socket);
         host_socket = INVALID_SOCKET;
         int error = WSAGetLastError();
         printf( "Failed to bind:  Socket Error[%i]\n", error );
         continue;
      }
      break;
   }

   freeaddrinfo(addr);

   if (host_socket == INVALID_SOCKET) {
      printf( "Could not create host.\n" );
      return;
   }

   printf( "Socket bound...\n" );
   // DO HOST STUFF!
   
   // To be continued...
   ServerLoop( host_socket );

   // DONE WITH HOST STUFF!
   closesocket(host_socket);
   host_socket = INVALID_SOCKET;
}