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; }
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; }
/* * 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; }
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; }
/* * 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; }