auto import from //depot/cupcake/@135843
diff --git a/simulator/app/PropertyServer.h b/simulator/app/PropertyServer.h
new file mode 100644
index 0000000..193dd70
--- /dev/null
+++ b/simulator/app/PropertyServer.h
@@ -0,0 +1,68 @@
+//
+// Copyright 2007 The Android Open Source Project
+//
+// Serve properties to the simulated runtime.
+//
+#ifndef _SIM_PROPERTY_SERVER_H
+#define _SIM_PROPERTY_SERVER_H
+
+#include "cutils/properties.h"
+#include "utils/List.h"
+
+/*
+ * Define a thread that responds to requests from clients to get/set/list
+ * system properties.
+ */
+class PropertyServer : public wxThread {
+public:
+    PropertyServer(void) : mListenSock(-1) {}
+    virtual ~PropertyServer(void);
+
+    /* start the thread running */
+    bool StartThread(void);
+
+    /* thread entry point */
+    virtual void* Entry(void);
+
+    /* clear out all properties */
+    void ClearProperties(void);
+
+    /* add some default values */
+    void SetDefaultProperties(void);
+
+    /* copy a property into valueBuf; returns false if property not found */
+    bool GetProperty(const char* key, char* valueBuf);
+
+    /* set the property, replacing it if it already exists */
+    bool SetProperty(const char* key, const char* value);
+
+    /* property name constants */
+    static const char* kPropCheckJni;
+
+private:
+    /* one property entry */
+    typedef struct Property {
+        char    key[PROPERTY_KEY_MAX];
+        char    value[PROPERTY_VALUE_MAX];
+    } Property;
+
+    /* create the UNIX-domain socket we listen on */
+    bool CreateSocket(const char* fileName);
+
+    /* serve up properties */
+    void ServeProperties(void);
+
+    /* handle a client request */
+    bool HandleRequest(int fd);
+
+    /* listen here for new connections */
+    int     mListenSock;
+
+    /* list of connected fds to scan */
+    android::List<int>      mClientList;
+
+    /* set of known properties */
+    android::List<Property> mPropList;
+};
+
+#endif // PROPERTY_SERVER_H