mirror of
https://github.com/CHN-beta/xmurp-ua.git
synced 2026-01-11 01:09:25 +08:00
我也忘了我写了啥,暂存
This commit is contained in:
55
src/rkpMap.h
55
src/rkpMap.h
@@ -24,16 +24,17 @@ void rkpMap_insert_begin(struct rkpMap**, struct rkpMap*);
|
|||||||
void rkpMap_insert_end(struct rkpMap**, struct rkpMap*);
|
void rkpMap_insert_end(struct rkpMap**, struct rkpMap*);
|
||||||
// 在指定位置插入映射,假定要插入的映射的前后指针已经置零
|
// 在指定位置插入映射,假定要插入的映射的前后指针已经置零
|
||||||
|
|
||||||
void rkpMap_refresh(struct rkpMap**, int32_t); // 对于一列序列号递增的映射,删除已经回应的映射
|
void rkpMap_refresh(struct rkpMap**, uint32_t);
|
||||||
|
// 对于一列序列号递增的映射,删除已经回应的映射。
|
||||||
|
|
||||||
struct rkpMap* rkpMap_new(int32_t seql, int32_t seqr)
|
struct rkpMap* rkpMap_new(uint32_t begin, uint32_t length)
|
||||||
{
|
{
|
||||||
struct rkpMap* rkpm = (struct rkpMap*)rkpMalloc(sizeof(struct rkpMap));
|
struct rkpMap* rkpm = (struct rkpMap*)rkpMalloc(sizeof(struct rkpMap));
|
||||||
if(rkpm == 0)
|
if(rkpm == 0)
|
||||||
return 0;
|
return 0;
|
||||||
rkpm -> begin = seql;
|
rkpm->begin = begin;
|
||||||
rkpm -> length = seqr - seql;
|
rkpm->length = length;
|
||||||
rkpm -> prev = rkpm -> next = 0;
|
rkpm->prev = rkpm->next = 0;
|
||||||
return rkpm;
|
return rkpm;
|
||||||
}
|
}
|
||||||
void rkpMap_delete(struct rkpMap* rkpm)
|
void rkpMap_delete(struct rkpMap* rkpm)
|
||||||
@@ -41,7 +42,7 @@ void rkpMap_delete(struct rkpMap* rkpm)
|
|||||||
rkpFree(rkpm);
|
rkpFree(rkpm);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char __rkpMap_map(const struct rkpMap* rkpm, int32_t seq)
|
unsigned char __rkpMap_ua(uint32_t seq)
|
||||||
{
|
{
|
||||||
if(seq < strlen(str_uaRkp))
|
if(seq < strlen(str_uaRkp))
|
||||||
return str_uaRkp[seq];
|
return str_uaRkp[seq];
|
||||||
@@ -51,35 +52,35 @@ unsigned char __rkpMap_map(const struct rkpMap* rkpm, int32_t seq)
|
|||||||
void rkpMap_modify(struct rkpMap** rkpml, struct rkpPacket** rkppl)
|
void rkpMap_modify(struct rkpMap** rkpml, struct rkpPacket** rkppl)
|
||||||
{
|
{
|
||||||
const struct rkpMap* rkpm;
|
const struct rkpMap* rkpm;
|
||||||
for(rkpm = *rkpml; rkpm != 0; rkpm = rkpm -> next)
|
for(rkpm = *rkpml; rkpm != 0; rkpm = rkpm->next)
|
||||||
{
|
{
|
||||||
struct rkpPacket* rkpp;
|
struct rkpPacket* rkpp;
|
||||||
unsigned char* p = 0;
|
unsigned char* p = 0;
|
||||||
int32_t seq;
|
uint32_t seq;
|
||||||
|
|
||||||
// 尝试确定第一个需要修改的包以及需要修改的开始处
|
// 尝试确定第一个需要修改的包以及需要修改的开始处
|
||||||
for(rkpp = *rkppl; rkpp != 0; rkpp = rkpp -> next)
|
for(rkpp = *rkppl; rkpp != 0; rkpp = rkpp->next)
|
||||||
if(rkpPacket_seq(rkpp, rkpm -> begin) + rkpPacket_appLen(rkpp) > 0)
|
if(rkpPacket_seq(rkpp, rkpm->begin) + rkpPacket_appLen(rkpp) > 0)
|
||||||
break;
|
break;
|
||||||
if(rkpp == 0)
|
if(rkpp == 0)
|
||||||
break;
|
break;
|
||||||
if(rkpPacket_seq(rkpp, rkpm -> begin) <= 0)
|
if(rkpPacket_seq(rkpp, rkpm->begin) <= 0)
|
||||||
{
|
{
|
||||||
p = rkpPacket_appBegin(rkpp) - rkpPacket_seq(rkpp, rkpm -> begin);
|
p = rkpPacket_appBegin(rkpp) - rkpPacket_seq(rkpp, rkpm->begin);
|
||||||
seq = 0;
|
seq = 0;
|
||||||
}
|
}
|
||||||
else // p 会在稍后被设置到包的开头
|
else // p 会在稍后被设置到包的开头
|
||||||
seq = rkpPacket_seq(rkpp, rkpm -> begin);
|
seq = rkpPacket_seq(rkpp, rkpm->begin);
|
||||||
|
|
||||||
// 开始修改
|
// 开始修改
|
||||||
for(; rkpp != 0; rkpp = rkpp -> next)
|
for(; rkpp != 0; rkpp = rkpp->next)
|
||||||
{
|
{
|
||||||
if(seq != 0)
|
if(seq != 0)
|
||||||
p = rkpPacket_appBegin(rkpp);
|
p = rkpPacket_appBegin(rkpp);
|
||||||
for(; p != rkpPacket_appEnd(rkpp) && seq < rkpm -> length; p++, seq++)
|
for(; p != rkpPacket_appEnd(rkpp) && seq < rkpm->length; p++, seq++)
|
||||||
*p = __rkpMap_map(rkpm, seq);
|
*p = __rkpMap_map(rkpm, seq);
|
||||||
rkpPacket_csum(rkpp);
|
rkpPacket_csum(rkpp);
|
||||||
if(seq == rkpm -> length)
|
if(seq == rkpm->length)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -87,10 +88,10 @@ void rkpMap_modify(struct rkpMap** rkpml, struct rkpPacket** rkppl)
|
|||||||
|
|
||||||
void rkpMap_insert_begin(struct rkpMap** rkpml, struct rkpMap* rkpm)
|
void rkpMap_insert_begin(struct rkpMap** rkpml, struct rkpMap* rkpm)
|
||||||
{
|
{
|
||||||
rkpm -> next = *rkpml;
|
rkpm->next = *rkpml;
|
||||||
*rkpml = rkpm;
|
*rkpml = rkpm;
|
||||||
if(rkpm -> next != 0)
|
if(rkpm->next != 0)
|
||||||
rkpm -> next -> prev = rkpm;
|
rkpm->next->prev = rkpm;
|
||||||
}
|
}
|
||||||
void rkpMap_insert_end(struct rkpMap** rkpml, struct rkpMap* rkpm)
|
void rkpMap_insert_end(struct rkpMap** rkpml, struct rkpMap* rkpm)
|
||||||
{
|
{
|
||||||
@@ -99,27 +100,27 @@ void rkpMap_insert_end(struct rkpMap** rkpml, struct rkpMap* rkpm)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct rkpMap* rkpm2;
|
struct rkpMap* rkpm2;
|
||||||
for(rkpm2 = *rkpml; rkpm2 -> next != 0; rkpm2 = rkpm2 -> next);
|
for(rkpm2 = *rkpml; rkpm2->next != 0; rkpm2 = rkpm2->next);
|
||||||
rkpm2 -> next = rkpm;
|
rkpm2->next = rkpm;
|
||||||
rkpm -> prev = rkpm2;
|
rkpm->prev = rkpm2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void rkpMap_refresh(struct rkpMap** rkpml, int32_t seq)
|
void rkpMap_refresh(struct rkpMap** rkpml, int32_t seq)
|
||||||
{
|
{
|
||||||
struct rkpMap *rkpm1, *rkpm2, *rkpm3;
|
struct rkpMap *rkpm1, *rkpm2, *rkpm3;
|
||||||
// 找到第一个不用删除的映射
|
// 找到第一个不用删除的映射
|
||||||
for(rkpm1 = *rkpml; rkpm1 != 0; rkpm1 = rkpm1 -> next)
|
for(rkpm1 = *rkpml; rkpm1 != 0; rkpm1 = rkpm1->next)
|
||||||
// if(rkpm -> begin + rkpm -> length > seq) 需要避免绝对值很大的负数小于绝对值很大的正数的情况
|
// if(rkpm->begin + rkpm->length > seq) 需要避免绝对值很大的负数小于绝对值很大的正数的情况
|
||||||
if((int32_t)(seq - rkpm1 -> begin) - rkpm1 -> length < 0)
|
if((int32_t)(seq - rkpm1->begin) - rkpm1->length < 0)
|
||||||
break;
|
break;
|
||||||
// 将这个映射之前的所有映射都删除
|
// 将这个映射之前的所有映射都删除
|
||||||
for(rkpm2 = *rkpml; rkpm2 != rkpm1; rkpm2 = rkpm3)
|
for(rkpm2 = *rkpml; rkpm2 != rkpm1; rkpm2 = rkpm3)
|
||||||
{
|
{
|
||||||
rkpm3 = rkpm2 -> next;
|
rkpm3 = rkpm2->next;
|
||||||
rkpMap_delete(rkpm2);
|
rkpMap_delete(rkpm2);
|
||||||
}
|
}
|
||||||
// 修改一些指针
|
// 修改一些指针
|
||||||
if(rkpm1 != 0)
|
if(rkpm1 != 0)
|
||||||
rkpm1 -> prev = 0;
|
rkpm1->prev = 0;
|
||||||
*rkpml = rkpm1;
|
*rkpml = rkpm1;
|
||||||
}
|
}
|
||||||
@@ -135,11 +135,11 @@ unsigned rkpPacket_appLen(const struct rkpPacket* rkpp)
|
|||||||
{
|
{
|
||||||
return ntohs(ip_hdr(rkpp->skb)->tot_len) - ip_hdr(rkpp->skb)->ihl * 4 - tcp_hdr(rkpp->skb)->doff * 4;
|
return ntohs(ip_hdr(rkpp->skb)->tot_len) - ip_hdr(rkpp->skb)->ihl * 4 - tcp_hdr(rkpp->skb)->doff * 4;
|
||||||
}
|
}
|
||||||
int32_t rkpPacket_seq(const struct rkpPacket* rkpp, const int32_t offset)
|
int32_t rkpPacket_seq(const struct rkpPacket* rkpp)
|
||||||
{
|
{
|
||||||
return (int32_t)ntohl(tcp_hdr(rkpp->skb)->seq) - offset;
|
return (int32_t)ntohl(tcp_hdr(rkpp->skb)->seq) - offset;
|
||||||
}
|
}
|
||||||
int32_t rkpPacket_seqAck(const struct rkpPacket* rkpp, const int32_t offset)
|
int32_t rkpPacket_seqAck(const struct rkpPacket* rkpp)
|
||||||
{
|
{
|
||||||
return (int32_t)ntohl(tcp_hdr(rkpp->skb)->ack_seq) - offset;
|
return (int32_t)ntohl(tcp_hdr(rkpp->skb)->ack_seq) - offset;
|
||||||
}
|
}
|
||||||
@@ -210,12 +210,7 @@ bool __rkpPacket_makeWriteable(struct rkpPacket* rkpp)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rkpPacket_makeOffset(const struct rkpPacket* rkpp, int32_t* offsetp)
|
void rkpPacket_insert_auto(struct rkpPacket** buff, struct rkpPacket* rkpp)
|
||||||
{
|
|
||||||
*offsetp = rkpPacket_seq(rkpp, 0) + rkpPacket_appLen(rkpp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rkpPacket_insert_auto(struct rkpPacket** buff, struct rkpPacket* rkpp, int32_t offset)
|
|
||||||
{
|
{
|
||||||
// 如果链表是空的,那么就直接加进去
|
// 如果链表是空的,那么就直接加进去
|
||||||
if(*buff == 0)
|
if(*buff == 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user