diff --git a/lsocket.pbi b/lsocket.pbi deleted file mode 100644 index 3ace63a..0000000 --- a/lsocket.pbi +++ /dev/null @@ -1,136 +0,0 @@ -;************************ -;* Library : lsocket.pbi -;* -;* Socket based Networkcommuncation Module. -;* -;* Created and develobed by Linder Hard- und Software -;* -;* Current only usable for Linux. -;* -;* - -CompilerIf #PB_Compiler_OS <> #PB_OS_Linux - CompilerError "Only for Linux" -CompilerEndIf - -;*********************** -;* The SIGPIPE Signal must be Handled Inside / Ignored -#SIGPIPE = 13 - -Procedure SignalIgnore() - Debug("Signal Ignore") -EndProcedure -;*********************** - -signal_(#SIGPIPE, @SignalIgnore()); - -DeclareModule lsocket - Structure sockaddr - sa_family.w - sa_data.s{14} - EndStructure - - Structure in_addr - s_addr.l - EndStructure - - Structure sockaddr_in - sin_family.w - sin_port.w - sin_addr.in_addr - sin_zero.a[8] - EndStructure - - ; Socket types: - #SOCK_STREAM = 1 ; stream (connection) socket - #SOCK_DGRAM = 2 ; datagram (conn.less) socket - #SOCK_RAW = 3 ; raw socket - #SOCK_RDM = 4 ; reliably-delivered message - #SOCK_SEQPACKET = 5 ; sequential packet socket - #SOCK_PACKET = 10 ; linux specific way of - ; getting packets at the dev - ; level. For writing rarp And - ; other similar things on the - ; user level. - - ; socket.h - #PF_INET = 2 - #AF_INET = #PF_INET - - Declare CreateSocket(Port.i, Queuelengt.i = 64, Type.i = #SOCK_STREAM, Protocol.i = #AF_INET, BindedIP.s = "127.0.0.1") ; Return Server Socket < 0 Error - Declare WaitSocket(ServerSocket.i) ;Return new SocketID - Declare ReadSocket(ClientSocket.i, *Buffer, Length.i) ;Return Effective Read - Declare WriteSocket(ClientSocket.i, *Buffer, Length.i) ;Return Effective Writen - Declare CloseSocket(Socket.i) - Declare.s GetSocketIP(Socket.i) -EndDeclareModule - -Module lsocket - Global NewMap lsockets_server.sockaddr_in() - Global NewMap lsockets_client.sockaddr_in() - - Procedure CreateSocket(Port.i, Queuelengt.i = 64, Type.i = #SOCK_STREAM, Protocol.i = #AF_INET, BindedIP.s = "127.0.0.1") ; Return Server Socket < 0 Error - Protected SocketID.i - SocketID = socket_(Protocol, Type, 0) - If SocketID = -1 : ProcedureReturn -1 : EndIf - lsockets_server(Str(SocketID))\sin_family = Protocol - lsockets_server(Str(SocketID))\sin_addr\s_addr = Inet_addr_(BindedIP) - lsockets_server(Str(SocketID))\sin_port = htons_(Port) - If bind_(SocketID, @lsockets_server(Str(SocketID)), SizeOf(sockaddr_in)) <> 0 - Close_(SocketID) - DeleteMapElement(lsockets_server(), Str(SocketID)) - ProcedureReturn -1 - Else - If listen_(SocketID, Queuelengt) <> 0 - Close_(SocketID) - DeleteMapElement(lsockets_server(), Str(SocketID)) - ProcedureReturn -1 - EndIf - EndIf - ProcedureReturn SocketID - EndProcedure - - Procedure.s GetSocketIP(Socket.i) - Protected IPAddresse.s - If lsockets_client(Str(Socket))\sin_family = 0 - IPAddresse = PeekS(Inet_ntoa_(lsockets_client(Str(Socket))\sin_addr\s_addr), -1, #PB_Ascii) - Else - IPAddresse = PeekS(Inet_ntoa_(lsockets_client(Str(Socket))\sin_addr\s_addr), -1, #PB_Ascii) - EndIf - Debug "Requested IP Information:" + IPAddresse - ProcedureReturn IPAddresse - EndProcedure - - Procedure WaitSocket(ServerSocket.i) ;Return new ClientSocketID - Protected ClientSID.i, MapID.s, ClientLength - Protected memory - memory = AllocateMemory(SizeOf(sockaddr_in)) - ClientLength = SizeOf(sockaddr_in) - ClientSID = accept_(ServerSocket, memory, @ClientLength) - If ClientSID < 0 : FreeMemory(memory) : ProcedureReturn ClientSID : EndIf - MapID = Str(ClientSID) - CopyMemory(memory, lsockets_client(MapID), ClientLength) - Debug "Connected IP:" + PeekS(Inet_ntoa_(lsockets_client(MapID)\sin_addr\s_addr), -1, #PB_Ascii) - FreeMemory(memory) - ProcedureReturn ClientSID - EndProcedure - - Procedure ReadSocket(ClientSocket.i, Buffer, Length.i) ;Return Effective Read - Protected Effective.i - Effective = read_(ClientSocket, Buffer, Length) - ProcedureReturn Effective - EndProcedure - - Procedure WriteSocket(ClientSocket.i, Buffer, Length.i) ;Return Effective Writen - Protected Effective.i - Effective = write_(ClientSocket, Buffer, Length) - ProcedureReturn Effective - EndProcedure - - Procedure CloseSocket(Socket.i) - Protected Feedback.i - Feedback = close_(Socket) - ProcedureReturn Feedback - EndProcedure - -EndModule diff --git a/ltls.pbi b/ltls.pbi deleted file mode 100644 index 7ac7aad..0000000 --- a/ltls.pbi +++ /dev/null @@ -1,237 +0,0 @@ -;************************ -;* Library : ltls.pbi -;* -;* Server side TLS Implementation to communicate encrypted. -;* -;* Created and develobed by Linder Hard- und Software -;* -;* Current only usable for Linux. -;* -;* - -CompilerIf #PB_Compiler_OS <> #PB_OS_Linux - CompilerError "Only for Linux" -CompilerEndIf - -XIncludeFile "lsocket.pbi" - -DeclareModule ltls - Structure s_tls_server - CA.s - Cert.s - Key.s - Password.s - EndStructure - - Declare InitSimpleTLS(CA.s, Cert.s, Key.s, Password.s, TLSID.i = 0) - Declare InitTLS(*Settings.s_tls_server, TLSID.i = 0) - Declare WaitTLSSocket(ServerSocket.i, TLSID.i = 0) - Declare ReadTLSSocket(Connection.i, *Buffer, Length.i) - Declare WriteTLSSocket(Connection.i, *Buffer, Length.i) - Declare CloseTLSSocket(Connection.i) - Declare CloseTLS(TLSID.i = 0) - Declare.s ErrorTLSSrv(TLSID.i = 0) - Declare.s ErrorTLSCli(Connection) - Declare GetSocket(Connection.i) -EndDeclareModule - -Module ltls - Structure tls_socket - server_id.i - client_id.i - tls_id.i - EndStructure - - Global NewMap socket_sort.tls_socket() - - PrototypeC.i Pr_tls_init() - PrototypeC.i Pr_tls_config_new() - PrototypeC.i Pr_tls_load_file_pw(FileName.p-utf8, Length, Password.p-utf8) - PrototypeC.i Pr_tls_load_file(FileName.p-utf8, Length, Passord.s = #Null$) - PrototypeC.i Pr_tls_config_set_ca_mem(*tls_config , Memory.i, Length.i) - PrototypeC.i Pr_tls_config_set_cert_mem(*tls_config , Memory.i, Length.i) - PrototypeC.i Pr_tls_config_set_key_mem(*tls_config , Memory.i, Length.i) - PrototypeC.i Pr_tls_server() - PrototypeC.i Pr_tls_configure(*ctx, *cfg) - PrototypeC.i Pr_tls_error(*ctx) - PrototypeC.i Pr_tls_accept_socket(*ctx, *cctx, Socket.l) - PrototypeC.i Pr_tls_accept_cbs(*ctx, *cctx, read_cb.i, write_cb.i, arg_ch.i = #Null) - PrototypeC.i Pr_tls_read(*cctx, *buffer, Size.i) - PrototypeC.i Pr_tls_write(*cctx, *buffer, Size.i) - PrototypeC.i Pr_tls_handshake(*cctx) - PrototypeC.i Pr_tls_close(*cctx) - PrototypeC.i Pr_tls_free(*ctx) - PrototypeC.i Pr_tls_config_free(*cfg) - - #TLS_WANT_POLLIN = -2 - #TLS_WANT_POLLOUT = -3 - - CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 - Define libressl_tls = OpenLibrary(#PB_Any, "/usr/lib64/libtls.so.22") - If Not IsLibrary(libressl_tls) - Define libressl_tls = OpenLibrary(#PB_Any, "/usr/lib64/libtls.so.20") - If Not IsLibrary(libressl_tls) - Define libressl_tls = OpenLibrary(#PB_Any, "/usr/lib64/libtls.so.17") - If Not IsLibrary(libressl_tls) - lhs_log::Out("Library not found: /usr/lib64/libtls.so.22 or .20 or .17") - End - EndIf - EndIf - EndIf - CompilerElse - Define libressl_tls = OpenLibrary(#PB_Any, "/usr/lib/libtls.so.22") - If Not IsLibrary(libressl_tls) - Define libressl_tls = OpenLibrary(#PB_Any, "/usr/lib/libtls.so.20") - If Not IsLibrary(libressl_tls) - Define libressl_tls = OpenLibrary(#PB_Any, "/usr/lib/libtls.so.17") - If Not IsLibrary(libressl_tls) - lhs_log::Out("Library not found: /usr/lib/libtls.so.22 or .20 or .17") - End - EndIf - EndIf - EndIf - CompilerEndIf - - - If IsLibrary(libressl_tls) - Define Call_tls_init = GetFunction(libressl_tls, "tls_init") - Define Call_tls_config_new = GetFunction(libressl_tls, "tls_config_new") - Define Call_tls_load_file = GetFunction(libressl_tls, "tls_load_file") - Define Call_tls_config_set_ca_mem = GetFunction(libressl_tls, "tls_config_set_ca_mem") - Define Call_tls_config_set_cert_mem = GetFunction(libressl_tls, "tls_config_set_cert_mem") - Define Call_tls_config_set_key_mem = GetFunction(libressl_tls, "tls_config_set_key_mem") - Define Call_tls_server = GetFunction(libressl_tls, "tls_server") - Define Call_tls_configure = GetFunction(libressl_tls, "tls_configure") - Define Call_tls_error = GetFunction(libressl_tls, "tls_error") - Define Call_tls_accept_socket = GetFunction(libressl_tls, "tls_accept_socket") - Define Call_tls_accept_cbs = GetFunction(libressl_tls, "tls_accept_cbs") - Define Call_tls_read = GetFunction(libressl_tls, "tls_read") - Define Call_tls_write = GetFunction(libressl_tls, "tls_write") - Define Call_tls_handshake = GetFunction(libressl_tls, "tls_handshake") - Define Call_tls_close = GetFunction(libressl_tls, "tls_close") - Define Call_tls_free = GetFunction(libressl_tls, "tls_free") - Define Call_tls_config_free = GetFunction(libressl_tls, "tls_config_free") - Else - lhs_log::Out("libtls.so Library Not found") - End - EndIf - - - Global.Pr_tls_init tls_init = Call_tls_init - Global.Pr_tls_config_new tls_config_new = Call_tls_config_new - Global.Pr_tls_load_file tls_load_file = Call_tls_load_file - Global.Pr_tls_load_file_pw tls_load_file_pw = Call_tls_load_file - Global.Pr_tls_config_set_ca_mem tls_config_set_ca_mem = Call_tls_config_set_ca_mem - Global.Pr_tls_config_set_cert_mem tls_config_set_cert_mem = Call_tls_config_set_cert_mem - Global.Pr_tls_config_set_key_mem tls_config_set_key_mem = Call_tls_config_set_key_mem - Global.Pr_tls_server tls_server = Call_tls_server - Global.Pr_tls_configure tls_configure = Call_tls_configure - Global.Pr_tls_error tls_error = Call_tls_error - Global.Pr_tls_accept_socket tls_accept_socket = Call_tls_accept_socket - Global.Pr_tls_accept_cbs tls_accept_cbs = Call_tls_accept_cbs - Global.Pr_tls_read tls_read = Call_tls_read - Global.Pr_tls_write tls_write = Call_tls_write - Global.Pr_tls_handshake tls_handshake = Call_tls_handshake - Global.Pr_tls_close tls_close = Call_tls_close - Global.Pr_tls_free tls_free = Call_tls_free - Global.Pr_tls_config_free tls_config_free = Call_tls_config_free - - Global *ctx, *cfg - Global tls_cfg = #Null - Global tls_ctx = #Null - - Procedure InitSimpleTLS(CA.s, Cert.s, Key.s, Password.s, TLSID.i = 0) - Define Settings.s_tls_server - Define TLSInitReturn.i - Settings\CA = CA - Settings\Cert = Cert - Settings\Key = Key - Settings\Password = Password - TLSInitReturn = InitTLS(@Settings, TLSID) - ProcedureReturn TLSInitReturn - EndProcedure - - Procedure InitTLS(*Settings.s_tls_server, TLSID.i = 0) - Protected mem_ptr.i, length.i, returns.i - If tls_init() <> 0 : ProcedureReturn -1 : EndIf - tls_cfg = tls_config_new() - lhs_log::Out("TLS cfg obj:"+Str(tls_cfg)) - lhs_log::Out("CA:"+*Settings\CA) - mem_ptr = tls_load_file(*Settings\CA, @length) - If Not mem_ptr : tls_config_free(tls_cfg) : ProcedureReturn -2 : EndIf - tls_config_set_ca_mem(tls_cfg, mem_ptr, length) - lhs_log::Out("Cert:"+*Settings\Cert) - mem_ptr = tls_load_file(*Settings\Cert, @length) - If Not mem_ptr : tls_config_free(tls_cfg) : ProcedureReturn -3 : EndIf - tls_config_set_cert_mem(tls_cfg, mem_ptr, length) - If Len(*Settings\Password) > 0 - lhs_log::Out("Key:"+*Settings\Key + " Password:"+*Settings\Password) - mem_ptr = tls_load_file_pw(*Settings\Key, @length, *Settings\Password) - If Not mem_ptr : tls_config_free(tls_cfg) : ProcedureReturn -4 : EndIf - tls_config_set_key_mem(tls_cfg, mem_ptr, length) - Else - lhs_log::Out("Key:"+*Settings\Key) - mem_ptr = tls_load_file(*Settings\Key, @length) - If Not mem_ptr : tls_config_free(tls_cfg) : ProcedureReturn -5 : EndIf - tls_config_set_key_mem(tls_cfg, mem_ptr, length) - EndIf - tls_ctx = tls_server() - lhs_log::Out("TLS Server obj:"+Str(tls_ctx)) - If Not tls_ctx : tls_config_free(tls_cfg) : ProcedureReturn -6 : EndIf - returns = tls_configure(tls_ctx, tls_cfg) - lhs_log::Out("Configure Returns:"+Str(returns)) - If returns <> 0 :lhs_log::Out(ErrorTLSSrv()): tls_free(tls_ctx) : tls_config_free(tls_cfg) : ProcedureReturn -7 : EndIf - ProcedureReturn 1 - EndProcedure - - Procedure WaitTLSSocket(ServerSocket.i, TLSID.i = 0) - Protected sockID.i , tlssID.i, cctx - sockID = lsocket::WaitSocket(ServerSocket) - If sockID < 0 : ProcedureReturn -1 : EndIf - tlssID = tls_accept_socket(tls_ctx, @cctx, sockID) - If tlssID = -1 : ProcedureReturn -2 : EndIf - socket_sort(Str(cctx))\client_id = sockID - socket_sort(Str(cctx))\tls_id = cctx - socket_sort(Str(cctx))\server_id = ServerSocket - ProcedureReturn cctx - EndProcedure - - Procedure ReadTLSSocket(Connection.i, Buffer, Length.i) - Protected Received.i - Received = tls_read(Connection, Buffer, Length) - ProcedureReturn Received - EndProcedure - - Procedure WriteTLSSocket(Connection.i, Buffer, Length.i) - Protected Received.i - Received = tls_write(Connection, Buffer, Length) - ProcedureReturn Received - EndProcedure - - Procedure CloseTLSSocket(Connection.i) - tls_close(Connection) - DeleteMapElement(socket_sort(), Str(Connection)) - EndProcedure - - Procedure GetSocket(Connection.i) - ProcedureReturn socket_sort(Str(Connection))\client_id - EndProcedure - - Procedure.s ErrorTLSSrv(TLSID.i = 0) - Protected Error.s - Error = PeekS(tls_error(tls_ctx),-1,#PB_Ascii) - ProcedureReturn Error - EndProcedure - - Procedure.s ErrorTLSCli(Connection.i) - Protected Error.s - Error = PeekS(tls_error(Connection),-1,#PB_Ascii) - ProcedureReturn Error - EndProcedure - - Procedure CloseTLS(TLSID.i = 0) - tls_free(tls_ctx) - tls_config_free(tls_cfg) - EndProcedure - -EndModule \ No newline at end of file