gboolean MiracBroker::send_cb (gint fd, GIOCondition condition) { try { if (!connection_->Send()) return G_SOURCE_CONTINUE; } catch (const MiracConnectionLostException &exception) { on_connection_failure(CONNECTION_LOST); } catch (const std::exception &x) { WDS_WARNING("exception: %s", x.what()); } return G_SOURCE_REMOVE; }
gboolean MiracBroker::listen_cb (gint fd, GIOCondition condition) { try { connection(network_->Accept()); WDS_LOG("connection from: %s", connection_->GetPeerAddress().c_str()); on_connected(); } catch (const std::exception &x) { WDS_WARNING("exception: %s", x.what()); } return G_SOURCE_CONTINUE; }
std::unique_ptr<Reply> M3Handler::HandleMessage(Message* message) { // FIXME : resolve clashes between wds exported and internal rtsp type names. //using namespace rtsp; auto received_payload = ToGetParameterPayload(message->payload()); if (!received_payload) return nullptr; auto reply = std::unique_ptr<Reply>(new Reply(rtsp::STATUS_OK)); auto reply_payload = new rtsp::PropertyMapPayload(); for (const std::string& property : received_payload->properties()) { std::shared_ptr<rtsp::Property> new_prop; if (property == GetPropertyName(rtsp::AudioCodecsPropertyType)){ // FIXME: declare that we support absolutely every audio codec/format, // but there should be a MediaManager API for it auto codec_lpcm = AudioCodec(LPCM, AudioModes(3), 0); auto codec_aac = AudioCodec(AAC, AudioModes(15), 0); auto codec_ac3 = AudioCodec(AC3, AudioModes(7), 0); std::vector<AudioCodec> codec_list; codec_list.push_back(codec_lpcm); codec_list.push_back(codec_aac); codec_list.push_back(codec_ac3); new_prop.reset(new rtsp::AudioCodecs(codec_list)); reply_payload->AddProperty(new_prop); } else if (property == GetPropertyName(rtsp::VideoFormatsPropertyType)){ new_prop.reset(new rtsp::VideoFormats(ToSinkMediaManager(manager_)->GetNativeVideoFormat(), false, ToSinkMediaManager(manager_)->GetSupportedH264VideoCodecs())); reply_payload->AddProperty(new_prop); } else if (property == GetPropertyName(rtsp::Video3DFormatsPropertyType)){ new_prop.reset(new rtsp::Formats3d()); reply_payload->AddProperty(new_prop); } else if (property == GetPropertyName(rtsp::ContentProtectionPropertyType)){ new_prop.reset(new rtsp::ContentProtection()); reply_payload->AddProperty(new_prop); } else if (property == GetPropertyName(rtsp::DisplayEdidPropertyType)){ new_prop.reset(new rtsp::DisplayEdid()); reply_payload->AddProperty(new_prop); } else if (property == GetPropertyName(rtsp::CoupledSinkPropertyType)){ new_prop.reset(new rtsp::CoupledSink()); reply_payload->AddProperty(new_prop); } else if (property == GetPropertyName(rtsp::ClientRTPPortsPropertyType)){ new_prop.reset(new rtsp::ClientRtpPorts( ToSinkMediaManager(manager_)->GetLocalRtpPorts().first, ToSinkMediaManager(manager_)->GetLocalRtpPorts().second)); reply_payload->AddProperty(new_prop); } else if (property == GetPropertyName(rtsp::I2CPropertyType)){ new_prop.reset(new rtsp::I2C(0)); reply_payload->AddProperty(new_prop); } else if (property == GetPropertyName(rtsp::UIBCCapabilityPropertyType)){ new_prop.reset(new rtsp::UIBCCapability()); reply_payload->AddProperty(new_prop); } else if (property == GetPropertyName(rtsp::ConnectorTypePropertyType)){ new_prop.reset(new rtsp::ConnectorType(ToSinkMediaManager(manager_)->GetConnectorType())); reply_payload->AddProperty(new_prop); } else if (property == GetPropertyName(rtsp::StandbyResumeCapabilityPropertyType)){ new_prop.reset(new rtsp::StandbyResumeCapability(false)); reply_payload->AddProperty(new_prop); } else { WDS_WARNING("** GET_PARAMETER: Ignoring unsupported property '%s'.", property.c_str()); } } reply->set_payload(std::unique_ptr<Payload>(reply_payload)); return reply; }
void DesktopMediaManager::SendIDRPicture() { WDS_WARNING("Unimplemented IDR picture request"); }