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