static void far Broadcast( void ) { _INITIPXECB( SAP ); FillArray( SAPHead.destNode, 0xff ); SAPHead.destSocket = SAP_SOCKET; SAPHead.infoType = _SWAPINT( 0x2 ); SAPHead.serverType = DBG_SERVER_TYPE; IpxGetInternetworkAddress( (PUCHAR)&SAPHead.addrNet ); SAPHead.addrSocket = IPXSocket; SAPHead.intermediateNetworks = _SWAPINT( 0x1 ); AssignArray( SAPECB.immediateAddress, SAPHead.destNode ); for( ;; ) { IpxSend( IPXSocket, &SAPECB ); DosSemClear( &BroadCastStart ); DosSemWait( &BroadCastStop, 60000 ); if( ServerDie ) { SAPHead.intermediateNetworks = _SWAPINT( 0x10 ); IpxSend( IPXSocket, &SAPECB ); ServerDie |= DIE_BROADCAST; DosExit( EXIT_THREAD, 0 ); } } }
static void far Respond( void ) { char dummy; ServECB.fragCount = 2; ServECB.fragList[1].fragAddress = &dummy; ServECB.fragList[1].fragSize = sizeof( dummy ); DosSetPrty( PRTYS_THREAD, PRTYC_NOCHANGE, +1, 0 ); for( ;; ) { if( IpxReceive( IPXSocket, ~0UL, &ServECB ) == 0 ) { _IPX_ASSIGNADDR( RespHead.dest, ServHead.source ); AssignArray( RespECB.immediateAddress, ServECB.immediateAddress ); RespECB.fragList[1].fragAddress = &SPXSocket; IpxSend( IPXSocket, &RespECB ); } if( ServerDie ) { ServerDie |= DIE_RESPOND; DosExit( EXIT_THREAD, 0 ); } } }
static char FindPartner( void ) { static BYTE segdata[128]; BYTE moresegs; BYTE flags; WORD connection; if( NWGetPrimaryConnectionID( &connection ) != 0 ) return( 0 ); if( NWReadPropertyValue( connection, &SAPHead.name, DBG_SERVER_TYPE, "NET_ADDRESS", 1, segdata, &moresegs, &flags ) != 0 ) return( 0 ); memcpy( &ServHead.destNet, segdata, 12 ); if( IpxGetLocalTarget( (PUCHAR)&ServHead.destNet, &ServECB, (PULONG)segdata ) != 0 ) return( 0 ); IpxSend( IPXSocket, &ServECB ); RespECB.fragList[1].fragAddress = &PartnerSPXSocket; if( IpxReceive( IPXSocket, 55*MAX_PARTNER_WAIT, &RespECB ) != 0 ) return( 0 ); _IPX_ASSIGNADDR( SendHead.dest, RespHead.source ); SendHead.destSocket = PartnerSPXSocket; AssignArray( SendECB.immediateAddress, RespECB.immediateAddress ); return( 1 ); }