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