Class CRealTimeTraceRouteSocket::
TraceRoute()
Base ClassesData ItemsConstructorsDestructorsFunctionsCustom CodeGo to hierarchy chart    Prev page: TraceRouteNext page: Custom Code in Header Before Includes    Show member index
Public Function Declared in:
RealTimeTraceRouteSocket.h

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

virtual BOOL TraceRoute(
    IP aDestinationAddress,
    DWORD dwTimeout);

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

try
{
    if (!m_bTraceDone ||
        !m_bInitialized ||
        m_bFinishing ||
        m_bPartialDone)
        return FALSE;

    //Trace not done
    m_bTraceDone=FALSE;
    m_bPartialDone=FALSE;
    m_bFinishing=FALSE;

    //Save the address
    m_aTracedAddress=aDestinationAddress;

    //Clear the data
    for (int iCounter=0;iCounter<=mhMaxHops;++iCounter)
    {
        //Clear the data
        m_aData[iCounter].aReplyingAddress=0;
        m_aData[iCounter].ucTTL=0;
        m_aData[iCounter].dwElapsedTime=0;
        m_aData[iCounter].pDNS=m_pManager;
        m_aData[iCounter].bResolved=FALSE;
        m_aData[iCounter].bTarget=FALSE;
        m_aData[iCounter].bFinal=FALSE;
        m_aData[iCounter].lpUserData=NULL;

        //The CSection
        std::auto_ptr<CGenericCriticalSection> pProtection(COSManager::CreateCriticalSection());

        //Save it
        m_aData[iCounter].pCSection=pProtection;
    }

    m_ucMaxHOP=0;
    m_ucMinHOP=mhMaxHops;

    //Set the last hops data
    //Do we have DNS
    m_aData[mhMaxHops].bTarget=TRUE;

    //No resolvers
    m_ulResolvers=0;

    //We need our port start
    m_usPortStart=GetPortStart();

    //Send the pings
    for (int iPings=0;iPings<3;++iPings)
        for (int iCounter=1;
             iCounter<=mhMaxHops;
             ++iCounter)
        {
            //Set the TTL
            SetTTL(iCounter);

            //Set the ID
            SetID(iCounter);

            //Set the sequence
            SetSequence(m_usPortStart);

            //And ping
            if (!Ping(aDestinationAddress,
                      0))
            {
                //Indicate we are done
                m_bTraceDone=TRUE;

                //Call user
                TraceDone(TRUE);

                //Exit
                return FALSE;
            }
        }

    //Set the timeout
    SetTimeout(dwTimeout);

    //Do we have DNS
    if (m_bResolveIPs)
    {
        //Set the resolvers
        AdjustResolvers(1);

        //Create the data
        ResolveThreadData* pThreadData;
        pThreadData=new ResolveThreadData;

        //Populate it
        pThreadData->pClass=this;
        pThreadData->pData=&m_aData[mhMaxHops];

        //DNS lookup for the host
        //Add the reverse DNS
        m_pManager->GetThreadManager()->SubmitJob(ResolveData,(LPVOID)pThreadData);
    }

    //Done
    return TRUE;
}
ERROR_HANDLER_RETURN("TraceRoute",FALSE)

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

Class Overview Class Overview  |  Public base class CPingSocket  |  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 © 2003 Komodia LTD.. See the About page for additional notices. This page last updated: 24 Feb 2003.