-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
libsysutils: New C++ system convenience library
This library contains re-usable classes for common system level daemons. Initial consumers of this library are 'nexus' and 'vold2' Signed-off-by: San Mehat <[email protected]>
- Loading branch information
San Mehat
committed
May 6, 2009
1 parent
770354d
commit 168415b
Showing
14 changed files
with
711 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
* Copyright (C) 2008 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
#ifndef __FRAMEWORK_CMD_HANDLER_H | ||
#define __FRAMEWORK_CMD_HANDLER_H | ||
|
||
#include "../../../frameworks/base/include/utils/List.h" | ||
|
||
|
||
class FrameworkCommand { | ||
private: | ||
const char *mCommand; | ||
|
||
public: | ||
|
||
FrameworkCommand(const char *cmd); | ||
virtual ~FrameworkCommand() { } | ||
|
||
virtual int runCommand(char *data); | ||
|
||
const char *getCommand() { return mCommand; } | ||
}; | ||
|
||
typedef android::List<FrameworkCommand *> FrameworkCommandCollection; | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
* Copyright (C) 2008 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
#ifndef _FRAMEWORKSOCKETLISTENER_H | ||
#define _FRAMEWORKSOCKETLISTENER_H | ||
|
||
#include "SocketListener.h" | ||
#include "FrameworkCommand.h" | ||
|
||
class FrameworkListener : public SocketListener { | ||
private: | ||
FrameworkCommandCollection *mCommands; | ||
|
||
public: | ||
FrameworkListener(const char *socketName); | ||
virtual ~FrameworkListener() {} | ||
|
||
protected: | ||
void registerCmd(FrameworkCommand *cmd); | ||
virtual bool onDataAvailable(int socket); | ||
|
||
private: | ||
void dispatchCommand(char *cmd); | ||
}; | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
/* | ||
* Copyright (C) 2008 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
#ifndef _FRAMEWORKMANAGER_H | ||
#define _FRAMEWORKMANAGER_H | ||
|
||
#include <pthread.h> | ||
|
||
class FrameworkListener; | ||
|
||
class FrameworkManager { | ||
int mDoorbell; // Socket used to accept connections from framework | ||
int mFwSock; // Socket used to communicate with framework | ||
const char *mSocketName; | ||
|
||
FrameworkListener *mListener; | ||
|
||
pthread_mutex_t mWriteMutex; | ||
|
||
public: | ||
FrameworkManager(FrameworkListener *Listener); | ||
virtual ~FrameworkManager() {} | ||
|
||
int run(); | ||
int sendMsg(char *msg); | ||
int sendMsg(char *msg, char *data); | ||
}; | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/* | ||
* Copyright (C) 2008 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
#ifndef _NETLINKEVENT_H | ||
#define _NETLINKEVENT_H | ||
|
||
#define NL_PARAMS_MAX 32 | ||
|
||
class NetlinkEvent { | ||
int mSeq; | ||
char *mPath; | ||
int mAction; | ||
char *mSubsystem; | ||
char *mParams[NL_PARAMS_MAX]; | ||
|
||
public: | ||
const static int NlActionUnknown; | ||
const static int NlActionAdd; | ||
const static int NlActionRemove; | ||
const static int NlActionChange; | ||
|
||
NetlinkEvent(); | ||
virtual ~NetlinkEvent(); | ||
|
||
bool decode(char *buffer, int size); | ||
const char *findParam(const char *paramName); | ||
|
||
const char *getSubsystem() { return mSubsystem; } | ||
int getAction() { return mAction; } | ||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/* | ||
* Copyright (C) 2008 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
#ifndef _NETLINKLISTENER_H | ||
#define _NETLINKLISTENER_H | ||
|
||
#include "SocketListener.h" | ||
|
||
class NetlinkEvent; | ||
|
||
class NetlinkListener : public SocketListener { | ||
char mBuffer[64 * 1024]; | ||
|
||
public: | ||
NetlinkListener(int socket); | ||
virtual ~NetlinkListener() {} | ||
protected: | ||
virtual bool onDataAvailable(int socket); | ||
}; | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
/* | ||
* Copyright (C) 2008 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
#ifndef _SOCKETLISTENER_H | ||
#define _SOCKETLISTENER_H | ||
|
||
class SocketListener { | ||
int mSock; | ||
int mCsock; | ||
int mAcceptClients; | ||
const char *mSocketName; | ||
|
||
public: | ||
SocketListener(const char *socketName, bool acceptClients); | ||
SocketListener(int socketFd, bool acceptClients); | ||
|
||
virtual ~SocketListener() {} | ||
virtual int run(); | ||
|
||
protected: | ||
virtual bool onDataAvailable(int socket); | ||
}; | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
LOCAL_PATH:= $(call my-dir) | ||
|
||
include $(CLEAR_VARS) | ||
|
||
LOCAL_SRC_FILES:= \ | ||
src/FrameworkManager.cpp \ | ||
src/SocketListener.cpp \ | ||
src/FrameworkListener.cpp \ | ||
src/NetlinkListener.cpp \ | ||
src/NetlinkEvent.cpp \ | ||
src/FrameworkCommand.cpp \ | ||
|
||
LOCAL_MODULE:= libsysutils | ||
|
||
LOCAL_C_INCLUDES := $(KERNEL_HEADERS) | ||
|
||
LOCAL_CFLAGS := | ||
|
||
LOCAL_SHARED_LIBRARIES := libcutils | ||
|
||
include $(BUILD_SHARED_LIBRARY) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/* | ||
* Copyright (C) 2008 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
#include <errno.h> | ||
|
||
#define LOG_TAG "FrameworkCommand" | ||
|
||
#include <cutils/log.h> | ||
|
||
#include <sysutils/FrameworkCommand.h> | ||
|
||
FrameworkCommand::FrameworkCommand(const char *cmd) { | ||
mCommand = cmd; | ||
} | ||
|
||
int FrameworkCommand::runCommand(char *data) { | ||
LOGW("Command %s has no run handler!", getCommand()); | ||
errno = ENOSYS; | ||
return -1; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/* | ||
* Copyright (C) 2008 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
#include <errno.h> | ||
|
||
#define LOG_TAG "FrameworkListener" | ||
|
||
#include <cutils/log.h> | ||
|
||
#include <sysutils/FrameworkListener.h> | ||
#include <sysutils/FrameworkCommand.h> | ||
|
||
FrameworkListener::FrameworkListener(const char *socketName) : | ||
SocketListener(socketName, true) { | ||
mCommands = new FrameworkCommandCollection(); | ||
} | ||
|
||
bool FrameworkListener::onDataAvailable(int socket) { | ||
char buffer[101]; | ||
int len; | ||
|
||
if ((len = read(socket, buffer, sizeof(buffer) -1)) < 0) { | ||
LOGE("read() failed (%s)", strerror(errno)); | ||
return errno; | ||
} else if (!len) { | ||
LOGW("Lost connection to client"); | ||
return false; | ||
} | ||
|
||
int start = 0; | ||
int i; | ||
|
||
buffer[len] = '\0'; | ||
|
||
for (i = 0; i < len; i++) { | ||
if (buffer[i] == '\0') { | ||
dispatchCommand(buffer + start); | ||
start = i + 1; | ||
} | ||
} | ||
return true; | ||
} | ||
|
||
void FrameworkListener::registerCmd(FrameworkCommand *cmd) { | ||
mCommands->push_back(cmd); | ||
} | ||
|
||
void FrameworkListener::dispatchCommand(char *cmd) { | ||
FrameworkCommandCollection::iterator i; | ||
|
||
for (i = mCommands->begin(); i != mCommands->end(); ++i) { | ||
FrameworkCommand *c = *i; | ||
|
||
if (!strncmp(cmd, c->getCommand(), strlen(c->getCommand()))) { | ||
if (c->runCommand(cmd)) { | ||
LOGW("Handler '%s' error (%s)", c->getCommand(), strerror(errno)); | ||
} | ||
return; | ||
} | ||
} | ||
|
||
LOGE("No cmd handlers defined for '%s'", cmd); | ||
} | ||
|
Oops, something went wrong.