Browse Source

Initial Source

Signed-off-by: Imhotheb <Info@Imhotheb.de>
master
Imhotheb 4 years ago
parent
commit
8375cee491
  1. 74
      ConnectionTest.pbp
  2. 2
      LICENSE
  3. 408
      Main.pb
  4. 3
      README.md
  5. 71
      Wnd.pbf

74
ConnectionTest.pbp

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.purebasic.com/namespace" version="1.0" creator="PureBasic 5.62 (Windows - x86)">
<section name="config">
<options closefiles="1" openmode="2" name="ConnectionTest"/>
</section>
<section name="data">
<explorer view="" pattern="0"/>
<log show="1"/>
<lastopen date="2018-11-18 18:10" user="Andy" host="MINAS"/>
</section>
<section name="files">
<file name="Main.pb">
<config load="1" scan="1" panel="1" warn="1" lastopen="1" panelstate="+"/>
<fingerprint md5="06a219f523b6bff8eeb67c4ed729c9a7"/>
</file>
<file name="Wnd.pbf">
<config load="1" scan="1" panel="1" warn="1" lastopen="1" panelstate="+"/>
<fingerprint md5="5faa0a245f63229d47e81d1568979e4b"/>
</file>
</section>
<section name="targets">
<target name="32-Bit Executable" enabled="1" default="1">
<inputfile value="Main.pb"/>
<outputfile value="..\ConnTest.exe"/>
<options thread="1" xpskin="1" debug="1"/>
<temporaryexe value="source"/>
<compilecount enable="1" value="60"/>
<buildcount enable="1" value="15"/>
<execonstant enable="1"/>
<versioninfo enable="1">
<field0 value="1.%yy%mm.%dd%BUILDCOUNT.%COMPILECOUNT"/>
<field1 value="1.%yy%mm.%dd%BUILDCOUNT.%COMPILECOUNT"/>
<field2 value="Imhotheb"/>
<field3 value="Connection Test"/>
<field4 value="1.%yy%mm.%dd%BUILDCOUNT.%COMPILECOUNT"/>
<field5 value="1.%yy%mm.%dd%BUILDCOUNT.%COMPILECOUNT"/>
<field6 value="Connection Test"/>
<field7 value="iConnTest"/>
<field8 value="%EXECUTABLE"/>
<field9 value="© Imhotheb"/>
<field13 value="Info@Imhotheb.de"/>
<field14 value="https://imhotheb.de"/>
<field15 value="VOS_NT"/>
<field16 value="VFT_APP"/>
</versioninfo>
</target>
<target name="64-Bit Executable" enabled="1" default="0">
<inputfile value="Main.pb"/>
<outputfile value="..\ConnTest_x64.exe"/>
<options thread="1" xpskin="1" debug="1"/>
<temporaryexe value="source"/>
<compilecount enable="1" value="54"/>
<buildcount enable="1" value="15"/>
<execonstant enable="1"/>
<versioninfo enable="1">
<field0 value="1.%yy%mm.%dd%BUILDCOUNT.%COMPILECOUNT"/>
<field1 value="1.%yy%mm.%dd%BUILDCOUNT.%COMPILECOUNT"/>
<field2 value="Imhotheb"/>
<field3 value="Connection Test"/>
<field4 value="1.%yy%mm.%dd%BUILDCOUNT.%COMPILECOUNT"/>
<field5 value="1.%yy%mm.%dd%BUILDCOUNT.%COMPILECOUNT"/>
<field6 value="Connection Test"/>
<field7 value="iConnTest"/>
<field8 value="%EXECUTABLE"/>
<field9 value="© Imhotheb"/>
<field13 value="Info@Imhotheb.de"/>
<field14 value="https://imhotheb.de"/>
<field15 value="VOS_NT"/>
<field16 value="VFT_APP"/>
</versioninfo>
</target>
</section>
</project>

2
LICENSE

@ -1,6 +1,6 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. <http s ://fsf.org/>
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for software and other kinds of works.

408
Main.pb

@ -0,0 +1,408 @@
EnableExplicit
XIncludeFile "Wnd.pbf"
If Not InitNetwork()
MessageRequester("Fehler", "Netzwerkfehler")
End
EndIf
Macro Version()
"V" + Str(1) + "." + FormatDate("%yy%mm.%dd", Date()) + Str(#PB_Editor_BuildCount) + "." + Str(#PB_editor_CompileCount)
EndMacro
Enumeration Events #PB_Event_FirstCustomValue
#EVENT_ThreadFinished
EndEnumeration
Enumeration Menu
#MENU_PopUp
EndEnumeration
Enumeration MenuItem
#MENUITEM_Copy
#MENUITEM_Cut
#MENUITEM_Paste
#MENUITEM_SelectAll
#MENUITEM_Undo
EndEnumeration
Structure ThreadData
ID.i
Exit.i
Url.s
Query.s
Format.i
Modus.i
GetRaw.i
Timeout.i
Interval.i
EndStructure
Global ThreadData.ThreadData
Global PopupMenuGadget
Procedure WriteLog(String.s, TimeStamp = #True)
If TimeStamp
AddGadgetItem(#EDIT_Log, -1, FormatDate("%yy-%mm-%dd %hh:%ii:%ss -> ", Date()) + String)
Else
AddGadgetItem(#EDIT_Log, -1, String)
EndIf
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
; NICHT in der DEMO-Version
SendMessage_(GadgetID(#EDIT_Log), #EM_SETSEL, -1, -1) ; Automatisch weiter scrollen
CompilerEndIf
; While WindowEvent() : Wend ; Quick'n Dirty
EndProcedure
Procedure.s CheckUrl(Url.s)
If FindString(Url, "://", 1, #PB_String_NoCase) < 1
Url = "none://" + Url
EndIf
ProcedureReturn Url
EndProcedure
Procedure.s GetQuery()
Protected Ret.s
Ret = GetGadgetText(#EDIT_Own)
Ret = RemoveString(Ret, #CR$)
Ret = RemoveString(Ret, #LF$)
Ret = UnescapeString(Ret)
ProcedureReturn Ret
EndProcedure
Procedure.s ReceiveHTTP(Url.s, Format = #PB_UTF8)
Protected Ret.s, *RecData, Size
WriteLog("Anfrage " + Url + " senden ...")
*RecData = ReceiveHTTPMemory(Url)
If *RecData
Size = MemorySize(*RecData)
Ret = PeekS(*RecData, Size, Format)
WriteLog(Str(Size) + " Bytes empfangen")
Else
WriteLog("Verbindungsfehler")
EndIf
ProcedureReturn Ret
EndProcedure
Procedure.s ReceiveRaw(Url.s, Query.s, Format = #PB_UTF8, Modus = #PB_Network_TCP|#PB_Network_IPv4, TimeOut = 5000)
Protected Server.s, Port, *Query, QueryBytes
Protected NetID, Bytes, *Buff, StartTime, Ret.s
Url=CheckUrl(Url)
Server.s = GetURLPart(Url, #PB_URL_Site)
Port = Val(GetURLPart(Url, #PB_URL_Port))
If Port = 0
Port = 80
EndIf
QueryBytes = StringByteLength(Query, Format)
*Query = AllocateMemory(QueryBytes + 2)
If *Query
PokeS(*Query, Query, -1, Format)
*Buff = AllocateMemory(100000) ; 100 KB Puffer
If *Buff
WriteLog("Verbinde mit " + Server + ":" + Str(Port) + " ...")
NetID = OpenNetworkConnection(Server, Port, Modus, TimeOut)
If NetID
WriteLog("Verbindung erfolgreich")
WriteLog("Sende Anfrage ...")
Bytes = SendNetworkData(NetID, *Query, QueryBytes)
WriteLog(Str(Bytes) + " Bytes gesendet")
WriteLog("Warte " + Str(TimeOut) + " ms auf Antwort ...")
Bytes = 0
StartTime = ElapsedMilliseconds()
Repeat
Select NetworkClientEvent(NetID)
Case #PB_NetworkEvent_Data
WriteLog("Empfange Daten ...")
Bytes = ReceiveNetworkData(NetID, *Buff, MemorySize(*Buff))
If Bytes
WriteLog(Str(Bytes) + " Bytes empfangen")
Ret = PeekS(*Buff, Bytes, Format|#PB_ByteLength)
Break
EndIf
Case #PB_NetworkEvent_Disconnect
WriteLog("Verbindung wurde getrennt")
Break
Default
If (ElapsedMilliseconds() - StartTime) > TimeOut
WriteLog("Timeout erreicht")
Break
Else
Delay(5)
EndIf
EndSelect
ForEver
CloseNetworkConnection(NetID)
Else
WriteLog("Verbindung fehlgeschlagen")
EndIf
FreeMemory(*Buff)
Else
WriteLog("Nicht genug freier Speicher")
Debug "ReceiveRaw: Nicht genug freier Speicher"
EndIf
FreeMemory(*Query)
Else
WriteLog("Nicht genug freier Speicher")
Debug "ReceiveRaw: Nicht genug freier Speicher"
EndIf
ProcedureReturn Ret
EndProcedure
Procedure THREAD_Receive(*TData.ThreadData)
Protected Ret.s, StartTime = ElapsedMilliseconds(), Run = #True, Loop
With *TData
Repeat
; Abrufen
If Run
WriteLog(RSet(#Empty$, 20, "=") + " AbfrageNr.: " + Str(Loop) + " " + RSet(#Empty$, 20, "="), #False)
If \GetRaw
Ret = ReceiveRaw(\Url, \Query, \Format, \Modus, \Timeout)
Else
Ret = ReceiveHTTP(\Url, \Format)
EndIf
If Ret <> #Empty$
WriteLog("Antwort vom Server: ")
WriteLog(RSet(#Empty$, 25, "-"), #False)
WriteLog(Ret, #False)
WriteLog(RSet(#Empty$, 25, "-"), #False)
EndIf
Run = #False
EndIf
; Intervallrechnung
If \Interval > 0
If (ElapsedMilliseconds() - StartTime) > \Interval
Loop + 1
Run = #True
StartTime = ElapsedMilliseconds()
EndIf
Else ; kein Interval, keine Wiederholung
Break
EndIf
; Beenden-Anforderung, Resourcen freigeben
If \Exit
Break
Else
Delay(10)
EndIf
ForEver
EndWith
PostEvent(#EVENT_ThreadFinished, #WND, #Null)
EndProcedure
Procedure ThreadCleanUp()
DisableGadget(#BTN_Start, #True)
If ThreadData\ID
ThreadData\Exit = #True
If IsThread(ThreadData\ID)
WriteLog("Warte auf Thread ...")
If WaitThread(ThreadData\ID, ThreadData\Timeout) = 0
WriteLog("Kill Thread ...")
KillThread(ThreadData\ID)
EndIf
EndIf
WriteLog(">>>>>>>>>> Thread beendet <<<<<<<<<<")
EndIf
ResetStructure(@ThreadData, ThreadData)
DisableGadget(#BTN_Start, #False)
EndProcedure
Procedure CALLBACK_Gadgets()
Protected EventType = EventType()
Protected EventGadget = EventGadget()
Select EventGadget
Case #BTN_Start
If GetGadgetState(#BTN_Start)
If GetGadgetState(#CHK_Repeat)
ThreadData\Interval = GetGadgetState(#SPIN_ms)
SetGadgetText(#BTN_Start, "STOP")
Else
ThreadData\Interval = 0
SetGadgetState(#BTN_Start, #False)
EndIf
ThreadData\Exit = #False
ThreadData\Url = GetGadgetText(#STR_Url)
ThreadData\Format = #PB_UTF8
ThreadData\GetRaw = GetGadgetState(#OPT_Own)
ThreadData\Modus = #PB_Network_TCP|#PB_Network_IPv4
ThreadData\Query = GetQuery()
ThreadData\Timeout = 10000
ThreadData\ID = CreateThread(@THREAD_Receive(), @ThreadData)
WriteLog(">>>>>>>>>> Starte Thread ... <<<<<<<<<<")
Else
ThreadData\Exit = #True ;ThreadCleanUp()
SetGadgetText(#BTN_Start, "START")
EndIf
Case #BTN_DelLog
SetGadgetText(#EDIT_Log, #Empty$)
Case #EDIT_Info
If EventType = #PB_EventType_RightClick
PopupMenuGadget = EventGadget
DisableMenuItem(#MENU_PopUp, #MENUITEM_Cut, #True)
DisableMenuItem(#MENU_PopUp, #MENUITEM_Paste, #True)
DisableMenuItem(#MENU_PopUp, #MENUITEM_Undo, #True)
DisplayPopupMenu(#MENU_PopUp, WindowID(#WND))
EndIf
Case #EDIT_Log
If EventType = #PB_EventType_RightClick
PopupMenuGadget = EventGadget
DisableMenuItem(#MENU_PopUp, #MENUITEM_Cut, #True)
DisableMenuItem(#MENU_PopUp, #MENUITEM_Paste, #True)
DisableMenuItem(#MENU_PopUp, #MENUITEM_Undo, #True)
DisplayPopupMenu(#MENU_PopUp, WindowID(#WND))
EndIf
Case #EDIT_Own
If EventType = #PB_EventType_RightClick
PopupMenuGadget = EventGadget
DisableMenuItem(#MENU_PopUp, #MENUITEM_Cut, #False)
DisableMenuItem(#MENU_PopUp, #MENUITEM_Paste, #False)
DisableMenuItem(#MENU_PopUp, #MENUITEM_Undo, #False)
DisplayPopupMenu(#MENU_PopUp, WindowID(#WND))
EndIf
Default
If GetGadgetState(#CHK_Repeat)
DisableGadget(#SPIN_ms, #False)
Else
DisableGadget(#SPIN_ms, #True)
EndIf
If GetGadgetState(#OPT_Own)
DisableGadget(#EDIT_Own, #False)
Else
DisableGadget(#EDIT_Own, #True)
EndIf
EndSelect
EndProcedure
Procedure CALLBACK_Menu()
Select EventMenu()
Case #MENUITEM_Undo
SendMessage_(GadgetID(PopupMenuGadget), #WM_UNDO, 0, 0)
Case #MENUITEM_Cut
SendMessage_(GadgetID(PopupMenuGadget), #WM_CUT, 0, 0)
Case #MENUITEM_Copy
SendMessage_(GadgetID(PopupMenuGadget), #WM_COPY, 0, 0)
Case #MENUITEM_Paste
SendMessage_(GadgetID(PopupMenuGadget), #WM_PASTE, 0, 0)
Case #MENUITEM_SelectAll
;lang = Len(GetGadgetText(EventGadget))
SendMessage_(GadgetID(PopupMenuGadget), #EM_SETSEL, 0, -1)
EndSelect
EndProcedure
Procedure CALLBACK_Wnd(hWnd, Msg, wParam, lParam)
If Msg = #WM_CONTEXTMENU
Select wParam
Case GadgetID(#EDIT_Info)
PostEvent(#PB_Event_Gadget, #WND, #EDIT_Info, #PB_EventType_RightClick)
Case GadgetID(#EDIT_Own)
PostEvent(#PB_Event_Gadget, #WND, #EDIT_Own, #PB_EventType_RightClick)
Case GadgetID(#EDIT_Log)
PostEvent(#PB_Event_Gadget, #WND, #EDIT_Log, #PB_EventType_RightClick)
EndSelect
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure Create_WND()
; Fenster öffnen und Standartwerte setzen
OpenWND()
SetWindowTitle(#WND, "Connection Test " + Version())
WindowBounds(#WND, WindowWidth(#WND), WindowHeight(#WND), #PB_Ignore, #PB_Ignore)
BindEvent(#PB_Event_SizeWindow, @ResizeGadgetsWND(), #WND)
BindEvent(#PB_Event_Gadget, @CALLBACK_Gadgets(), #WND)
BindEvent(#PB_Event_Menu, @CALLBACK_Menu(), #WND)
BindEvent(#EVENT_ThreadFinished, @ThreadCleanUp(), #WND)
SetWindowCallback(@CALLBACK_Wnd(), #WND)
CALLBACK_Gadgets()
SetGadgetText(#EDIT_Own,"GET /file.xxx HTTP/1.1\r\n" + #LF$ +
"Host: server\r\n" + #LF$ +
"Connection: close\r\n" + #LF$ +
;"User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0" + #LF$ +
"\r\n\r\n")
SetGadgetState(#OPT_Internal, #True)
SetGadgetState(#CHK_Repeat, #False)
SetGadgetState(#SPIN_ms, 5000)
If CreatePopupMenu(#MENU_PopUp)
MenuItem(#MENUITEM_Undo, "Rückgängig")
MenuBar()
MenuItem(#MENUITEM_Copy, "Kopieren")
MenuItem(#MENUITEM_Cut, "Ausschneiden")
MenuItem(#MENUITEM_Paste, "Einfügen")
MenuBar()
MenuItem(#MENUITEM_SelectAll, "Alles Auswählen")
EndIf
; Info hinzufügen
AddGadgetItem(#EDIT_Info, -1, "Escape-Sequenzen:")
AddGadgetItem(#EDIT_Info, -1, ~"\\a\tAscii: 7\tBeep")
AddGadgetItem(#EDIT_Info, -1, ~"\\b\tAscii: 8\tBackSpace")
AddGadgetItem(#EDIT_Info, -1, ~"\\t\tAscii: 9\tH-Tab")
AddGadgetItem(#EDIT_Info, -1, ~"\\n\tAscii: 10\tLineFeed")
AddGadgetItem(#EDIT_Info, -1, ~"\\v\tAscii: 11\tV-Tab")
AddGadgetItem(#EDIT_Info, -1, ~"\\f\tAscii: 12\tFormFeed")
AddGadgetItem(#EDIT_Info, -1, ~"\\r\tAscii: 13\tCarriageReturn")
AddGadgetItem(#EDIT_Info, -1, ~"\\\"\tAscii: 34\tDoubleQuote")
AddGadgetItem(#EDIT_Info, -1, ~"\\\\\tAscii: 92\tBackSlash")
EndProcedure
;_ INIT
Create_WND()
HideWindow(#WND, #False)
;_ MAIN
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
;Aufräumen
HideWindow(#WND, #True)
ThreadCleanUp()
; IDE Options = PureBasic 5.62 (Windows - x86)
; CursorPosition = 9
; Folding = LA9
; EnableXP
; CompileSourceDirectory
; EnableCompileCount = 0
; EnableBuildCount = 0
; EnableExeConstant

3
README.md

@ -1,2 +1,3 @@
# ConnectionTest
# ConnectionTest / iConnTest

71
Wnd.pbf

@ -0,0 +1,71 @@
; Form Designer for Purebasic - 5.62
; Warning: this file uses a strict syntax, if you edit it, make sure to respect the Form Designer limitation or it won't be opened again.
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Enumeration FormWindow
#WND
EndEnumeration
Enumeration FormGadget
#FRM_Url
#STR_Url
#FRM_Connect
#TXT_ms
#SPIN_ms
#CHK_Repeat
#OPT_Internal
#OPT_Own
#FRM_Log
#EDIT_Log
#BTN_Start
#EDIT_Own
#EDIT_Info
#Splitter_0
#BTN_DelLog
EndEnumeration
Declare ResizeGadgetsWND()
Procedure OpenWND(x = 0, y = 0, width = 490, height = 370)
OpenWindow(#WND, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_Invisible | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
FrameGadget(#FRM_Url, 10, 0, 470, 50, "Url")
StringGadget(#STR_Url, 20, 20, 450, 20, "Server/IP[:Port][/file.xxx]")
FrameGadget(#FRM_Connect, 10, 50, 470, 180, "Abfrage")
TextGadget(#TXT_ms, 420, 100, 30, 20, "ms")
SpinGadget(#SPIN_ms, 330, 100, 80, 20, 1, 99999, #PB_Spin_Numeric)
CheckBoxGadget(#CHK_Repeat, 310, 70, 160, 25, "Automatisch Wiederholen")
OptionGadget(#OPT_Internal, 20, 70, 250, 25, "Interne/cUrl Funktionen verwenden (HTTP)")
OptionGadget(#OPT_Own, 20, 100, 110, 25, "Eigene Abfrage:")
FrameGadget(#FRM_Log, 10, 230, 380, 130, "Log")
EditorGadget(#EDIT_Log, 20, 250, 360, 100, #PB_Editor_ReadOnly)
ButtonGadget(#BTN_Start, 400, 240, 80, 40, "Start", #PB_Button_Toggle)
EditorGadget(#EDIT_Own, 20, 130, 250, 90)
EditorGadget(#EDIT_Info, 279, 130, 191, 90, #PB_Editor_ReadOnly)
SplitterGadget(#Splitter_0, 20, 130, 450, 90, #EDIT_Own, #EDIT_Info, #PB_Splitter_Vertical)
SetGadgetState(#Splitter_0, 250)
ButtonGadget(#BTN_DelLog, 400, 290, 80, 30, "Log löschen")
EndProcedure
Procedure ResizeGadgetsWND()
Protected FormWindowWidth, FormWindowHeight
FormWindowWidth = WindowWidth(#WND)
FormWindowHeight = WindowHeight(#WND)
ResizeGadget(#FRM_Url, 10, 0, FormWindowWidth - 20, 50)
ResizeGadget(#STR_Url, 20, 20, FormWindowWidth - 40, 20)
ResizeGadget(#FRM_Connect, 10, 50, FormWindowWidth - 20, 180)
ResizeGadget(#TXT_ms, FormWindowWidth - 70, 100, 30, 20)
ResizeGadget(#SPIN_ms, FormWindowWidth - 160, 100, 80, 20)
ResizeGadget(#CHK_Repeat, FormWindowWidth - 180, 70, 160, 25)
ResizeGadget(#FRM_Log, 10, 230, FormWindowWidth - 110, FormWindowHeight - 240)
ResizeGadget(#EDIT_Log, 20, 250, FormWindowWidth - 130, FormWindowHeight - 270)
ResizeGadget(#BTN_Start, FormWindowWidth - 90, 240, 80, 40)
ResizeGadget(#Splitter_0, 20, 130, FormWindowWidth - 40, 90)
ResizeGadget(#BTN_DelLog, GadgetWidth(#Splitter_0) - 50, 290, 80, 30)
EndProcedure
Loading…
Cancel
Save

Impressum | Datenschutz