You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2020/02/14 07:01:38 UTC
[incubator-nuttx-apps] branch master updated: wireless: gs2200m:
Add support for setsockopt_request()
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git
The following commit(s) were added to refs/heads/master by this push:
new de4d52d wireless: gs2200m: Add support for setsockopt_request()
de4d52d is described below
commit de4d52d465fee9cb9ed48e8d1b8d73e8f5888519
Author: Masayuki Ishikawa <ma...@gmail.com>
AuthorDate: Fri Feb 14 13:13:06 2020 +0900
wireless: gs2200m: Add support for setsockopt_request()
NOTE: Just check parameters and do nothing special
Signed-off-by: Masayuki Ishikawa <Ma...@jp.sony.com>
---
wireless/gs2200m/gs2200m_main.c | 74 +++++++++++++++++++++++++++++++++++++++--
1 file changed, 72 insertions(+), 2 deletions(-)
diff --git a/wireless/gs2200m/gs2200m_main.c b/wireless/gs2200m/gs2200m_main.c
index 75cc71f..66c3541 100644
--- a/wireless/gs2200m/gs2200m_main.c
+++ b/wireless/gs2200m/gs2200m_main.c
@@ -1221,8 +1221,78 @@ err_out:
static int setsockopt_request(int fd, FAR struct gs2200m_s *priv,
FAR void *hdrbuf)
{
- DEBUGASSERT(false);
- return -ENOSYS;
+ FAR struct usrsock_request_setsockopt_s *req = hdrbuf;
+ struct usrsock_message_req_ack_s resp;
+ FAR struct usock_s *usock;
+ ssize_t rlen;
+ int ret = 0;
+ int value;
+
+ DEBUGASSERT(priv);
+ DEBUGASSERT(req);
+
+ gs2200m_printf("%s: called **** \n", __func__);
+
+ /* Check if this socket exists. */
+
+ usock = gs2200m_socket_get(priv, req->usockid);
+
+ if (!usock)
+ {
+ ret = -EBADFD;
+ goto prepare;
+ }
+
+ if (req->level != SOL_SOCKET)
+ {
+ gs2200m_printf("setsockopt: level=%d not supported\n",
+ __func__, req->level);
+ ret = -ENOPROTOOPT;
+ goto prepare;
+ }
+
+ if (req->option != SO_REUSEADDR)
+ {
+ gs2200m_printf("setsockopt: option=%d not supported\n",
+ __func__, req->option);
+ ret = -ENOPROTOOPT;
+ goto prepare;
+ }
+
+ if (req->valuelen < sizeof(value))
+ {
+ ret = -EINVAL;
+ goto prepare;
+ }
+
+ /* Read value. */
+
+ rlen = read(fd, &value, sizeof(value));
+
+ if (rlen < 0 || rlen < sizeof(value))
+ {
+ ret = -EFAULT;
+ goto prepare;
+ }
+
+ /* Debug print */
+
+ gs2200m_printf("setsockopt: option=%d value=%d\n",
+ __func__, req->option, value);
+
+ ret = OK;
+
+prepare:
+
+ /* Send ACK response */
+
+ memset(&resp, 0, sizeof(resp));
+ resp.result = ret;
+
+ ret = _send_ack_common(fd, req->head.xid, &resp);
+
+ gs2200m_printf("%s: end (ret=%d) \n", __func__, ret);
+ return ret;
}
/****************************************************************************