|
|
|
@ -34,7 +34,7 @@ |
|
|
|
//#include <arpa/inet.h> // for in_port_t |
|
|
|
|
|
|
|
#include "trbase.h" |
|
|
|
#include "tr/interface/socket.h" |
|
|
|
//#include "tr/interface/socket.h" |
|
|
|
#include "tr/logger.h" |
|
|
|
|
|
|
|
typedef enum TR_e_socket_fin { |
|
|
|
@ -44,18 +44,25 @@ typedef enum TR_e_socket_fin { |
|
|
|
TR_FIN_RDWR = 3 |
|
|
|
} TR_SocketFin; |
|
|
|
|
|
|
|
#define TR_MAX_HOST 256 |
|
|
|
#define TR_MAX_CNAME 512 |
|
|
|
|
|
|
|
TR_CLASS(TR_Socket) { |
|
|
|
TR_Logger log; |
|
|
|
int flags; |
|
|
|
int type; |
|
|
|
char * host; |
|
|
|
char * cname; |
|
|
|
int port; |
|
|
|
time_t ttl; |
|
|
|
struct sockaddr_in addr; // for now... should be more generic. |
|
|
|
socklen_t addrlen; |
|
|
|
int handle; |
|
|
|
TR_SocketFin fin_state; |
|
|
|
TR_Logger log; |
|
|
|
int flags; |
|
|
|
int type; |
|
|
|
char host[TR_MAX_HOST]; |
|
|
|
char cname[TR_MAX_CNAME]; |
|
|
|
int port; |
|
|
|
time_t ttl; |
|
|
|
union { |
|
|
|
struct sockaddr info; |
|
|
|
struct sockaddr_in in; |
|
|
|
struct sockaddr_in6 in6; |
|
|
|
} addr; |
|
|
|
socklen_t addrlen; |
|
|
|
int handle; |
|
|
|
TR_SocketFin fin_state; |
|
|
|
}; |
|
|
|
|
|
|
|
TR_INSTANCE_INIT(TR_Socket); |
|
|
|
@ -67,7 +74,14 @@ TR_INSTANCE_INIT(TR_Socket); |
|
|
|
#define TR_socketPort(socket) (((TR_Socket)(socket))->port) |
|
|
|
#define TR_socketCname(socket) (((TR_Socket)(socket))->cname) |
|
|
|
#define TR_socketTtl(socket) (((TR_Socket)(socket))->ttl) |
|
|
|
#define TR_socketAddr(socket) (((TR_Socket)(socket))->addr) |
|
|
|
|
|
|
|
#define TR_socketAddr(socket) \ |
|
|
|
(((TR_Socket)(socket))->addr.info.sa_family == AF_INET \ |
|
|
|
? ((TR_Socket)(socket))->addr.in \ |
|
|
|
: ((TR_Socket)(socket))->addr.info.sa_family == AF_INET6 \ |
|
|
|
? ((TR_Socket)(socket))->addr.in6 \ |
|
|
|
: NULL) |
|
|
|
|
|
|
|
#define TR_socketAddrlen(socket) (((TR_Socket)(socket))->addrlen) |
|
|
|
#define TR_socketHandle(socket) (((TR_Socket)(socket))->handle) |
|
|
|
#define TR_socketFinState(socket) (((TR_Socket)(socket))->fin_state) |
|
|
|
@ -75,8 +89,32 @@ TR_INSTANCE_INIT(TR_Socket); |
|
|
|
#define TR_socketFinWr(socket) ((TR_socketFinState((socket)) & 2) == 2) |
|
|
|
#define TR_socketFinRdWr(socket) ((TR_socketFinState((socket)) & 3) == 3) |
|
|
|
|
|
|
|
#define TR_socketGetIp(socket) (TR_socketAddr(socket).sin_addr.s_addr) |
|
|
|
#define TR_socketGetIpStr(socket) (inet_ntoa(TR_socketGetIp(socket))) |
|
|
|
#define TR_socketAddrPort(socket) \ |
|
|
|
(((TR_Socket)(socket))->addr.info.sa_family == AF_INET \ |
|
|
|
? ((TR_Socket)(socket))->addr.in.sin_port \ |
|
|
|
: ((TR_Socket)(socket))->addr.info.sa_family == AF_INET6 \ |
|
|
|
? ((TR_Socket)(socket))->addr.in6.sin6_port \ |
|
|
|
: -1) |
|
|
|
|
|
|
|
#define TR_socketAddrIp(socket) \ |
|
|
|
(((TR_Socket)(socket))->addr.info.sa_family == AF_INET \ |
|
|
|
? ((TR_Socket)(socket))->addr.in.sin_addr.s_addr \ |
|
|
|
: ((TR_Socket)(socket))->addr.info.sa_family == AF_INET6 \ |
|
|
|
? ((TR_Socket)(socket))->addr.in6.sin6_addr.s6_addr \ |
|
|
|
: NULL) |
|
|
|
|
|
|
|
#define TR_socketAddrIpStr(socket, buffer, nbuffer) \ |
|
|
|
(((TR_Socket)(socket))->addr.info.sa_family == AF_INET \ |
|
|
|
? inet_ntop( \ |
|
|
|
((TR_Socket)(socket))->addr.info.sa_family, \ |
|
|
|
&((TR_Socket)(socket))->addr.in.sin_addr.s_addr, \ |
|
|
|
buffer, nbuffer) \ |
|
|
|
: ((TR_Socket)(socket))->addr.info.sa_family == AF_INET6 \ |
|
|
|
? inet_ntop( \ |
|
|
|
((TR_Socket)(socket))->addr.info.sa_family, \ |
|
|
|
((TR_Socket)(socket))->addr.in6.sin6_addr.s6_addr, \ |
|
|
|
buffer, nbuffer) \ |
|
|
|
: NULL) |
|
|
|
|
|
|
|
TR_CLASS(TR_TcpSocket) { |
|
|
|
TR_EXTENDS(TR_Socket); |
|
|
|
|