|
楼主 |
发表于 2008-4-29 18:13:37
|
显示全部楼层
u16 sktACK()
{
u16 n,m,r;
u16 k;
u8 gbuf[2];
TCP *tp;
n=0;
if(sktFlag==0) return 0;
BackIP();
k=CheckIP(rPacket);
if(k==0xff)
{
sktFlag=1;
m=GetTcpStart(rPacket);
tp=(TCP *)(rPacket+m);
r=0;
if(MemComp(tp->Sn,AckNo,4)==0) r=1;
memmove(AckNo,tp->Sn,4);
memmove(TsNo,tp->AckSn,4);
m=GetTcpDataStart(rPacket);
k=GetTcpDataLen(rPacket);
IncSerialNo(AckNo,k);
if(k>0)
{
if(r==0)
{
n=k;
memmove(HostBuff,rPacket+m,k);
HostDataLen=n;
}
k=MakeTcpPkt(gbuf,0,ACK,0);
SendPacket(tPacket,k);
if(tp->Action&FIN)
{
k=MakeTcpPkt(tPacket,0,ACK|FIN,0);
SendPacket(tPacket,k);
}
}
else
{
if((tp->Action&RST)){sktFlag=0;}
else if((tp->Action&FIN))
{
IncSerialNo(AckNo,1);
k=MakeTcpPkt(tPacket,0,ACK,0);
SendPacket(tPacket,k);
k=MakeTcpPkt(gbuf,0,ACK|FIN,0);
SendPacket(tPacket,k);
sktFlag=0;
}
else
{
sktFlag=1;
}
}
}
RestoreIP();
return n;
} |
|