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