Implement registered service getting function 61/276661/1
authorWootak Jung <wootak.jung@samsung.com>
Thu, 31 Mar 2022 00:44:05 +0000 (09:44 +0900)
committerhyunuk.tak <hyunuk.tak@samsung.com>
Thu, 23 Jun 2022 02:20:09 +0000 (11:20 +0900)
Change-Id: I30295a6c4f30e0e16d40732ca1a62b939db5ea7e
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
include/thread-socket-handler.h
src/thread-srp.c

index 9c8cdad..2714dd4 100644 (file)
@@ -38,6 +38,7 @@ extern "C" {
 #define THREAD_NETDATA_REGISTER_CMD "netdata register"
 #define THREAD_SRP_SERVER_START_CMD "srp server enable"
 #define THREAD_SRP_SERVER_STOP_CMD "srp server disable"
+#define THREAD_SRP_SERVER_SERVICE_CMD "srp server service"
 #define THREAD_SRP_CLIENT_REGISTER_SERVICE_CMD "srp client service add"
 #define THREAD_SRP_CLIENT_SET_HOST_ADDRESS_CMD "srp client host address"
 #define THREAD_SRP_CLIENT_SET_HOST_NAME_CMD "srp client host name"
index 5417c4e..33f7253 100644 (file)
@@ -232,6 +232,66 @@ int thread_srp_server_get_registered_service(thread_instance_h instance,
        THREAD_VALIDATE_INPUT_PARAMETER(port);
        THREAD_VALIDATE_INPUT_PARAMETER(is_deleted);
 
+       int ret = THREAD_ERROR_NONE;
+       char buffer[THREAD_MAX_BUFFER_SIZE];
+       char *ptr, *last;
+       char service_name_buf[THREAD_MAX_BUFFER_SIZE] = "";
+
+       /* SRP server service */
+       const char *msg = THREAD_SRP_SERVER_SERVICE_CMD;
+
+       ret = _thread_socket_client_write(_thread_get_socket_fd(), msg, strlen(msg));
+       if (ret != THREAD_ERROR_NONE) {
+               THREAD_DBG("Failed to execute command %s", msg);
+               return ret;
+       }
+       THREAD_DBG("Executed command '%s' with size %zu", msg, strlen(msg));
+
+       /* Check response */
+       ret = _thread_socket_client_read(_thread_get_socket_fd(), buffer);
+       if (ret != THREAD_ERROR_NONE && ret != THREAD_ERROR_ALREADY_DONE) {
+               THREAD_DBG("Socket response failed..");
+               return ret;
+       }
+
+       /* result is like below:
+        * > srp server service
+        * my-service._ipps._tcp.default.service.arpa.
+        *     deleted: false
+        *     subtypes: (null)
+        *     port: 12345
+        *     priority: 0
+        *     weight: 0
+        *     TXT: []
+        *     host: my-host.default.service.arpa.
+        *     addresses: [fded:5114:8263:1fe1:44f9:cc06:4a2d:534]
+        * Done
+        */
+
+       ptr = strtok_r(buffer, "\n", &last);
+       strcat(service_name_buf, ptr);
+       service_name_buf[strlen(service_name_buf) - 1] =  '\0';
+       *service_name = g_strdup(service_name_buf);
+
+       while ((ptr = strtok_r(NULL, "\n", &last)) != NULL) {
+               if (strncmp(ptr, "    deleted: ", 13) == 0) {
+                       *is_deleted = (ptr[13] == 't') ? true : false;
+               } else if (strncmp(ptr, "    port: ", 10) == 0) {
+                       char port_buf[16] = "";
+                       strncpy(port_buf, &ptr[10], strlen(ptr) - 11);
+                       *port = atoi(port_buf);
+               } else if (strncmp(ptr, "    addresses: [", 16) == 0) {
+                       char address_buf[THREAD_IPV6_ADDRESS_LEN] = "";
+                       strncpy(address_buf, &ptr[16], strlen(ptr) - 18);
+                       *address = g_strdup(address_buf);
+               } else if (strncmp(ptr, "Done", 4) == 0) {
+                       break;
+               }
+       }
+
+       THREAD_DBG("service_name: %s, address: %s, port: %zu, is_deleted: %d",
+                       *service_name, *address, (size_t)*port, *is_deleted);
+
        FUNC_EXIT;
-       return THREAD_ERROR_NOT_SUPPORTED;
+       return ret;
 }