int main(int argc, char const* argv[]) {
  server_t* s;
  sigset_t mask;
  siginfo_t info;
  struct sigaction action;

  if(argc == 1) {
    if(!server_create(&s, "../calories.csv", NULL)) {
      if(!server_create(&s, "./calories.csv", NULL)) {
        printf("File '%s' fot found\n", "calories.csv");
        exit(1);
      }
    }
  } else if(argc == 2) {
    if(!server_create(&s, "../calories.csv", argv[1])) {
      if(!server_create(&s, "./calories.csv", argv[1])) {
        printf("File '%s' fot found\n", "calories.csv");
        exit(1);
      }
    }
  } else {
    printf("%s\n", SERVER_MAIN_HELP);
    exit(1);
  }

  printf("Press CTRL+C to shutdown the server\n");

  sigemptyset(&mask);
  sigaddset(&mask, SIGINT);
  sigprocmask(SIG_BLOCK, &mask, NULL);

  sigemptyset(&action.sa_mask);
  action.sa_flags = SA_SIGINFO;
  sigaction(SIGCHLD, &action, NULL);

  if(server_start(s)) {
    while(true) {
      // signal() is NOT thread safe!
      // And since the server doesn't block signal handling is "not" needed ...
      if(sigwaitinfo(&mask, &info) == -1) {
        perror("sigwaitinfo() failed");
        exit(1);
      }

      switch(info.si_signo) {
      case SIGINT:
        server_destroy(s);
        return 0;
      }
    }
  } else {
    server_destroy(s);
  }
}
Exemple #2
0
int main(int argc, char **argv)
{
	const uint16_t acceptor_port = (uint16_t)((argc >= 2) ? atoi(argv[1]) : 8080);
	char const * const settings_file_name = ((argc >= 3) ? argv[2] : "settings.txt");
	settings_t settings;
	server_t server;
	log_t log;

	log_create(&log, stderr);

	if (!load_settings(&settings, settings_file_name, &log))
	{
		return 1;
	}

	if (!server_create(&server, &log, &settings, acceptor_port))
	{
		settings_destroy(&settings);
		return 1;
	}

	settings_destroy(&settings);

	server_run(&server);
	server_destroy(&server);

	log_destroy(&log);
	return 0;
}
Exemple #3
0
int main(int argc, char *argv[]){
	bool parameters_valid = parameters_are_valid(argc, argv);
	char client_mode[MODE_LENGTH+1] = CLIENT_MODE;
	char server_mode[MODE_LENGTH+1] = SERVER_MODE;

	bool mode_is_client = (strcmp(argv[POS_MODE], client_mode) == OK);
	bool mode_is_server = (strcmp(argv[POS_MODE], server_mode) == OK);

	if (mode_is_client && parameters_valid){
		client_t client;
		client_init(&client, argv[POS_HOSTNAME_C], argv[POS_PORT_C]);
		client_send_fname(&client, argv[POS_SERVER_FILE_NAME], argv[POS_BLOCK_SIZE]);
		client_send_chksms(&client, argv[POS_OLD_FILE_NAME], argv[POS_NEW_FILE_NAME]);
		client_destroy(&client);
		return SYSTEM_EXIT;
	}else if (mode_is_server && parameters_valid){
		server_t server;
		server_init(&server, NULL, argv[POS_PORT_S]);
		server_receive_file_name(&server);
		server_save_chksms(&server);
		server_compare_and_send_chksms(&server);
		server_destroy(&server);
		return SYSTEM_EXIT;
	}
	return PARAMETER_ERROR;
}
Exemple #4
0
int main(int argc, const char *argv[])
{
	if (argc != 3)
	{
		print_usage();
		return 1;
	}

	setup_signal_handlers();

	server *s = server_create((uint16_t)atoi(argv[1]), argv[2]);
	server_listen(s);

	printf("Listening...\n");
	fflush(stdout);

	while (running)
	{
		server_wait(s);
	}

	printf("Shutting down...\n");
	fflush(stdout);

	server_close(s);
	server_destroy(s);

	return 0;
}
Exemple #5
0
void client_finalize()
{
    ASSERT(max_ep > 0);
    cqueue_finalize();
    FREE_ALIGN(client_table);
    server_destroy();
}
Exemple #6
0
void server_game_end() {
    int clientno;
    for (clientno = 0; clientno < MAXCLIENTS; clientno++) {
        if (CLIENT_USED(&clients[clientno]) && clients[clientno].kick_at_end_of_game) 
            server_destroy(&clients[clientno], "game ended");
    }
}
Exemple #7
0
void setRun( char *rel, char *val )
{
	if( strcmp(rel,"=")!=0 )  { unknown_com();  return; }

	if( strcmp(val,"EXIT")==0 )  {
		strcpy( slot_Run, "EXIT" );
		if( prop_Run == AutoOutput )  inqRun();
#ifdef WIN32
		Sleep(3000);
#else
		sleep(3);
#endif
		if( s_mode ) {
   		        server_destroy();
		}
		exit(0);
	} else if( s_mode && strcmp(val,"CLOSE")==0 )  {
	        server_close_client();
	} else if( strcmp(val,"LIVE")==0 )  {
		strcpy( slot_Run, "LIVE" );
		if( prop_Run == AutoOutput )  inqRun();
	} else if( strcmp(val,"SLEEP")==0 )  {
	        sleep(5);
	} else {
		unknown_com();
	}
}
Exemple #8
0
static void server_readable(int fd, short event, void *arg) {
    client_t *client = (client_t*)arg;

    // Der Client wurde 'extern' gekickt, allerdings noch
    // nicht entfernt. Dann wird dieser Readcallback aufgerufen,
    // sollte allerdings nichts mehr machen.
    if (client->kill_me)
        return;

    int ret = evbuffer_read(client->in_buf, fd, 128);
    if (ret < 0) {
        server_destroy(client, strerror(errno));
    } else if (ret == 0) {
        server_destroy(client, "eof reached");
    } else if (EVBUFFER_LENGTH(client->in_buf) > 8192) {
        server_destroy(client, "line too long. go away.");
    } else {
        char *line;
        while ((line = evbuffer_readline(client->in_buf))) {
            lua_pushliteral(L, "on_client_input");   
            lua_rawget(L, LUA_GLOBALSINDEX);      
            lua_pushnumber(L, client_num(client));
            lua_pushstring(L, line);
            free(line);

            // Cycles fuer die Verarbeitung hochsetzen
            lua_set_cycles(L, 0xFFFFFF);
                
            // Input verarbeiten
            output_client = client;
            if (lua_pcall(L, 2, 0, 0) != 0) {
                fprintf(stderr, "error calling on_client_input: %s\n", lua_tostring(L, -1));
                server_writeto(client, lua_tostring(L, -1), lua_strlen(L, -1));
                lua_pop(L, 1);
            }
            output_client = NULL;

            // Kill Me Flag waehrend Aufruf von on_client_input 
            // gesetzt? Direkt rausschmeissen!
            if (client->kill_me) {
                server_destroy(client, client->kill_me);
                return;
            }
        }
    }
}
void nth_site_destroy(nth_site_t *site)
{
  if (site == NULL)
    return;

  if (site->site_auth)
    auth_mod_unref(site->site_auth), site->site_auth = NULL;

  if (site->site_server->srv_sites == site) {
    server_destroy(site->site_server);
  }
}
Exemple #10
0
int
main(int argc, char *argv[]) {
  server_type_t server_type;
  int port;
  read_args(argc, argv, &port, &server_type);
  server_t *server = server_new(server_type, port);
  server_set_accept_callback(server, on_client_accepted);
  server_set_data_callback(server, on_incoming_data);
  server_set_close_callback(server, on_client_closed);
  server_loop(server);
  server_destroy(server);
  return 0;
}
Exemple #11
0
void server_shutdown() {
    int clientno;
    for (clientno = 0; clientno < MAXCLIENTS; clientno++) {
        if (CLIENT_USED(&clients[clientno])) 
            server_destroy(&clients[clientno], "server shutdown");
    }

    listener_shutdown();

#ifdef WIN32
    WSACleanup();
#endif
}
Exemple #12
0
void *
start_server_thread_func (void *ptr)
{
    client_thread = false;
    client_t *client = (client_t *)ptr;
    server_t *server = server_new (&client->buffer);

    server->server_signal = &client->server_signal;
    server->client_signal = &client->client_signal;

    mutex_unlock (client->server_started_mutex);
    prctl (PR_SET_TIMERSLACK, 1);

    pthread_t id = pthread_self ();
    
    int online_cpus = sysconf (_SC_NPROCESSORS_ONLN);
    int available_cpus = sysconf (_SC_NPROCESSORS_CONF);

    if (online_cpus > 1) {
        cpu_set_t cpu_set;
        CPU_ZERO (&cpu_set);
        if (pthread_getaffinity_np (id, sizeof (cpu_set_t), &cpu_set) == 0) {

            /* find first cpu to run on */
            int cpu = 0;
            int i;
            for (i = 1; i < available_cpus; i++) {
                if (CPU_ISSET (i, &cpu_set)) {
                    cpu = i;
                    break;
                }
            }
            /* force server to run on cpu1 */
            if (cpu == 0)
                cpu = 1;
            if (cpu != 0) {
                for (i = 0; i < available_cpus; i++) {
                    if (i != cpu)
                        CPU_CLR (i, &cpu_set);
                }
                CPU_SET (cpu, &cpu_set);
                pthread_setaffinity_np (id, sizeof (cpu_set_t), &cpu_set);
            }
        }
    }

    server_start_work_loop (server);

    server_destroy(server);
    return NULL;
}
Exemple #13
0
static void server_writable(int fd, short event, void *arg) {
    client_t *client = (client_t*)arg;

#ifndef NO_CONSOLE_CLIENT    
    // HACK um die Ausgabe des Consolenclients an
    // stdout statt stdin zu schicken.
    if (fd == STDIN_FILENO) fd = STDOUT_FILENO; 
#endif

    // Kompressionsrest flushen
    server_flush_compression(client);

    // Schreiben
    int ret = evbuffer_write(client->out_buf, fd);
    if (ret < 0) {
        server_destroy(client, strerror(errno));
    } else if (ret == 0) {
        server_destroy(client, "null write?");
    } else {
        if (EVBUFFER_LENGTH(client->out_buf) > 0) 
            event_add(&client->wr_event, NULL);
    }
}
Exemple #14
0
int main(int argc, char** argv)
{
	uv_loop_t* loop;

	loop = uv_default_loop();

	server_initialize(loop, &_server);
	server_start(&_server);

	fprintf(stderr, "socket-server starts...\n");
	uv_run(loop);

	server_destroy(&_server);

	return 0;
}
Exemple #15
0
int main(int argc, char** argv)
{
	server_t* server = server_create("config.xml");
	if(server == NULL) return 0; 

	char buf[512] = {0};

	for(;;) 
	{
		//sleep(1);
		fgets(buf, 512, stdin);
		if(strncmp(buf, "quit", strlen("quit")) == 0) break;

	}

	server_destroy(server);

	return 0;
}
Exemple #16
0
static void
client_destroy (client_t **self_p)
{
    assert (self_p);
    if (*self_p) {
        client_t *self = *self_p;
        fmq_config_destroy (&self->config);
        int server_nbr;
        for (server_nbr = 0; server_nbr < self->nbr_servers; server_nbr++) {
            server_t *server = self->servers [server_nbr];
            server_destroy (&server);
        }
        //  Destroy subscriptions                         
        while (zlist_size (self->subs)) {                 
            sub_t *sub = (sub_t *) zlist_pop (self->subs);
            sub_destroy (&sub);                           
        }                                                 
        zlist_destroy (&self->subs);                      
        free (self);
        *self_p = NULL;
    }
}
Exemple #17
0
//  Finally here's the server thread itself, which polls its two
//  sockets and processes incoming messages
static void
server_thread (void *args, zctx_t *ctx, void *pipe)
{
    server_t *self = server_new (ctx, pipe);
    zmq_pollitem_t items [] = {
        { self->pipe, 0, ZMQ_POLLIN, 0 },
        { self->router, 0, ZMQ_POLLIN, 0 }
    };
    self->monitor_at = zclock_time () + self->monitor;
    while (!self->stopped && !zctx_interrupted) {
        //  Calculate tickless timer, up to interval seconds
        uint64_t tickless = zclock_time () + self->monitor;
        zhash_foreach (self->clients, client_tickless, &tickless);

        //  Poll until at most next timer event
        int rc = zmq_poll (items, 2,
            (tickless - zclock_time ()) * ZMQ_POLL_MSEC);
        if (rc == -1)
            break;              //  Context has been shut down

        //  Process incoming message from either socket
        if (items [0].revents & ZMQ_POLLIN)
            server_control_message (self);

        if (items [1].revents & ZMQ_POLLIN)
            server_client_message (self);

        //  Send heartbeats to idle clients as needed
        zhash_foreach (self->clients, client_ping, self);

        //  If clock went past timeout, then monitor server
        if (zclock_time () >= self->monitor_at) {
            monitor_the_server (self, NULL);
            self->monitor_at = zclock_time () + self->monitor;
        }
    }
    server_destroy (&self);
}
/**
 * main function
 **/
int main(int argc, char ** argv)
{
	int ret;
	int serviceid = 80;

	g_server = server_new();
	atexit(stop);
	signal(SIGINT, terminate);

	ServicesFactory *factory = servicesfactory_new();
	servicesfactory_add(factory, serviceid, NULL, serviceinet_new);

	Connector *connector = connector_new(factory, serviceid);
	connector_readparameters(connector, argv, argc);

	server_addconnector(g_server, connector);

	ret = server_main(g_server);

	server_destroy(g_server);
	servicesfactory_destroy(factory);
	return ret;
}
Exemple #19
0
void server_tick() {
    lua_set_cycles(L, 0xFFFFFF);
    
    lua_pushliteral(L, "server_tick");
    lua_rawget(L, LUA_GLOBALSINDEX);
    if (lua_pcall(L, 0, 0, 0) != 0) {
        fprintf(stderr, "error calling server_tick: %s\n", lua_tostring(L, -1));
        lua_pop(L, 1);
    }

    event_loop(EVLOOP_NONBLOCK);

    // Ungefaehr jede Sekunde alle zu kickenden Clients entfernen.
    static int kicktick = 0;
    if (++kicktick % 10 == 0) {
        int clientno;
        for (clientno = 0; clientno < MAXCLIENTS; clientno++) {
            if (!CLIENT_USED(&clients[clientno])) 
                continue;
            if (clients[clientno].kill_me)
                server_destroy(&clients[clientno], clients[clientno].kill_me);
        }
    }
}
Exemple #20
0
	void run(void)
	{
		server_t *server;
		char line[4096];
		int n_wait = 0;

		server = server_create(m_port);

		while (m_semaphore.wait(n_wait) != 0) {
			if (server_readline(server, line, sizeof(line)) == 0) {
				int len;

				len = strcspn(line, "\n\r");
				if (len == 0)
					continue;
				line[len] = 0;
				addImage(m_gui, line, false);
				n_wait = 0;
			} else {
				n_wait = 10;
			}
		}
		server_destroy(server);
	}
server_t *server_create(url_t const *url,
			tag_type_t tag, tag_value_t value, ...)
{
  server_t *srv;
  msg_mclass_t const *mclass = NULL;
  tp_name_t tpn[1] = {{ NULL }};
  su_root_t *root = NULL;
  http_server_t const *server = NULL;
  int persistent = 0;
  char const *server_str = SERVER_VERSION;
  ta_list ta;

  ta_start(ta, tag, value);
  tl_gets(ta_args(ta),
	  NTHTAG_ROOT_REF(root),
	  NTHTAG_MCLASS_REF(mclass),
	  TPTAG_REUSE_REF(persistent),
	  HTTPTAG_SERVER_REF(server),
	  HTTPTAG_SERVER_STR_REF(server_str),
	  TAG_END());

  if (!root || !url ||
      (url->url_type != url_http && url->url_type != url_https)
      || !(srv = su_home_new(sizeof(*srv)))) {
    ta_end(ta);
    return NULL;
  }

  tpn->tpn_proto = url_tport_default((enum url_type_e)url->url_type);
  tpn->tpn_canon = url->url_host;
  tpn->tpn_host =  url->url_host;
  tpn->tpn_port = url_port(url);

  srv->srv_tports = tport_tcreate(srv, nth_server_class, root,
				  TPTAG_IDLE(600000),
				  TPTAG_TIMEOUT(300000),
				  ta_tags(ta));

  srv->srv_persistent = persistent;
  srv->srv_max_bodylen = 1 << 30; /* 1 GB */

  if (tport_tbind(srv->srv_tports, tpn, http_tports,
		  TAG_END()) >= 0 ||
      tport_tbind(srv->srv_tports, tpn, http_no_tls_tports,
		  TAG_END()) >= 0) {
    srv->srv_root = root;
    srv->srv_mclass = mclass ? mclass : http_default_mclass();
    srv->srv_mflags = MSG_DO_CANONIC;

    if (server)
      srv->srv_server = http_server_dup(srv->srv_home, server);
    else
      srv->srv_server = http_server_make(srv->srv_home, server_str);

    tport_get_params(srv->srv_tports,
		     TPTAG_QUEUESIZE_REF(srv->srv_queuesize),
		     TAG_END());
  }
  else {
    SU_DEBUG_1(("nth_server_create: cannot bind transports "
		URL_FORMAT_STRING "\n",
		URL_PRINT_ARGS(url)));
    server_destroy(srv), srv = NULL;
  }

  ta_end(ta);

  return srv;
}
int main(int argc, char *argv[])
{
	int opt;
	bdaddr_t src_addr;
	int dev_id = -1;
	int fd;
	int sec = BT_SECURITY_LOW;
	uint8_t src_type = BDADDR_LE_PUBLIC;
	uint16_t mtu = 0;
	sigset_t mask;
	bool hr_visible = false;
	struct server *server;

	while ((opt = getopt_long(argc, argv, "+hvrs:t:m:i:",
						main_options, NULL)) != -1) {
		switch (opt) {
		case 'h':
			usage();
			return EXIT_SUCCESS;
		case 'v':
			verbose = true;
			break;
		case 'r':
			hr_visible = true;
			break;
		case 's':
			if (strcmp(optarg, "low") == 0)
				sec = BT_SECURITY_LOW;
			else if (strcmp(optarg, "medium") == 0)
				sec = BT_SECURITY_MEDIUM;
			else if (strcmp(optarg, "high") == 0)
				sec = BT_SECURITY_HIGH;
			else {
				fprintf(stderr, "Invalid security level\n");
				return EXIT_FAILURE;
			}
			break;
		case 't':
			if (strcmp(optarg, "random") == 0)
				src_type = BDADDR_LE_RANDOM;
			else if (strcmp(optarg, "public") == 0)
				src_type = BDADDR_LE_PUBLIC;
			else {
				fprintf(stderr,
					"Allowed types: random, public\n");
				return EXIT_FAILURE;
			}
			break;
		case 'm': {
			int arg;

			arg = atoi(optarg);
			if (arg <= 0) {
				fprintf(stderr, "Invalid MTU: %d\n", arg);
				return EXIT_FAILURE;
			}

			if (arg > UINT16_MAX) {
				fprintf(stderr, "MTU too large: %d\n", arg);
				return EXIT_FAILURE;
			}

			mtu = (uint16_t) arg;
			break;
		}
		case 'i':
			dev_id = hci_devid(optarg);
			if (dev_id < 0) {
				perror("Invalid adapter");
				return EXIT_FAILURE;
			}

			break;
		default:
			fprintf(stderr, "Invalid option: %c\n", opt);
			return EXIT_FAILURE;
		}
	}

	argc -= optind;
	argv -= optind;
	optind = 0;

	if (argc) {
		usage();
		return EXIT_SUCCESS;
	}

	if (dev_id == -1)
		bacpy(&src_addr, BDADDR_ANY);
	else if (hci_devba(dev_id, &src_addr) < 0) {
		perror("Adapter not available");
		return EXIT_FAILURE;
	}

	fd = l2cap_le_att_listen_and_accept(&src_addr, sec, src_type);
	if (fd < 0) {
		fprintf(stderr, "Failed to accept L2CAP ATT connection\n");
		return EXIT_FAILURE;
	}

	mainloop_init();

	server = server_create(fd, mtu, hr_visible);
	if (!server) {
		close(fd);
		return EXIT_FAILURE;
	}

	if (mainloop_add_fd(fileno(stdin),
				EPOLLIN | EPOLLRDHUP | EPOLLHUP | EPOLLERR,
				prompt_read_cb, server, NULL) < 0) {
		fprintf(stderr, "Failed to initialize console\n");
		server_destroy(server);

		return EXIT_FAILURE;
	}

	printf("Running GATT server\n");

	sigemptyset(&mask);
	sigaddset(&mask, SIGINT);
	sigaddset(&mask, SIGTERM);

	mainloop_set_signal(&mask, signal_cb, NULL, NULL);

	print_prompt();

	mainloop_run();

	printf("\n\nShutting down...\n");

	server_destroy(server);

	return EXIT_SUCCESS;
}
/**
 * @TEST Params (Testing purpose only)
 * @ server 3590
 * @ client 127.0.0.1 3590 /home/santiago/workspace/tp1_new/Debug/ejemplo1 /home/santiago/workspace/tp1_new/Debug/outputFile /home/santiago/workspace/tp1_new/Debug/ejemplo2 4
 * TODO Document the new and changed stuff
 */
int main(int argc, char *argv[]) {
	//Initialize our app state
	APP_STATE state = APP_STATE_UNDEFINED;

	/**
	 * If we have at least the type parameter (this means client/server)
	 * then we should at least be able to operate and let the app flow handle
	 * the result.
	 * Which is pretty obvious it will fail since theres nothing to pull
	 * from the server.
	 * @Refactor maybe ?
	 */
	if (argc > 1) {
		//Initialize a socket we will be using
		socket_t mSocket;
		socket_init(&mSocket);

		//If client
		if (!strcmp(argv[1], HOST_CLIENT)) {
			client_t mClient;
			client_init(&mClient, &mSocket, argv[4], argv[5], argv[6]);

			int chunkSize = atoi(argv[7]);

			/**
			 * This is the core of the client.
			 * Here it will connect the socket with the given params,
			 * Send the server the specifications of the pull,
			 * Parse its src file in checksums, send the list and
			 * listen for the remote changes, while writing them to the
			 * ouput file.
			 */
			client_start(&mClient, argv[2], argv[3], &chunkSize, &state);

			client_destroy(&mClient);
		}

		//If server
		/**
		 * @note: I have done them like this (and not in if/else)
		 * since its not specified how the app should react to
		 * a random param name (eg ./app random). In this case, it just closes
		 * and nothing happens
		 */
		if (!strcmp(argv[1], HOST_SERVER)) {
			server_t mServer;
			server_init(&mServer, &mSocket);

			/**
			 * This is the core of the server.
			 * Here it will bind and listen to the supplied port,
			 * Receive the specifications of the pull and the checksum list
			 * Iterate through its own updated file while looking for differences
			 * sending them to the client, so contents are identical
			 */
			server_start(&mServer, argv[2], &state);

			server_destroy(&mServer);
		}

		//Close the file descriptor
		socket_close(&mSocket);
	} else {
		//Notify about usage if no args passed
		printf("Fail to receive arguments\n");

		printf("For client use: \"client\" @host @port");
		printf("@src @dst @remote @chunkSize\n");

		printf("For server use: \"server\" @port");

		state = APP_STATE_ERROR;
	}

	return state;
}
Exemple #24
0
int main( int argc, char **argv )
{
	int n, i;
	char *com;

	fp_err = stderr;

	init_conf();

	com = argv[0];
	--argc;  ++argv;
	while( argc > 0 && argv[0][0] == '-' )  {
		switch( argv[0][1] )  {
		case 'C':
			if( argc < 2 )  usage( com );
			read_conf( argv[1] );
			--argc;  ++argv;
			break;
		/*******↓for server mode *******/
		case 'p':
   		        /* 引数が不正な場合はエラー出力 */
			if( argc < 2 )  usage( com );
			/* ポート番号の読み込み */
			i = atoi( argv[1] );
			if (i > 1024) {
			        nPort = i;
			}
			s_mode = 1;
			--argc;  ++argv;
			break;
		/*******↑***********************/
		case 'v':
			printf( "%s\n", moduleVersion );
			printf( "%s\n", protocolVersion );
			exit(0);
		default:
			usage( com );
		}
		--argc;  ++argv;
	}
	set_default_conf();

	initialize();

	n = setjmp( ebuf );

	if( n > 0 )  chasen_process = 0;	/* to restart 'chasen' process */

	for( ;; )  {
#ifdef PRINTDATA
		TmpMsg( "> " );
#endif
		n_arg = read_command( v_arg );

#ifdef PRINTDATA
		{
			int i;
			TmpMsg( "command is \n" );
			for( i=0; i<n_arg; ++i )  {
				TmpMsg( "  %d: %s\n", i+1, v_arg[i] );
			}
		}
#endif

		/* 「o」 で set Speak = NOW のショートカット */
		if( strcmp(v_arg[0],"o")==0 )  {
			setSpeak( "=", "NOW" );
			continue;
		}

		if( n_arg < 2 )  { unknown_com();  continue; }

		switch( commandID( v_arg[0] ) )  {
		  case C_set:
			if( n_arg < 4 )  { unknown_com();  break; }
			switch( slotID( v_arg[1] ) )  {
			  case S_Run:   setRun( v_arg[2], v_arg[3] );  break;
			  case S_Speaker:  setSpeaker( v_arg[2], v_arg[3] );  break;
			  case S_Alpha: setAlpha( v_arg[2], v_arg[3] );  break;
			  case S_Postfilter_coef: setPostfilter_coef( v_arg[2], v_arg[3] );  break;
			  case S_Text:  setText( v_arg[2], v_arg[3] );  break;
			  case S_Speak: setSpeak( v_arg[2], v_arg[3] );  break;

			  case S_SaveRAW: setSave( v_arg[2], v_arg[3] );  break;
			  case S_Save:    setSave( v_arg[2], v_arg[3] );  break;
			  case S_LoadRAW: setSpeechFile( v_arg[2], v_arg[3], RAW );  break;
			  case S_SpeechFile: setSpeechFile( v_arg[2], v_arg[3], RAW );  break;
			  case S_SaveWAV: setSaveWAV( v_arg[2], v_arg[3] );  break;
			  case S_LoadWAV: setSpeechFile( v_arg[2], v_arg[3], WAV );  break;

			  case S_SavePros:  setSavePros( v_arg[2], v_arg[3] );  break;
			  case S_LoadPros:  setProsFile( v_arg[2], v_arg[3] );  break;
			  case S_ProsFile:  setProsFile( v_arg[2], v_arg[3] );  break;

			  case S_ParsedText: setParsedText( v_arg[2], v_arg[3] );  break;
			  case S_Speak_syncinterval: setSpeakSyncinterval( v_arg[2], v_arg[3] );  break;
			  case S_AutoPlay: 
				slot_Auto_play = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_AutoPlayDelay: 
				slot_Auto_play_delay = atoi( v_arg[3] ); break;
			  case S_Log:   setLog( v_arg[2], v_arg[3] ); break;
			  case S_Log_conf:
				slot_Log_conf = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_Log_text:
				slot_Log_text = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_Log_arranged_text:
				slot_Log_arranged_text = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_Log_chasen:
				slot_Log_chasen = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_Log_tag:
				slot_Log_tag = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_Log_phoneme:
				slot_Log_phoneme = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_Log_mora:
				slot_Log_mora = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_Log_morph:
				slot_Log_morph = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_Log_aphrase:
				slot_Log_aphrase = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_Log_breath:
				slot_Log_breath = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_Log_sentence:
				slot_Log_sentence = setLogYesNo( v_arg[2], v_arg[3] ); break;
			  case S_Err:          setErr( v_arg[2], v_arg[3] ); break;
			  default:
				unknown_com();
			}
			break;
		  case C_inq:
			switch( slotID( v_arg[1] ) ) {
			  case S_Run:        inqRun();  break;
			  case S_ModuleVersion: inqModuleVersion();  break;
			  case S_ProtocolVersion: inqProtocolVersion();  break;
			  case S_SpeakerSet: inqSpeakerSet();  break;
			  case S_Speaker:    inqSpeaker();  break;
			  case S_SpeechFile: inqSpeechFile();  break;
			  case S_ProsFile:   inqProsFile();  break;
			  case S_AutoPlay:   inqAutoPlay();  break;
			  case S_AutoPlayDelay:   inqAutoPlayDelay();  break;
			  case S_Text_text:  inqTextText();  break;
			  case S_Text_pho:   inqTextPho();  break;
			  case S_Text_dur:   inqTextDur();  break;
			  case S_Speak_text: inqSpeakText();  break;
			  case S_Speak_pho:  inqSpeakPho();  break;
			  case S_Speak_dur:  inqSpeakDur();  break;
			  case S_Speak_utt:  inqSpeakUtt();  break;
			  case S_Speak_len:  inqSpeakLen();  break;
			  case S_Speak_stat: inqSpeakStat();  break;
			  case S_Speak_syncinterval: inqSpeakSyncinterval();  break;
			  case S_Log:
				RepMsg( "rep Log = %s\n", slot_Log_file );  break;
			  case S_Log_conf:
				RepMsg( "rep Log.conf = %s\n", YesNoSlot(S_Log_conf) );  break;
			  case S_Log_text:
				RepMsg( "rep Log.text = %s\n", YesNoSlot(S_Log_text) );  break;
			  case S_Log_arranged_text:
				RepMsg( "rep Log.arranged_text = %s\n", YesNoSlot(S_Log_arranged_text) );  break;
			  case S_Log_chasen:
				RepMsg( "rep Log.chasen = %s\n", YesNoSlot(S_Log_chasen) );  break;
			  case S_Log_tag:
				RepMsg( "rep Log.tag = %s\n", YesNoSlot(S_Log_tag) );  break;
			  case S_Log_phoneme:
				RepMsg( "rep Log.phoneme = %s\n", YesNoSlot(S_Log_phoneme) );  break;
			  case S_Log_mora:
				RepMsg( "rep Log.mora = %s\n", YesNoSlot(S_Log_mora) );  break;
			  case S_Log_morph:
				RepMsg( "rep Log.morph = %s\n", YesNoSlot(S_Log_morph) );  break;
			  case S_Log_aphrase:
				RepMsg( "rep Log.aphrase = %s\n", YesNoSlot(S_Log_aphrase) );  break;
			  case S_Log_breath:
				RepMsg( "rep Log.breath = %s\n", YesNoSlot(S_Log_breath) );  break;
			  case S_Log_sentence:
				RepMsg( "rep Log.sentence = %s\n", YesNoSlot(S_Log_sentence) );  break;
			  case S_Err:
				RepMsg( "rep Err = %s\n", slot_Err_file );  break;
			  default:
				unknown_com();
			}
			break;
		  case C_prop:
			{ SlotProp prop;
			if( strcmp(v_arg[2],"=")!=0 )  { unknown_com(); break; }
			if( strcmp(v_arg[3],"AutoOutput")==0 )  {
				prop = AutoOutput;
			} else if(strcmp(v_arg[3],"NoAutoOutput")==0 )  {
				prop = NoAutoOutput;
			} else {
				unknown_com(); break;
			}
			switch( slotID( v_arg[1] ) ) {
			  case S_Run:        prop_Run = prop;  break;
			  case S_ModuleVersion: prop_ModuleVersion = prop;  break;
			  case S_ProtocolVersion: prop_ProtocolVersion = prop;  break;
			  case S_SpeakerSet: prop_SpeakerSet = prop;  break;
			  case S_Speaker:    prop_Speaker = prop;  break;
			  case S_SpeechFile: prop_SpeechFile = prop;  break;
			  case S_ProsFile:   prop_ProsFile = prop;  break;
			  case S_Text:       prop_Text = prop;  break;
			  case S_Text_text:  prop_Text_text = prop;  break;
			  case S_Text_pho:   prop_Text_pho = prop;  break;
			  case S_Text_dur:   prop_Text_dur = prop;  break;
			  case S_Speak:      prop_Speak = prop;  break;
			  case S_Speak_text: prop_Speak_text = prop;  break;
			  case S_Speak_pho:  prop_Speak_pho = prop;  break;
			  case S_Speak_dur:  prop_Speak_dur = prop;  break;
			  case S_Speak_utt:  prop_Speak_utt = prop;  break;
			  case S_Speak_len:  prop_Speak_len = prop;  break;
			  case S_Speak_stat: prop_Speak_stat = prop;  break;
			  case S_Speak_syncinterval: prop_Speak_syncinterval = prop;  break;
			  default:
				unknown_com();
			}
			}
			break;
		  default:
			unknown_com();
		}
	}
	
	if( s_mode ) {
	        server_destroy ();
	}
	exit(0);
}
Exemple #25
0
static void
s_server_free (void *argument)
{
    server_t *server = (server_t *) argument;
    server_destroy (&server);
}
Exemple #26
0
SERVER *
server_init(int fd,
	    const struct sockaddr_gen *sg,
	    int backlog,
	    int max_clients,
	    void (*handler)(CLIENT *cp))
{
    static int one = 1;
    socklen_t slen;
    SERVER *sp;
    

    if (debug)
	fprintf(stderr, "server_init(%d, ..., %d, %d, ...): Start\n",
		fd, backlog, max_clients);
    
    A_NEW(sp);

    sp->fd = -1;
    
    sp->state = 0;
    pthread_attr_init(&sp->ca_detached);
    pthread_attr_setdetachstate(&sp->ca_detached,
				PTHREAD_CREATE_DETACHED);
    
    pthread_mutex_init(&sp->clients_mtx, NULL);
    pthread_cond_init(&sp->clients_cv, NULL);
    sp->clients_cur = 0;
    sp->clients_max = max_clients;
    
    if (fd < 0)
    {
	if (sg == NULL)
	{
	    syslog(LOG_ERR,
		   "server_init: NULL address and no file descriptor");

	    server_destroy(sp);
	    if (debug)
		fprintf(stderr, "server_init(): End: Failure\n");
	    
	    return NULL;
	}
	
	sp->sin = *sg;
	
	sp->fd = socket(SGFAM(sp->sin), SOCK_STREAM, 0);
#ifdef HAVE_IPV6
	if (sp->fd < 0 &&
	    (errno == EAFNOSUPPORT || errno == EPFNOSUPPORT) &&
	    SGFAM(sp->sin) == AF_INET6)
	{
#if 0
	    /* Try to convert to IPv4 format... */
	    struct in6_addr *addr6 = (struct in6_addr *) SGADDRP(sp->sin);
	    
	    if (IN6_IS_ADDR_V4MAPPED(addr6))
	    {
		UINT32 addr4 = addr6->s6_addr32[3];
		
		SGFAM(sp->sin) = AF_INET;
		* (UINT32 *) SGADDRP(sp->sin) = addr4;
	    }
#endif

	    /* Let's try with an IPv4 socket - who knows, it might work */
	    errno = 0;
	    sp->fd = socket(PF_INET, SOCK_STREAM, 0);
	}
#endif
	
	if (sp->fd < 0)
	{
	    syslog(LOG_ERR, "socket(%s, SOCK_STREAM) failed (errno=%d): %m",
		   (SGFAM(sp->sin) == AF_INET ? "AF_INET" : "AF_INET6"),
		   errno);

	    server_destroy(sp);
	    if (debug)
		fprintf(stderr, "server_init(): End: Failure\n");
	    return NULL;
	}

	(void) setsockopt(sp->fd, SOL_SOCKET, SO_REUSEADDR,
			  (void *) &one, sizeof(one));

	if (s_bind(sp->fd, (struct sockaddr *) &sp->sin,
		   SGSOCKSIZE(sp->sin)) < 0)
	{
	    char buf1[16];

	    syslog(LOG_ERR, "bind(%d,%s:%d) failed: %m",
		   sp->fd,
		   s_inet_ntox(&sp->sin, buf1, sizeof(buf1)),
		   ntohs(SGPORT(sp->sin)));
	    
	    server_destroy(sp);
	    if (debug)
		fprintf(stderr, "server_init(): End: Failure\n");
	    return NULL;
	}
    }
    else
    {
	sp->fd = fd;
	slen = sizeof(sp->sin);
	getsockname(sp->fd, (struct sockaddr *) &sp->sin, &slen);
    }

    /* We do this outside the 'if' clause to support broken
       Inetd implementations */
    
    if (backlog >= 0 && listen(sp->fd, backlog) < 0)
    {
	syslog(LOG_ERR, "listen(%d, %d) failed: %m", sp->fd, backlog);
	
	server_destroy(sp);
	if (debug)
	    fprintf(stderr, "server_init(): End: Failure\n");
	return NULL;
    }
	
    sp->handler = handler;
    
    if (debug)
	fprintf(stderr, "server_init(): End: OK\n");
    return sp;
}