00001 00005 #ifndef RAZORBACK_SOCKET_H 00006 #define RAZORBACK_SOCKET_H 00007 00008 #include <razorback/visibility.h> 00009 #include <razorback/types.h> 00010 #include <sys/types.h> 00011 #ifdef _MSC_VER 00012 #include <WinSock2.h> 00013 #define ssize_t SSIZE_T 00014 #else //_MSC_VER 00015 #include <sys/socket.h> 00016 #endif //_MSC_VER 00017 #include <openssl/ssl.h> 00018 00019 00020 #ifdef __cplusplus 00021 extern "C" { 00022 #endif 00023 00026 struct Socket 00027 { 00028 #ifdef _MSC_VER 00029 SOCKET iSocket; 00030 #else 00031 int iSocket; 00032 #endif 00033 struct addrinfo *pAddressInfo; 00034 bool ssl; 00035 SSL *sslHandle; 00036 SSL_CTX *sslContext; 00037 }; 00038 00044 SO_PUBLIC extern struct Socket * Socket_Listen (const uint8_t * sourceAddress, 00045 uint16_t port); 00046 00051 SO_PUBLIC extern struct Socket * Socket_Listen_Unix (const char * path); 00052 00058 SO_PUBLIC extern struct Socket * SSL_Socket_Connect ( const uint8_t * destinationAddress, 00059 uint16_t port); 00060 00066 SO_PUBLIC extern int Socket_Accept (struct Socket **socket, 00067 const struct Socket *listeningSocket); 00068 00074 SO_PUBLIC extern struct Socket * Socket_Connect ( const uint8_t * destinationAddress, 00075 uint16_t port); 00076 00080 SO_PUBLIC extern void Socket_Close (struct Socket *socket); 00081 00088 SO_PUBLIC extern ssize_t Socket_Tx (const struct Socket *socket, size_t len, 00089 const uint8_t * buffer); 00090 00097 SO_PUBLIC PRINTF_FUNC(2,3) extern bool 00098 Socket_Printf (const struct Socket *socket, const char *fmt, ...); 00099 00106 SO_PUBLIC extern ssize_t Socket_Rx (const struct Socket *socket, size_t len, 00107 uint8_t * buffer); 00108 00115 SO_PUBLIC extern ssize_t Socket_Rx_Until (const struct Socket *socket, uint8_t ** r_buffer, 00116 uint8_t terminator); 00117 00118 #if 0 00119 00123 SO_PUBLIC extern bool Socket_ReadyForRead (const struct Socket *socket); 00124 #endif 00125 00126 #ifdef __cplusplus 00127 } 00128 #endif 00129 #endif // RAZORBACK_SOCKET_H