Code archives/Networking/IP Management
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
PLEASE NOTE: YOU BETTER USE GNET. GNET is based on PHP and is used for the same purpose, but it's much better than this. -------------------------------------------------------- Maybe someone finds this useful. I'm not a Perl Crack and this Script is rather lousy...but it works :) at least on my Machine. It's a new Version, it now uses HTTP 1.1 instead of HTTP 1.0 Tested on WinME, XITAMI Webserver, ActivePerl 5.04 s well as Apache/1.3.12 on Unix, IIS 5 on NT. Please read all Comments! As you maybe already know, Perl can be pitty and Servers are diffrent. There are 3 Files you'll have to select,copy and paste from here: hosted_games.txt (this one has a linefeed (empty line)at the end!!!) list_games.pl the Perlscript net_test.bb the BB-Example on how to use it NOTE: The Technic used in this Perl Script to open the Datafile for Reading, close it and open it for Writing again is not a good idea. I'm now working on a Version which uses a Flag-File to check if another Process is working with the Data-File and to wait in a Loop if required. IF IT DON'T WORKS: There are several Reasons for it could fail. Here is what you should check first: Does the Server run other Script? Try to call this one: #!/usr/bin/perl -w print "Content-type: text/html\n\n"; print "Your IP: $ENV{'REMOTE_ADDR'} <br>"; print "Time: $^T"; print "</html>"; call this as 'test.pl' in a Webbrowser with the url http://www.yourserver.com/cgi-bin/test.pl and it sould tell you IP and Time. Refresh, time should be diffrent now. If this works then it seems your Server works ok. (I had Servers which cannot tell IP, cannot say Time or cannot open Files) Now surf to http://www.yourserver.com/cgi-bin/list_games.pl?action=list The Browser should now list the Games (there is 1 Dummy Game in the list per default). The Length of the Header isn't the same on all Servers so it is up to you, to help Blitz, to read all information from the TCP Stream. The Format: Host 127.1.2.45 (Game Host IP) Capture the Flag (Game Topic) 10 3274568235 (Max. Players and last Game Update Time) nick of Host nick of Player2 (if somebody has joined) nick of Player3 (if somebody has joined) (empty line) Host 190.10.122.87 (Game Host IP) Nothin (Game Topic) 10 3274568455 (Max. Players and last Game Update Time) nick of Host nick of Player2 (if somebody has joined) nick of Player3 (if somebody has joined) nick of Player4 (if somebody has joined) nick of Player5 (if somebody has joined) (empty line) >>>> Servertime: 23492374928 Make shure Blitz will find the Line starting with ">>>>" for the Servertime I really got to do some Bugfixes in the Perlscript too, I'll update this soon. | |||||
file hosted_games.txt cut here.............................. Host 65464.64646 127.0.0.1 This is a Dummy Host 10 102175228100 Don't try to connect! cut here.............................. file list_games.pl cut here.............................. #!/usr/bin/perl -w ########################################################################################### # # ************************************ # Net Test for CSP Games IP Management # ************************************ # # Note: You should unrem all 'flock'-Commands if possible!!!! I had to deactivate # them cause it didn't work on WinME, but the flocks are needed to prevent multiple # Clients writing into the same File at the same Time. This could result in complete # Loss of the Game List Content. # # On Unix you'll have to chmod the file 'hosted_games.txt' as 666 and this Script as 755. # On Windows you'll have to set the file 'hosted_games.txt' properties to 'hidden'. # # Well, this Script is the work of a beginner, so please don't worry. # # Be carefull when you edit this Script: the Order of the Values can be messed up easily. # ########################################################################################### $Daten=$ENV{'QUERY_STRING'}; $host_timeout=180; # timeout for mute Hosts ins Seconds (must be higher than in BB) # use 5.004; # maybe you need these 2 lines for flock # use Fcntl qw(:DEFAULT :flock); print "Content-type: text/html\n\n"; print "<html><br>\n"; $hpass=$^T * $ENV{'REMOTE_ADDR'}; # generate password $count=0; $hisip= $ENV{'REMOTE_ADDR'}; # get clients IP ## Split Parameters found in Adressline $i=0; @vliste=(""); @Formularfelder = split(/&/, $Daten); foreach $Feld (@Formularfelder) { ($name, $value) = split(/=/, $Feld); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/<!--(.|\n)*-->//g; $Formular{$name} = $name; $Formular{$value} = $value; $vliste[$i]=$value; $i++; } $anzahl_paras=$i; #------------------------------------------------------------------------------------ # REQUEST FOR HOSTED GAMES LIST #------------------------------------------------------------------------------------ # This will send a list to the client. It will also delete Hosts which have a # Timeout. It must be accessed with http GET as follows: # http://127.0.0.1/cgi-bin/list_games.pl?action=list if($vliste[0] eq "list") #read hostlist from disk { $i=0; @Zeilen = (""); @Zeilen2 = (""); open(NICKLIST, "<hosted_games.txt") || die "File not found\n"; # flock(NICKLIST,1) or die "Cannot LOCK file: $!"; while(<NICKLIST>) { push(@Zeilen,$_); $i++; } # flock(NICKLIST,8) or die "Cannot UNLOCK file: $!"; close(NICKLIST); $anzahl=$i+1; $i2=0; $flag=0; $upd=0; for($i=1;$i<$anzahl;$i++) { $check=$Zeilen[$i]; chomp($check); if(length($check) >= 5) { $check=substr($check,0,4); if($check eq "Host") # check for timeout of a Host { $lastping=$Zeilen[$i+3]; chomp($lastping); $lastpingl=length($lastping); $wo = rindex($lastping," "); $otime=substr($lastping,$wo,$lastpingl-$wo); $sec=($^T-$otime); # secs since last info-update by host $omax=substr($lastping,0,$wo); $otopic=$Zeilen[$i+2]; chomp($otopic); if($sec > $host_timeout) # timeout! delete host from list { $upd=1; $flag=1; } } } if($flag == 0) { $Zeilen2[$i2]=$Zeilen[$i]; if($check eq "Host") {print "$check\n";} else {print $Zeilen2[$i2];} $i2++; } if($check eq "") # check for last line of a Game Block { $flag=0; } } # decide if the file must be updated if($upd == 1) { $anzahl=$i2-1; # open games list to overwrite open(NICKLIST, ">hosted_games.txt") || die "File not found\n"; # flock(NICKLIST,2) or die "Cannot LOCK"; for($i=0;$i<$anzahl;$i++) { print NICKLIST $Zeilen2[$i]; } # flock(NICKLIST,8) or die "Cannot UNLOCK"; close(NICKLIST); } } #------------------------------------------------------------------------------------ # CLIENT WANTS TO BE A NEW HOST #------------------------------------------------------------------------------------ # The Client chooses to be a new Host. Accessed ny http GET as follows: #http://127.0.0.1/cgi-bin/list_games.pl?action=nuhost&nick=harry&topic=Capture%20flag!&max=10 # action 0 nick 1 topic 2 max players 3 if($vliste[0] eq "nuhost") { $i=0; @Zeilen = (""); open(NICKLIST, "<hosted_games.txt") || die "File not found\n"; # flock(NICKLIST,1) or die "Cannot LOCK file: $!"; while(<NICKLIST>) { push(@Zeilen,$_); # print $Zeilen[$i],"<br>\n"; $i++; } # flock(NICKLIST,8) or die "Cannot LOCK file: $!"; close(NICKLIST); $anzahl=$i+1; $ngames=0; $double=0; # check if IP is already hosting for($i=1;$i<$anzahl;$i++) { $weniger=length($Zeilen[$i])-1; chomp($Zeilen[$i]); # print $Zeilen[$i],"<br>\n"; if($weniger >= 5) { $check=substr($Zeilen[$i],0,4); if($check eq "Host") { $ngames++; if(substr($Zeilen[$i+1],0,length($Zeilen[$i+1])-1) eq $hisip) { $double=$i+1; } } } } if($double != 0) { print "Error 1 :IP is already hosting"; # IP is already hosting. } else # yes, a legal new Host { # open games list to overwrite open(NICKLIST, ">hosted_games.txt") || die "File not found\n"; # flock(NICKLIST,2) or die "Cannot LOCK"; for($i=1;$i<$anzahl;$i++) { print NICKLIST $Zeilen[$i],"\n"; # $imerk=$i; } print NICKLIST "\n"; # line feed print NICKLIST "Host $hpass\n"; # "Host" Label print NICKLIST $ENV{'REMOTE_ADDR'},"\n"; # New Host IP print NICKLIST "$vliste[2]\n"; # Topic print NICKLIST "$vliste[3] $^T\n"; # Max number of Players if(($vliste[1] eq "") || ($vliste[1] eq "Host") || ($vliste[1] eq "e_o")) { print NICKLIST "noname",$anzahl,"\n";} # (legalized) Nick of Host else { print NICKLIST "$vliste[1]\n"; } # Nick of Host # flock(NICKLIST,8) or die "Cannot UNLOCK"; close(NICKLIST); print "Welcome on CSP GS\n"; # Say hi to host print "$hpass\n"; # Send unique Password to host } # eo else ok nu host } # eo nuhost #------------------------------------------------------------------------------------ # A RUNNING GAME HOST SENDED UPDATED INFO #------------------------------------------------------------------------------------ # Game Hosts request to update its Games Information in the list. Accessed by http GET: # http://127.0.0.1/cgi-bin/list_games.pl?action=update&pass=7777777&max=12&n1=harry&n2=suzi&n3=rocky&n4=e_o # action=0 password=1 max.players=2 all nicks (host first) "e_o"= end mark if($vliste[0] eq "update") { $i=0; @Zeilen = (""); open(NICKLIST, "<hosted_games.txt") || die "File not found\n"; # flock(NICKLIST,1) or die "Cannot LOCK file: $!"; while(<NICKLIST>) { push(@Zeilen,$_); # print $Zeilen[$i],"<br>\n"; $i++; } # flock(NICKLIST,8) or die "Cannot LOCK file: $!"; close(NICKLIST); $anzahl=$i+1; $ngames=0; $double=0; # check if IP is already hosting $lastping=""; $otime=""; $lastpingl=0; $wo=0; for($i=1;$i<$anzahl;$i++) { $weniger=length($Zeilen[$i])-1; chomp($Zeilen[$i]); # print $Zeilen[$i],"<br>\n"; if($weniger >= 5) { $check=substr($Zeilen[$i],0,4); if($check eq "Host") { $check2=substr($Zeilen[$i],5,$weniger-5); # print "<b>",$check2,"</b><br>"; $ngames++; if($vliste[1] eq $check2) # compare passwords { $double=$i+1; # print "<h1>Pass found!</h1>"; # Matching Password found $lastping=$Zeilen[$i+3]; chomp($lastping); $lastpingl=length($lastping); $wo = rindex($lastping," "); $otime=substr($lastping,$wo,$lastpingl-$wo); $omax=substr($lastping,0,$wo); $otopic=$Zeilen[$i+2]; chomp($otopic); } } } } if($double == 0) { print "Error 2 :Incorrect Password."; } else # yes, a legal Host is updating { $i=1; $i2=1; # sort out old for($i=1;$i<$double-1;$i++) # copy first block { $Zeilen2[$i2]=$Zeilen[$i]; $i2++; } # $i2=$i; $i++; while($Zeilen[$i] ne "") # ignore old Info { $i++; } $imerk=$i+1; if($anzahl>$imerk) { for($i=$imerk;$i<$anzahl;$i++) # add rest block { $Zeilen2[$i2]=$Zeilen[$i]; $i2++; } } # # add updated Infos $Zeilen2[$i2]="Host ".$vliste[1]; $i2++; $Zeilen2[$i2]=$ENV{'REMOTE_ADDR'}; $i2++; $Zeilen2[$i2]=$otopic; $i2++; $i3=2; $vliste[$i3]=$vliste[$i3]." $^T"; # Add timestamp while($vliste[$i3] ne "e_o") # seek end of of updateinfo. { $Zeilen2[$i2]=$vliste[$i3]; $i2++; $i3++; } $anzahl=$i2; # overwrite List File with updated Version open(NICKLIST, ">hosted_games.txt") || die "File not found\n"; # flock(NICKLIST,2) or die "Cannot LOCK"; for($i=1;$i<$anzahl;$i++) { print NICKLIST $Zeilen2[$i],"\n"; } # flock(NICKLIST,8) or die "Cannot UNLOCK"; close(NICKLIST); print "Thanks for updating on CSP GS\n"; } # eo else ok nu host } # eo nuhost #------------------------------------------------------------------------------------ # RUNNING GAME HOST WANTS TO QUIT #------------------------------------------------------------------------------------ # This will remove your Host from the List. It must be accessed with http GET as follows: # http://127.0.0.1/cgi-bin/list_games.pl?action=byebye&pass=7777777 if($vliste[0] eq "byebye") #read hostlist from disk { $i=0; @Zeilen = (""); @Zeilen2 = (""); open(NICKLIST, "<hosted_games.txt") || die "File not found\n"; # flock(NICKLIST,1) or die "Cannot LOCK file: $!"; while(<NICKLIST>) { push(@Zeilen,$_); $i++; } # flock(NICKLIST,8) or die "Cannot UNLOCK file: $!"; close(NICKLIST); $anzahl=$i+1; $i2=0; $flag=0; $upd=0; for($i=1;$i<$anzahl;$i++) { $check=$Zeilen[$i]; chomp($check); if(length($check) >= 5) { $check=substr($check,0,4); if($check eq "Host") # check for timeout of a Host { $lpass=substr($Zeilen[$i],5,length($Zeilen[$i])-6); if($lpass eq $vliste[1]) # password found, game will be removed from list { $upd=1; $flag=1; } } } if($flag == 0) { $Zeilen2[$i2]=$Zeilen[$i]; $i2++; } if($check eq "") # check for last line of a Game Block { $flag=0; } } # decide if the file must be updated if($upd == 1) { $anzahl=$i2-1; # open games list to overwrite open(NICKLIST, ">hosted_games.txt") || die "File not found\n"; # flock(NICKLIST,2) or die "Cannot LOCK"; for($i=0;$i<$anzahl;$i++) { print NICKLIST $Zeilen2[$i]; } # flock(NICKLIST,8) or die "Cannot UNLOCK"; close(NICKLIST); print "byebye!"; } } #------------------------------------------------------------------------------------ print "\n>>>>Server Time: $^T\n"; print "<br></html>\n"; cut here.............................. file net_test.bb cut here.............................. ; ************************************ ; Net Test for CSP Games IP Management ; ************************************ ; ; Usually People have to know a Host IP to join a Game. This Program will help to keep ; a List of active Game Hosts on a Web Server with a static Adress and let the Player choose ; a running Game or to start a new Game as a Host and add his IP to the List. ; ; The following Program is used to interact with a webserver which hosts the ; Perl-Script '/cgi-bin/list_games.pl'. The file 'hosted_games.txt' must be in the cgi-bin folder ; of the server. Note: this will not work without a server which is hosting the Script. ; This Program can still be optimized a lot. Error Handling, GFX and so on are very poor ATM. ; However, if there's a Server then it should work. READ THE COMMENTS IN 'list_games.pl' !!! ; ; There is a maximum of about 25 Games with 25 Players each because of this Menu ; and maybe because of limited Bandwith of your Web-Server. ; Nicknames and Topics shouldn't be too long. ; ; This Sources are designed for Use with BlitzPlay, the UDP-Network-Library for BlitzBasic. ; Visit www.blitzbasic.com if you wonder what BlitzBasic is. ; ; How it works: ; ************* ; game_list will download a list of Game-Host IPs ; game_nuhost will write your IP to the List on the Server ; game_update will update your Game with the Players Names etc. in the List on the Server ; game_quit will remove your Game-Hosts IP from the IP Management Server ; ; usually, when a Host want's to quit, the Host should chanche to the next Player. This Script ; and Program is capable of Handling such a Host Takeover. But the new Host must know the ; Password. (password$) ; ; Tested on WinME, XITAMI Webserver, ActivePerl 5.04 s well as Apache/1.3.12 on Unix ; 2002 CSP ip$="http://www.yourserver.com" ; Enter the IP-Management Servers IP or Hostname here port=80 ; Enter the IP-Management Servers HTTP Port here (usually 80) list_upd_time=160000 ; Intervall Updates IP Management Server in ms. (should be lower than the one in the Perl Script) ;----------------------------------------------------------------------------------- Graphics3D 800,600,16,2 SetBuffer BackBuffer() Dim io$(1000) ; Buffer for tcp i/o .refresh Global status$="" Global iocount=0 ; request for hosted games list AppTitle "Connecting..." game_list$(ip$,port) AppTitle status$ For i=0 To iocount ; check Start of Content Information If io$(i)="Host" start_content=i Exit EndIf Next If iocount>start_content ; check integrity If io$(start_content)<>"Host" errexit("Error: The received File isn't a proper Games List") EndIf Else errexit("Error: The received File isn't a proper Games List") EndIf ngames=0 ; count games For i=0 To iocount If io$(i)="Host" ngames=ngames+1 EndIf Next If ngames=0 errexit("Error: No Games in List") ; one Dummy-Game should always be there EndIf Dim nmembers(ngames) ; Number of Players for each Game Dim games(ngames) ; Index of IP in io-Buffer Dim maxmembers$(ngames) ; Maximum Players per Game Dim topic$(ngames) ; Topics for each Game Dim timestamp$(ngames) ; Last ping (secs since 1970) for each Game Dim nicks$(1000) ; nicks for each Game zz=0 For i=0 To iocount ; sort stuff If io$(i)="Host" games(zz)=i+1 topic$(zz)=io$(i+2) maxmembers$(zz)=io$(i+3) For k=1 To Len(maxmembers$(zz)) If Mid$(maxmembers$(zz),k,1)=" " cuthere=k Exit EndIf Next maxmembers$(zz)=Left$(maxmembers$(zz),cuthere) timestamp$(zz)=io$(i+3) timestamp$(zz)=Right$(timestamp$(zz),Len(timestamp$(zz))-(cuthere+3)) zz2=0 While io$(i+zz2+2)<>"" And zz2<1000 zz2=zz2+1 Wend nmembers(zz)=zz2 If zz2>mostmembers Then mostmembers=zz2 zz=zz+1 EndIf Next Dim allmembers$(ngames,mostmembers) For i=0 To ngames For j=0 To nmembers(i) allmembers(i,j)=io$(games(i)+3+j) Next Next servertime$="101010" For i=iocount To 0 Step -1 If Len(io$(i))>4 If Left$(io$(i),4)=">>>>" servertime$=io$(i) EndIf EndIf Next For k=Len(servertime$) To 1 Step -1 If Mid$(servertime$,k,1)=" " cuthere=k servertime$=Right$(servertime$,Len(servertime$)-(cuthere+3)) Exit EndIf Next ; ________________________________________ SELECT HOST (or create new)___________________________________ ip_choice$="" nuhost$="" While KeyDown(1)=0 And ip_choice$="" And nuhost$="" Cls Color 0,0,50 For i=0 To 600 Step 12 Rect 0,i+1,800,12,0 Next Color 0,0,255 myline=MouseY()/12 For i=0 To ngames-1 Text 20,i*12,topic$(i)+" ("+io$(games(i))+") Hosted by: "+allmembers(i,0) Next Color 255,255,0 Text 20,ngames*12,"Host a new Game" Color 255,255,255 Text 20,(1+ngames)*12,"Refresh" If myline>=0 And myline< ngames i=myline Color 0,255,0 Text 500,180,topic(i) Color 255,255,255 Text 500,192,"IP: "+io$(games(i)) Text 500,204,"Maximum of Players: "+maxmembers$(i) Text 500,216,"Last Livesign: "+(Int(servertime$)-Int(timestamp$(i)))+" Secs" Color 255,0,0 For j=0 To nmembers(i)-3 Text 500,240+j*12,allmembers(i,j) Next Color 255,255,255 If MouseDown(1)=1 ip_choice$=io$(games(i)) EndIf EndIf If myline= ngames Color 0,255,0 Text 500,180,"Click to Host a new Game" If MouseDown(1)=1 nuhost$="yes" EndIf EndIf If myline= ngames+1 Color 0,255,0 Text 500,180,"Click to refresh Games List" If MouseDown(1)=1 Goto refresh EndIf EndIf Flip() Wend hosting=0 joining=0 ; ---------------------------------if JOIN -------------------------------- If ip_choice$<>"" Cls Text 20,20,"You decided to join a running Game" Text 20,40,ip_choice$ Flip WaitKey() joining=1 EndIf ; ---------------------------------if NEW HOST -------------------------------- If nuhost$<>"" And ngames<26 Cls Text 20,20,"You decided to host a new Game" Flip Locate 20,40 nu_topic$=Input$("Topic? (max.20 Chrs.) ") If Len(nu_topic$)>20 Then nu_topic$=Left$(nu_topic$,20) Locate 20,60 nu_nick$=Input$("Your Nickname? ") If Len(nu_nick$)>16 Then nu_nick$=Left$(nu_nick$,16) Locate 20,80 nu_max$=Input$("Max. Number of Players? ") nmax=nu_max$ If nmax<2 Then nmax=2 If nmax>100 Then nmax=100 nu_topic$=url_encode$(nu_topic$) nu_nick$=url_encode$(nu_nick$) Print "Trying to establish Host on Games Server..." AppTitle "Connecting..." game_nuhost(ip$,port,nu_topic$,nu_nick$,nmax) If iocount>start_content+1 password$=io$(start_content+1) everr$=io$(start_content) hosting=1 EndIf AppTitle status$ If Len(everr$)>=5 If Left$(everr$,5)="Error" AppTitle everr$ hosting=0 EndIf EndIf ; Some Test-Nicks for our Host - instead use your Games Nicks !!! nicks$(0)=nu_nick$ nicks$(1)=url_encode$("Superman") nicks$(2)=url_encode$("Obi van") nicks$(3)=url_encode$("Ronin") nicks$(4)=url_encode$("Morpheus") nicks$(5)=url_encode$("Gorbi") nnicks=5 ; number of nicks -1 (important!) EndIf ; Add your Game-Connection Initialisation here () While KeyDown(1)<>0:VWait:Wend ; ---------------------------------GAME------------------------------- tt=MilliSecs()+list_upd_time While KeyDown(1)=0 Cls Text 200,200,"I am a Game :). Hosting: "+hosting+" Joining: "+joining+"." ; ; Here is your Game, doing all kinds of stuff ; If hosting=1 If MilliSecs()>tt ; update Game List frequently to remain in the Host List AND after Chanches. game_update(ip$,port,password$,nmax,nnicks) tt=MilliSecs()+list_upd_time EndIf EndIf Flip Wend If hosting=1 game_quit(ip$,port,password$) ; do this only when none of the other Players is the new Host EndIf End ; Please note: The Host is using a Password to update the List on the IP Management Server. ; If the Host disconnects and a Client will continue Hosting then the old Host should tell ; the new Host the Password before disconnecting to enable the new Host to do the Update Job. ; You can also tell the Password to the next Client from beginning on - to make shure the ; Game can be continued even if the old Host was disconnected by accident. ; You have to update your Nick List and the Variable 'nnicks'(number of nicks) before you ; call'game_update()'. The first Nick in the List should be the Hosts Nickname. ;------------------------------------------------------------------------------------ ; REQUEST FOR HOSTED GAMES IP-LIST ;------------------------------------------------------------------------------------ ; This will ask the IP Management Server for a list. It will also force the Server to delete ; Hosts which have a Timeout. It is accessed with http GET as follows: ; http://127.0.0.1/cgi-bin/list_games.pl?action=list Function game_list$(ip$,port) tcp=OpenTCPStream(ip$,port ) If tcp Status$="Error: Connection to "+ip$+" failed" WriteLine tcp,"GET /cgi-bin/list_games.pl?action=list HTTP/1.1" WriteLine tcp,"Host: krokant.tripod.com" WriteLine tcp,"User-Agent: BlitzBrowser" WriteLine tcp,"Accept: */*" WriteLine tcp,"" If Eof(tcp) Status$="Error: Connection "+ip$+" does not answer" EndIf For i=0 To 1000 io$(i)="" Next iocount=0 wr=WriteFile("rappi.txt") While Not Eof(tcp) io$(iocount)= ReadLine$( tcp ) Print io$(iocount) WriteLine wr,io$(iocount) iocount=iocount+1 Wend CloseFile wr If Eof(tcp)=1 Then Status$="Connected" Else Status$="Error: EOF not reached" EndIf CloseTCPStream tcp Else Status$="Error: Connection to "+ip$+" failed" EndIf Return status$ End Function ;------------------------------------------------------------------------------------ ; BB-CLIENT WANTS TO BE A NEW BB-HOST ;------------------------------------------------------------------------------------ ; You choosed to be a New Host. Accessed by http GET as follows: ; http://127.0.0.1/cgi-bin/list_games.pl?action=nuhost&nick=harry&topic=Capture%20flag!&max=10 ; action 0 nick 1 topic 2 max players 3 Function game_nuhost(ip$,port,lnu_topic$,lnu_nick$,lnmax) tcp=OpenTCPStream(ip$,port ) If tcp Status$="Error: Connection to "+ip$+" failed" WriteLine tcp,"GET /cgi-bin/list_games.pl?action=nuhost&nick="+lnu_nick$+"&topic="+lnu_topic$+"&max="+Str$(lnmax)+" HTTP/1.1" WriteLine tcp,"Host: krokant.tripod.com" WriteLine tcp,"User-Agent: BlitzBrowser" WriteLine tcp,"Accept: */*" WriteLine tcp,"" If Eof(tcp) Status$="Error: Connection "+ip$+" does not answer" EndIf For i=0 To 1000 io$(i)="" Next iocount=0 While Not Eof(tcp) io$(iocount)= ReadLine$( tcp ) iocount=iocount+1 Wend If Eof(tcp)=1 Then Status$="Connected" Else Status$="Error: EOF not reached" EndIf CloseTCPStream tcp Else Status$="Error: Connection to "+ip$+" failed" If iocount>0 EndIf EndIf Return status$ End Function ;------------------------------------------------------------------------------------ ; SEND UPDATED INFO TO IP MANAGEMENT SERVER ;------------------------------------------------------------------------------------ ; Your Games Hosts request To update its Games Information in the list od the Server. Accessed ; by http GET: ; http://127.0.0.1/cgi-bin/list_games.pl?action=update&pass=7777777&max=12&n1=harry&n2=suzi&n3=rocky&n4=e_o ; action=0 password=1 max.players=2 all nicks (host First) "e_o"= End mark Function game_update(ip$,port,pw$,lnmax,nnicks) tcp=OpenTCPStream(ip$,port ) If tcp allnicks$="" ; assemble all nicks + end-label For i=0 To nnicks allnicks$=allnicks$+"&n"+Str$(1+i)+"="+nicks$(i) Next allnicks$=allnicks$+"&n"+Str$(1+i)+"="+"e_o" Status$="Error: Connection to "+ip$+" failed" WriteLine tcp,"GET /cgi-bin/list_games.pl?action=update&pass="+pw$+"&max="+Str$(lnmax)+allnicks$+" HTTP/1.1" WriteLine tcp,"Host: krokant.tripod.com" WriteLine tcp,"User-Agent: BlitzBrowser" WriteLine tcp,"Accept: */*" WriteLine tcp,"" If Eof(tcp) Status$="Error: Connection "+ip$+" does not answer" EndIf For i=0 To 1000 io$(i)="" Next iocount=0 While Not Eof(tcp) io$(iocount)= ReadLine$( tcp ) iocount=iocount+1 Wend If Eof(tcp)=1 Then Status$="Connected" Else Status$="Error: EOF not reached" EndIf CloseTCPStream tcp Else Status$="Error: Connection to "+ip$+" failed" EndIf Return status$ End Function ;------------------------------------------------------------------------------------ ; QUIT GAME, REMOVE HOST FROM LIST ;------------------------------------------------------------------------------------ ; Your Games Hosts Request to be removed from the Server List. Accessed by http GET: ; http://127.0.0.1/cgi-bin/list_games.pl?action=byebye&pass=7777777 ; action=0 password=1 Function game_quit(ip$,port,pw$) tcp=OpenTCPStream(ip$,port) If tcp Status$="Error: Connection to "+ip$+" failed" WriteLine tcp,"GET /cgi-bin/list_games.pl?action=byebye&pass="+pw$+" HTTP/1.1" WriteLine tcp,"Host: krokant.tripod.com" WriteLine tcp,"User-Agent: BlitzBrowser" WriteLine tcp,"Accept: */*" WriteLine tcp,"" If Eof(tcp) Status$="Error: Connection "+ip$+" does not answer" EndIf For i=0 To 1000 io$(i)="" Next iocount=0 While Not Eof(tcp) io$(iocount)= ReadLine$( tcp ) iocount=iocount+1 Wend If Eof(tcp)=1 Then Status$="Disconnected successfully" Else Status$="Error: EOF not reached" EndIf CloseTCPStream tcp Else Status$="Error: Disconnection from "+ip$+" failed" EndIf Return status$ End Function ; ---------------------------------------------------------------------------- ; this will End Program with an Errormessage: Function errexit(err$) ; Cls Print err$ Flip WaitKey() End End Function ; ---------------------------------------------------------------------------- Function url_encode$(t$) tem$="" For i=1 To Len(t$) a=Asc(Mid$(t$,i,1)) If a = 32 tem$=tem$+"+" Goto my_end_select EndIf If (a<48)Or(a>57 And a<64)Or((a>=91) And (a<=96))Or(a>=123) tem$=tem$+"%"+Right$(Hex$(a),2) Goto my_end_select EndIf tem$=tem$+Chr$(a) .my_end_select Next Return tem$ End Function ; ---------------------------------------------------------------------------- ; END OF TEST IP MANAGEMENT ; ----------------------------------------------------------------------------cut here.............................. |
Comments
None.
Code Archives Forum