int NetworkingObjectBase::Get()

in src/modules/networking/src/lib/Networking.cpp [888:992]


int NetworkingObjectBase::Get(
        const char* componentName,
        const char* objectName,
        MMI_JSON_STRING* payload,
        int* payloadSizeBytes)
{
    int status = MMI_OK;

    if ((nullptr == componentName) || (0 != std::strcmp(componentName, NETWORKING)))
    {
        if (IsDebugLoggingEnabled())
        {
            OsConfigLogError(NetworkingLog::Get(), "NetworkingObjectBase::Get(%s, %s, %.*s, %d) componentName %s is invalid, %s is expected",
                componentName, objectName, (payloadSizeBytes ? *payloadSizeBytes : 0), *payload, (payloadSizeBytes ? *payloadSizeBytes : 0), componentName, NETWORKING);
        }
        status = EINVAL;
    }
    else if ((nullptr == objectName) || (0 != std::strcmp(objectName, NETWORK_CONFIGURATION)))
    {
        if (IsDebugLoggingEnabled())
        {
            OsConfigLogError(NetworkingLog::Get(), "NetworkingObjectBase::Get(%s, %s, %.*s, %d) objectName %s is invalid, %s is expected",
                componentName, objectName, (payloadSizeBytes ? *payloadSizeBytes : 0), *payload, (payloadSizeBytes ? *payloadSizeBytes : 0), objectName, NETWORK_CONFIGURATION);
        }
        status = EINVAL;
    }
    else if (nullptr == payload)
    {
        if (IsDebugLoggingEnabled())
        {
            OsConfigLogError(NetworkingLog::Get(), "NetworkingObjectBase::Get(%s, %s, %.*s, %d) payload %.*s is null",
                componentName, objectName, (payloadSizeBytes ? *payloadSizeBytes : 0), *payload, (payloadSizeBytes ? *payloadSizeBytes : 0), (payloadSizeBytes ? *payloadSizeBytes : 0), *payload);
        }
        status = EINVAL;
    }
    else if (nullptr == payloadSizeBytes)
    {
        if (IsDebugLoggingEnabled())
        {
            OsConfigLogError(NetworkingLog::Get(), "NetworkingObjectBase::Get(%s, %s, %.*s, %d) payloadSizeBytes %d is null",
                componentName, objectName, (payloadSizeBytes ? *payloadSizeBytes : 0), *payload, (payloadSizeBytes ? *payloadSizeBytes : 0), (payloadSizeBytes ? *payloadSizeBytes : 0));
        }
        status = EINVAL;
    }
    else
    {
        RefreshSettingsStrings();

        std::vector<std::pair<std::string, std::string>> fieldValueVector;
        fieldValueVector.push_back(make_pair(g_interfaceTypes, m_settings.interfaceTypes));
        fieldValueVector.push_back(make_pair(g_macAddresses, m_settings.macAddresses));
        fieldValueVector.push_back(make_pair(g_ipAddresses, m_settings.ipAddresses));
        fieldValueVector.push_back(make_pair(g_subnetMasks, m_settings.subnetMasks));
        fieldValueVector.push_back(make_pair(g_defaultGateways, m_settings.defaultGateways));
        fieldValueVector.push_back(make_pair(g_dnsServers, m_settings.dnsServers));
        fieldValueVector.push_back(make_pair(g_dhcpEnabled, m_settings.dhcpEnabled));
        fieldValueVector.push_back(make_pair(g_enabled, m_settings.enabled));
        fieldValueVector.push_back(make_pair(g_connected, m_settings.connected));

        status = TruncateValueStrings(fieldValueVector);
        rapidjson::StringBuffer sb;
        rapidjson::Writer<rapidjson::StringBuffer> writer(sb);
        writer.StartObject();
        int writeResult = 0;
        for (size_t i = 0; i < fieldValueVector.size(); i++)
        {
            writeResult += WriteJsonElement(&writer, fieldValueVector[i].first.c_str(), fieldValueVector[i].second.c_str());
        }
        writer.EndObject();

        std::string networkingJsonString(sb.GetString());
        networkingJsonString.erase(std::find(networkingJsonString.begin(), networkingJsonString.end(), '\0'), networkingJsonString.end());

        *payloadSizeBytes = networkingJsonString.length();

        if (((m_maxPayloadSizeBytes > 0) && (m_maxPayloadSizeBytes <= g_templateWithDotsSize) && ((unsigned int)*payloadSizeBytes != g_templateWithDotsSize)) ||
            ((m_maxPayloadSizeBytes > g_templateWithDotsSize) && ((unsigned int)*payloadSizeBytes > m_maxPayloadSizeBytes)))
        {
            OsConfigLogInfo(NetworkingLog::Get(), "Networking payload to report %u bytes, need to report %u bytes, reporting empty strings", (unsigned int)*payloadSizeBytes, m_maxPayloadSizeBytes);
            *payloadSizeBytes = g_templateWithDotsSize;
        }

        if (writeResult > 0)
        {
            *payloadSizeBytes = g_templateWithDotsSize;
        }

        *payload = new (std::nothrow) char[*payloadSizeBytes];
        if (nullptr == *payload)
        {
            if (nullptr != payloadSizeBytes)
            {
                OsConfigLogError(NetworkingLog::Get(), "Networking::Get insufficient buffer space available to allocate %d bytes", *payloadSizeBytes);
            }
            status = ENOMEM;
        }
        else
        {
            std::fill(*payload, *payload + *payloadSizeBytes, 0);
            std::memcpy(*payload, ((*payloadSizeBytes) == (int)g_templateWithDotsSize) ? g_templateWithDots : networkingJsonString.c_str(), *payloadSizeBytes);
        }
    }

    return status;
}