static int __recv_message(int sock, struct iovec *vec, int vec_max_size, int *vec_size,
int *fds, int *nr_fds)
{
-
char buff[CMSG_SPACE(sizeof(int) * MAX_NR_OF_DESCRIPTORS) + CMSG_SPACE(50)] = {0};
struct msghdr msg = {0};
struct cmsghdr *cmsg = NULL;
return ret;
}
+int __recv_socket_fd(int fd, int cmd, int *ret_fd)
+{
+ int fds[2] = {0,};
+ char recv_buff[1024];
+ struct iovec vec[3];
+ int ret = 0;
+ int vec_len = 0;
+ int fds_len = 0;
+
+ vec[0].iov_base = recv_buff;
+ vec[0].iov_len = sizeof(recv_buff);
+ ret = __recv_message(fd, vec, 1, &vec_len, fds, &fds_len);
+ if (ret < 0) {
+ _E("Error[%d]. while receiving message\n", -ret);
+ if (fds_len > 0)
+ close(fds[0]);
+ return -ECOMM;
+ }
+
+ if (fds_len > 0) {
+ if (cmd == APP_GET_DC_SOCKET_PAIR) {
+ _D("fds : %d", fds[0]);
+ ret_fd[0] = fds[0];
+ } else if (cmd == APP_GET_MP_SOCKET_PAIR) {
+ _D("mp fds : %d %d", fds[0], fds[1]);
+ ret_fd[0] = fds[0];
+ ret_fd[1] = fds[1];
+ }
+ }
+ return 0;
+}
+
int aul_sock_send_raw_with_fd_reply(int pid, uid_t uid, int cmd, unsigned char *kb_data, int datalen, int *ret_fd)
{
int fd;
int len;
- int ret;
int res = 0;
+ int ret = 0;
app_pkt_t *pkt = NULL;
if (kb_data == NULL || datalen > AUL_SOCK_MAXBUFF - 8) {
}
retry_recv:
- if (cmd == APP_GET_SOCKET_PAIR) {
- char recv_buff[1024];
- struct iovec vec[3];
- int ret = 0;
- int vec_len = 0;
- int fds_len = 0;
- int fds[1] = {0};
-
- vec[0].iov_base = recv_buff;
- vec[0].iov_len = 1024;
- ret = __recv_message(fd, vec, 1, &vec_len, fds, &fds_len);
- if (ret < 0) {
- _E("Error[%d]. while receiving message\n", -ret);
- if (fds_len > 0)
- close(fds[0]);
- return -ECOMM;
- } else
- recv_buff[ret] = '\0';
- if (fds_len > 0) {
- _E("fds : %d", fds[0]);
- ret_fd[0] = fds[0];
- }
+ if (cmd == APP_GET_DC_SOCKET_PAIR || APP_GET_MP_SOCKET_PAIR) {
+ res = __recv_socket_fd(fd, cmd, ret_fd);
} else {
len = recv(fd, &res, sizeof(int), 0);
if (len == -1) {
API int aul_request_data_control_socket_pair(bundle *kb, int *fd)
{
- return app_request_to_launchpad_with_fd(APP_GET_SOCKET_PAIR, NULL, kb, fd, getuid());
+ return app_request_to_launchpad_with_fd(APP_GET_DC_SOCKET_PAIR, NULL, kb, fd, getuid());
+}
+
+API int aul_request_message_port_socket_pair(int *fd)
+{
+ return app_request_to_launchpad_with_fd(APP_GET_MP_SOCKET_PAIR, NULL, NULL, fd, getuid());
}
API int aul_launch_app(const char *appid, bundle *kb)