194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood/*
294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * Copyright (C) 2009 The Android Open Source Project
394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood *
494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * you may not use this file except in compliance with the License.
694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * You may obtain a copy of the License at
794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood *
894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood *
1094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * Unless required by applicable law or agreed to in writing, software
1194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
1294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * See the License for the specific language governing permissions and
1494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * limitations under the License.
1594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood */
1694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood
1794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#include <stdio.h>
1894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#include <stdlib.h>
1994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#include <unistd.h>
2094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood
2194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#include <cutils/properties.h>
2294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#include <cutils/sockets.h>
2394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood
2494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwoodint main(int argc, char *argv[]) {
2594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    char buffer[65536];
2694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    int i, s;
2794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood
2894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    /* start the dumpstate service */
2994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    property_set("ctl.start", "dumpstate");
3094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood
3194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    /* socket will not be available until service starts */
329fcca4ee1746774cc7a10f4257f4aa50e01ad46eGuang Zhu    for (i = 0; i < 20; i++) {
3394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood        s = socket_local_client("dumpstate",
3494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood                             ANDROID_SOCKET_NAMESPACE_RESERVED,
3594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood                             SOCK_STREAM);
3694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood        if (s >= 0)
3794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood            break;
3894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood        /* try again in 1 second */
3994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood        sleep(1);
4094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    }
4194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood
4294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    if (s < 0) {
4394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood        fprintf(stderr, "Failed to connect to dumpstate service\n");
4494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood        exit(1);
4594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    }
4694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood
4794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    while (1) {
4894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood        int length = read(s, buffer, sizeof(buffer));
4994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood        if (length <= 0)
5094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood            break;
5194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood        fwrite(buffer, 1, length, stdout);
5294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    }
5394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood
5494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    close(s);
5594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood    return 0;
5694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood}
57