misc.c revision 9ef0b394
1266e564dSmrg/******************************************************************************
2266e564dSmrg
3266e564dSmrg
4266e564dSmrgCopyright 1993, 1998  The Open Group
5266e564dSmrg
6266e564dSmrgPermission to use, copy, modify, distribute, and sell this software and its
7266e564dSmrgdocumentation for any purpose is hereby granted without fee, provided that
8266e564dSmrgthe above copyright notice appear in all copies and that both that
9266e564dSmrgcopyright notice and this permission notice appear in supporting
10266e564dSmrgdocumentation.
11266e564dSmrg
12266e564dSmrgThe above copyright notice and this permission notice shall be included in
13266e564dSmrgall copies or substantial portions of the Software.
14266e564dSmrg
15266e564dSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16266e564dSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17266e564dSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
18266e564dSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
19266e564dSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20266e564dSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21266e564dSmrg
22266e564dSmrgExcept as contained in this notice, the name of The Open Group shall not be
23266e564dSmrgused in advertising or otherwise to promote the sale, use or other dealings
24266e564dSmrgin this Software without prior written authorization from The Open Group.
25266e564dSmrg
26266e564dSmrgAuthor: Ralph Mor, X Consortium
27266e564dSmrg******************************************************************************/
28266e564dSmrg
29266e564dSmrg#ifdef WIN32
30266e564dSmrg#define _WILLWINSOCK_
31266e564dSmrg#endif
32266e564dSmrg#ifdef HAVE_CONFIG_H
33266e564dSmrg#include <config.h>
34266e564dSmrg#endif
35266e564dSmrg#include <X11/ICE/ICElib.h>
36266e564dSmrg#include "ICElibint.h"
37266e564dSmrg#include <X11/Xtrans/Xtrans.h>
38266e564dSmrg#include <stdio.h>
39266e564dSmrg#ifdef WIN32
40266e564dSmrg#include <X11/Xwinsock.h>
41266e564dSmrg#include <X11/Xw32defs.h>
42266e564dSmrg#endif
43266e564dSmrg
44266e564dSmrg
45266e564dSmrg/*
46266e564dSmrg * scratch buffer
47266e564dSmrg */
48266e564dSmrg
49266e564dSmrgchar *
50c5629e66SmrgIceAllocScratch (
51c5629e66Smrg	IceConn		iceConn,
52c5629e66Smrg	unsigned long	size
53c5629e66Smrg)
54266e564dSmrg{
55266e564dSmrg    if (!iceConn->scratch || size > iceConn->scratch_size)
56266e564dSmrg    {
57266e564dSmrg	if (iceConn->scratch)
58266e564dSmrg	    free (iceConn->scratch);
59266e564dSmrg
60266e564dSmrg	iceConn->scratch = (char *) malloc ((unsigned) size);
61266e564dSmrg	iceConn->scratch_size = size;
62266e564dSmrg    }
63266e564dSmrg
64266e564dSmrg    return (iceConn->scratch);
65266e564dSmrg}
66266e564dSmrg
67266e564dSmrg
68266e564dSmrg
69266e564dSmrg/*
70266e564dSmrg * Output/Input buffer functions
71266e564dSmrg */
72266e564dSmrg
73266e564dSmrgint
74c5629e66SmrgIceFlush (
75c5629e66Smrg	IceConn iceConn
76c5629e66Smrg)
77266e564dSmrg{
78266e564dSmrg    _IceWrite (iceConn,
79266e564dSmrg	(unsigned long) (iceConn->outbufptr - iceConn->outbuf),
80266e564dSmrg	iceConn->outbuf);
81266e564dSmrg
82266e564dSmrg    iceConn->outbufptr = iceConn->outbuf;
83266e564dSmrg    return 1;
84266e564dSmrg}
85266e564dSmrg
86266e564dSmrg
87266e564dSmrgint
88c5629e66SmrgIceGetOutBufSize (
89c5629e66Smrg	IceConn iceConn
90c5629e66Smrg)
91266e564dSmrg{
92266e564dSmrg    return (iceConn->outbufmax - iceConn->outbuf);
93266e564dSmrg}
94266e564dSmrg
95266e564dSmrg
96266e564dSmrgint
97c5629e66SmrgIceGetInBufSize (
98c5629e66Smrg	IceConn iceConn
99c5629e66Smrg)
100266e564dSmrg{
101266e564dSmrg    return (iceConn->inbufmax - iceConn->inbuf);
102266e564dSmrg}
103266e564dSmrg
104266e564dSmrg
105266e564dSmrg
106266e564dSmrg/*
107266e564dSmrg * informational functions
108266e564dSmrg */
109266e564dSmrg
110266e564dSmrgIceConnectStatus
111c5629e66SmrgIceConnectionStatus (
112c5629e66Smrg	IceConn iceConn
113c5629e66Smrg)
114266e564dSmrg{
115266e564dSmrg    return (iceConn->connection_status);
116266e564dSmrg}
117266e564dSmrg
118266e564dSmrg
119266e564dSmrgchar *
120c5629e66SmrgIceVendor (
121c5629e66Smrg	IceConn iceConn
122c5629e66Smrg)
123266e564dSmrg{
124266e564dSmrg    return strdup(iceConn->vendor);
125266e564dSmrg}
126266e564dSmrg
127266e564dSmrg
128266e564dSmrgchar *
129c5629e66SmrgIceRelease (
130c5629e66Smrg	IceConn iceConn
131c5629e66Smrg)
132266e564dSmrg{
133266e564dSmrg    return strdup(iceConn->release);
134266e564dSmrg}
135266e564dSmrg
136266e564dSmrg
137266e564dSmrgint
138c5629e66SmrgIceProtocolVersion (
139c5629e66Smrg	IceConn iceConn
140c5629e66Smrg)
141266e564dSmrg{
142266e564dSmrg    return (_IceVersions[iceConn->my_ice_version_index].major_version);
143266e564dSmrg}
144266e564dSmrg
145266e564dSmrg
146266e564dSmrgint
147c5629e66SmrgIceProtocolRevision (
148c5629e66Smrg	IceConn iceConn
149c5629e66Smrg)
150266e564dSmrg{
151266e564dSmrg    return (_IceVersions[iceConn->my_ice_version_index].minor_version);
152266e564dSmrg}
153266e564dSmrg
154266e564dSmrg
155266e564dSmrgint
156c5629e66SmrgIceConnectionNumber (
157c5629e66Smrg	IceConn iceConn
158c5629e66Smrg)
159266e564dSmrg{
160266e564dSmrg    return (_IceTransGetConnectionNumber (iceConn->trans_conn));
161266e564dSmrg}
162266e564dSmrg
163266e564dSmrg
164266e564dSmrgchar *
165c5629e66SmrgIceConnectionString (
166c5629e66Smrg	IceConn iceConn
167c5629e66Smrg)
168266e564dSmrg{
169266e564dSmrg    if (iceConn->connection_string)
170266e564dSmrg    {
171266e564dSmrg	return strdup(iceConn->connection_string);
172266e564dSmrg    }
173266e564dSmrg    else
174266e564dSmrg	return (NULL);
175266e564dSmrg}
176266e564dSmrg
177266e564dSmrg
178266e564dSmrgunsigned long
179c5629e66SmrgIceLastSentSequenceNumber (
180c5629e66Smrg	IceConn iceConn
181c5629e66Smrg)
182266e564dSmrg{
183266e564dSmrg    return (iceConn->send_sequence);
184266e564dSmrg}
185266e564dSmrg
186266e564dSmrg
187266e564dSmrgunsigned long
188c5629e66SmrgIceLastReceivedSequenceNumber (
189c5629e66Smrg	IceConn iceConn
190c5629e66Smrg)
191266e564dSmrg{
192266e564dSmrg    return (iceConn->receive_sequence);
193266e564dSmrg}
194266e564dSmrg
195266e564dSmrg
196266e564dSmrgBool
197c5629e66SmrgIceSwapping (
198c5629e66Smrg	IceConn iceConn
199c5629e66Smrg)
200266e564dSmrg{
201266e564dSmrg    return (iceConn->swap);
202266e564dSmrg}
203266e564dSmrg
204266e564dSmrg
205266e564dSmrg
206266e564dSmrg/*
207266e564dSmrg * Read "n" bytes from a connection.
208266e564dSmrg *
209266e564dSmrg * Return Status 0 if we detected an EXPECTED closed connection.
210266e564dSmrg *
211266e564dSmrg */
212266e564dSmrg
213266e564dSmrgStatus
214c5629e66Smrg_IceRead (
215c5629e66Smrg	register IceConn iceConn,
216c5629e66Smrg	unsigned long	 nbytes,
217c5629e66Smrg	register char	 *ptr
218c5629e66Smrg)
219266e564dSmrg{
220266e564dSmrg    register unsigned long nleft;
221266e564dSmrg
222266e564dSmrg    nleft = nbytes;
223266e564dSmrg    while (nleft > 0)
224266e564dSmrg    {
225266e564dSmrg	int nread;
226266e564dSmrg
227266e564dSmrg	if (iceConn->io_ok)
228266e564dSmrg	    nread = _IceTransRead (iceConn->trans_conn, ptr, (int) nleft);
229266e564dSmrg	else
230266e564dSmrg	    return (1);
231266e564dSmrg
232266e564dSmrg	if (nread <= 0)
233266e564dSmrg	{
234266e564dSmrg#ifdef WIN32
235266e564dSmrg	    errno = WSAGetLastError();
236266e564dSmrg#endif
237266e564dSmrg	    if (iceConn->want_to_close)
238266e564dSmrg	    {
239266e564dSmrg		/*
240266e564dSmrg		 * We sent a WantToClose message and now we detected that
241266e564dSmrg		 * the other side closed the connection.
242266e564dSmrg		 */
243266e564dSmrg
244266e564dSmrg		_IceConnectionClosed (iceConn);	    /* invoke watch procs */
245266e564dSmrg		_IceFreeConnection (iceConn);
246266e564dSmrg
247266e564dSmrg		return (0);
248266e564dSmrg	    }
2499ef0b394Smrg	    else
250266e564dSmrg	    {
251266e564dSmrg		/*
252266e564dSmrg		 * Fatal IO error.  First notify each protocol's IceIOErrorProc
253266e564dSmrg		 * callback, then invoke the application IO error handler.
254266e564dSmrg		 */
255266e564dSmrg
256266e564dSmrg		iceConn->io_ok = False;
257266e564dSmrg
258266e564dSmrg		if (iceConn->connection_status == IceConnectPending)
259266e564dSmrg		{
260266e564dSmrg		    /*
261266e564dSmrg		     * Don't invoke IO error handler if we are in the
262266e564dSmrg		     * middle of a connection setup.
263266e564dSmrg		     */
264266e564dSmrg
265266e564dSmrg		    return (1);
266266e564dSmrg		}
267266e564dSmrg
268266e564dSmrg		if (iceConn->process_msg_info)
269266e564dSmrg		{
270266e564dSmrg		    int i;
271266e564dSmrg
272266e564dSmrg		    for (i = iceConn->his_min_opcode;
273266e564dSmrg			i <= iceConn->his_max_opcode; i++)
274266e564dSmrg		    {
275266e564dSmrg			_IceProcessMsgInfo *process;
276266e564dSmrg
277266e564dSmrg			process = &iceConn->process_msg_info[
278266e564dSmrg			    i - iceConn->his_min_opcode];
279266e564dSmrg
280266e564dSmrg			if ((process != NULL) && process->in_use)
281266e564dSmrg			{
282266e564dSmrg			    IceIOErrorProc IOErrProc = process->accept_flag ?
283266e564dSmrg			      process->protocol->accept_client->io_error_proc :
284266e564dSmrg			      process->protocol->orig_client->io_error_proc;
285266e564dSmrg
286266e564dSmrg			    if (IOErrProc)
287266e564dSmrg				(*IOErrProc) (iceConn);
288266e564dSmrg			}
289266e564dSmrg		    }
290266e564dSmrg		}
291266e564dSmrg
292266e564dSmrg		(*_IceIOErrorHandler) (iceConn);
293266e564dSmrg		return (1);
294266e564dSmrg	    }
295266e564dSmrg	}
296266e564dSmrg
297266e564dSmrg	nleft -= nread;
298266e564dSmrg	ptr   += nread;
299266e564dSmrg    }
300266e564dSmrg
301266e564dSmrg    return (1);
302266e564dSmrg}
303266e564dSmrg
304266e564dSmrg
305266e564dSmrg
306266e564dSmrg/*
307266e564dSmrg * If we read a message header with a bad major or minor opcode,
308266e564dSmrg * we need to advance to the end of the message.  This way, the next
309266e564dSmrg * message can be processed correctly.
310266e564dSmrg */
311266e564dSmrg
312266e564dSmrgvoid
313c5629e66Smrg_IceReadSkip (
314c5629e66Smrg	register IceConn	iceConn,
315c5629e66Smrg	register unsigned long	nbytes
316c5629e66Smrg)
317266e564dSmrg{
318266e564dSmrg    char temp[512];
319266e564dSmrg
320266e564dSmrg    while (nbytes > 0)
321266e564dSmrg    {
322266e564dSmrg	unsigned long rbytes = nbytes > 512 ? 512 : nbytes;
323266e564dSmrg
324266e564dSmrg	_IceRead (iceConn, rbytes, temp);
325266e564dSmrg	nbytes -= rbytes;
326266e564dSmrg    }
327266e564dSmrg}
328266e564dSmrg
329266e564dSmrg
330266e564dSmrg
331266e564dSmrg/*
332266e564dSmrg * Write "n" bytes to a connection.
333266e564dSmrg */
334266e564dSmrg
335266e564dSmrgvoid
336c5629e66Smrg_IceWrite (
337c5629e66Smrg	register IceConn iceConn,
338c5629e66Smrg	unsigned long	 nbytes,
339c5629e66Smrg	register char	 *ptr
340c5629e66Smrg)
341266e564dSmrg{
342266e564dSmrg    register unsigned long nleft;
343266e564dSmrg
344266e564dSmrg    nleft = nbytes;
345266e564dSmrg    while (nleft > 0)
346266e564dSmrg    {
347266e564dSmrg	int nwritten;
348266e564dSmrg
349266e564dSmrg	if (iceConn->io_ok)
350266e564dSmrg	    nwritten = _IceTransWrite (iceConn->trans_conn, ptr, (int) nleft);
351266e564dSmrg	else
352266e564dSmrg	    return;
353266e564dSmrg
354266e564dSmrg	if (nwritten <= 0)
355266e564dSmrg	{
356266e564dSmrg#ifdef WIN32
357266e564dSmrg	    errno = WSAGetLastError();
358266e564dSmrg#endif
359266e564dSmrg	    /*
360266e564dSmrg	     * Fatal IO error.  First notify each protocol's IceIOErrorProc
361266e564dSmrg	     * callback, then invoke the application IO error handler.
362266e564dSmrg	     */
363266e564dSmrg
364266e564dSmrg	    iceConn->io_ok = False;
365266e564dSmrg
366266e564dSmrg	    if (iceConn->connection_status == IceConnectPending)
367266e564dSmrg	    {
368266e564dSmrg		/*
369266e564dSmrg		 * Don't invoke IO error handler if we are in the
370266e564dSmrg		 * middle of a connection setup.
371266e564dSmrg		 */
372266e564dSmrg
373266e564dSmrg		return;
374266e564dSmrg	    }
375266e564dSmrg
376266e564dSmrg	    if (iceConn->process_msg_info)
377266e564dSmrg	    {
378266e564dSmrg		int i;
379266e564dSmrg
380266e564dSmrg		for (i = iceConn->his_min_opcode;
381266e564dSmrg		     i <= iceConn->his_max_opcode; i++)
382266e564dSmrg		{
383266e564dSmrg		    _IceProcessMsgInfo *process;
384266e564dSmrg
385266e564dSmrg		    process = &iceConn->process_msg_info[
386266e564dSmrg			i - iceConn->his_min_opcode];
387266e564dSmrg
388266e564dSmrg		    if (process->in_use)
389266e564dSmrg		    {
390266e564dSmrg			IceIOErrorProc IOErrProc = process->accept_flag ?
391266e564dSmrg			    process->protocol->accept_client->io_error_proc :
392266e564dSmrg			    process->protocol->orig_client->io_error_proc;
393266e564dSmrg
394266e564dSmrg			if (IOErrProc)
395266e564dSmrg			    (*IOErrProc) (iceConn);
396266e564dSmrg		    }
397266e564dSmrg		}
398266e564dSmrg	    }
399266e564dSmrg
400266e564dSmrg	    (*_IceIOErrorHandler) (iceConn);
401266e564dSmrg	    return;
402266e564dSmrg	}
403266e564dSmrg
404266e564dSmrg	nleft -= nwritten;
405266e564dSmrg	ptr   += nwritten;
406266e564dSmrg    }
407266e564dSmrg}
408266e564dSmrg
409266e564dSmrg#ifdef WORD64
410266e564dSmrg
411c5629e66SmrgIceWriteData16 (
412c5629e66Smrg	IceConn 	iceConn,
413c5629e66Smrg	unsigned long 	nbytes,
414c5629e66Smrg	short  		*data
415c5629e66Smrg)
416266e564dSmrg{
417266e564dSmrg    int numShorts = nbytes / 2;
418266e564dSmrg    int index = 0;
419266e564dSmrg
420266e564dSmrg    while (index < numShorts)
421266e564dSmrg    {
422266e564dSmrg	int spaceLeft, count, i;
423266e564dSmrg	int shortsLeft = numShorts - index;
424266e564dSmrg
425266e564dSmrg	spaceLeft = iceConn->outbufmax - iceConn->outbufptr - 1;
426266e564dSmrg
427266e564dSmrg	if (spaceLeft < 2)
428266e564dSmrg	{
429266e564dSmrg	    IceFlush (iceConn);
430266e564dSmrg	    spaceLeft = iceConn->outbufmax - iceConn->outbufptr - 1;
431266e564dSmrg	}
432266e564dSmrg
433266e564dSmrg	count = (shortsLeft < spaceLeft / 2) ? shortsLeft : spaceLeft / 2;
434266e564dSmrg
435266e564dSmrg	for (i = 0; i < count; i++)
436266e564dSmrg	    STORE_CARD16 (iceConn->outbufptr, data[index++]);
437266e564dSmrg    }
438266e564dSmrg}
439266e564dSmrg
440266e564dSmrg
441c5629e66SmrgIceWriteData32 (
442c5629e66Smrg	IceConn 	iceConn,
443c5629e66Smrg	unsigned long  	nbytes,
444c5629e66Smrg	int	 	*data
445c5629e66Smrg)
446266e564dSmrg{
447266e564dSmrg    int numLongs = nbytes / 4;
448266e564dSmrg    int index = 0;
449266e564dSmrg
450266e564dSmrg    while (index < numLongs)
451266e564dSmrg    {
452266e564dSmrg	int spaceLeft, count, i;
453266e564dSmrg	int longsLeft = numLongs - index;
454266e564dSmrg
455266e564dSmrg	spaceLeft = iceConn->outbufmax - iceConn->outbufptr - 1;
456266e564dSmrg
457266e564dSmrg	if (spaceLeft < 4)
458266e564dSmrg	{
459266e564dSmrg	    IceFlush (iceConn);
460266e564dSmrg	    spaceLeft = iceConn->outbufmax - iceConn->outbufptr - 1;
461266e564dSmrg	}
462266e564dSmrg
463266e564dSmrg	count = (longsLeft < spaceLeft / 4) ? longsLeft : spaceLeft / 4;
464266e564dSmrg
465266e564dSmrg	for (i = 0; i < count; i++)
466266e564dSmrg	    STORE_CARD32 (iceConn->outbufptr, data[index++]);
467266e564dSmrg    }
468266e564dSmrg}
469266e564dSmrg
470266e564dSmrg
471c5629e66SmrgIceReadData16 (
472c5629e66Smrg	IceConn 	iceConn,
473c5629e66Smrg	Bool		swap,
474c5629e66Smrg	unsigned long 	nbytes,
475c5629e66Smrg	short  		*data
476c5629e66Smrg)
477266e564dSmrg{
478266e564dSmrg    /* NOT IMPLEMENTED YET */
479266e564dSmrg}
480266e564dSmrg
481266e564dSmrg
482c5629e66SmrgIceReadData32 (
483c5629e66Smrg	IceConn 	iceConn,
484c5629e66Smrg	Bool		swap,
485c5629e66Smrg	unsigned long  	nbytes,
486c5629e66Smrg	int	 	*data
487c5629e66Smrg)
488266e564dSmrg{
489266e564dSmrg    /* NOT IMPLEMENTED YET */
490266e564dSmrg}
491266e564dSmrg
492266e564dSmrg#endif  /* WORD64 */
493266e564dSmrg
494266e564dSmrg
495266e564dSmrg
496266e564dSmrgvoid
497c5629e66Smrg_IceAddOpcodeMapping (
498c5629e66Smrg	IceConn	iceConn,
499c5629e66Smrg	int 	hisOpcode,
500c5629e66Smrg	int 	myOpcode
501c5629e66Smrg)
502266e564dSmrg{
503266e564dSmrg    if (hisOpcode <= 0 || hisOpcode > 255)
504266e564dSmrg    {
505266e564dSmrg	return;
506266e564dSmrg    }
507266e564dSmrg    else if (iceConn->process_msg_info == NULL)
508266e564dSmrg    {
509266e564dSmrg	iceConn->process_msg_info = (_IceProcessMsgInfo *) malloc (
510266e564dSmrg	    sizeof (_IceProcessMsgInfo));
511266e564dSmrg	iceConn->his_min_opcode = iceConn->his_max_opcode = hisOpcode;
512266e564dSmrg    }
513266e564dSmrg    else if (hisOpcode < iceConn->his_min_opcode)
514266e564dSmrg    {
515266e564dSmrg	_IceProcessMsgInfo *oldVec = iceConn->process_msg_info;
516266e564dSmrg	int oldsize = iceConn->his_max_opcode - iceConn->his_min_opcode + 1;
517266e564dSmrg	int newsize = iceConn->his_max_opcode - hisOpcode + 1;
518266e564dSmrg	int i;
519266e564dSmrg
520266e564dSmrg	iceConn->process_msg_info = (_IceProcessMsgInfo *) malloc (
521266e564dSmrg	    newsize * sizeof (_IceProcessMsgInfo));
522266e564dSmrg
523266e564dSmrg	memcpy (&iceConn->process_msg_info[
524266e564dSmrg	    iceConn->his_min_opcode - hisOpcode], oldVec,
525266e564dSmrg	    oldsize * sizeof (_IceProcessMsgInfo));
526266e564dSmrg
527266e564dSmrg	free ((char *) oldVec);
528266e564dSmrg
529266e564dSmrg	for (i = hisOpcode + 1; i < iceConn->his_min_opcode; i++)
530266e564dSmrg	{
531266e564dSmrg	    iceConn->process_msg_info[i -
532266e564dSmrg		iceConn->his_min_opcode].in_use = False;
533266e564dSmrg
534266e564dSmrg	    iceConn->process_msg_info[i -
535266e564dSmrg		iceConn->his_min_opcode].protocol = NULL;
536266e564dSmrg	}
537266e564dSmrg
538266e564dSmrg	iceConn->his_min_opcode = hisOpcode;
539266e564dSmrg    }
540266e564dSmrg    else if (hisOpcode > iceConn->his_max_opcode)
541266e564dSmrg    {
542266e564dSmrg	_IceProcessMsgInfo *oldVec = iceConn->process_msg_info;
543266e564dSmrg	int oldsize = iceConn->his_max_opcode - iceConn->his_min_opcode + 1;
544266e564dSmrg	int newsize = hisOpcode - iceConn->his_min_opcode + 1;
545266e564dSmrg	int i;
546266e564dSmrg
547266e564dSmrg	iceConn->process_msg_info = (_IceProcessMsgInfo *) malloc (
548266e564dSmrg	    newsize * sizeof (_IceProcessMsgInfo));
549266e564dSmrg
550266e564dSmrg	memcpy (iceConn->process_msg_info, oldVec,
551266e564dSmrg	    oldsize * sizeof (_IceProcessMsgInfo));
552266e564dSmrg
553266e564dSmrg	free ((char *) oldVec);
554266e564dSmrg
555266e564dSmrg	for (i = iceConn->his_max_opcode + 1; i < hisOpcode; i++)
556266e564dSmrg	{
557266e564dSmrg	    iceConn->process_msg_info[i -
558266e564dSmrg		iceConn->his_min_opcode].in_use = False;
559266e564dSmrg
560266e564dSmrg	    iceConn->process_msg_info[i -
561266e564dSmrg		iceConn->his_min_opcode].protocol = NULL;
562266e564dSmrg	}
563266e564dSmrg
564266e564dSmrg	iceConn->his_max_opcode = hisOpcode;
565266e564dSmrg    }
566266e564dSmrg
567266e564dSmrg    iceConn->process_msg_info[hisOpcode -
568266e564dSmrg	iceConn->his_min_opcode].in_use = True;
569266e564dSmrg
570266e564dSmrg    iceConn->process_msg_info[hisOpcode -
571266e564dSmrg	iceConn->his_min_opcode].my_opcode = myOpcode;
572266e564dSmrg
573266e564dSmrg    iceConn->process_msg_info[hisOpcode -
574266e564dSmrg	iceConn->his_min_opcode].protocol = &_IceProtocols[myOpcode - 1];
575266e564dSmrg}
576266e564dSmrg
577266e564dSmrg
578266e564dSmrg
579266e564dSmrgchar *
580266e564dSmrgIceGetPeerName (IceConn iceConn)
581266e564dSmrg{
582266e564dSmrg    return (_IceTransGetPeerNetworkId (iceConn->trans_conn));
583266e564dSmrg}
584266e564dSmrg
585266e564dSmrg
586266e564dSmrgchar *
587266e564dSmrg_IceGetPeerName (IceConn iceConn)
588266e564dSmrg{
589266e564dSmrg    return (IceGetPeerName(iceConn));
590266e564dSmrg}
591