mirror of
https://github.com/CHN-beta/xmurp-ua.git
synced 2026-01-11 01:09:25 +08:00
不再使用tcp flag判断流状态
This commit is contained in:
103
src/rkpManager.h
103
src/rkpManager.h
@@ -71,99 +71,44 @@ int __rkpManager_execute(struct rkpManager* rkpm, struct sk_buff* skb)
|
||||
printk("\tsport %d dport %d\n", ntohs(tcp_hdr(skb) -> source), ntohs(tcp_hdr(skb) -> dest));
|
||||
printk("\tid %d\n", (ntohs(tcp_hdr(skb) -> source) + ntohs(tcp_hdr(skb) -> dest)) & 0xFF);
|
||||
#endif
|
||||
if(rkpSettings_first(skb))
|
||||
// 新增加一个流或覆盖已经有的流
|
||||
{
|
||||
u_int8_t id = (ntohs(tcp_hdr(skb) -> source) + ntohs(tcp_hdr(skb) -> dest)) & 0xFF;
|
||||
struct rkpStream* rkps_new = rkpStream_new(skb);
|
||||
struct rkpStream* rkps = rkpm -> data[id];
|
||||
#ifdef RKP_DEBUG
|
||||
printk("\nAdd a stream id=%u.\n", id);
|
||||
#endif
|
||||
if(rkps_new == 0)
|
||||
return NF_ACCEPT;
|
||||
|
||||
// 查找可能的重复的流并删除
|
||||
while(rkps != 0)
|
||||
if(rkpStream_belongTo(rkps, skb))
|
||||
{
|
||||
printk("Found same stream %u.\n", id);
|
||||
if(rkps -> prev != 0)
|
||||
rkps -> prev -> next = rkps -> next;
|
||||
if(rkps -> next != 0)
|
||||
rkps -> next -> prev = rkps -> prev;
|
||||
if(rkps == rkpm -> data[id])
|
||||
rkpm -> data[id] = rkps -> next;
|
||||
rkpStream_delete(rkps);
|
||||
rkps = rkpm -> data[id];
|
||||
break;
|
||||
}
|
||||
else
|
||||
rkps = rkps -> next;
|
||||
// 不使用标志位(三次握手)来判断是否该新建一个流,而直接搜索是否有符合条件的流,有就使用,没有就新建
|
||||
u_int8_t id = (ntohs(tcp_hdr(skb) -> source) + ntohs(tcp_hdr(skb) -> dest)) & 0xFF;
|
||||
struct rkpStream *rkps, *rkps_new;
|
||||
|
||||
// 插入新的流
|
||||
if(rkpm -> data[id] == 0)
|
||||
for(rkps = rkpm -> data[id]; rkps != 0; rkps = rkps -> next)
|
||||
if(rkpStream_belongTo(rkps, skb))
|
||||
{
|
||||
rkpm -> data[id] = rkps_new;
|
||||
#ifdef RKP_DEBUG
|
||||
printk("rkpManager_execute: add a new stream %d to an empty list.\n", id);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
rkpm -> data[id] -> prev = rkps_new;
|
||||
rkps_new -> next = rkpm -> data[id];
|
||||
rkpm -> data[id] = rkps_new;
|
||||
#ifdef RKP_DEBUG
|
||||
printk("rkpManager_execute: add a new stream %d to an unempty list.\n", id);
|
||||
printk("__rkpManager_execute: found target stream.\n");
|
||||
#endif
|
||||
return rkpStream_execute(rkps, skb);
|
||||
}
|
||||
|
||||
// 如果运行到这里的话,那就是没有找到了
|
||||
#ifdef RKP_DEBUG
|
||||
printk("__rkpManager_execute: target stream not found, create a new one. \n");
|
||||
#endif
|
||||
rkps_new = rkpStream_new(skb);
|
||||
if(rkps_new == 0)
|
||||
return NF_ACCEPT;
|
||||
if(rkpm -> data[id] == 0)
|
||||
{
|
||||
rkpm -> data[id] = rkps_new;
|
||||
#ifdef RKP_DEBUG
|
||||
printk("rkpManager_execute: add a new stream %d to an empty list.\n", id);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
// 使用已经有的流
|
||||
{
|
||||
u_int8_t id = (ntohs(tcp_hdr(skb) -> source) + ntohs(tcp_hdr(skb) -> dest)) & 0xFF;
|
||||
struct rkpStream* rkps = rkpm -> data[id];
|
||||
struct rkpStream* rkps_new;
|
||||
rkpm -> data[id] -> prev = rkps_new;
|
||||
rkps_new -> next = rkpm -> data[id];
|
||||
rkpm -> data[id] = rkps_new;
|
||||
#ifdef RKP_DEBUG
|
||||
printk("rkpStream_execute id %d\n", id);
|
||||
printk("rkpManager_execute: add a new stream %d to an unempty list.\n", id);
|
||||
#endif
|
||||
// 寻找流并插入
|
||||
while(rkps != 0)
|
||||
if(rkpStream_belongTo(rkps, skb))
|
||||
{
|
||||
#ifdef RKP_DEBUG
|
||||
printk("rkp-ua::rkpStream::rkpStream_execute: Target stream %u found.\n", id);
|
||||
#endif
|
||||
return rkpStream_execute(rkps, skb);
|
||||
}
|
||||
else
|
||||
rkps = rkps -> next;
|
||||
// 如果没找到的话
|
||||
printk("rkp-ua::rkpStream::rkpStream_execute: Target stream %u not found. Creat a new one.\n", id);
|
||||
rkps_new = rkpStream_new(skb);
|
||||
if(rkps_new == 0)
|
||||
return NF_ACCEPT;
|
||||
if(rkpm -> data[id] == 0)
|
||||
{
|
||||
rkpm -> data[id] = rkps_new;
|
||||
#ifdef RKP_DEBUG
|
||||
printk("rkpManager_execute: add a new stream %d to an empty list.\n", id);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
rkpm -> data[id] -> prev = rkps_new;
|
||||
rkps_new -> next = rkpm -> data[id];
|
||||
rkpm -> data[id] = rkps_new;
|
||||
#ifdef RKP_DEBUG
|
||||
printk("rkpManager_execute: add a new stream %d to an unempty list.\n", id);
|
||||
#endif
|
||||
}
|
||||
return rkpStream_execute(rkps_new, skb);
|
||||
}
|
||||
return rkpStream_execute(rkps_new, skb);
|
||||
}
|
||||
|
||||
void __rkpManager_refresh(unsigned long param)
|
||||
|
||||
Reference in New Issue
Block a user