unit MessageEnvelopes_ClientMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, ToolWin, ComCtrls, CheckLst, ExtCtrls, ActnList, uROEncryptionEnvelope, Spin; type TMessageEnvelopes_ClientMainForm = class(TForm) ROMessage: TROBinMessage; ROChannel: TROWinInetHTTPChannel; RORemoteService: TRORemoteService; ActionList1: TActionList; aAdd: TAction; aUpdate: TAction; aDelete: TAction; aMoveUp: TAction; aMoveDown: TAction; Panel1: TPanel; bMoveDown: TButton; bMoveUp: TButton; bDelete: TButton; bUpdate: TButton; bAdd: TButton; CheckListBox1: TCheckListBox; Label1: TLabel; Panel2: TPanel; bClearLog: TButton; Memo1: TMemo; Panel3: TPanel; Edit1: TEdit; bTest: TButton; bRandomTest: TButton; SpinEdit1: TSpinEdit; Label2: TLabel; procedure bClearLogClick(Sender: TObject); procedure aTestExecute(Sender: TObject); procedure FormCreate(Sender: TObject); procedure aDeleteExecute(Sender: TObject); procedure aDeleteUpdate(Sender: TObject); procedure CheckListBox1ClickCheck(Sender: TObject); procedure aMoveUpUpdate(Sender: TObject); procedure aMoveUpExecute(Sender: TObject); procedure aMoveDownExecute(Sender: TObject); procedure aMoveDownUpdate(Sender: TObject); procedure bAddClick(Sender: TObject); procedure aUpdateExecute(Sender: TObject); procedure bRandomTestClick(Sender: TObject); private { Private declarations } procedure Log(AStr: string); procedure CreateAESEnvelope(AMarker, APass: String; AEnabled: Boolean); procedure DoBeforeEnvelopeProcessed( AMessageEnvelope: TROMessageEnvelope; AStream: TStream; aMode: TROMessageEnvelopeMode; AMessage: IROMessage); function GenerateString(AMessageEnvelope: TROAESEncryptionEnvelope): String; public { Public declarations } end; var MessageEnvelopes_ClientMainForm: TMessageEnvelopes_ClientMainForm; implementation uses MessageEnvelopesLibrary_Intf, MessageEnvelopes_AddEnvelope, Math; {$R *.dfm} procedure TMessageEnvelopes_ClientMainForm.bClearLogClick(Sender: TObject); begin Memo1.Clear; end; procedure TMessageEnvelopes_ClientMainForm.aTestExecute(Sender: TObject); begin if (RORemoteService as IMessageEnvelopesService).Echo(Edit1.Text) = Edit1.Text then Log('Echo is OK!'); end; procedure TMessageEnvelopes_ClientMainForm.Log(AStr: string); begin Memo1.Lines.Add(AStr); end; procedure TMessageEnvelopes_ClientMainForm.FormCreate(Sender: TObject); begin CreateAESEnvelope('Marker A','Password A',True); CheckListBox1.ItemIndex := 0; CreateAESEnvelope('Marker B','Password B',False); CreateAESEnvelope('Marker C','Password C',False); end; procedure TMessageEnvelopes_ClientMainForm.CreateAESEnvelope(AMarker, APass: String; AEnabled: Boolean); var lEnv: TROAESEncryptionEnvelope; begin lEnv := TROAESEncryptionEnvelope.Create(nil); with lEnv do begin Password := APass; EnvelopeMarker := AMarker; BeforeEnvelopeProcessed := DoBeforeEnvelopeProcessed; end; with TROMessageEnvelopeItem(ROMessage.Envelopes.Add) do begin Envelope := lEnv; Enabled := AEnabled; end; CheckListBox1.AddItem(GenerateString(lEnv),lEnv); CheckListBox1.Checked[CheckListBox1.Count-1]:=AEnabled; end; procedure TMessageEnvelopes_ClientMainForm.aDeleteExecute(Sender: TObject); var lEnv: TROMessageEnvelope; begin lEnv := TROMessageEnvelope(CheckListBox1.Items.Objects[CheckListBox1.ItemIndex]); CheckListBox1.Items.Delete(CheckListBox1.ItemIndex); ROMessage.Envelopes.Delete(ROMessage.Envelopes.ItemByEnvelope(lEnv).Index); lEnv.Free; end; procedure TMessageEnvelopes_ClientMainForm.aDeleteUpdate(Sender: TObject); begin TAction(Sender).Enabled := CheckListBox1.ItemIndex <> -1; end; procedure TMessageEnvelopes_ClientMainForm.CheckListBox1ClickCheck(Sender: TObject); var lEnv: TROMessageEnvelope; begin lEnv := TROMessageEnvelope(CheckListBox1.Items.Objects[CheckListBox1.ItemIndex]); ROMessage.Envelopes.ItemByEnvelope(lEnv).Enabled := CheckListBox1.Checked[CheckListBox1.ItemIndex]; end; procedure TMessageEnvelopes_ClientMainForm.aMoveUpUpdate(Sender: TObject); begin TAction(Sender).Enabled := (CheckListBox1.ItemIndex > 0); end; procedure TMessageEnvelopes_ClientMainForm.aMoveUpExecute(Sender: TObject); var lEnv: TROMessageEnvelope; begin lEnv := TROMessageEnvelope(CheckListBox1.Items.Objects[CheckListBox1.ItemIndex]); with ROMessage.Envelopes.ItemByEnvelope(lEnv) do Index := Index -1; CheckListBox1.Items.Exchange(CheckListBox1.ItemIndex, CheckListBox1.ItemIndex-1); end; procedure TMessageEnvelopes_ClientMainForm.aMoveDownExecute(Sender: TObject); var lEnv: TROMessageEnvelope; begin lEnv := TROMessageEnvelope(CheckListBox1.Items.Objects[CheckListBox1.ItemIndex]); with ROMessage.Envelopes.ItemByEnvelope(lEnv) do Index := Index +1; CheckListBox1.Items.Exchange(CheckListBox1.ItemIndex, CheckListBox1.ItemIndex+1); end; procedure TMessageEnvelopes_ClientMainForm.aMoveDownUpdate(Sender: TObject); begin TAction(Sender).Enabled := (CheckListBox1.ItemIndex <> -1) and (CheckListBox1.ItemIndex <> CheckListBox1.Count-1); end; procedure TMessageEnvelopes_ClientMainForm.DoBeforeEnvelopeProcessed( AMessageEnvelope: TROMessageEnvelope; AStream: TStream; aMode: TROMessageEnvelopeMode; AMessage: IROMessage); begin case aMode of memIncoming: Log(AMessageEnvelope.EnvelopeMarker+' : processing incoming message'); memOutgoing: Log(AMessageEnvelope.EnvelopeMarker+' : processing outgoing message'); end; end; procedure TMessageEnvelopes_ClientMainForm.bAddClick(Sender: TObject); var lMarker, lPassword: string; begin lMarker := 'Marker '+ inttoStr(CheckListBox1.Count+1); lPassword := 'Password '+ inttoStr(CheckListBox1.Count+1); if AddAESEnvelope(lMarker,lPassword) then CreateAESEnvelope(lMarker,lPassword,True); end; procedure TMessageEnvelopes_ClientMainForm.aUpdateExecute(Sender: TObject); var lEnv: TROAESEncryptionEnvelope; lMarker, lPassword: string; begin lEnv := TROAESEncryptionEnvelope(CheckListBox1.Items.Objects[CheckListBox1.ItemIndex]); lMarker :=lEnv.EnvelopeMarker; lPassword := lEnv.Password; if UpdateAESEnvelope(lMarker,lPassword) then begin lEnv.EnvelopeMarker := lMarker; lEnv.Password := lPassword; CheckListBox1.Items[CheckListBox1.ItemIndex] := GenerateString(lEnv); end; end; procedure TMessageEnvelopes_ClientMainForm.bRandomTestClick(Sender: TObject); var i,j: integer; begin for j := 0 to SpinEdit1.Value -1 do begin For i:= 0 to CheckListBox1.Count -1 do begin CheckListBox1.Checked[i] := False; ROMessage.Envelopes[i].Enabled := False; end; if CheckListBox1.Count > 0 then begin i := RandomRange(0, CheckListBox1.Count-1); CheckListBox1.Checked[i] := True; ROMessage.Envelopes[i].Enabled := True; aTestExecute(bTest); end; end; end; function TMessageEnvelopes_ClientMainForm.GenerateString( AMessageEnvelope: TROAESEncryptionEnvelope): String; begin Result := AMessageEnvelope.EnvelopeMarker + ' [ password = ''' + AMessageEnvelope.Password+''' ]' end; end.