在网上找到的实例中有关于初始化IP头信息的代码,看不太懂,求大神指教。
我自己要写关于OSPF部分的代码。代码如下
unsigned char *pos;
pos=(unsigned char *)buf;
m_nVersion=*pos/16;
m_nHeaderLength = *pos%16;
pos++;
m_nServiceType=*pos;
m_nPrecedence=(*pos & 16)*4+(*pos & 8)*2+(*pos & 4);
if(*pos & 16)
m_bDelay = true;
else
m_bDelay = false;
if(*pos & 8)
m_bThroughtPut = true;
else
m_bThroughtPut = false;
if(*pos & 4)
m_bReliability = true;
else
m_bReliability = false;
pos++;
m_uTotalLength=(*pos)*256+(*(pos+1));
pos+=2;
m_nIdentification=(*pos)*256+(*(pos+1));
pos+=2;
if(*pos & 64)
m_bDF=true;
else
m_bDF=false;
if(*pos & 32)
m_bMF=true;
else
m_bMF=false;
m_nFragOffSet=(*pos%32)*256+(*(pos+1));
pos+=2;
m_nTTL = *pos;
pos++;
m_nProtocol = *pos;
pos++;
m_nCheckSum = (*pos)*256+(*(pos+1));
pos+=2;
m_lSrcIP = (*pos)*0x1000000+(*(pos+1))*0x10000+(*(pos+2))*0x100+(*(pos+3));
pos+=4;
m_lDestIP = (*pos)*0x1000000+(*(pos+1))*0x10000+(*(pos+2))*0x100+(*(pos+3));
if(m_nHeaderLength > 5)
{
pos += 4;
m_nOptLength=(m_nHeaderLength-5)*4;
m_pOptions=new unsigned char[m_nOptLength];
memcpy(m_pOptions,buf+20,m_nOptLength);
}
else
{
m_nOptLength = 0;
m_pOptions = NULL;
}
pos=(unsigned char *)(buf+m_nHeaderLength*4);
m_nDataLength = m_uTotalLength-m_nHeaderLength*4;
if(m_nDataLength > 0)
{
m_pData=new unsigned char[m_nDataLength];
memcpy(m_pData,buf+m_nHeaderLength*4,m_nDataLength);
}
else
m_pData = NULL;