Re: [twsocket] Creating a TSslWebAppSrv component

2011-11-28 Thread Busai Péter
What do you mean not nice? This is the whole point of OOP. :)

Actually it is not that simple. I don't want to put TSslHttpAppSrv in
the original unit of THttpAppSrv because SVN will complain every time I
do a check-out.
I tried to put it in a new unit, however it seems THttpAppSrv and
TUrlHandler are friends. Code in HttpAppSrv accessing protected
variables in UrlHandler. So do I have to dup TUrlHandler as well ?

Regards
Peter

 Hi,
 I wonder what is the proper way,
 to derive from TSslHttpServer and copy all the AppServer stuff
 or to derive from THttpAppSrv and add the SSL stuff?
 It's likely the easiest approach to derive THttpAppSrv from
 THttpsServer rather than from THttpServer (untested).
 This required change of one single line in source code, not nice,
 however should work. 

--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


[twsocket] Creating a TSslWebAppSrv component

2011-11-27 Thread Busai Péter
Hi,
I wonder what is the proper way,
to derive from TSslHttpServer and copy all the AppServer stuff
or to derive from THttpAppSrv and add the SSL stuff?

Regards
Peter

--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


[twsocket] Evaluating TOverbyteIcsSysLogServer

2011-11-11 Thread Busai Péter

Hi,

Some bugs:

OverbyteIcsSysLogServerDemo:
FSysLogServer component is created runtime on form creation, but 
SysLogServer1DataAvailable method is not assigned to 
FSysLogServer.OnDataAvailable anywhere.


TSysLogServer.ParseRawMessageRFC5424:
From line 400 to 457 Date and Time values are read from message 
respectively to SYear, SMonth,SDay,SHour,SMinute,SSecond and SMSec
but if there is a Time Bias, SHour,SMinute are owerritten is case 
construct (Line 463,471)
After case construct in line 493,494 DecodedMessage.Hour and 
DecodedMessage.Minute will get values from the overwritten variables.


If client hostname contains negative sign - , for example 
somename-peter, than between lines 520-532 it is evaluated as invalid 
PID delimter and an exception is raised.

I dont know if this is a valid hostname for that RFC

Regards
Peter


--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Evaluating TOverbyteIcsSysLogServer

2011-11-11 Thread Busai Péter


If client hostname contains negative sign - , for example 
somename-peter, than between lines 520-532 it is evaluated as 
invalid PID delimter and an exception is raised.

I dont know if this is a valid hostname for that RFC

Some digging in the RFCs:

http://tools.ietf.org/html/rfc5424#page-13

 The HOSTNAME field SHOULD contain the hostname and the domain name of
   the originator in the format specified in STD 13 [RFC1034  
http://tools.ietf.org/html/rfc1034]

According to RFC1034 a hypen is a valid character.
http://tools.ietf.org/html/rfc1034 Page 10.

IMHO unit OverbyteIcsSysLogServer.pas function GetWord should also check 
for hypen-minus - character


Regards
Peter
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Evaluating TOverbyteIcsSysLogServer

2011-11-11 Thread Busai Péter



Hello Peter,

Thanks for your feedback. While you are at it, maybe you could fix the 
issues you see and propose it to the community ?
Before doing that, be sure to download the very latest development 
snapshot, preferably directly out of the SVN repository. Then make 
your changes and submit a SVN diff file.


Regards,
--
francois.pie...@overbyte.be


Sure

Just an other question.
Sample from Memo output:
   TimeStamp= 2011-11-11T11:45:48.000+01:00
   DateTime = 2011-11-11 11:45:48.000

Shouldnt DecodedMessage.Hour be corrected by DecodedMessage.TZBias ?

Checked out latest SVN today. Revision 818.

In case attachment does not go through.

OverbyteIcsSysLogServer.diff:
--- 
C:/DOCUME~1/Peter/LOCALS~1/Temp/OverbyteIcsSysLogServer.pas-revBASE.svn000.tmp.pas
P nov. 11 12:13:37 2011
+++ C:/delphi/ics_svn/trunk/Delphi/Vc32/OverbyteIcsSysLogServer.pasP 
nov. 11 11:40:36 2011

@@ -198,7 +198,7 @@
((RawMessage[Index] = 'A') and (RawMessage[Index] = 'Z')) or
((RawMessage[Index] = 'a') and (RawMessage[Index] = 'z')) or
((RawMessage[Index] = '0') and (RawMessage[Index] = '9')) or
-(RawMessage[Index]  = '.') or
+(RawMessage[Index]  = '.') or (RawMessage[Index]  = '-') or
 (RawMessage[Index]  = '_')
   ) do
 Inc(Index);
@@ -455,6 +455,15 @@
 SMSec := '0';
 end;

+SMsec := '0' + DecimalSeparator + SMSec;
+DecodedMessage.Year := StrToInt(SYear);
+DecodedMessage.Month:= StrToInt(SMonth);
+DecodedMessage.Day  := StrToInt(SDay);
+DecodedMessage.Hour := StrToInt(SHour);
+DecodedMessage.Minute   := StrToInt(SMinute);
+DecodedMessage.Second   := StrToInt(SSecond);
+DecodedMessage.MilliSec := Trunc(1000 * StrToFloat(SMsec));
+
 case Delim of
 'Z', ' ' : DecodedMessage.TZBias := 0;
 '+', '-' :
@@ -486,14 +495,6 @@
   String(RawMessage) + '');
 end;

-SMsec := '0' + DecimalSeparator + SMSec;
-DecodedMessage.Year := StrToInt(SYear);
-DecodedMessage.Month:= StrToInt(SMonth);
-DecodedMessage.Day  := StrToInt(SDay);
-DecodedMessage.Hour := StrToInt(SHour);
-DecodedMessage.Minute   := StrToInt(SMinute);
-DecodedMessage.Second   := StrToInt(SSecond);
-DecodedMessage.MilliSec := Trunc(1000 * StrToFloat(SMsec));
 DecodedMessage.TimeString := String(Copy(RawMessage, Index1, Index 
- Index1));


 if (Index  Length(RawMessage)) or



OverbyteIcsSysLogServerDemo.pas.diff:
--- 
C:/DOCUME~1/Peter/LOCALS~1/Temp/OverbyteIcsSysLogServerDemo1.pas-revBASE.svn000.tmp.pas
P nov. 11 12:16:39 2011
+++ 
C:/delphi/ics_svn/trunk/Delphi/Internet/OverbyteIcsSysLogServerDemo1.pas
P nov. 11 11:15:16 2011

@@ -53,16 +53,19 @@
 ToolsPanel: TPanel;
 DisplayMemo: TMemo;
 StartButton: TButton;
+StopButton: TButton;
 procedure FormShow(Sender: TObject);
 procedure FormClose(Sender: TObject; var Action: TCloseAction);
 procedure FormCreate(Sender: TObject);
 procedure StartButtonClick(Sender: TObject);
 procedure SysLogServer1DataAvailable(Sender: TObject; const SrcIP, 
SrcPort,

   RawMessage: AnsiString);
+procedure StopButtonClick(Sender: TObject);
   private
 FIniFileName : String;
 FInitialized : Boolean;
 FSysLogServer: TSysLogServer;
+procedure SetButtons(Listening:Boolean);
   public
 procedure Display(Msg : String);
 property IniFileName : String read FIniFileName write FIniFileName;
@@ -89,6 +92,7 @@
 FSysLogServer := TSysLogServer.Create(Self);
 FIniFileName := OverbyteIcsIniFiles.GetIcsIniFileName;
 DisplayMemo.Clear;
+FSysLogServer.OnDataAvailable := SysLogServer1DataAvailable;
 end;


@@ -150,14 +154,27 @@
 end;
 end;

+procedure TSysLogServerForm.SetButtons(Listening:Boolean);
+begin
+  StartButton.Enabled := not Listening;
+  StopButton.Enabled  := Listening;
+end;

+
 {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
* * *}

 procedure TSysLogServerForm.StartButtonClick(Sender: TObject);
 begin
 FSysLogServer.Listen;
+SetButtons(TRUE);
 end;


+procedure TSysLogServerForm.StopButtonClick(Sender: TObject);
+begin
+FSysLogServer.Close;
+SetButtons(FALSE);
+end;
+
 {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
* * *}

 procedure TSysLogServerForm.SysLogServer1DataAvailable(
 Sender: TObject;


OverbyteIcsSysLogServerDemo.dfm.diff:
--- 
C:/DOCUME~1/Peter/LOCALS~1/Temp/OverbyteIcsSysLogServerDemo1.dfm-revBASE.svn000.tmp.dfm
P nov. 11 12:18:13 2011
+++ 
C:/delphi/ics_svn/trunk/Delphi/Internet/OverbyteIcsSysLogServerDemo1.dfm
P nov. 11 11:15:00 2011

@@ -1,9 +1,9 @@
 object SysLogServerForm: TSysLogServerForm
   Left = 70
   Top = 187
-  Width = 379
-  Height = 247
   Caption = 'SysLogServer - http://www.overbyte.be'
+  ClientHeight = 220
+  ClientWidth = 371
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = 

Re: [twsocket] Problem with UTF8 and Thttpappserv

2011-03-10 Thread Busai Péter

FileCodepage is to tell the component the encoding of template file.
DstCodepage is for the result.
You can have a template file in different encoding than you want the result.

Peter



Hi Arno,

yeees great, That works. I've tried with different languages (polish,german 
...) and it is ok, but one question left: for what are the 2 parameters 
(FileCodepage/DstCodepage)?

Best regards,
Stefan


--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] HttpAppServer Finish question

2011-01-30 Thread Busai Péter
Thanks.
I send answer and call Finish in OnTerminate event.
AFAIK that runs in main thread context.

Peter

2011.01.30. 15:51 keltezéssel, Francois PIETTE írta:
 You have to call Finish in the contrext of the thread running
 UrlHandler.Execute, not your worker thread. It is not important that
 it is in the Execute method, only the thread context matters.

 Of course, the browser has a timeout, but much longer than 10 seconds.

--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Another unicode issue

2011-01-28 Thread Busai Péter

Sorry, they must be surrounded by defines to work in older compilers:

HandleTableRow(TagParams, P + J + 1, Q - P - J - 1,
   RowDataGetter, UserData, DestStream
   {$IFDEF COMPILER12_UP}
   , DestCodePage
   {$ENDIF}
   );

StreamWriteStrA(DestStream, TagValue
   {$IFDEF COMPILER12_UP}
   ,DestCodePage
   {$ENDIF}
   );


Peter

2011.01.27. 21:35 keltezéssel, Busai Péter írta:

Hi Arno,

There were two DestCodePage parameter passover missing in
OverbyteIcsHttpSrv.

function HtmlPageProducerFromMemory
Line: 5068
 HandleTableRow(TagParams, P + J + 1, Q - P - J - 1,
RowDataGetter, UserData, DestStream,
DestCodePage);

and

Line: 5076
 StreamWriteStrA(DestStream, TagValue, DestCodePage);



--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Another unicode issue

2011-01-28 Thread Busai Péter



I just checked in the change. If you use SVN you should revert previous
changes before update in order to avoid conflicts,

Resolve conflicts using 'theirs' is just one click ;)

Peter
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Another unicode issue

2011-01-27 Thread Busai Péter
Hi Arno,

There were two DestCodePage parameter passover missing in
OverbyteIcsHttpSrv.

function HtmlPageProducerFromMemory
Line: 5068
HandleTableRow(TagParams, P + J + 1, Q - P - J - 1,
   RowDataGetter, UserData, DestStream,
DestCodePage);

and

Line: 5076
StreamWriteStrA(DestStream, TagValue, DestCodePage);

Now it seems to work as expected.
I just tried UTF8
I have template file in UTF8 format and I need UTF8 encoded results.
With these two corrections Tag values are also converted.

It seems vtWideChar problem solved also.
I tested on Delphi XE, but had no time to test it on ansi compiler.

Thank you very much

Peter

2011.01.27. 18:22 keltezéssel, Arno Garrels írta:
 Arno Garrels wrote:
 Busai Péter wrote:
 In HttpAppServer, URLHandler

 Call
 Client.AnswerPage(Flags,'','','template.html',nil,['SOMEKEY','A']);

 The value of SOMEKEY must be one character long.

 Result rendered in html page:
 Unsupported TVarRec.VType = vtWideChar
 I uploaded changed versions of OverbyteIcsHttpSrv.pas and
 OverbyteIcsHttpAppServer.pas here:
 http://www.duodata.de/misc/delphi/ics/OverbyteIcsHttpSrv733.zip

 Fixed VarRecToString. AnswerPage and other functions take
 optional codepage parameters now, you asked that some days back.
 So it should now be possible to write i.e. UTF-8 encoded HTML
 by passing CP_UTF8 in parameter DstCodePage, the default is
 CP_ACP. Since it's not much tested please give it a trial and
 let me know how it works for you before I upload this change to
 the repository.
 Just in case you downloaded the wrong ZIP, VarRecToString should
 look like:

 function VarRecToString(V : TVarRec) : String;
 const
 BooleanToString : array [Boolean] of String = ('FALSE', 'TRUE');
 begin
 case V.VType of
 vtInteger:Result := _IntToStr(V.VInteger);
 vtBoolean:Result := BooleanToString[V.VBoolean];
 vtChar:   Result := String(V.VChar);
 vtExtended:   Result := _FloatToStr(V.VExtended^);
 vtString: Result := String(V.VString^);
 vtPointer:Result := 'Unsupported TVarRec.VType = vtPointer';
 vtPChar:  Result := String(_StrPas(V.VPChar));
 vtObject: Result := 'Unsupported TVarRec.VType = vtObject';
 vtClass:  Result := 'Unsupported TVarRec.VType = vtClass';
 vtWideChar:   Result := String(V.VWideChar);
 vtPWideChar:  Result := String(V.VPWideChar);
 vtAnsiString: Result := String(_StrPas(V.VPChar));
 vtCurrency:   Result := 'Unsupported TVarRec.VType = vtCurrency';
 vtVariant:Result := 'Unsupported TVarRec.VType = vtVariant';
 vtWideString: Result := 'Unsupported TVarRec.VType = vtWideString';
 vtInterface:  Result := 'Unsupported TVarRec.VType = vtInterface';
 vtInt64:  Result := _IntToStr(V.VInt64^);
 {$IFDEF COMPILER12_UP}
 vtUnicodeString:  Result := PWideChar(V.VUnicodeString);
 {$ENDIF}
 else
 Result := 'Unknown TVarRec.VType = ' + _IntToStr(Ord(V.VType)) + ' 
 ';
 end;

 //OutputDebugString(PChar('VarRecToString ' + Result));
 end;

--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


[twsocket] HttpAppServer, how to alter client.path

2011-01-26 Thread Busai Péter
Hi,

I'm trying to create nested virtual document names like for example:
/Admin/Serverinfo
I created an URLHandler for that
HttpAppSrv.AddGetHandler('/Admin/ServerInfo', TUrlHandlerAdmin);
Images for web page are contained in {docroot}/images directory
In the template document I use relative path to images etc...
But this way the browser requests images from {webroot}/Admin/images/...

Is there a way to rewrite path, to get images from directory one level up?
Or should I forget those fancy URLs?

Thanks
Peter
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] HttpAppServer, how to alter client.path

2011-01-26 Thread Busai Péter
I found AddGetAllowedPath in demo project.
Is that something to to do with this?
What is it doing?
Not much comment about it in the source.

Peter

 Hi,

 I'm trying to create nested virtual document names like for example:
 /Admin/Serverinfo
 I created an URLHandler for that
 HttpAppSrv.AddGetHandler('/Admin/ServerInfo', TUrlHandlerAdmin);
 Images for web page are contained in {docroot}/images directory
 In the template document I use relative path to images etc...
 But this way the browser requests images from {webroot}/Admin/images/...

 Is there a way to rewrite path, to get images from directory one level up?
 Or should I forget those fancy URLs?

--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] HttpAppServer, how to alter client.path

2011-01-26 Thread Busai Péter
Ok, it is working now.
Just some missing slashes in path caused trouble.

Peter


 I found AddGetAllowedPath in demo project.
 Is that something to to do with this?
 What is it doing?
 Not much comment about it in the source.

 Peter

--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] sending jpg through httpserver

2011-01-26 Thread Busai Péter
Hi Edwin,

AnswerStream is just perfect for that.
Here is how I send png. It is stored in FpngStream, which is also a
TMemoryStream.
I dont want it to be destroyed after sent. That is why I create an other
memory stream and copy
then content.

ClientCnx.DocStream := TMemoryStream.Create;
ClientCnx.DocStream.CopyFrom(TSessionData(SessionList[index]).FpngStream,0);
ClientCnx.AnswerStream(Flags,'','image/png','');

Peter

2011.01.26. 22:53 keltezéssel, Edwin @ Clanhay írta:
 I am trying to send a jpg from delphi's tjpgImage to a client with the 
 tHTTPServer component.
 Would like to keep it in a memory stream and not save to disk, but 
 AnswerStream is not what it sounds like.
 Searched the archives but found little that was close to what I wanted.
 Still using ICS 5.

 Any ideas?

 ed

--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


[twsocket] Another unicode issue

2011-01-26 Thread Busai Péter
In HttpAppServer, URLHandler

Call Client.AnswerPage(Flags,'','','template.html',nil,['SOMEKEY','A']);

The value of SOMEKEY must be one character long.

Result rendered in html page:
Unsupported TVarRec.VType = vtWideChar


Steps to reproduce in demo:
Modify TUrlHandlerHomePageHtml to pass just one character for 'LOGIN'


procedure TUrlHandlerHomePageHtml.Execute;
begin
if NotLogged then
Exit;
AnswerPage('', NO_CACHE, '/HomePage.html', nil,
--   ['LOGIN',   'Q', //UrlLogin,
'COUNTER', UrlCounter,
'CONFIG',  UrlConfigForm,
'COUNTERVIEW', UrlCounterViewHtml,
'USERCODE',SessionData.UserCode,
'LOGINTIME',   DateToStr(SessionData.LogonTime)]);
Finish;
end;



Result:
...
a href=/CounterView.htmlCounter view/a (AJAX)br
a href=mailer.html?testingSend Email Form/abr
brbr
Your are not demo ? a href=Unsupported TVarRec.VType =
vtWideCharChange/a user.
hr
div align=center
...



Peter

--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


[twsocket] HtmlPageProducerToString in Delphi XE

2011-01-24 Thread Busai Péter
Hi,

I have problem using the above function in unicode compiler
Just tried to include a content of a file to servertime document

The content of header.html:
div id=header
  Some headerline 1/br
  Some headerline 2/br
  Some headerline 3/br
/div

and the result is:

HTMLHEADTITLEICS WebServer Demo/TITLE/HEAD
BODY eaderline
2/br Some headerline 3/br /div H2Time at server side:/H2
P2011.01.24. 18:35:17/P A HREF=/demo.htmlDemo menu/A
/BODY/HTML



{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *}
{ This procedure is use to generate /time.html
document }
procedure TWebServForm.CreateVirtualDocument_Time(
Sender: TObject;{ HTTP server
component }
ClientCnx : TMyHttpConnection;  { Client connection issuing
command }
var Flags : THttpGetFlag);  { Tells what HTTP server has to do
next }

var
  HeaderString:String;
begin
HeaderString :=
ClientCnx.HtmlPageProducerToString('header.html',nil,[]);
ClientCnx.AnswerString(Flags,
'',{ Default Status '200
OK'}
'',{ Default Content-Type:
text/html}
'Pragma: no-cache' + #13#10 +  { No client caching
please   }
'Expires: -1'  + #13#10,   { I said: no caching
!   }
'HTML' +
  'HEAD' +
'TITLEICS WebServer Demo/TITLE' +
  '/HEAD' + #13#10 +
  'BODY' +  HeaderString +
'H2Time at server side:/H2' + #13#10 +
'P' + DateTimeToStr(Now) +'/P' + #13#10 +
'A HREF=/demo.htmlDemo menu/A' + #13#10 +
  '/BODY' +
'/HTML');
end;



{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *}
function THttpConnection.HtmlPageProducerToString(
const HtmlFile : String;
UserData   : TObject;
Tags   : array of const) : String;
var
Stream : TMemoryStream;
begin
Stream := TMemoryStream.Create;
try
HtmlPageProducerToStream(HtmlFile, UserData, Tags, Stream);
SetLength(Result, Stream.Size);
Stream.Seek(0, 0);

If I save the stream to a file: Stream.SaveToFile('teszt.html')
the file contains the expected data.

Stream.Read(Result[1], Stream.Size);

Here Result contains garbage.

finally
Stream.Free;
end;
end;

Regards
Peter

A(z) kimenő üzenetben nem található vírus.
Ellenőrizte: AVG - www.avg.com
Verzió: 9.0.872 / Vírus adatbázis: 271.1.1/3400 - Kiadás dátuma: 01/24/11 
08:35:00
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Re: [twsocket] HtmlPageProducerToString in Delphi XE

2011-01-24 Thread Busai Péter
For a fast workaround now I use TStringStream

  HeaderStream := TStringStream.Create;
  try
Client.HtmlPageProducerToStream('header.html',nil,[
  'LOCATION', SessionData.Referer,
 
'ISADMIN',IfThen(SessionData.IsAdmin,'','style=display:none;')
  ],HeaderStream);
AnswerPage('','','home.html',nil,[
  'HEADER',UTF8Encode(HeaderStream.DataString)
...

Peter


2011.01.24. 18:42 keltezéssel, Busai Péter írta:
 Hi,

 I have problem using the above function in unicode compiler
 Just tried to include a content of a file to servertime document

 The content of header.html:
 div id=header
   Some headerline 1/br
   Some headerline 2/br
   Some headerline 3/br
 /div

 and the result is:

 HTMLHEADTITLEICS WebServer Demo/TITLE/HEAD
 BODY eaderline
 2/br Some headerline 3/br /div H2Time at server side:/H2
 P2011.01.24. 18:35:17/P A HREF=/demo.htmlDemo menu/A
 /BODY/HTML



 {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * *}
 { This procedure is use to generate /time.html
 document }
 procedure TWebServForm.CreateVirtualDocument_Time(
 Sender: TObject;{ HTTP server
 component }
 ClientCnx : TMyHttpConnection;  { Client connection issuing
 command }
 var Flags : THttpGetFlag);  { Tells what HTTP server has to do
 next }

 var
   HeaderString:String;
 begin
 HeaderString :=
 ClientCnx.HtmlPageProducerToString('header.html',nil,[]);
 ClientCnx.AnswerString(Flags,
 '',{ Default Status '200
 OK'}
 '',{ Default Content-Type:
 text/html}
 'Pragma: no-cache' + #13#10 +  { No client caching
 please   }
 'Expires: -1'  + #13#10,   { I said: no caching
 !   }
 'HTML' +
   'HEAD' +
 'TITLEICS WebServer Demo/TITLE' +
   '/HEAD' + #13#10 +
   'BODY' +  HeaderString +
 'H2Time at server side:/H2' + #13#10 +
 'P' + DateTimeToStr(Now) +'/P' + #13#10 +
 'A HREF=/demo.htmlDemo menu/A' + #13#10 +
   '/BODY' +
 '/HTML');
 end;



 {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * *}
 function THttpConnection.HtmlPageProducerToString(
 const HtmlFile : String;
 UserData   : TObject;
 Tags   : array of const) : String;
 var
 Stream : TMemoryStream;
 begin
 Stream := TMemoryStream.Create;
 try
 HtmlPageProducerToStream(HtmlFile, UserData, Tags, Stream);
 SetLength(Result, Stream.Size);
 Stream.Seek(0, 0);

 If I save the stream to a file: Stream.SaveToFile('teszt.html')
 the file contains the expected data.

 Stream.Read(Result[1], Stream.Size);

 Here Result contains garbage.

 finally
 Stream.Free;
 end;
 end;

 Regards
 Peter


 --
 To unsubscribe or change your settings for TWSocket mailing list
 please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
 Visit our website at http://www.overbyte.be



 A(z) bejövő üzenetben nem található vírus.
 Ellenőrizte: AVG - www.avg.com 
 Verzió: 9.0.872 / Vírus adatbázis: 271.1.1/3400 - Kiadás dátuma: 01/24/11 
 08:35:00

A(z) kimenő üzenetben nem található vírus.
Ellenőrizte: AVG - www.avg.com
Verzió: 9.0.872 / Vírus adatbázis: 271.1.1/3400 - Kiadás dátuma: 01/24/11 
08:35:00
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Re: [twsocket] HtmlPageProducerToString in Delphi XE

2011-01-24 Thread Busai Péter
One possible solution, I defined a temporary RawByteString and now it
returns correct result.
I have tested it on DelphiXE and BDS2006.

{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *}
function THttpConnection.HtmlPageProducerToString(
const HtmlFile : String;
UserData   : TObject;
Tags   : array of const) : String;
var
Stream : TMemoryStream;
{$IFDEF COMPILER12_UP}
S : RawByteString;
{$ELSE}
S : String;
{$END}
begin
Stream := TMemoryStream.Create;
try
HtmlPageProducerToStream(HtmlFile, UserData, Tags, Stream);
SetLength(S, Stream.Size);
Stream.Seek(0, 0);
Stream.Read(S[1], Stream.Size);
Result := S;
finally
Stream.Free;
end;
end;

Regards
Peter


A(z) kimenő üzenetben nem található vírus.
Ellenőrizte: AVG - www.avg.com
Verzió: 9.0.872 / Vírus adatbázis: 271.1.1/3400 - Kiadás dátuma: 01/24/11 
08:35:00
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

[twsocket] HttpServer UTF8 problem

2011-01-09 Thread Busai Péter
Hi!

I'm trying to port my webapplication to Delphi XE unicode compiler.
I have problem to encode accented text in RowDataGetter.
In recent nonunicode version I just made conversion like:
Tagdata.Add('key', AnsiToUTF8(some_accented_value))
In Delphi XE I tried Tagdata.Add('key',
UTF8Encode(some_accented_value)), but the result is not UTF8 encoded.
I think it is converted back to Unicode because Add accepts String
parameters.
Where and how should I do the conversion?

Thanks
Peter

A(z) kimenő üzenetben nem található vírus.
Ellenőrizte: AVG - www.avg.com
Verzió: 9.0.872 / Vírus adatbázis: 271.1.1/3368 - Kiadás dátuma: 01/08/11 
20:34:00
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Re: [twsocket] Using FTPClient in dll

2010-12-01 Thread Busai Péter

2010.12.01. 7:07 keltezéssel, Arno Garrels írta:


That's true, you should not call ProcessMessages in a loop like
above. NOFORMS and MessageLoop should work. Otherwise show us some
more of your code.


Again you are right. NOFORMS is the key.
The below comment from OverbyteIcsDll1.dpr was a bit misleading.
{$DEFINE NOFORMS}   // This will avoid forms unit and reduce DLL size
I deleted that line because I knew I have to use forms unit in one of my 
units.

Now I see that it is explained in wsocket.pas history.

Thanks.
--
Peter
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Using FTPClient in dll

2010-11-30 Thread Busai Péter

Solved.




Hi!

I have to write a dll which downloads some file.
I created a project using example OverbyteIcsDll2.dpr as a sample.
There are 2 differences. I must put a form inside the dll, which is just
a user interface to set up and save connection parameters, but this form
is not
created at the time of transfer. So NOFORMS is not defined.
The other difference is that I create a datamodule in the thread, and
ftpcli is created inside that module.
I use async methods.
It is started from a method of datamodule:
   FTPCli.OpenAsync;
   FTPCli.MessageLoop;

The transfer is working fine.
The problem is, when OnSessionClosed is fired, PostMessage sends WM_QUIT
to FTPCli.Handle* but MessageLoop does not exit.

* Also tried FtpCli.ControlSocket.Handle and FtpCli.WndHandler.Handle

What am I missing?
Thank in advance.

Peter


--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Using FTPClient in dll

2010-11-30 Thread Busai Péter



Solved.

That's great, please describe briefly the cause of the problem
and how it was solved, readers of this list might benefit from
your findings and save some time.



Well, I do not clearly understand the internals, but defining NOFORMS in 
project option

and  using
while not FTPCli.Terminated do
  FTPCli.ProcessMessages;

instead of

  FTPCli.MessageLoop

and quitting with FTPCli.PostQuitMessage did work.

--
Peter
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Using FTPClient in dll

2010-11-30 Thread Busai Péter



2010.11.30. 20:41 keltezéssel, Arno Garrels írta:



Well, I do not clearly understand the internals, but defining NOFORMS
in project option
and  using
 while not FTPCli.Terminated do
   FTPCli.ProcessMessages;

instead of

   FTPCli.MessageLoop

and quitting with FTPCli.PostQuitMessage did work.

You must be using some current ICS version. That's positive
feedback! PostQuitMessage was introduced recently to ease quit
of the message loop.


My first thing was to update from svn ;)
However I think the above design not very nice, since CPU is on 100% 
while transfer is taking place.


--
Peter
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


[twsocket] Using FTPClient in dll

2010-11-29 Thread Busai Péter
Hi!

I have to write a dll which downloads some file.
I created a project using example OverbyteIcsDll2.dpr as a sample.
There are 2 differences. I must put a form inside the dll, which is just
a user interface to set up and save connection parameters, but this form
is not
created at the time of transfer. So NOFORMS is not defined.
The other difference is that I create a datamodule in the thread, and
ftpcli is created inside that module.
I use async methods.
It is started from a method of datamodule:
  FTPCli.OpenAsync;
  FTPCli.MessageLoop;

The transfer is working fine.
The problem is, when OnSessionClosed is fired, PostMessage sends WM_QUIT
to FTPCli.Handle* but MessageLoop does not exit.

* Also tried FtpCli.ControlSocket.Handle and FtpCli.WndHandler.Handle

What am I missing?
Thank in advance.

Peter
A(z) kimenő üzenetben nem található vírus.
Ellenőrizte: AVG - www.avg.com
Verzió: 9.0.872 / Vírus adatbázis: 271.1.1/3287 - Kiadás dátuma: 11/29/10 
08:34:00
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

[twsocket] FTPServer access violation

2010-03-14 Thread Busai Péter
Hi ICS team!

I'm testing ICS V7 FTP server demo from latest SVN checkout. I use
FileZilla client connecting to it and option Use compression for all
transfers is on.
Exception is thrown in TClientProcessingThread.Execute.
Debugger tells me that threads Client.DataStream is nil. However in
TFtpServer.DoStartSendData Client.Datastream is assigned, when passed to
the thread.
It is strange.

Some log:

! 127.0.0.1=ics Completed directory listing for: c:\temp\*.*, Total Files: 3
! 127.0.0.1=ics Using thread to compress upload file: Directory:
c:\temp\*.*, Level 1
! 127.0.0.1=ics Directory 0bytes sent in 0 milliseconds
 127.0.0.1=ics [6672ms] 226 File sent ok
 127.0.0.1=ics [6672ms] Failed to compress file - Access violation at
address 0049CE83 in module 'OverbyteIcsFtpServ.exe'. Read of address



Regards
Peter
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


[twsocket] THttpSrv slight modification to function ExtractURLEncodedValue

2006-09-12 Thread Busai Péter
Hi!

In one of my html forms I had to use html element select multiple 
name=..., so when the user selects multiple items, we got a datastream 
like this:
var1=value1var1=value2var1=value3... etc.
Original function returned only the first value of var1. I know the 
remark states that it retrieves only a single value, but since I did not 
found an other function retrieving multiple values like that, I took 
some guts, and made some modification to it.
Just in case someone faces the same problem, here is the modified code.
In case of multiple values, they are separated by CRLFs, so the result 
can be loaded to a TString descendent's Text property for example .

Peter

function ExtractURLEncodedValue(
   Msg   : PChar;{ URL Encoded stream }
   Name  : String;   { Variable name to look for  }
   var Value : String)   { Where to put variable value}
   : Boolean;{ Found or not found that's the question }
var
   NameLen  : Integer;
   FoundLen : Integer; {tps}
   Ch   : Char;
   P, Q : PChar;
begin
   Result  := FALSE;
   Value   := '';
   if Msg = nil then { Empty source }
   Exit;

   NameLen := Length(Name);

   P := Msg;
   while P^  #0 do begin
   Q := P;
   while (P^  #0) and (P^  '=') do
   Inc(P);
   FoundLen := P - Q; {tps}
   if P^ = '=' then
   Inc(P);
   if (StrLIComp(Q, @Name[1], NameLen) = 0) and
  (NameLen = FoundLen) then begin  {tps}

  {*** Multiple Values ***}
  If Value  ''
Then Value := Value + #13#10;  // separate values by CrLf
  {**}

   while (P^  #0) and (P^  '') do begin
   Ch := P^;
   if Ch = '%' then begin
   Ch := chr(htoi2(P + 1));
   Inc(P, 2);
   end
   else if Ch = '+' then
   Ch := ' ';
   Value := Value + Ch;
   Inc(P);
   end;
   Result := TRUE;
   // break;   {*** Commented *** We are looking for more 
Name-s}
end;
while (P^  #0) and (P^  '') do
Inc(P);
   if P^ = '' then
   Inc(P);
   end;
end;

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be