/* IPC operation error*/
#define MS_MEDIA_ERR_IPC -200
-#define MS_MEDIA_ERR_SOCKET_CONN -201 /* socket connect error */
-#define MS_MEDIA_ERR_SOCKET_BIND -202 /* socket binding fails */
-#define MS_MEDIA_ERR_SOCKET_SEND -203 /* socket sending fails */
-#define MS_MEDIA_ERR_SOCKET_RECEIVE -204 /* socket receiving fails */
-#define MS_MEDIA_ERR_SOCKET_RECEIVE_TIMEOUT -205 /* socket receive timeout error */
-#define MS_MEDIA_ERR_SOCKET_ACCEPT -206 /* socket accept fails */
-#define MS_MEDIA_ERR_SOCKET_INTERNAL -250 /* receive error from socket API */
/* FILE error*/
#define MS_MEDIA_ERR_FILE_OPEN_FAIL -601 /* file opennig fails */
/* Thumbnail error*/
#define MS_MEDIA_ERR_THUMB_TOO_BIG -801 /* Original is too big to make thumb */
-#define MS_MEDIA_ERR_THUMB_DUPLICATED_REQUEST -802 /* Duplicated request of same path */
#define MS_MEDIA_ERR_THUMB_UNSUPPORTED -803 /* Unsupported content */
/*ETC*/
#define MS_MEDIA_ERR_VCONF_SET_FAIL -901 /* vconf setting fails*/
#define MS_MEDIA_ERR_SCANNER_NOT_READY -903 /* scanner is not ready */
#define MS_MEDIA_ERR_DYNAMIC_LINK -904 /* fail to dynamic link */
-#define MS_MEDIA_ERR_INVALID_IPC_MESSAGE -905 /* received message is not valid */
-#define MS_MEDIA_ERR_DATA_TAINTED -906 /* received data is tainted */
#define MS_MEDIA_ERR_SEND_NOTI_FAIL -907 /* sending notification is failed */
#define MS_MEDIA_ERR_USB_UNMOUNTED -908 /* USB unmounted */
#define MS_MEDIA_ERR_DB_LIMIT_1 -909
return MS_MEDIA_ERR_INVALID_PARAMETER;
if ((recv_msg_size = read(sockfd, recv_msg, sizeof(ms_comm_msg_s))) < 0) {
- if (errno == EWOULDBLOCK) {
- MSAPI_DBG_ERR("Timeout. Can't try any more");
- return MS_MEDIA_ERR_SOCKET_RECEIVE_TIMEOUT;
- } else {
- MSAPI_DBG_ERR("recv failed");
- return MS_MEDIA_ERR_SOCKET_RECEIVE;
- }
+ MSAPI_DBG_STRERROR("recv failed");
+ return MS_MEDIA_ERR_IPC;
}
MSAPI_DBG_SLOG("receive msg from P[%d] T[%d] M[%.*s] S[%.*s]", recv_msg->pid, recv_msg->msg_type, MAX_MSG_SIZE, recv_msg->msg, MS_UUID_SIZE, recv_msg->storage_id);
if (strlen(recv_msg->msg) == 0 || strlen(recv_msg->msg) >= MAX_MSG_SIZE) {
MSAPI_DBG_ERR("IPC message is wrong. message size is over MAX_MSG_SIZE");
- return MS_MEDIA_ERR_INVALID_IPC_MESSAGE;
+ return MS_MEDIA_ERR_IPC;
}
if (strlen(recv_msg->storage_id) >= MS_UUID_SIZE) {
MSAPI_DBG_ERR("IPC message is wrong. storage_id size is over MS_UUID_SIZE");
- return MS_MEDIA_ERR_INVALID_IPC_MESSAGE;
+ return MS_MEDIA_ERR_IPC;
}
ret = cynara_creds_socket_get_pid(sockfd, &(credentials->pid));
MS_MALLOC(buf, header_size);
if ((recv_msg_size = recv(sockfd, buf, header_size, 0)) < 0) {
- if (errno == EWOULDBLOCK) {
- MSAPI_DBG_ERR("Timeout. Can't try any more");
- MS_SAFE_FREE(buf);
- return MS_MEDIA_ERR_SOCKET_RECEIVE_TIMEOUT;
- } else {
- MSAPI_DBG_ERR("recv failed");
- MS_SAFE_FREE(buf);
- return MS_MEDIA_ERR_SOCKET_RECEIVE;
- }
+ MSAPI_DBG_STRERROR("recv failed");
+ MS_SAFE_FREE(buf);
+ return MS_MEDIA_ERR_IPC;
}
memcpy(recv_msg, buf, header_size);
/* Can be null (kill server msg) */
if (strlen(recv_msg->org_path) >= MAX_FILEPATH_LEN) {
MSAPI_DBG_ERR("org_path size is invlid[%zu]", strlen(recv_msg->org_path));
- return MS_MEDIA_ERR_INVALID_IPC_MESSAGE;
+ return MS_MEDIA_ERR_IPC;
}
/* Can be null (raw request case) */
if (strlen(recv_msg->dst_path) >= MAX_FILEPATH_LEN) {
MSAPI_DBG_ERR("dst_path size is invlid[%zu]", strlen(recv_msg->dst_path));
- return MS_MEDIA_ERR_INVALID_IPC_MESSAGE;
+ return MS_MEDIA_ERR_IPC;
}
ret = cynara_creds_socket_get_pid(sockfd, &(credentials->pid));
int err;
err = setsockopt(fd, SOL_SOCKET, SO_PASSSEC, &optval, sizeof(optval));
- MSAPI_RETVM_IF(err != 0, MS_MEDIA_ERR_SOCKET_INTERNAL, "Failed to set SO_PASSSEC socket option");
+ MSAPI_RETVM_IF(err != 0, MS_MEDIA_ERR_IPC, "Failed to set SO_PASSSEC socket option");
err = setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &optval, sizeof(optval));
- MSAPI_RETVM_IF(err != 0, MS_MEDIA_ERR_SOCKET_INTERNAL, "Failed to set SO_PASSCRED socket option");
+ MSAPI_RETVM_IF(err != 0, MS_MEDIA_ERR_IPC, "Failed to set SO_PASSCRED socket option");
return MS_MEDIA_ERR_NONE;
}
if (errno == EACCES)
return MS_MEDIA_ERR_PERMISSION_DENIED;
else
- return MS_MEDIA_ERR_SOCKET_CONN;
+ return MS_MEDIA_ERR_IPC;
}
/* Send request */
if (send(sockfd, &send_msg, sizeof(send_msg), 0) != sizeof(send_msg)) {
MSAPI_DBG_STRERROR("send failed");
close(sockfd);
- return MS_MEDIA_ERR_SOCKET_SEND;
+ return MS_MEDIA_ERR_IPC;
}
/*Receive Response*/
int recv_msg = -1;
RETRY:
if ((recv_msg_size = recv(sockfd, &recv_msg, sizeof(recv_msg), 0)) < 0) {
- MSAPI_DBG_ERR("recv failed : [%d]", sockfd);
+ MSAPI_DBG_STRERROR("recv failed");
- if (errno == EINTR) {
- MSAPI_DBG_STRERROR("catch interrupt");
- goto RETRY;
- }
-
- if (errno == EWOULDBLOCK) {
+ if (errno == EINTR || errno == EWOULDBLOCK) {
if (retry_count < MAX_RETRY_COUNT) {
MSAPI_DBG_ERR("TIME OUT[%d]", retry_count);
retry_count++;
goto RETRY;
}
-
- close(sockfd);
- MSAPI_DBG_ERR("Timeout. Can't try any more");
- return MS_MEDIA_ERR_SOCKET_RECEIVE_TIMEOUT;
- } else {
- MSAPI_DBG_STRERROR("recv failed");
-
- close(sockfd);
-
- return MS_MEDIA_ERR_SOCKET_RECEIVE;
}
+ close(sockfd);
+ return MS_MEDIA_ERR_IPC;
}
MSAPI_DBG("RECEIVE OK [%d]", recv_msg);
if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
MSAPI_DBG_STRERROR("connect error");
close(sockfd);
- return MS_MEDIA_ERR_SOCKET_CONN;
+ return MS_MEDIA_ERR_IPC;
}
/* Send request */
if (send(sockfd, &send_msg, sizeof(send_msg), 0) != sizeof(send_msg)) {
MSAPI_DBG_STRERROR("send failed");
close(sockfd);
- return MS_MEDIA_ERR_SOCKET_SEND;
+ return MS_MEDIA_ERR_IPC;
}
/*Receive Response*/
ms_comm_msg_s recv_msg;
RETRY:
if ((recv_msg_size = recv(sockfd, &recv_msg, sizeof(recv_msg), 0)) < 0) {
- MSAPI_DBG_ERR("recv failed : [%d]", sockfd);
+ MSAPI_DBG_STRERROR("recv failed");
- if (errno == EINTR) {
- MSAPI_DBG_STRERROR("catch interrupt");
- goto RETRY;
- }
-
- if (errno == EWOULDBLOCK) {
+ if (errno == EINTR || errno == EWOULDBLOCK) {
if (retry_count < MAX_RETRY_COUNT) {
MSAPI_DBG_ERR("TIME OUT[%d]", retry_count);
retry_count++;
goto RETRY;
}
-
- close(sockfd);
- MSAPI_DBG_ERR("Timeout. Can't try any more");
- return MS_MEDIA_ERR_SOCKET_RECEIVE_TIMEOUT;
- } else {
- MSAPI_DBG_STRERROR("recv failed");
-
- close(sockfd);
-
- return MS_MEDIA_ERR_SOCKET_RECEIVE;
}
+ close(sockfd);
+ return MS_MEDIA_ERR_IPC;
}
MSAPI_DBG("RECEIVE OK [%d]", recv_msg.result);
/*Create TCP Socket*/
if ((sock = socket(PF_FILE, SOCK_STREAM, 0)) < 0) {
MSAPI_DBG_STRERROR("socket failed");
- return MS_MEDIA_ERR_SOCKET_CONN;
+ return MS_MEDIA_ERR_IPC;
}
if (timeout_sec > 0) {
if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv_timeout, sizeof(tv_timeout)) == -1) {
MSAPI_DBG_STRERROR("setsockopt failed");
close(sock);
- return MS_MEDIA_ERR_SOCKET_CONN;
+ return MS_MEDIA_ERR_IPC;
}
}
int ms_ipc_create_server_socket(ms_msg_port_type_e port, int *sock_fd)
{
int i;
- bool bind_success = false;
int sock = -1;
struct sockaddr_un serv_addr;
unsigned short serv_port;
/* Create a TCP socket */
if ((sock = socket(PF_FILE, SOCK_STREAM, 0)) < 0) {
MSAPI_DBG_STRERROR("socket failed");
- return MS_MEDIA_ERR_SOCKET_CONN;
+ return MS_MEDIA_ERR_IPC;
}
memset(&serv_addr, 0, sizeof(serv_addr));
/* Bind to the local address */
for (i = 0; i < 100; i++) {
- if (bind(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == 0) {
- bind_success = true;
+ if (bind(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == 0)
break;
- }
MSAPI_DBG("%d", i);
usleep(250000);
}
- if (bind_success == false) {
+ if (i == 100) {
MSAPI_DBG_ERR("bind failed[%s]", serv_addr.sun_path);
- close(sock);
- return MS_MEDIA_ERR_SOCKET_CONN;
+ goto ERROR;
}
MSAPI_DBG("bind success");
/* Listening */
if (listen(sock, SOMAXCONN) < 0) {
MSAPI_DBG_ERR("listen failed");
- close(sock);
- return MS_MEDIA_ERR_SOCKET_CONN;
+ goto ERROR;
}
MSAPI_DBG("Listening...");
*sock_fd = sock;
return MS_MEDIA_ERR_NONE;
+ERROR:
+ close(sock);
+
+ return MS_MEDIA_ERR_IPC;
}
int ms_ipc_send_msg_to_server_tcp(int sockfd, ms_msg_port_type_e port, ms_comm_msg_s *send_msg, struct sockaddr_un *serv_addr)
if (errno == EACCES || errno == EPERM)
return MS_MEDIA_ERR_PERMISSION_DENIED;
else
- return MS_MEDIA_ERR_SOCKET_CONN;
+ return MS_MEDIA_ERR_IPC;
}
if (write(sockfd, send_msg, sizeof(*(send_msg))) != sizeof(*(send_msg))) {
MSAPI_DBG_STRERROR("write failed");
- return MS_MEDIA_ERR_SOCKET_SEND;
+ return MS_MEDIA_ERR_IPC;
} else {
MSAPI_DBG_SLOG("result[%d] message[%.*s]", send_msg->result, MAX_MSG_SIZE, send_msg->msg);
if (serv_addr != NULL)
{
if (write(sockfd, send_msg, sizeof(*(send_msg))) != sizeof(*(send_msg))) {
MSAPI_DBG_STRERROR("write failed");
- return MS_MEDIA_ERR_SOCKET_SEND;
+ return MS_MEDIA_ERR_IPC;
}
MSAPI_DBG_SLOG("result[%d] message[%.*s]", send_msg->result, MAX_MSG_SIZE, send_msg->msg);
if ((sockfd = accept(serv_sock, (struct sockaddr*)&client_addr, &client_addr_len)) < 0) {
MSAPI_DBG_STRERROR("accept failed");
*client_sock = -1;
- return MS_MEDIA_ERR_SOCKET_ACCEPT;
+ return MS_MEDIA_ERR_IPC;
}
*client_sock = sockfd;
int recv_msg_size = 0;
if ((recv_msg_size = read(client_sock, recv_msg, sizeof(ms_comm_msg_s))) < 0) {
- if (errno == EWOULDBLOCK) {
- MSAPI_DBG_ERR("Timeout. Can't try any more");
- return MS_MEDIA_ERR_SOCKET_RECEIVE_TIMEOUT;
- } else {
- MSAPI_DBG_STRERROR("recv failed");
- return MS_MEDIA_ERR_SOCKET_RECEIVE;
- }
+ MSAPI_DBG_STRERROR("recv failed");
+ return MS_MEDIA_ERR_IPC;
}
MSAPI_DBG_SLOG("receive msg from P[%d] T[%d] M[%.*s]", recv_msg->pid, recv_msg->msg_type, MAX_MSG_SIZE, recv_msg->msg);
if (strlen(recv_msg->msg) == 0 || strlen(recv_msg->msg) >= MAX_MSG_SIZE) {
MSAPI_DBG_ERR("IPC message is wrong. message size is over MAX_MSG_SIZE");
- return MS_MEDIA_ERR_INVALID_IPC_MESSAGE;
+ return MS_MEDIA_ERR_IPC;
}
return MS_MEDIA_ERR_NONE;
if ((strlen((*register_data)->msg) <= 0) || (strlen((*register_data)->msg) >= MS_FILE_PATH_LEN_MAX)) {
MS_DBG_ERR("message size[%zu] is wrong", strlen((*register_data)->msg));
- return MS_MEDIA_ERR_INVALID_IPC_MESSAGE;
+ return MS_MEDIA_ERR_IPC;
}
return MS_MEDIA_ERR_NONE;