static int FindPartner( void ) { BYTE property_value[130]; LONG transport_time; if( ReadPropertyValue( (char *)SAPStruct.ASServerIDpacket.serverName, DBG_SERVER_TYPE, "NET_ADDRESS", 1, (BYTE *)&property_value ) != 0 ) return( 0 ); AssignArray( ServHead.destination, property_value ); if( CIPXGetLocalTarget( ServHead.destination.network, ServECB.immediateAddress, &transport_time ) != 0 ) { _DBG_IPX(( "FindPartner -- nobody home\r\n" )); return( FALSE ); } RespECB.fragmentDescriptor[1].address = &PartnerSPXSocket; CIPXListen( &RespECB ); CIPXSendPacket( &ServECB ); while( InUse( ServECB ) ) NothingToDo(); if( !Completed( ServECB ) ) return( FALSE ); NothingToDo(); Tick = 0; for( ;; ) { if( !InUse( RespECB ) ) { _DBG_IPX(( "FindPartner -- %s answered\r\n", Completed( RespECB ) ? "someone" : "noone" )); return( Completed( RespECB ) ); } NothingToDo(); if( Tick > MAX_PARTNER_WAIT ) break; } CIPXCancelECB( &RespECB ); return( FALSE ); }
static char FindPartner( void ) { static char RepBuff[132]; #ifdef __WINDOWS__ { BYTE moresegments; BYTE propertyflags; int binderyerror; binderyerror = NWReadPropertyValue( 0, SAPHead.name, DBG_SERVER_TYPE, // _SWAPINT( DBG_SERVER_TYPE ), "NET_ADDRESS", 1, RepBuff, (void *)&moresegments, (void *)&propertyflags ); if( binderyerror != 0 ) return( 0 ); AssignArray( ServHead.destination, RepBuff[0] ); } #else { extern char ReadPropertyValue( void *, void *); #pragma aux ReadPropertyValue = \ 0xb4 0xe3 /* mov ah,0e3h */ \ 0x1e /* push ds */ \ 0x07 /* pop es */ \ 0xcd 0x21 /* int 21h */ \ parm [ si ] [ di ] value [al] modify [ es ]; static char ReqBuff[80]; unsigned i; ReqBuff[ 2 ] = 0x3d; /* sub-function */ ACC_WORD( ReqBuff[ 3 ] ) = DBG_SERVER_TYPE; i = strlen( SAPHead.name ); ReqBuff[5] = i; memcpy( &ReqBuff[6], &SAPHead.name, i ); i += 6; ReqBuff[ i++ ] = 1; ReqBuff[ i++ ] = sizeof( "NET_ADDRESS" ) - 1; memcpy( &ReqBuff[ i ], "NET_ADDRESS", sizeof( "NET_ADDRESS" ) - 1 ); ACC_WORD( ReqBuff[0] ) = i + (sizeof( "NET_ADDRESS" ) - 2); ACC_WORD( RepBuff[0] ) = 130; putstring( "read prop\r\n" ); if( ReadPropertyValue( &ReqBuff, &RepBuff ) != 0 ) return( 0 ); putstring( "assgn array\r\n" ); AssignArray( ServHead.destination, RepBuff[2] ); } #endif putstring( "lcl targ\r\n" ); if( _IPXGetLocalTarget( &ServHead.destination.network.a[0], &ServECB.immediateAddress.a[0], (WORD *)&RepBuff ) != 0 ) return( 0 ); RespECB.fragmentDescriptor[1].address = &PartnerSPXSocket; _IPXListenForPacket( &RespECB ); putstring( "send p\r\n" ); _IPXSendPacket( &ServECB ); WaitOn( ServECB ); putstring( "wait for\r\n" ); if( !WaitTimeout( &RespECB, MAX_PARTNER_WAIT, 1 ) ) return( 0 ); putstring( "got one\r\n" ); SendHead.destination = RespHead.source; SendHead.destination.socket = PartnerSPXSocket; SendECB.immediateAddress = RespECB.immediateAddress; return( 1 ); }