/*
* Copyright (c) 2014 The APN-PROXY Project
*
* The APN-PROXY Project 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:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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 com.xx_dev.apn.proxy.utils;
import io.netty.handler.codec.http.HttpHeaders;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import java.net.URI;
import java.net.URISyntaxException;
/**
* @author xmx
* @version $Id: com.xx_dev.apn.proxy.utils.HostNamePortUtil 14-1-8 16:13 (xmx) Exp $
*/
public class HostNamePortUtil {
private static final Logger logger = Logger.getLogger(HostNamePortUtil.class);
public static String getHostName(HttpRequest httpRequest) {
String originalHostHeader = httpRequest.headers().get(HttpHeaders.Names.HOST);
if (StringUtils.isBlank(originalHostHeader) && httpRequest.getMethod().equals(HttpMethod.CONNECT)) {
originalHostHeader = httpRequest.getUri();
}
if (StringUtils.isNotBlank(originalHostHeader)) {
String originalHost = StringUtils.split(originalHostHeader, ": ")[0];
return originalHost;
} else {
String uriStr = httpRequest.getUri();
try {
URI uri = new URI(uriStr);
String schema = uri.getScheme();
String originalHost = uri.getHost();
return originalHost;
} catch (URISyntaxException e) {
logger.error(e.getMessage(), e);
return null;
}
}
}
public static int getPort(HttpRequest httpRequest) {
int originalPort = 80;
if (httpRequest.getMethod().equals(HttpMethod.CONNECT)) {
originalPort = 443;
}
String originalHostHeader = httpRequest.headers().get(HttpHeaders.Names.HOST);
if (StringUtils.isBlank(originalHostHeader) && httpRequest.getMethod().equals(HttpMethod.CONNECT)) {
originalHostHeader = httpRequest.getUri();
}
if (StringUtils.isNotBlank(originalHostHeader)) {
if (StringUtils.split(originalHostHeader, ": ").length == 2) {
originalPort = Integer.parseInt(StringUtils.split(originalHostHeader, ": ")[1]);
}
} else {
String uriStr = httpRequest.getUri();
try {
URI uri = URI.create(uriStr);
if (uri.getPort() > 0) {
originalPort = uri.getPort();
}
} catch (IllegalArgumentException e) {
logger.error(e.getMessage(), e);
originalPort = -1;
}
}
return originalPort;
}
}