misc.c revision 266e564d
1266e564dSmrg/* $Xorg: misc.c,v 1.4 2001/02/09 02:03:26 xorgcvs Exp $ */ 2266e564dSmrg/****************************************************************************** 3266e564dSmrg 4266e564dSmrg 5266e564dSmrgCopyright 1993, 1998 The Open Group 6266e564dSmrg 7266e564dSmrgPermission to use, copy, modify, distribute, and sell this software and its 8266e564dSmrgdocumentation for any purpose is hereby granted without fee, provided that 9266e564dSmrgthe above copyright notice appear in all copies and that both that 10266e564dSmrgcopyright notice and this permission notice appear in supporting 11266e564dSmrgdocumentation. 12266e564dSmrg 13266e564dSmrgThe above copyright notice and this permission notice shall be included in 14266e564dSmrgall copies or substantial portions of the Software. 15266e564dSmrg 16266e564dSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17266e564dSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18266e564dSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19266e564dSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 20266e564dSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 21266e564dSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22266e564dSmrg 23266e564dSmrgExcept as contained in this notice, the name of The Open Group shall not be 24266e564dSmrgused in advertising or otherwise to promote the sale, use or other dealings 25266e564dSmrgin this Software without prior written authorization from The Open Group. 26266e564dSmrg 27266e564dSmrgAuthor: Ralph Mor, X Consortium 28266e564dSmrg******************************************************************************/ 29266e564dSmrg/* $XFree86: xc/lib/ICE/misc.c,v 1.3 2001/01/17 19:41:29 dawes Exp $ */ 30266e564dSmrg 31266e564dSmrg#ifdef WIN32 32266e564dSmrg#define _WILLWINSOCK_ 33266e564dSmrg#endif 34266e564dSmrg#ifdef HAVE_CONFIG_H 35266e564dSmrg#include <config.h> 36266e564dSmrg#endif 37266e564dSmrg#include <X11/ICE/ICElib.h> 38266e564dSmrg#include "ICElibint.h" 39266e564dSmrg#include <X11/Xtrans/Xtrans.h> 40266e564dSmrg#include <stdio.h> 41266e564dSmrg#ifdef WIN32 42266e564dSmrg#include <X11/Xwinsock.h> 43266e564dSmrg#include <X11/Xw32defs.h> 44266e564dSmrg#endif 45266e564dSmrg 46266e564dSmrg 47266e564dSmrg/* 48266e564dSmrg * scratch buffer 49266e564dSmrg */ 50266e564dSmrg 51266e564dSmrgchar * 52266e564dSmrgIceAllocScratch (iceConn, size) 53266e564dSmrg 54266e564dSmrgIceConn iceConn; 55266e564dSmrgunsigned long size; 56266e564dSmrg 57266e564dSmrg{ 58266e564dSmrg if (!iceConn->scratch || size > iceConn->scratch_size) 59266e564dSmrg { 60266e564dSmrg if (iceConn->scratch) 61266e564dSmrg free (iceConn->scratch); 62266e564dSmrg 63266e564dSmrg iceConn->scratch = (char *) malloc ((unsigned) size); 64266e564dSmrg iceConn->scratch_size = size; 65266e564dSmrg } 66266e564dSmrg 67266e564dSmrg return (iceConn->scratch); 68266e564dSmrg} 69266e564dSmrg 70266e564dSmrg 71266e564dSmrg 72266e564dSmrg/* 73266e564dSmrg * Output/Input buffer functions 74266e564dSmrg */ 75266e564dSmrg 76266e564dSmrgint 77266e564dSmrgIceFlush (iceConn) 78266e564dSmrg 79266e564dSmrgIceConn iceConn; 80266e564dSmrg 81266e564dSmrg{ 82266e564dSmrg _IceWrite (iceConn, 83266e564dSmrg (unsigned long) (iceConn->outbufptr - iceConn->outbuf), 84266e564dSmrg iceConn->outbuf); 85266e564dSmrg 86266e564dSmrg iceConn->outbufptr = iceConn->outbuf; 87266e564dSmrg return 1; 88266e564dSmrg} 89266e564dSmrg 90266e564dSmrg 91266e564dSmrgint 92266e564dSmrgIceGetOutBufSize (iceConn) 93266e564dSmrg 94266e564dSmrgIceConn iceConn; 95266e564dSmrg 96266e564dSmrg{ 97266e564dSmrg return (iceConn->outbufmax - iceConn->outbuf); 98266e564dSmrg} 99266e564dSmrg 100266e564dSmrg 101266e564dSmrgint 102266e564dSmrgIceGetInBufSize (iceConn) 103266e564dSmrg 104266e564dSmrgIceConn iceConn; 105266e564dSmrg 106266e564dSmrg{ 107266e564dSmrg return (iceConn->inbufmax - iceConn->inbuf); 108266e564dSmrg} 109266e564dSmrg 110266e564dSmrg 111266e564dSmrg 112266e564dSmrg/* 113266e564dSmrg * informational functions 114266e564dSmrg */ 115266e564dSmrg 116266e564dSmrgIceConnectStatus 117266e564dSmrgIceConnectionStatus (iceConn) 118266e564dSmrg 119266e564dSmrgIceConn iceConn; 120266e564dSmrg 121266e564dSmrg{ 122266e564dSmrg return (iceConn->connection_status); 123266e564dSmrg} 124266e564dSmrg 125266e564dSmrg 126266e564dSmrgchar * 127266e564dSmrgIceVendor (iceConn) 128266e564dSmrg 129266e564dSmrgIceConn iceConn; 130266e564dSmrg 131266e564dSmrg{ 132266e564dSmrg return strdup(iceConn->vendor); 133266e564dSmrg} 134266e564dSmrg 135266e564dSmrg 136266e564dSmrgchar * 137266e564dSmrgIceRelease (iceConn) 138266e564dSmrg 139266e564dSmrgIceConn iceConn; 140266e564dSmrg 141266e564dSmrg{ 142266e564dSmrg return strdup(iceConn->release); 143266e564dSmrg} 144266e564dSmrg 145266e564dSmrg 146266e564dSmrgint 147266e564dSmrgIceProtocolVersion (iceConn) 148266e564dSmrg 149266e564dSmrgIceConn iceConn; 150266e564dSmrg 151266e564dSmrg{ 152266e564dSmrg return (_IceVersions[iceConn->my_ice_version_index].major_version); 153266e564dSmrg} 154266e564dSmrg 155266e564dSmrg 156266e564dSmrgint 157266e564dSmrgIceProtocolRevision (iceConn) 158266e564dSmrg 159266e564dSmrgIceConn iceConn; 160266e564dSmrg 161266e564dSmrg{ 162266e564dSmrg return (_IceVersions[iceConn->my_ice_version_index].minor_version); 163266e564dSmrg} 164266e564dSmrg 165266e564dSmrg 166266e564dSmrgint 167266e564dSmrgIceConnectionNumber (iceConn) 168266e564dSmrg 169266e564dSmrgIceConn iceConn; 170266e564dSmrg 171266e564dSmrg{ 172266e564dSmrg return (_IceTransGetConnectionNumber (iceConn->trans_conn)); 173266e564dSmrg} 174266e564dSmrg 175266e564dSmrg 176266e564dSmrgchar * 177266e564dSmrgIceConnectionString (iceConn) 178266e564dSmrg 179266e564dSmrgIceConn iceConn; 180266e564dSmrg 181266e564dSmrg{ 182266e564dSmrg if (iceConn->connection_string) 183266e564dSmrg { 184266e564dSmrg return strdup(iceConn->connection_string); 185266e564dSmrg } 186266e564dSmrg else 187266e564dSmrg return (NULL); 188266e564dSmrg} 189266e564dSmrg 190266e564dSmrg 191266e564dSmrgunsigned long 192266e564dSmrgIceLastSentSequenceNumber (iceConn) 193266e564dSmrg 194266e564dSmrgIceConn iceConn; 195266e564dSmrg 196266e564dSmrg{ 197266e564dSmrg return (iceConn->send_sequence); 198266e564dSmrg} 199266e564dSmrg 200266e564dSmrg 201266e564dSmrgunsigned long 202266e564dSmrgIceLastReceivedSequenceNumber (iceConn) 203266e564dSmrg 204266e564dSmrgIceConn iceConn; 205266e564dSmrg 206266e564dSmrg{ 207266e564dSmrg return (iceConn->receive_sequence); 208266e564dSmrg} 209266e564dSmrg 210266e564dSmrg 211266e564dSmrgBool 212266e564dSmrgIceSwapping (iceConn) 213266e564dSmrg 214266e564dSmrgIceConn iceConn; 215266e564dSmrg 216266e564dSmrg{ 217266e564dSmrg return (iceConn->swap); 218266e564dSmrg} 219266e564dSmrg 220266e564dSmrg 221266e564dSmrg 222266e564dSmrg/* 223266e564dSmrg * Read "n" bytes from a connection. 224266e564dSmrg * 225266e564dSmrg * Return Status 0 if we detected an EXPECTED closed connection. 226266e564dSmrg * 227266e564dSmrg */ 228266e564dSmrg 229266e564dSmrgStatus 230266e564dSmrg_IceRead (iceConn, nbytes, ptr) 231266e564dSmrg 232266e564dSmrgregister IceConn iceConn; 233266e564dSmrgunsigned long nbytes; 234266e564dSmrgregister char *ptr; 235266e564dSmrg 236266e564dSmrg{ 237266e564dSmrg register unsigned long nleft; 238266e564dSmrg 239266e564dSmrg nleft = nbytes; 240266e564dSmrg while (nleft > 0) 241266e564dSmrg { 242266e564dSmrg int nread; 243266e564dSmrg 244266e564dSmrg if (iceConn->io_ok) 245266e564dSmrg nread = _IceTransRead (iceConn->trans_conn, ptr, (int) nleft); 246266e564dSmrg else 247266e564dSmrg return (1); 248266e564dSmrg 249266e564dSmrg if (nread <= 0) 250266e564dSmrg { 251266e564dSmrg#ifdef WIN32 252266e564dSmrg errno = WSAGetLastError(); 253266e564dSmrg#endif 254266e564dSmrg if (iceConn->want_to_close) 255266e564dSmrg { 256266e564dSmrg /* 257266e564dSmrg * We sent a WantToClose message and now we detected that 258266e564dSmrg * the other side closed the connection. 259266e564dSmrg */ 260266e564dSmrg 261266e564dSmrg _IceConnectionClosed (iceConn); /* invoke watch procs */ 262266e564dSmrg _IceFreeConnection (iceConn); 263266e564dSmrg 264266e564dSmrg return (0); 265266e564dSmrg } 266266e564dSmrg else 267266e564dSmrg { 268266e564dSmrg /* 269266e564dSmrg * Fatal IO error. First notify each protocol's IceIOErrorProc 270266e564dSmrg * callback, then invoke the application IO error handler. 271266e564dSmrg */ 272266e564dSmrg 273266e564dSmrg iceConn->io_ok = False; 274266e564dSmrg 275266e564dSmrg if (iceConn->connection_status == IceConnectPending) 276266e564dSmrg { 277266e564dSmrg /* 278266e564dSmrg * Don't invoke IO error handler if we are in the 279266e564dSmrg * middle of a connection setup. 280266e564dSmrg */ 281266e564dSmrg 282266e564dSmrg return (1); 283266e564dSmrg } 284266e564dSmrg 285266e564dSmrg if (iceConn->process_msg_info) 286266e564dSmrg { 287266e564dSmrg int i; 288266e564dSmrg 289266e564dSmrg for (i = iceConn->his_min_opcode; 290266e564dSmrg i <= iceConn->his_max_opcode; i++) 291266e564dSmrg { 292266e564dSmrg _IceProcessMsgInfo *process; 293266e564dSmrg 294266e564dSmrg process = &iceConn->process_msg_info[ 295266e564dSmrg i - iceConn->his_min_opcode]; 296266e564dSmrg 297266e564dSmrg if ((process != NULL) && process->in_use) 298266e564dSmrg { 299266e564dSmrg IceIOErrorProc IOErrProc = process->accept_flag ? 300266e564dSmrg process->protocol->accept_client->io_error_proc : 301266e564dSmrg process->protocol->orig_client->io_error_proc; 302266e564dSmrg 303266e564dSmrg if (IOErrProc) 304266e564dSmrg (*IOErrProc) (iceConn); 305266e564dSmrg } 306266e564dSmrg } 307266e564dSmrg } 308266e564dSmrg 309266e564dSmrg (*_IceIOErrorHandler) (iceConn); 310266e564dSmrg return (1); 311266e564dSmrg } 312266e564dSmrg } 313266e564dSmrg 314266e564dSmrg nleft -= nread; 315266e564dSmrg ptr += nread; 316266e564dSmrg } 317266e564dSmrg 318266e564dSmrg return (1); 319266e564dSmrg} 320266e564dSmrg 321266e564dSmrg 322266e564dSmrg 323266e564dSmrg/* 324266e564dSmrg * If we read a message header with a bad major or minor opcode, 325266e564dSmrg * we need to advance to the end of the message. This way, the next 326266e564dSmrg * message can be processed correctly. 327266e564dSmrg */ 328266e564dSmrg 329266e564dSmrgvoid 330266e564dSmrg_IceReadSkip (iceConn, nbytes) 331266e564dSmrg 332266e564dSmrgregister IceConn iceConn; 333266e564dSmrgregister unsigned long nbytes; 334266e564dSmrg 335266e564dSmrg{ 336266e564dSmrg char temp[512]; 337266e564dSmrg 338266e564dSmrg while (nbytes > 0) 339266e564dSmrg { 340266e564dSmrg unsigned long rbytes = nbytes > 512 ? 512 : nbytes; 341266e564dSmrg 342266e564dSmrg _IceRead (iceConn, rbytes, temp); 343266e564dSmrg nbytes -= rbytes; 344266e564dSmrg } 345266e564dSmrg} 346266e564dSmrg 347266e564dSmrg 348266e564dSmrg 349266e564dSmrg/* 350266e564dSmrg * Write "n" bytes to a connection. 351266e564dSmrg */ 352266e564dSmrg 353266e564dSmrgvoid 354266e564dSmrg_IceWrite (iceConn, nbytes, ptr) 355266e564dSmrg 356266e564dSmrgregister IceConn iceConn; 357266e564dSmrgunsigned long nbytes; 358266e564dSmrgregister char *ptr; 359266e564dSmrg 360266e564dSmrg{ 361266e564dSmrg register unsigned long nleft; 362266e564dSmrg 363266e564dSmrg nleft = nbytes; 364266e564dSmrg while (nleft > 0) 365266e564dSmrg { 366266e564dSmrg int nwritten; 367266e564dSmrg 368266e564dSmrg if (iceConn->io_ok) 369266e564dSmrg nwritten = _IceTransWrite (iceConn->trans_conn, ptr, (int) nleft); 370266e564dSmrg else 371266e564dSmrg return; 372266e564dSmrg 373266e564dSmrg if (nwritten <= 0) 374266e564dSmrg { 375266e564dSmrg#ifdef WIN32 376266e564dSmrg errno = WSAGetLastError(); 377266e564dSmrg#endif 378266e564dSmrg /* 379266e564dSmrg * Fatal IO error. First notify each protocol's IceIOErrorProc 380266e564dSmrg * callback, then invoke the application IO error handler. 381266e564dSmrg */ 382266e564dSmrg 383266e564dSmrg iceConn->io_ok = False; 384266e564dSmrg 385266e564dSmrg if (iceConn->connection_status == IceConnectPending) 386266e564dSmrg { 387266e564dSmrg /* 388266e564dSmrg * Don't invoke IO error handler if we are in the 389266e564dSmrg * middle of a connection setup. 390266e564dSmrg */ 391266e564dSmrg 392266e564dSmrg return; 393266e564dSmrg } 394266e564dSmrg 395266e564dSmrg if (iceConn->process_msg_info) 396266e564dSmrg { 397266e564dSmrg int i; 398266e564dSmrg 399266e564dSmrg for (i = iceConn->his_min_opcode; 400266e564dSmrg i <= iceConn->his_max_opcode; i++) 401266e564dSmrg { 402266e564dSmrg _IceProcessMsgInfo *process; 403266e564dSmrg 404266e564dSmrg process = &iceConn->process_msg_info[ 405266e564dSmrg i - iceConn->his_min_opcode]; 406266e564dSmrg 407266e564dSmrg if (process->in_use) 408266e564dSmrg { 409266e564dSmrg IceIOErrorProc IOErrProc = process->accept_flag ? 410266e564dSmrg process->protocol->accept_client->io_error_proc : 411266e564dSmrg process->protocol->orig_client->io_error_proc; 412266e564dSmrg 413266e564dSmrg if (IOErrProc) 414266e564dSmrg (*IOErrProc) (iceConn); 415266e564dSmrg } 416266e564dSmrg } 417266e564dSmrg } 418266e564dSmrg 419266e564dSmrg (*_IceIOErrorHandler) (iceConn); 420266e564dSmrg return; 421266e564dSmrg } 422266e564dSmrg 423266e564dSmrg nleft -= nwritten; 424266e564dSmrg ptr += nwritten; 425266e564dSmrg } 426266e564dSmrg} 427266e564dSmrg 428266e564dSmrg#ifdef WORD64 429266e564dSmrg 430266e564dSmrgIceWriteData16 (iceConn, nbytes, data) 431266e564dSmrg 432266e564dSmrgIceConn iceConn; 433266e564dSmrgunsigned long nbytes; 434266e564dSmrgshort *data; 435266e564dSmrg 436266e564dSmrg{ 437266e564dSmrg int numShorts = nbytes / 2; 438266e564dSmrg int index = 0; 439266e564dSmrg 440266e564dSmrg while (index < numShorts) 441266e564dSmrg { 442266e564dSmrg int spaceLeft, count, i; 443266e564dSmrg int shortsLeft = numShorts - index; 444266e564dSmrg 445266e564dSmrg spaceLeft = iceConn->outbufmax - iceConn->outbufptr - 1; 446266e564dSmrg 447266e564dSmrg if (spaceLeft < 2) 448266e564dSmrg { 449266e564dSmrg IceFlush (iceConn); 450266e564dSmrg spaceLeft = iceConn->outbufmax - iceConn->outbufptr - 1; 451266e564dSmrg } 452266e564dSmrg 453266e564dSmrg count = (shortsLeft < spaceLeft / 2) ? shortsLeft : spaceLeft / 2; 454266e564dSmrg 455266e564dSmrg for (i = 0; i < count; i++) 456266e564dSmrg STORE_CARD16 (iceConn->outbufptr, data[index++]); 457266e564dSmrg } 458266e564dSmrg} 459266e564dSmrg 460266e564dSmrg 461266e564dSmrgIceWriteData32 (iceConn, nbytes, data) 462266e564dSmrg 463266e564dSmrgIceConn iceConn; 464266e564dSmrgunsigned long nbytes; 465266e564dSmrgint *data; 466266e564dSmrg 467266e564dSmrg{ 468266e564dSmrg int numLongs = nbytes / 4; 469266e564dSmrg int index = 0; 470266e564dSmrg 471266e564dSmrg while (index < numLongs) 472266e564dSmrg { 473266e564dSmrg int spaceLeft, count, i; 474266e564dSmrg int longsLeft = numLongs - index; 475266e564dSmrg 476266e564dSmrg spaceLeft = iceConn->outbufmax - iceConn->outbufptr - 1; 477266e564dSmrg 478266e564dSmrg if (spaceLeft < 4) 479266e564dSmrg { 480266e564dSmrg IceFlush (iceConn); 481266e564dSmrg spaceLeft = iceConn->outbufmax - iceConn->outbufptr - 1; 482266e564dSmrg } 483266e564dSmrg 484266e564dSmrg count = (longsLeft < spaceLeft / 4) ? longsLeft : spaceLeft / 4; 485266e564dSmrg 486266e564dSmrg for (i = 0; i < count; i++) 487266e564dSmrg STORE_CARD32 (iceConn->outbufptr, data[index++]); 488266e564dSmrg } 489266e564dSmrg} 490266e564dSmrg 491266e564dSmrg 492266e564dSmrgIceReadData16 (iceConn, swap, nbytes, data) 493266e564dSmrg 494266e564dSmrgIceConn iceConn; 495266e564dSmrgBool swap; 496266e564dSmrgunsigned long nbytes; 497266e564dSmrgshort *data; 498266e564dSmrg 499266e564dSmrg{ 500266e564dSmrg /* NOT IMPLEMENTED YET */ 501266e564dSmrg} 502266e564dSmrg 503266e564dSmrg 504266e564dSmrgIceReadData32 (iceConn, swap, nbytes, data) 505266e564dSmrg 506266e564dSmrgIceConn iceConn; 507266e564dSmrgBool swap; 508266e564dSmrgunsigned long nbytes; 509266e564dSmrgint *data; 510266e564dSmrg 511266e564dSmrg{ 512266e564dSmrg /* NOT IMPLEMENTED YET */ 513266e564dSmrg} 514266e564dSmrg 515266e564dSmrg#endif /* WORD64 */ 516266e564dSmrg 517266e564dSmrg 518266e564dSmrg 519266e564dSmrgvoid 520266e564dSmrg_IceAddOpcodeMapping (iceConn, hisOpcode, myOpcode) 521266e564dSmrg 522266e564dSmrgIceConn iceConn; 523266e564dSmrgint hisOpcode; 524266e564dSmrgint myOpcode; 525266e564dSmrg 526266e564dSmrg{ 527266e564dSmrg if (hisOpcode <= 0 || hisOpcode > 255) 528266e564dSmrg { 529266e564dSmrg return; 530266e564dSmrg } 531266e564dSmrg else if (iceConn->process_msg_info == NULL) 532266e564dSmrg { 533266e564dSmrg iceConn->process_msg_info = (_IceProcessMsgInfo *) malloc ( 534266e564dSmrg sizeof (_IceProcessMsgInfo)); 535266e564dSmrg iceConn->his_min_opcode = iceConn->his_max_opcode = hisOpcode; 536266e564dSmrg } 537266e564dSmrg else if (hisOpcode < iceConn->his_min_opcode) 538266e564dSmrg { 539266e564dSmrg _IceProcessMsgInfo *oldVec = iceConn->process_msg_info; 540266e564dSmrg int oldsize = iceConn->his_max_opcode - iceConn->his_min_opcode + 1; 541266e564dSmrg int newsize = iceConn->his_max_opcode - hisOpcode + 1; 542266e564dSmrg int i; 543266e564dSmrg 544266e564dSmrg iceConn->process_msg_info = (_IceProcessMsgInfo *) malloc ( 545266e564dSmrg newsize * sizeof (_IceProcessMsgInfo)); 546266e564dSmrg 547266e564dSmrg memcpy (&iceConn->process_msg_info[ 548266e564dSmrg iceConn->his_min_opcode - hisOpcode], oldVec, 549266e564dSmrg oldsize * sizeof (_IceProcessMsgInfo)); 550266e564dSmrg 551266e564dSmrg free ((char *) oldVec); 552266e564dSmrg 553266e564dSmrg for (i = hisOpcode + 1; i < iceConn->his_min_opcode; i++) 554266e564dSmrg { 555266e564dSmrg iceConn->process_msg_info[i - 556266e564dSmrg iceConn->his_min_opcode].in_use = False; 557266e564dSmrg 558266e564dSmrg iceConn->process_msg_info[i - 559266e564dSmrg iceConn->his_min_opcode].protocol = NULL; 560266e564dSmrg } 561266e564dSmrg 562266e564dSmrg iceConn->his_min_opcode = hisOpcode; 563266e564dSmrg } 564266e564dSmrg else if (hisOpcode > iceConn->his_max_opcode) 565266e564dSmrg { 566266e564dSmrg _IceProcessMsgInfo *oldVec = iceConn->process_msg_info; 567266e564dSmrg int oldsize = iceConn->his_max_opcode - iceConn->his_min_opcode + 1; 568266e564dSmrg int newsize = hisOpcode - iceConn->his_min_opcode + 1; 569266e564dSmrg int i; 570266e564dSmrg 571266e564dSmrg iceConn->process_msg_info = (_IceProcessMsgInfo *) malloc ( 572266e564dSmrg newsize * sizeof (_IceProcessMsgInfo)); 573266e564dSmrg 574266e564dSmrg memcpy (iceConn->process_msg_info, oldVec, 575266e564dSmrg oldsize * sizeof (_IceProcessMsgInfo)); 576266e564dSmrg 577266e564dSmrg free ((char *) oldVec); 578266e564dSmrg 579266e564dSmrg for (i = iceConn->his_max_opcode + 1; i < hisOpcode; i++) 580266e564dSmrg { 581266e564dSmrg iceConn->process_msg_info[i - 582266e564dSmrg iceConn->his_min_opcode].in_use = False; 583266e564dSmrg 584266e564dSmrg iceConn->process_msg_info[i - 585266e564dSmrg iceConn->his_min_opcode].protocol = NULL; 586266e564dSmrg } 587266e564dSmrg 588266e564dSmrg iceConn->his_max_opcode = hisOpcode; 589266e564dSmrg } 590266e564dSmrg 591266e564dSmrg iceConn->process_msg_info[hisOpcode - 592266e564dSmrg iceConn->his_min_opcode].in_use = True; 593266e564dSmrg 594266e564dSmrg iceConn->process_msg_info[hisOpcode - 595266e564dSmrg iceConn->his_min_opcode].my_opcode = myOpcode; 596266e564dSmrg 597266e564dSmrg iceConn->process_msg_info[hisOpcode - 598266e564dSmrg iceConn->his_min_opcode].protocol = &_IceProtocols[myOpcode - 1]; 599266e564dSmrg} 600266e564dSmrg 601266e564dSmrg 602266e564dSmrg 603266e564dSmrgchar * 604266e564dSmrgIceGetPeerName (IceConn iceConn) 605266e564dSmrg{ 606266e564dSmrg return (_IceTransGetPeerNetworkId (iceConn->trans_conn)); 607266e564dSmrg} 608266e564dSmrg 609266e564dSmrg 610266e564dSmrgchar * 611266e564dSmrg_IceGetPeerName (IceConn iceConn) 612266e564dSmrg{ 613266e564dSmrg return (IceGetPeerName(iceConn)); 614266e564dSmrg} 615