diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2013-09-08 19:43:28 -0700 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2013-09-09 19:29:31 -0700 |
commit | a5861a4c81bb616b7fba2028cf9ee31f890357c5 (patch) | |
tree | 0a7aedad97d70b6194eb57a7de39857d015685a3 /src/common/socket.hpp | |
parent | 367e76ba89bde0e3fb6c4ae0e64cd3927e0db2f2 (diff) | |
download | tmwa-a5861a4c81bb616b7fba2028cf9ee31f890357c5.tar.gz tmwa-a5861a4c81bb616b7fba2028cf9ee31f890357c5.tar.bz2 tmwa-a5861a4c81bb616b7fba2028cf9ee31f890357c5.tar.xz tmwa-a5861a4c81bb616b7fba2028cf9ee31f890357c5.zip |
Use IP4 classes and rename conf variables
Diffstat (limited to 'src/common/socket.hpp')
-rw-r--r-- | src/common/socket.hpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/common/socket.hpp b/src/common/socket.hpp index dd1c872..91a8c49 100644 --- a/src/common/socket.hpp +++ b/src/common/socket.hpp @@ -10,6 +10,7 @@ # include <array> # include "dumb_ptr.hpp" +# include "ip.hpp" # include "utils.hpp" # include "timer.t.hpp" @@ -43,7 +44,7 @@ struct socket_data /// Note that there is no need for a wdata_pos size_t rdata_pos; - struct sockaddr_in client_addr; + IP4Address client_ip; /// Send or recieve /// Only called when select() indicates the socket is ready @@ -78,7 +79,7 @@ extern int fd_max; int make_listen_port(uint16_t port); /// Connect to an address, return a connected socket or -1 // FIXME - this is IPv4 only! -int make_connection(uint32_t ip, uint16_t port); +int make_connection(IP4Address ip, uint16_t port); /// free() the structure and close() the fd void delete_session(int); /// Make a the internal queues bigger @@ -143,6 +144,13 @@ void RFIFO_STRUCT(int fd, size_t pos, T& structure) { really_memcpy(pod_addressof_m(structure), static_cast<const uint8_t *>(RFIFOP(fd, pos)), sizeof(T)); } +inline +IP4Address RFIFOIP(int fd, size_t pos) +{ + IP4Address o; + RFIFO_STRUCT(fd, pos, o); + return o; +} template<uint8_t len> inline VString<len-1> RFIFO_STRING(int fd, size_t pos) @@ -195,6 +203,13 @@ void RBUF_STRUCT(const uint8_t *p, size_t pos, T& structure) { really_memcpy(pod_addressof_m(structure), p + pos, sizeof(T)); } +inline +IP4Address RBUFIP(const uint8_t *p, size_t pos) +{ + IP4Address o; + RBUF_STRUCT(p, pos, o); + return o; +} template<uint8_t len> inline VString<len-1> RBUF_STRING(const uint8_t *p, size_t pos) @@ -248,6 +263,12 @@ void WFIFO_STRUCT(int fd, size_t pos, T& structure) really_memcpy(static_cast<uint8_t *>(WFIFOP(fd, pos)), pod_addressof_c(structure), sizeof(T)); } inline +IP4Address& WFIFOIP(int fd, size_t pos) +{ + static_assert(is_trivially_copyable<IP4Address>::value, "That was the whole point"); + return *static_cast<IP4Address *>(WFIFOP(fd, pos)); +} +inline void WFIFO_STRING(int fd, size_t pos, XString s, size_t len) { char *const begin = static_cast<char *>(WFIFOP(fd, pos)); @@ -298,6 +319,11 @@ void WBUF_STRUCT(uint8_t *p, size_t pos, T& structure) really_memcpy(p + pos, pod_addressof_c(structure), sizeof(T)); } inline +IP4Address& WBUFIP(uint8_t *p, size_t pos) +{ + return *static_cast<IP4Address *>(WBUFP(p, pos)); +} +inline void WBUF_STRING(uint8_t *p, size_t pos, XString s, size_t len) { char *const begin = static_cast<char *>(WBUFP(p, pos)); |