1308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood/*
2308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood * Copyright (C) 2009 The Android Open Source Project
3308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood *
4308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
5308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood * you may not use this file except in compliance with the License.
6308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood * You may obtain a copy of the License at
7308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood *
8308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
9308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood *
10308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood * Unless required by applicable law or agreed to in writing, software
11308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
12308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood * See the License for the specific language governing permissions and
14308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood * limitations under the License.
15308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood */
16308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood
17308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood#include <stdio.h>
18308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood#include <stdlib.h>
19308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood#include <unistd.h>
20308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood
21308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood#include <cutils/properties.h>
22308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood#include <cutils/sockets.h>
23308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood
24308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwoodint main(int argc, char *argv[]) {
25308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    char buffer[65536];
26308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    int i, s;
27308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood
28308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    /* start the dumpstate service */
29308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    property_set("ctl.start", "dumpstate");
30308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood
31308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    /* socket will not be available until service starts */
32308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    for (i = 0; i < 10; i++) {
33308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood        s = socket_local_client("dumpstate",
34308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood                             ANDROID_SOCKET_NAMESPACE_RESERVED,
35308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood                             SOCK_STREAM);
36308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood        if (s >= 0)
37308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood            break;
38308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood        /* try again in 1 second */
39308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood        sleep(1);
40308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    }
41308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood
42308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    if (s < 0) {
43308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood        fprintf(stderr, "Failed to connect to dumpstate service\n");
44308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood        exit(1);
45308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    }
46308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood
47308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    while (1) {
48308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood        int length = read(s, buffer, sizeof(buffer));
49308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood        if (length <= 0)
50308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood            break;
51308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood        fwrite(buffer, 1, length, stdout);
52308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    }
53308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood
54308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    close(s);
55308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood    return 0;
56308f31d8e208891df283e90e0400f899b6c598a8Mike Lockwood}
57