[Asterisk-cvs] asterisk utils.c,NONE,1.1 Makefile,1.85,1.86 acl.c,1.18,1.19 asterisk.c,1.84,1.85
citats at lists.digium.com
citats at lists.digium.com
Sun May 9 04:12:41 CDT 2004
- Previous message: [Asterisk-cvs] asterisk/apps app_directory.c,1.20,1.21 app_enumlookup.c,1.7,1.8 app_festival.c,1.19,1.20 app_groupcount.c,1.2,1.3 app_playback.c,1.11,1.12 app_queue.c,1.58,1.59 app_read.c,1.4,1.5 app_senddtmf.c,1.4,1.5 app_setcdruserfield.c,1.3,1.4 app_setcidname.c,1.1,1.2 app_setcidnum.c,1.1,1.2
- Next message: [Asterisk-cvs] asterisk/channels chan_iax.c,1.57,1.58 chan_mgcp.c,1.48,1.49
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv28595
Modified Files:
Makefile acl.c asterisk.c
Added Files:
utils.c
Log Message:
Add new file utils.c, Move ast_gethostbyname to utils.c
--- NEW FILE: utils.c ---
/*
* Asterisk -- A telephony toolkit for Linux.
*
* Utility functions
*
* Copyright (C) 2004, Digium
*
* This program is free software, distributed under the terms of
* the GNU General Public License
*/
#include <asterisk/lock.h>
#include <asterisk/utils.h>
#if defined(__FreeBSD__)
/* duh? ERANGE value copied from web... */
#define ERANGE 34
#undef gethostbyname
int gethostbyname_r (const char *name, struct hostent *ret, char *buf,
size_t buflen, struct hostent **result,
int *h_errnop)
{
int hsave;
struct hostent *ph;
static ast_mutex_t __mutex = AST_MUTEX_INITIALIZER;
ast_mutex_lock(&__mutex); /* begin critical area */
hsave = h_errno;
ph = gethostbyname(name);
*h_errnop = h_errno; /* copy h_errno to *h_herrnop */
if (ph == NULL) {
*result = NULL;
} else {
char **p, **q;
char *pbuf;
int nbytes=0;
int naddr=0, naliases=0;
/* determine if we have enough space in buf */
/* count how many addresses */
for (p = ph->h_addr_list; *p != 0; p++) {
nbytes += ph->h_length; /* addresses */
nbytes += sizeof(*p); /* pointers */
naddr++;
}
nbytes += sizeof(*p); /* one more for the terminating NULL */
/* count how many aliases, and total length of strings */
for (p = ph->h_aliases; *p != 0; p++) {
nbytes += (strlen(*p)+1); /* aliases */
nbytes += sizeof(*p); /* pointers */
naliases++;
}
nbytes += sizeof(*p); /* one more for the terminating NULL */
/* here nbytes is the number of bytes required in buffer */
/* as a terminator must be there, the minimum value is ph->h_length */
if(nbytes > buflen) {
*result = NULL;
ast_mutex_unlock(&__mutex); /* end critical area */
return ERANGE; /* not enough space in buf!! */
}
/* There is enough space. Now we need to do a deep copy! */
/* Allocation in buffer:
from [0] to [(naddr-1) * sizeof(*p)]:
pointers to addresses
at [naddr * sizeof(*p)]:
NULL
from [(naddr+1) * sizeof(*p)] to [(naddr+naliases) * sizeof(*p)] :
pointers to aliases
at [(naddr+naliases+1) * sizeof(*p)]:
NULL
then naddr addresses (fixed length), and naliases aliases (asciiz).
*/
*ret = *ph; /* copy whole structure (not its address!) */
/* copy addresses */
q = (char **)buf; /* pointer to pointers area (type: char **) */
ret->h_addr_list = q; /* update pointer to address list */
pbuf = buf + ((naddr+naliases+2)*sizeof(*p)); /* skip that area */
for (p = ph->h_addr_list; *p != 0; p++) {
memcpy(pbuf, *p, ph->h_length); /* copy address bytes */
*q++ = pbuf; /* the pointer is the one inside buf... */
pbuf += ph->h_length; /* advance pbuf */
}
*q++ = NULL; /* address list terminator */
/* copy aliases */
ret->h_aliases = q; /* update pointer to aliases list */
for (p = ph->h_aliases; *p != 0; p++) {
strcpy(pbuf, *p); /* copy alias strings */
*q++ = pbuf; /* the pointer is the one inside buf... */
pbuf += strlen(*p); /* advance pbuf */
*pbuf++ = 0; /* string terminator */
}
*q++ = NULL; /* terminator */
strcpy(pbuf, ph->h_name); /* copy alias strings */
ret->h_name = pbuf;
pbuf += strlen(ph->h_name); /* advance pbuf */
*pbuf++ = 0; /* string terminator */
*result = ret; /* and let *result point to structure */
}
h_errno = hsave; /* restore h_errno */
ast_mutex_unlock(&__mutex); /* end critical area */
return (*result != NULL);
}
#endif
struct hostent *ast_gethostbyname(const char *host, struct ast_hostent *hp)
{
int res;
int herrno;
struct hostent *result = NULL;
res = gethostbyname_r(host, &hp->hp, hp->buf, sizeof(hp->buf), &result, &herrno);
if (res || !hp->hp.h_addr_list || !hp->hp.h_addr_list[0])
return NULL;
return &hp->hp;
}
Index: Makefile
===================================================================
RCS file: /usr/cvsroot/asterisk/Makefile,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -d -r1.85 -r1.86
--- Makefile 3 May 2004 00:54:15 -0000 1.85
+++ Makefile 9 May 2004 08:22:15 -0000 1.86
@@ -173,7 +173,8 @@
ulaw.o alaw.o callerid.o fskmodem.o image.o app.o \
cdr.o tdd.o acl.o rtp.o manager.o asterisk.o ast_expr.o \
dsp.o chanvars.o indications.o autoservice.o db.o privacy.o \
- astmm.o enum.o srv.o dns.o aescrypt.o aestab.o aeskey.o
+ astmm.o enum.o srv.o dns.o aescrypt.o aestab.o aeskey.o \
+ utils.o
ifeq (${OSARCH},Darwin)
OBJS+=poll.o dlfcn.o
ASTLINK=-Wl,-dynamic
Index: acl.c
===================================================================
RCS file: /usr/cvsroot/asterisk/acl.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- acl.c 28 Apr 2004 17:28:35 -0000 1.18
+++ acl.c 9 May 2004 08:22:15 -0000 1.19
@@ -22,6 +22,7 @@
#include <asterisk/acl.h>
#include <asterisk/logger.h>
#include <asterisk/channel.h>
+#include <asterisk/utils.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netdb.h>
Index: asterisk.c
===================================================================
RCS file: /usr/cvsroot/asterisk/asterisk.c,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -d -r1.84 -r1.85
--- asterisk.c 7 May 2004 20:18:55 -0000 1.84
+++ asterisk.c 9 May 2004 08:22:15 -0000 1.85
@@ -1723,135 +1723,3 @@
}
return 0;
}
-
-
-#if defined(__FreeBSD__)
-
-/* duh? ERANGE value copied from web... */
-#define ERANGE 34
-#undef gethostbyname
-
-int gethostbyname_r (const char *name,
- struct hostent *ret,
- char *buf,
- size_t buflen,
- struct hostent **result,
- int *h_errnop);
-
-int gethostbyname_r (const char *name,
- struct hostent *ret,
- char *buf,
- size_t buflen,
- struct hostent **result,
- int *h_errnop) {
-
- int hsave;
- struct hostent *ph;
- static ast_mutex_t __mutex = AST_MUTEX_INITIALIZER;
- ast_mutex_lock(&__mutex); /* begin critical area */
- hsave = h_errno;
-
- ph = gethostbyname(name);
- *h_errnop = h_errno; /* copy h_errno to *h_herrnop */
- if (ph == NULL) {
- *result = NULL;
- } else {
- char **p, **q;
- char *pbuf;
- int nbytes=0;
- int naddr=0, naliases=0;
- /* determine if we have enough space in buf */
-
- /* count how many addresses */
- for (p = ph->h_addr_list; *p != 0; p++) {
- nbytes += ph->h_length; /* addresses */
- nbytes += sizeof(*p); /* pointers */
- naddr++;
- }
- nbytes += sizeof(*p); /* one more for the terminating NULL */
-
- /* count how many aliases, and total length of strings */
-
- for (p = ph->h_aliases; *p != 0; p++) {
- nbytes += (strlen(*p)+1); /* aliases */
- nbytes += sizeof(*p); /* pointers */
- naliases++;
- }
- nbytes += sizeof(*p); /* one more for the terminating NULL */
-
- /* here nbytes is the number of bytes required in buffer */
- /* as a terminator must be there, the minimum value is ph->h_length */
- if(nbytes > buflen) {
- *result = NULL;
- pthread_mutex_unlock(&__mutex); /* end critical area */
- return ERANGE; /* not enough space in buf!! */
- }
-
- /* There is enough space. Now we need to do a deep copy! */
- /* Allocation in buffer:
- from [0] to [(naddr-1) * sizeof(*p)]:
- pointers to addresses
- at [naddr * sizeof(*p)]:
- NULL
- from [(naddr+1) * sizeof(*p)] to [(naddr+naliases) * sizeof(*p)] :
- pointers to aliases
- at [(naddr+naliases+1) * sizeof(*p)]:
- NULL
- then naddr addresses (fixed length), and naliases aliases (asciiz).
- */
-
- *ret = *ph; /* copy whole structure (not its address!) */
-
- /* copy addresses */
- q = (char **)buf; /* pointer to pointers area (type: char **) */
- ret->h_addr_list = q; /* update pointer to address list */
- pbuf = buf + ((naddr+naliases+2)*sizeof(*p)); /* skip that area */
- for (p = ph->h_addr_list; *p != 0; p++) {
- memcpy(pbuf, *p, ph->h_length); /* copy address bytes */
- *q++ = pbuf; /* the pointer is the one inside buf... */
- pbuf += ph->h_length; /* advance pbuf */
- }
- *q++ = NULL; /* address list terminator */
-
- /* copy aliases */
-
- ret->h_aliases = q; /* update pointer to aliases list */
- for (p = ph->h_aliases; *p != 0; p++) {
- strcpy(pbuf, *p); /* copy alias strings */
- *q++ = pbuf; /* the pointer is the one inside buf... */
- pbuf += strlen(*p); /* advance pbuf */
- *pbuf++ = 0; /* string terminator */
- }
- *q++ = NULL; /* terminator */
-
- strcpy(pbuf, ph->h_name); /* copy alias strings */
- ret->h_name = pbuf;
- pbuf += strlen(ph->h_name); /* advance pbuf */
- *pbuf++ = 0; /* string terminator */
-
- *result = ret; /* and let *result point to structure */
-
- }
- h_errno = hsave; /* restore h_errno */
-
- ast_mutex_unlock(&__mutex); /* end critical area */
-
- return (*result != NULL);
-
-}
-
-
-#endif
-
-struct hostent *ast_gethostbyname(const char *host, struct ast_hostent *hp)
-{
- int res;
- int herrno;
- struct hostent *result = NULL;
-
- res = gethostbyname_r(host, &hp->hp, hp->buf, sizeof(hp->buf), &result, &herrno);
-
- if (res || !hp->hp.h_addr_list || !hp->hp.h_addr_list[0])
- return NULL;
- return &hp->hp;
-}
- Previous message: [Asterisk-cvs] asterisk/apps app_directory.c,1.20,1.21 app_enumlookup.c,1.7,1.8 app_festival.c,1.19,1.20 app_groupcount.c,1.2,1.3 app_playback.c,1.11,1.12 app_queue.c,1.58,1.59 app_read.c,1.4,1.5 app_senddtmf.c,1.4,1.5 app_setcdruserfield.c,1.3,1.4 app_setcidname.c,1.1,1.2 app_setcidnum.c,1.1,1.2
- Next message: [Asterisk-cvs] asterisk/channels chan_iax.c,1.57,1.58 chan_mgcp.c,1.48,1.49
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the svn-commits
mailing list