ipc: infer socket family from address

Up until now the socket family used by the IPC layer was
hardcoded depending on the plaform (AF_UNIX on Linux/Mac/Android,
TCP on Windows).
Upcoming changes for VMs require more flexibility.
This change make it so that the IPC layer (and hence the env vars
PERFETTO_*_SOCK_NAME) figures out the family from the address.
This has also the benefit that we can now forward the consumer socket
over TCP on a Linux system.

Test: PERFETTO_CONSUMER_SOCK_NAME=127.0.0.1:1234 traced
  PERFETTO_CONSUMER_SOCK_NAME=127.0.0.1:1234 perfetto -c :test -o /dev/null
Bug: 284258446
Change-Id: I4fc9150cc0fe4437dbf2d563be7b969964c3e819
diff --git a/src/base/unix_socket_unittest.cc b/src/base/unix_socket_unittest.cc
index 361c0a1..3210c49 100644
--- a/src/base/unix_socket_unittest.cc
+++ b/src/base/unix_socket_unittest.cc
@@ -1016,6 +1016,17 @@
 }
 #endif  // OS_LINUX || OS_ANDROID
 
+TEST_F(UnixSocketTest, GetSockFamily) {
+  ASSERT_EQ(GetSockFamily(""), SockFamily::kUnspec);
+  ASSERT_EQ(GetSockFamily("/path/to/sock"), SockFamily::kUnix);
+  ASSERT_EQ(GetSockFamily("local_dir_sock"), SockFamily::kUnix);
+  ASSERT_EQ(GetSockFamily("@abstract"), SockFamily::kUnix);
+  ASSERT_EQ(GetSockFamily("0.0.0.0:80"), SockFamily::kInet);
+  ASSERT_EQ(GetSockFamily("127.0.0.1:80"), SockFamily::kInet);
+  ASSERT_EQ(GetSockFamily("[effe::acca]:1234"), SockFamily::kInet6);
+  ASSERT_EQ(GetSockFamily("[::1]:123456"), SockFamily::kInet6);
+}
+
 }  // namespace
 }  // namespace base
 }  // namespace perfetto