From e31290e1c2eebf70c5ab22091a9520c7a001161e Mon Sep 17 00:00:00 2001 From: mukesh agrawal Date: Mon, 11 Apr 2016 15:52:52 -0700 Subject: wifi service: add utility to check printability When logging data, it's useful to know whether or not the data is plain ASCII. (If so, we can print the data raw. Otherwise, we need to base64 encode the data.) To meet this need: add a utility method to check if a byte buffer contains (only) printable ASCII. BUG=27554392 TEST=unit tests Change-Id: If818bc378c6f146e7517f6ae4bb36b4b5bb8db48 --- .../com/android/server/wifi/util/StringUtil.java | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 service/java/com/android/server/wifi/util/StringUtil.java (limited to 'service') diff --git a/service/java/com/android/server/wifi/util/StringUtil.java b/service/java/com/android/server/wifi/util/StringUtil.java new file mode 100644 index 000000000..813b85b95 --- /dev/null +++ b/service/java/com/android/server/wifi/util/StringUtil.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2016 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 com.android.server.wifi.util; + +/** Basic string utilities */ +public class StringUtil { + static final byte ASCII_PRINTABLE_MIN = ' '; + static final byte ASCII_PRINTABLE_MAX = '~'; + + /** Returns true if-and-only-if |byteArray| can be safely printed as ASCII. */ + public static boolean isAsciiPrintable(byte[] byteArray) { + if (byteArray == null) { + return true; + } + + for (byte b : byteArray) { + switch (b) { + // Control characters which actually are printable. Fall-throughs are deliberate. + case 0x07: // bell ('\a' not recognized in Java) + case '\f': // form feed + case '\n': // new line + case '\t': // horizontal tab + case 0x0b: // vertical tab ('\v' not recognized in Java) + continue; + } + + if (b < ASCII_PRINTABLE_MIN || b > ASCII_PRINTABLE_MAX) { + return false; + } + } + + return true; + } +} -- cgit v1.2.3