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