|
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 |
|