@@ -33,6 +33,7 @@ HTTPConnection::~HTTPConnection() {
3333int HTTPConnection::initialize (int serverSocketID, HTTPHeaders *defaultHeaders) {
3434 if (_connectionState == STATE_UNDEFINED) {
3535 _defaultHeaders = defaultHeaders;
36+ _addrLen = sizeof (_sockAddr);
3637 _socket = accept (serverSocketID, (struct sockaddr * )&_sockAddr, &_addrLen);
3738
3839 // Build up SSL Connection context if the socket has been created successfully
@@ -42,11 +43,11 @@ int HTTPConnection::initialize(int serverSocketID, HTTPHeaders *defaultHeaders)
4243 _httpHeaders = new HTTPHeaders ();
4344 refreshTimeout ();
4445 return _socket;
45-
4646 }
4747
4848 HTTPS_LOGE (" Could not accept() new connection" );
4949
50+ _addrLen = 0 ;
5051 _connectionState = STATE_ERROR;
5152 _clientState = CSTATE_ACTIVE;
5253
@@ -58,6 +59,16 @@ int HTTPConnection::initialize(int serverSocketID, HTTPHeaders *defaultHeaders)
5859 return -1 ;
5960}
6061
62+ /* *
63+ * Returns the client's IPv4
64+ */
65+ IPAddress HTTPConnection::getClientIP () {
66+ if (_addrLen > 0 && _sockAddr.sa_family == AF_INET) {
67+ struct sockaddr_in *sockAddrIn = (struct sockaddr_in *)(&_sockAddr);
68+ return IPAddress (sockAddrIn->sin_addr .s_addr );
69+ }
70+ return IPAddress (0 , 0 , 0 , 0 );
71+ }
6172
6273/* *
6374 * True if the connection is timed out.
0 commit comments