diff options
author | San Mehat <san@google.com> | 2009-05-06 11:14:21 -0700 |
---|---|---|
committer | San Mehat <san@google.com> | 2009-05-06 15:12:02 -0700 |
commit | 168415b822cae1f8b54ef09c41c11a9b97b87f40 (patch) | |
tree | 4265fda29301863478294812a3a53f4a13a72428 /libsysutils/src/NetlinkListener.cpp | |
parent | 770354d7e6cd471daed426fcf04bf7246e7cb18b (diff) | |
download | system_core-168415b822cae1f8b54ef09c41c11a9b97b87f40.zip system_core-168415b822cae1f8b54ef09c41c11a9b97b87f40.tar.gz system_core-168415b822cae1f8b54ef09c41c11a9b97b87f40.tar.bz2 |
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 <san@google.com>
Diffstat (limited to 'libsysutils/src/NetlinkListener.cpp')
-rw-r--r-- | libsysutils/src/NetlinkListener.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/libsysutils/src/NetlinkListener.cpp b/libsysutils/src/NetlinkListener.cpp new file mode 100644 index 0000000..d871341 --- /dev/null +++ b/libsysutils/src/NetlinkListener.cpp @@ -0,0 +1,53 @@ +/* + * 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> + +#include <sys/types.h> +#include <sys/socket.h> + +#define LOG_TAG "NetlinkListener" +#include <cutils/log.h> + +#include <sysutils/NetlinkListener.h> +#include <sysutils/NetlinkEvent.h> + +NetlinkListener::NetlinkListener(int socket) : + SocketListener(socket, false) { +} + +bool NetlinkListener::onDataAvailable(int socket) +{ + LOGD("NetlinkListener::onDataAvailable()"); + + int count; + + if ((count = recv(socket, mBuffer, sizeof(mBuffer), 0)) < 0) { + LOGE("recv failed (%s)", strerror(errno)); + return false; + } + + NetlinkEvent *evt = new NetlinkEvent(); + if (!evt->decode(mBuffer, count)) { + LOGE("Error decoding NetlinkEvent"); + goto out; + } + + LOGD("Ignoring '%s' netlink event", evt->getSubsystem()); + +out: + delete evt; + return true; +} |