SocketClient.cpp revision fa644ffe944c01a9b00f8d7676d58394fabee285
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 "SocketClient"
7fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <cutils/log.h>
8fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
9fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <sysutils/SocketClient.h>
10fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
11fa644ffe944c01a9b00f8d7676d58394fabee285San MehatSocketClient::SocketClient(int socket) {
12fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    mSocket = socket;
13fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    pthread_mutex_init(&mWriteMutex, NULL);
14fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat}
15fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
16fa644ffe944c01a9b00f8d7676d58394fabee285San Mehatint SocketClient::sendMsg(char *msg) {
17fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    LOGD("SocketClient::sendMsg(%s)", msg);
18fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    if (mSocket < 0) {
19fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat        errno = EHOSTUNREACH;
20fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat        return -1;
21fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    }
22fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
23fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    pthread_mutex_lock(&mWriteMutex);
24fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    if (write(mSocket, msg, strlen(msg) +1) < 0) {
25fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat        LOGW("Unable to send msg '%s' (%s)", msg, strerror(errno));
26fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    }
27fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    pthread_mutex_unlock(&mWriteMutex);
28fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    return 0;
29fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat}
30fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
31fa644ffe944c01a9b00f8d7676d58394fabee285San Mehatint SocketClient::sendMsg(char *msg, char *data) {
32fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    char *buffer = (char *) alloca(strlen(msg) + strlen(data) + 1);
33fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    if (!buffer) {
34fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat        errno = -ENOMEM;
35fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat        return -1;
36fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    }
37fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    strcpy(buffer, msg);
38fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    strcat(buffer, data);
39fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat    return sendMsg(buffer);
40fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat}
41fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat
42