summaryrefslogtreecommitdiff
path: root/pjlib/src
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-12-02 15:36:46 +0000
committerBenny Prijono <bennylp@teluu.com>2007-12-02 15:36:46 +0000
commitb49338ee972a66fb6e5ece4b97440d0c3cfa642b (patch)
tree0a3df788f90101bd04b667021eac514355f22b1f /pjlib/src
parentea951533e9d970b9fd9d98b34081f568679d9bfc (diff)
More ticket #415: Added pj_sockaddr_get_len() and pj_inet_ntop2(), and fixed Symbian combilation warnings with gcce
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1608 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/src')
-rw-r--r--pjlib/src/pj/addr_resolv_sock.c18
-rw-r--r--pjlib/src/pj/addr_resolv_symbian.cpp2
-rw-r--r--pjlib/src/pj/ioqueue_symbian.cpp4
-rw-r--r--pjlib/src/pj/ip_helper_symbian.cpp7
-rw-r--r--pjlib/src/pj/os_symbian.h8
-rw-r--r--pjlib/src/pj/sock_common.c27
-rw-r--r--pjlib/src/pj/sock_symbian.cpp4
7 files changed, 47 insertions, 23 deletions
diff --git a/pjlib/src/pj/addr_resolv_sock.c b/pjlib/src/pj/addr_resolv_sock.c
index aeb61951..997b7bd4 100644
--- a/pjlib/src/pj/addr_resolv_sock.c
+++ b/pjlib/src/pj/addr_resolv_sock.c
@@ -61,7 +61,7 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
{
#if defined(PJ_SOCK_HAS_GETADDRINFO) && PJ_SOCK_HAS_GETADDRINFO!=0
char nodecopy[PJ_MAX_HOSTNAME];
- struct addrinfo hint, *res;
+ struct addrinfo hint, *res, *orig_res;
unsigned i;
int rc;
@@ -84,18 +84,22 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
if (rc != 0)
return PJ_ERESOLVE;
+ orig_res = res;
+
/* Enumerate each item in the result */
for (i=0; i<*count && res; res=res->ai_next) {
- int len;
-
/* Ignore unwanted address families */
if (af!=PJ_AF_UNSPEC && res->ai_family != af)
continue;
/* Store canonical name (possibly truncating the name) */
- pj_ansi_strncpy(ai[i].ai_canonname, res->ai_canonname,
- sizeof(ai[i].ai_canonname));
- ai[i].ai_canonname[sizeof(ai[i].ai_canonname)-1] = '\0';
+ if (res->ai_canonname) {
+ pj_ansi_strncpy(ai[i].ai_canonname, res->ai_canonname,
+ sizeof(ai[i].ai_canonname));
+ ai[i].ai_canonname[sizeof(ai[i].ai_canonname)-1] = '\0';
+ } else {
+ pj_ansi_strcpy(ai[i].ai_canonname, nodecopy);
+ }
/* Store address */
PJ_ASSERT_ON_FAIL(res->ai_addrlen <= sizeof(pj_sockaddr), continue);
@@ -107,6 +111,8 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
*count = i;
+ freeaddrinfo(orig_res);
+
/* Done */
return PJ_SUCCESS;
diff --git a/pjlib/src/pj/addr_resolv_symbian.cpp b/pjlib/src/pj/addr_resolv_symbian.cpp
index d2bc6366..d3698b51 100644
--- a/pjlib/src/pj/addr_resolv_symbian.cpp
+++ b/pjlib/src/pj/addr_resolv_symbian.cpp
@@ -91,7 +91,7 @@ static pj_status_t getaddrinfo_by_af(int af, const pj_str_t *name,
int addrlen;
// Ignore if this is not the same address family
- if (inetAddr.Family() != af) {
+ if (inetAddr.Family() != (unsigned)af) {
resv.Next(nameEntry, reqStatus);
User::WaitForRequest(reqStatus);
continue;
diff --git a/pjlib/src/pj/ioqueue_symbian.cpp b/pjlib/src/pj/ioqueue_symbian.cpp
index d7aa9d6a..71d7de7f 100644
--- a/pjlib/src/pj/ioqueue_symbian.cpp
+++ b/pjlib/src/pj/ioqueue_symbian.cpp
@@ -701,9 +701,9 @@ PJ_DEF(pj_status_t) pj_ioqueue_recvfrom( pj_ioqueue_key_t *key,
if (addr || addrlen) {
PJ_ASSERT_RETURN(addr && addrlen && *addrlen, PJ_EINVAL);
if (sock->GetAf() == PJ_AF_INET) {
- PJ_ASSERT_RETURN(*addrlen >= sizeof(pj_sockaddr_in), PJ_EINVAL);
+ PJ_ASSERT_RETURN(*addrlen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
} else if (sock->GetAf() == PJ_AF_INET6) {
- PJ_ASSERT_RETURN(*addrlen >= sizeof(pj_sockaddr_in6), PJ_EINVAL);
+ PJ_ASSERT_RETURN(*addrlen>=(int)sizeof(pj_sockaddr_in6), PJ_EINVAL);
}
}
diff --git a/pjlib/src/pj/ip_helper_symbian.cpp b/pjlib/src/pj/ip_helper_symbian.cpp
index 3cd2ebfd..44b8012c 100644
--- a/pjlib/src/pj/ip_helper_symbian.cpp
+++ b/pjlib/src/pj/ip_helper_symbian.cpp
@@ -59,7 +59,7 @@ static pj_status_t rsock_enum_interface(int af,
TInetAddr &iAddress = info().iAddress;
int namelen;
- if (iAddress.Family() != af) {
+ if (iAddress.Family() != (unsigned)af) {
continue;
}
@@ -76,11 +76,6 @@ static pj_status_t rsock_enum_interface(int af,
*p_cnt = i;
return PJ_SUCCESS;
-
-on_error:
- rSock.Close();
- *p_cnt = 0;
- return PJ_RETURN_OS_ERROR(rc);
}
/*
diff --git a/pjlib/src/pj/os_symbian.h b/pjlib/src/pj/os_symbian.h
index f564075f..8fe4783d 100644
--- a/pjlib/src/pj/os_symbian.h
+++ b/pjlib/src/pj/os_symbian.h
@@ -244,12 +244,12 @@ public:
pj_bzero(&pj_addr, sizeof(pj_sockaddr));
pj_addr.addr.sa_family = (pj_uint16_t)sym_addr.Family();
if (pj_addr.addr.sa_family == PJ_AF_INET) {
- PJ_ASSERT_RETURN(*addr_len >= sizeof(pj_sockaddr_in), PJ_ETOOSMALL);
+ PJ_ASSERT_RETURN(*addr_len>=(int)sizeof(pj_sockaddr_in), PJ_ETOOSMALL);
pj_addr.ipv4.sin_addr.s_addr = pj_htonl(sym_addr.Address());
pj_addr.ipv4.sin_port = pj_htons((pj_uint16_t) sym_addr.Port());
*addr_len = sizeof(pj_sockaddr_in);
} else if (pj_addr.addr.sa_family == PJ_AF_INET6) {
- PJ_ASSERT_RETURN(*addr_len >= sizeof(pj_sockaddr_in6), PJ_ETOOSMALL);
+ PJ_ASSERT_RETURN(*addr_len>=(int)sizeof(pj_sockaddr_in6), PJ_ETOOSMALL);
const TIp6Addr & ip6 = sym_addr.Ip6Address();
pj_memcpy(&pj_addr.ipv6.sin6_addr, ip6.u.iAddr8, 16);
pj_addr.ipv6.sin6_port = pj_htons((pj_uint16_t) sym_addr.Port());
@@ -271,14 +271,14 @@ public:
TInetAddr & sym_addr)
{
if (pj_addr.addr.sa_family == PJ_AF_INET) {
- PJ_ASSERT_RETURN(addrlen >= sizeof(pj_sockaddr_in), PJ_EINVAL);
+ PJ_ASSERT_RETURN(addrlen >= (int)sizeof(pj_sockaddr_in), PJ_EINVAL);
sym_addr.Init(KAfInet);
sym_addr.SetAddress((TUint32)pj_ntohl(pj_addr.ipv4.sin_addr.s_addr));
sym_addr.SetPort(pj_ntohs(pj_addr.ipv4.sin_port));
} else if (pj_addr.addr.sa_family == PJ_AF_INET6) {
TIp6Addr ip6;
- PJ_ASSERT_RETURN(addrlen >= sizeof(pj_sockaddr_in6), PJ_EINVAL);
+ PJ_ASSERT_RETURN(addrlen>=(int)sizeof(pj_sockaddr_in6), PJ_EINVAL);
pj_memcpy(ip6.u.iAddr8, &pj_addr.ipv6.sin6_addr, 16);
sym_addr.Init(KAfInet6);
sym_addr.SetAddress(ip6);
diff --git a/pjlib/src/pj/sock_common.c b/pjlib/src/pj/sock_common.c
index 06aa9411..1c108336 100644
--- a/pjlib/src/pj/sock_common.c
+++ b/pjlib/src/pj/sock_common.c
@@ -47,6 +47,18 @@ PJ_DEF(pj_in_addr) pj_inet_addr2(const char *cp)
}
/*
+ * Get text representation.
+ */
+PJ_DEF(char*) pj_inet_ntop2( int af, const void *src,
+ char *dst, int size)
+{
+ pj_status_t status;
+
+ status = pj_inet_ntop(af, src, dst, size);
+ return (status==PJ_SUCCESS)? dst : NULL;
+}
+
+/*
* Set the IP address of an IP socket address from string address,
* with resolving the host if necessary. The string address may be in a
* standard numbers and dots notation or may be a hostname. If hostname
@@ -253,6 +265,18 @@ PJ_DEF(unsigned) pj_sockaddr_get_addr_len(const pj_sockaddr_t *addr)
}
/*
+ * Get socket address length.
+ */
+PJ_DEF(unsigned) pj_sockaddr_get_len(const pj_sockaddr_t *addr)
+{
+ const pj_sockaddr *a = (const pj_sockaddr*) addr;
+ PJ_ASSERT_RETURN(a->addr.sa_family == PJ_AF_INET ||
+ a->addr.sa_family == PJ_AF_INET6, PJ_EAFNOTSUP);
+ return a->addr.sa_family == PJ_AF_INET6 ?
+ sizeof(pj_sockaddr_in6) : sizeof(pj_sockaddr_in);
+}
+
+/*
* Set port number of pj_sockaddr_in
*/
PJ_DEF(void) pj_sockaddr_in_set_port(pj_sockaddr_in *addr,
@@ -269,8 +293,7 @@ PJ_DEF(pj_status_t) pj_sockaddr_set_port(pj_sockaddr *addr,
{
int af = addr->addr.sa_family;
- PJ_ASSERT_ON_FAIL(af == PJ_AF_INET || af == PJ_AF_INET6,
- PJ_EINVAL);
+ PJ_ASSERT_RETURN(af==PJ_AF_INET || af==PJ_AF_INET6, PJ_EINVAL);
if (af == PJ_AF_INET6)
addr->ipv6.sin6_port = pj_htons(hostport);
diff --git a/pjlib/src/pj/sock_symbian.cpp b/pjlib/src/pj/sock_symbian.cpp
index 90044a35..f53f657e 100644
--- a/pjlib/src/pj/sock_symbian.cpp
+++ b/pjlib/src/pj/sock_symbian.cpp
@@ -524,7 +524,7 @@ PJ_DEF(pj_status_t) pj_sock_bind( pj_sock_t sock,
PJ_CHECK_STACK();
PJ_ASSERT_RETURN(sock != 0, PJ_EINVAL);
- PJ_ASSERT_RETURN(addr && len >= sizeof(pj_sockaddr_in), PJ_EINVAL);
+ PJ_ASSERT_RETURN(addr && len>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
// Convert PJLIB's pj_sockaddr into Symbian's TInetAddr
TInetAddr inetAddr;
@@ -675,7 +675,7 @@ PJ_DEF(pj_status_t) pj_sock_sendto(pj_sock_t sock,
RSocket &rSock = pjSock->Socket();
// Only supports AF_INET for now
- PJ_ASSERT_RETURN(tolen >= sizeof(pj_sockaddr_in), PJ_EINVAL);
+ PJ_ASSERT_RETURN(tolen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
TInetAddr inetAddr;
status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)to, tolen, inetAddr);