//
// 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