Merge of trunk into branch-1.6.x.

git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/branches/branch-1.6.x@324 119443c7-1b9e-41f8-b6fc-b9c35fce742c
This commit is contained in:
Marcelo Roberto Jimenez 2008-02-10 02:27:45 +00:00
parent a785465222
commit f812b124d7
5 changed files with 68 additions and 46 deletions

View File

@ -2,6 +2,10 @@
Version 1.6.6 Version 1.6.6
******************************************************************************* *******************************************************************************
2008-02-10 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
* Changed "sys_errlist[errno]", which is deprecated, by
"strerror_r()", which is thread safe.
2008-02-06 Marcelo Jimenez <mroberto(at)users.sourceforge.net> 2008-02-06 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
* Slightly improved error report by showing the sys_errlist string * Slightly improved error report by showing the sys_errlist string
corresponding to errno. corresponding to errno.

View File

@ -376,8 +376,12 @@ schedule_request_job( IN int connfd,
* Return: void * Return: void
************************************************************************/ ************************************************************************/
static void static void
RunMiniServer( MiniServerSockArray * miniSock ) RunMiniServer( MiniServerSockArray *miniSock )
{ {
// strerror_r() buffer
const int ERROR_BUFFER_LEN = 256;
char errorBuffer[ERROR_BUFFER_LEN];
struct sockaddr_in clientAddr; struct sockaddr_in clientAddr;
socklen_t clientLen; socklen_t clientLen;
SOCKET connectHnd; SOCKET connectHnd;
@ -417,9 +421,9 @@ RunMiniServer( MiniServerSockArray * miniSock )
ret = select( maxMiniSock, &rdSet, NULL, &expSet, NULL ); ret = select( maxMiniSock, &rdSet, NULL, &expSet, NULL );
if ( ret == -1 ) { if ( ret == -1 ) {
strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
"Error in select(): %s\n", "Error in select(): %s\n", errorBuffer );
sys_errlist[errno] );
/* Avoid 100% CPU in case of repeated error in select() */ /* Avoid 100% CPU in case of repeated error in select() */
isleep( 1 ); isleep( 1 );
continue; continue;
@ -429,9 +433,9 @@ RunMiniServer( MiniServerSockArray * miniSock )
connectHnd = accept( miniServSock, connectHnd = accept( miniServSock,
( struct sockaddr * )&clientAddr, &clientLen ); ( struct sockaddr * )&clientAddr, &clientLen );
if( connectHnd == -1 ) { if( connectHnd == -1 ) {
strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
"miniserver: Error in accept(): %s\n", "miniserver: Error in accept(): %s\n", errorBuffer );
sys_errlist[errno] );
continue; continue;
} }
schedule_request_job( connectHnd, &clientAddr ); schedule_request_job( connectHnd, &clientAddr );
@ -546,6 +550,10 @@ int
get_miniserver_sockets( MiniServerSockArray * out, get_miniserver_sockets( MiniServerSockArray * out,
unsigned short listen_port ) unsigned short listen_port )
{ {
// strerror_r() buffer
const int ERROR_BUFFER_LEN = 256;
char errorBuffer[ERROR_BUFFER_LEN];
struct sockaddr_in serverAddr; struct sockaddr_in serverAddr;
int listenfd; int listenfd;
int success; int success;
@ -613,9 +621,9 @@ get_miniserver_sockets( MiniServerSockArray * out,
} }
if ( sockError == -1 ) { if ( sockError == -1 ) {
strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
"mserv start: Error in bind(): %s\n", "mserv start: Error in bind(): %s\n", errorBuffer );
sys_errlist[errno] );
shutdown( listenfd, SD_BOTH ); shutdown( listenfd, SD_BOTH );
UpnpCloseSocket( listenfd ); UpnpCloseSocket( listenfd );
@ -627,9 +635,9 @@ get_miniserver_sockets( MiniServerSockArray * out,
success = listen( listenfd, SOMAXCONN ); success = listen( listenfd, SOMAXCONN );
if ( success == -1 ) { if ( success == -1 ) {
strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
"mserv start: Error in listen(): %s\n", "mserv start: Error in listen(): %s\n", errorBuffer );
sys_errlist[errno] );
shutdown( listenfd, SD_BOTH ); shutdown( listenfd, SD_BOTH );
UpnpCloseSocket( listenfd ); UpnpCloseSocket( listenfd );
@ -648,10 +656,9 @@ get_miniserver_sockets( MiniServerSockArray * out,
miniServerStopSock = socket( AF_INET, SOCK_DGRAM, 0 ); miniServerStopSock = socket( AF_INET, SOCK_DGRAM, 0 );
if ( miniServerStopSock == -1 ) { if ( miniServerStopSock == -1 ) {
UpnpPrintf( UPNP_CRITICAL, strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
MSERV, __FILE__, __LINE__, UpnpPrintf( UPNP_CRITICAL, MSERV, __FILE__, __LINE__,
"Error in socket(): %s\n", "Error in socket(): %s\n", errorBuffer );
sys_errlist[errno] );
shutdown( listenfd, SD_BOTH ); shutdown( listenfd, SD_BOTH );
UpnpCloseSocket( listenfd ); UpnpCloseSocket( listenfd );
@ -691,7 +698,6 @@ get_miniserver_sockets( MiniServerSockArray * out,
out->miniServerStopSock = miniServerStopSock; out->miniServerStopSock = miniServerStopSock;
return UPNP_E_SUCCESS; return UPNP_E_SUCCESS;
} }
/************************************************************************ /************************************************************************
@ -811,6 +817,9 @@ StartMiniServer( unsigned short listen_port )
int int
StopMiniServer() StopMiniServer()
{ {
// strerror_r() buffer
const int ERROR_BUFFER_LEN = 256;
char errorBuffer[ERROR_BUFFER_LEN];
int socklen = sizeof( struct sockaddr_in ); int socklen = sizeof( struct sockaddr_in );
int sock; int sock;
@ -826,9 +835,9 @@ StopMiniServer()
sock = socket( AF_INET, SOCK_DGRAM, 0 ); sock = socket( AF_INET, SOCK_DGRAM, 0 );
if ( sock == -1 ) { if ( sock == -1 ) {
strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
"SSDP_SERVER: StopSSDPServer: Error in socket() %s\n", "SSDP_SERVER: StopSSDPServer: Error in socket() %s\n", errorBuffer );
sys_errlist[errno] );
return 0; return 0;
} }

View File

@ -514,6 +514,10 @@ SearchByTarget( IN int Mx,
IN char *St, IN char *St,
IN void *Cookie ) IN void *Cookie )
{ {
// strerror_r() buffer
const int ERROR_BUFFER_LEN = 256;
char errorBuffer[ERROR_BUFFER_LEN];
int socklen = sizeof( struct sockaddr_in ); int socklen = sizeof( struct sockaddr_in );
int *id = NULL; int *id = NULL;
int ret = 0; int ret = 0;
@ -591,9 +595,10 @@ SearchByTarget( IN int Mx,
ret = select( gSsdpReqSocket + 1, NULL, &wrSet, NULL, NULL ); ret = select( gSsdpReqSocket + 1, NULL, &wrSet, NULL, NULL );
if( ret == -1 ) { if( ret == -1 ) {
strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
"SSDP_LIB: Error in select(): %s\n", "SSDP_LIB: Error in select(): %s\n",
sys_errlist[errno] ); errorBuffer );
shutdown( gSsdpReqSocket, SD_BOTH ); shutdown( gSsdpReqSocket, SD_BOTH );
UpnpCloseSocket( gSsdpReqSocket ); UpnpCloseSocket( gSsdpReqSocket );
free( ReqBuf ); free( ReqBuf );

View File

@ -213,6 +213,10 @@ NewRequestHandler( IN struct sockaddr_in *DestAddr,
IN int NumPacket, IN int NumPacket,
IN char **RqPacket ) IN char **RqPacket )
{ {
// strerror_r() buffer
const int ERROR_BUFFER_LEN = 256;
char errorBuffer[ERROR_BUFFER_LEN];
int ReplySock; int ReplySock;
int socklen = sizeof( struct sockaddr_in ); int socklen = sizeof( struct sockaddr_in );
int NumCopy; int NumCopy;
@ -222,10 +226,10 @@ NewRequestHandler( IN struct sockaddr_in *DestAddr,
ReplySock = socket( AF_INET, SOCK_DGRAM, 0 ); ReplySock = socket( AF_INET, SOCK_DGRAM, 0 );
if ( ReplySock == -1 ) { if ( ReplySock == -1 ) {
strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
"SSDP_LIB: New Request Handler:" "SSDP_LIB: New Request Handler:"
"Error in socket(): %s\n", "Error in socket(): %s\n", errorBuffer );
sys_errlist[errno] );
return UPNP_E_OUTOF_SOCKET; return UPNP_E_OUTOF_SOCKET;
} }

View File

@ -856,6 +856,10 @@ readFromSSDPSocket( SOCKET socket )
int int
get_ssdp_sockets( MiniServerSockArray * out ) get_ssdp_sockets( MiniServerSockArray * out )
{ {
// strerror_r() buffer
const int ERROR_BUFFER_LEN = 256;
char errorBuffer[ERROR_BUFFER_LEN];
int onOff = 1; int onOff = 1;
u_char ttl = 4; u_char ttl = 4;
struct ip_mreq ssdpMcastAddr; struct ip_mreq ssdpMcastAddr;
@ -869,10 +873,9 @@ get_ssdp_sockets( MiniServerSockArray * out )
ssdpReqSock = socket( AF_INET, SOCK_DGRAM, 0 ); ssdpReqSock = socket( AF_INET, SOCK_DGRAM, 0 );
if ( ssdpReqSock == -1 ) { if ( ssdpReqSock == -1 ) {
UpnpPrintf( UPNP_CRITICAL, strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
"Error in socket(): %s\n", "Error in socket(): %s\n", errorBuffer );
sys_errlist[errno] );
return UPNP_E_OUTOF_SOCKET; return UPNP_E_OUTOF_SOCKET;
} }
@ -885,10 +888,9 @@ get_ssdp_sockets( MiniServerSockArray * out )
ssdpSock = socket( AF_INET, SOCK_DGRAM, 0 ); ssdpSock = socket( AF_INET, SOCK_DGRAM, 0 );
if ( ssdpSock == -1 ) { if ( ssdpSock == -1 ) {
UpnpPrintf( UPNP_CRITICAL, strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
"Error in socket(): %s\n", "Error in socket(): %s\n", errorBuffer );
sys_errlist[errno] );
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); )
CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); )
@ -899,10 +901,9 @@ get_ssdp_sockets( MiniServerSockArray * out )
ret = setsockopt( ssdpSock, SOL_SOCKET, SO_REUSEADDR, ret = setsockopt( ssdpSock, SOL_SOCKET, SO_REUSEADDR,
(char *)&onOff, sizeof(onOff) ); (char *)&onOff, sizeof(onOff) );
if ( ret == -1) { if ( ret == -1) {
UpnpPrintf( UPNP_CRITICAL, strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
"Error in setsockopt() SO_REUSEADDR: %s\n", "Error in setsockopt() SO_REUSEADDR: %s\n", errorBuffer );
sys_errlist[errno] );
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); )
CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); )
shutdown( ssdpSock, SD_BOTH ); shutdown( ssdpSock, SD_BOTH );
@ -915,10 +916,9 @@ get_ssdp_sockets( MiniServerSockArray * out )
ret = setsockopt( ssdpSock, SOL_SOCKET, SO_REUSEPORT, ret = setsockopt( ssdpSock, SOL_SOCKET, SO_REUSEPORT,
(char *)&onOff, sizeof (onOff) ); (char *)&onOff, sizeof (onOff) );
if ( ret == -1 ) { if ( ret == -1 ) {
UpnpPrintf( UPNP_CRITICAL, strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
"Error in setsockopt() SO_REUSEPORT: %s\n", "Error in setsockopt() SO_REUSEPORT: %s\n", errorBuffer );
sys_errlist[errno] );
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); )
CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); )
shutdown( ssdpSock, SD_BOTH ); shutdown( ssdpSock, SD_BOTH );
@ -935,11 +935,10 @@ get_ssdp_sockets( MiniServerSockArray * out )
ssdpAddr.sin_port = htons( SSDP_PORT ); ssdpAddr.sin_port = htons( SSDP_PORT );
ret = bind( ssdpSock, (struct sockaddr *)&ssdpAddr, sizeof (ssdpAddr) ); ret = bind( ssdpSock, (struct sockaddr *)&ssdpAddr, sizeof (ssdpAddr) );
if ( ret == -1 ) { if ( ret == -1 ) {
UpnpPrintf( UPNP_CRITICAL, strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
"Error in bind(), addr=0x%08X, port=%d: %s\n", "Error in bind(), addr=0x%08X, port=%d: %s\n",
INADDR_ANY, SSDP_PORT, INADDR_ANY, SSDP_PORT, errorBuffer );
sys_errlist[errno] );
shutdown( ssdpSock, SD_BOTH ); shutdown( ssdpSock, SD_BOTH );
UpnpCloseSocket( ssdpSock ); UpnpCloseSocket( ssdpSock );
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); )
@ -954,10 +953,10 @@ get_ssdp_sockets( MiniServerSockArray * out )
ret = setsockopt( ssdpSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, ret = setsockopt( ssdpSock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(char *)&ssdpMcastAddr, sizeof (struct ip_mreq) ); (char *)&ssdpMcastAddr, sizeof (struct ip_mreq) );
if ( ret == -1 ) { if ( ret == -1 ) {
UpnpPrintf( UPNP_CRITICAL, strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
"Error in setsockopt() IP_ADD_MEMBERSHIP (join multicast group): %s\n", "Error in setsockopt() IP_ADD_MEMBERSHIP (join multicast group): %s\n",
sys_errlist[errno] ); errorBuffer );
shutdown( ssdpSock, SD_BOTH ); shutdown( ssdpSock, SD_BOTH );
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); )
UpnpCloseSocket( ssdpSock ); UpnpCloseSocket( ssdpSock );
@ -972,9 +971,10 @@ get_ssdp_sockets( MiniServerSockArray * out )
ret = setsockopt(ssdpSock, IPPROTO_IP, IP_MULTICAST_IF, ret = setsockopt(ssdpSock, IPPROTO_IP, IP_MULTICAST_IF,
(char *)&addr, sizeof addr); (char *)&addr, sizeof addr);
if ( ret == -1 ) { if ( ret == -1 ) {
strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
"Error in setsockopt() IP_MULTICAST_IF (set multicast interface): %s\n", "Error in setsockopt() IP_MULTICAST_IF (set multicast interface): %s\n",
sys_errlist[errno] ); errorBuffer );
/* This is probably not a critical error, so let's continue. */ /* This is probably not a critical error, so let's continue. */
} }
@ -985,10 +985,10 @@ get_ssdp_sockets( MiniServerSockArray * out )
ret = setsockopt( ssdpSock, SOL_SOCKET, SO_BROADCAST, ret = setsockopt( ssdpSock, SOL_SOCKET, SO_BROADCAST,
(char *)&option, sizeof (option) ); (char *)&option, sizeof (option) );
if( ret == -1) { if( ret == -1) {
UpnpPrintf( UPNP_CRITICAL, strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
SSDP, __FILE__, __LINE__, UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
"Error in setsockopt() SO_BROADCAST (set broadcast): %s\n", "Error in setsockopt() SO_BROADCAST (set broadcast): %s\n",
sys_errlist[errno] ); errorBuffer );
shutdown( ssdpSock, SD_BOTH ); shutdown( ssdpSock, SD_BOTH );
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); )
UpnpCloseSocket( ssdpSock ); UpnpCloseSocket( ssdpSock );