|
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 |
|
|
Packit |
e18bd3 |
Status
|
|
Packit |
e18bd3 |
IceAddConnectionWatch (
|
|
Packit |
e18bd3 |
IceWatchProc watchProc,
|
|
Packit |
e18bd3 |
IcePointer clientData
|
|
Packit |
e18bd3 |
)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
/*
|
|
Packit |
e18bd3 |
* watchProc will be called each time an ICE connection is
|
|
Packit |
e18bd3 |
* created/destroyed by ICElib.
|
|
Packit |
e18bd3 |
*/
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
_IceWatchProc *ptr = _IceWatchProcs;
|
|
Packit |
e18bd3 |
_IceWatchProc *newWatchProc;
|
|
Packit |
e18bd3 |
int i;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
if ((newWatchProc = malloc (sizeof (_IceWatchProc))) == NULL)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
return (0);
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
newWatchProc->watch_proc = watchProc;
|
|
Packit |
e18bd3 |
newWatchProc->client_data = clientData;
|
|
Packit |
e18bd3 |
newWatchProc->watched_connections = NULL;
|
|
Packit |
e18bd3 |
newWatchProc->next = NULL;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
while (ptr && ptr->next)
|
|
Packit |
e18bd3 |
ptr = ptr->next;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
if (ptr == NULL)
|
|
Packit |
e18bd3 |
_IceWatchProcs = newWatchProc;
|
|
Packit |
e18bd3 |
else
|
|
Packit |
e18bd3 |
ptr->next = newWatchProc;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
/*
|
|
Packit |
e18bd3 |
* Invoke the watch proc with any previously opened ICE connections.
|
|
Packit |
e18bd3 |
*/
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
for (i = 0; i < _IceConnectionCount; i++)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
_IceWatchedConnection *newWatchedConn =
|
|
Packit |
e18bd3 |
malloc (sizeof (_IceWatchedConnection));
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
newWatchedConn->iceConn = _IceConnectionObjs[i];
|
|
Packit |
e18bd3 |
newWatchedConn->next = NULL;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
newWatchProc->watched_connections = newWatchedConn;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
(*newWatchProc->watch_proc) (_IceConnectionObjs[i],
|
|
Packit |
e18bd3 |
newWatchProc->client_data, True, &newWatchedConn->watch_data);
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
return (1);
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
void
|
|
Packit |
e18bd3 |
IceRemoveConnectionWatch (
|
|
Packit |
e18bd3 |
IceWatchProc watchProc,
|
|
Packit |
e18bd3 |
IcePointer clientData
|
|
Packit |
e18bd3 |
)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
_IceWatchProc *currWatchProc = _IceWatchProcs;
|
|
Packit |
e18bd3 |
_IceWatchProc *prevWatchProc = NULL;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
while (currWatchProc && (currWatchProc->watch_proc != watchProc ||
|
|
Packit |
e18bd3 |
currWatchProc->client_data != clientData))
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
prevWatchProc = currWatchProc;
|
|
Packit |
e18bd3 |
currWatchProc = currWatchProc->next;
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
if (currWatchProc)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
_IceWatchProc *nextWatchProc = currWatchProc->next;
|
|
Packit |
e18bd3 |
_IceWatchedConnection *watchedConn;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
watchedConn = currWatchProc->watched_connections;
|
|
Packit |
e18bd3 |
while (watchedConn)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
_IceWatchedConnection *nextWatchedConn = watchedConn->next;
|
|
Packit |
e18bd3 |
free (watchedConn);
|
|
Packit |
e18bd3 |
watchedConn = nextWatchedConn;
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
if (prevWatchProc == NULL)
|
|
Packit |
e18bd3 |
_IceWatchProcs = nextWatchProc;
|
|
Packit |
e18bd3 |
else
|
|
Packit |
e18bd3 |
prevWatchProc->next = nextWatchProc;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
free (currWatchProc);
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
void
|
|
Packit |
e18bd3 |
_IceConnectionOpened (
|
|
Packit |
e18bd3 |
IceConn iceConn
|
|
Packit |
e18bd3 |
)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
_IceWatchProc *watchProc = _IceWatchProcs;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
while (watchProc)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
_IceWatchedConnection *newWatchedConn =
|
|
Packit |
e18bd3 |
malloc (sizeof (_IceWatchedConnection));
|
|
Packit |
e18bd3 |
_IceWatchedConnection *watchedConn;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
watchedConn = watchProc->watched_connections;
|
|
Packit |
e18bd3 |
while (watchedConn && watchedConn->next)
|
|
Packit |
e18bd3 |
watchedConn = watchedConn->next;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
newWatchedConn->iceConn = iceConn;
|
|
Packit |
e18bd3 |
newWatchedConn->next = NULL;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
if (watchedConn == NULL)
|
|
Packit |
e18bd3 |
watchProc->watched_connections = newWatchedConn;
|
|
Packit |
e18bd3 |
else
|
|
Packit |
e18bd3 |
watchedConn->next = newWatchedConn;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
(*watchProc->watch_proc) (iceConn,
|
|
Packit |
e18bd3 |
watchProc->client_data, True, &newWatchedConn->watch_data);
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
watchProc = watchProc->next;
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
void
|
|
Packit |
e18bd3 |
_IceConnectionClosed (
|
|
Packit |
e18bd3 |
IceConn iceConn
|
|
Packit |
e18bd3 |
)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
_IceWatchProc *watchProc = _IceWatchProcs;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
while (watchProc)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
_IceWatchedConnection *watchedConn = watchProc->watched_connections;
|
|
Packit |
e18bd3 |
_IceWatchedConnection *prev = NULL;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
while (watchedConn && watchedConn->iceConn != iceConn)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
prev = watchedConn;
|
|
Packit |
e18bd3 |
watchedConn = watchedConn->next;
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
if (watchedConn)
|
|
Packit |
e18bd3 |
{
|
|
Packit |
e18bd3 |
(*watchProc->watch_proc) (iceConn,
|
|
Packit |
e18bd3 |
watchProc->client_data, False, &watchedConn->watch_data);
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
if (prev == NULL)
|
|
Packit |
e18bd3 |
watchProc->watched_connections = watchedConn->next;
|
|
Packit |
e18bd3 |
else
|
|
Packit |
e18bd3 |
prev->next = watchedConn->next;
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
free (watchedConn);
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
|
|
Packit |
e18bd3 |
watchProc = watchProc->next;
|
|
Packit |
e18bd3 |
}
|
|
Packit |
e18bd3 |
}
|