1 /*
2 * Copyright (C) 2015 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
17 #include <errno.h>
18 #include <fcntl.h>
19 #include <signal.h>
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <strings.h>
23
24 #include <android-base/logging.h>
25 #include <android-base/parseint.h>
26
27 #include "adb.h"
28 #include "adb_auth.h"
29 #include "transport.h"
30
31 #include "minadbd/types.h"
32 #include "minadbd_services.h"
33
34 using namespace std::string_literals;
35
main(int argc,char ** argv)36 int main(int argc, char** argv) {
37 android::base::InitLogging(argv, &android::base::StderrLogger);
38 // TODO(xunchang) implement a command parser
39 if ((argc != 3 && argc != 4) || argv[1] != "--socket_fd"s ||
40 (argc == 4 && argv[3] != "--rescue"s)) {
41 LOG(ERROR) << "minadbd has invalid arguments, argc: " << argc;
42 exit(kMinadbdArgumentsParsingError);
43 }
44
45 int socket_fd;
46 if (!android::base::ParseInt(argv[2], &socket_fd)) {
47 LOG(ERROR) << "Failed to parse int in " << argv[2];
48 exit(kMinadbdArgumentsParsingError);
49 }
50 if (fcntl(socket_fd, F_GETFD, 0) == -1) {
51 PLOG(ERROR) << "Failed to get minadbd socket";
52 exit(kMinadbdSocketIOError);
53 }
54 SetMinadbdSocketFd(socket_fd);
55
56 if (argc == 4) {
57 SetMinadbdRescueMode(true);
58 adb_device_banner = "rescue";
59 } else {
60 adb_device_banner = "sideload";
61 }
62
63 signal(SIGPIPE, SIG_IGN);
64
65 // We can't require authentication for sideloading. http://b/22025550.
66 auth_required = false;
67
68 init_transport_registration();
69 usb_init();
70
71 VLOG(ADB) << "Event loop starting";
72 fdevent_loop();
73
74 return 0;
75 }
76