Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2019 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 | |
Hansong Zhang | 30bf869 | 2019-05-02 15:25:54 -0700 | [diff] [blame] | 17 | #include "stack_manager.h" |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 18 | |
Hansong Zhang | a443262 | 2019-09-04 12:25:34 -0700 | [diff] [blame] | 19 | #include <netinet/in.h> |
| 20 | #include <sys/socket.h> |
| 21 | #include <sys/types.h> |
Hansong Zhang | 663ee01 | 2019-05-03 15:06:24 -0700 | [diff] [blame] | 22 | #include <unistd.h> |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 23 | #include <csignal> |
Hansong Zhang | 663ee01 | 2019-05-03 15:06:24 -0700 | [diff] [blame] | 24 | #include <cstring> |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 25 | #include <string> |
| 26 | #include <thread> |
| 27 | |
Hansong Zhang | 30bf869 | 2019-05-02 15:25:54 -0700 | [diff] [blame] | 28 | #include "facade/grpc_root_server.h" |
| 29 | #include "grpc/grpc_module.h" |
| 30 | #include "hal/hci_hal.h" |
| 31 | #include "hal/hci_hal_host_rootcanal.h" |
| 32 | #include "hal/snoop_logger.h" |
Zach Johnson | e0e158c | 2019-04-26 11:57:05 -0700 | [diff] [blame] | 33 | |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 34 | using ::bluetooth::hal::HciHalHostRootcanalConfig; |
Zach Johnson | e0e158c | 2019-04-26 11:57:05 -0700 | [diff] [blame] | 35 | using ::bluetooth::StackManager; |
| 36 | using ::bluetooth::grpc::GrpcModule; |
| 37 | using ::bluetooth::ModuleList; |
Zach Johnson | 7ea2068 | 2019-04-29 14:48:42 -0700 | [diff] [blame] | 38 | using ::bluetooth::os::Thread; |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 39 | |
| 40 | namespace { |
Hansong Zhang | 30bf869 | 2019-05-02 15:25:54 -0700 | [diff] [blame] | 41 | ::bluetooth::facade::GrpcRootServer grpc_root_server; |
Zach Johnson | e0e158c | 2019-04-26 11:57:05 -0700 | [diff] [blame] | 42 | |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 43 | void interrupt_handler(int) { |
Hansong Zhang | 30bf869 | 2019-05-02 15:25:54 -0700 | [diff] [blame] | 44 | grpc_root_server.StopServer(); |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 45 | } |
| 46 | } // namespace |
| 47 | |
| 48 | // The entry point for the binary with libbluetooth + facades |
| 49 | int main(int argc, const char** argv) { |
Hansong Zhang | 30bf869 | 2019-05-02 15:25:54 -0700 | [diff] [blame] | 50 | int root_server_port = 8897; |
| 51 | int grpc_port = 8899; |
Hansong Zhang | a443262 | 2019-09-04 12:25:34 -0700 | [diff] [blame] | 52 | int signal_port = 8895; |
Zach Johnson | e0e158c | 2019-04-26 11:57:05 -0700 | [diff] [blame] | 53 | |
Hansong Zhang | 30bf869 | 2019-05-02 15:25:54 -0700 | [diff] [blame] | 54 | const std::string arg_grpc_root_server_port = "--root-server-port="; |
| 55 | const std::string arg_grpc_server_port = "--grpc-port="; |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 56 | const std::string arg_rootcanal_port = "--rootcanal-port="; |
Hansong Zhang | a443262 | 2019-09-04 12:25:34 -0700 | [diff] [blame] | 57 | const std::string arg_signal_port = "--signal-port="; |
Hansong Zhang | 5158bf5 | 2019-04-30 14:52:43 -0700 | [diff] [blame] | 58 | const std::string arg_btsnoop_path = "--btsnoop="; |
| 59 | std::string btsnoop_path; |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 60 | for (int i = 1; i < argc; i++) { |
| 61 | std::string arg = argv[i]; |
Hansong Zhang | 30bf869 | 2019-05-02 15:25:54 -0700 | [diff] [blame] | 62 | if (arg.find(arg_grpc_root_server_port) == 0) { |
| 63 | auto port_number = arg.substr(arg_grpc_root_server_port.size()); |
| 64 | root_server_port = std::stoi(port_number); |
| 65 | } |
| 66 | if (arg.find(arg_grpc_server_port) == 0) { |
| 67 | auto port_number = arg.substr(arg_grpc_server_port.size()); |
| 68 | grpc_port = std::stoi(port_number); |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 69 | } |
| 70 | if (arg.find(arg_rootcanal_port) == 0) { |
| 71 | auto port_number = arg.substr(arg_rootcanal_port.size()); |
| 72 | HciHalHostRootcanalConfig::Get()->SetPort(std::stoi(port_number)); |
| 73 | } |
Hansong Zhang | 5158bf5 | 2019-04-30 14:52:43 -0700 | [diff] [blame] | 74 | if (arg.find(arg_btsnoop_path) == 0) { |
| 75 | btsnoop_path = arg.substr(arg_btsnoop_path.size()); |
| 76 | ::bluetooth::hal::SnoopLogger::SetFilePath(btsnoop_path); |
| 77 | } |
Hansong Zhang | a443262 | 2019-09-04 12:25:34 -0700 | [diff] [blame] | 78 | if (arg.find(arg_signal_port) == 0) { |
| 79 | auto port_number = arg.substr(arg_signal_port.size()); |
| 80 | signal_port = std::stoi(port_number); |
| 81 | } |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 82 | } |
| 83 | |
Zach Johnson | e0e158c | 2019-04-26 11:57:05 -0700 | [diff] [blame] | 84 | signal(SIGINT, interrupt_handler); |
Hansong Zhang | 30bf869 | 2019-05-02 15:25:54 -0700 | [diff] [blame] | 85 | grpc_root_server.StartServer("0.0.0.0", root_server_port, grpc_port); |
Hansong Zhang | a443262 | 2019-09-04 12:25:34 -0700 | [diff] [blame] | 86 | int tester_signal_socket = socket(AF_INET, SOCK_STREAM, 0); |
| 87 | struct sockaddr_in addr; |
| 88 | memset(&addr, 0, sizeof(addr)); |
| 89 | addr.sin_family = AF_INET; |
| 90 | addr.sin_port = htons(signal_port); |
| 91 | addr.sin_addr.s_addr = htonl(INADDR_ANY); |
| 92 | connect(tester_signal_socket, (sockaddr*)&addr, sizeof(addr)); |
| 93 | close(tester_signal_socket); |
Hansong Zhang | 30bf869 | 2019-05-02 15:25:54 -0700 | [diff] [blame] | 94 | auto wait_thread = std::thread([] { grpc_root_server.RunGrpcLoop(); }); |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 95 | wait_thread.join(); |
Zach Johnson | e0e158c | 2019-04-26 11:57:05 -0700 | [diff] [blame] | 96 | |
Hansong Zhang | 29f9900 | 2019-04-24 17:25:42 +0000 | [diff] [blame] | 97 | return 0; |
| 98 | } |