Exemplo n.º 1
0
void DdpServer::process(const std::string &input)
{
    jvar::Variant inputData;
    if (!inputData.parseJson(input.c_str()))
        throw;

    jvar::Variant responseArray;
    responseArray.createArray();
    for(int i = 0; i < inputData.length();i++)
    {
        jvar::Variant packet;
        packet.parseJson(inputData[i].toString().c_str());

        jvar::Variant response;
        response = processPing(packet);
        response = response.isEmpty() ? processConnect(packet) : response;
        response = response.isEmpty() ? processSub(packet) : response;
        response = response.isEmpty() ? processUnsub(packet) : response;
        response = response.isEmpty() ? processMethod(packet) : response;

        if (response.isEmpty())
        {
            // unknown
        }
        else if (response.isArray())
        {
            for (int j = 0; j < response.length(); j++)
                responseArray.push(response[j].toString());
        }
        else
        {
            responseArray.push(response.toString());
        }

    }

    if (responseArray.length() == 0)
        return;

    onEmitCallback(context, "a" + responseArray.toJsonString());
}
Exemplo n.º 2
0
bool ControlBodyTranslator::preorder(const IR::MethodCallExpression* expression) {
    builder->append("/* ");
    visit(expression->method);
    builder->append("(");
    bool first = true;
    for (auto a  : *expression->arguments) {
        if (!first)
            builder->append(", ");
        first = false;
        visit(a);
    }
    builder->append(")");
    builder->append("*/");
    builder->newline();

    auto mi = P4::MethodInstance::resolve(expression,
                                          control->program->refMap,
                                          control->program->typeMap);
    auto apply = mi->to<P4::ApplyMethod>();
    if (apply != nullptr) {
        processApply(apply);
        return false;
    }
    auto ef = mi->to<P4::ExternFunction>();
    if (ef != nullptr) {
        processFunction(ef);
        return false;
    }
    auto ext = mi->to<P4::ExternMethod>();
    if (ext != nullptr) {
        processMethod(ext);
        return false;
    }
    auto bim = mi->to<P4::BuiltInMethod>();
    if (bim != nullptr) {
        builder->emitIndent();
        if (bim->name == IR::Type_Header::isValid) {
            visit(bim->appliedTo);
            builder->append(".ebpf_valid");
            return false;
        } else if (bim->name == IR::Type_Header::setValid) {
            visit(bim->appliedTo);
            builder->append(".ebpf_valid = true");
            return false;
        } else if (bim->name == IR::Type_Header::setInvalid) {
            visit(bim->appliedTo);
            builder->append(".ebpf_valid = false");
            return false;
        }
    }
    auto ac = mi->to<P4::ActionCall>();
    if (ac != nullptr) {
        // Action arguments have been eliminated by the mid-end.
        BUG_CHECK(expression->arguments->size() == 0,
                  "%1%: unexpected arguments for action call", expression);
        visit(ac->action->body);
        return false;
    }

    ::error("Unsupported method invocation %1%", expression);
    return false;
}