|
|
/* $Xorg: listenwk.c,v 1.4 2000/08/17 19:44:15 cpqbld Exp $ */
|
|
|
|
|
|
/*
|
|
|
|
|
|
Copyright 1996, 1998 The Open Group
|
|
|
|
|
|
All Rights Reserved.
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
|
all copies or substantial portions of the Software.
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
|
|
Except as contained in this notice, the name of The Open Group shall not be
|
|
|
used in advertising or otherwise to promote the sale, use or other dealings
|
|
|
in this Software without prior written authorization from The Open Group.
|
|
|
|
|
|
*/
|
|
|
/* $XFree86: xc/lib/ICE/listenwk.c,v 1.3 2001/01/17 19:41:29 dawes Exp $ */
|
|
|
|
|
|
|
|
|
/* Author: Ralph Mor, X Consortium */
|
|
|
|
|
|
#include "KDE-ICE/ICElib.h"
|
|
|
#include "KDE-ICE/ICElibint.h"
|
|
|
#include <KDE-ICE/Xtrans.h>
|
|
|
#include <stdio.h>
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
|
Status
|
|
|
IceListenForWellKnownConnections (port, countRet, listenObjsRet, errorLength, errorStringRet)
|
|
|
|
|
|
char *port;
|
|
|
int *countRet;
|
|
|
IceListenObj **listenObjsRet;
|
|
|
int errorLength;
|
|
|
char *errorStringRet;
|
|
|
|
|
|
{
|
|
|
struct _IceListenObj *listenObjs;
|
|
|
char *networkId;
|
|
|
int transCount, partial, i, j;
|
|
|
Status status = 1;
|
|
|
XtransConnInfo *transConns = NULL;
|
|
|
|
|
|
|
|
|
if ((_kde_IceTransMakeAllCOTSServerListeners (port, &partial,
|
|
|
&transCount, &transConns) < 0) || (transCount < 1))
|
|
|
{
|
|
|
*listenObjsRet = NULL;
|
|
|
*countRet = 0;
|
|
|
|
|
|
strncpy (errorStringRet,
|
|
|
"Cannot establish any listening sockets", errorLength);
|
|
|
|
|
|
return (0);
|
|
|
}
|
|
|
|
|
|
if ((listenObjs = (struct _IceListenObj *) malloc (
|
|
|
transCount * sizeof (struct _IceListenObj))) == NULL)
|
|
|
{
|
|
|
for (i = 0; i < transCount; i++)
|
|
|
_kde_IceTransClose (transConns[i]);
|
|
|
free ((char *) transConns);
|
|
|
return (0);
|
|
|
}
|
|
|
|
|
|
*countRet = 0;
|
|
|
|
|
|
for (i = 0; i < transCount; i++)
|
|
|
{
|
|
|
networkId = (char *)_kde_IceTransGetMyNetworkId (transConns[i]);
|
|
|
|
|
|
if (networkId)
|
|
|
{
|
|
|
listenObjs[*countRet].trans_conn = transConns[i];
|
|
|
listenObjs[*countRet].network_id = networkId;
|
|
|
|
|
|
(*countRet)++;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (*countRet == 0)
|
|
|
{
|
|
|
*listenObjsRet = NULL;
|
|
|
|
|
|
strncpy (errorStringRet,
|
|
|
"Cannot establish any listening sockets", errorLength);
|
|
|
|
|
|
status = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
*listenObjsRet = (IceListenObj *) malloc (
|
|
|
*countRet * sizeof (IceListenObj));
|
|
|
|
|
|
if (*listenObjsRet == NULL)
|
|
|
{
|
|
|
strncpy (errorStringRet, "Malloc failed", errorLength);
|
|
|
|
|
|
status = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
for (i = 0; i < *countRet; i++)
|
|
|
{
|
|
|
(*listenObjsRet)[i] = (IceListenObj) malloc (
|
|
|
sizeof (struct _IceListenObj));
|
|
|
|
|
|
if ((*listenObjsRet)[i] == NULL)
|
|
|
{
|
|
|
strncpy (errorStringRet, "Malloc failed", errorLength);
|
|
|
|
|
|
for (j = 0; j < i; j++)
|
|
|
free ((char *) (*listenObjsRet)[j]);
|
|
|
|
|
|
free ((char *) *listenObjsRet);
|
|
|
|
|
|
status = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
*((*listenObjsRet)[i]) = listenObjs[i];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (status == 1)
|
|
|
{
|
|
|
if (errorStringRet && errorLength > 0)
|
|
|
*errorStringRet = '\0';
|
|
|
|
|
|
for (i = 0; i < *countRet; i++)
|
|
|
{
|
|
|
(*listenObjsRet)[i]->host_based_auth_proc = NULL;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
for (i = 0; i < transCount; i++)
|
|
|
_kde_IceTransClose (transConns[i]);
|
|
|
}
|
|
|
|
|
|
free ((char *) listenObjs);
|
|
|
free ((char *) transConns);
|
|
|
|
|
|
return (status);
|
|
|
}
|