add license header to lmessages.pas
[lcore.git] / lcore.pas
index 30e9c09dc9d77e5f20f1f6fa8883a82fafff4051..99e633974383a075aa99c86854c3d6cb6b365bba 100755 (executable)
--- a/lcore.pas
+++ b/lcore.pas
@@ -35,7 +35,14 @@ interface
 \r
 \r
   const\r
 \r
 \r
   const\r
-    receivebufsize=1460;\r
+    {how this number is made up:\r
+    - ethernet: MTU 1500\r
+    - be safe for either "ethernet v1" or "PPPoE", both take 8 bytes\r
+    - IPv6 header: 40 bytes (IPv4 is 20)\r
+    - TCP/UDP header: 20 bytes\r
+    }\r
+    packetbasesize = 1432;\r
+    receivebufsize=packetbasesize*8;\r
 \r
   var\r
     absoloutemaxs:integer=0;\r
 \r
   var\r
     absoloutemaxs:integer=0;\r
@@ -99,6 +106,7 @@ interface
       onfdwrite           : procedure (Sender: TObject; Error: word) of object; //added for bewarehttpd\r
       lasterror:integer;\r
       destroying:boolean;\r
       onfdwrite           : procedure (Sender: TObject; Error: word) of object; //added for bewarehttpd\r
       lasterror:integer;\r
       destroying:boolean;\r
+      recvbufsize:integer;\r
       function receivestr:string; virtual;\r
       procedure close;\r
       procedure abort;\r
       function receivestr:string; virtual;\r
       procedure close;\r
       procedure abort;\r
@@ -120,7 +128,7 @@ interface
 \r
       //procedure messageloop;\r
       function Receive(Buf:Pointer;BufSize:integer):integer; virtual;\r
 \r
       //procedure messageloop;\r
       function Receive(Buf:Pointer;BufSize:integer):integer; virtual;\r
-      procedure flush;virtual;{$ifdef win32} abstract;{$endif}\r
+      procedure flush;virtual;\r
       procedure dodatasent(wparam,lparam:longint);\r
       procedure doreceiveloop(wparam,lparam:longint);\r
       procedure sinkdata(sender:tobject;error:word);\r
       procedure dodatasent(wparam,lparam:longint);\r
       procedure doreceiveloop(wparam,lparam:longint);\r
       procedure sinkdata(sender:tobject;error:word);\r
@@ -489,7 +497,7 @@ var
 begin\r
   if state <> wsconnected then exit;\r
 \r
 begin\r
   if state <> wsconnected then exit;\r
 \r
-  lensent := sendq.get(data,2920);\r
+  lensent := sendq.get(data,packetbasesize*2);\r
   if assigned(data) then result := myfdwrite(fdhandleout,data^,lensent) else result := 0;\r
 \r
   if result = -1 then lensent := 0 else lensent := result;\r
   if assigned(data) then result := myfdwrite(fdhandleout,data^,lensent) else result := 0;\r
 \r
   if result = -1 then lensent := 0 else lensent := result;\r
@@ -552,6 +560,7 @@ procedure tlasio.handlefdtrigger(readtrigger,writetrigger:boolean);
 var\r
   sendflushresult : integer;\r
   tempbuf:array[0..receivebufsize-1] of byte;\r
 var\r
   sendflushresult : integer;\r
   tempbuf:array[0..receivebufsize-1] of byte;\r
+  a:integer;\r
 begin\r
   if (state=wsconnected) and writetrigger then begin\r
     //writeln('write trigger');\r
 begin\r
   if (state=wsconnected) and writetrigger then begin\r
     //writeln('write trigger');\r
@@ -578,7 +587,9 @@ begin
   writtenthiscycle := false;\r
   if (state =wsconnected) and readtrigger then begin\r
     if recvq.size=0 then begin\r
   writtenthiscycle := false;\r
   if (state =wsconnected) and readtrigger then begin\r
     if recvq.size=0 then begin\r
-      numread := myfdread(fdhandlein,tempbuf,sizeof(tempbuf));\r
+      a := recvbufsize;\r
+      if (a <= 0) or (a > sizeof(tempbuf)) then a := sizeof(tempbuf);\r
+      numread := myfdread(fdhandlein,tempbuf,a);\r
       if (numread=0) and (not mustrefreshfds) then begin\r
         {if i remember correctly numread=0 is caused by eof\r
         if this isn't dealt with then you get a cpu eating infinite loop\r
       if (numread=0) and (not mustrefreshfds) then begin\r
         {if i remember correctly numread=0 is caused by eof\r
         if this isn't dealt with then you get a cpu eating infinite loop\r
@@ -613,19 +624,20 @@ begin
   end;\r
 end;\r
 \r
   end;\r
 end;\r
 \r
-{$ifndef win32}\r
-  procedure tlasio.flush;\r
-  var\r
-    fds : fdset;\r
-  begin\r
-    fd_zero(fds);\r
-    fd_set(fdhandleout,fds);\r
-    while sendq.size>0 do begin\r
-      select(fdhandleout+1,nil,@fds,nil,nil);\r
-      if sendflush <= 0 then exit;\r
-    end;\r
-  end;\r
+procedure tlasio.flush;\r
+{$ifdef win32}\r
+type fdset = tfdset;\r
 {$endif}\r
 {$endif}\r
+var\r
+  fds : fdset;\r
+begin\r
+  fd_zero(fds);\r
+  fd_set(fdhandleout,fds);\r
+  while sendq.size>0 do begin\r
+    select(fdhandleout+1,nil,@fds,nil,nil);\r
+    if sendflush <= 0 then exit;\r
+  end;\r
+end;\r
 \r
 procedure tlasio.dodatasent(wparam,lparam:longint);\r
 begin\r
 \r
 procedure tlasio.dodatasent(wparam,lparam:longint);\r
 begin\r