Example #1
0
static char InitServer( void )
{
    putstring( "init server\r\n" );
    ServRespESRAddr = _ESR( ServResp );
    SAPBroadESRAddr = _ESR( SAPBroad );
    SAPWaitESRAddr = _ESR( SAPWait );

    ServECB.fragmentCount = 2;
    ServECB.fragmentDescriptor[1].address = &ServDummy;
    ServECB.fragmentDescriptor[1].size = sizeof( ServDummy );

    ServECB.ESRAddress = ServRespESRAddr;
    _IPXListenForPacket( &ServECB );

    _INITIPXECB( SAP );
    FillArray( SAPHead.destination.node, 0xff );
    SAPHead.destination.socket = SAP_SOCKET;
    SAPHead.infoType = _SWAPINT( 0x2 );
    SAPHead.serverType = DBG_SERVER_TYPE;
    _IPXGetInternetworkAddress( &SAPHead.address.network.a[0] );
    SAPHead.address.socket = SAPECB.socketNumber;
    SAPHead.intermediateNetworks = _SWAPINT( 0x1 );
    SAPECB.immediateAddress = SAPHead.destination.node;
    SAPECB.ESRAddress = SAPBroadESRAddr;
    _IPXSendPacket( &SAPECB );
    return( 1 );
}
Example #2
0
const char *RemoteLink( const char *parms, bool server )
{
    unsigned    i;


    _DBG_IPX(("RemoteLink\r\n"));
    server = server;
    if( *parms == '\0' )
        parms = "NovLink";
    for( i = 0; i < 48 && *parms != '\0'; ++parms ) {
        if( strchr( "/\\:;,*?+-", *parms ) == NULL ) {
            SAPStruct.ASServerIDpacket.serverName[ i++ ] = toupper( *parms );
        }
    }
    SAPStruct.ASServerIDpacket.serverName[ i ] = '\0';
    if( CIPXOpenSocketRTag( &SPXSocket, SocketTag ) != 0 ||
            CIPXOpenSocketRTag( &IPXSocket, SocketTag ) != 0 ) {
        return( TRP_ERR_can_not_obtain_socket );
    }

    _INITIPXECB( Serv );
    _INITIPXECB( Resp );
    RespECB.fragmentCount = 2;
    /* for SPXSocket - yes, SPXSocket is a long, but it always goes out on
        the wire as a 16-bit quantity */
    RespECB.fragmentDescriptor[1].size = sizeof( WORD );

    Timer.TCallBackProcedure = (void (*)(LONG))Ticker;
    Timer.TCallBackEBXParameter = (LONG)&Timer;
    Timer.TCallBackWaitTime = 0;
    Timer.TResourceTag = TimerTag;
    CScheduleInterruptTimeCallBack( &Timer );


    if( FindPartner() ) {
        RemoteUnLink();
        return( TRP_ERR_server_name_already_in_use );
    }
    if( !InitServer() ) {
        RemoteUnLink();
        return( TRP_ERR_can_not_initialize_server );
    }
    return( NULL );
}
Example #3
0
char *RemoteLink( char *name, bool server )
{
    unsigned    i;

    server = server;
putstring( "RemoteLink\r\n" );

    if( name == NULL || *name == '\0' )
        name = "NovLink";
    for( i = 0; i < 47 && *name != '\0'; ++name ) {
        if( strchr( "/\\:;,*?+-", *name ) == NULL ) {
            SAPHead.name[ i++ ] = toupper( *name );
        }
    }
    SAPHead.name[ i ] = '\0';
    if( SpxOpenSocket( &SPXSocket ) != 0 || IpxOpenSocket( &IPXSocket ) != 0 ) {
        return( TRP_ERR_can_not_obtain_socket );
    }
    _INITIPXECB( Serv );
    _INITIPXECB( Resp );
    RespECB.fragCount = 2;
    RespECB.fragList[1].fragSize = sizeof( WORD ); /* for SPXSocket */
#ifdef SERVER
    if( FindPartner() ) {
        RemoteUnLink();
        return( TRP_ERR_server_name_already_in_use );
    }
    if( !InitServer() ) {
        RemoteUnLink();
        return( TRP_ERR_can_not_initialize_server );
    }
#else
    if( !FindPartner() ) {
        RemoteUnLink();
        return( TRP_ERR_no_such_server );
    }
#endif
    return( NULL );
}
Example #4
0
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 );
        }
    }
}
Example #5
0
const char *RemoteLink( const char *parms, bool server )
{
    unsigned    i;
    BYTE        major_ver,minor_ver;
    WORD        max_conn,avail_conn;

    #ifdef __WINDOWS__
    {
        HINSTANCE       ipxspx;
        HINSTANCE       netapi;
        HMODULE         netware;

        GlobalPageLock( (HGLOBAL)FP_SEG( &SAPECB ) );
        netware = GetModuleHandle( "NETWARE.DRV" );
        ipxspx = LoadLibrary( "NWIPXSPX.DLL" );
        netapi = LoadLibrary( "NWCALLS.DLL" );
        if( (UINT)ipxspx < 32 ) return( TRP_ERR_IPX_SPX_not_present );
        if( (UINT)netapi < 32 ) return( TRP_ERR_Netware_API_not_present );
        if( netware == NULL ) return( TRP_ERR_NETWAREDRV_not_present );
#define str( x ) #x
#define GetAddr( hdl, x ) IPXFuncs[x] = (NOVWINAPI)GetProcAddress( hdl, str( x ) )
#define GetIPXAddr( x ) GetAddr( ipxspx, x )
        GetAddr( netapi, NWReadPropertyValue );
        GetIPXAddr( IPXInitialize );
        GetIPXAddr( IPXSPXDeinit );
        GetIPXAddr( IPXCancelEvent );
        GetIPXAddr( IPXCloseSocket );
        GetIPXAddr( IPXDisconnectFromTarget );
        GetIPXAddr( IPXGetInternetworkAddress );
        GetIPXAddr( IPXGetIntervalMarker );
        GetIPXAddr( IPXGetLocalTarget );
        GetIPXAddr( IPXListenForPacket );
        GetIPXAddr( IPXOpenSocket );
        GetIPXAddr( IPXRelinquishControl );
        GetIPXAddr( IPXScheduleIPXEvent );
        GetIPXAddr( IPXSendPacket );
        GetIPXAddr( SPXAbortConnection );
        GetIPXAddr( SPXEstablishConnection );
        GetIPXAddr( SPXInitialize );
        GetIPXAddr( SPXListenForConnection );
        GetIPXAddr( SPXListenForSequencedPacket );
        GetIPXAddr( SPXSendSequencedPacket );
        GetIPXAddr( SPXTerminateConnection );
        IPXTaskID = 0x00000000L;
        if( IPXInitialize( (DWORD __far *)&IPXTaskID, 20, 576 ) != 0 ) {
            return( TRP_ERR_IPX_not_initialized );
        }
    }
    #endif
    server = server;
    if( *parms == '\0' )
        parms = DefLinkName;
    for( i = 0; i < MAX_NAME_LEN && *parms != '\0'; ++parms ) {
        if( strchr( "/\\:;,*?+-", *parms ) == NULL ) {
            SAPHead.name[ i++ ] = toupper( *parms );
        }
    }
    SAPHead.name[ i ] = '\0';
    if( !_SPXInitialize( 20, 576, &major_ver, &minor_ver, &max_conn, &avail_conn ) ) {
        return( TRP_ERR_SPX_not_present );
    }
    if( _IPXOpenSocket( &SPXSocket, 0 ) != 0 || _IPXOpenSocket( &IPXSocket, 0 ) != 0 ) {
        return( TRP_ERR_can_not_obtain_socket );
    }
    _INITIPXECB( Serv );
    _INITIPXECB( Resp );
    RespECB.fragmentCount = 2;
    RespECB.fragmentDescriptor[1].size = sizeof( WORD ); /* for SPXSocket */
#ifdef SERVER
    if( FindPartner() ) {
        RemoteUnLink();
        return( TRP_ERR_server_name_already_in_use );
    }
    if( !InitServer() ) {
        RemoteUnLink();
        return( TRP_ERR_can_not_initialize_server );
    }
#else
    if( FindPartner() == 0 ) {
        RemoteUnLink();
        return( TRP_ERR_no_such_server );
    }
#endif
    return( NULL );
}