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