Beispiel #1
0
int
main( int argc, const char * argv[] )
{
	entity = rpc_entity_new( "(module:server app:test)", NULL );

	signal( SIGTERM, bye );

	mbus_init( NULL );

	rpc_entity_register( entity, "math.sum", __rpc_math_sum, entity );
	rpc_entity_register( entity, "math.sub", __rpc_math_sub, entity );

	rpc_entity_subscribe( entity, MEVENT_NEW_ENTITY,
			( MCallbackFunc ) new_entity, entity );
	rpc_entity_subscribe( entity, MEVENT_LOST_ENTITY,
			( MCallbackFunc ) lost_entity, entity );

	mbus_loop();

	return 0;
}
Beispiel #2
0
int
main( int argc, char * argv[] )
{
  MClient * client;

  mbus_init( NULL );

  client = mbus_client_new( "(app:mentity module:libmbusc type:test)", NULL );

  mbus_client_subscribe( client, MEVENT_UNKNOWN_MESSAGE,
      ( MCallbackFunc ) unknown_message, client );
  mbus_client_subscribe( client, MEVENT_LOST_ENTITY,
      ( MCallbackFunc ) lost_entity, client );
  mbus_client_subscribe( client, MEVENT_NEW_ENTITY,
      ( MCallbackFunc ) new_entity, client );
  mbus_client_subscribe( client, MEVENT_ERROR,
      ( MCallbackFunc ) transport_error, client );

  mbus_loop();

  return 0;
}
Beispiel #3
0
/*
 * To sort out early init calls ordering a helper function is provided to
 * check if the mbus driver has beed initialized. Function check if the driver
 * has been initialized, if not it calls the init function that probes
 * the driver and updates the return value.
 */
bool mbus_probed(void)
{
	return mbus_init() == 0;
}
Beispiel #4
0
int main(int argc, char *argv[])
{
    struct mbus	*m;
    char		 c_addr[60], *token_u[2], *token_e[2];
    int		 seed = (gethostid() << 8) | (getpid() & 0xff), final_iters;
    struct timeval	 timeout;
    int		 i, num_sessions = 0;
    char **xargv = xmalloc(argc);
    int  xargc=0;

#ifdef WIN32
    win32_create_null_window(); /* Needed to listen to messages */
#else
    signal(SIGCONT, sigchld_handler);
    signal(SIGCHLD, sigchld_handler);
    signal(SIGINT, sigint_handler);
    signal(SIGTERM, sigint_handler);
    signal(SIGHUP, sigint_handler);
#endif

    debug_msg("rat-%s started argc=%d\n", RAT_VERSION, argc);

    /* We have two modes: one for operation as a transcoder, one */
    /* when working as a normal end-system audio tool. We choose */
    /* based on the first command line argument supplied.        */
    if ((argc > 2) && (strcmp(argv[1], "-T") == 0)) {
        num_sessions = 2;
    } else {
        num_sessions = 1;
    }

    if (parse_options_early(argc, (const char**)argv) == FALSE) {
        return FALSE;
    }

    srand48(seed);
    snprintf(c_addr, 60, "(media:audio module:control app:rat id:%lu)", (unsigned long) getpid());
    debug_msg("c_addr = %s\n", c_addr);
    m = mbus_init(mbus_control_rx, mbus_err_handler, c_addr);
    if (m == NULL) {
        fatal_error("RAT v" RAT_VERSION, "Could not initialize Mbus: Is multicast enabled?");
        return FALSE;
    }

    /* pull out -X arguments */
    for(i=0; i<argc; i++) {
        if( strcmp(argv[i],"-X") == 0 ) {
            xargv[xargc] = argv[i];
            xargc++;
            i++;
            xargv[xargc] = argv[i];
            xargc++;
        }
    }


    if (ui_enabled) {
        token_u[0] = generate_token();
        fork_process(UI_NAME, c_addr, &pid_ui, 1, token_u, xargc, xargv);
        debug_msg("Controller waiting for %s from UI...\n", token_u[0]);
        if ((u_addr = mbus_rendezvous_waiting(m, "()", token_u[0], m, 20000000)) == NULL) {
            fatal_error("RAT v" RAT_VERSION, "MBUS Failed to rendezvous with UI - Likely firewall/VPN issue");
            return FALSE;
        }
        debug_msg("Controller has rendezvous'd with UI (%s)\n",u_addr);
    }

    token_e[0] = generate_token();
    token_e[1] = generate_token();
    fork_process(ENGINE_NAME, c_addr, &pid_engine, num_sessions, token_e, xargc, xargv);
    should_exit = FALSE;
    for (i = 0; i < num_sessions; i++) {
        debug_msg("Controller waiting for %s from media engine...\n", token_e[i]);
        if ((e_addr[i] = mbus_rendezvous_waiting(m, "()", token_e[i], m, 20000000)) == NULL ) {
            fatal_error("RAT v" RAT_VERSION, "Failed to rendezvous with media engine - Likely firewall/VPN issue");
            return FALSE;
        }
        debug_msg("Controller rendezvous'd with media engine (%s)\n",e_addr[i]);
    }

    if (parse_addresses(m, e_addr, argc, argv) == TRUE) {
        char	*peer;

        if (ui_enabled) {
            if ((peer = mbus_rendezvous_go(m, token_u[0], (void *) m, 20000000)) == NULL) {
                fatal_error("RAT v" RAT_VERSION, "Failed to rendezvous with UI - Likely firewall/VPN issue");
                return FALSE;
            }
            debug_msg("User interface is %s\n", peer);
        }
        for (i = 0; i < num_sessions; i++) {
            if ((peer = mbus_rendezvous_go(m, token_e[i], (void *) m, 20000000)) == NULL) {
                fatal_error("RAT v" RAT_VERSION, "Failed to rendezvous with UI - Likely firewall/VPN issue");
                return FALSE;
            }
            debug_msg("Media engine %d is %s\n", i, peer);
        }
        debug_msg("Parsing options\n");
        for (i = 0; i < num_sessions; i++) {
            parse_options_late(m, e_addr[i], argc, argv);
        }
        debug_msg("Entering main loop\n");
        final_iters = 25;
        while (final_iters > 0) {
            mbus_send(m);
            mbus_heartbeat(m, 1);
            mbus_retransmit(m);
            timeout.tv_sec  = 0;
            timeout.tv_usec = 20000;
#ifdef WIN32
            win32_check_children_running();
            win32_process_messages();
#endif
            mbus_recv(m, NULL, &timeout);
            if (should_exit) {
                final_iters--;
            }
        }
        if (ui_enabled) {
            terminate(m, u_addr, &pid_ui);
        }
        for (i = 0; i < num_sessions; i++) {
            terminate(m, e_addr[i], &pid_engine);
        }
    }

    if (ui_enabled) {
        kill_process(pid_ui);
    }
    kill_process(pid_engine);

#ifdef WIN32
    WSACleanup();
#endif
    if (ui_enabled) xfree(token_u[0]);
    xfree(token_e[0]);
    xfree(token_e[1]);
    xfree(xargv);
    debug_msg("Controller exit\n");
    return 0;
}
Beispiel #5
0
/*
 * hnapsrv main entry point
 */
int main(int argc, char *argv[])
{
    int port;
    int fdSock, ret;
    struct sockaddr_in addrServer;
	struct ifreq ifr;
	char buf[4];

    openlog ("hs_log", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
#ifdef INCLUDE_BREAKPAD
    breakpad_ExceptionHandler();
#endif
    /* Command line */
    if (argc < 2)
    {
        perror("Error: No port provided\n");
        exit(1);
    }
    port = atoi(argv[1]);	
	syscfg_init();
	/* Bind to the socket */
    fdSock = socket(AF_INET, SOCK_STREAM, 0);
    if (fdSock < 0)
    {
        perror("Error: Failure opening socket\n");
        exit(1);
    }
    memset(&addrServer, 0, sizeof(addrServer));
    addrServer.sin_family = AF_INET;
    addrServer.sin_addr.s_addr = INADDR_ANY;
    addrServer.sin_port = htons(port);

	memset(&ifr, 0, sizeof(ifr));
	strncpy(ifr.ifr_name, "brlan1", IFNAMSIZ);
	//binding interface 
	while (setsockopt(fdSock, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) < 0) {
		log_printf(LOG_WARNING, "Failure binding interface");
		sleep(1);
	}
    if (bind(fdSock, (struct sockaddr*)&addrServer, sizeof(addrServer)) < 0)
    {
        perror("Error: Failure binding socket");
        exit(1);
    }
	mbus_init();

	//If HomeSecurityEthernet4Flag was not set, need toggle Ethernet port 4 again to aviod
	//unexpected reboot during previous SetBridgeConnect method
	memset(buf, 0, sizeof(buf));
	ret = syscfg_get(NULL, "HomeSecurityEthernet4Flag", buf, sizeof(buf));

	//printf("*************************** %s\n", buf);
	if(ret == -1 || strcmp(buf, "1"))
	{
		homesecurity_timeout_handler();
	}

	//For SetBridgeConnect timer 
	signal( SIGALRM, alarm_handler);

    /* Loop forever... */
    while (1)
    {
        int fdRequest;
        socklen_t cbRequest;
        struct sockaddr_in addrRequest;

        /* Listen on the socket */
        listen(fdSock, 5);
        cbRequest = sizeof(addrRequest);
        fdRequest = accept(fdSock, (struct sockaddr*)&addrRequest, &cbRequest);
        if (fdRequest >= 0)
        {
            /* Create the request file streams */
            FILE* pfhRead = fdopen(fdRequest, "r+b");
            FILE* pfhWrite = fdopen(fdRequest, "w+b");
            if (pfhRead && pfhWrite)
            {
                HTTP_HandleRequest(pfhRead, pfhWrite);
            }

            /* Close the socket */
            if (pfhWrite)
            {
                fflush(pfhWrite);
                fclose(pfhWrite);
            }
            if (pfhRead)
            {
                fclose(pfhRead);
            }
        }
    }

    return 0;
}