aboutsummaryrefslogtreecommitdiffstats
path: root/channels/iax2-provision.c
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2006-07-21 17:31:28 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2006-07-21 17:31:28 +0000
commitf395a52a02593f8556bd3786addc671d3f4250e0 (patch)
tree9a03027276c525f44c08eb5dc4d7b9035fa697c9 /channels/iax2-provision.c
parentc7eeabcdd20eb9b7fad38b03cd0784854c0813c9 (diff)
Merge a new implementation of ast_inet_ntoa, our thread safe replacement for
inet_ntoa, which uses thread specific data (aka thread local storage) instead of stack allocatted buffers to store the result. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@38042 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/iax2-provision.c')
-rw-r--r--channels/iax2-provision.c36
1 files changed, 24 insertions, 12 deletions
diff --git a/channels/iax2-provision.c b/channels/iax2-provision.c
index a46972983..0b1fc3e33 100644
--- a/channels/iax2-provision.c
+++ b/channels/iax2-provision.c
@@ -91,20 +91,24 @@ static struct iax_flag {
char *iax_provflags2str(char *buf, int buflen, unsigned int flags)
{
int x;
- if (!buf || buflen < 1) {
- return(NULL);
- }
+
+ if (!buf || buflen < 1)
+ return NULL;
+
buf[0] = '\0';
- for (x=0;x<sizeof(iax_flags) / sizeof(iax_flags[0]); x++) {
+
+ for (x = 0; x < sizeof(iax_flags) / sizeof(iax_flags[0]); x++) {
if (flags & iax_flags[x].value){
strncat(buf, iax_flags[x].name, buflen - strlen(buf) - 1);
strncat(buf, ",", buflen - strlen(buf) - 1);
}
}
- if (strlen(buf))
+
+ if (!ast_strlen_zero(buf))
buf[strlen(buf) - 1] = '\0';
else
strncpy(buf, "none", buflen - 1);
+
return buf;
}
@@ -408,37 +412,45 @@ static const char *ifthere(const char *s)
return "<unspecified>";
}
-static const char *iax_server(char *a, int alen, unsigned int addr)
+static const char *iax_server(unsigned int addr)
{
struct in_addr ia;
+
if (!addr)
return "<unspecified>";
+
ia.s_addr = htonl(addr);
- return ast_inet_ntoa(a, alen, ia);
+
+ return ast_inet_ntoa(ia);
}
static int iax_show_provisioning(int fd, int argc, char *argv[])
{
struct iax_template *cur;
- char iabuf[80]; /* Has to be big enough for 'flags' too */
+ char server[INET_ADDRSTRLEN];
+ char alternate[INET_ADDRSTRLEN];
+ char flags[80]; /* Has to be big enough for 'flags' too */
int found = 0;
if ((argc != 3) && (argc != 4))
return RESULT_SHOWUSAGE;
ast_mutex_lock(&provlock);
for (cur = templates;cur;cur = cur->next) {
if ((argc == 3) || (!strcasecmp(argv[3], cur->name))) {
- if (found) ast_cli(fd, "\n");
+ if (found)
+ ast_cli(fd, "\n");
+ ast_copy_string(server, iax_server(cur->server), sizeof(server));
+ ast_copy_string(alternate, iax_server(cur->altserver), sizeof(alternate));
ast_cli(fd, "== %s ==\n", cur->name);
ast_cli(fd, "Base Templ: %s\n", strlen(cur->src) ? cur->src : "<none>");
ast_cli(fd, "Username: %s\n", ifthere(cur->user));
ast_cli(fd, "Secret: %s\n", ifthere(cur->pass));
ast_cli(fd, "Language: %s\n", ifthere(cur->lang));
ast_cli(fd, "Bind Port: %d\n", cur->port);
- ast_cli(fd, "Server: %s\n", iax_server(iabuf, sizeof(iabuf), cur->server));
+ ast_cli(fd, "Server: %s\n", server);
ast_cli(fd, "Server Port: %d\n", cur->serverport);
- ast_cli(fd, "Alternate: %s\n", iax_server(iabuf, sizeof(iabuf), cur->altserver));
- ast_cli(fd, "Flags: %s\n", iax_provflags2str(iabuf, sizeof(iabuf), cur->flags));
+ ast_cli(fd, "Alternate: %s\n", alternate);
+ ast_cli(fd, "Flags: %s\n", iax_provflags2str(flags, sizeof(flags), cur->flags));
ast_cli(fd, "Format: %s\n", ast_getformatname(cur->format));
ast_cli(fd, "TOS: 0x%x\n", cur->tos);
found++;