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;
 }
 
 /****************************************************************************