mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2025-05-10 09:43:51 +00:00
Fixed build problem with OPENSSL_SUPPORT
This commit is contained in:
parent
73fa115803
commit
b6790b39c1
58
httplib.h
58
httplib.h
@ -171,26 +171,7 @@ public:
|
|||||||
virtual int read(char* ptr, size_t size);
|
virtual int read(char* ptr, size_t size);
|
||||||
virtual int write(const char* ptr, size_t size);
|
virtual int write(const char* ptr, size_t size);
|
||||||
virtual int write(const char* ptr);
|
virtual int write(const char* ptr);
|
||||||
|
virtual std::string get_remote_addr();
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
socket_t sock_;
|
socket_t sock_;
|
||||||
@ -293,14 +274,16 @@ private:
|
|||||||
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
|
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
|
||||||
class SSLSocketStream : public Stream {
|
class SSLSocketStream : public Stream {
|
||||||
public:
|
public:
|
||||||
SSLSocketStream(SSL* ssl);
|
SSLSocketStream(socket_t sock, SSL* ssl);
|
||||||
virtual ~SSLSocketStream();
|
virtual ~SSLSocketStream();
|
||||||
|
|
||||||
virtual int read(char* ptr, size_t size);
|
virtual int read(char* ptr, size_t size);
|
||||||
virtual int write(const char* ptr, size_t size);
|
virtual int write(const char* ptr, size_t size);
|
||||||
virtual int write(const char* ptr);
|
virtual int write(const char* ptr);
|
||||||
|
virtual std::string get_remote_addr();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
socket_t sock_;
|
||||||
SSL* ssl_;
|
SSL* ssl_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -583,6 +566,24 @@ inline bool is_connection_error()
|
|||||||
#endif
|
#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)
|
inline bool is_file(const std::string& path)
|
||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
@ -1341,6 +1342,10 @@ inline int SocketStream::write(const char* ptr)
|
|||||||
return write(ptr, strlen(ptr));
|
return write(ptr, strlen(ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline std::string SocketStream::get_remote_addr() {
|
||||||
|
return detail::get_remote_addr(sock_);
|
||||||
|
}
|
||||||
|
|
||||||
// HTTP server implementation
|
// HTTP server implementation
|
||||||
inline Server::Server(HttpVersion http_version)
|
inline Server::Server(HttpVersion http_version)
|
||||||
: http_version_(http_version)
|
: http_version_(http_version)
|
||||||
@ -1918,7 +1923,7 @@ inline bool read_and_close_socket_ssl(
|
|||||||
CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND,
|
CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND,
|
||||||
CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND) > 0) {
|
CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND) > 0) {
|
||||||
auto last_connection = count == 1;
|
auto last_connection = count == 1;
|
||||||
SSLSocketStream strm(ssl);
|
SSLSocketStream strm(sock, ssl);
|
||||||
ret = callback(strm, last_connection);
|
ret = callback(strm, last_connection);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
break;
|
break;
|
||||||
@ -1926,7 +1931,7 @@ inline bool read_and_close_socket_ssl(
|
|||||||
count--;
|
count--;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SSLSocketStream strm(ssl);
|
SSLSocketStream strm(sock, ssl);
|
||||||
ret = callback(strm, true);
|
ret = callback(strm, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1949,7 +1954,8 @@ static SSLInit sslinit_;
|
|||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
// SSL socket stream implementation
|
// 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));
|
return write(ptr, strlen(ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline std::string SSLSocketStream::get_remote_addr() {
|
||||||
|
return detail::get_remote_addr(sock_);
|
||||||
|
}
|
||||||
|
|
||||||
// SSL HTTP server implementation
|
// SSL HTTP server implementation
|
||||||
inline SSLServer::SSLServer(const char* cert_path, const char* private_key_path, HttpVersion http_version)
|
inline SSLServer::SSLServer(const char* cert_path, const char* private_key_path, HttpVersion http_version)
|
||||||
: Server(http_version)
|
: Server(http_version)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user