Esempio n. 1
0
int setup_workers(struct ev_loop* loop, struct listener_s* listener) {
    char* ip = listener->argv[1];
    uint16_t port = (uint16_t)atoi(listener->argv[2]);

    int listen_fd;
#ifndef SO_REUSEPORT
    listen_fd = start_listen(ip, port);
#endif

    pid_t pid;
    int i;
    struct worker_s* workers = listener->workers;
    for (i = 0; i < listener->worker_count; i++) {
#ifdef SO_REUSEPORT
        listen_fd = start_listen(ip, port);
#endif
        workers[i].listen_fd = listen_fd;
        workers[i].worker_id = i;
        workers[i].listener = listener;
        pid = spawn_worker(&workers[i]);
        if (pid < 0) {
            return -1;
        }
        workers[i].pid = pid;
        ev_child_init(&workers[i].cwatcher, exit_cb, pid, 0);
        ev_child_start(loop, &workers[i].cwatcher);
    }

    return 0;
}
Esempio n. 2
0
int
gate_init(struct gate *g , struct skynet_context * ctx, char * parm) {
	if (parm == NULL)
		return 1;
	int max = 0;
	int buffer = 0;
	int sz = strlen(parm)+1;
	char watchdog[sz];
	char binding[sz];
	int client_tag = 0;
	char header;
	int n = sscanf(parm, "%c %s %s %d %d %d",&header,watchdog, binding,&client_tag , &max,&buffer);
	if (n<4) {
		skynet_error(ctx, "Invalid gate parm %s",parm);
		return 1;
	}
	if (max <=0 ) {
		skynet_error(ctx, "Need max connection");
		return 1;
	}
	if (header != 'S' && header !='L') {
		skynet_error(ctx, "Invalid data header style");
		return 1;
	}

	if (client_tag == 0) {
		client_tag = PTYPE_CLIENT;
	}
	if (watchdog[0] == '!') {
		g->watchdog = 0;
	} else {
		g->watchdog = skynet_queryname(ctx, watchdog);
		if (g->watchdog == 0) {
			skynet_error(ctx, "Invalid watchdog %s",watchdog);
			return 1;
		}
	}

	g->ctx = ctx;

	int cap = 16;
	while (cap < max) {
		cap *= 2;
	}
	hashid_init(&g->hash, max, cap);
	g->conn = malloc(max * sizeof(struct connection));
	memset(g->conn, 0, max *sizeof(struct connection));
	g->max_connection = max;
	int i;
	for (i=0;i<max;i++) {
		g->conn[i].id = -1;
	}
	
	g->client_tag = client_tag;
	g->header_size = header=='S' ? 2 : 4;

	skynet_callback(ctx,g,_cb);

	return start_listen(g,binding);
}
Esempio n. 3
0
int main (int argc, char * argv[])
{
	int i, status, lsockfd, csockfd;  /* local/connection socket file descriptor */
	struct sockaddr_in raddr;      /* remote address object */
	socklen_t raddr_len = sizeof (struct sockaddr_in);
	pthread_t connThread;   /* thread identifier */
	User_Settings * o_stngs; /* user suplied settings struct (stores user settings)*/

	/* set global variables */
	server = "simpleText";
	version = 1.0f;

	/* allocate user suplied settings struct */
	o_stngs = malloc(sizeof(User_Settings));

	/* read configuration file */
	read_conf_file (o_stngs);

	/* parse and set cli options */
	parse_cli_opts (argc, (char **) &argv[0], o_stngs);

	/* make daemon and start logging */
	status = init_daemon (server, o_stngs);
	if (status == 0)
		return EXIT_SUCCESS; /* parent returns success */
	else if (status == 1)
		return EXIT_FAILURE; /* parent returns failure */

	syslog (LOG_NOTICE, "[PID: %u, SID: %u] > %s started..",
					getpid (), getsid (getpid ()), server);

	/* Read Hosts File */
	host_cnt = read_host_file (NULL, 1);
	for (i = 0; i < host_cnt; i++)
		read_host_file (&o_vhost[i], 0);

	/* start listening for TCP connections */
	lsockfd = start_listen (o_stngs->port);
	free(o_stngs);

	/* loop through accepting and handling connections */
	while (1)
	{
		/* accept connection or skip to next conection if accept fails */
		csockfd = accept (lsockfd, (struct sockaddr *) &raddr, &raddr_len);
		if (csockfd == -1) /* if connection fails ignore it and continue */
			continue;

		Connect_Args * o_args = malloc(sizeof(Connect_Args *));
		o_args->socket = csockfd;
		strcpy (o_args->client_addr, inet_ntoa (raddr.sin_addr));

		/* create thread to handle connection */
		pthread_create(&connThread, NULL, (void *) &attent_connection, o_args);

		/* wait for one second before accepting next connection */
		sleep (1);
	}
}
Esempio n. 4
0
int main(int argc, char *argv[]) {

	int sock_fd;

	bind_serv(&sock_fd);
	start_listen(&sock_fd);
	run_server(&sock_fd);

	return EXIT_SUCCESS;
}
Esempio n. 5
0
acceptor::acceptor(io::io_service &ep, const ipv4_endpoint &endpoint, std::function<void()> on_accept)
    : fd(make_socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK)),
        accept_connection(on_accept), ioEntry(ep, fd, EPOLLIN,
                                      [this](uint32_t event)
                                      {
                                          if (event == EPOLLIN) this->accept_connection();
                                      })
{
    bind_socket(fd, endpoint.port_net, endpoint.addr_net);
    start_listen(fd);
}
Esempio n. 6
0
int
main(int argc, char *argv[]){
  char *dev;
  if(argc>1){
    /* MAIN BLOCK */
    dev = argv[1];
    start_listen(dev,"port sip", my_scanner);
  }
  else{
    /* some errors in calling apps */
    printf("check for syntax you miss something\n");
  }
}
Esempio n. 7
0
static void run(const char *service, const char *key_file,
                const char *cert_file) {
  SSL_CTX *ssl_ctx;
  app_context app_ctx;
  struct event_base *evbase;

  ssl_ctx = create_ssl_ctx(key_file, cert_file);
  evbase = event_base_new();
  initialize_app_context(&app_ctx, ssl_ctx, evbase);
  start_listen(evbase, service, &app_ctx);

  event_base_loop(evbase, 0);

  event_base_free(evbase);
  SSL_CTX_free(ssl_ctx);
}
Esempio n. 8
0
File: main.c Progetto: Deanzou/ppp
/* -----------------------------------------------------------------------------
----------------------------------------------------------------------------- */
int serial_terminal_window(char *script, int infd, int outfd)
{
    int 	slis, sacc = 0, n;
    char 	c;
    char 	str[32];

    //sprintf(str, "/var/run/pppd-%d", getpid());
    snprintf(str, sizeof(str), "/var/run/pppd-miniterm");
    
    slis = start_listen(str);
    if (slis == -1) {
        error("Cannot listen for terminal window application");
        status = EXIT_TERMINAL_FAILED;
        return -2;
    }

    if (launch_app(PATH_MINITERM, str) < 0) {
        error("Cannot launch terminal window application");
        status = EXIT_TERMINAL_FAILED;
        close(slis);
        return -2;
    }

    sacc = wait_accept(slis);
    close(slis);
    if (sacc < 0) {
        if (kill_link) 
            return 0;
        error("Cannot communicate with terminal window application.");
        status = EXIT_TERMINAL_FAILED;
        return -2;
    }
    
    send_fd(sacc, infd);
    
    n = readn(sacc, &c, 1);
    close(sacc);
    if (n != 1) {
        if (kill_link) 
            return 0;
        error("Cannot get status from terminal window application (error %m)");
        status = EXIT_TERMINAL_FAILED;
        return -2;
    }
        
    return (unsigned char)c;
}
Esempio n. 9
0
web_server::web_server(config_t *config, std::vector<client_t *> *clients, pthread_mutex_t *clients_mutex, pools *ppools, statistics_global *ps, fips140 *pfips140, scc *pscc, data_logger *dl, users *pusers)
{
	fd = start_listen(config -> webserver_interface.c_str(), config -> webserver_port, config -> listen_queue_size);

	add_object(new http_file_root());
	add_object(new http_file_404());
	add_object(new http_file_stats(clients, clients_mutex, ppools, ps, pfips140, pscc));
	add_object(new http_file_version());
	add_object(new http_file_file("/stylesheet.css", "text/css", WEB_DIR "/stylesheet.css"));
	add_object(new http_file_file("/favicon.ico", "image/x-ico", WEB_DIR "/favicon.ico"));
	add_object(new http_file_file("/logo.png", "image/png", WEB_DIR "/logo.png"));
	add_object(new http_file_graph_data_logger(dl, config -> graph_font));
	add_object(new http_file_logfile(ps));
	add_object(new http_file_file("/logo-bw.png", "image/png", WEB_DIR "/logo-bw.png"));
	add_object(new http_file_file("/logfiles.png", "image/png", WEB_DIR "/logfiles.png"));
	add_object(new http_file_file("/statistics.png", "image/png", WEB_DIR "/statistics.png"));
	add_object(new http_file_users(pusers));
	add_object(new http_file_file("/users.png", "image/png", WEB_DIR "/users.png"));
}
int BoardE1::KhompPvtE1::makeCall(std::string params)
{
    if(callE1()->_call_info_drop == 0 && !callE1()->_call_info_report)
    {
        command(KHOMP_LOG, CM_DISABLE_CALL_ANSWER_INFO);
    }

    int ret = KhompPvt::makeCall(params);

    if(ret == ksSuccess)
    {
        start_listen();
    }
    else
    {
        K::Logger::Logg(C_ERROR, PVT_FMT(target(), "Fail on make call"));
    }   

    return ret;
}
bool BoardE1::KhompPvtE1::onCallSuccess(K3L_EVENT *e)
{
    DBG(FUNC, PVT_FMT(_target, "(E1) c"));

    try
    {
        ScopedPvtLock lock(this);


        if (call()->_pre_answer)
        {
            start_listen();
            start_stream();
        }
        else
        {
            //TODO: Gerar Ringback caso necessario
            call()->_flags.set(Kflags::GEN_PBX_RING);
            //idx.pbx_ring = pvt->pvt_timer.add(K::opt::ringback_pbx_delay,
            //                &K::timers::pbx_ring_gen, pvt, TM_VAL_CALL);
        }


    }
    catch (ScopedLockFailed & err)
    {
        K::Logger::Logg(C_ERROR,FMT("(E1) r (unable to lock %s!)") % err._msg.c_str() );
        return ksFail;
    }
    
    KhompPvt::onCallSuccess(e);
    
    DBG(FUNC, PVT_FMT(_target, "(E1) r"));

    return ksSuccess;
}
Esempio n. 12
0
int main(int argc, char *argv[])
{
    int lsfd;
    int ret, n, i;
    struct epoll_event event;
    struct epoll_event *events = NULL;
    connection_t *conn;
    connections_head_t *head = NULL;

    if (argc != 2) {
        fprintf(stdout, "Usage: %s [port]\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    /* init connections cache */
    head = init_connections(MAX_CONNECTIONS);
    if (NULL == head) {
        ERROR_MSG("init_connections\n");
        goto error;
    }

    /* init SSL data */
    ret = init_OpenSSL();
    if (ret != 0) {
        ERROR_MSG("init_OpenSSL\n");
        goto error;
    }

    head->ctx = init_ssl_ctx(SRV_CERTFILE, SRV_PRIKEY, SRV_CAFILE);
    if (NULL == head->ctx) {
        ERROR_MSG("init_ssl_ctx error\n");
        goto error;
    }

    /* init epoll's data */
    head->epfd = epoll_create(MAX_CONNECTIONS);
    if (-1 == head->epfd) {
        ERROR_MSG("epoll_create\n");
        goto error;
    }

    events = calloc(MAX_EVENTS, sizeof(struct epoll_event));
    if (NULL == events) {
        ERROR_MSG("calloc\n");
        goto error;
    }

    /* listen's data */
    lsfd = start_listen(argv[1]);
    if (lsfd < 0) {
        ERROR_MSG("start_listen\n");
        goto error;
    }

    /* add the lsfd to events */
    conn = get_connection(head);
    if (NULL == conn) {
        ERROR_MSG("get_connection\n");
        goto error;
    }

    conn->fd = lsfd;
    conn->handler = accept_handler;

    event.data.ptr = conn;
    event.events = EPOLLIN | EPOLLET;
    ret = epoll_ctl(head->epfd, EPOLL_CTL_ADD, lsfd, &event);
    if (-1 == ret) {
        ERROR_MSG("epoll_ctl\n");
        goto error;
    }

    /* The event loop */
    while (1)
    {
        n = epoll_wait(head->epfd, events, MAX_EVENTS, -1);
        for (i = 0; i < n; ++i)
        {
            conn = events[i].data.ptr;

            if ((events[i].events & EPOLLERR)
                || (events[i].events & EPOLLHUP)
                || !(events[i].events & EPOLLIN))
            {
                /* it will delete the event from events at the same time 
                 * due to invoked close
                 */
                free_connection(head, conn);
            } else {
                if (conn->handler) {
                    conn->handler(head, conn);
                }
            }
        }
    }

error:
    if (events) free(events);
    destroy_connections(head);
    return EXIT_SUCCESS;
}
Esempio n. 13
0
int main() {
    start_listen();
    process();
    return 0;
}
Esempio n. 14
0
static int client_command(struct mux_client *client, struct usbmuxd_header *hdr)
{
	int res;
	usbmuxd_log(LL_DEBUG, "Client command in fd %d len %d ver %d msg %d tag %d", client->fd, hdr->length, hdr->version, hdr->message, hdr->tag);

	if(client->state != CLIENT_COMMAND) {
		usbmuxd_log(LL_ERROR, "Client %d command received in the wrong state", client->fd);
		if(send_result(client, hdr->tag, RESULT_BADCOMMAND) < 0)
			return -1;
		client_close(client);
		return -1;
	}

	if((hdr->version != 0) && (hdr->version != 1)) {
		usbmuxd_log(LL_INFO, "Client %d version mismatch: expected 0 or 1, got %d", client->fd, hdr->version);
		send_result(client, hdr->tag, RESULT_BADVERSION);
		return 0;
	}

	struct usbmuxd_connect_request *ch;
	char *payload;
	uint32_t payload_size;

	switch(hdr->message) {
		case MESSAGE_PLIST:
			client->proto_version = 1;
			payload = (char*)(hdr) + sizeof(struct usbmuxd_header);
			payload_size = hdr->length - sizeof(struct usbmuxd_header);
			plist_t dict = NULL;
			plist_from_xml(payload, payload_size, &dict);
			if (!dict) {
				usbmuxd_log(LL_ERROR, "Could not parse plist from payload!");
				return -1;
			} else {
				char *message = NULL;
				plist_t node = plist_dict_get_item(dict, "MessageType");
				plist_get_string_val(node, &message);
				if (!message) {
					usbmuxd_log(LL_ERROR, "Could not extract MessageType from plist!");
					plist_free(dict);
					return -1;
				}
				if (!strcmp(message, "Listen")) {
					free(message);
					plist_free(dict);
					if (send_result(client, hdr->tag, 0) < 0)
						return -1;
					usbmuxd_log(LL_DEBUG, "Client %d now LISTENING", client->fd);
					return start_listen(client);
				} else if (!strcmp(message, "Connect")) {
					uint64_t val;
					uint16_t portnum = 0;
					uint32_t device_id = 0;
					free(message);
					// get device id
					node = plist_dict_get_item(dict, "DeviceID");
					if (!node) {
						usbmuxd_log(LL_ERROR, "Received connect request without device_id!");
						plist_free(dict);
						if (send_result(client, hdr->tag, RESULT_BADDEV) < 0)
							return -1;
						return 0;
					}
					val = 0;
					plist_get_uint_val(node, &val);
					device_id = (uint32_t)val;

					// get port number
					node = plist_dict_get_item(dict, "PortNumber");
					if (!node) {
						usbmuxd_log(LL_ERROR, "Received connect request without port number!");
						plist_free(dict);
						if (send_result(client, hdr->tag, RESULT_BADCOMMAND) < 0)
							return -1;
						return 0;
					}
					val = 0;
					plist_get_uint_val(node, &val);
					portnum = (uint16_t)val;
					plist_free(dict);

					usbmuxd_log(LL_DEBUG, "Client %d connection request to device %d port %d", client->fd, device_id, ntohs(portnum));
					res = device_start_connect(device_id, ntohs(portnum), client);
					if(res < 0) {
						if (send_result(client, hdr->tag, -res) < 0)
							return -1;
					} else {
						client->connect_tag = hdr->tag;
						client->connect_device = device_id;
						client->state = CLIENT_CONNECTING1;
					}
					return 0;
				} else if (!strcmp(message, "ListDevices")) {
					free(message);
					plist_free(dict);
					if (send_device_list(client, hdr->tag) < 0)
						return -1;
					return 0;
				} else if (!strcmp(message, "ReadBUID")) {
					free(message);
					plist_free(dict);
					if (send_system_buid(client, hdr->tag) < 0)
						return -1;
					return 0;
				} else if (!strcmp(message, "ReadPairRecord")) {
					free(message);
					char* record_id = plist_dict_get_string_val(dict, "PairRecordID");
					plist_free(dict);

					res = send_pair_record(client, hdr->tag, record_id);
					if (record_id)
						free(record_id);
					if (res < 0)
						return -1;
					return 0;
				} else if (!strcmp(message, "SavePairRecord")) {
					uint32_t rval = RESULT_OK;
					free(message);
					char* record_id = plist_dict_get_string_val(dict, "PairRecordID");
					char* record_data = NULL;
					uint64_t record_size = 0;
					plist_t rdata = plist_dict_get_item(dict, "PairRecordData");
					if (rdata && plist_get_node_type(rdata) == PLIST_DATA) {
						plist_get_data_val(rdata, &record_data, &record_size);
					}
					plist_free(dict);

					if (record_id && record_data) {
						res = config_set_device_record(record_id, record_data, record_size);
						if (res < 0) {
							rval = -res;
						}
						free(record_id);
					} else {
						rval = EINVAL;
					}
					if (send_result(client, hdr->tag, rval) < 0)
						return -1;
					return 0;
				} else if (!strcmp(message, "DeletePairRecord")) {
					uint32_t rval = RESULT_OK;
					free(message);
					char* record_id = plist_dict_get_string_val(dict, "PairRecordID");
					plist_free(dict);
					if (record_id) {
						res = config_remove_device_record(record_id);
						if (res < 0) {
							rval = -res;
						}
						free(record_id);
					} else {
						rval = EINVAL;
					}
					if (send_result(client, hdr->tag, rval) < 0)
						return -1;
					return 0;
				} else {
					usbmuxd_log(LL_ERROR, "Unexpected command '%s' received!", message);
					free(message);
					plist_free(dict);
					if (send_result(client, hdr->tag, RESULT_BADCOMMAND) < 0)
						return -1;
					return 0;
				}
			}
			// should not be reached?!
			return -1;
		case MESSAGE_LISTEN:
			if(send_result(client, hdr->tag, 0) < 0)
				return -1;
			usbmuxd_log(LL_DEBUG, "Client %d now LISTENING", client->fd);
			return start_listen(client);
		case MESSAGE_CONNECT:
			ch = (void*)hdr;
			usbmuxd_log(LL_DEBUG, "Client %d connection request to device %d port %d", client->fd, ch->device_id, ntohs(ch->port));
			res = device_start_connect(ch->device_id, ntohs(ch->port), client);
			if(res < 0) {
				if(send_result(client, hdr->tag, -res) < 0)
					return -1;
			} else {
				client->connect_tag = hdr->tag;
				client->connect_device = ch->device_id;
				client->state = CLIENT_CONNECTING1;
			}
			return 0;
		default:
			usbmuxd_log(LL_ERROR, "Client %d invalid command %d", client->fd, hdr->message);
			if(send_result(client, hdr->tag, RESULT_BADCOMMAND) < 0)
				return -1;
			return 0;
	}
	return -1;
}
Esempio n. 15
0
void reverse_shell(int port){
	int sock, i, ret, sock_con = 0;
	struct sockaddr cli_addr;
	struct pollfd pfds[2];
	struct timeval timeout;
	char ip_connection[INET6_ADDRSTRLEN] = {0};
	char buf[1024];
	fd_set fd;

	socklen_t sockaddr_len = sizeof(struct sockaddr_in);
	start_listen(&sock, port);

	FD_ZERO(&fd);
	FD_SET(sock, &fd);

	printf("Listen in background, port: %d, pid: %lld\nWaiting connection ...\n", port, (long long int) getpid());

	timeout.tv_sec = LISTEN_TIMEOUT;
	timeout.tv_usec = 0;
	ret = select(sock+1, &fd, NULL, NULL, &timeout);

	if(ret == -1)
		die("select() error",1);
	else if(!ret){
		printf("Connection timeout %d !!!\n",LISTEN_TIMEOUT);
		exit(0);
	}

	if( (sock_con = accept(sock, (struct sockaddr *) &cli_addr, &sockaddr_len)) == -1 )
		die("accept() error",1);

	if(cli_addr.sa_family == AF_INET){
		inet_ntop(AF_INET, &((struct sockaddr_in *)&cli_addr)->sin_addr, ip_connection, INET_ADDRSTRLEN);
	} else if(cli_addr.sa_family == AF_INET6){
		inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)&cli_addr)->sin6_addr), ip_connection, INET6_ADDRSTRLEN);
	} else {
		strcpy(ip_connection, "unknow");
	}

	printf("Connection from: %s\n\n", ip_connection);

	pfds[1].fd = 0;
	pfds[1].events = POLLIN;
	pfds[0].fd = sock_con;
	pfds[0].events = POLLIN;

	while(1){
		poll(pfds, 2, -1);

		if(pfds[1].revents & POLLIN){
			i = read(0, buf, 1023);

			if(!i)
				break;

			write(sock_con, buf, i);

		}

		if(pfds[0].revents & POLLIN){
			i = read(sock_con, buf, 1023);
			if(!i)
				break;

			write(1, buf, i);
		}

	}

	exit(0);
}
Esempio n. 16
0
int
main(int argc, char **argv)
{
  int opt, port, use_record = 0, use_compact = 0, debugging = 0, listen = 0;
  BroConn *bc;
  extern char *optarg;
  extern int optind;
  char hostname[512];
  int fd = -1;

  bro_init(NULL);

  host_str = host_default;
  port_str = port_default;

  bro_debug_calltrace = 0;
  bro_debug_messages  = 0;

  while ( (opt = getopt(argc, argv, "Cc:p:dh?lr")) != -1)
    {
      switch (opt)
	{
	case 'd':
	  debugging++;

	  if (debugging == 1)
	    bro_debug_messages = 1;
	  
	  if (debugging > 1)
	    bro_debug_calltrace = 1;
	  break;
	
	case 'l':
	  listen = 1;
	  break;

	case 'h':
	case '?':
	  usage();

	case 'c':
	  count = strtol(optarg, NULL, 0);
	  if (errno == ERANGE || count < 1)
	    {
	      printf("Please provide an integer to -c.\n");
	      exit(-1);
	    }
	  break;
	  
	case 'p':
	  port_str = optarg;
	  break;

	case 'r':
	  use_record = 1;
	  break;

	case 'C':
	  use_compact = 1;
	  break;

	default:
	  usage();
	}
    }

  argc -= optind;
  argv += optind;

  if (argc > 0)
    host_str = argv[0];

  /*
  if (! (host = gethostbyname(host_str)) ||
      ! (host->h_addr_list[0]))
    {
      printf("Could not resolve host %s\n", host_str);
      exit(-1);
    }
  */

  port = strtol(port_str, NULL, 0);
  if (errno == ERANGE)
    {
      printf("Please provide a port number with -p.\n");
      exit(-1);
    }

  snprintf(hostname, 512, "%s:%s", host_str, port_str);


  if ( listen )
	bc  = start_listen(port);

  /* Connect to Bro */
  else if (! (bc = bro_conn_new_str(hostname, BRO_CFLAG_RECONNECT | BRO_CFLAG_ALWAYS_QUEUE)))
    {
      printf("Could not get Bro connection handle.\n");
      exit(-1);
    }
  
  /* Request "pong" events, and have bro_pong called when they
   * arrive. The callback mechanism automatically figures out
   * the number of arguments and invokes the callback accordingly.
   * Use record-based callback if -r option was given, and compact
   * argument passing if -C was provided.
   */
  if (use_compact)
    {
      if (use_record)
	bro_event_registry_add_compact(bc, "pong", (BroCompactEventFunc)
				       bro_pong_compact_record, NULL);
      else
	bro_event_registry_add_compact(bc, "pong", (BroCompactEventFunc)
				       bro_pong_compact, NULL);
    }
  else
    {
      if (use_record)
	bro_event_registry_add(bc, "pong", (BroEventFunc) bro_pong_record, NULL);
      else
	bro_event_registry_add(bc, "pong", (BroEventFunc) bro_pong, NULL);
    }
  
  if (! bro_conn_connect(bc))
    {
      printf("Could not connect to Bro at %s:%s.\n", host_str, port_str);
      exit(-1);
    }
  
  /* Enter pinging loop */
  for ( ; ; )
    {
      BroEvent *ev;
      
      bro_conn_process_input(bc);

      if (count > 0 && seq == count)
	break;
      
      /* Create empty "ping" event */
      if ( (ev = bro_event_new("ping")))
	{
	  double timestamp = bro_util_current_time();

	  if (use_record)
	    {
	      /* Create a record with the sequence number as first
	       * element of type counter, and the second element the
	       * current time:
	       */
	      BroRecord *rec = bro_record_new();
	      
	      bro_record_add_val(rec, "seq", BRO_TYPE_COUNT, NULL, &seq);
	      bro_record_add_val(rec, "src_time", BRO_TYPE_TIME, NULL, &timestamp);
	      
	      bro_event_add_val(ev, BRO_TYPE_RECORD, NULL, rec);
	      
	      bro_record_free(rec);
	    }
	  else
	    {
	      /* Add a timestamp to it: */
	      bro_event_add_val(ev, BRO_TYPE_TIME, NULL, &timestamp);
	      
	      /* Add the sequence counter: */
	      bro_event_add_val(ev, BRO_TYPE_COUNT, NULL, &seq);
	    }

	  seq++;

	  /* Ship it -- sends it if possible, queues it otherwise */
	  bro_event_send(bc, ev);
	  bro_event_free(ev);
	}

#ifdef __MINGW32__
      sleep(1000);
#else
      sleep(1);
#endif
    }

  /* Disconnect from Bro and release state. */
  bro_conn_delete(bc);

  return 0;
}
Esempio n. 17
0
int main(int argc,char* argv[])
{
	if(argc!=5)
	{
		cout<<"Usage: [ip] [user] [pass] [filename]"<<endl;
		return -1;
	}
	int sock=socket(AF_INET,SOCK_STREAM,0);
	if(sock<0)
	{
		perror("socket");
		return -1;
	}
	sockaddr_in server_addr;
	server_addr.sin_family=AF_INET;
	server_addr.sin_addr.s_addr=inet_addr(argv[1]);
	server_addr.sin_port=htons(21);
	int ret=connect(sock,(sockaddr*)&server_addr,sizeof(server_addr));
	if(ret<0)
	{
		perror("connect");
		return 2;
	}
	char buf[SIZE];
	char output[SIZE];
	ssize_t _s=recv(sock,buf,SIZE,0);
	if(_s<0)
	{
		perror("recv");
		return _s;
	}
	buf[_s]='\0';
	cout<<buf<<endl;
	sprintf(buf,"USER %s\r\n",argv[2]);
	if(interact(sock,buf,output)<0)
	{
		perror("USER");
		return -1;
	}
	cout<<output<<endl;
	sprintf(buf,"PASS %s\r\n",argv[3]);
	if(interact(sock,buf,output)<0)
	{
		perror("PASS");
		return -1;
	}
	cout<<output<<endl;
	
	sockaddr_in local_addr;
	int listen_sock=start_listen(sock,local_addr);
	if(listen_sock<0)
	{
		perror("start_listen");
		return -1;
	}
	unsigned char* _ip=(unsigned char*)&local_addr.sin_addr.s_addr;
	unsigned short _port=ntohs(local_addr.sin_port);
	sprintf(buf, "PORT %d,%d,%d,%d,%d,%d\r\n", _ip[0], _ip[1], _ip[2],_ip[3],_port/256,_port%256);
	cout<<buf<<endl;
	if(interact(sock,buf,output)<0)
	{
		cout<<"interact"<<endl;
		return -1;
	}
	cout<<output<<endl;
	sprintf(buf,"RETR %s\r\n",argv[4]);
	if(interact(sock,buf,output)<0)
	{
		cout<<"interact"<<endl;
		return -1;
	}
	cout<<output<<endl;
	sockaddr_in ser_addr;
	socklen_t ser_len=sizeof(ser_addr);
	int data_sock=accept(listen_sock,(sockaddr*)&ser_addr,&ser_len);
	if(data_sock<0)
	{
		perror("accept");
		return -1;
	}
	close(listen_sock);
	ret=recv_data(data_sock,argv[4]);
	if (ret < 0) {
		cout << "recv data error" << endl;
		}
	close(sock);
	return 0;
}
Esempio n. 18
0
// main(argc, argv)
//	The main loop!
int main(int argc, char *argv[])
{
	task_t *tracker_task, *listen_task, *t;
	struct in_addr tracker_addr;
	int tracker_port;
	char *s;
	const char *myalias;
	struct passwd *pwent;

	// Default tracker is read.cs.ucla.edu
	osp2p_sscanf("131.179.80.139:11111", "%I:%d",
		     &tracker_addr, &tracker_port);
	if ((pwent = getpwuid(getuid()))) {
		myalias = (const char *) malloc(strlen(pwent->pw_name) + 20);
		sprintf((char *) myalias, "%s%d", pwent->pw_name,
			(int) time(NULL));
	} else {
		myalias = (const char *) malloc(40);
		sprintf((char *) myalias, "osppeer%d", (int) getpid());
	}

	// Ignore broken-pipe signals: if a connection dies, server should not
	signal(SIGPIPE, SIG_IGN);

	// Process arguments
    argprocess:
	if (argc >= 3 && strcmp(argv[1], "-t") == 0
	    && (osp2p_sscanf(argv[2], "%I:%d", &tracker_addr, &tracker_port) >= 0
		|| osp2p_sscanf(argv[2], "%d", &tracker_port) >= 0
		|| osp2p_sscanf(argv[2], "%I", &tracker_addr) >= 0)
	    && tracker_port > 0 && tracker_port <= 65535) {
		argc -= 2, argv += 2;
		goto argprocess;
	} else if (argc >= 2 && argv[1][0] == '-' && argv[1][1] == 't'
		   && (osp2p_sscanf(argv[1], "-t%I:%d", &tracker_addr, &tracker_port) >= 0
		       || osp2p_sscanf(argv[1], "-t%d", &tracker_port) >= 0
		       || osp2p_sscanf(argv[1], "-t%I", &tracker_addr) >= 0)
		   && tracker_port > 0 && tracker_port <= 65535) {
		--argc, ++argv;
		goto argprocess;
	} else if (argc >= 3 && strcmp(argv[1], "-d") == 0) {
		if (chdir(argv[2]) == -1)
			die("chdir");
		argc -= 2, argv += 2;
		goto argprocess;
	} else if (argc >= 2 && argv[1][0] == '-' && argv[1][1] == 'd') {
		if (chdir(argv[1]+2) == -1)
			die("chdir");
		--argc, ++argv;
		goto argprocess;
	} else if (argc >= 3 && strcmp(argv[1], "-b") == 0
		   && osp2p_sscanf(argv[2], "%d", &evil_mode) >= 0) {
		argc -= 2, argv += 2;
		goto argprocess;
	} else if (argc >= 2 && argv[1][0] == '-' && argv[1][1] == 'b'
		   && osp2p_sscanf(argv[1], "-b%d", &evil_mode) >= 0) {
		--argc, ++argv;
		goto argprocess;
	} else if (argc >= 2 && strcmp(argv[1], "-b") == 0) {
		evil_mode = 1;
		--argc, ++argv;
		goto argprocess;
	} else if (argc >= 2 && (strcmp(argv[1], "--help") == 0
				 || strcmp(argv[1], "-h") == 0)) {
		printf("Usage: osppeer [-tADDR:PORT | -tPORT] [-dDIR] [-b]\n"
"Options: -tADDR:PORT  Set tracker address and/or port.\n"
"         -dDIR        Upload and download files from directory DIR.\n"
"         -b[MODE]     Evil mode!!!!!!!!\n");
		exit(0);
	}

	// Connect to the tracker and register our files.
	tracker_task = start_tracker(tracker_addr, tracker_port);
	listen_task = start_listen();
	register_files(tracker_task, myalias);

	// First, download files named on command line.
	pid_t pid;
	for (; argc > 1; argc--, argv++)
	  if ((t = start_download(tracker_task, argv[1]))){
	    pid = fork();
	    if(pid == 0){
	      task_download(t, tracker_task);
	      _exit(0);
	    }
	    else if(pid > 0){}
	    else if(pid == -1)
	      error("Fork failed for download\n");
	  }
	int n_tasks = 0;
	// Then accept connections from other peers and upload files to them!
	while ((t = task_listen(listen_task))){
	  message("Beginning of while, n_tasks = %d\n", n_tasks);
	  if(n_tasks >= MAX_NUM_TASKS){
	    if(waitpid(-1, 0, 0) > 0){
	      message("Waiting for other proc, n_tasks = %d\n", n_tasks);
	      n_tasks--;
	    }
	  }
	  else if(n_tasks < MAX_NUM_TASKS){
	  pid = fork();
	  if(pid == 0){

	    //message("New Task STARTED for upload, n_tasks = %d\n", n_tasks);
	    task_upload(t);
	    
	    //message("New Task ENDED for upload, n_tasks = %d\n", n_tasks);
	    _exit(0);
	  }
	  else if(pid > 0){
	    n_tasks++;
	  }
	  else if(pid == -1)
	    error("Fork failed for upload\n");
	  }
	}

	return 0;
}