Exemplo n.º 1
0
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 );
}
Exemplo n.º 2
0
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 );
}