/* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net; import android.net.ipmemorystore.Blob; import android.net.ipmemorystore.NetworkAttributesParcelable; import android.net.ipmemorystore.IOnBlobRetrievedListener; import android.net.ipmemorystore.IOnL2KeyResponseListener; import android.net.ipmemorystore.IOnNetworkAttributesRetrievedListener; import android.net.ipmemorystore.IOnNetworkEventCountRetrievedListener; import android.net.ipmemorystore.IOnSameL3NetworkResponseListener; import android.net.ipmemorystore.IOnStatusAndCountListener; import android.net.ipmemorystore.IOnStatusListener; /** {@hide} */ oneway interface IIpMemoryStore { /** * Store network attributes for a given L2 key. * If L2Key is null, choose automatically from the attributes ; passing null is equivalent to * calling findL2Key with the attributes and storing in the returned value. * * @param l2Key The L2 key for the L2 network. Clients that don't know or care about the L2 * key and only care about grouping can pass a unique ID here like the ones * generated by {@code java.util.UUID.randomUUID()}, but keep in mind the low * relevance of such a network will lead to it being evicted soon if it's not * refreshed. Use findL2Key to try and find a similar L2Key to these attributes. * @param attributes The attributes for this network. * @param listener A listener that will be invoked to inform of the completion of this call, * or null if the client is not interested in learning about success/failure. * @return (through the listener) A status to indicate success or failure. */ void storeNetworkAttributes(String l2Key, in NetworkAttributesParcelable attributes, IOnStatusListener listener); /** * Store a binary blob associated with an L2 key and a name. * * @param l2Key The L2 key for this network. * @param clientId The ID of the client. * @param name The name of this data. * @param data The data to store. * @param listener A listener to inform of the completion of this call, or null if the client * is not interested in learning about success/failure. * @return (through the listener) A status to indicate success or failure. */ void storeBlob(String l2Key, String clientId, String name, in Blob data, IOnStatusListener listener); /** * Returns the best L2 key associated with the attributes. * * This will find a record that would be in the same group as the passed attributes. This is * useful to choose the key for storing a sample or private data when the L2 key is not known. * If multiple records are group-close to these attributes, the closest match is returned. * If multiple records have the same closeness, the one with the smaller (unicode codepoint * order) L2 key is returned. * If no record matches these attributes, null is returned. * * @param attributes The attributes of the network to find. * @param listener The listener that will be invoked to return the answer. * @return (through the listener) The L2 key if one matched, or null. */ void findL2Key(in NetworkAttributesParcelable attributes, IOnL2KeyResponseListener listener); /** * Returns whether, to the best of the store's ability to tell, the two specified L2 keys point * to the same L3 network. Group-closeness is used to determine this. * * @param l2Key1 The key for the first network. * @param l2Key2 The key for the second network. * @param listener The listener that will be invoked to return the answer. * @return (through the listener) A SameL3NetworkResponse containing the answer and confidence. */ void isSameNetwork(String l2Key1, String l2Key2, IOnSameL3NetworkResponseListener listener); /** * Retrieve the network attributes for a key. * If no record is present for this key, this will return null attributes. * * @param l2Key The key of the network to query. * @param listener The listener that will be invoked to return the answer. * @return (through the listener) The network attributes and the L2 key associated with * the query. */ void retrieveNetworkAttributes(String l2Key, IOnNetworkAttributesRetrievedListener listener); /** * Retrieve previously stored private data. * If no data was stored for this L2 key and name this will return null. * * @param l2Key The L2 key. * @param clientId The id of the client that stored this data. * @param name The name of the data. * @param listener The listener that will be invoked to return the answer. * @return (through the listener) The private data (or null), with the L2 key * and the name of the data associated with the query. */ void retrieveBlob(String l2Key, String clientId, String name, IOnBlobRetrievedListener listener); /** * Delete all data because a factory reset operation is in progress. */ void factoryReset(); /** * Delete a single entry. * * @param l2key The L2 key of the entry to delete. * @param needWipe Whether the data must be wiped from disk immediately. This makes the * operation vastly more expensive as the database files will have to be copied * and created again from the old files (see sqlite3 VACUUM operation for * details) and makes no functional difference; only pass true if security or * privacy demands this data must be removed from disk immediately. * Note that this can fail for storage reasons. The passed listener will then * receive an appropriate error status with the number of deleted rows. * @param listener A listener that will be invoked to inform of the completion of this call, * or null if the client is not interested in learning about success/failure. * @return (through the listener) A status to indicate success and the number of deleted records */ void delete(String l2Key, boolean needWipe, IOnStatusAndCountListener listener); /** * Delete all entries in a cluster. * * This method will delete all entries in the memory store that have the cluster attribute * passed as an argument. * * @param cluster The cluster to delete. * @param needWipe Whether the data must be wiped from disk immediately. This makes the * operation vastly more expensive as the database files will have to be copied * and created again from the old files (see sqlite3 VACUUM operation for * details) and makes no functional difference; only pass true if security or * privacy demands this data must be removed from disk immediately. * Note that this can fail for storage reasons. The passed listener will then * receive an appropriate error status with the number of deleted rows. * @param listener A listener that will be invoked to inform of the completion of this call, * or null if the client is not interested in learning about success/failure. * @return (through the listener) A status to indicate success and the number of deleted records */ void deleteCluster(String cluster, boolean needWipe, IOnStatusAndCountListener listener); /** * The network event types related to Neighbor Unreachability Detection(NUD) probe failure * including probe fails due to L2 roam, low Wi-Fi RSSI checks, periodic kernel organic checks, * or a neighbor's MAC address changing during a probe. */ const int NETWORK_EVENT_NUD_FAILURE_ROAM = 0; const int NETWORK_EVENT_NUD_FAILURE_CONFIRM = 1; const int NETWORK_EVENT_NUD_FAILURE_ORGANIC = 2; const int NETWORK_EVENT_NUD_FAILURE_MAC_ADDRESS_CHANGED = 3; /** * Store a specific network event to database for a given cluster. * * @param cluster The cluster representing a notion of network group (e.g., BSSIDs with the * same SSID). * @param timestamp The timestamp {@link System.currentTimeMillis} when a specific network * event occurred. * @param expiry The timestamp {@link System.currentTimeMillis} when a specific network * event stored in the database expires, e.g. it might be one week from now. * @param eventType One of the NETWORK_EVENT constants above. * @param listener A listener that will be invoked to inform of the completion of this call. * @return (through the listener) A status to indicate success or failure. */ void storeNetworkEvent(String cluster, long timestamp, long expiry, int eventType, IOnStatusListener listener); /** * Retrieve the specific network event counts for a given cluster and event type since one or * more timestamps in the past. * * @param cluster The cluster to query. * @param sinceTimes An array of timestamps in the past. The query will return an array of * equal size. Each element in the array will contain the number of network * events between the corresponding timestamp and the current time, e.g. query * since the last week and/or the last day. * @param eventTypes An array of network event types to query, which can be one or more of the * above NETWORK_EVENT constants. * @param listener The listener that will be invoked to return the answer. * @return (through the listener) The event counts associated with the query, or an empty array * if the query failed. */ void retrieveNetworkEventCount(String cluster, in long[] sinceTimes, in int[] eventTypes, IOnNetworkEventCountRetrievedListener listener); }