Exemple #1
0
void IRC::handle_msg(const string& chan, const string& nick, const string& login, const string& host, const string& omsg) {
    string msg = omsg;
    if(chan.find_first_of("#&+!") == 0) {
        //Channel Message
        onMessage(chan, nick, login, host, msg);
    } else {
        //Private Messages
        if(msg.find("\x001") == 0 && msg.rfind("\x001") == msg.length() - 1) {
            //CTCP
            msg = msg.substr(1, msg.length() - 2);
            if(msg.compare("TIME") == 0) {
                onTime(nick,login,host,chan);
            } else if(msg.compare("VERSION") == 0) {
                onVersion(nick,login,host,chan);
            } else if(msg.substr(0, 4).compare("PING") == 0) {
                onPing(nick,login,host,chan,msg.substr(5));
            } else if(msg.compare("FINGER") == 0) {
                onFinger(nick,login,host,chan);
            } else if(msg.substr(0, 6).compare("ACTION") == 0) {
                onAction(nick,login,host,chan,msg.substr(7));
            }

            return;
        }
        onPrivateMessage(nick, login, host, msg);
    }
}
void CDatagrams::onPacket(CEndPoint addr, G2Packet* pPacket)
{
	try
	{
		if(pPacket->isType("PI"))
		{
			onPing(addr, pPacket);
		}
		else if(pPacket->isType("PO"))
		{
			onPong(addr, pPacket);
		}
		else if(pPacket->isType("CRAWLR"))
		{
			onCRAWLR(addr, pPacket);
		}
		else if(pPacket->isType("QKR"))
		{
			onQKR(addr, pPacket);
		}
		else if(pPacket->isType("QKA"))
		{
			onQKA(addr, pPacket);
		}
		else if(pPacket->isType("QA"))
		{
			onQA(addr, pPacket);
		}
		else if(pPacket->isType("QH2"))
		{
			onQH2(addr, pPacket);
		}
		else if(pPacket->isType("Q2"))
		{
			onQuery(addr, pPacket);
		}
		else
		{
			//systemLog.postLog(LogSeverity::Debug, QString("G2 UDP recieved unknown packet %1").arg(pPacket->GetType()));
			//qDebug() << "UDP RECEIVED unknown packet " << pPacket->GetType();
		}
	}
	catch(...)
	{
		systemLog.postLog(LogSeverity::Debug, QString("malformed packet"));
		//qDebug() << "malformed packet";
	}
}
void ARControlConnection::onReadyRead()
{
    Q_D(ARControlConnection);

    while(d->d2c->hasPendingDatagrams())
    {
        QHostAddress remoteAddr;
        quint16      remotePort;

        // If we've not received enough data, then return and wait for more.
        if(d->d2c->pendingDatagramSize() < ARNETWORK_FRAME_HEADER_SIZE) break;

        QByteArray datagram(d->d2c->pendingDatagramSize(), 0x00);
        quint32 offset = 0;

        d->d2c->readDatagram(datagram.data(), datagram.size(), &remoteAddr, &remotePort);

        while(offset < datagram.size())
        {
            ARControlFrame frame;
            frame.type = static_cast<quint8>(datagram[offset + 0]);
            frame.id = static_cast<quint8>(datagram[offset + 1]);
            frame.seq = static_cast<quint8>(datagram[offset + 2]);
            frame.size = qFromLittleEndian(*((quint32*)(datagram.constData() + offset + 3)));

            // Copy datagram data to frame if the frame size is larger than just the header.
            if(frame.size > ARNETWORK_FRAME_HEADER_SIZE)
            {
                const char *data = datagram.constData();
                frame.payload.insert(0, data + offset + ARNETWORK_FRAME_HEADER_SIZE, frame.size - ARNETWORK_FRAME_HEADER_SIZE);
            }

            // Output comms debug info (if it's not a video data frame).
            if(frame.id != ARNET_D2C_VIDEO_DATA_ID)
            {
                DEBUG_T(QString("<< %1:%2 [%3]")
                        .arg(remoteAddr.toString())
                        .arg(remotePort)
                        .arg(QString(datagram.toHex())));
            }

            // Process frame depending on buffer id.
            if(frame.id == ARNET_D2C_PING_ID)
            {
                onPing(frame);
            }
            else if(frame.id == ARNET_D2C_EVENT_ID || frame.id == ARNET_D2C_NAVDATA_ID)
            {
                onNavdata(frame);
            }
            else if(frame.id == ARNET_D2C_VIDEO_DATA_ID)
            {
                onVideoData(frame);
            }
            else
            {
                WARNING_T(QString("Unhandled frame id: %1").arg(frame.id));
            }

            // Increment datagram offset to continue processing next frame.
            offset += frame.size;
        }
    }
}