mirror of
https://github.com/AlexandreRouma/SDRPlusPlus.git
synced 2025-10-20 12:50:04 +02:00
Merge pull request #1302 from AlexandreRouma/master
keep new_rds branch updated
This commit is contained in:
@@ -86,14 +86,14 @@ namespace net {
|
||||
addr.sin_port = htons(port);
|
||||
}
|
||||
|
||||
std::string Address::getIPStr() {
|
||||
std::string Address::getIPStr() const {
|
||||
char buf[128];
|
||||
IP_t ip = getIP();
|
||||
sprintf(buf, "%d.%d.%d.%d", (ip >> 24) & 0xFF, (ip >> 16) & 0xFF, (ip >> 8) & 0xFF, ip & 0xFF);
|
||||
return buf;
|
||||
}
|
||||
|
||||
IP_t Address::getIP() {
|
||||
IP_t Address::getIP() const {
|
||||
return htonl(addr.sin_addr.s_addr);
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ namespace net {
|
||||
addr.sin_addr.s_addr = htonl(ip);
|
||||
}
|
||||
|
||||
int Address::getPort() {
|
||||
int Address::getPort() const {
|
||||
return htons(addr.sin_port);
|
||||
}
|
||||
|
||||
@@ -160,8 +160,8 @@ namespace net {
|
||||
|
||||
// Set timeout
|
||||
timeval tv;
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = timeout * 1000;
|
||||
tv.tv_sec = timeout / 1000;
|
||||
tv.tv_usec = (timeout - tv.tv_sec*1000) * 1000;
|
||||
|
||||
// Wait for data
|
||||
int err = select(sock+1, &set, NULL, &set, (timeout > 0) ? &tv : NULL);
|
||||
@@ -225,8 +225,8 @@ namespace net {
|
||||
|
||||
// Define timeout
|
||||
timeval tv;
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = timeout * 1000;
|
||||
tv.tv_sec = timeout / 1000;
|
||||
tv.tv_usec = (timeout - tv.tv_sec*1000) * 1000;
|
||||
|
||||
// Wait for data or error
|
||||
if (timeout != NONBLOCKING) {
|
||||
@@ -375,13 +375,25 @@ namespace net {
|
||||
return connect(Address(host, port));
|
||||
}
|
||||
|
||||
std::shared_ptr<Socket> openudp(const Address& raddr, const Address& laddr) {
|
||||
std::shared_ptr<Socket> openudp(const Address& raddr, const Address& laddr, bool allowBroadcast) {
|
||||
// Init library if needed
|
||||
init();
|
||||
|
||||
// Create socket
|
||||
SockHandle_t s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
|
||||
// If the remote address is multicast, allow multicast connections
|
||||
#ifdef _WIN32
|
||||
const char enable = allowBroadcast;
|
||||
#else
|
||||
int enable = allowBroadcast;
|
||||
#endif
|
||||
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &enable, sizeof(int)) < 0) {
|
||||
closeSocket(s);
|
||||
throw std::runtime_error("Could not enable broadcast on socket");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Bind socket to local port
|
||||
if (bind(s, (sockaddr*)&laddr.addr, sizeof(sockaddr_in))) {
|
||||
closeSocket(s);
|
||||
@@ -393,15 +405,15 @@ namespace net {
|
||||
return std::make_shared<Socket>(s, &raddr);
|
||||
}
|
||||
|
||||
std::shared_ptr<Socket> openudp(std::string rhost, int rport, const Address& laddr) {
|
||||
return openudp(Address(rhost, rport), laddr);
|
||||
std::shared_ptr<Socket> openudp(std::string rhost, int rport, const Address& laddr, bool allowBroadcast) {
|
||||
return openudp(Address(rhost, rport), laddr, allowBroadcast);
|
||||
}
|
||||
|
||||
std::shared_ptr<Socket> openudp(const Address& raddr, std::string lhost, int lport) {
|
||||
return openudp(raddr, Address(lhost, lport));
|
||||
std::shared_ptr<Socket> openudp(const Address& raddr, std::string lhost, int lport, bool allowBroadcast) {
|
||||
return openudp(raddr, Address(lhost, lport), allowBroadcast);
|
||||
}
|
||||
|
||||
std::shared_ptr<Socket> openudp(std::string rhost, int rport, std::string lhost, int lport) {
|
||||
return openudp(Address(rhost, rport), Address(lhost, lport));
|
||||
std::shared_ptr<Socket> openudp(std::string rhost, int rport, std::string lhost, int lport, bool allowBroadcast) {
|
||||
return openudp(Address(rhost, rport), Address(lhost, lport), allowBroadcast);
|
||||
}
|
||||
}
|
||||
|
@@ -67,13 +67,13 @@ namespace net {
|
||||
* Get the IP address.
|
||||
* @return IP address in standard string format.
|
||||
*/
|
||||
std::string getIPStr();
|
||||
std::string getIPStr() const;
|
||||
|
||||
/**
|
||||
* Get the IP address.
|
||||
* @return IP address in host byte order.
|
||||
*/
|
||||
IP_t getIP();
|
||||
IP_t getIP() const;
|
||||
|
||||
/**
|
||||
* Set the IP address.
|
||||
@@ -85,7 +85,7 @@ namespace net {
|
||||
* Get the TCP/UDP port.
|
||||
* @return TCP/UDP port number.
|
||||
*/
|
||||
int getPort();
|
||||
int getPort() const;
|
||||
|
||||
/**
|
||||
* Set the TCP/UDP port.
|
||||
@@ -246,37 +246,37 @@ namespace net {
|
||||
|
||||
/**
|
||||
* Create UDP socket.
|
||||
* @param raddr Remote address.
|
||||
* @param raddr Remote address. Set to a multicast address to allow multicast.
|
||||
* @param laddr Local address to bind the socket to.
|
||||
* @return Socket instance on success, Throws runtime_error otherwise.
|
||||
*/
|
||||
std::shared_ptr<Socket> openudp(const Address& raddr, const Address& laddr);
|
||||
std::shared_ptr<Socket> openudp(const Address& raddr, const Address& laddr, bool allowBroadcast = false);
|
||||
|
||||
/**
|
||||
* Create UDP socket.
|
||||
* @param rhost Remote hostname or IP address.
|
||||
* @param rhost Remote hostname or IP address. Set to a multicast address to allow multicast.
|
||||
* @param rport Remote port.
|
||||
* @param laddr Local address to bind the socket to.
|
||||
* @return Socket instance on success, Throws runtime_error otherwise.
|
||||
*/
|
||||
std::shared_ptr<Socket> openudp(std::string rhost, int rport, const Address& laddr);
|
||||
std::shared_ptr<Socket> openudp(std::string rhost, int rport, const Address& laddr, bool allowBroadcast = false);
|
||||
|
||||
/**
|
||||
* Create UDP socket.
|
||||
* @param raddr Remote address.
|
||||
* @param raddr Remote address. Set to a multicast or broadcast address to allow multicast.
|
||||
* @param lhost Local hostname or IP used to bind the socket (optional, "0.0.0.0" for Any).
|
||||
* @param lpost Local port used to bind the socket to (optional, 0 to allocate automatically).
|
||||
* @return Socket instance on success, Throws runtime_error otherwise.
|
||||
*/
|
||||
std::shared_ptr<Socket> openudp(const Address& raddr, std::string lhost = "0.0.0.0", int lport = 0);
|
||||
std::shared_ptr<Socket> openudp(const Address& raddr, std::string lhost = "0.0.0.0", int lport = 0, bool allowBroadcast = false);
|
||||
|
||||
/**
|
||||
* Create UDP socket.
|
||||
* @param rhost Remote hostname or IP address.
|
||||
* @param rhost Remote hostname or IP address. Set to a multicast or broadcast address to allow multicast.
|
||||
* @param rport Remote port.
|
||||
* @param lhost Local hostname or IP used to bind the socket (optional, "0.0.0.0" for Any).
|
||||
* @param lpost Local port used to bind the socket to (optional, 0 to allocate automatically).
|
||||
* @return Socket instance on success, Throws runtime_error otherwise.
|
||||
*/
|
||||
std::shared_ptr<Socket> openudp(std::string rhost, int rport, std::string lhost = "0.0.0.0", int lport = 0);
|
||||
std::shared_ptr<Socket> openudp(std::string rhost, int rport, std::string lhost = "0.0.0.0", int lport = 0, bool allowBroadcast = false);
|
||||
}
|
@@ -320,7 +320,7 @@ namespace net {
|
||||
}
|
||||
entry.handler(std::move(client), entry.ctx);
|
||||
}
|
||||
catch (std::exception e) {
|
||||
catch (const std::exception& e) {
|
||||
listening = false;
|
||||
return;
|
||||
}
|
||||
|
@@ -257,6 +257,7 @@ namespace net::http {
|
||||
|
||||
// Deserialize
|
||||
req.deserialize(respData);
|
||||
return 0; // Might wanna return size instead
|
||||
}
|
||||
|
||||
int Client::sendResponseHeader(ResponseHeader& resp) {
|
||||
@@ -274,6 +275,7 @@ namespace net::http {
|
||||
|
||||
// Deserialize
|
||||
resp.deserialize(respData);
|
||||
return 0; // Might wanna return size instead
|
||||
}
|
||||
|
||||
int Client::sendChunkHeader(ChunkHeader& chdr) {
|
||||
|
Reference in New Issue
Block a user