X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_net.pas;h=04382d340c0484ad0c5f2aed00cd78055b50e04c;hb=9d8b00c986bb26106cff2e456e9255386f504edc;hp=93525c990b7913d41175c6f7ee67d724f713ce7a;hpb=73397e8621bfed506a9ae32e36e8e0d205b220a5;p=d2df-sdl.git diff --git a/src/game/g_net.pas b/src/game/g_net.pas index 93525c9..04382d3 100644 --- a/src/game/g_net.pas +++ b/src/game/g_net.pas @@ -19,7 +19,7 @@ unit g_net; interface uses - e_log, e_msg, ENet, miniupnpc, Classes, MAPDEF; + e_log, e_msg, ENet, Classes, MAPDEF{$IFDEF USE_MINIUPNPC}, miniupnpc;{$ELSE};{$ENDIF} const NET_PROTOCOL_VER = 173; @@ -141,10 +141,14 @@ var NetGotEverything: Boolean = False; NetGotKeys: Boolean = False; +{$IFDEF USE_MINIUPNPC} NetPortForwarded: Word = 0; NetPongForwarded: Boolean = False; NetIGDControl: AnsiString; NetIGDService: TURLStr; +{$ENDIF} + + NetPortThread: TThreadID = 0; NetDumpFile: TStream; @@ -314,6 +318,10 @@ begin NetMode := NET_NONE; + if NetPortThread <> 0 then + WaitForThreadTerminate(NetPortThread, 66666); + + NetPortThread := 0; g_Net_UnforwardPorts(); if NetDump then @@ -332,6 +340,12 @@ end; { /// SERVER FUNCTIONS /// } +function ForwardThread(Param: Pointer): PtrInt; +begin + Result := 0; + if not g_Net_ForwardPorts() then Result := -1; +end; + function g_Net_Host(IPAddr: LongWord; Port: enet_uint16; MaxClients: Cardinal = 16): Boolean; begin if NetMode <> NET_NONE then @@ -359,7 +373,7 @@ begin NetAddr.host := IPAddr; NetAddr.port := Port; - if NetForwardPorts then g_Net_ForwardPorts(); + if NetForwardPorts then NetPortThread := BeginThread(ForwardThread); NetHost := enet_host_create(@NetAddr, NET_MAXCLIENTS, NET_CHANS, 0, 0); @@ -1111,12 +1125,12 @@ begin end; function g_Net_ForwardPorts(ForwardPongPort: Boolean = True): Boolean; +{$IFDEF USE_MINIUPNPC} var DevList: PUPNPDev; Urls: TUPNPUrls; Data: TIGDDatas; LanAddr: array [0..255] of Char; - ExtAddr: array [0..40] of Char; StrPort: AnsiString; Err, I: Integer; begin @@ -1128,15 +1142,13 @@ begin exit; end; - conwriteln('trying to forward server ports...'); - NetPongForwarded := False; NetPortForwarded := 0; - DevList := upnpDiscover(2000, nil, nil, 0, 0, Addr(Err)); + DevList := upnpDiscover(1000, nil, nil, 0, 0, 2, Addr(Err)); if DevList = nil then begin - conwritefln(' upnpDiscover() failed: %d', [Err]); + conwritefln('port forwarding failed: upnpDiscover() failed: %d', [Err]); exit; end; @@ -1144,19 +1156,11 @@ begin if I = 0 then begin - conwriteln(' could not find an IGD device on this LAN, aborting'); + conwriteln('port forwarding failed: could not find an IGD device on this LAN'); FreeUPNPDevList(DevList); FreeUPNPUrls(@Urls); exit; - end - else if I = 1 then - conwritefln(' found IGD @ %s', [Urls.controlURL]) - else - conwritefln(' found some kind of UPNP device @ %s, maybe it''ll work', [Urls.controlURL]); - - UPNP_GetExternalIPAddress(Urls.controlURL, Addr(data.first.servicetype[1]), Addr(ExtAddr[0])); - if ExtAddr[0] <> #0 then - conwritefln(' external IP address: %s', [Addr(ExtAddr[0])]); + end; StrPort := IntToStr(NetPort); I := UPNP_AddPortMapping( @@ -1167,7 +1171,7 @@ begin if I <> 0 then begin - conwritefln(' forwarding port %d failed: error %d', [NetPort, I]); + conwritefln('forwarding port %d failed: error %d', [NetPort, I]); FreeUPNPDevList(DevList); FreeUPNPUrls(@Urls); exit; @@ -1184,17 +1188,17 @@ begin if I <> 0 then begin - conwritefln(' forwarding port %d failed: error %d', [NetPort + 1, I]); + conwritefln('forwarding port %d failed: error %d', [NetPort + 1, I]); NetPongForwarded := False; end else begin - conwritefln(' forwarded port %d successfully', [NetPort + 1]); + conwritefln('forwarded port %d successfully', [NetPort + 1]); NetPongForwarded := True; end; end; - conwritefln(' forwarded port %d successfully', [NetPort]); + conwritefln('forwarded port %d successfully', [NetPort]); NetIGDControl := AnsiString(Urls.controlURL); NetIGDService := data.first.servicetype; NetPortForwarded := NetPort; @@ -1203,8 +1207,14 @@ begin FreeUPNPUrls(@Urls); Result := True; end; +{$ELSE} +begin + Result := False; +end; +{$ENDIF} procedure g_Net_UnforwardPorts(); +{$IFDEF USE_MINIUPNPC} var I: Integer; StrPort: AnsiString; @@ -1233,6 +1243,10 @@ begin NetPortForwarded := 0; end; +{$ELSE} +begin +end; +{$ENDIF} initialization