Exemple #1
0
void MsdpNetwork::translate(DataQueue& msdp)
{
    const tbyte* data = (const tbyte*)msdp.getData();
    int len = msdp.getSize();
    //OUTPUT_BYTES(data, len, len, "MSDP");

    while (len > 0)
    {
        if (len < 3 || data[0] != IAC || data[2] != MSDP)
        {
            assert(false);
            msdp.clear();
            return;
        }

        tbyte cmd = data[1];
        if (cmd == SB)
        {
            const tbyte *p = data;
            for (int i=3; i<len; ++i)
            {
                if (p[i]==SE && p[i-1]==IAC && p[i-2]!=IAC)
                {
                    run_plugins_msdp(p+3, i-4);
                    len = i+1;
                    break;
                }
            }
            msdp.truncate(len);
        }
        else if (cmd == DO)
        {
            m_state = true;
            msdp.truncate(3);
            send_varval("CLIENT_NAME", "TORTILLA");
            send_varval("CLIENT_VERSION", TW2A(TORTILLA_VERSION));
            tortilla::getPluginsManager()->processPluginsMethod("msdpon", 0);
        }
        else if (cmd == DONT)
        {
            m_state = false;
            msdp.truncate(3);
            tortilla::getPluginsManager()->processPluginsMethod("msdpoff", 0);
            releaseReports();
        }
        else
        {
            assert(false);
            msdp.clear();
            return;
        }
        data = (const tbyte*)msdp.getData();
        len = msdp.getSize();
    }
}
Exemple #2
0
void MsdpNetwork::translateReceived(DataQueue& msdp_data)
{
    if (msdp_data.getSize() > 0)
        translate(msdp_data);
}