mirror of
https://github.com/yhirose/cpp-httplib
synced 2024-11-21 06:26:02 -07:00
Fixed build problem with OPENSSL_SUPPORT
This commit is contained in:
parent
73fa115803
commit
b6790b39c1
1 changed files with 34 additions and 24 deletions
58
httplib.h
58
httplib.h
|
@ -171,26 +171,7 @@ public:
|
|||
virtual int read(char* ptr, size_t size);
|
||||
virtual int write(const char* ptr, size_t size);
|
||||
virtual int write(const char* ptr);
|
||||
|
||||
std::string get_remote_addr() {
|
||||
socklen_t len;
|
||||
struct sockaddr_storage addr;
|
||||
char ipstr[INET6_ADDRSTRLEN];
|
||||
|
||||
len = sizeof addr;
|
||||
getpeername(sock_, (struct sockaddr*)&addr, &len);
|
||||
|
||||
// deal with both IPv4 and IPv6:
|
||||
if (addr.ss_family == AF_INET) {
|
||||
struct sockaddr_in *s = (struct sockaddr_in *)&addr;
|
||||
inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof ipstr);
|
||||
} else { // AF_INET6
|
||||
struct sockaddr_in6 *s = (struct sockaddr_in6 *)&addr;
|
||||
inet_ntop(AF_INET6, &s->sin6_addr, ipstr, sizeof ipstr);
|
||||
}
|
||||
|
||||
return ipstr;
|
||||
}
|
||||
virtual std::string get_remote_addr();
|
||||
|
||||
private:
|
||||
socket_t sock_;
|
||||
|
@ -293,14 +274,16 @@ private:
|
|||
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
|
||||
class SSLSocketStream : public Stream {
|
||||
public:
|
||||
SSLSocketStream(SSL* ssl);
|
||||
SSLSocketStream(socket_t sock, SSL* ssl);
|
||||
virtual ~SSLSocketStream();
|
||||
|
||||
virtual int read(char* ptr, size_t size);
|
||||
virtual int write(const char* ptr, size_t size);
|
||||
virtual int write(const char* ptr);
|
||||
virtual std::string get_remote_addr();
|
||||
|
||||
private:
|
||||
socket_t sock_;
|
||||
SSL* ssl_;
|
||||
};
|
||||
|
||||
|
@ -583,6 +566,24 @@ inline bool is_connection_error()
|
|||
#endif
|
||||
}
|
||||
|
||||
inline std::string get_remote_addr(socket_t sock) {
|
||||
struct sockaddr_storage addr;
|
||||
char ipstr[INET6_ADDRSTRLEN];
|
||||
socklen_t len = sizeof(addr);
|
||||
getpeername(sock, (struct sockaddr*)&addr, &len);
|
||||
|
||||
// deal with both IPv4 and IPv6:
|
||||
if (addr.ss_family == AF_INET) {
|
||||
auto s = (struct sockaddr_in *)&addr;
|
||||
inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof(ipstr));
|
||||
} else { // AF_INET6
|
||||
auto s = (struct sockaddr_in6 *)&addr;
|
||||
inet_ntop(AF_INET6, &s->sin6_addr, ipstr, sizeof(ipstr));
|
||||
}
|
||||
|
||||
return ipstr;
|
||||
}
|
||||
|
||||
inline bool is_file(const std::string& path)
|
||||
{
|
||||
struct stat st;
|
||||
|
@ -1341,6 +1342,10 @@ inline int SocketStream::write(const char* ptr)
|
|||
return write(ptr, strlen(ptr));
|
||||
}
|
||||
|
||||
inline std::string SocketStream::get_remote_addr() {
|
||||
return detail::get_remote_addr(sock_);
|
||||
}
|
||||
|
||||
// HTTP server implementation
|
||||
inline Server::Server(HttpVersion http_version)
|
||||
: http_version_(http_version)
|
||||
|
@ -1918,7 +1923,7 @@ inline bool read_and_close_socket_ssl(
|
|||
CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND,
|
||||
CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND) > 0) {
|
||||
auto last_connection = count == 1;
|
||||
SSLSocketStream strm(ssl);
|
||||
SSLSocketStream strm(sock, ssl);
|
||||
ret = callback(strm, last_connection);
|
||||
if (!ret) {
|
||||
break;
|
||||
|
@ -1926,7 +1931,7 @@ inline bool read_and_close_socket_ssl(
|
|||
count--;
|
||||
}
|
||||
} else {
|
||||
SSLSocketStream strm(ssl);
|
||||
SSLSocketStream strm(sock, ssl);
|
||||
ret = callback(strm, true);
|
||||
}
|
||||
|
||||
|
@ -1949,7 +1954,8 @@ static SSLInit sslinit_;
|
|||
} // namespace detail
|
||||
|
||||
// SSL socket stream implementation
|
||||
inline SSLSocketStream::SSLSocketStream(SSL* ssl): ssl_(ssl)
|
||||
inline SSLSocketStream::SSLSocketStream(socket_t sock, SSL* ssl)
|
||||
: sock_(sock), ssl_(ssl)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1972,6 +1978,10 @@ inline int SSLSocketStream::write(const char* ptr)
|
|||
return write(ptr, strlen(ptr));
|
||||
}
|
||||
|
||||
inline std::string SSLSocketStream::get_remote_addr() {
|
||||
return detail::get_remote_addr(sock_);
|
||||
}
|
||||
|
||||
// SSL HTTP server implementation
|
||||
inline SSLServer::SSLServer(const char* cert_path, const char* private_key_path, HttpVersion http_version)
|
||||
: Server(http_version)
|
||||
|
|
Loading…
Reference in a new issue