diff options
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 39 | ||||
| -rw-r--r-- | cli/src/cli-xml-output.c | 47 | 
2 files changed, 86 insertions, 0 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index ee7d3b2c841..b7c6691abd5 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -215,6 +215,31 @@ out:  }  int +gf_cli_output_peer_hostnames (dict_t *dict, int count, char *prefix) +{ +        int ret = -1; +        char key[256] = {0,}; +        int i = 0; +        char *hostname = NULL; + +        cli_out ("Other names:"); +        /* Starting from friend.hostname1, as friend.hostname0 will be the same +         * as friend.hostname +         */ +        for (i = 1; i < count; i++) { +                memset (key, 0, sizeof (key)); +                snprintf (key, sizeof (key), "%s.hostname%d", prefix, i); +                ret = dict_get_str (dict, key, &hostname); +                if (ret) +                        break; +                cli_out ("%s", hostname); +                hostname = NULL; +        } + +        return ret; +} + +int  gf_cli_output_peer_status (dict_t *dict, int count)  {          int                        ret   = -1; @@ -225,6 +250,7 @@ gf_cli_output_peer_status (dict_t *dict, int count)          char                       *state = NULL;          int32_t                    connected = 0;          char                       *connected_str = NULL; +        int                        hostname_count = 0;          cli_out ("Number of Peers: %d", count);          i = 1; @@ -256,6 +282,19 @@ gf_cli_output_peer_status (dict_t *dict, int count)                  cli_out ("\nHostname: %s\nUuid: %s\nState: %s (%s)",                           hostname_buf, uuid_buf, state, connected_str); + +                memset (key, 0, sizeof (key)); +                snprintf (key, sizeof (key), "friend%d.hostname_count", i); +                ret = dict_get_int32 (dict, key, &hostname_count); +                /* Print other addresses only if there are more than 1. +                 */ +                if ((ret == 0) && (hostname_count > 1)) { +                        memset (key, 0, sizeof (key)); +                        snprintf (key, sizeof (key), "friend%d", i); +                        ret = gf_cli_output_peer_hostnames (dict, +                                                            hostname_count, +                                                            key); +                }                  i++;          } diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c index dd38a51c6c0..78d131583e9 100644 --- a/cli/src/cli-xml-output.c +++ b/cli/src/cli-xml-output.c @@ -3018,6 +3018,41 @@ out:  #endif  } +#if (HAVE_LIB_XML) +static int +cli_xml_output_peer_hostnames (xmlTextWriterPtr writer, dict_t *dict, +                               const char *prefix, int count) +{ +        int   ret       = -1; +        int   i         = 0; +        char *hostname  = NULL; +        char  key[1024] = {0,}; + +        /* <hostnames> */ +        ret = xmlTextWriterStartElement (writer, (xmlChar *)"hostnames"); +        XML_RET_CHECK_AND_GOTO (ret, out); + +        for (i = 0; i < count; i++) { +                memset (key, 0, sizeof (key)); +                snprintf (key, sizeof (key), "%s.hostname%d", prefix, i); +                ret = dict_get_str (dict, key, &hostname); +                if (ret) +                        goto out; +                ret = xmlTextWriterWriteFormatElement +                        (writer, (xmlChar *)"hostname", "%s", hostname); +                XML_RET_CHECK_AND_GOTO (ret, out); +                hostname = NULL; +        } + +        /* </hostnames> */ +        ret = xmlTextWriterEndElement (writer); + +out: +        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +        return ret; +} +#endif +  int  cli_xml_output_peer_status (dict_t *dict, int op_ret, int op_errno,                              char *op_errstr) @@ -3032,6 +3067,7 @@ cli_xml_output_peer_status (dict_t *dict, int op_ret, int op_errno,          int                     connected = 0;          int                     state_id = 0;          char                    *state_str = NULL; +        int                     hostname_count = 0;          int                     i = 1;          char                    key[1024] = {0,}; @@ -3082,6 +3118,17 @@ cli_xml_output_peer_status (dict_t *dict, int op_ret, int op_errno,                  XML_RET_CHECK_AND_GOTO (ret, out);                  memset (key, 0, sizeof (key)); +                snprintf (key, sizeof (key), "friend%d.hostname_count", i); +                ret = dict_get_int32 (dict, key, &hostname_count); +                if ((ret == 0) && (hostname_count > 0)) { +                        memset (key, 0, sizeof (key)); +                        snprintf (key, sizeof (key), "friend%d", i); +                        ret = cli_xml_output_peer_hostnames (writer, dict, key, +                                                             hostname_count); +                        XML_RET_CHECK_AND_GOTO (ret, out); +                } + +                memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "friend%d.connected", i);                  ret = dict_get_int32 (dict, key, &connected);                  if (ret)  | 
