diff --git a/src/rkpMap.h b/src/rkpMap.h index 9d32016..e45be38 100644 --- a/src/rkpMap.h +++ b/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_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)); if(rkpm == 0) return 0; - rkpm -> begin = seql; - rkpm -> length = seqr - seql; - rkpm -> prev = rkpm -> next = 0; + rkpm->begin = begin; + rkpm->length = length; + rkpm->prev = rkpm->next = 0; return rkpm; } void rkpMap_delete(struct rkpMap* rkpm) @@ -41,7 +42,7 @@ void rkpMap_delete(struct rkpMap* 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)) 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) { const struct rkpMap* rkpm; - for(rkpm = *rkpml; rkpm != 0; rkpm = rkpm -> next) + for(rkpm = *rkpml; rkpm != 0; rkpm = rkpm->next) { struct rkpPacket* rkpp; unsigned char* p = 0; - int32_t seq; + uint32_t seq; // 尝试确定第一个需要修改的包以及需要修改的开始处 - for(rkpp = *rkppl; rkpp != 0; rkpp = rkpp -> next) - if(rkpPacket_seq(rkpp, rkpm -> begin) + rkpPacket_appLen(rkpp) > 0) + for(rkpp = *rkppl; rkpp != 0; rkpp = rkpp->next) + if(rkpPacket_seq(rkpp, rkpm->begin) + rkpPacket_appLen(rkpp) > 0) break; if(rkpp == 0) 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; } 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) 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); rkpPacket_csum(rkpp); - if(seq == rkpm -> length) + if(seq == rkpm->length) break; } } @@ -87,10 +88,10 @@ void rkpMap_modify(struct rkpMap** rkpml, struct rkpPacket** rkppl) void rkpMap_insert_begin(struct rkpMap** rkpml, struct rkpMap* rkpm) { - rkpm -> next = *rkpml; + rkpm->next = *rkpml; *rkpml = rkpm; - if(rkpm -> next != 0) - rkpm -> next -> prev = rkpm; + if(rkpm->next != 0) + rkpm->next->prev = 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 { struct rkpMap* rkpm2; - for(rkpm2 = *rkpml; rkpm2 -> next != 0; rkpm2 = rkpm2 -> next); - rkpm2 -> next = rkpm; - rkpm -> prev = rkpm2; + for(rkpm2 = *rkpml; rkpm2->next != 0; rkpm2 = rkpm2->next); + rkpm2->next = rkpm; + rkpm->prev = rkpm2; } } void rkpMap_refresh(struct rkpMap** rkpml, int32_t seq) { struct rkpMap *rkpm1, *rkpm2, *rkpm3; // 找到第一个不用删除的映射 - for(rkpm1 = *rkpml; rkpm1 != 0; rkpm1 = rkpm1 -> next) - // if(rkpm -> begin + rkpm -> length > seq) 需要避免绝对值很大的负数小于绝对值很大的正数的情况 - if((int32_t)(seq - rkpm1 -> begin) - rkpm1 -> length < 0) + for(rkpm1 = *rkpml; rkpm1 != 0; rkpm1 = rkpm1->next) + // if(rkpm->begin + rkpm->length > seq) 需要避免绝对值很大的负数小于绝对值很大的正数的情况 + if((int32_t)(seq - rkpm1->begin) - rkpm1->length < 0) break; // 将这个映射之前的所有映射都删除 for(rkpm2 = *rkpml; rkpm2 != rkpm1; rkpm2 = rkpm3) { - rkpm3 = rkpm2 -> next; + rkpm3 = rkpm2->next; rkpMap_delete(rkpm2); } // 修改一些指针 if(rkpm1 != 0) - rkpm1 -> prev = 0; + rkpm1->prev = 0; *rkpml = rkpm1; } \ No newline at end of file diff --git a/src/rkpPacket.h b/src/rkpPacket.h index 8747592..e4cff9c 100644 --- a/src/rkpPacket.h +++ b/src/rkpPacket.h @@ -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; } -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; } -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; } @@ -210,12 +210,7 @@ bool __rkpPacket_makeWriteable(struct rkpPacket* rkpp) return true; } -void rkpPacket_makeOffset(const struct rkpPacket* rkpp, int32_t* offsetp) -{ - *offsetp = rkpPacket_seq(rkpp, 0) + rkpPacket_appLen(rkpp); -} - -void rkpPacket_insert_auto(struct rkpPacket** buff, struct rkpPacket* rkpp, int32_t offset) +void rkpPacket_insert_auto(struct rkpPacket** buff, struct rkpPacket* rkpp) { // 如果链表是空的,那么就直接加进去 if(*buff == 0)