1a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline/* 2a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * Copyright (C) 2016 The Android Open Source Project 3a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * 4a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * Licensed under the Apache License, Version 2.0 (the "License"); 5a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * you may not use this file except in compliance with the License. 6a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * You may obtain a copy of the License at 7a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * 8a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * http://www.apache.org/licenses/LICENSE-2.0 9a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * 10a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * Unless required by applicable law or agreed to in writing, software 11a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * distributed under the License is distributed on an "AS IS" BASIS, 12a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * See the License for the specific language governing permissions and 14a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * limitations under the License. 15a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline */ 16a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline 17a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Klinepackage android.net.metrics; 18a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline 19a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Klineimport android.annotation.SystemApi; 20a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Klineimport android.os.Parcel; 21a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Klineimport android.os.Parcelable; 225df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichiimport android.util.SparseArray; 235df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichi 245df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichiimport com.android.internal.util.MessageUtils; 25a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline 26a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline/** 27a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline * {@hide} 28a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline */ 29a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline@SystemApi 30cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichipublic final class ValidationProbeEvent extends IpConnectivityEvent implements Parcelable { 31cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi 32c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti public static final int PROBE_DNS = 0; 33c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti public static final int PROBE_HTTP = 1; 34c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti public static final int PROBE_HTTPS = 2; 35c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti public static final int PROBE_PAC = 3; 36c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti 37c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti public static final int DNS_FAILURE = 0; 38c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti public static final int DNS_SUCCESS = 1; 39cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi 40a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline public final int netId; 41a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline public final long durationMs; 42cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi public final int probeType; 43a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline public final int returnCode; 44a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline 45cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi private ValidationProbeEvent(int netId, long durationMs, int probeType, int returnCode) { 46a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline this.netId = netId; 47a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline this.durationMs = durationMs; 48cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi this.probeType = probeType; 49a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline this.returnCode = returnCode; 50a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline } 51a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline 52cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi private ValidationProbeEvent(Parcel in) { 53a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline netId = in.readInt(); 54a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline durationMs = in.readLong(); 55cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi probeType = in.readInt(); 56a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline returnCode = in.readInt(); 57a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline } 58a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline 59a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline public void writeToParcel(Parcel out, int flags) { 60a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline out.writeInt(netId); 61a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline out.writeLong(durationMs); 62cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi out.writeInt(probeType); 63a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline out.writeInt(returnCode); 64a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline } 65a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline 66a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline public int describeContents() { 67a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline return 0; 68a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline } 69a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline 70cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi public static final Parcelable.Creator<ValidationProbeEvent> CREATOR 71cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi = new Parcelable.Creator<ValidationProbeEvent>() { 72cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi public ValidationProbeEvent createFromParcel(Parcel in) { 73cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi return new ValidationProbeEvent(in); 74a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline } 75a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline 76cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi public ValidationProbeEvent[] newArray(int size) { 77cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi return new ValidationProbeEvent[size]; 78a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline } 79a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline }; 80a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline 81c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti /** @hide */ 82c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti public static String getProbeName(int probeType) { 83c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti return Decoder.constants.get(probeType, "PROBE_???"); 84c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti } 85c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti 86cc92c6e87773df9d5a84922066716ae9bb09cd6dHugo Benichi public static void logEvent(int netId, long durationMs, int probeType, int returnCode) { 8761cbccc2bf7983b50e7a7f1fdb1858caeab6fd96Hugo Benichi logEvent(new ValidationProbeEvent(netId, durationMs, probeType, returnCode)); 885df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichi } 895df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichi 905df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichi @Override 915df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichi public String toString() { 925df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichi return String.format("ValidationProbeEvent(%d, %s:%d, %dms)", 93c5be12e7ac43cbe8c68219fa702c6fb7f06183c3Lorenzo Colitti netId, getProbeName(probeType), returnCode, durationMs); 945df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichi } 955df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichi 965df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichi final static class Decoder { 975df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichi static final SparseArray<String> constants = MessageUtils.findMessageNames( 985df9d729f6c78215f287701d7e136dfc922e2bd3Hugo Benichi new Class[]{ValidationProbeEvent.class}, new String[]{"PROBE_"}); 99a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline } 100a488c23dd5c9e024fb8ec702cee722916cdeaf0eErik Kline}; 101