Esempio n. 1
0
bool
Hdmi::demarshall(Status &rv, const struct _json_value *jv) {
  demarshall(rv.in, &(*jv)["in"]);
  demarshall(rv.out, &(*jv)["out"]);
  rv.edid = strdup((const char *)(*jv)["edid"]);
  rv.format = strdup((const char *)(*jv)["format"]);
  rv.iftv = (unsigned)(*jv)["iftv"];
  rv.ifdata = strdup((const char *)(*jv)["ifdata"]);
  return true;
}
Esempio n. 2
0
ApiStatus
Hdmi::status(Status & rv) {
  ApiStatus arv = api_Success;
  std::map<std::string,std::string> p;
  struct _json_value *rsp;
  m_rest.invoke(rsp, "Hdmi", "status", p);

  const char *st = rsp ? (const char *)(*rsp)["status"] : 0;
  if (st && strcmp(st, "Ok")==0) {
    demarshall(rv, &(*rsp)["v"]);
  } else {
    fprintf(stderr, "status: error %s\n", st); // error
  }
  if (rsp) json_value_free(rsp);
  return arv;
}
Esempio n. 3
0
QVariant QXmppRpcMarshaller::demarshall(const QDomElement &elem, QStringList &errors)
{
    if ( elem.tagName().toLower() != "value" )
    {
        errors << "Bad param value";
        return QVariant();
    }

    if ( !elem.firstChild().isElement() )
    {
        return QVariant( elem.text() );
    }

    const QDomElement typeData = elem.firstChild().toElement();
    const QString typeName = typeData.tagName().toLower();

    if (typeName == "nil")
    {
        return QVariant();
    }
    if ( typeName == "string" )
    {
        return QVariant( typeData.text() );
    }
    else if (typeName == "int" || typeName == "i4" )
    {
        bool ok = false;
        QVariant val( typeData.text().toInt( &ok ) );
        if (ok)
            return val;
        errors << "I was looking for an integer but data was courupt";
        return QVariant();
    }
    else if( typeName == "double" )
    {
        bool ok = false;
        QVariant val( typeData.text().toDouble( &ok ) );
        if (ok)
            return val;
        errors <<  "I was looking for an double but data was corrupt";
    }
    else if( typeName == "boolean" )
        return QVariant( typeData.text() == "1" || typeData.text().toLower() == "true" );
    else if( typeName == "datetime" || typeName == "datetime.iso8601" )
        return QVariant( QDateTime::fromString( typeData.text(), Qt::ISODate ) );
    else if( typeName == "array" )
    {
        QVariantList arr;
        QDomElement valueNode = typeData.firstChildElement("data").firstChildElement();
        while (!valueNode.isNull() && errors.isEmpty())
        {
            arr.append(demarshall(valueNode, errors));
            valueNode = valueNode.nextSiblingElement();
        }
        return QVariant( arr );
    }
    else if( typeName == "struct" )
    {
        QMap<QString,QVariant> stct;
        QDomNode valueNode = typeData.firstChild();
        while(!valueNode.isNull() && errors.isEmpty())
        {
            const QDomElement memberNode = valueNode.toElement().elementsByTagName("name").item(0).toElement();
            const QDomElement dataNode = valueNode.toElement().elementsByTagName("value").item(0).toElement();
            stct[ memberNode.text() ] = demarshall(dataNode, errors);
            valueNode = valueNode.nextSibling();
        }
        return QVariant(stct);
    }
    else if( typeName == "base64" )
    {
        QVariant returnVariant;
        QByteArray dest;
        QByteArray src = typeData.text().toLatin1();
        return QVariant(QByteArray::fromBase64(src));
    }

    errors << QString( "Cannot handle type %1").arg(typeName);
    return QVariant();
}