1*e7c364b6SAndroid Build Coastguard Worker /*
2*e7c364b6SAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project
3*e7c364b6SAndroid Build Coastguard Worker *
4*e7c364b6SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*e7c364b6SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*e7c364b6SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*e7c364b6SAndroid Build Coastguard Worker *
8*e7c364b6SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*e7c364b6SAndroid Build Coastguard Worker *
10*e7c364b6SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*e7c364b6SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*e7c364b6SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e7c364b6SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*e7c364b6SAndroid Build Coastguard Worker * limitations under the License.
15*e7c364b6SAndroid Build Coastguard Worker */
16*e7c364b6SAndroid Build Coastguard Worker
17*e7c364b6SAndroid Build Coastguard Worker #include <errno.h>
18*e7c364b6SAndroid Build Coastguard Worker #include <fcntl.h>
19*e7c364b6SAndroid Build Coastguard Worker #include <signal.h>
20*e7c364b6SAndroid Build Coastguard Worker #include <stdio.h>
21*e7c364b6SAndroid Build Coastguard Worker #include <stdlib.h>
22*e7c364b6SAndroid Build Coastguard Worker #include <strings.h>
23*e7c364b6SAndroid Build Coastguard Worker
24*e7c364b6SAndroid Build Coastguard Worker #include <android-base/logging.h>
25*e7c364b6SAndroid Build Coastguard Worker #include <android-base/parseint.h>
26*e7c364b6SAndroid Build Coastguard Worker
27*e7c364b6SAndroid Build Coastguard Worker #include "adb.h"
28*e7c364b6SAndroid Build Coastguard Worker #include "adb_auth.h"
29*e7c364b6SAndroid Build Coastguard Worker #include "transport.h"
30*e7c364b6SAndroid Build Coastguard Worker
31*e7c364b6SAndroid Build Coastguard Worker #include "minadbd/types.h"
32*e7c364b6SAndroid Build Coastguard Worker #include "minadbd_services.h"
33*e7c364b6SAndroid Build Coastguard Worker
34*e7c364b6SAndroid Build Coastguard Worker using namespace std::string_literals;
35*e7c364b6SAndroid Build Coastguard Worker
main(int argc,char ** argv)36*e7c364b6SAndroid Build Coastguard Worker int main(int argc, char** argv) {
37*e7c364b6SAndroid Build Coastguard Worker android::base::InitLogging(argv, &android::base::StderrLogger);
38*e7c364b6SAndroid Build Coastguard Worker // TODO(xunchang) implement a command parser
39*e7c364b6SAndroid Build Coastguard Worker if ((argc != 3 && argc != 4) || argv[1] != "--socket_fd"s ||
40*e7c364b6SAndroid Build Coastguard Worker (argc == 4 && argv[3] != "--rescue"s)) {
41*e7c364b6SAndroid Build Coastguard Worker LOG(ERROR) << "minadbd has invalid arguments, argc: " << argc;
42*e7c364b6SAndroid Build Coastguard Worker exit(kMinadbdArgumentsParsingError);
43*e7c364b6SAndroid Build Coastguard Worker }
44*e7c364b6SAndroid Build Coastguard Worker
45*e7c364b6SAndroid Build Coastguard Worker int socket_fd;
46*e7c364b6SAndroid Build Coastguard Worker if (!android::base::ParseInt(argv[2], &socket_fd)) {
47*e7c364b6SAndroid Build Coastguard Worker LOG(ERROR) << "Failed to parse int in " << argv[2];
48*e7c364b6SAndroid Build Coastguard Worker exit(kMinadbdArgumentsParsingError);
49*e7c364b6SAndroid Build Coastguard Worker }
50*e7c364b6SAndroid Build Coastguard Worker if (fcntl(socket_fd, F_GETFD, 0) == -1) {
51*e7c364b6SAndroid Build Coastguard Worker PLOG(ERROR) << "Failed to get minadbd socket";
52*e7c364b6SAndroid Build Coastguard Worker exit(kMinadbdSocketIOError);
53*e7c364b6SAndroid Build Coastguard Worker }
54*e7c364b6SAndroid Build Coastguard Worker SetMinadbdSocketFd(socket_fd);
55*e7c364b6SAndroid Build Coastguard Worker
56*e7c364b6SAndroid Build Coastguard Worker if (argc == 4) {
57*e7c364b6SAndroid Build Coastguard Worker SetMinadbdRescueMode(true);
58*e7c364b6SAndroid Build Coastguard Worker adb_device_banner = "rescue";
59*e7c364b6SAndroid Build Coastguard Worker } else {
60*e7c364b6SAndroid Build Coastguard Worker adb_device_banner = "sideload";
61*e7c364b6SAndroid Build Coastguard Worker }
62*e7c364b6SAndroid Build Coastguard Worker
63*e7c364b6SAndroid Build Coastguard Worker signal(SIGPIPE, SIG_IGN);
64*e7c364b6SAndroid Build Coastguard Worker
65*e7c364b6SAndroid Build Coastguard Worker // We can't require authentication for sideloading. http://b/22025550.
66*e7c364b6SAndroid Build Coastguard Worker auth_required = false;
67*e7c364b6SAndroid Build Coastguard Worker socket_access_allowed = false;
68*e7c364b6SAndroid Build Coastguard Worker
69*e7c364b6SAndroid Build Coastguard Worker usb_init();
70*e7c364b6SAndroid Build Coastguard Worker
71*e7c364b6SAndroid Build Coastguard Worker VLOG(ADB) << "Event loop starting";
72*e7c364b6SAndroid Build Coastguard Worker fdevent_loop();
73*e7c364b6SAndroid Build Coastguard Worker
74*e7c364b6SAndroid Build Coastguard Worker return 0;
75*e7c364b6SAndroid Build Coastguard Worker }
76