San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 1 | #include <alloca.h> |
| 2 | #include <errno.h> |
| 3 | #include <sys/types.h> |
| 4 | #include <pthread.h> |
| 5 | |
| 6 | #define LOG_TAG "FrameworkClient" |
| 7 | #include <cutils/log.h> |
| 8 | |
| 9 | #include <sysutils/FrameworkClient.h> |
| 10 | |
| 11 | FrameworkClient::FrameworkClient(int socket) { |
| 12 | mSocket = socket; |
| 13 | pthread_mutex_init(&mWriteMutex, NULL); |
| 14 | } |
| 15 | |
San Mehat | db01754 | 2009-05-20 15:27:14 -0700 | [diff] [blame] | 16 | int FrameworkClient::sendMsg(const char *msg) { |
David 'Digit' Turner | af91e4e | 2011-01-17 03:35:28 +0100 | [diff] [blame] | 17 | int ret; |
San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 18 | if (mSocket < 0) { |
| 19 | errno = EHOSTUNREACH; |
| 20 | return -1; |
| 21 | } |
| 22 | |
| 23 | pthread_mutex_lock(&mWriteMutex); |
David 'Digit' Turner | af91e4e | 2011-01-17 03:35:28 +0100 | [diff] [blame] | 24 | ret = TEMP_FAILURE_RETRY(write(mSocket, msg, strlen(msg) +1)); |
| 25 | if (ret < 0) { |
San Mehat | 7e8529a | 2010-03-25 09:31:42 -0700 | [diff] [blame] | 26 | SLOGW("Unable to send msg '%s' (%s)", msg, strerror(errno)); |
San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 27 | } |
| 28 | pthread_mutex_unlock(&mWriteMutex); |
| 29 | return 0; |
| 30 | } |
| 31 | |
San Mehat | db01754 | 2009-05-20 15:27:14 -0700 | [diff] [blame] | 32 | int FrameworkClient::sendMsg(const char *msg, const char *data) { |
David 'Digit' Turner | af91e4e | 2011-01-17 03:35:28 +0100 | [diff] [blame] | 33 | size_t bufflen = strlen(msg) + strlen(data) + 1; |
| 34 | char *buffer = (char *) alloca(bufflen); |
San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 35 | if (!buffer) { |
| 36 | errno = -ENOMEM; |
| 37 | return -1; |
| 38 | } |
David 'Digit' Turner | af91e4e | 2011-01-17 03:35:28 +0100 | [diff] [blame] | 39 | snprintf(buffer, bufflen, "%s%s", msg, data); |
San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 40 | return sendMsg(buffer); |
| 41 | } |
| 42 | |