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 ); }