Blame src/register.c

Packit e18bd3
/******************************************************************************
Packit e18bd3
Packit e18bd3
Packit e18bd3
Copyright 1993, 1998  The Open Group
Packit e18bd3
Packit e18bd3
Permission to use, copy, modify, distribute, and sell this software and its
Packit e18bd3
documentation for any purpose is hereby granted without fee, provided that
Packit e18bd3
the above copyright notice appear in all copies and that both that
Packit e18bd3
copyright notice and this permission notice appear in supporting
Packit e18bd3
documentation.
Packit e18bd3
Packit e18bd3
The above copyright notice and this permission notice shall be included in
Packit e18bd3
all copies or substantial portions of the Software.
Packit e18bd3
Packit e18bd3
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Packit e18bd3
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Packit e18bd3
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
Packit e18bd3
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
Packit e18bd3
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
Packit e18bd3
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Packit e18bd3
Packit e18bd3
Except as contained in this notice, the name of The Open Group shall not be
Packit e18bd3
used in advertising or otherwise to promote the sale, use or other dealings
Packit e18bd3
in this Software without prior written authorization from The Open Group.
Packit e18bd3
Packit e18bd3
Author: Ralph Mor, X Consortium
Packit e18bd3
******************************************************************************/
Packit e18bd3
Packit e18bd3
#ifdef HAVE_CONFIG_H
Packit e18bd3
#include <config.h>
Packit e18bd3
#endif
Packit e18bd3
#include <X11/ICE/ICElib.h>
Packit e18bd3
#include "ICElibint.h"
Packit e18bd3
Packit e18bd3
int
Packit e18bd3
IceRegisterForProtocolSetup (
Packit e18bd3
	const char		*protocolName,
Packit e18bd3
	const char		*vendor,
Packit e18bd3
	const char		*release,
Packit e18bd3
	int			versionCount,
Packit e18bd3
	IcePoVersionRec		*versionRecs,
Packit e18bd3
	int			authCount,
Packit e18bd3
	const char	        **authNames,
Packit e18bd3
	IcePoAuthProc		*authProcs,
Packit e18bd3
	IceIOErrorProc		IOErrorProc
Packit e18bd3
)
Packit e18bd3
{
Packit e18bd3
    _IcePoProtocol 	*p;
Packit e18bd3
    int			opcodeRet, i;
Packit e18bd3
Packit e18bd3
    for (i = 1; i <= _IceLastMajorOpcode; i++)
Packit e18bd3
	if (strcmp (protocolName, _IceProtocols[i - 1].protocol_name) == 0)
Packit e18bd3
	{
Packit e18bd3
	    if (_IceProtocols[i - 1].orig_client != NULL)
Packit e18bd3
	    {
Packit e18bd3
		/*
Packit e18bd3
		 * We've already registered this protocol.
Packit e18bd3
		 */
Packit e18bd3
Packit e18bd3
		return (i);
Packit e18bd3
	    }
Packit e18bd3
	    else
Packit e18bd3
	    {
Packit e18bd3
		break;
Packit e18bd3
	    }
Packit e18bd3
	}
Packit e18bd3
Packit e18bd3
    if (i <= _IceLastMajorOpcode)
Packit e18bd3
    {
Packit e18bd3
	p = _IceProtocols[i - 1].orig_client = malloc (sizeof(_IcePoProtocol));
Packit e18bd3
	opcodeRet = i;
Packit e18bd3
    }
Packit e18bd3
    else if (_IceLastMajorOpcode == 255 ||
Packit e18bd3
	versionCount < 1 ||
Packit e18bd3
	strlen (protocolName) == 0)
Packit e18bd3
    {
Packit e18bd3
	return (-1);
Packit e18bd3
    }
Packit e18bd3
    else
Packit e18bd3
    {
Packit e18bd3
	_IceProtocols[_IceLastMajorOpcode].protocol_name =
Packit e18bd3
	    strdup(protocolName);
Packit e18bd3
Packit e18bd3
	p = _IceProtocols[_IceLastMajorOpcode].orig_client =
Packit e18bd3
	    malloc (sizeof (_IcePoProtocol));
Packit e18bd3
Packit e18bd3
	_IceProtocols[_IceLastMajorOpcode].accept_client = NULL;
Packit e18bd3
Packit e18bd3
	opcodeRet = ++_IceLastMajorOpcode;
Packit e18bd3
    }
Packit e18bd3
Packit e18bd3
    p->vendor = strdup(vendor);
Packit e18bd3
    p->release = strdup(release);
Packit e18bd3
Packit e18bd3
    p->version_count = versionCount;
Packit e18bd3
Packit e18bd3
    p->version_recs = malloc (versionCount * sizeof (IcePoVersionRec));
Packit e18bd3
    memcpy (p->version_recs, versionRecs,
Packit e18bd3
	versionCount * sizeof (IcePoVersionRec));
Packit e18bd3
Packit e18bd3
    if ((p->auth_count = authCount) > 0)
Packit e18bd3
    {
Packit e18bd3
	p->auth_names = malloc (authCount * sizeof (char *));
Packit e18bd3
Packit e18bd3
	p->auth_procs = malloc (authCount * sizeof (IcePoAuthProc));
Packit e18bd3
Packit e18bd3
	for (i = 0; i < authCount; i++)
Packit e18bd3
	{
Packit e18bd3
	    p->auth_names[i] = strdup(authNames[i]);
Packit e18bd3
	    p->auth_procs[i] = authProcs[i];
Packit e18bd3
	}
Packit e18bd3
    }
Packit e18bd3
    else
Packit e18bd3
    {
Packit e18bd3
	p->auth_names = NULL;
Packit e18bd3
	p->auth_procs = NULL;
Packit e18bd3
    }
Packit e18bd3
Packit e18bd3
    p->io_error_proc = IOErrorProc;
Packit e18bd3
Packit e18bd3
    return (opcodeRet);
Packit e18bd3
}
Packit e18bd3
Packit e18bd3
Packit e18bd3

Packit e18bd3
int
Packit e18bd3
IceRegisterForProtocolReply (
Packit e18bd3
	const char			*protocolName,
Packit e18bd3
	const char			*vendor,
Packit e18bd3
	const char			*release,
Packit e18bd3
	int				versionCount,
Packit e18bd3
	IcePaVersionRec			*versionRecs,
Packit e18bd3
	int				authCount,
Packit e18bd3
	const char			**authNames,
Packit e18bd3
	IcePaAuthProc			*authProcs,
Packit e18bd3
	IceHostBasedAuthProc		hostBasedAuthProc,
Packit e18bd3
	IceProtocolSetupProc		protocolSetupProc,
Packit e18bd3
	IceProtocolActivateProc		protocolActivateProc,
Packit e18bd3
	IceIOErrorProc			IOErrorProc
Packit e18bd3
)
Packit e18bd3
{
Packit e18bd3
    _IcePaProtocol 	*p;
Packit e18bd3
    int			opcodeRet, i;
Packit e18bd3
Packit e18bd3
    for (i = 1; i <= _IceLastMajorOpcode; i++)
Packit e18bd3
	if (strcmp (protocolName, _IceProtocols[i - 1].protocol_name) == 0)
Packit e18bd3
	{
Packit e18bd3
	    if (_IceProtocols[i - 1].accept_client != NULL)
Packit e18bd3
	    {
Packit e18bd3
		/*
Packit e18bd3
		 * We've already registered this protocol.
Packit e18bd3
		 */
Packit e18bd3
Packit e18bd3
		return (i);
Packit e18bd3
	    }
Packit e18bd3
	    else
Packit e18bd3
	    {
Packit e18bd3
		break;
Packit e18bd3
	    }
Packit e18bd3
	}
Packit e18bd3
Packit e18bd3
Packit e18bd3
    if (i <= _IceLastMajorOpcode)
Packit e18bd3
    {
Packit e18bd3
	p = _IceProtocols[i - 1].accept_client =
Packit e18bd3
	    malloc (sizeof (_IcePaProtocol));
Packit e18bd3
	opcodeRet = i;
Packit e18bd3
    }
Packit e18bd3
    else if (_IceLastMajorOpcode == 255 ||
Packit e18bd3
	versionCount < 1 ||
Packit e18bd3
	strlen (protocolName) == 0)
Packit e18bd3
    {
Packit e18bd3
	return (-1);
Packit e18bd3
    }
Packit e18bd3
    else
Packit e18bd3
    {
Packit e18bd3
	_IceProtocols[_IceLastMajorOpcode].protocol_name =
Packit e18bd3
	    strdup(protocolName);
Packit e18bd3
Packit e18bd3
	_IceProtocols[_IceLastMajorOpcode].orig_client = NULL;
Packit e18bd3
Packit e18bd3
	p = _IceProtocols[_IceLastMajorOpcode].accept_client =
Packit e18bd3
	    malloc (sizeof (_IcePaProtocol));
Packit e18bd3
Packit e18bd3
	opcodeRet = ++_IceLastMajorOpcode;
Packit e18bd3
    }
Packit e18bd3
Packit e18bd3
    p->vendor = strdup(vendor);
Packit e18bd3
    p->release = strdup(release);
Packit e18bd3
Packit e18bd3
    p->version_count = versionCount;
Packit e18bd3
Packit e18bd3
    p->version_recs = malloc (versionCount * sizeof (IcePaVersionRec));
Packit e18bd3
    memcpy (p->version_recs, versionRecs,
Packit e18bd3
	versionCount * sizeof (IcePaVersionRec));
Packit e18bd3
Packit e18bd3
    p->protocol_setup_proc = protocolSetupProc;
Packit e18bd3
    p->protocol_activate_proc = protocolActivateProc;
Packit e18bd3
Packit e18bd3
    if ((p->auth_count = authCount) > 0)
Packit e18bd3
    {
Packit e18bd3
	p->auth_names = malloc (authCount * sizeof (char *));
Packit e18bd3
Packit e18bd3
	p->auth_procs = malloc (authCount * sizeof (IcePaAuthProc));
Packit e18bd3
Packit e18bd3
	for (i = 0; i < authCount; i++)
Packit e18bd3
	{
Packit e18bd3
	    p->auth_names[i] = strdup(authNames[i]);
Packit e18bd3
	    p->auth_procs[i] = authProcs[i];
Packit e18bd3
	}
Packit e18bd3
    }
Packit e18bd3
    else
Packit e18bd3
    {
Packit e18bd3
	p->auth_names = NULL;
Packit e18bd3
	p->auth_procs = NULL;
Packit e18bd3
    }
Packit e18bd3
Packit e18bd3
    p->host_based_auth_proc = hostBasedAuthProc;
Packit e18bd3
Packit e18bd3
    p->io_error_proc = IOErrorProc;
Packit e18bd3
Packit e18bd3
    return (opcodeRet);
Packit e18bd3
}
Packit e18bd3