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) { 17af91e4ef095d2c770f1aeceafc1c2e66b645a3c4David 'Digit' Turner int ret; 18fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat if (mSocket < 0) { 19fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat errno = EHOSTUNREACH; 20fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat return -1; 21fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat } 22fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 23fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat pthread_mutex_lock(&mWriteMutex); 24af91e4ef095d2c770f1aeceafc1c2e66b645a3c4David 'Digit' Turner ret = TEMP_FAILURE_RETRY(write(mSocket, msg, strlen(msg) +1)); 25af91e4ef095d2c770f1aeceafc1c2e66b645a3c4David 'Digit' Turner if (ret < 0) { 267e8529a8b528fd30586aa037f15a31b29582c537San Mehat SLOGW("Unable to send msg '%s' (%s)", msg, strerror(errno)); 27fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat } 28fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat pthread_mutex_unlock(&mWriteMutex); 29fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat return 0; 30fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat} 31fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 32db017545796747115b8797f03e662b0f398a7c7bSan Mehatint FrameworkClient::sendMsg(const char *msg, const char *data) { 33af91e4ef095d2c770f1aeceafc1c2e66b645a3c4David 'Digit' Turner size_t bufflen = strlen(msg) + strlen(data) + 1; 34af91e4ef095d2c770f1aeceafc1c2e66b645a3c4David 'Digit' Turner char *buffer = (char *) alloca(bufflen); 35fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat if (!buffer) { 36fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat errno = -ENOMEM; 37fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat return -1; 38fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat } 39af91e4ef095d2c770f1aeceafc1c2e66b645a3c4David 'Digit' Turner snprintf(buffer, bufflen, "%s%s", msg, data); 40fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat return sendMsg(buffer); 41fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat} 42fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 43