| Bug # | Delphi versions | Description |
| 5 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
The components on the Internet page of the Component Palette have many problems. |
| 6 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
There's a bug in ScktComp when stThreadBlocking is used. |
| 7 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Problems making ISAPI dll work with Netscape Fasttrack Server 3.0 |
| 526 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TIsapiRequest TIsapiRequest.ReadClient doesn't work with NSAPI |
| 521 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TNMSMTP Calling Disconnect when there's no active copnnection causes the component to go into an infinite loop. |
Bug #5; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| N/A | Exists | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
Bug #6; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| N/A | N/A | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
For the moment I'm too tired to dig into it...
Bug #7; last modified: 31-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| N/A | N/A | Exists | Exists | Exists | Gotcha | Gotcha | Gotcha |
Hi,
I have been struggling since last few days to make my isapi dll work
with netscape fasttrack server 3.0. There is a dll provided by delphi
to do this. This dll is isapiter.dll.
The isapiter.dll provided by delphi c/s 3.0 works with netscape
fasttrack server 2.0. To get the new isapiter.dll upgrade delphi to
version 3.02.
It's not yet over!!! The file ns30fix.pas which contains the Netscape
fasttrack 3.0 fix contains a piece of code which tries to import
"servact_translate_uri" from ns_httpd30.dll. ns_httpd30.dll does not
contain this function!!! However an eqivalent function
"INTservact_translate_uri" exists in nshttpd30.dll. So if you have any
such problems just change the code in ns30fix.pas so that it imports
"INTservact_translate_uri" instead of "servact_translate_uri". Then
compile the ns30fix and place the ns30fix.dcu in the lib directory of
delphi. Then recompile isapiter.dpr and get the new isapiter.dll. this
dll works with fasttrack 3.0!!
While compiling isapiter.dpr do not forget to put the conditional
"NETSCAPE3"
In the mean time, the Delphi Bug List has received corrected compiled
versions of these DLLs. They can be downloaded:
isapiterns30.zip is the isapiter.dll for Netscape 3.0 servers and
isapiterns35.zip is the isapiter.dll for Netscape 3.5 servers.
Building these one should use the right settings:
ns30 with delphi 3.01 & a conditional NETSCAPE3
ns35 with delphi 4.0 & a conditional NETSCAPE35
Bug #526; last modified: 21-Jan-99| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Unknown | Unknown | Exists | Exists | Exists | Exists |
A short background:
Web applications made using "web broker" components
(shipped with C/S edition of Delphi 3) can be plugged into
either an ISAPI enabled server or Netscape servers.
The "trick" is ISAPIter.DLL (called "Web bridge" by Borland) that
interfaces your Isapi DLL with the Nsapi server.
NSToIS.pas is one of the source files needed to build
ISAPIter and has two bugs in the function TISAPISession.ReadClient.
As stated in Delphi help: "ReadClient allows the server application
to get the next chunk of information when the content of the
request message is too large for the Content property".
I've found the maximum size of Content is 48kb. When the data sent
by HTTP POST is larger than this size, you must call ReadClient to
retrieve the rest.
Here's a small source code sample; it's a simplified version of what
we're using (the actual code would be confusing). But if you just want
to make the bug appear, I think it'll work fine.
This can be placed in the default action handler:
var
Buffer: Pointer;
nTotal: Integer;
sContent: string;
begin
nTotal := Request.ContentLength;
sContent := Request.Content;
if Length( sContent ) < nTotal then begin
GetMem( Buffer,nTotal );
try
if Request.ReadClient( Buffer^,nTotal ) = -1 then
raise Exception.Create( 'Server overloaded' );
SetLength( sContent,nTotal );
Move( Buffer^,sContent[1],nTotal );
finally
FreeMem( Buffer,nTotal )
end;
end;
Response.Content := Format( 'Received %d bytes',
[ Length( sContent ) ] );
Handled := True;
end;
To test it you just need a simple html code:
<HTML> <form action="prupload.dll" method="post"> <input type="file"> <p> <INPUT TYPE="SUBMIT" VALUE="Send"> </form> </HTML>And a file bigger than 48kb.
function TISAPISession.ReadClient(Buffer: Pointer; var Size: DWORD):
Boolean;
var
nBuf, nRemaining: Integer;
begin
LogMessage('ReadClient($%p, %d)'#13#10, [Buffer, Size]);
nRemaining := Size;
while nRemaining > 0 do
begin
with Fsn.inbuf^ do
if pos < cursize then
begin
nBuf := cursize - pos;
if nBuf > Size then nBuf := Size;
{ Look at this: }
Move(inbuf[pos], Buffer, nBuf);
{ Moving the data to the pointer!
Of course it should be:
Move(inbuf[pos], Buffer^, nBuf); }
{ Now look at the following line: }
Inc(pos, nBuf);
{ All right, but... }
Dec(nRemaining, nBuf);
Inc(Integer(Buffer), nBuf);
end else
begin
nBuf := net_read(Fsn.csd, Buffer, nRemaining, NET_READ_TIMEOUT);
if nBuf = IO_ERROR then Break;
{ It must be here too:
Inc(pos, nBuf); }
Dec(nRemaining, nBuf);
end;
end;
if nRemaining = 0 then
Result := True
else Result := False;
Size := Size - nRemaining;
end;
The workaround is:Move(inbuf[pos], Buffer, nBuf);With:
Move(inbuf[pos], Buffer^, nBuf);Add this line between lines 541 and 542 of NSToIS.pas:
Inc(pos, nBuf);
Bug #521; last modified: 7-Jan-99| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| N/A | N/A | Unknown | Unknown | Unknown | Unknown | Unknown | Exists |