Remove set_ip_type from network classes (no longer needed)

- TCP:
  - `listen` bind to wildcard "*" -> dual stack socket
  - `listen` bind to address -> socket from address type
  - `connect` -> resolve using best protocol (UNSPEC), socket from address type

- UDP:
  - `listen` bind to wildcard "*" -> dual stack socket
  - `listen` bind to address -> socket from address type
  - `put_packet`/`put_var` -> resolve using TYPE_ANY (UNSPEC), socket from address type
    (to change socket type you must first call `close` it)
This commit is contained in:
Fabio Alessandrelli 2017-01-18 12:47:12 +01:00
parent 2fe4ef6699
commit 88a56ba783
18 changed files with 15 additions and 66 deletions

View File

@ -29,14 +29,9 @@
#include "http_client.h" #include "http_client.h"
#include "io/stream_peer_ssl.h" #include "io/stream_peer_ssl.h"
void HTTPClient::set_ip_type(IP::Type p_type) {
ip_type = p_type;
}
Error HTTPClient::connect_to_host(const String &p_host, int p_port, bool p_ssl,bool p_verify_host){ Error HTTPClient::connect_to_host(const String &p_host, int p_port, bool p_ssl,bool p_verify_host){
close(); close();
tcp_connection->set_ip_type(ip_type);
conn_port=p_port; conn_port=p_port;
conn_host=p_host; conn_host=p_host;
@ -66,7 +61,7 @@ Error HTTPClient::connect_to_host(const String &p_host, int p_port, bool p_ssl,b
status=STATUS_CONNECTING; status=STATUS_CONNECTING;
} else { } else {
//is hostname //is hostname
resolving=IP::get_singleton()->resolve_hostname_queue_item(conn_host, ip_type); resolving=IP::get_singleton()->resolve_hostname_queue_item(conn_host);
status=STATUS_RESOLVING; status=STATUS_RESOLVING;
} }
@ -639,7 +634,6 @@ Error HTTPClient::_get_http_data(uint8_t* p_buffer, int p_bytes,int &r_received)
void HTTPClient::_bind_methods() { void HTTPClient::_bind_methods() {
ClassDB::bind_method(_MD("set_ip_type","ip_type"),&HTTPClient::set_ip_type);
ClassDB::bind_method(_MD("connect_to_host:Error","host","port","use_ssl","verify_host"),&HTTPClient::connect_to_host,DEFVAL(false),DEFVAL(true)); ClassDB::bind_method(_MD("connect_to_host:Error","host","port","use_ssl","verify_host"),&HTTPClient::connect_to_host,DEFVAL(false),DEFVAL(true));
ClassDB::bind_method(_MD("set_connection","connection:StreamPeer"),&HTTPClient::set_connection); ClassDB::bind_method(_MD("set_connection","connection:StreamPeer"),&HTTPClient::set_connection);
ClassDB::bind_method(_MD("get_connection:StreamPeer"),&HTTPClient::get_connection); ClassDB::bind_method(_MD("get_connection:StreamPeer"),&HTTPClient::get_connection);
@ -766,7 +760,6 @@ String HTTPClient::query_string_from_dict(const Dictionary& p_dict) {
HTTPClient::HTTPClient(){ HTTPClient::HTTPClient(){
ip_type = IP::TYPE_ANY;
tcp_connection = StreamPeerTCP::create_ref(); tcp_connection = StreamPeerTCP::create_ref();
resolving = IP::RESOLVER_INVALID_ID; resolving = IP::RESOLVER_INVALID_ID;
status=STATUS_DISCONNECTED; status=STATUS_DISCONNECTED;

View File

@ -132,7 +132,6 @@ public:
private: private:
IP::Type ip_type;
Status status; Status status;
IP::ResolverID resolving; IP::ResolverID resolving;
int conn_port; int conn_port;
@ -165,7 +164,6 @@ private:
public: public:
void set_ip_type(IP::Type p_type);
//Error connect_and_get(const String& p_url,bool p_verify_host=true); //connects to a full url and perform request //Error connect_and_get(const String& p_url,bool p_verify_host=true); //connects to a full url and perform request
Error connect_to_host(const String &p_host,int p_port,bool p_ssl=false,bool p_verify_host=true); Error connect_to_host(const String &p_host,int p_port,bool p_ssl=false,bool p_verify_host=true);

View File

@ -42,7 +42,7 @@ Error PacketPeerUDP::_set_dest_address(const String& p_address, int p_port) {
if (p_address.is_valid_ip_address()) { if (p_address.is_valid_ip_address()) {
ip=p_address; ip=p_address;
} else { } else {
ip=IP::get_singleton()->resolve_hostname(p_address, ip_type); ip=IP::get_singleton()->resolve_hostname(p_address);
if (!ip.is_valid()) if (!ip.is_valid())
return ERR_CANT_RESOLVE; return ERR_CANT_RESOLVE;
} }
@ -51,14 +51,8 @@ Error PacketPeerUDP::_set_dest_address(const String& p_address, int p_port) {
return OK; return OK;
} }
void PacketPeerUDP::set_ip_type(IP::Type p_type) {
close();
ip_type = p_type;
}
void PacketPeerUDP::_bind_methods() { void PacketPeerUDP::_bind_methods() {
ClassDB::bind_method(_MD("set_ip_type","ip_type"),&PacketPeerUDP::set_ip_type);
ClassDB::bind_method(_MD("listen:Error","port", "bind_address", "recv_buf_size"),&PacketPeerUDP::listen,DEFVAL("*"),DEFVAL(65536)); ClassDB::bind_method(_MD("listen:Error","port", "bind_address", "recv_buf_size"),&PacketPeerUDP::listen,DEFVAL("*"),DEFVAL(65536));
ClassDB::bind_method(_MD("close"),&PacketPeerUDP::close); ClassDB::bind_method(_MD("close"),&PacketPeerUDP::close);
ClassDB::bind_method(_MD("wait:Error"),&PacketPeerUDP::wait); ClassDB::bind_method(_MD("wait:Error"),&PacketPeerUDP::wait);
@ -87,5 +81,5 @@ PacketPeerUDP* PacketPeerUDP::create() {
PacketPeerUDP::PacketPeerUDP() PacketPeerUDP::PacketPeerUDP()
{ {
ip_type = IP::TYPE_ANY;
} }

View File

@ -38,8 +38,6 @@ class PacketPeerUDP : public PacketPeer {
protected: protected:
IP::Type ip_type;
static PacketPeerUDP* (*_create)(); static PacketPeerUDP* (*_create)();
static void _bind_methods(); static void _bind_methods();
@ -49,7 +47,6 @@ protected:
public: public:
virtual void set_ip_type(IP::Type p_type);
virtual Error listen(int p_port, IP_Address p_bind_address=IP_Address("*"), int p_recv_buffer_size=65536)=0; virtual Error listen(int p_port, IP_Address p_bind_address=IP_Address("*"), int p_recv_buffer_size=65536)=0;
virtual void close()=0; virtual void close()=0;
virtual Error wait()=0; virtual Error wait()=0;

View File

@ -36,7 +36,7 @@ Error StreamPeerTCP::_connect(const String& p_address,int p_port) {
if (p_address.is_valid_ip_address()) { if (p_address.is_valid_ip_address()) {
ip=p_address; ip=p_address;
} else { } else {
ip=IP::get_singleton()->resolve_hostname(p_address, ip_type); ip=IP::get_singleton()->resolve_hostname(p_address);
if (!ip.is_valid()) if (!ip.is_valid())
return ERR_CANT_RESOLVE; return ERR_CANT_RESOLVE;
} }
@ -45,14 +45,8 @@ Error StreamPeerTCP::_connect(const String& p_address,int p_port) {
return OK; return OK;
} }
void StreamPeerTCP::set_ip_type(IP::Type p_type) {
disconnect_from_host();
ip_type = p_type;
}
void StreamPeerTCP::_bind_methods() { void StreamPeerTCP::_bind_methods() {
ClassDB::bind_method(_MD("set_ip_type","ip_type"),&StreamPeerTCP::set_ip_type);
ClassDB::bind_method(_MD("connect_to_host","host","port"),&StreamPeerTCP::_connect); ClassDB::bind_method(_MD("connect_to_host","host","port"),&StreamPeerTCP::_connect);
ClassDB::bind_method(_MD("is_connected_to_host"),&StreamPeerTCP::is_connected_to_host); ClassDB::bind_method(_MD("is_connected_to_host"),&StreamPeerTCP::is_connected_to_host);
ClassDB::bind_method(_MD("get_status"),&StreamPeerTCP::get_status); ClassDB::bind_method(_MD("get_status"),&StreamPeerTCP::get_status);
@ -83,7 +77,6 @@ StreamPeerTCP* StreamPeerTCP::create() {
StreamPeerTCP::StreamPeerTCP() { StreamPeerTCP::StreamPeerTCP() {
ip_type = IP::TYPE_ANY;
} }
StreamPeerTCP::~StreamPeerTCP() { StreamPeerTCP::~StreamPeerTCP() {

View File

@ -51,15 +51,12 @@ public:
protected: protected:
IP::Type ip_type;
virtual Error _connect(const String& p_address, int p_port); virtual Error _connect(const String& p_address, int p_port);
static StreamPeerTCP* (*_create)(); static StreamPeerTCP* (*_create)();
static void _bind_methods(); static void _bind_methods();
public: public:
virtual void set_ip_type(IP::Type p_type);
virtual Error connect_to_host(const IP_Address& p_host, uint16_t p_port)=0; virtual Error connect_to_host(const IP_Address& p_host, uint16_t p_port)=0;
//read/write from streampeer //read/write from streampeer

View File

@ -44,14 +44,8 @@ TCP_Server* TCP_Server::create() {
return _create(); return _create();
} }
void TCP_Server::set_ip_type(IP::Type p_type) {
stop();
ip_type = p_type;
}
void TCP_Server::_bind_methods() { void TCP_Server::_bind_methods() {
ClassDB::bind_method(_MD("set_ip_type","ip_type"),&TCP_Server::set_ip_type);
ClassDB::bind_method(_MD("listen","port","bind_address"),&TCP_Server::listen,DEFVAL("*")); ClassDB::bind_method(_MD("listen","port","bind_address"),&TCP_Server::listen,DEFVAL("*"));
ClassDB::bind_method(_MD("is_connection_available"),&TCP_Server::is_connection_available); ClassDB::bind_method(_MD("is_connection_available"),&TCP_Server::is_connection_available);
ClassDB::bind_method(_MD("take_connection"),&TCP_Server::take_connection); ClassDB::bind_method(_MD("take_connection"),&TCP_Server::take_connection);
@ -62,5 +56,5 @@ void TCP_Server::_bind_methods() {
TCP_Server::TCP_Server() TCP_Server::TCP_Server()
{ {
ip_type = IP::TYPE_ANY;
} }

View File

@ -38,15 +38,12 @@ class TCP_Server : public Reference {
GDCLASS( TCP_Server, Reference ); GDCLASS( TCP_Server, Reference );
protected: protected:
IP::Type ip_type;
static TCP_Server* (*_create)(); static TCP_Server* (*_create)();
//bind helper //bind helper
static void _bind_methods(); static void _bind_methods();
public: public:
virtual void set_ip_type(IP::Type p_type);
virtual Error listen(uint16_t p_port, const IP_Address p_bind_address=IP_Address("*"))=0; virtual Error listen(uint16_t p_port, const IP_Address p_bind_address=IP_Address("*"))=0;
virtual bool is_connection_available() const=0; virtual bool is_connection_available() const=0;
virtual Ref<StreamPeerTCP> take_connection()=0; virtual Ref<StreamPeerTCP> take_connection()=0;

View File

@ -129,7 +129,7 @@ Error PacketPeerUDPPosix::listen(int p_port, IP_Address p_bind_address, int p_re
ERR_FAIL_COND_V(sockfd!=-1,ERR_ALREADY_IN_USE); ERR_FAIL_COND_V(sockfd!=-1,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);
sock_type = ip_type; sock_type = IP::TYPE_ANY;
if(p_bind_address.is_valid()) if(p_bind_address.is_valid())
sock_type = p_bind_address.is_ipv4() ? IP::TYPE_IPV4 : IP::TYPE_IPV6; sock_type = p_bind_address.is_ipv4() ? IP::TYPE_IPV4 : IP::TYPE_IPV6;
@ -271,7 +271,6 @@ PacketPeerUDPPosix::PacketPeerUDPPosix() {
queue_count=0; queue_count=0;
peer_port=0; peer_port=0;
sock_type = IP::TYPE_NONE; sock_type = IP::TYPE_NONE;
ip_type = IP::TYPE_ANY;
} }
PacketPeerUDPPosix::~PacketPeerUDPPosix() { PacketPeerUDPPosix::~PacketPeerUDPPosix() {

View File

@ -122,10 +122,9 @@ Error StreamPeerTCPPosix::_poll_connection(bool p_block) const {
return OK; return OK;
}; };
void StreamPeerTCPPosix::set_socket(int p_sockfd, IP_Address p_host, int p_port, IP::Type p_ip_type) { void StreamPeerTCPPosix::set_socket(int p_sockfd, IP_Address p_host, int p_port, IP::Type p_sock_type) {
ip_type = p_ip_type; sock_type = p_sock_type;
sock_type = p_ip_type;
sockfd = p_sockfd; sockfd = p_sockfd;
#ifndef NO_FCNTL #ifndef NO_FCNTL
fcntl(sockfd, F_SETFL, O_NONBLOCK); fcntl(sockfd, F_SETFL, O_NONBLOCK);
@ -398,7 +397,6 @@ StreamPeerTCPPosix::StreamPeerTCPPosix() {
sockfd = -1; sockfd = -1;
status = STATUS_NONE; status = STATUS_NONE;
peer_port = 0; peer_port = 0;
ip_type = IP::TYPE_ANY;
}; };
StreamPeerTCPPosix::~StreamPeerTCPPosix() { StreamPeerTCPPosix::~StreamPeerTCPPosix() {

View File

@ -68,7 +68,7 @@ public:
virtual int get_available_bytes() const; virtual int get_available_bytes() const;
void set_socket(int p_sockfd, IP_Address p_host, int p_port, IP::Type p_ip_type); void set_socket(int p_sockfd, IP_Address p_host, int p_port, IP::Type p_sock_type);
virtual IP_Address get_connected_host() const; virtual IP_Address get_connected_host() const;
virtual uint16_t get_connected_port() const; virtual uint16_t get_connected_port() const;

View File

@ -74,7 +74,7 @@ Error TCPServerPosix::listen(uint16_t p_port,const IP_Address p_bind_address) {
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);
int sockfd; int sockfd;
sock_type = ip_type; sock_type = IP::TYPE_ANY;
// If the bind address is valid use its type as the socket type // If the bind address is valid use its type as the socket type
if (p_bind_address.is_valid()) if (p_bind_address.is_valid())
@ -184,7 +184,6 @@ void TCPServerPosix::stop() {
TCPServerPosix::TCPServerPosix() { TCPServerPosix::TCPServerPosix() {
listen_sockfd = -1; listen_sockfd = -1;
ip_type = IP::TYPE_ANY;
sock_type = IP::TYPE_NONE; sock_type = IP::TYPE_NONE;
}; };

View File

@ -124,7 +124,7 @@ Error PacketPeerUDPWinsock::listen(int p_port, IP_Address p_bind_address, int p_
ERR_FAIL_COND_V(sockfd!=-1,ERR_ALREADY_IN_USE); ERR_FAIL_COND_V(sockfd!=-1,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);
sock_type = ip_type; sock_type = IP::TYPE_ANY;
if(p_bind_address.is_valid()) if(p_bind_address.is_valid())
sock_type = p_bind_address.is_ipv4() ? IP::TYPE_IPV4 : IP::TYPE_IPV6; sock_type = p_bind_address.is_ipv4() ? IP::TYPE_IPV4 : IP::TYPE_IPV6;
@ -289,7 +289,6 @@ PacketPeerUDPWinsock::PacketPeerUDPWinsock() {
packet_port=0; packet_port=0;
queue_count=0; queue_count=0;
peer_port=0; peer_port=0;
ip_type = IP::TYPE_ANY;
sock_type = IP::TYPE_NONE; sock_type = IP::TYPE_NONE;
} }

View File

@ -287,11 +287,10 @@ void StreamPeerWinsock::disconnect_from_host() {
peer_port = 0; peer_port = 0;
}; };
void StreamPeerWinsock::set_socket(int p_sockfd, IP_Address p_host, int p_port, IP::Type p_ip_type) { void StreamPeerWinsock::set_socket(int p_sockfd, IP_Address p_host, int p_port, IP::Type p_sock_type) {
ip_type = p_ip_type;
sockfd = p_sockfd; sockfd = p_sockfd;
sock_type = p_ip_type; sock_type = p_sock_type;
status = STATUS_CONNECTING; status = STATUS_CONNECTING;
peer_host = p_host; peer_host = p_host;
peer_port = p_port; peer_port = p_port;
@ -369,7 +368,6 @@ StreamPeerWinsock::StreamPeerWinsock() {
sockfd = INVALID_SOCKET; sockfd = INVALID_SOCKET;
status = STATUS_NONE; status = STATUS_NONE;
peer_port = 0; peer_port = 0;
ip_type = IP::TYPE_ANY;
}; };
StreamPeerWinsock::~StreamPeerWinsock() { StreamPeerWinsock::~StreamPeerWinsock() {

View File

@ -69,7 +69,7 @@ public:
virtual int get_available_bytes() const; virtual int get_available_bytes() const;
void set_socket(int p_sockfd, IP_Address p_host, int p_port, IP::Type p_ip_type); void set_socket(int p_sockfd, IP_Address p_host, int p_port, IP::Type p_sock_type);
virtual IP_Address get_connected_host() const; virtual IP_Address get_connected_host() const;
virtual uint16_t get_connected_port() const; virtual uint16_t get_connected_port() const;

View File

@ -69,7 +69,7 @@ Error TCPServerWinsock::listen(uint16_t p_port,const IP_Address p_bind_address)
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);
int sockfd; int sockfd;
sock_type = ip_type; sock_type = IP::TYPE_ANY;
// If the bind address is valid use its type as the socket type // If the bind address is valid use its type as the socket type
if (p_bind_address.is_valid()) if (p_bind_address.is_valid())
@ -179,7 +179,6 @@ void TCPServerWinsock::stop() {
TCPServerWinsock::TCPServerWinsock() { TCPServerWinsock::TCPServerWinsock() {
listen_sockfd = INVALID_SOCKET; listen_sockfd = INVALID_SOCKET;
ip_type = IP::TYPE_ANY;
sock_type = IP::TYPE_NONE; sock_type = IP::TYPE_NONE;
}; };

View File

@ -28,10 +28,6 @@
/*************************************************************************/ /*************************************************************************/
#include "http_request.h" #include "http_request.h"
void HTTPRequest::set_ip_type(IP::Type p_type) {
client->set_ip_type(p_type);
}
void HTTPRequest::_redirect_request(const String& p_new_url) { void HTTPRequest::_redirect_request(const String& p_new_url) {
@ -539,7 +535,6 @@ int HTTPRequest::get_body_size() const{
void HTTPRequest::_bind_methods() { void HTTPRequest::_bind_methods() {
ClassDB::bind_method(_MD("set_ip_type","ip_type"),&HTTPRequest::set_ip_type);
ClassDB::bind_method(_MD("request","url","custom_headers","ssl_validate_domain","method","request_data"),&HTTPRequest::request,DEFVAL(PoolStringArray()),DEFVAL(true),DEFVAL(HTTPClient::METHOD_GET),DEFVAL(String())); ClassDB::bind_method(_MD("request","url","custom_headers","ssl_validate_domain","method","request_data"),&HTTPRequest::request,DEFVAL(PoolStringArray()),DEFVAL(true),DEFVAL(HTTPClient::METHOD_GET),DEFVAL(String()));
ClassDB::bind_method(_MD("cancel_request"),&HTTPRequest::cancel_request); ClassDB::bind_method(_MD("cancel_request"),&HTTPRequest::cancel_request);

View File

@ -116,7 +116,6 @@ protected:
static void _bind_methods(); static void _bind_methods();
public: public:
void set_ip_type(IP::Type p_type);
Error request(const String& p_url, const Vector<String>& p_custom_headers=Vector<String>(), bool p_ssl_validate_domain=true, HTTPClient::Method p_method=HTTPClient::METHOD_GET, const String& p_request_data=""); //connects to a full url and perform request Error request(const String& p_url, const Vector<String>& p_custom_headers=Vector<String>(), bool p_ssl_validate_domain=true, HTTPClient::Method p_method=HTTPClient::METHOD_GET, const String& p_request_data=""); //connects to a full url and perform request
void cancel_request(); void cancel_request();
HTTPClient::Status get_http_client_status() const; HTTPClient::Status get_http_client_status() const;