Class CICMPSocket::
ProccessICMP()
Base ClassesData ItemsConstructorsDestructorsFunctionsCustom CodeGo to hierarchy chart    Prev page: GetLastIPHeaderNext page: ReverseHeader    Show member index
Protected Function Declared in:
ICMPSocket.h

'Declaration' icon -- Shortcut to top of page. Declaration

virtual BOOL ProccessICMP(
    const char* buf);

'Description' icon -- Shortcut to top of page. Description

Proccess incoming ICMP data

'Function Body' icon -- Shortcut to top of page. Function Body

try
{
    //Here we proccess the input we received
    //Initialize members
    if (!m_IPHeader)
        m_IPHeader=new IpHeader;

    if (!m_ICMPHeader)
        m_ICMPHeader=new ICMPHeader;

    //Create an IP header
    LPIpHeader lpHead;
    lpHead=m_IPHeader;

    //Copy to buffer
    memcpy(lpHead,buf,IpHeaderLength);

    //Let's check for options
    unsigned char ucHeaderSize;
    ucHeaderSize=lpHead->HeaderLength_Version & 15;
    ucHeaderSize*=4;

    //Now check for total packet size
    unsigned short ucPacketSize;
    ucPacketSize=htons(lpHead->TotalLength);

    //Copy data to icmp
    memset(m_ICMPHeader,0,ICMPHeaderLength);

    //How much to copy ?
    unsigned short ucCopy;
    ucCopy=ucPacketSize-ucHeaderSize;

    //Save the datasize
    m_DataSize=ucCopy;

    if (ucCopy>ICMPHeaderLength)
        ucCopy=ICMPHeaderLength;

    memcpy(m_ICMPHeader,buf+ucHeaderSize,ucCopy);

    //Now save the original IP
    if (m_ICMPHeader->ICMPType!=ICMP_Echo &&
        m_ICMPHeader->ICMPType!=ICMP_Echo_Reply &&
        m_ICMPHeader->ICMPType!=ICMP_Timestamp &&
        m_ICMPHeader->ICMPType!=ICMP_Timestamp_Reply &&
        m_ICMPHeader->ICMPType!=ICMP_Information &&
        m_ICMPHeader->ICMPType!=ICMP_Information_Reply)
    {
        if (!m_ICMPIPHeader)
            m_ICMPIPHeader=new IpHeader;

        memcpy(m_ICMPIPHeader,buf+ucHeaderSize+ICMP_Unreachable_SIZE,IpHeaderLength);

        //Copy rest of data
        if (!m_Data)
            m_Data=new char[ICMP_DATA_SIZE];

        memcpy(m_Data,buf+ucPacketSize-ICMP_DATA_SIZE,ICMP_DATA_SIZE);
    }

    //Now I need to reverse the header
    ReverseHeader();

    return TRUE;
}
ERROR_HANDLER_RETURN("ProccessICMP",FALSE)

'See Also' icon -- Shortcut to top of page. See Also

Class Overview Class Overview  |  Public base class CSpoofSocket  |  Hierarchy Chart Hierarchy Chart


Get Surveyor!This web site was generated using Surveyor V4.50.811.1.  Click here for more information. Site content copyright © 2001 Barak Weichselbaum. See the About page for additional notices. This page last updated: 27 Jun 2001.