std::unique_ptr<ElVis::Serialization::Camera> Camera::Serialize() const { auto pResult = std::unique_ptr<ElVis::Serialization::Camera>(new ElVis::Serialization::Camera()); pResult->set_field_of_view(m_fieldOfView); pResult->set_aspect_ratio(m_aspectRatio); pResult->set_near(m_near); pResult->set_far(m_far); pResult->set_allocated_eye(m_eye.Serialize().release()); pResult->set_allocated_lookat(m_lookAt.Serialize().release()); pResult->set_allocated_up(m_up.Serialize().release()); pResult->set_allocated_u(m_u.Serialize().release()); pResult->set_allocated_v(m_v.Serialize().release()); pResult->set_allocated_w(m_w.Serialize().release()); return pResult; }
int close_conn(int sock) { if (close(sock) < 0) { perror("close_conn error - close failed"); return -1; } fd_remove(sock); if (delete_near(sock) < 0) { fprintf(stderr, "close_conn error - socket not found in near list\n"); return -1; } set_near(); nsock --; return 0; }
int accept_conn(int tcp_list) { int j, rc; int sock_tmp; int nread; unsigned short port; struct sockaddr_in *addr_list; struct sockaddr_in addr; unsigned int len = sizeof(struct sockaddr_in); struct packet send_pck; if ((sock_tmp = accept(tcp_list, (struct sockaddr*)&addr, &len)) < 0) { perror("accept_conn error - accept failed"); return -1; } if (nsock >= max_tcp_sock) { printf("accept_conn - can't accept more connection %s:%u\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); new_err_packet(&send_pck, 0); if (send_packet_tcp(sock_tmp, &send_pck) < 0) { perror("bad write"); return -1; } if (close(sock_tmp) < 0) { perror("accept_conn error - close failed"); return -1; } return 0; } new_ack_packet(&send_pck, 0); if (send_packet_tcp(sock_tmp, &send_pck) < 0) { perror("bad write"); return -1; } if ((nread = read(sock_tmp, (char *)&port, sizeof(port))) != sizeof(port)) { if (nread < 0) { perror("accept_conn error - read failed"); } else { fprintf(stderr, "accept_conn error - bad packet format\n"); } return -1; } printf("connessione accettata da %s:%d\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); fd_add(sock_tmp); addr.sin_port = port; if ((rc = pthread_mutex_lock(&NEAR_LIST_LOCK)) != 0) { fprintf(stderr, "accept_conn error - can't acquire lock: %s\n", strerror(rc)); return -1; } if (insert_near(sock_tmp, &addr) < 0) { fprintf(stderr, "join_overlay error - insert_near failed\n"); return -1; } set_near(); printf("accept_conn setto la stringa dei vicini\n"); if ((rc = pthread_mutex_unlock(&NEAR_LIST_LOCK)) != 0) { fprintf(stderr, "accept_conn error - can't release lock: %s\n", strerror(rc)); return -1; } addr_list = str_to_addr(near_str, max_tcp_sock); for(j = 0 ; j < max_tcp_sock; j ++){ printf("accept - near %s:%d\n", inet_ntoa(addr_list[j].sin_addr), ntohs(addr_list[j].sin_port)); } nsock ++; return 0; }