1 /* 2 * Copyright (C) 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.adservices.service.measurement.registration; 18 19 20 21 /** POJO for storing source and trigger fetcher status */ 22 public class AsyncFetchStatus { 23 public enum ResponseStatus { 24 UNKNOWN, 25 SUCCESS, 26 SERVER_UNAVAILABLE, 27 NETWORK_ERROR, 28 INVALID_URL, 29 HEADER_SIZE_LIMIT_EXCEEDED 30 } 31 32 public enum EntityStatus { 33 UNKNOWN, 34 SUCCESS, 35 HEADER_MISSING, 36 HEADER_ERROR, 37 PARSING_ERROR, 38 VALIDATION_ERROR, 39 INVALID_ENROLLMENT, 40 STORAGE_ERROR 41 } 42 43 private ResponseStatus mResponseStatus; 44 45 private EntityStatus mEntityStatus; 46 47 private long mResponseSize; 48 49 private long mRegistrationDelay; 50 51 private boolean mIsRedirectError; 52 private int mRetryCount; 53 private boolean mIsRedirectOnly; 54 private boolean mIsPARequest; 55 private int mNumDeletedEntities; 56 private boolean mIsEventLevelEpsilonConfigured; 57 private boolean mIsTriggerAggregatableValueFiltersConfigured; 58 private boolean mIsTriggerFilteringIdConfigured; 59 private boolean mIsTriggerContextIdConfigured; 60 AsyncFetchStatus()61 public AsyncFetchStatus() { 62 mResponseStatus = ResponseStatus.UNKNOWN; 63 mEntityStatus = EntityStatus.UNKNOWN; 64 mIsRedirectError = false; 65 mResponseSize = 0L; 66 mRegistrationDelay = 0L; 67 mIsPARequest = false; 68 mIsEventLevelEpsilonConfigured = false; 69 mIsTriggerAggregatableValueFiltersConfigured = false; 70 mIsTriggerFilteringIdConfigured = false; 71 mIsTriggerContextIdConfigured = false; 72 } 73 74 /** Get the status of a communication with an Ad Tech server. */ getResponseStatus()75 public ResponseStatus getResponseStatus() { 76 return mResponseStatus; 77 } 78 79 /** 80 * Set the status of a communication with an Ad Tech server. 81 * 82 * @param status a {@link ResponseStatus} that is used up the call stack to determine errors in 83 * the Ad tech server during source and trigger fetching. 84 */ setResponseStatus(ResponseStatus status)85 public void setResponseStatus(ResponseStatus status) { 86 mResponseStatus = status; 87 } 88 89 /** Get entity status */ getEntityStatus()90 public EntityStatus getEntityStatus() { 91 return mEntityStatus; 92 } 93 94 /** Set entity status */ setEntityStatus(EntityStatus entityStatus)95 public void setEntityStatus(EntityStatus entityStatus) { 96 mEntityStatus = entityStatus; 97 } 98 99 /** Get response header size. */ getResponseSize()100 public long getResponseSize() { 101 return mResponseSize; 102 } 103 104 /** Set response header size. */ setResponseSize(long responseSize)105 public void setResponseSize(long responseSize) { 106 mResponseSize = responseSize; 107 } 108 109 /** Get registration delay. */ getRegistrationDelay()110 public long getRegistrationDelay() { 111 return mRegistrationDelay; 112 } 113 114 /** Set registration delay. */ setRegistrationDelay(long registrationDelay)115 public void setRegistrationDelay(long registrationDelay) { 116 mRegistrationDelay = registrationDelay; 117 } 118 119 /** Get redirect error status. */ isRedirectError()120 public boolean isRedirectError() { 121 return mIsRedirectError; 122 } 123 124 /** Set redirect error status. */ setRedirectError(boolean isRedirectError)125 public void setRedirectError(boolean isRedirectError) { 126 mIsRedirectError = isRedirectError; 127 } 128 129 /** Get retry count. */ getRetryCount()130 public int getRetryCount() { 131 return mRetryCount; 132 } 133 134 /** Set retry count. */ setRetryCount(int retryCount)135 public void setRetryCount(int retryCount) { 136 mRetryCount = retryCount; 137 } 138 139 /** Get redirect status. */ isRedirectOnly()140 public boolean isRedirectOnly() { 141 return mIsRedirectOnly; 142 } 143 144 /** Set redirect status. */ setRedirectOnlyStatus(boolean isRedirectOnly)145 public void setRedirectOnlyStatus(boolean isRedirectOnly) { 146 mIsRedirectOnly = isRedirectOnly; 147 } 148 149 /** Get PA request status. */ isPARequest()150 public boolean isPARequest() { 151 return mIsPARequest; 152 } 153 154 /** Set PA request status. */ setPARequestStatus(boolean isPARequest)155 public void setPARequestStatus(boolean isPARequest) { 156 mIsPARequest = isPARequest; 157 } 158 159 /** Set number of entities deleted. */ incrementNumDeletedEntities(int numDeletedEntities)160 public void incrementNumDeletedEntities(int numDeletedEntities) { 161 mNumDeletedEntities += numDeletedEntities; 162 } 163 164 /** Returns {@code true} if Sources can have epsilon configured. */ isEventLevelEpsilonConfigured()165 public boolean isEventLevelEpsilonConfigured() { 166 return mIsEventLevelEpsilonConfigured; 167 } 168 169 /** Sets event level epsilon configure status. */ setIsEventLevelEpsilonConfigured(boolean isEventLevelEpsilonConfigured)170 public void setIsEventLevelEpsilonConfigured(boolean isEventLevelEpsilonConfigured) { 171 mIsEventLevelEpsilonConfigured = isEventLevelEpsilonConfigured; 172 } 173 174 /** Returns {@code true} if Triggers can have filters configured in aggregatable_values. */ isTriggerAggregatableValueFiltersConfigured()175 public boolean isTriggerAggregatableValueFiltersConfigured() { 176 return mIsTriggerAggregatableValueFiltersConfigured; 177 } 178 179 /** Sets the aggregatable value filters configure status. */ setIsTriggerAggregatableValueFiltersConfigured( boolean isTriggerAggregatableValueFiltersConfigured)180 public void setIsTriggerAggregatableValueFiltersConfigured( 181 boolean isTriggerAggregatableValueFiltersConfigured) { 182 mIsTriggerAggregatableValueFiltersConfigured = isTriggerAggregatableValueFiltersConfigured; 183 } 184 185 /** Returns {@code true} if Triggers can have filtering_id configured in aggregatable_values. */ isTriggerFilteringIdConfigured()186 public boolean isTriggerFilteringIdConfigured() { 187 return mIsTriggerFilteringIdConfigured; 188 } 189 190 /** Sets the aggregatable value filtering id configure status. */ setIsTriggerFilteringIdConfigured(boolean isTriggerFilteringIdConfigured)191 public void setIsTriggerFilteringIdConfigured(boolean isTriggerFilteringIdConfigured) { 192 mIsTriggerFilteringIdConfigured = isTriggerFilteringIdConfigured; 193 } 194 195 /** Returns {@code true} if the trigger has a trigger context ID set. */ isTriggerContextIdConfigured()196 public boolean isTriggerContextIdConfigured() { 197 return mIsTriggerContextIdConfigured; 198 } 199 200 /** Sets the trigger context ID configure status. */ setIsTriggerContextIdConfigured(boolean isTriggerContextIdConfigured)201 public void setIsTriggerContextIdConfigured(boolean isTriggerContextIdConfigured) { 202 mIsTriggerContextIdConfigured = isTriggerContextIdConfigured; 203 } 204 205 /** Returns true if request is successful. */ isRequestSuccess()206 public boolean isRequestSuccess() { 207 return mResponseStatus == ResponseStatus.SUCCESS; 208 } 209 210 /** Returns number of existing entities deleted to accommodate the new registration. */ getNumDeletedEntities()211 public int getNumDeletedEntities() { 212 return mNumDeletedEntities; 213 } 214 215 /** Returns true if request can be retried. */ canRetry()216 public boolean canRetry() { 217 return mResponseStatus == ResponseStatus.NETWORK_ERROR 218 || mResponseStatus == ResponseStatus.SERVER_UNAVAILABLE; 219 } 220 } 221