FrameworkClient.cpp revision 7e8529a8b528fd30586aa037f15a31b29582c537
1fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <alloca.h>
2fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <errno.h>
3fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <sys/types.h>
4fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <pthread.h>
5fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
6fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#define LOG_TAG "FrameworkClient"
7fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <cutils/log.h>
8fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
9fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <sysutils/FrameworkClient.h>
10fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
11fa644ffe944c01a9b00f8d7676d58394fabee285San MehatFrameworkClient::FrameworkClient(int socket) {
12fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    mSocket = socket;
13fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    pthread_mutex_init(&mWriteMutex, NULL);
14fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat}
15fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
16db017545796747115b8797f03e662b0f398a7c7bSan Mehatint FrameworkClient::sendMsg(const char *msg) {
17fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    if (mSocket < 0) {
18fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat        errno = EHOSTUNREACH;
19fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat        return -1;
20fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    }
21fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
22fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    pthread_mutex_lock(&mWriteMutex);
23fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    if (write(mSocket, msg, strlen(msg) +1) < 0) {
247e8529a8b528fd30586aa037f15a31b29582c537San Mehat        SLOGW("Unable to send msg '%s' (%s)", msg, strerror(errno));
25fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    }
26fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    pthread_mutex_unlock(&mWriteMutex);
27fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    return 0;
28fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat}
29fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
30db017545796747115b8797f03e662b0f398a7c7bSan Mehatint FrameworkClient::sendMsg(const char *msg, const char *data) {
31fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    char *buffer = (char *) alloca(strlen(msg) + strlen(data) + 1);
32fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    if (!buffer) {
33fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat        errno = -ENOMEM;
34fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat        return -1;
35fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    }
36fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    strcpy(buffer, msg);
37fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    strcat(buffer, data);
38fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    return sendMsg(buffer);
39fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat}
40fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
41