Почему я не могу отправить пакет на Радио в o mnet? - PullRequest
0 голосов
/ 10 января 2020

Я сталкиваюсь с этой проблемой, когда постоянно получаю сообщение об ошибке

check_and_cast (): Невозможно привести (inet :: Packet *) к типу 'inet :: Physicallayer :: Signal * '- в модуле (inet :: Physicallayer :: Ieee80211Radio)

Я отправляю пакет, используя следующий код:

    std::ostringstream str;
    Packet *payload = new Packet(str.str().c_str());
    payload->setTimestamp();
    L3Address destAddr = chooseDestAddr();
    emit(sentPkSignal, payload);
    socket.sendTo(payload, destAddr, destPort);
    numSent++;

Радиомодуль, который получает пакет запускает следующий код:

Signal *Radio::createSignal(Packet *packet) const
{
    encapsulate(packet);
    if (sendRawBytes) {
        auto rawPacket = new Packet(packet->getName(), packet->peekAllAsBytes());
        rawPacket->copyTags(*packet);
        delete packet;
        packet = rawPacket;
    }
    Signal *signal = check_and_cast<Signal *>(medium->transmitPacket(this, packet));
    ASSERT(signal->getDuration() != 0);
    return signal;
}

Я очень сильно запутался, так как функция принимает пакет inet, и я отправляю пакет inet, как говорится в сообщении об ошибке. Я даю функции именно то, что она хочет. Возможно ли, что функция неправильная и вы не можете привести inet пакет к inet :: Physicallayer :: signal? Но функция взята из inet фреймворка, который я не считаю неправильным.

РЕДАКТИРОВАТЬ Я думаю, что на самом деле это не идет на радио. cc? Об ошибке говорит Ieee80211Radio. Я проверил исходный код, но я не могу найти там ничего, что делает кастинг. Фактически, когда я выполняю поиск по всему рабочему пространству, появляется только check_and_cast<Signal *> в Радио. cc

Однако я также не могу узнать, где вызывается Радио. cc.

...