|
@@ -159,10 +159,11 @@ int PacketPeerUDP::get_max_packet_size() const {
|
|
return 512; // uhm maybe not
|
|
return 512; // uhm maybe not
|
|
}
|
|
}
|
|
|
|
|
|
-Error PacketPeerUDP::listen(int p_port, const IP_Address &p_bind_address, int p_recv_buffer_size) {
|
|
|
|
|
|
+Error PacketPeerUDP::bind(int p_port, const IP_Address &p_bind_address, int p_recv_buffer_size) {
|
|
ERR_FAIL_COND_V(!_sock.is_valid(), ERR_UNAVAILABLE);
|
|
ERR_FAIL_COND_V(!_sock.is_valid(), ERR_UNAVAILABLE);
|
|
ERR_FAIL_COND_V(_sock->is_open(), ERR_ALREADY_IN_USE);
|
|
ERR_FAIL_COND_V(_sock->is_open(), ERR_ALREADY_IN_USE);
|
|
ERR_FAIL_COND_V(!p_bind_address.is_valid() && !p_bind_address.is_wildcard(), ERR_INVALID_PARAMETER);
|
|
ERR_FAIL_COND_V(!p_bind_address.is_valid() && !p_bind_address.is_wildcard(), ERR_INVALID_PARAMETER);
|
|
|
|
+ ERR_FAIL_COND_V_MSG(p_port < 0 || p_port > 65535, ERR_INVALID_PARAMETER, "The local port number must be between 0 and 65535 (inclusive).");
|
|
|
|
|
|
Error err;
|
|
Error err;
|
|
IP::Type ip_type = IP::TYPE_ANY;
|
|
IP::Type ip_type = IP::TYPE_ANY;
|
|
@@ -210,6 +211,7 @@ Error PacketPeerUDP::connect_to_host(const IP_Address &p_host, int p_port) {
|
|
ERR_FAIL_COND_V(udp_server, ERR_LOCKED);
|
|
ERR_FAIL_COND_V(udp_server, ERR_LOCKED);
|
|
ERR_FAIL_COND_V(!_sock.is_valid(), ERR_UNAVAILABLE);
|
|
ERR_FAIL_COND_V(!_sock.is_valid(), ERR_UNAVAILABLE);
|
|
ERR_FAIL_COND_V(!p_host.is_valid(), ERR_INVALID_PARAMETER);
|
|
ERR_FAIL_COND_V(!p_host.is_valid(), ERR_INVALID_PARAMETER);
|
|
|
|
+ ERR_FAIL_COND_V_MSG(p_port < 1 || p_port > 65535, ERR_INVALID_PARAMETER, "The remote port number must be between 1 and 65535 (inclusive).");
|
|
|
|
|
|
Error err;
|
|
Error err;
|
|
|
|
|
|
@@ -316,7 +318,7 @@ Error PacketPeerUDP::store_packet(IP_Address p_ip, uint32_t p_port, uint8_t *p_b
|
|
return OK;
|
|
return OK;
|
|
}
|
|
}
|
|
|
|
|
|
-bool PacketPeerUDP::is_listening() const {
|
|
|
|
|
|
+bool PacketPeerUDP::is_bound() const {
|
|
return _sock.is_valid() && _sock->is_open();
|
|
return _sock.is_valid() && _sock->is_open();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -328,6 +330,12 @@ int PacketPeerUDP::get_packet_port() const {
|
|
return packet_port;
|
|
return packet_port;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+int PacketPeerUDP::get_local_port() const {
|
|
|
|
+ uint16_t local_port;
|
|
|
|
+ _sock->get_socket_address(nullptr, &local_port);
|
|
|
|
+ return local_port;
|
|
|
|
+}
|
|
|
|
+
|
|
void PacketPeerUDP::set_dest_address(const IP_Address &p_address, int p_port) {
|
|
void PacketPeerUDP::set_dest_address(const IP_Address &p_address, int p_port) {
|
|
ERR_FAIL_COND_MSG(connected, "Destination address cannot be set for connected sockets");
|
|
ERR_FAIL_COND_MSG(connected, "Destination address cannot be set for connected sockets");
|
|
peer_addr = p_address;
|
|
peer_addr = p_address;
|
|
@@ -335,14 +343,15 @@ void PacketPeerUDP::set_dest_address(const IP_Address &p_address, int p_port) {
|
|
}
|
|
}
|
|
|
|
|
|
void PacketPeerUDP::_bind_methods() {
|
|
void PacketPeerUDP::_bind_methods() {
|
|
- ClassDB::bind_method(D_METHOD("listen", "port", "bind_address", "recv_buf_size"), &PacketPeerUDP::listen, DEFVAL("*"), DEFVAL(65536));
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("bind", "port", "bind_address", "recv_buf_size"), &PacketPeerUDP::bind, DEFVAL("*"), DEFVAL(65536));
|
|
ClassDB::bind_method(D_METHOD("close"), &PacketPeerUDP::close);
|
|
ClassDB::bind_method(D_METHOD("close"), &PacketPeerUDP::close);
|
|
ClassDB::bind_method(D_METHOD("wait"), &PacketPeerUDP::wait);
|
|
ClassDB::bind_method(D_METHOD("wait"), &PacketPeerUDP::wait);
|
|
- ClassDB::bind_method(D_METHOD("is_listening"), &PacketPeerUDP::is_listening);
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("is_bound"), &PacketPeerUDP::is_bound);
|
|
ClassDB::bind_method(D_METHOD("connect_to_host", "host", "port"), &PacketPeerUDP::connect_to_host);
|
|
ClassDB::bind_method(D_METHOD("connect_to_host", "host", "port"), &PacketPeerUDP::connect_to_host);
|
|
ClassDB::bind_method(D_METHOD("is_connected_to_host"), &PacketPeerUDP::is_connected_to_host);
|
|
ClassDB::bind_method(D_METHOD("is_connected_to_host"), &PacketPeerUDP::is_connected_to_host);
|
|
ClassDB::bind_method(D_METHOD("get_packet_ip"), &PacketPeerUDP::_get_packet_ip);
|
|
ClassDB::bind_method(D_METHOD("get_packet_ip"), &PacketPeerUDP::_get_packet_ip);
|
|
ClassDB::bind_method(D_METHOD("get_packet_port"), &PacketPeerUDP::get_packet_port);
|
|
ClassDB::bind_method(D_METHOD("get_packet_port"), &PacketPeerUDP::get_packet_port);
|
|
|
|
+ ClassDB::bind_method(D_METHOD("get_local_port"), &PacketPeerUDP::get_local_port);
|
|
ClassDB::bind_method(D_METHOD("set_dest_address", "host", "port"), &PacketPeerUDP::_set_dest_address);
|
|
ClassDB::bind_method(D_METHOD("set_dest_address", "host", "port"), &PacketPeerUDP::_set_dest_address);
|
|
ClassDB::bind_method(D_METHOD("set_broadcast_enabled", "enabled"), &PacketPeerUDP::set_broadcast_enabled);
|
|
ClassDB::bind_method(D_METHOD("set_broadcast_enabled", "enabled"), &PacketPeerUDP::set_broadcast_enabled);
|
|
ClassDB::bind_method(D_METHOD("join_multicast_group", "multicast_address", "interface_name"), &PacketPeerUDP::join_multicast_group);
|
|
ClassDB::bind_method(D_METHOD("join_multicast_group", "multicast_address", "interface_name"), &PacketPeerUDP::join_multicast_group);
|