unit DMkLogStressMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, VirtualTrees, Tocsg.Controls, ThdEvent, System.Generics.Collections, ManagerService; type PPrevnEnt = ^TPrevnEnt; TPrevnEnt = record sCaption: String; dwCode: DWORD; end; TDlgMkLogStress = class(TForm) GroupBox1: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; edDestUrl: TEdit; edEmpNo: TEdit; edAgentId: TEdit; edIP: TEdit; edMAC: TEdit; edHostName: TEdit; btnSvrTest: TSpeedButton; GroupBox2: TGroupBox; vtList: TVirtualStringTree; Label7: TLabel; edSendCnt: TEdit; btnSendLog: TSpeedButton; procedure vtListGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer); procedure vtListFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); procedure vtListGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); procedure btnSvrTestClick(Sender: TObject); procedure btnSendLogClick(Sender: TObject); private { Private declarations } MgCtrls_: TManagerInputControlsData; MgSvc_: TManagerService; ThdEvent_: TThdEvent; CodeList_: TList; procedure RefreshPreventList; procedure SendEventLog(sUri, sMsg: String; dwCode: DWORD); function CheckConnectAble: Boolean; public { Public declarations } Constructor Create(aOwner: TComponent); override; Destructor Destroy; override; end; var DlgMkLogStress: TDlgMkLogStress; implementation uses superobject, Tocsg.Path, Tocsg.VirtualTreeViewUtil, IdHTTP, IdSSLOpenSSL, IdIOHandler, Tocsg.Safe, Tocsg.Exception, Tocsg.Network, Tocsg.WinInfo, Tocsg.WTS; {$R *.dfm} Constructor TDlgMkLogStress.Create(aOwner: TComponent); begin Inherited Create(aOwner); edIP.Text := GetHostIP; edMAC.Text := GetMACAddrUsing; edHostName.Text := GetComName + '\' + WTS_GetCurrentUserName; MgCtrls_ := TManagerInputControlsData.Create(CutFileExt(GetRunExePath) + '.ini'); MgCtrls_.RegInputCtrl(edDestUrl); MgCtrls_.RegInputCtrl(edEmpNo); MgCtrls_.RegInputCtrl(edAgentId); MgCtrls_.RegInputCtrl(edIP); MgCtrls_.RegInputCtrl(edMAC); MgCtrls_.RegInputCtrl(edHostName); MgCtrls_.Load; CodeList_ := TList.Create; MgSvc_ := TManagerService.Create; ThdEvent_ := TThdEvent.Create; ThdEvent_.StartThread; RefreshPreventList; end; Destructor TDlgMkLogStress.Destroy; begin FreeAndNil(ThdEvent_); FreeAndNil(MgSvc_); FreeAndNil(CodeList_); FreeAndNil(MgCtrls_); Inherited; end; function TDlgMkLogStress.CheckConnectAble: Boolean; var HTTP: TIdHTTP; SSL: TIdSSLIOHandlerSocketOpenSSL; ss: TStringStream; O: ISuperObject; sResult: String; begin Result := false; edDestUrl.Text := Trim(edDestUrl.Text); if edDestUrl.Text = '' then begin MessageBox(Handle, PChar('¼­¹ö Á¢¼Ó Á¤º¸¸¦ ÀÔ·ÂÇØ ÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); exit; end; Guard(SSL, TIdSSLIOHandlerSocketOpenSSL.Create(nil)); SSL.SSLOptions.Method := sslvSSLv23; SSL.SSLOptions.SSLVersions := [sslvTLSv1_2, sslvTLSv1_1, sslvTLSv1]; Guard(HTTP, TIdHTTP.Create(nil)); HTTP.IOHandler := SSL; with HTTP do begin HandleRedirects := true; Request.Clear; Request.UserAgent := 'Mozilla/5.0'; Request.ContentType := 'application/xml'; Request.AcceptCharSet := 'UTF-8'; Request.Connection := 'Keep-Alive'; HTTPOptions := HTTP.HTTPOptions + [hoForceEncodeParams]; ConnectTimeout := 5000; ReadTimeout := 5000; end; try Guard(ss, TStringStream.Create('{"Request : ConnectionCheck"}', TEncoding.UTF8)); HTTP.Request.CustomHeaders.Values['requestType'] := '123000'; sResult := HTTP.Post(edDestUrl.Text, ss); if (sResult = '') and (HTTP.ResponseCode = 200) then sResult := 'true'; Result := sResult <> ''; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. btnSvrTestClick()'); end; end; procedure TDlgMkLogStress.btnSendLogClick(Sender: TObject); const URI_USER_ACTION = 'UserBehavior'; var pNode: PVirtualNode; pData: PPrevnEnt; nSendCnt: Integer; dwCode: DWORD; sMsg: String; begin MgSvc_.IsConnStatus := CheckConnectAble; if not MgSvc_.IsConnStatus then MessageBox(Handle, PChar('¼­¹ö¿¡ Á¢¼ÓÇÒ ¼ö ¾ø½À´Ï´Ù.'), PChar(Caption), MB_ICONWARNING or MB_OK); MgSvc_.DestServerUrl := edDestUrl.Text; edEmpNo.Text := Trim(edEmpNo.Text); edAgentId.Text := Trim(edAgentId.Text); edIP.Text := Trim(edIP.Text); edMAC.Text := Trim(edMAC.Text); edHostName.Text := Trim(edHostName.Text); edSendCnt.Text := Trim(edSendCnt.Text); if edEmpNo.Text = '' then begin MessageBox(Handle, PChar('»ç¹øÀ» ÀÔ·ÂÇØÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); edEmpNo.SetFocus; exit; end; if edAgentId.Text = '' then begin MessageBox(Handle, PChar('AgentID¸¦ ÀÔ·ÂÇØÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); edAgentId.SetFocus; exit; end; if edIP.Text = '' then begin MessageBox(Handle, PChar('IP ÁÖ¼Ò¸¦ ÀÔ·ÂÇØÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); edIP.SetFocus; exit; end; if edMAC.Text = '' then begin MessageBox(Handle, PChar('MAC ÁÖ¼Ò¸¦ ÀÔ·ÂÇØÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); edMAC.SetFocus; exit; end; if edHostName.Text = '' then begin MessageBox(Handle, PChar('È£½ºÆ® À̸§À» ÀÔ·ÂÇØÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); edHostName.SetFocus; exit; end; nSendCnt := StrToIntDef(edSendCnt.Text, 0); if nSendCnt = 0 then begin MessageBox(Handle, PChar('Àü¼Û Ƚ¼ö¸¦ 1ÀÌ»ó ÀÔ·ÂÇØÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); edSendCnt.SetFocus; exit; end; MgCtrls_.Save; CodeList_.Clear; vtList.BeginUpdate; try pNode := vtList.GetFirstChecked; if pNode = nil then begin MessageBox(Handle, PChar('Àü¼Û ÇÒ À§¹Ý ·Î±×¸¦ Çϳª ÀÌ»ó Ã¼Å©ÇØÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); exit; end; while pNode <> nil do begin pData := vtList.GetNodeData(pNode); CodeList_.Add(pData.dwCode); pNode := vtList.GetNextChecked(pNode); end; finally vtList.EndUpdate; end; ASSERT(CodeList_.Count > 0); Randomize; while nSendCnt > 0 do begin Dec(nSendCnt); dwCode := CodeList_[Random(CodeList_.Count - 1)]; case dwCode of 50006 : sMsg := '[MakeLog] Printer : PDF, Document : DCS'; 50028 : sMsg := '[MakeLog] Printer : PDF, Document : DCS'; 50007 : sMsg := '[MakeLog] Clipboard Blocked : notepad.exe'; 50009 : sMsg := '[MakeLog] C:\TEST.DOCX'; 50010 : sMsg := '[MakeLog] Port Blocked'; 50011 : sMsg := '[MakeLog] Network Refreshed'; 50013 : sMsg := '[MakeLog] Disconnected : "notepad.exe" not launched'; 50014 : sMsg := '[MakeLog] "notepad.exe" Installed'; 50017 : sMsg := '[MakeLog] Connected : ToCSG'; 50027 : sMsg := '[MakeLog] Block : ToCSG'; 50019 : sMsg := '[MakeLog] C:\TEST.DOCX'; 50020 : sMsg := '[MakeLog] Water marked : C:\TEST.jpg'; 50022 : sMsg := '[MakeLog] Software Blocked : notepad.exe'; // 50023 : sMsg := '[MakeLog] '; 50025 : sMsg := '[MakeLog] Screen Locked'; 50026 : sMsg := '[MakeLog] C:\TEST.DOCX'; 50029 : sMsg := '[MakeLog] USB Blocked'; 50030 : sMsg := '[MakeLog] Routing table Prevented'; // 50031 : sMsg := '[MakeLog] '; 50032 : sMsg := '[MakeLog] Domain : naver.com'; 50035 : sMsg := '[MakeLog] Name : MTP, Desc : M12, Serial : MS'; 50036 : sMsg := '[MakeLog] Name : MTP, Desc : M12, Serial : MS'; 50033 : sMsg := '[MakeLog] Name : ºí·ç, Type : ±Â, Address : ¼­¿ï½Ã'; 50034 : sMsg := '[MakeLog] Name : ºí·ç, Type : ±Â, Address : ¼­¿ï½Ã'; end; SendEventLog(URI_USER_ACTION, sMsg, dwCode); end; MessageBox(Handle, PChar(edSendCnt.Text + '°³ ·Î±× »ý¼ºÀ» ¿äûÇß½À´Ï´Ù.'), PChar(Caption), MB_ICONINFORMATION or MB_OK); end; procedure TDlgMkLogStress.btnSvrTestClick(Sender: TObject); begin edDestUrl.Text := Trim(edDestUrl.Text); if edDestUrl.Text = '' then begin MessageBox(Handle, PChar('¼­¹ö Á¢¼Ó Á¤º¸¸¦ ÀÔ·ÂÇØ ÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); exit; end; if CheckConnectAble then MessageBox(Handle, PChar('¼­¹ö¿¡ Á¢¼Ó °¡´ÉÇÑ »óÅÂÀÔ´Ï´Ù.'), PChar(Caption), MB_ICONQUESTION or MB_OK) else MessageBox(Handle, PChar('¼­¹ö¿¡ Á¢¼ÓÇÒ ¼ö ¾ø½À´Ï´Ù.'), PChar(Caption), MB_ICONWARNING or MB_OK); end; procedure TDlgMkLogStress.RefreshPreventList; procedure AddEnt(sCaption: String; dwCode: DWORD); var pNode: PVirtualNode; pData: PPrevnEnt; begin pData := VT_AddChildDataN(vtList, pNode); pNode.CheckType := ctCheckBox; pNode.CheckState := csCheckedNormal; pData.sCaption := sCaption; pData.dwCode := dwCode; end; begin vtList.BeginUpdate; try VT_Clear(vtList); AddEnt('ÇÁ¸°Æ® Â÷´Ü', 50006); AddEnt('ÇÁ¸°Æ® °¨Áö', 50028); AddEnt('Ŭ¸³º¸µå Â÷´Ü', 50007); AddEnt('ÆÄÀÏ ÀúÀå Â÷´Ü', 50009); AddEnt('Æ÷Æ® Â÷´Ü', 50010); AddEnt('³×Æ®¿öÅ© »õ·Î°íħ', 50011); AddEnt('Çʼö APP À§¹Ý', 50013); AddEnt('ÇÁ·Î±×·¥ ¼³Ä¡', 50014); AddEnt('WIFI °¨Áö', 50017); AddEnt('WIFI Â÷´Ü', 50027); AddEnt('ÆÄÀÏ ¸¶½ºÅ·', 50019); AddEnt('À̹ÌÁö ¿öÅ͸¶Å©', 50020); AddEnt('APP Â÷´Ü', 50022); // AddEnt('USB ¸Åü Çã¿ë ', 50023); AddEnt('È­¸é Àá±Ý', 50025); AddEnt('ÆÄÀÏ ¾²±â °¨½Ã', 50026); AddEnt('USB Â÷´Ü', 50029); AddEnt('¶ó¿ìÆÃ Å×À̺í Â÷´Ü', 50030); // AddEnt('', 50031); AddEnt('µµ¸ÞÀÎ Á¢¼Ó', 50032); AddEnt('MTP °¨Áö', 50035); AddEnt('MTP Â÷´Ü', 50036); AddEnt('ºí·çÅõ½º °¨Áö', 50033); AddEnt('ºí·çÅõ½º Â÷´Ü', 50034); finally vtList.EndUpdate; end; end; procedure TDlgMkLogStress.SendEventLog(sUri, sMsg: String; dwCode: DWORD); var O: ISuperObject; begin try O := SO; O.S['MODEL_ID'] := edAgentId.Text; O.S['TOCSG_LA_IFNAME'] := sUri; O.S['TOCSG_LA_ID'] := edAgentId.Text; O.S['TOCSG_LA_EMPID'] := edEmpNo.Text; O.S['TOCSG_LA_CODE'] := IntToStr(dwCode); O.S['TOCSG_LA_DATA'] := sMsg; O.S['TOCSG_LA_HOSTNAME'] := edHostName.Text; O.S['TOCSG_LA_LASTCONNDATE'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now); O.S['TOCSG_LA_MACADDR'] := edIP.Text; O.S['TOCSG_LA_REMOTEIP'] := edMAC.Text; ThdEvent_.Push(O.AsString); except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. SendEventLog()'); end; end; procedure TDlgMkLogStress.vtListFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); var pData: PPrevnEnt; begin pData := Sender.GetNodeData(Node); Finalize(pData^); end; procedure TDlgMkLogStress.vtListGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer); begin NodeDataSize := SizeOf(TPrevnEnt); end; procedure TDlgMkLogStress.vtListGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); var pData: PPrevnEnt; begin if Column = 0 then begin pData := Sender.GetNodeData(Node); CellText := pData.sCaption; end; end; end.