int DeviceBindingService::GetCapabilities()

in sample_app/onvif_camera_mock/artifacts/onvif_srvd/src/ServiceDevice.cpp [317:369]


int DeviceBindingService::GetCapabilities(_tds__GetCapabilities *tds__GetCapabilities, _tds__GetCapabilitiesResponse &tds__GetCapabilitiesResponse)
{
    DEBUG_MSG("Device: %s\n", __FUNCTION__);


    ServiceContext* ctx = (ServiceContext*)this->soap->user;

    std::string XAddr = ctx->getXAddr(this->soap);



    tds__GetCapabilitiesResponse.Capabilities = soap_new_tt__Capabilities(this->soap);
    std::vector<tt__CapabilityCategory>& categories(tds__GetCapabilities->Category);
    if(categories.empty())
    {
        categories.push_back(tt__CapabilityCategory__All);
    }


    for(tt__CapabilityCategory category : categories)
    {
        if(!tds__GetCapabilitiesResponse.Capabilities->Device && ( (category == tt__CapabilityCategory__All) || (category == tt__CapabilityCategory__Device) ) )
        {
            tds__GetCapabilitiesResponse.Capabilities->Device = soap_new_tt__DeviceCapabilities(this->soap);
            tds__GetCapabilitiesResponse.Capabilities->Device->XAddr = XAddr;
            tds__GetCapabilitiesResponse.Capabilities->Device->System = soap_new_tt__SystemCapabilities(this->soap);
            tds__GetCapabilitiesResponse.Capabilities->Device->System->SupportedVersions.push_back(soap_new_req_tt__OnvifVersion(this->soap, 2, 0));
            tds__GetCapabilitiesResponse.Capabilities->Device->Network = soap_new_tt__NetworkCapabilities(this->soap);
            tds__GetCapabilitiesResponse.Capabilities->Device->Security = soap_new_tt__SecurityCapabilities(this->soap);
            tds__GetCapabilitiesResponse.Capabilities->Device->IO = soap_new_tt__IOCapabilities(this->soap);
        }


        if(!tds__GetCapabilitiesResponse.Capabilities->Media && ( (category == tt__CapabilityCategory__All) || (category == tt__CapabilityCategory__Media) ) )
        {
            tds__GetCapabilitiesResponse.Capabilities->Media  = soap_new_tt__MediaCapabilities(this->soap);
            tds__GetCapabilitiesResponse.Capabilities->Media->XAddr = XAddr;
            tds__GetCapabilitiesResponse.Capabilities->Media->StreamingCapabilities = soap_new_tt__RealTimeStreamingCapabilities(this->soap);
        }

        if (ctx->get_ptz_node()->enable) {
            if(!tds__GetCapabilitiesResponse.Capabilities->PTZ && ( (category == tt__CapabilityCategory__All) || (category == tt__CapabilityCategory__PTZ) ) )
            {
                tds__GetCapabilitiesResponse.Capabilities->PTZ  = soap_new_tt__PTZCapabilities(this->soap);
                tds__GetCapabilitiesResponse.Capabilities->PTZ->XAddr = XAddr;
            }
        }

    }


    return SOAP_OK;
}