diff --git a/Server-Protocol-Buffer/src/main/proto/internal/v2/app_config_android.proto b/Server-Protocol-Buffer/src/main/proto/internal/v2/app_config_android.proto new file mode 100644 index 0000000000000000000000000000000000000000..6f6d21c22cb69a428d9b4c98239c4a7c5a6e29fd --- /dev/null +++ b/Server-Protocol-Buffer/src/main/proto/internal/v2/app_config_android.proto @@ -0,0 +1,50 @@ +syntax = "proto3"; +package de.rki.coronawarnapp.server.protocols.internal.v2; +import "internal/v2/app_features.proto"; +import "internal/v2/risk_calculation_parameters.proto"; +import "internal/v2/key_download_parameters.proto"; +import "internal/v2/exposure_detection_parameters.proto"; + +message ApplicationConfigurationAndroid { + + // Android apps are versioned by Version Code and not by Semantic Versioning + int64 minVersionCode = 1; + int64 latestVersionCode = 2; + + AppFeatures appFeatures = 3; + + repeated string supportedCountries = 4; + + KeyDownloadParametersAndroid keyDownloadParameters = 5; + + ExposureDetectionParametersAndroid exposureDetectionParameters = 6; + + RiskCalculationParameters riskCalculationParameters = 7; + + DiagnosisKeysDataMapping diagnosisKeysDataMapping = 8; + DailySummariesConfig dailySummariesConfig = 9; +} + +message DiagnosisKeysDataMapping { + + map<int32, int32> daysSinceOnsetToInfectiousness = 1; + + int32 infectiousnessWhenDaysSinceOnsetMissing = 2; + + int32 reportTypeWhenMissing = 3; +} + +message DailySummariesConfig { + + repeated int32 attenuationBucketThresholdDb = 1; + + repeated double attenuationBucketWeights = 2; + + int32 daysSinceExposureThreshold = 3; + + map<int32, double> infectiousnessWeights = 4; + + double minimumWindowScore = 5; + + map<int32, double> reportTypeWeights = 6; +} \ No newline at end of file diff --git a/Server-Protocol-Buffer/src/main/proto/internal/v2/app_features.proto b/Server-Protocol-Buffer/src/main/proto/internal/v2/app_features.proto new file mode 100644 index 0000000000000000000000000000000000000000..f53be3812f37d45a8d719b0585e4e839ca2068c1 --- /dev/null +++ b/Server-Protocol-Buffer/src/main/proto/internal/v2/app_features.proto @@ -0,0 +1,11 @@ +syntax = "proto3"; +package de.rki.coronawarnapp.server.protocols.internal.v2; + +message AppFeatures { + repeated AppFeature appFeatures = 1; +} + +message AppFeature { + string label = 1; + int32 value = 2; +} \ No newline at end of file diff --git a/Server-Protocol-Buffer/src/main/proto/internal/v2/exposure_detection_parameters.proto b/Server-Protocol-Buffer/src/main/proto/internal/v2/exposure_detection_parameters.proto new file mode 100644 index 0000000000000000000000000000000000000000..754bd769abdec32ba1be1cf532668ee03dde19f5 --- /dev/null +++ b/Server-Protocol-Buffer/src/main/proto/internal/v2/exposure_detection_parameters.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; +package de.rki.coronawarnapp.server.protocols.internal.v2; + +message ExpsureDetectionParametersIOS { + + int32 maxExposureDetectionsPerInterval = 1; +} + +message ExposureDetectionParametersAndroid { + + int32 maxExposureDetectionsPerInterval = 1; + + int32 overallTimeoutInSeconds = 2; +} \ No newline at end of file diff --git a/Server-Protocol-Buffer/src/main/proto/internal/v2/key_download_parameters.proto b/Server-Protocol-Buffer/src/main/proto/internal/v2/key_download_parameters.proto new file mode 100644 index 0000000000000000000000000000000000000000..4cf97b977589c0b7f8786ecb9d28acd627633331 --- /dev/null +++ b/Server-Protocol-Buffer/src/main/proto/internal/v2/key_download_parameters.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; +package de.rki.coronawarnapp.server.protocols.internal.v2; + +message KeyDownloadParametersIOS { + + repeated DayPackageMetadata cachedDayPackagesToUpdateOnETagMismatch = 1; + repeated HourPackageMetadata cachedHourPackagesToUpdateOnETagMismatch = 2; +} + +message KeyDownloadParametersAndroid { + + repeated DayPackageMetadata cachedDayPackagesToUpdateOnETagMismatch = 1; + repeated HourPackageMetadata cachedHourPackagesToUpdateOnETagMismatch = 2; + + int32 downloadTimeoutInSeconds = 3; + + int32 overallTimeoutInSeconds = 4; +} + +message DayPackageMetadata { + string region = 1; + string date = 2; + string etag = 3; +} + +message HourPackageMetadata { + string region = 1; + string date = 2; + int32 hour = 3; + string etag = 4; +} \ No newline at end of file diff --git a/Server-Protocol-Buffer/src/main/proto/internal/v2/risk_calculation_parameters.proto b/Server-Protocol-Buffer/src/main/proto/internal/v2/risk_calculation_parameters.proto new file mode 100644 index 0000000000000000000000000000000000000000..2618917a09169079503e8f8fa44243a47be64e8e --- /dev/null +++ b/Server-Protocol-Buffer/src/main/proto/internal/v2/risk_calculation_parameters.proto @@ -0,0 +1,63 @@ +syntax = "proto3"; +package de.rki.coronawarnapp.server.protocols.internal.v2; + +message RiskCalculationParameters { + + repeated MinutesAtAttenuationFilter minutesAtAttenuationFilters = 1; + + repeated TrlFilter trlFilters = 2; + + repeated MinutesAtAttenuationWeight minutesAtAttenuationWeights = 3; + + repeated NormalizedTimeToRiskLevelMapping normalizedTimePerEWToRiskLevelMapping = 4; + + repeated NormalizedTimeToRiskLevelMapping normalizedTimePerDayToRiskLevelMapping = 5; + + TransmissionRiskLevelEncoding trlEncoding = 6; + + double transmissionRiskLevelMultiplier = 7; +} + +message Range { + // The lower limit of the range + double min = 1; + // True if `min` is not part of the range, false otherwise + bool minExclusive = 2; + // The upper limit of the range + double max = 3; + // True if `max` is not part of the range, false otherwise + bool maxExclusive = 4; +} + +message MinutesAtAttenuationFilter { + Range attenuationRange = 1; + Range dropIfMinutesInRange = 2; +} + +message TrlFilter { + Range dropIfTrlInRange = 1; +} + +message MinutesAtAttenuationWeight { + Range attenuationRange = 1; + double weight = 2; +} + +message NormalizedTimeToRiskLevelMapping { + Range normalizedTimeRange = 1; + enum RiskLevel { + UNSPECIFIED = 0; + LOW = 1; + HIGH = 2; + } + RiskLevel riskLevel = 2; +} + +message TransmissionRiskLevelEncoding { + int32 infectiousnessOffsetStandard = 1; + int32 infectiousnessOffsetHigh = 2; + int32 reportTypeOffsetRecursive = 3; + int32 reportTypeOffsetSelfReport = 4; + int32 reportTypeOffsetConfirmedClinicalDiagnosis = 5; + int32 reportTypeOffsetConfirmedTest = 6; +} \ No newline at end of file diff --git a/Server-Protocol-Buffer/src/main/proto/internal/v2/semantic_version.proto b/Server-Protocol-Buffer/src/main/proto/internal/v2/semantic_version.proto new file mode 100644 index 0000000000000000000000000000000000000000..a5950c84435ab89bc4271d209a38a2632b617e4c --- /dev/null +++ b/Server-Protocol-Buffer/src/main/proto/internal/v2/semantic_version.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; +package de.rki.coronawarnapp.server.protocols.internal.v2; + +message SemanticVersion { + uint32 major = 1; + uint32 minor = 2; + uint32 patch = 3; +} \ No newline at end of file