/**
 * Licensed to Apereo under one or more contributor license
 * agreements. See the NOTICE file distributed with this work
 * for additional information regarding copyright ownership.
 * Apereo licenses this file to you under the Apache License,
 * Version 2.0 (the "License"); you may not use this file
 * except in compliance with the License.  You may obtain a
 * copy of the License at the following location:
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apereo.inspektr.common.web;

import javax.servlet.http.HttpServletRequest;
import java.net.Inet4Address;

/**
 * Captures information from the HttpServletRequest to log later.
 *
 * @author Scott Battaglia
 * @version $Revision$ $Date$
 * @since 1.0
 *
 */
public class ClientInfo {

    public static ClientInfo EMPTY_CLIENT_INFO = new ClientInfo();

    /** IP Address of the server (local). */
    private final String serverIpAddress;

    /** IP Address of the client (Remote) */
    private final String clientIpAddress;
    
    private ClientInfo() {
        this(null, null);
    }

    public ClientInfo(final String serverIpAddress, final String clientIpAddress) {
        this.serverIpAddress = serverIpAddress;
        this.clientIpAddress = clientIpAddress;
    }

    public ClientInfo(final HttpServletRequest request,
                      final String alternateServerAddrHeaderName,
                      final String alternateLocalAddrHeaderName,
                      final boolean useServerHostAddress) {

        try {
            String serverIpAddress = request.getLocalAddr();
            String clientIpAddress = request.getRemoteAddr();

            if (useServerHostAddress) {
                serverIpAddress = Inet4Address.getLocalHost().getHostAddress();
            } else if (alternateServerAddrHeaderName != null && !alternateServerAddrHeaderName.isEmpty()) {
                serverIpAddress = request.getHeader(alternateServerAddrHeaderName) != null
                        ? request.getHeader(alternateServerAddrHeaderName) : request.getLocalAddr();
            }

            if (alternateLocalAddrHeaderName != null && !alternateLocalAddrHeaderName.isEmpty()) {
                clientIpAddress = request.getHeader(alternateLocalAddrHeaderName) != null ? request.getHeader
                        (alternateLocalAddrHeaderName) : request.getRemoteAddr();
            }


            this.serverIpAddress = serverIpAddress == null ? "unknown" : serverIpAddress;
            this.clientIpAddress = clientIpAddress == null ? "unknown" : clientIpAddress;

        } catch (final Exception e) {
            throw new RuntimeException(e);
        }
    }

    public String getServerIpAddress() {
        return this.serverIpAddress;
    }

    public String getClientIpAddress() {
        return this.clientIpAddress;
    }
}

@@ -1582,32 +1582,143 @@
 Address;%0A    %7D%0A%0A
+    public ClientInfo(final HttpServletRequest request) %7B%0A        this(request, null, null, false);%0A    %7D%0A    %0A
     public Clien

Add support for host address of server address