HDiscoveryType::HDiscoveryType(const HResourceType& resourceType) :
    h_ptr(new HDiscoveryTypePrivate())
{
    if (h_ptr->parse(resourceType))
    {
        h_ptr->m_contents = resourceType.toString();
        h_ptr->m_type = resourceType.isDeviceType() ?
            HDiscoveryType::DeviceType :
            HDiscoveryType::ServiceType;
    }
}
Exemple #2
0
bool HDeviceInfoPrivate::setDeviceType(const HResourceType& deviceType)
{
    if (!deviceType.isValid())
    {
        return false;
    }

    if (deviceType.type() != HResourceType::StandardDeviceType &&
        deviceType.type() != HResourceType::VendorSpecifiedDeviceType)
    {
        return false;
    }

    m_deviceType = deviceType;
    return true;
}
HDiscoveryType::HDiscoveryType(
    const HUdn& udn, const HResourceType& resourceType,
    HValidityCheckLevel checkLevel) :
        h_ptr(new HDiscoveryTypePrivate())
{
    if (h_ptr->parse(resourceType) && udn.isValid(checkLevel))
    {
        h_ptr->m_udn = udn;
        h_ptr->m_contents =
            QString("%1::%2").arg(udn.toString(), resourceType.toString());

        h_ptr->m_type = resourceType.isDeviceType() ?
            HDiscoveryType::SpecificDeviceWithType :
            HDiscoveryType::SpecificServiceWithType;
    }
}
/*******************************************************************************
 * HClientServiceAdapter
 ******************************************************************************/
HClientServiceAdapter::HClientServiceAdapter(
    const HResourceType& serviceType, QObject* parent) :
        QObject(parent),
            h_ptr(new HClientServiceAdapterPrivate(serviceType))
{
    h_ptr->q_ptr = this;
    Q_ASSERT(serviceType.isValid());
}
bool HClientServiceAdapter::setService(
    HClientService* service, ValidationType vt)
{
    HResourceType st = service->info().serviceType();

    if (!service || !st.compare(serviceType(), HResourceType::Inclusive))
    {
        setLastErrorDescription(QString("Unsupported service type: [%1]").arg(st.toString()));
        return false;
    }

    if (vt == FullValidation)
    {
        if (deviceModelInfoProvider())
        {
            if (!h_ptr->validate(service))
            {
                return false;
            }
        }
    }

    if (!prepareService(service))
    {
        return false;
    }

    h_ptr->m_service = service;

    if (deviceModelInfoProvider())
    {
        HActionsSetupData actionsSetupData =
            deviceModelInfoProvider()->actionsSetupData(
                service->info(), service->parentDevice()->info());

        if (!actionsSetupData.isEmpty())
        {
            h_ptr->m_actionsSetupData.reset(
                new HActionsSetupData(actionsSetupData));
        }
    }

    return true;
}
    bool parse(const HResourceType& rt)
    {
        if (!rt.isValid())
        {
            return false;
        }

        m_resourceType = rt;
        return true;
    }
HServiceInfo::HServiceInfo(
    const HServiceId& serviceId,
    const HResourceType& serviceType,
    const QUrl& controlUrl,
    const QUrl& eventSubUrl,
    const QUrl& scpdUrl,
    HInclusionRequirement inclusionRequirement,
    HValidityCheckLevel checkLevel,
    QString* err) :
        h_ptr(new HServiceInfoPrivate())
{
    QString errTmp;
    if (!serviceId.isValid(checkLevel))
    {
        errTmp = "Invalid service ID";
    }
    else if (!serviceType.isValid())
    {
        errTmp = "Invalid service type";
    }
    else if (controlUrl.isEmpty() || !controlUrl.isValid())
    {
        errTmp = "Invalid control URL";
    }
    else if (eventSubUrl.isEmpty() || !eventSubUrl.isValid())
    {
        errTmp = "Invalid event sub URL";
    }
    else if (scpdUrl.isEmpty() || !scpdUrl.isValid())
    {
        errTmp = "Invalid SCPD URL";
    }
    else
    {
        h_ptr->m_controlUrl = controlUrl;
        h_ptr->m_eventSubUrl = eventSubUrl;
        h_ptr->m_scpdUrl = scpdUrl;
        h_ptr->m_serviceId = serviceId;
        h_ptr->m_serviceType = serviceType;
        h_ptr->m_inclusionRequirement = inclusionRequirement;
    }

    if (err && !errTmp.isEmpty())
    {
        *err = errTmp;
    }
}
Exemple #8
0
HDeviceInfo::HDeviceInfo(
    const HResourceType& deviceType,
    const QString& friendlyName,
    const QString& manufacturer,
    const QString& modelName,
    const HUdn&    udn,
    HValidityCheckLevel checkLevel,
    QString* err) :
        h_ptr(new HDeviceInfoPrivate())
{
    QScopedPointer<HDeviceInfoPrivate> tmp(new HDeviceInfoPrivate());

    QString errTmp;
    if (!tmp->setDeviceType(deviceType))
    {
        errTmp = QString("Invalid device type: [%1]").arg(deviceType.toString());
    }
    else if (!tmp->setFriendlyName(friendlyName))
    {
        errTmp = QString("Invalid friendly name: [%1]").arg(friendlyName);
    }
    else if (!tmp->setManufacturer(manufacturer))
    {
        errTmp = QString("Invalid manufacturer: [%1]").arg(manufacturer);
    }
    else if (!tmp->setModelName(modelName))
    {
        errTmp = QString("Invalid model name: [%1]").arg(modelName);
    }
    else if (!tmp->setUdn(udn, checkLevel))
    {
        errTmp = QString("Invalid UDN: [%1]").arg(udn.toString());
    }

    if (!errTmp.isEmpty())
    {
        if (err)
        {
            *err = errTmp;
        }
    }
    else
    {
        h_ptr = tmp.take();
    }
}
HClientAdapterOp<QStringList> HRenderingControlAdapter::setStateVariables(
    const HUdn& renderingControlUdn,
    const HResourceType& serviceType, const HServiceId& serviceId,
    const QString& stateVariableValuePairs)
{
    qint32 rc = UpnpUndefinedFailure;
    HClientAction* action = h_ptr->getAction("SetStateVariables", &rc);
    if (!action)
    {
        return HClientAdapterOp<QStringList>::createInvalid(rc, "");
    }

    H_D(HRenderingControlAdapter);
    HActionArguments inArgs = action->info().inputArguments();
    inArgs.setValue("InstanceID", h->m_instanceId);
    inArgs.setValue("RenderingControlUDN", renderingControlUdn.toString());
    inArgs.setValue("ServiceType", serviceType.toString());
    inArgs.setValue("ServiceId", serviceId.toString());
    inArgs.setValue("StateVariableValuePairs", stateVariableValuePairs);

    return h_ptr->beginInvoke<QStringList>(
               action, inArgs,
               HActionInvokeCallback(h, &HRenderingControlAdapterPrivate::setStateVariables));
}
Exemple #10
0
HDeviceInfo::HDeviceInfo(
    const HResourceType& deviceType,
    const QString& friendlyName,
    const QString& manufacturer,
    const QUrl&    manufacturerUrl,
    const QString& modelDescription,
    const QString& modelName,
    const QString& modelNumber,
    const QUrl&    modelUrl,
    const QString& serialNumber,
    const HUdn&    udn,
    const QString& upc,
    const QList<QUrl>& icons,
    const QUrl&    presentationUrl,
    HValidityCheckLevel checkLevel,
    QString* err) :
        h_ptr(new HDeviceInfoPrivate())
{
    QScopedPointer<HDeviceInfoPrivate> tmp(new HDeviceInfoPrivate());

    QString errTmp;
    if (!tmp->setDeviceType(deviceType))
    {
        errTmp = QString("Invalid device type: [%1]").arg(deviceType.toString());
    }
    else if (!tmp->setFriendlyName(friendlyName))
    {
        errTmp = QString("Invalid friendly name: [%1]").arg(friendlyName);
    }
    else if (!tmp->setManufacturer(manufacturer))
    {
        errTmp = QString("Invalid manufacturer: [%1]").arg(manufacturer);
    }
    else if (!tmp->setModelName(modelName))
    {
        errTmp = QString("Invalid model name: [%1]").arg(modelName);
    }
    else if (!tmp->setUdn(udn, checkLevel))
    {
        errTmp = QString("Invalid UDN: [%1]").arg(udn.toString());
    }

    if (!errTmp.isEmpty())
    {
        if (err)
        {
            *err = errTmp;
        }
    }
    else
    {
        h_ptr = tmp.take();
    }

    // these are optional ==> no need to be strict
    h_ptr->setManufacturerUrl (manufacturerUrl.toString());
    h_ptr->setModelDescription(modelDescription);

    h_ptr->setModelNumber     (modelNumber);
    h_ptr->setModelUrl        (modelUrl.toString());
    h_ptr->setSerialNumber    (serialNumber);
    h_ptr->setUpc             (upc);
    h_ptr->setIcons           (icons);
    h_ptr->setPresentationUrl (presentationUrl.toString());
}
    void setState(
        const HUdn& udn, const HResourceType& rt, HValidityCheckLevel checkLevel)
    {
        if (udn.isValid(checkLevel))
        {
            switch(rt.type())
            {
            case HResourceType::Undefined:
                m_udn = udn;
                m_type = HDiscoveryType::SpecificDevice;
                m_resourceType = rt;
                m_contents = udn.toString();
                return;

            case HResourceType::StandardDeviceType:
            case HResourceType::VendorSpecifiedDeviceType:
                m_type = HDiscoveryType::SpecificDeviceWithType;
                break;

            case HResourceType::StandardServiceType:
            case HResourceType::VendorSpecifiedServiceType:
                m_type = HDiscoveryType::SpecificServiceWithType;
                break;

            default:
                Q_ASSERT(false);
            }

            m_contents = QString("%1::%2").arg(udn.toString(), rt.toString());
        }
        else
        {
            switch(rt.type())
            {
            case HResourceType::Undefined:
                m_udn = udn;
                m_type = HDiscoveryType::Undefined;
                m_resourceType = rt;
                m_contents = QString();
                return;

            case HResourceType::StandardDeviceType:
            case HResourceType::VendorSpecifiedDeviceType:
                m_type = HDiscoveryType::DeviceType;
                break;

            case HResourceType::StandardServiceType:
            case HResourceType::VendorSpecifiedServiceType:
                m_type = HDiscoveryType::ServiceType;
                break;

            default:
                Q_ASSERT(false);
            }

            m_contents = QString("%1").arg(rt.toString());
        }

        m_udn = udn;
        m_resourceType = rt;
    }