[fix] socks、http代理 添加流量计费

This commit is contained in:
wujiawei
2025-06-06 23:01:52 +08:00
parent 664bafdc86
commit 9cd85abe1d
23 changed files with 288 additions and 39 deletions

View File

@ -1,6 +1,8 @@
package org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyFlowTypeEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyTypeEnum;
public interface ChannelProxyFlow {
@ -32,6 +34,18 @@ public interface ChannelProxyFlow {
*/
ChannelFlowEnum channelFlowEnum();
/**
* 代理流量类型
* @see ChannelProxyFlowTypeEnum
*/
ChannelProxyFlowTypeEnum channelProxyFlowTypeEnum();
/**
* 代理类型
* @see ChannelProxyTypeEnum
*/
ChannelProxyTypeEnum channelProxyTypeEnum();
/**
* 流量
*

View File

@ -0,0 +1,21 @@
package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums;
public abstract class AbstractHandleHttpReportClientProxyClientTransferRequestTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
/**
* 是否支持当前类型
*
* @param nettyProxyMsg 通道数据
* @return 布尔类型 是、否
*/
@Override
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
return ProxyMessageTypeEnums.HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_.getTypeByte() == nettyProxyMsg.getType();
}
}

View File

@ -84,6 +84,14 @@ public class ProxyMessageType {
*/
public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CHANNEL_INIT_SUCCESSFUL_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_ + 1;
/**
* http 另一个客户端将返回数据通过传输通道返回
*
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_
* @see AbstractHandleHttpReportClientProxyClientTransferRequestTypeAdvanced
*/
public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CHANNEL_INIT_SUCCESSFUL_ + 1;
/**
* http 另一个客户端将返回数据通过传输通道返回
@ -91,7 +99,7 @@ public class ProxyMessageType {
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_
* @see AbstractHandleHttpReportClientProxyClientTransferResponseTypeAdvanced
*/
public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CHANNEL_INIT_SUCCESSFUL_ + 1;
public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_ + 1;
/**
* 上报传输通道关闭

View File

@ -0,0 +1,17 @@
package org.framework.lazy.cloud.network.heartbeat.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 代理流量类型
*/
@Getter
@AllArgsConstructor
public enum ChannelProxyFlowTypeEnum {
// HTTP
HTTP,
// Socks
SOCKS
}

View File

@ -0,0 +1,19 @@
package org.framework.lazy.cloud.network.heartbeat.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 代理类型
*/
@Getter
@AllArgsConstructor
public enum ChannelProxyTypeEnum {
SERVER_PROXY_SERVER("服务端代理服务端"),
SERVER_PROXY_CLIENT("服务端远程客户端"),
CLIENT_PROXY_CLIENT("客户端远程客户端"),
CLIENT_PROXY_SEVER("客户端远程服务端");
private final String desc;
}

View File

@ -110,6 +110,14 @@ public enum ProxyMessageTypeEnums {
* @see AbstractHandleHttpDistributeClientProxyClientTransferRequestTypeAdvanced
*/
HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_, "http 下发数据到另一个客户端"),
/**
* http 另一个客户端将返回数据通过传输通道 请求
*
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_
* @see AbstractHandleHttpReportClientProxyClientTransferRequestTypeAdvanced
*/
HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_, "http 另一个客户端将返回数据通过传输通道请求"),
/**
* http 另一个客户端将返回数据通过传输通道返回
*

View File

@ -18,6 +18,7 @@ public class ChannelAttributeKeyUtils {
private static final AttributeKey<String> ORIGINAL_IP = AttributeKey.newInstance("originalIp");
private static final AttributeKey<String> TARGET_IP = AttributeKey.newInstance("targetIp");
private static final AttributeKey<Integer> TARGET_PORT = AttributeKey.newInstance("targetPort");
private static final AttributeKey<String> TARGET_CLIENT_ID = AttributeKey.newInstance("targetClientId");
private static final AttributeKey<Integer> OUT_FLOW = AttributeKey.newInstance("outFlow");
private static final AttributeKey<Integer> IN_FLOW = AttributeKey.newInstance("inFlow");
@ -87,6 +88,36 @@ public class ChannelAttributeKeyUtils {
}
/**
* 为通道绑定 访客属性
*
* @param channel 通道
* @param targetClientId 客户端ID
*/
public static void buildTargetClientId(Channel channel, byte[] targetClientId) {
channel.attr(TARGET_CLIENT_ID).set(new String(targetClientId));
}
/**
* 为通道绑定 访客属性
*
* @param channel 通道
* @param targetClientId 客户端ID
*/
public static void buildTargetClientId(Channel channel, String targetClientId) {
channel.attr(TARGET_CLIENT_ID).set(targetClientId);
}
/**
* 获取 通道中访客ID
*
* @param channel 通道
*/
public static String getTargetClientId(Channel channel) {
return channel.attr(TARGET_CLIENT_ID).get();
}
/**
* 为通道绑定 出口流量
*