AAO25.com
America's Army => General Chat => Topic started by: pit-23 on Tuesday, February 07, 2012, 03:47:53 AM
-
I used assist gui to install and start server. GUI says everything is fine, it's visible in battletracker (http://battletracker.com/aaoserver/85.14.85.18:1716 (http://battletracker.com/aaoserver/85.14.85.18:1716)). However it is not present in assist browser, or sometimes it is, but reported as "offline".
All ports are open, aa 2.8 worked fine in this setup.
Any hints?
-
Shows up in browser ok but cannot join it, I would goto settings and then hit complete re-install. something wrong and i dont know what.
-
OK, did that, waiting for completion.
What is the exact meaning of "Server offline"? No response to server query?
BTW, is the query protocol in aa2.5 same as aa2.8? I don't remember official name of this (gamespy?) but it was initiated by sending something like '\xFE\xFD\x00ping\x00\xFF\x00' to port 1717.
-
Complete reinstall finished, didn't help.
Attached is server log, maybe you can spot something there.
-
Looked at log file, all is OK. I don't know why its not working.
Make sure there is nothing else running on the server using the same ports.
Try using different ports like 1816,1817
There are many threads on this forum about this issue to help you.
-
First thing that comes to mind; are you trying to run a 2.8 server at the same time?
-
No, 2.8 has been disabled.
One additional fact about browser: I noticed, that when server is visible in browser, but seen as offline, the IP displayed is completely wrong (different country), and it changes from time to time. The rest of info is correct (country flag, map, slots count, round len, etc.) It seems like some incorrect IPs are assigned to the server, and that explains why the server is seen as offline (no query response from those IPs).
This effect is machine specific, e.g. on the server machine, the browser displays the correct IP (and the server is seen as online).
Is it possible to take a look at browser sources? It looks like some browser bug, I can try to find it without taking your time.
-
Another fact i noticed: the incorrect ip that is displayed for my server (Chickens Farm) is the ip of the server that i deployed to recently.
-
I will take a look at the code..
either the ip address recorded in the gamespy server list is wrong, or your server reply on a different address/port, assist does not recognise so just places it on the top of the list.
-
Ok, When i query this server it replies on a different IP address to the one recorded in the gamespy server list. There is nothing i can do about this.
Server is listed on IP address: 85.14.85.18
When i query it i get a reply from: 89.25.239.18
Only you will know why that is, possibly you have bonded multiple internet connections?
-
OK, thanks, I'll check that.
-
But wait, why does browser care from which IP the query response arrives?
You want to query a server at given IP/port, you create socket, send query to destination, and receive response that arrives at that socket. It's normal that the response can arrive from different IP (due to multiple network interfaces). Is there any special reason to check the IP of the response?
-
Ok so when I query 70 servers all at once to get the ping times and player lists etc, how am I supposed to know which server the responces came from and put into the correct slots if i can't rely on source IP. Putting a different IP addess on the packet other than the source address is called spoofing.
There are no sockets when using UDP communication, Sockets are for TCP protocol, UDP is a connection-less protocol.
Things are done differenly for the port, becuase of NAT-translation the source port on a packet can be completely random which is why the server port is defined in the gamespy query in field 8. The ip address is not, that should be reliable.
-
Reply source IP could be ignored if each query was done on separate socket. It's possible, but surely using single socket and checking source address is simpler.
Sockets are used for both UDP and TCP.
OK, so now the question is: in multihomed server case, is it possible to force that the IP seen by the master server when building list is the same as the IP on which game server listens for answering queries? In AA 2.8.5 there was command line option 'multihome=<ip>' and everything worked fine, I don't see such thing in 2.5.
-
No there is not such option.
-
Is there any way aa 2.5 server can be reliably used in multihomed host?
In particular, can I influence, what address is given to the auth/master server?
Also, I see UdpTerminate and UdpRestart messages in the server console - what do they mean?
Netstat shows that:
UDP 0.0.0.0:1716 *:* [aasrv001.exe]
UDP 0.0.0.0:1717 *:* [aaudp001.exe]
UDP 0.0.0.0:1718 *:* [aasrv001.exe]
Is it possible to force aaudp001.exe to bind to specific address instead of 'any'?
-
When I start original 2.5 server.exe with option 'multihome=85.14.85.18', and put IP=85.14.85.18 in server.ini section, i get following situation:
UDP 85.14.85.18:1716 *:*
UDP 85.14.85.18:1717 *:*
Now, I'd like to achieve this in 'assist' setup. How can I do it, and if not, can you help with this?
-
it would require some extensive modification to my system. and i don't really want to do it. For one thing I don't get paid for it and no one makes any donations. and thus far you are the only person who has requested this feature. everyone else seems to be OK.
-
So maybe you shall consider opening up the sources? I definitely would be great for community.
Using your time is the last thing I want to do. Give me access to sources and I make a nice patch for you, which you can then review and accept/reject.
-
Yep its publicly available on sourceforge...
http://sourceforge.net/projects/aa25assist/files/
-
Ooops, sorry, I didn't notice it.
-
hey pit
what about this:
maybe wrong port forwarding with router and nat to your server/workstation?
-
Yes, the part of the problem may also lie there. Unfortunately i'm noob as far as those issues are concerned, so I'd like to eliminate more obvious problems first.
If the server is supposed to be visible at a particular IP (i.e. e.g. that browser rejects query response sent with different source address than expected), then the 1716-1718 sockets must be bind at that address, not at INADDR_ANY (0.0.0.0). After some googling I see that this is typical solution to this problem with other UDP servers (e.g. TFTP).
Also, AA 2.8 and 3.0 worked in this server for years without problems, and the first difference is that they _do_ bind at particular address, not 0.0.0.0. Therefore I assume, that changing binding will most probably solve the problem.
-
Yep its publicly available on sourceforge...
http://sourceforge.net/projects/aa25assist/files/
Thanks again, I'll take a look at this.
Now I have just one more request: can you give some links to any existing descriptions of e.g. protocols, that can be helpful in understanding those sources?
-
There are none, it was all done by reverse engineeing using packet sniffers and such.
-
Looked at log file, all is OK. I don't know why its not working.
Make sure there is nothing else running on the server using the same ports.
Try using different ports like 1816,1817
There are many threads on this forum about this issue to help you.
I had a similar problem after I forwarded port 1718 it worked so I guess you use 1818.
-
http://g.images.memegenerator.net/instances/400x/14712310.jpg
Your input to the topic is very valuable. Same as in the 'honor server + why AA2.5' thread.
-
I don't know what 'D&M' is, but hey, come to my place, and I buy you all you can drink.
-
;) This topic keeps me creepy too:) You can ask at least with teamviewer or smth but not inviting unknow people to ur place;) stranger:P YEH back to topic
-
Johnny, can you upload latest sources to sourceforge? The currently present ones seem to not match the latest binaries.
-
Will do this later, i need to remove the sensitive stuff that could be abused first.
-
Code has now been published on sourceforge.
-
Thanks.
-
And regarding the parts that are removed: which parts of the projects are complete (can be rebuild from sources) and which not? I assume that dedisrv.rbp and aaudp.rbp (the two which comprise dedicated server part) are complete, right?
-
All server side stuff is complete.
-
OK, I finally found some time to go through the server-side code, and add the multihome option. I just made the aaudp.exe to bind at given IP, and passed the "multihome" option to AA server, so that it binds there too. That way all ports 1716-1718 are bound at given address, not "0.0.0.0". And as I suspected, this seems to solve the problem (so I don't understand why you said that it will require "extensive modifications" to your system).
Now, I'd like you to merge my changes into your source. I can't live with my own compiled version, since I use trial version of real studio IDE, and my binaries die after 5 minutes :-D.
How do you want me to give you those changes? Previously I talked about diff-s, but it seems impossible in this shitty binary blob world of realbasic. Oh, there is some option to export to xml, so i could diff this, but it doesn't seem to be easy to merge either. For the moment, I will just describe the needed changes in this thread below.
I would appreciate if you merge this and release new binary quickly - I can't run server until then. Or maybe you could tell me IDE which will build those .rpb without any time limits - then I don't need your new release.
-
Here are the changes. As I said, for the moment I just will try to make a manual diff below, in order to make your merging job easier. As for collors, yellow means context and comment information, red means removed lines, green means added lines. There may be some typos in there, but that's because I had to craft it manually.
[In aaudp.rbp :: App :: Event Handlers :: Run
We bind UDP socket to the IP given in third command line arg (if any)]
UDPs.RouterHops = 255
UDPs.Port = val(args(1))
if UBound(args) >= 3 then
Dim multihomeIp As String
multihomeIp = args(3)
Dim i as Integer
For i = 0 to System.NetworkInterfaceCount - 1
Dim n As NetworkInterface
n = System.GetNetworkInterface(i)
if n.IPAddress = multihomeIp then
UDPs.NetworkInterface = n
end if
Next
end if
UDPs.Connect
[In dedisrv.rbp :: App :: Methods :: setno
We assign number to additional aa25.ini param "multihomeip"]
CASE "colour"
RETURN 28
CASE "multihomeip"
RETURN 29
CASE "processid"
RETURN 98
[In dedisrv.rbp :: App :: Methods :: RunSrv
We propagate multihome IP (if present) to serverx.exe and aaudp.exe]
Dim srvOptions As String
srvOptions = "LAN "+ Filename(map) + " ini=aa25srv.ini log=aa25srv.log"
if settings(29) <> "" then srvOptions = srvOptions + " multihome=" + settings(29)
Dim udpOptions As String
udpOptions = str(srvport+1) + " " + str(srvport+2)
if settings(29) <> "" then udpOptions = udpOptions + " " + settings(29)
if success = true then
Mshell.Execute "aasrv"+settings(98)+".exe LAN "+Filename(map)+" ini=aa25srv.ini log=aa25srv.log"
Mshell.Execute "aasrv"+settings(98)+".exe " + srvOptions
udpx.Execute "aaudp"+settings(98)+".exe " + str(srvport+1) + " " + str(srvport+2)
udpx.Execute "aaudp"+settings(98)+".exe "+ udpOptions
else
Mshell.Execute chr(34)+aahome.child("System").ShellPath+"\aasrv"+settings(98)+".exe"+chr(34)+" LAN "+Filename(map)+" ini=aa25srv.ini log=aa25srv.log"
Mshell.Execute chr(34)+aahome.child("System").ShellPath+"\aasrv"+settings(98)+".exe"+chr(34)+" " + srvOptions
udpx.Execute chr(34)+aahome.child("System").ShellPath+"\aaudp"+settings(98)+".exe"+chr(34)+" " + str(srvport+1) + " " + str(srvport+2)
udpx.Execute chr(34)+aahome.child("System").ShellPath+"\aaudp"+settings(98)+".exe"+chr(34)+" " + udpOptions
end if
SrvRun = true
[In dedisrv.rbp :: aqrtime :: action
We propagate multihome IP (if present) to udp test code]
Dim udpTestIp As String
if app.settings(29) = "" Then udpTestIp = "127.0.0.1" else udpTestIp = app.settings(29)
...
if app.prcnt > 3 then
if not app.UDPtest.IsConnected then app.UDPtest.Connect
app.udptest.Write ("127.0.0.1:"+str(app.SrvPort+1),"aa25ping")
app.udptest.Write (udpTestIp + ":"+str(app.SrvPort+1),"aa25ping")
app.out "Ongoing port test trying"
end if
...
if app.prcnt > 20 then
...
else
app.prcnt = app.prcnt + 1
if not app.UDPtest.IsConnected then app.UDPtest.Connect
app.udptest.Write ("127.0.0.1:"+str(app.SrvPort+1),"aa25ping")
app.udptest.Write (udpTestIp + ":"+str(app.SrvPort+1),"aa25ping")
end if
-
Have you tested this? I seems to me this would break auth comms between armyops and assist becuase they are locked to 127.0.0.1 in the uscripts for security reasons. We cannot have the Uscipt auth module respond to any address other than 127 or external source could send in auth message and do all sorts of things. and if you bind udpqr to external network address it will be ignored by the U script.
-
I started the server, it was visible in browser correctly, and I joined it. Seemed to work ok, but I didn't do any extensive testing due to trial version time limit.
Anyway, the change should be safe, as it only affects those who will set the 'multihomeip' option - the rest works as previously.
-
I checked again: some time after joining there is a message like 'server running in not authorized mode'.
-
One thing that can be done is to add ip checking in .u script if given IP is a local interface. Or maybe just .ini parameter that will be used instead of 127.0.0.1 if given.
What do you propose?
-
As it has been said by major we have enough servers:)
-
Johny, maybe in auth.u, instead of using "127.0.0.1", you could use the IP that 1718 socket is bound to (using GetLocalIP function)? This would work in both normal and multihome case.
-
Yes good idea, I will take a look at this in the next couple of days and build you a new binary... Thanks for the info.
-
I have nothing to contribute other than to say this is really cool to see collaboration between you two :) This will only make the community better.
-
Pit... I have e-mailed you the multihome server binarys for you to test
Good luck.
-
Seems to works OK, i'm authenticated after joning now (oh, and that "server not running in authorized mode" seems to be always present, so it's probably just about this original authentication).
Thanks.
-
Pit, it's cool to have ppl like you around...
I hope more would come, there's just infinite possibilities for this AA, like using mass physics on some crazy ass map.
ps: Hell we need is good people who want to spent their time 4 all of us... ~Johny is god ;).
Keep Cool
-
Hey pit, your polish right? Have you though about making a polish port of 2.5Assist since you have the source?
-
Hey pit, your polish right?
I was waiting for a punchline.
But really, this would be great if people came about with translations that Assist could load. Select language on startup kinda thing. Koden's good for some Italian :)
-
I was waiting for a punchline.
But really, this would be great if people came about with translations that Assist could load. Select language on startup kinda thing. Koden's good for some Italian :)
Uh eh oh? Ciao bella? xD
[youtube]http://www.youtube.com/watch?v=gfxcGenetPU[/youtube]
/kidding :D
i would really like to help if you need someone to translate Assist text to Italian.
-
I lol'd so hard.
-
Hey pit, your polish right? Have you though about making a polish port of 2.5Assist since you have the source?
No, I don't feel like translating.
But when you will have all strings extracted to some external file instead of embedded in sources, I'm sure there will be people willing to translate it.