Exemple #1
0
int
sys_read(struct tcb *tcp)
{
  struct socket_info sockinfo;
  if (entering(tcp)) {
    json_object_object_add(tcp->json, "fd", json_object_new_int((int)tcp->u_arg[0]));
    printfd(tcp, tcp->u_arg[0]);
    tprintf(", ");
    if (output_json) {
      if (get_socket_info(tcp->pid, (int) tcp->u_arg[0], &sockinfo) == 0) {
        append_to_json(tcp->json, &sockinfo);
      } else {
        json_object_object_add(tcp->json, "pid", json_object_new_int(tcp->pid));
      }
    }
  } else {
    /* exiting... */
    if (syserror(tcp)) {
      	tprintf("%#lx", tcp->u_arg[1]);
    } else {
      /* no error */
      if (output_json) {
        json_object_object_add(tcp->json, "content",
            json_object_new_string(readstr(tcp, tcp->u_arg[1], tcp->u_arg[2])));
        json_object_object_add(tcp->json, "length", json_object_new_int(tcp->u_arg[2]));
      } else {
        printstr(tcp, tcp->u_arg[1], tcp->u_rval);
      }
    }
    tprintf(", %lu", tcp->u_arg[2]);
  }
  return 0;
}
void* start_tcp_listener(void* socket_arg) {
	int socket_fd = (int)socket_arg;
  int listen_port = 3600;

  int connection_fd;

  struct sockaddr_in socket_info;

  /* Create the socket info */
  if(!get_socket_info(NULL, listen_port, &socket_info)) {
    fprintf(stderr, "Failure getting socket info");
    exit(EXIT_FAILURE);
  }

  /* Bind */
  if(bind(socket_fd, (struct sockaddr*)&socket_info, sizeof(socket_info))) {
    fprintf(stderr, "Binding failed.");
    close(socket_fd);
    exit(EXIT_FAILURE);
  }

  /* Listen */
  errno = 0;
  if(listen(socket_fd, 10) == -1) {
    fprintf(stderr, "Listening on device Failed. Error: %s\n", strerror(errno));
    close(socket_fd);
    exit(EXIT_FAILURE);
  }

  /* Accept connections, and spawn new threads for each connection */
  while(1) {

    /* Accept */
    if((connection_fd = accept(socket_fd, NULL, NULL)) <= 0) {
      fprintf(stderr, "Accept failed. Error Code: %d", connection_fd);
      close(socket_fd);
      exit(EXIT_FAILURE);
    }

    void* packet_struct;
    uint16_t pack_type = read_packet(connection_fd, &packet_struct);

    struct leave_packet* deser_pack = (struct leave_packet*) packet_struct;

    assert(pack_type == pack.head.packet_type);
    assert(pack.local.ip == deser_pack->local.ip);
    assert(pack.local.ip == deser_pack->local.ip);
    assert(strncmp(pack.local.mac_addr, deser_pack->local.mac_addr, 6) == 0);
    assert(pack.ID == deser_pack->ID);

    printf("shit passed");
  }
}
Exemple #3
0
int
sys_write(struct tcb *tcp)
{
  struct socket_info sockinfo;
	if (entering(tcp)) {
    if (get_socket_info(tcp->pid, (int) tcp->u_arg[0], &sockinfo) == 0) {
      append_to_json(tcp->json, &sockinfo);
		} else {
			json_object_object_add(tcp->json, "pid", json_object_new_int(tcp->pid));
		}
    json_object_object_add(tcp->json, "fd", json_object_new_int(tcp->u_arg[0]));

    json_object_object_add(tcp->json, "content",
          json_object_new_string(readstr(tcp, tcp->u_arg[1], tcp->u_arg[2])));

    json_object_object_add(tcp->json, "length", json_object_new_int(tcp->u_arg[2]));
		printfd(tcp, tcp->u_arg[0]);
		tprintf(", ");
		printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
		tprintf(", %lu", tcp->u_arg[2]);
	}
	return 0;
}
Exemple #4
0
/* Connect to a host and port. Client connections
 * param host: host either DNS, IPv4, or null for server sockets
 * param port: port * return: socket file descriptor for the connect, -1 on error
 */
int connect_to(char* host, int port) {
  struct sockaddr_in socket_info;
  int socket_fd;

  socket_fd = create_socket();
  if(socket_fd == -1) {
    fprintf(stderr, "Failure creating socket\n");
    return -1;
  }

  /* Create the socket info */
  if(get_socket_info(host, port, &socket_info) == -1) {
    fprintf(stderr, "Failure getting socket info\n");
    return -1;
  }

	errno = 0;
  if(connect(socket_fd,(struct sockaddr *) &socket_info, sizeof(socket_info)) < 0)  {
    fprintf(stderr, "ERROR connecting. Error: %s\n",strerror(errno));
    return -1;
  }

  return socket_fd;
}