diff options
author | paulhsia <paulhsia@chromium.org> | 2020-04-29 23:25:24 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-05-01 13:03:15 +0000 |
commit | dd553be32f63db6c9820d7742a6169500c437a17 (patch) | |
tree | 5e7f25cd05c21b02392b715c7e53256a4416197b /cras | |
parent | 8405d713c2c293646723a424c218af4a72e598f2 (diff) | |
download | adhd-dd553be32f63db6c9820d7742a6169500c437a17.tar.gz |
CRAS: rclient: Unify *_handle_message_from_client
Eliminate duplicated code.
Create a generic rclient_handle_message_from_client for
cras_{playback, capture, unified}_rclient, which supports only stream
connect and stream disconnect messages.
BUG=b:155048379
TEST=Build and unit tests
Change-Id: I98483ebabc5e48c8929614134ad514a6b6488b89
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/adhd/+/2172839
Reviewed-by: Chih-Yang Hsia <paulhsia@chromium.org>
Tested-by: Chih-Yang Hsia <paulhsia@chromium.org>
Commit-Queue: Chih-Yang Hsia <paulhsia@chromium.org>
Diffstat (limited to 'cras')
-rw-r--r-- | cras/src/server/cras_capture_rclient.c | 51 | ||||
-rw-r--r-- | cras/src/server/cras_playback_rclient.c | 51 | ||||
-rw-r--r-- | cras/src/server/cras_rclient_util.c | 49 | ||||
-rw-r--r-- | cras/src/server/cras_rclient_util.h | 15 | ||||
-rw-r--r-- | cras/src/server/cras_unified_rclient.c | 51 |
5 files changed, 67 insertions, 150 deletions
diff --git a/cras/src/server/cras_capture_rclient.c b/cras/src/server/cras_capture_rclient.c index e48286e7..9b1f2b84 100644 --- a/cras/src/server/cras_capture_rclient.c +++ b/cras/src/server/cras_capture_rclient.c @@ -14,58 +14,9 @@ #include "cras_types.h" #include "cras_util.h" -/* Entry point for handling a message from the client. Called from the main - * server context. */ -static int ccr_handle_message_from_client(struct cras_rclient *client, - const struct cras_server_message *msg, - int *fds, unsigned int num_fds) -{ - int rc = 0; - assert(client && msg); - - rc = rclient_validate_message_fds(msg, fds, num_fds); - if (rc < 0) { - for (int i = 0; i < (int)num_fds; i++) - if (fds[i] >= 0) - close(fds[i]); - return rc; - } - int fd = num_fds > 0 ? fds[0] : -1; - - switch (msg->id) { - case CRAS_SERVER_CONNECT_STREAM: { - int client_shm_fd = num_fds > 1 ? fds[1] : -1; - struct cras_connect_message cmsg; - if (MSG_LEN_VALID(msg, struct cras_connect_message)) { - rc = rclient_handle_client_stream_connect( - client, - (const struct cras_connect_message *)msg, fd, - client_shm_fd); - } else if (!convert_connect_message_old(msg, &cmsg)) { - rc = rclient_handle_client_stream_connect( - client, &cmsg, fd, client_shm_fd); - } else { - return -EINVAL; - } - break; - } - case CRAS_SERVER_DISCONNECT_STREAM: - if (!MSG_LEN_VALID(msg, struct cras_disconnect_stream_message)) - return -EINVAL; - rc = rclient_handle_client_stream_disconnect( - client, - (const struct cras_disconnect_stream_message *)msg); - break; - default: - break; - } - - return rc; -} - /* Declarations of cras_rclient operators for cras_capture_rclient. */ static const struct cras_rclient_ops cras_capture_rclient_ops = { - .handle_message_from_client = ccr_handle_message_from_client, + .handle_message_from_client = rclient_handle_message_from_client, .send_message_to_client = rclient_send_message_to_client, .destroy = rclient_destroy, }; diff --git a/cras/src/server/cras_playback_rclient.c b/cras/src/server/cras_playback_rclient.c index 05e76b66..54a75dbd 100644 --- a/cras/src/server/cras_playback_rclient.c +++ b/cras/src/server/cras_playback_rclient.c @@ -14,58 +14,9 @@ #include "cras_types.h" #include "cras_util.h" -/* Entry point for handling a message from the client. Called from the main - * server context. */ -static int cpr_handle_message_from_client(struct cras_rclient *client, - const struct cras_server_message *msg, - int *fds, unsigned int num_fds) -{ - int rc = 0; - assert(client && msg); - - rc = rclient_validate_message_fds(msg, fds, num_fds); - if (rc < 0) { - for (int i = 0; i < (int)num_fds; i++) - if (fds[i] >= 0) - close(fds[i]); - return rc; - } - int fd = num_fds > 0 ? fds[0] : -1; - - switch (msg->id) { - case CRAS_SERVER_CONNECT_STREAM: { - int client_shm_fd = num_fds > 1 ? fds[1] : -1; - struct cras_connect_message cmsg; - if (MSG_LEN_VALID(msg, struct cras_connect_message)) { - rc = rclient_handle_client_stream_connect( - client, - (const struct cras_connect_message *)msg, fd, - client_shm_fd); - } else if (!convert_connect_message_old(msg, &cmsg)) { - rc = rclient_handle_client_stream_connect( - client, &cmsg, fd, client_shm_fd); - } else { - return -EINVAL; - } - break; - } - case CRAS_SERVER_DISCONNECT_STREAM: - if (!MSG_LEN_VALID(msg, struct cras_disconnect_stream_message)) - return -EINVAL; - rc = rclient_handle_client_stream_disconnect( - client, - (const struct cras_disconnect_stream_message *)msg); - break; - default: - break; - } - - return rc; -} - /* Declarations of cras_rclient operators for cras_playback_rclient. */ static const struct cras_rclient_ops cras_playback_rclient_ops = { - .handle_message_from_client = cpr_handle_message_from_client, + .handle_message_from_client = rclient_handle_message_from_client, .send_message_to_client = rclient_send_message_to_client, .destroy = rclient_destroy, }; diff --git a/cras/src/server/cras_rclient_util.c b/cras/src/server/cras_rclient_util.c index 85a6e0fa..cd0b7f36 100644 --- a/cras/src/server/cras_rclient_util.c +++ b/cras/src/server/cras_rclient_util.c @@ -257,3 +257,52 @@ struct cras_rclient *rclient_generic_create(int fd, size_t id, return client; } + +/* A generic entry point for handling a message from the client. Called from + * the main server context. */ +int rclient_handle_message_from_client(struct cras_rclient *client, + const struct cras_server_message *msg, + int *fds, unsigned int num_fds) +{ + int rc = 0; + assert(client && msg); + + rc = rclient_validate_message_fds(msg, fds, num_fds); + if (rc < 0) { + for (int i = 0; i < (int)num_fds; i++) + if (fds[i] >= 0) + close(fds[i]); + return rc; + } + int fd = num_fds > 0 ? fds[0] : -1; + + switch (msg->id) { + case CRAS_SERVER_CONNECT_STREAM: { + int client_shm_fd = num_fds > 1 ? fds[1] : -1; + struct cras_connect_message cmsg; + if (MSG_LEN_VALID(msg, struct cras_connect_message)) { + rc = rclient_handle_client_stream_connect( + client, + (const struct cras_connect_message *)msg, fd, + client_shm_fd); + } else if (!convert_connect_message_old(msg, &cmsg)) { + rc = rclient_handle_client_stream_connect( + client, &cmsg, fd, client_shm_fd); + } else { + return -EINVAL; + } + break; + } + case CRAS_SERVER_DISCONNECT_STREAM: + if (!MSG_LEN_VALID(msg, struct cras_disconnect_stream_message)) + return -EINVAL; + rc = rclient_handle_client_stream_disconnect( + client, + (const struct cras_disconnect_stream_message *)msg); + break; + default: + break; + } + + return rc; +} diff --git a/cras/src/server/cras_rclient_util.h b/cras/src/server/cras_rclient_util.h index 50f7ed98..3a3d499a 100644 --- a/cras/src/server/cras_rclient_util.h +++ b/cras/src/server/cras_rclient_util.h @@ -102,6 +102,21 @@ struct cras_rclient *rclient_generic_create(int fd, size_t id, const struct cras_rclient_ops *ops, int supported_directions); +/* Generic handle_message_from_client function for different types of rlicnets. + * Supports only stream connect and stream disconnect messages. + * + * Args: + * client - The cras_rclient which gets the message. + * msg - The cras_server_message from client. + * fds - The array for incoming fds from client. + * num_fds - The number of fds from client. + * Returns: + * 0 on success, negative error on failure. + */ +int rclient_handle_message_from_client(struct cras_rclient *client, + const struct cras_server_message *msg, + int *fds, unsigned int num_fds); + /* * Converts an old version of connect message to the correct * cras_connect_message. Returns zero on success, negative on failure. diff --git a/cras/src/server/cras_unified_rclient.c b/cras/src/server/cras_unified_rclient.c index 0be3b35d..cdb7b47d 100644 --- a/cras/src/server/cras_unified_rclient.c +++ b/cras/src/server/cras_unified_rclient.c @@ -14,58 +14,9 @@ #include "cras_types.h" #include "cras_util.h" -/* Entry point for handling a message from the client. Called from the main - * server context. */ -static int cpr_handle_message_from_client(struct cras_rclient *client, - const struct cras_server_message *msg, - int *fds, unsigned int num_fds) -{ - int rc = 0; - assert(client && msg); - - rc = rclient_validate_message_fds(msg, fds, num_fds); - if (rc < 0) { - for (int i = 0; i < (int)num_fds; i++) - if (fds[i] >= 0) - close(fds[i]); - return rc; - } - int fd = num_fds > 0 ? fds[0] : -1; - - switch (msg->id) { - case CRAS_SERVER_CONNECT_STREAM: { - int client_shm_fd = num_fds > 1 ? fds[1] : -1; - struct cras_connect_message cmsg; - if (MSG_LEN_VALID(msg, struct cras_connect_message)) { - rc = rclient_handle_client_stream_connect( - client, - (const struct cras_connect_message *)msg, fd, - client_shm_fd); - } else if (!convert_connect_message_old(msg, &cmsg)) { - rc = rclient_handle_client_stream_connect( - client, &cmsg, fd, client_shm_fd); - } else { - return -EINVAL; - } - break; - } - case CRAS_SERVER_DISCONNECT_STREAM: - if (!MSG_LEN_VALID(msg, struct cras_disconnect_stream_message)) - return -EINVAL; - rc = rclient_handle_client_stream_disconnect( - client, - (const struct cras_disconnect_stream_message *)msg); - break; - default: - break; - } - - return rc; -} - /* Declarations of cras_rclient operators for cras_unified_rclient. */ static const struct cras_rclient_ops cras_unified_rclient_ops = { - .handle_message_from_client = cpr_handle_message_from_client, + .handle_message_from_client = rclient_handle_message_from_client, .send_message_to_client = rclient_send_message_to_client, .destroy = rclient_destroy, }; |