+++ /dev/null
-program lcoretest;\r
-\r
-uses\r
- lcore,\r
- lsocket,\r
- {$ifdef win32}\r
- lcorewsaasyncselect in 'lcorewsaasyncselect.pas',\r
- {$else}\r
- lcoreselect,\r
- {$endif}\r
- dnsasync,\r
- binipstuff,\r
- dnssync;\r
-{$ifdef win32}\r
- {$R *.RES}\r
-{$endif}\r
-\r
-type\r
- tsc=class\r
- procedure sessionavailable(sender: tobject;error : word);\r
- procedure dataavailable(sender: tobject;error : word);\r
- procedure sessionconnected(sender: tobject;error : word);\r
- procedure taskrun(wparam,lparam:longint);\r
- procedure timehandler(sender:tobject);\r
- procedure dnsrequestdone(sender:tobject;error : word);\r
- procedure sessionclosed(sender:tobject;error : word);\r
- end;\r
-var\r
- listensocket : tlsocket;\r
- serversocket : tlsocket;\r
- clientsocket : tlsocket;\r
- sc : tsc;\r
- task : tltask;\r
-procedure tsc.sessionavailable(sender: tobject;error : word);\r
-begin\r
- writeln('received connection');\r
- serversocket.dup(listensocket.accept);\r
-end;\r
-\r
-var\r
- receivebuf : string;\r
- receivecount : integer;\r
-procedure tsc.dataavailable(sender: tobject;error : word);\r
-var\r
- receiveddata : string;\r
- receivedon : string;\r
-begin\r
- receiveddata := tlsocket(sender).receivestr;\r
- if sender=clientsocket then begin\r
- receivedon := 'client socket';\r
- end else begin\r
- receivedon := 'server socket';\r
- end;\r
- writeln('received data '+receiveddata+' on '+receivedon);\r
- if sender=serversocket then begin\r
- receivebuf := receivebuf+receiveddata;\r
- end;\r
- if receivebuf = 'hello world' then begin\r
- receivebuf := '';\r
- writeln('received hello world creating task');\r
- task := tltask.create(sc.taskrun,nil,0,0);\r
- end;\r
- receivecount := receivecount +1;\r
- if receivecount >50 then begin\r
- writeln('received over 50 bits of data, pausing to let the operator take a look');\r
- readln;\r
- receivecount := 0;\r
- end;\r
-\r
-end;\r
-\r
-procedure tsc.sessionconnected(sender: tobject;error : word);\r
-begin\r
- if error=0 then begin\r
- writeln('session is connected');\r
- if clientsocket.addr = '127.0.0.1' then begin\r
- clientsocket.sendstr('hello world');\r
- end else begin\r
- clientsocket.sendstr('get /'#13#10#13#10);\r
- end;\r
- end else begin\r
- writeln('connect failed');\r
- end;\r
-end;\r
-\r
-var\r
- das : tdnsasync;\r
-\r
-procedure tsc.taskrun(wparam,lparam:longint);\r
-var\r
- tempbinip : tbinip;\r
- dummy : integer;\r
-begin\r
- writeln('task ran');\r
- writeln('closing client socket');\r
- clientsocket.close;\r
-\r
- writeln('looking up www.kame.net using dnsasync');\r
- das := tdnsasync.Create(nil);\r
- das.onrequestdone := sc.dnsrequestdone;\r
- das.forwardfamily := af_inet6;
- das.forwardlookup('www.kame.net');\r
-end;\r
-\r
-procedure tsc.dnsrequestdone(sender:tobject;error : word);\r
-begin\r
- writeln('www.kame.net resolved to '+das.dnsresult+' connecting client socket there');\r
- clientsocket.addr := das.dnsresult;\r
- clientsocket.port := '80';\r
- clientsocket.connect;\r
- das.free;\r
-end;\r
-\r
-procedure tsc.timehandler(sender:tobject);\r
-begin\r
- //writeln('got timer event');\r
-end;\r
-procedure tsc.sessionclosed(sender:tobject;error : word);\r
-begin\r
- Writeln('session closed with error ',error);\r
-end;\r
-var\r
- timer : tltimer;\r
- ipbin : tbinip;\r
- dummy : integer;\r
-begin\r
- ipbin := forwardlookup('invalid.domain',5);\r
- writeln(ipbintostr(ipbin));\r
-\r
- ipbin := forwardlookup('p10link.net',5);\r
- writeln(ipbintostr(ipbin));\r
-\r
- ipstrtobin('80.68.89.68',ipbin);\r
- writeln('80.68.89.68 reverses to '+reverselookup(ipbin,5));\r
-\r
- ipstrtobin('2001:200::8002:203:47ff:fea5:3085',ipbin);\r
- writeln('2001:200::8002:203:47ff:fea5:3085 reverses to '+reverselookup(ipbin,5));\r
- writeln('creating and setting up listen socket');\r
- listensocket := tlsocket.create(nil);\r
- listensocket.addr := '0.0.0.0';\r
- listensocket.port := '12345';\r
- listensocket.onsessionavailable := sc.sessionavailable;\r
- writeln('listening');\r
- listensocket.listen;\r
- writeln('listen socket is number ', listensocket.fdhandlein);\r
- writeln('creating and setting up server socket');\r
- serversocket := tlsocket.create(nil);\r
- serversocket.ondataavailable := sc.dataavailable;\r
- writeln('creating and setting up client socket');\r
- clientsocket := tlsocket.create(nil);\r
- clientsocket.addr := {'::1';}'127.0.0.1';\r
- clientsocket.port := '12345';\r
- clientsocket.onsessionconnected := sc.sessionconnected;\r
- clientsocket.ondataAvailable := sc.dataavailable;\r
- clientsocket.onsessionclosed := sc.sessionclosed;\r
- writeln('connecting');\r
- clientsocket.connect;\r
- writeln('client socket is number ',clientsocket.fdhandlein);\r
- writeln('creating and setting up timer');\r
- timer := tltimer.create(nil);\r
- timer.interval := 1000;\r
- timer.ontimer := sc.timehandler;\r
- timer.enabled := true;\r
- writeln('entering message loop');\r
- messageloop;\r
- writeln('exiting cleanly');\r
-end.\r