diff --git a/src/EventStore.Core.Tests/EventStore.Core.Tests.csproj b/src/EventStore.Core.Tests/EventStore.Core.Tests.csproj
index 3be13ef772..84a5cbb4c1 100644
--- a/src/EventStore.Core.Tests/EventStore.Core.Tests.csproj
+++ b/src/EventStore.Core.Tests/EventStore.Core.Tests.csproj
@@ -4,7 +4,6 @@
true
-
@@ -28,11 +27,8 @@
-
-
-
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca/ca.crt b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca/ca.crt
deleted file mode 100644
index 20a26b37ae..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca/ca.crt
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFyTCCA7GgAwIBAgIUPqHLTqi5UFbchjkFXb/QyEJG05YwDQYJKoZIhvcNAQEL
-BQAwczELMAkGA1UEBhMCTVUxGDAWBgNVBAgMD1BsYWluZXMgV2lsaGVtczEWMBQG
-A1UEBwwNUXVhdHJlLUJvcm5lczETMBEGA1UECgwKRXZlbnRTdG9yZTEQMA4GA1UE
-CwwHVGVzdGluZzELMAkGA1UEAwwCY2EwIBcNMjMwNDI1MDYwNzI1WhgPMjA1MDA5
-MTAwNjA3MjVaMHMxCzAJBgNVBAYTAk1VMRgwFgYDVQQIDA9QbGFpbmVzIFdpbGhl
-bXMxFjAUBgNVBAcMDVF1YXRyZS1Cb3JuZXMxEzARBgNVBAoMCkV2ZW50U3RvcmUx
-EDAOBgNVBAsMB1Rlc3RpbmcxCzAJBgNVBAMMAmNhMIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA40ed3tkTUXI6BVnA64jOYtDCohIvO0OSlXFCcJOt5zjz
-zlluFW5kSW1JQpP1PmH/rY3d2w6jelGTSEHAarji7Hw3p/NW67M3sWmF8KCoHO1l
-MAhMdrUVkNl9ptxWHZSxDSK/MRFFWxMskjhi67Z2i1tkQhRuc8zEavYI6DmnPnx5
-usmUJMqNzV4G4Cndjk0yu/e6S7mle5wKOou5nSiRjORDs0TJh7j0/GcgYeB+kxBa
-eaKmxr1pM9VU2i0ezzR6Ym15yY/ofW+mzQw9DWAZ6JnEiFWHzHwzJdslyN3upmUO
-e21k8ejELL2HeU0DPB9yRlL9vMPPYaJqxhdKS/O2K8VrfrtQsrV5V3Hp78YrwzRN
-qya6BzVhtDbGmWsYHN3aOsaU+sX7d/5dts+/UUxTGC5RYAFz2KzMx+0ZSc+ZlH75
-fsBkKgshUsGeJN3Yr2SitPz1tbU9q+d+eYME0oGCjVO2yGSY4vgKUmNZ++y9YHkd
-hPis9cAGsdLMo97WN3NoL9X8oFGJJjrFXCdfTUXNiHej7xK4gb/qbVYjeSk70jfk
-R7lOITkWCCqquzUUyIGm74JKKJE4ztSO4a96bEJKfIphVITMxDcF1N/zpNg+9MJl
-DvW1aIcaJZ9P5ovnPbUmPZ9XI9LHf/YqRlm+t/zKU4ehjMC8JMyXmgQTHlI9zJcC
-AwEAAaNTMFEwHQYDVR0OBBYEFIpy/ykFnAwP3+yw+ezO1miKBnfsMB8GA1UdIwQY
-MBaAFIpy/ykFnAwP3+yw+ezO1miKBnfsMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
-hvcNAQELBQADggIBADfdRv5zlfBx4Diti8HbjQ7kmB5oPPuWoSzG5uT1nQY/Q5/T
-fRWvUlRXmfmrwJEiBIGeL/VNgeGKteErs5ikesVUdaSXYO+WePPDZPP/aNVllI98
-WAtShpDLjv+LV5P3xraxytKRpv/7CMTBIgfqhl5BaEzLKit7bXsffgWN1qvzBtNE
-Jh3iqSArXVMDOkxB6OOr+f/MR6BRzLhg89lVg5sezh+4pSpQ1q4+RlGU2Lsl37yh
-Zj690GI3GyzOF51q75hdfcq7x5GZt2Ot5hHuqkxG6fQRFdkFveq/fhPimtwVLsvv
-ie6AqRnRwgt/m2qvULlF3H1kIGibwEyuBWYNvA1rgOpbFHHsqE+puXHf1bIK1p6l
-d0AXrmhyGvoqadOdVpu5NJC/5SOCcVe/JOmp8EAJP4rmoMMHeKIsJvWsb+uykwIW
-z5Q6WJW28Lo86L7Bd0Ak51SCtkg1ovfi/Gof5KkoakiwibxKT5wXWIEPcVu9y/yk
-5sj32ZMxygIgIjFOLYvegHyLgNGNJRDrL6a/2xydQwurfgKbAgmMNi362QDztPS5
-806VS0u0SqDNX61WtLLnFv3tVDa0C0ED93uk+me90/3jWih6ibob7vjWURRMj8Oo
-Uo+RGOH9Ktfh8AAY8MlaroknWjOPbDgKzNxRURtIG+EOCszmIMkIl8KtOpeq
------END CERTIFICATE-----
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca/ca.key b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca/ca.key
deleted file mode 100644
index aabb8c635f..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca/ca.key
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDjR53e2RNRcjoF
-WcDriM5i0MKiEi87Q5KVcUJwk63nOPPOWW4VbmRJbUlCk/U+Yf+tjd3bDqN6UZNI
-QcBquOLsfDen81brszexaYXwoKgc7WUwCEx2tRWQ2X2m3FYdlLENIr8xEUVbEyyS
-OGLrtnaLW2RCFG5zzMRq9gjoOac+fHm6yZQkyo3NXgbgKd2OTTK797pLuaV7nAo6
-i7mdKJGM5EOzRMmHuPT8ZyBh4H6TEFp5oqbGvWkz1VTaLR7PNHpibXnJj+h9b6bN
-DD0NYBnomcSIVYfMfDMl2yXI3e6mZQ57bWTx6MQsvYd5TQM8H3JGUv28w89homrG
-F0pL87YrxWt+u1CytXlXcenvxivDNE2rJroHNWG0NsaZaxgc3do6xpT6xft3/l22
-z79RTFMYLlFgAXPYrMzH7RlJz5mUfvl+wGQqCyFSwZ4k3divZKK0/PW1tT2r5355
-gwTSgYKNU7bIZJji+ApSY1n77L1geR2E+Kz1wAax0syj3tY3c2gv1fygUYkmOsVc
-J19NRc2Id6PvEriBv+ptViN5KTvSN+RHuU4hORYIKqq7NRTIgabvgkookTjO1I7h
-r3psQkp8imFUhMzENwXU3/Ok2D70wmUO9bVohxoln0/mi+c9tSY9n1cj0sd/9ipG
-Wb63/MpTh6GMwLwkzJeaBBMeUj3MlwIDAQABAoICAE+b2MDjgUBAhfE02H3H3B7B
-p8MUIoYcK5573v1GxR2eFcv8CDKqiacsiAIxiC/zLJbyf7jInltscm3XVhorq5SR
-B/+knRgPHN1gLGG2LFyBjLVv2rSjxiuH+tq1B9bxq7iBqL17orL9etm2tXOB5HD4
-sJvywyN9oHkkt8b71shs2kiibekbJ+M84aSoFWpQQQqVAaSfoMa0x+Js6bWSLbVP
-iSUkXYDUOL+mMbIG698AVeiQH+GyG8TjnwaS0l1asNmEJioDZbh2INNmy4XBWSHf
-pnbompn2EQZcBhafIgYXlKSIE1kmonxXYLoMzyrCiwj17dmuLpgwxzyekNAcy/xM
-0Higee2wVH07azPk/hjMJ4Jl5XpxFpooww+sLE61gcd/oFNcHV848rt6aOqVFMtZ
-MLJbE0lbOmVZ6CHcGVJWIY0hbleo5Bj5DpYiu4IDsB80RP/FhlHHLV+hfvSmimX7
-gi/SLvu+E1+QUrL83X+xGsZrbxWoXnl98wCRiSoozMkSWg8iHb5FLkzwBmXxOq4Z
-+XrXoHuDHRB+7XXyurTCvOkSiYu9aCrjhBEyiYDi5HkDFfQeq2m/atz0zjO4UkFm
-nUzCfI/0XeY5yPmv0BEN18PpSv/ry1ymH+LGX1g4ixcsPSw3C/y3jh0QpgBYFiWe
-jGVTs6gNaCOPZ3iFtYlZAoIBAQDmbMHW5kt+URSyLcWFOj+voR6vyCIQXSHl9mFp
-N3YQiw4C9+zSdD45f3RmKzLYJJS4fGpIbSXnYkncLK8+Iq6yS0GXRo+F2bnKeByw
-BebfVbfrTSMEYTOdqZ6e2dtqNgAsIXLf1xJQROJhFhzKrSAswjVyDHeotBRbP7iP
-0W79d5dedHmlNR3UAVRc5ip8SEDrRtAxVr3J/EISfgr0jVkAZcThofy7aXE042mU
-B0tclr2goPSKq8YCdTfivSc3VX1nnTf7AmHT5DK9eSfjBWEUu6eVHEziidIU6bZG
-UPGiFOr9s1LDMEbFkpk5D52ip4XVVCKsGp4fGagt+DCNNMTvAoIBAQD8gX7wFeno
-mE3m6arW+5BlYjVzvXXL7fVE3IxNgr3mXjO/D1LggBQ7vO1ILfMsQ4Tku4hiqdSp
-de2OEoGpx4WXdufAzM5nGuQAAKo8iW8KVOE6rF6sCuMB8xFnXV12AFl0dqJsnuj7
-mYCsX/5XW+2WlbgS25u70akOBk2Ua640JMFFRhp7Z9+ejvfEdWDGM5fHm5/GLyDS
-iHNF2tPkrkz+fR/yb5nLO1wqJLKmg9LdqgEkFpongqRGq8XUFjTqrvFadmlHEe+w
-iJZyAFAEhcv5h+fqLnKgD49tVMDmPdxVI84JMCSWRuGhG2Wcy0MInWadxAuYFeIi
-eAdl9dDSlwLZAoIBAQC/Tm5EyCDHd/Ox1vSVnv2/CArdMFCvu1LohPztCSHZrElu
-x330YJRE0n/GT3lAIGblIE5xYUVF7MGbrfG0qcDWwEptmSSRoWlyIvTWY6ABrj4r
-enhnK3haHrhV9FQJw1mzSfYAx6QpxncY2e3/i2saHgeXb6htBU2dULMfnGcEw6SF
-xDg2pHnmSVBMbL+7PZXAgKNbQ0QBDZGhnsnjrfLFtLiYCBA3XNyjZ2eBgejcrz4y
-vU8qTmDwK3fBpP+JHk4ml04h9SFZda12x78I6a9nMkF5N+zRbFFiEYPGr29d/PX4
-ukgtS8iGQic6S6+5mlIwAlFjCBpdgcSynctZgQU7AoIBAQDFA0zFinOM9Xii2GJh
-hrptQCkwevyz9qBN8D7QI1iDq7B4PD6Px58B1TDWBnQbbzr7NI7/XD7/UXHeTfY5
-P+GuAipktee9bq/CiMJKpXir+Poay266kWv5k2ta2PAZJ8CkLAQi+AIUfPp2hBdw
-ldtUiNCsdgiWjMl4ldZmHXY4XQ0nPcFf0/YYQrhy4pp1Sr/8ECKjgRX87lXyhQCb
-BpwwW/RXNlgqx8/rWeLCJUybgw+M1s3EUhxWv6OFDSaQjZrm2EjgGNCJTqkDndbR
-EIvL0AxVHZR16m4gAebYPh/xlhQl+xgw4HEfQL8RjU5qJFVydwoMydY8yqYLGbaq
-+QRRAoIBABAAf+K0lkAqexS9t8cAJr4pXbfSskeO8D2yG1VuhUJKhfnEJbtYdGFd
-ZzQrDSyBe1V8C3fXsCaWNNLYKBfmnzEZId9baisxKC8e0kfG2Qe5elvKYTCwJyyJ
-ifbd+WO77liQ6fWz4g4IxcY2174e8lVLSAAkax8Wq+z1PEM7klchYgKAjKysvSqj
-1Q88ae5wV9foFV9AHHmJ0tlx8ow2R2RyHYzpo6NMKPDsUdZJP2vWUQVb1Bc9sBss
-HABiIRi36LNlswRdX0IaMMX5LDU5DRSdrd7sDtHg20XeOuhicgB0Ok7vdhYPnVLQ
-ScM70S4i08cZPDlXr8Z+nF+ZKcKkUYo=
------END PRIVATE KEY-----
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca_untrusted/ca.crt b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca_untrusted/ca.crt
deleted file mode 100644
index 76fe93fe37..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca_untrusted/ca.crt
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF3TCCA8WgAwIBAgIUOKdLLfMki+A4K1wkFWfubBhsT9YwDQYJKoZIhvcNAQEL
-BQAwfTELMAkGA1UEBhMCTVUxGDAWBgNVBAgMD1BsYWluZXMgV2lsaGVtczEWMBQG
-A1UEBwwNUXVhdHJlLUJvcm5lczETMBEGA1UECgwKRXZlbnRTdG9yZTEQMA4GA1UE
-CwwHVGVzdGluZzEVMBMGA1UEAwwMY2EtdW50cnVzdGVkMCAXDTIzMDQyNTA2MDgy
-MFoYDzIwNTAwOTEwMDYwODIwWjB9MQswCQYDVQQGEwJNVTEYMBYGA1UECAwPUGxh
-aW5lcyBXaWxoZW1zMRYwFAYDVQQHDA1RdWF0cmUtQm9ybmVzMRMwEQYDVQQKDApF
-dmVudFN0b3JlMRAwDgYDVQQLDAdUZXN0aW5nMRUwEwYDVQQDDAxjYS11bnRydXN0
-ZWQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCffq88kHePXRL70jOc
-sc+wLs4ya/vdVgcD3Q4/+AMX5LySWvt/ayaM6yfZzDjfzmPYQjVGuYTSr3pVN6oQ
-Xyn7znAze8Lg9wHLGdabanqeDZWr/CIKfj6y8cb/uBp2m2BMVT27vQOLvIJSqMNJ
-PJYVfyDIUA6a9h/fUt6D2n9rqHmK6VGbwzZt8A69IPX96UYKL+yUh9C1k2ZmYIIf
-gjtsG6XtnkbkGEtbV25Jbte0Ic3H6J57grLBUPhXFYhWV1yqk8Vj2MbCARTrI7qn
-QhXNvZy02/q6H92US+gBU5qnVXY1ZcrkpIVBEapRcyjCBmx8EcFiweemKymsCHJL
-VQUtCq08W1jxlWopbLUynL6jGmU+3P/ojwamCqx4LjffaofrvQkVTkKfQs8c7zum
-rGVNemPi0maSDJ51lzdxLN9pE+D8t1UUetZ/Itb96EQICk7tx3oPkCoMCiKralUG
-NS1KUA4DKugKOjnlBRNsPdCnCELtwHXsiDFSDK5XiWH8Fd/qbFssafPSKYuJWibh
-+HBC9HmxB9zzdw20SWtcojqd6P+xvZw5jzXyR6AKXWvmXQ6mOyS0OIq48zvhpKH+
-aFdESklD30YtXR7FPHPcQsguwKbb5sHp045cQBJvJytTIqHBbL4yZkG96FZuUsmu
-4KxMbhl4tV1Nd4OtWwWBtYiflwIDAQABo1MwUTAdBgNVHQ4EFgQUe8AgLxr9tylK
-dOW3SLG1BjnVYqEwHwYDVR0jBBgwFoAUe8AgLxr9tylKdOW3SLG1BjnVYqEwDwYD
-VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAjZ8oHcTBhsqljPA8tvj/
-GJVARvOhBi1TQYfbjq/gVqvS/hxABY/8n4tyuwcw/NvU56AMplj7lyZ7WFp7S/mu
-UpIViuVfKo/+mRAEPR1chIbkc+34gg1EAWR15Zhgdm8dqleBdtqEJooEtEsPtnnn
-6Pd5PdYuQ7/gMlVnrjMeHN+d6Ey3ZxB84mrbpk1jsFjbK/W4F4cRozeAiPdIAHuR
-JAzBpzFrcL/NP6inZGe+gEVhBl/xci2gdpzPwJP/7gfaop82t5U61UYXuLXHX2p/
-zC9vU5kZ/8wsH+PkZa0MxCSeTYAecAWJNpXo/Y8fmcz8ty6pFujgiHSKTJNW6FwE
-x773NfQwEEj/VwFKbiMTSvhBSQE4tZr+w+n6Xj3gjP8Nmg+E4BH3K1v9xHZjb2tb
-w3e3ElBMpHq3w+Y5SdLAxrAowDXkf56IqVhg2W8Vochz9GVlq9bAUZ08kVj/KJul
-XlcL36dB71vSXzWTHVraGR2w/iWr9ymJ2y7ziCvycpvLJx+bZQ7/64VrsunLDrYk
-AnJC50aYD0RRK058BmnTvTHj3R9IlWGajzX7jx47cf4hz6yaqa3Ero8YwtVQUJ5r
-b4pg/IWTgubQvYvf7SRw+89l/zncTiklsH0PNi+F+Gmxr4sGJXj1rBnlBSwRNWi3
-vuQ358hUhqfB76+BqCnvD7o=
------END CERTIFICATE-----
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca_untrusted/ca.key b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca_untrusted/ca.key
deleted file mode 100644
index 9832ebac2d..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/ca_untrusted/ca.key
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQCffq88kHePXRL7
-0jOcsc+wLs4ya/vdVgcD3Q4/+AMX5LySWvt/ayaM6yfZzDjfzmPYQjVGuYTSr3pV
-N6oQXyn7znAze8Lg9wHLGdabanqeDZWr/CIKfj6y8cb/uBp2m2BMVT27vQOLvIJS
-qMNJPJYVfyDIUA6a9h/fUt6D2n9rqHmK6VGbwzZt8A69IPX96UYKL+yUh9C1k2Zm
-YIIfgjtsG6XtnkbkGEtbV25Jbte0Ic3H6J57grLBUPhXFYhWV1yqk8Vj2MbCARTr
-I7qnQhXNvZy02/q6H92US+gBU5qnVXY1ZcrkpIVBEapRcyjCBmx8EcFiweemKyms
-CHJLVQUtCq08W1jxlWopbLUynL6jGmU+3P/ojwamCqx4LjffaofrvQkVTkKfQs8c
-7zumrGVNemPi0maSDJ51lzdxLN9pE+D8t1UUetZ/Itb96EQICk7tx3oPkCoMCiKr
-alUGNS1KUA4DKugKOjnlBRNsPdCnCELtwHXsiDFSDK5XiWH8Fd/qbFssafPSKYuJ
-Wibh+HBC9HmxB9zzdw20SWtcojqd6P+xvZw5jzXyR6AKXWvmXQ6mOyS0OIq48zvh
-pKH+aFdESklD30YtXR7FPHPcQsguwKbb5sHp045cQBJvJytTIqHBbL4yZkG96FZu
-Usmu4KxMbhl4tV1Nd4OtWwWBtYiflwIDAQABAoICACp39pw3UYacf2ILQg/ursEY
-bXIym6F/dyW5tkIlPVme3/FOhZoTg3PRZ86QGPLLB339fyciXfIlpHrNdByg4lJ4
-0Rp8UVNKojEc466FZznvnxNo8v19SR+nzleoA2/ihn0800/KkAekvcTZyAoXtlTq
-AWYlHwZ3E9yIudQ9GWGmvhpVbxP9ImCao6oLfUTLWQl8Yk/YbCP1KDaJawyNxlnO
-cNu5IeI5b9NWD/lAqPH/cEZTM+PqVMOx1jaF9sQaxgNrjos8HQxqclH8NQa1S435
-d6EW1Ae8VWlX3uJ/ivYUhQHJ5YEFJ7BATmwasFcdk8Rji+1KeW6fHpz+sMRLUrGU
-fc+V/SYd1KShShEOFrY1CQYTx+ix3M1+v+3MwalKzH5PKgZ9hvNxav2+JpP6amq2
-wNhlLRekfQo8OAgo3r53JIepQsqXaso2qy8AZgXhkTS85Xx6wBe9UBWkrQwXYOvK
-fz/t84LfBv2mhB+1Tl/bIyNXR9p81gQpjeySbxnOSPAV3KxjHdrGtH9v8zDLM8n1
-fSJ6uZMIc2bB4i5yfcuwSdYhnXwiqmaA9e+5K0hfF3GlaPNSm78ez3ssO7oputGg
-wOjeIVlyQDDUmBh3IqdFz4t7Co+TIGQAG2tkKyHT/bgklaqcbNqZ8K9AS1tBvFCs
-VGS4lo2PMT/3JMVVpe65AoIBAQDN4gooESixrLcL85UqULewUY3xECJKnwGQCfGS
-BxJ2pfYqKSrAQf3HGbE5MnpRd7cixP4cPIqUja6yeMPcO0O96CloqpACOtJ+COlt
-s+zDDhPypxz9mFJ4xfc4RHZSGuvkAY6D1sZl3B+zdqU2rwgNSFjGQsGnhgFI2Y21
-r1eysdeEfoCZmPWhku3CSUmOSvAgQnBDFx7UPBeM5pw/3jV6lwrhfdP7mS68Oeua
-ibsxpxhBLjY3/SnNZFzbMoALxaXyr2vWQJGGBtvemIq7yInNCRM2jdJni2ltX58A
-0Z+soHkHTMnyu+tjig40OBoUF0Qw0LjK/r4WdTdso7sRlJS/AoIBAQDGUeNfp2cV
-pq/PUlwJyKvu8LktKPGvxm2J85eFoO43tn2C96hPrXOzK3nK0ZCCANrA7ctPXwcH
-GJP/0ISBGuyo4ULGBb7VOrQNgbwGPlxgHEgCZo9Asc0WdXmVtzXI12wJfprDMrrg
-Z7UHD/xLv9XWxA+bCiVjYwObUYxRQ4NLHhP6xJYp+IeRjdKBCX/SY9wT+lfl54Jh
-bY1QYQoqL4tSo1Nuj5v+Nj1WY7YpggF4wzHshC37wT0Lw6ubqLc5MTV8oK2pAM2d
-QTEkoT8CpL4cf0X0aU4ye71wTroBCWeKo0SImGQOZSi3OtaYXYYVbsJiwCQp5sMc
-CWALhUNd1XMpAoIBAQCO9ykAW7H7dykA9pudb8GugWNkg0Sctr+6Cv2h3qFWnLZM
-3pteODUGvfOP+VpxGgWk8lBWwT+mGqC2NCAl3U2UIRQoJ1CrC7fBZ2TZFfkSFcOK
-W7tI6i5SyX17qCbVqvYlNWOGb20DrJCi6X+ecnrP5m4m9pJNR0O7F79M676lStOS
-oNmiT1I6abIKmSOn2KfYbupP3E0/KZ9c64KS4zYVs68NmHfMnbmTYVEW1g+UUikI
-khN6W6VciBXm7LF3+z7aQDBM7jdfb4Hcl+a2sXHnXCboWiFCX8/M8HqUcfxEPobs
-p8kQcqfpTiPA5ThOvT1P/JBl/fF33Nuo6CVt9tQ3AoIBAQC3wu0ClyUnpLpHSrNJ
-xY2664dKVyQLkbuyFeqSwZm6Ofh2wHBO1BPfMyu5SRGzxILuPekjdJQYeSe55EbD
-MmWT3pZ20qAPCEQKN+o3htUloU8AGnQmqBm288djeM33edT7vzo8IOeUQ8Qz9RX8
-QpcsV6N2L6KRQw/2fUudiQdBNW+h70KNRWKo9lbVhi3QjwM/57pGp4viJxbIIgK/
-MCrSuc/3JE6Q8UVIpUAHmhUvBv9dfuT04AtmuTpsE5si/XvoLSJ89OeRDPUyUc8G
-7gvScAQsAt+YW5wfUnN7vnEYv0wjncEorYdasMRjjlVNysGHqy5XPSIQ+obqZeMU
-MVJxAoIBAQCSWSfxGEfmsp4qINA1lx7hCT8sBR1VSMQw9D5lGXiTs7GX/+yPsf15
-LDIpKpFxGOaUIC2MnDEkG9/zWKWavd/JRj/jCVnl3e844BZw9k2gulEfv5hdu0ct
-bY8UKAC5Wv6iyHmq2YcrnvN8sMfnPlqK4OY6PVjPFAUCSTS5XPjGoyiNd2CFhbKD
-4B14sqaTviyFeJKtxNnu6BNoQhjj4nvZvzktFlRJLvRwTVOVvELhjkYcoue9G5i8
-XAaSbAnUwCBc7cblSrk6djB0LQhZ1ruldsVNAUFkQ1o+9ERgFqPnUc6Rb5kWB8Fh
-tKSXzb/URtW5aTqTJsCXd2hi9odLLkAU
------END PRIVATE KEY-----
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/generate_ca.sh b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/generate_ca.sh
deleted file mode 100755
index 9086f7ddde..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/generate_ca.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-openssl genrsa -out ca.key 4096
-openssl req -x509 -sha256 -new -nodes -key ca.key -days 10000 -out ca.crt
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/generate_cert.sh b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/generate_cert.sh
deleted file mode 100755
index bc34b6f169..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/generate_cert.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/bash
-
-if [ "$#" -ne 1 ]; then
- echo "generate_cert.sh "
- echo "generate_cert.sh node1"
- exit
-fi
-
-certificate_name=$1
-
-DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-pushd DIR &>/dev/null
-
-echo "Creating certificate directory: $certificate_name"
-mkdir "$certificate_name"
-pushd "$certificate_name" &>/dev/null
-
-echo "Generating key: $certificate_name.key"
-openssl genrsa -out "$certificate_name".key 2048 &>/dev/null
-
-echo "Generating CSR: $certificate_name.csr"
-openssl req -new -sha256 -key "$certificate_name".key -subj "/CN=eventstoredb-node" -out "$certificate_name".csr &>/dev/null
-
-echo "Generating Certificate: $certificate_name.crt"
-openssl x509 \
- -req \
- -sha256 \
- -days 10000 \
- -in "$certificate_name".csr \
- -CA ../ca/ca.crt -CAkey ../ca/ca.key \
- -passin pass:password \
- -CAcreateserial \
- -extfile <(\
- printf "
- authorityKeyIdentifier=keyid,issuer
- basicConstraints=CA:FALSE
- keyUsage = digitalSignature, nonRepudiation, keyEncipherment
- extendedKeyUsage = serverAuth, clientAuth
- subjectAltName = IP:127.0.0.1,DNS:localhost"
- ) \
- -out "$certificate_name".crt &>/dev/null
-
-echo "Deleting CSR file"
-rm "$certificate_name".csr &>/dev/null
-rm ../ca/ca.srl &>/dev/null
-
-popd &>/dev/null
-
-popd &>/dev/null
-
-echo "Done!"
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node1/node1.crt b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node1/node1.crt
deleted file mode 100644
index 4c3aa61525..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node1/node1.crt
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIElTCCAn2gAwIBAgIUGmJbCD3Le5HWkxqi4LbaiYjE6XgwDQYJKoZIhvcNAQEL
-BQAwczELMAkGA1UEBhMCTVUxGDAWBgNVBAgMD1BsYWluZXMgV2lsaGVtczEWMBQG
-A1UEBwwNUXVhdHJlLUJvcm5lczETMBEGA1UECgwKRXZlbnRTdG9yZTEQMA4GA1UE
-CwwHVGVzdGluZzELMAkGA1UEAwwCY2EwIBcNMjQwMjA5MTYxMjI2WhgPMjA1MTA2
-MjcxNjEyMjZaMBwxGjAYBgNVBAMMEWV2ZW50c3RvcmVkYi1ub2RlMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArqXOfwJmN61y8kkBb373DJ+JJ4Vt5WLa
-mkatFPTsEzXnGN+UWNxzQfH3cqgUMQVj0JBS0BT5hQfHU3zXt6A3jyRplqzG5ONr
-TgZBFgadTWtvOjH3yCOeAGwJ1gLT8bg+3BNWS2zq4J6PjMFFsLdyABPb7cVS2DhJ
-SHFVNqJGMpSsMmx0PUaDLAoIvKmyMIKaCQluQ9mKY2qnxA7hJw7PGPT3zsWGXtxj
-YZVOiclWtrc3b02uaUMdxu17hC6utULtMzIpI7XJsmarS3/KTff3YbOb/IJF4/M0
-XH7kABCTHirdPGGzMT7fHi/2mEN232qkAN8+rQRxpXNxXT8mba5IvwIDAQABo3Yw
-dDAfBgNVHSMEGDAWgBSKcv8pBZwMD9/ssPnsztZoigZ37DAJBgNVHRMEAjAAMAsG
-A1UdDwQEAwIF4DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGgYDVR0R
-BBMwEYcEfwAAAYIJbG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4ICAQCMGdOPgBiK
-4t0T+GRlP+XIh8A1ecc182IO6lPPi9Hr4B7leCiZ8tlDa68Ykt2U6rZ/f89h33E4
-THQUeHxMPDtO0FI+VPF/gvpzuxJIAPNgHFbgVddSgzhPGY33SMEjDcMv2cpnzUPr
-317UnvJoZ0bez2ogCVHWqg73JH2AVcmVHSPdED1sNUNqXGahvJ+yKx7iM1m5wdV8
-OPVjMWm9bK7ysGRRBNkkuhDAb3qSy+8MTz+puvDJ08yISvh+au4so4Yl3jh3Wu2C
-xUSd4RAJdneK+3DrPU2YU3eNE+n8eX2ijxtAoDOSM6JyjWf2fkTOfH3rDhq3bSqG
-6poSaebEPTRuq3bl0D+pz6uCyjtBfTfmKlhG1BH1kxNb8vFt3AO702Fa+uORf1uf
-SP6srKYsNRriwl3yI6+NEoYaAcOEjuJ2itlP5vUneltm8Ndpk//5PSf7DK/kE5zR
-12nvMU5wez7P1LjrnbEX1841QhsnZHX7HNZ6wxAwnDXAoaXm+Z20RJTD+7HKRhls
-jk83BiAWMRsQDR0RmauyJw6U5BNLeR7s1jUMx/viZxwDXKz5VAGHn+1lqdl5aQP3
-Rw041Zu75ZuiIO7LOWCrgdMp3W8pCJ56CmpzazupisNLuZvIro4BSferwJ9Xmk9v
-vOb+MTeB+xEmQY85QF/TXIrdoYMtWsMzlA==
------END CERTIFICATE-----
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node1/node1.key b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node1/node1.key
deleted file mode 100644
index 7d7c8f6142..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node1/node1.key
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEogIBAAKCAQEArqXOfwJmN61y8kkBb373DJ+JJ4Vt5WLamkatFPTsEzXnGN+U
-WNxzQfH3cqgUMQVj0JBS0BT5hQfHU3zXt6A3jyRplqzG5ONrTgZBFgadTWtvOjH3
-yCOeAGwJ1gLT8bg+3BNWS2zq4J6PjMFFsLdyABPb7cVS2DhJSHFVNqJGMpSsMmx0
-PUaDLAoIvKmyMIKaCQluQ9mKY2qnxA7hJw7PGPT3zsWGXtxjYZVOiclWtrc3b02u
-aUMdxu17hC6utULtMzIpI7XJsmarS3/KTff3YbOb/IJF4/M0XH7kABCTHirdPGGz
-MT7fHi/2mEN232qkAN8+rQRxpXNxXT8mba5IvwIDAQABAoIBADScIe5ErMIM79lo
-gJQzrPwSeuB64zX8Z1md/LmZZhwLWsg1YZy7G8U7vIy/cQWrV/wV3bxs9RVL2JGf
-w+O+0b2+/Ee1WFzO3R4t6CFYcL5HpMPlFX0mrYv2/6eGRo5EMDtfX9lsv/xWB2wh
-NHsdZ6v6T3/6txAHNJwr971zeK33d8y3Fvb6lnMKEW9eIKP+/hzqMkOIpzTmz2Q3
-M7uTcR5ItN+Ik7X1W4lbAJUAUvflCAkJy6fwMDcIB9c0t2tEK6X96iyng8H9A7l2
-8adNatiosNlLRI1hEMBat0/04m6RC6s01fQaPqgIn2IQRYrl4UX+gS0v/Ki0Pol1
-zOgVALECgYEA2eifns3XSu5BFt+D5gJ/kujrkb4YU9h4hNoHbCZlucf2viFtD7dy
-qFNPxipO5B8Szi1M5seBl/HtJ2uyQ50UvH+Yn+1Iy1QOdk+uaoJto7GPPhfIfhRb
-2lIZGtQWnCXuGWj3ClNZ8GH7P/b4u+yqlbHADbWKITbHlj9mBVOlbIMCgYEAzS1C
-td8+fv7jDgKaUkkk5Z6EhWLIdxLeXtXsEiFFWxwdYjWwzm97+B9UXjqw/Qc2cxYL
-0aVjiLHonO4GH2rqv5/yb/8wblxCgONNEUm5WCXWzYq7NXrQ7LvmjiLRqEqWGz96
-uVlXFi2TQJ5xjzUZKjC6u0eZuRG8cB1Mlc8IdhUCgYAYnWFig+f869roZYk1szSL
-+MmbZfjDh+FdSG+sNM4q5T6nDYmPS+6kuvx46xCMTkJGjfFw5DpsWoSqfkzdvGG6
-RUONVTVy2mTj0m5mU6Nk6Uq//dnE/DHAAKQbVrfTHam+rw+w1+eB8t95w0EnoT1H
-uZNzOP2IcPKssy6oDWHTVwKBgEXjyPmS1gMEZ+t5z3+AEuV0nceh4o9NChpb3FJA
-qxNh/FBb4aIwL5ZRdbezXl6SemWxeM0s/T6u+4GZQtSo4tXrcfXcg27UVoL46mOd
-LVltakIRo7uP3mMFjn+UNL6SyZb2hKNmX1fapnI4ho41lCDfAHyS4zY7aGj4UgIl
-x8gRAoGAD2T5Se0Q8zAUK8dYoa4dSS7wRn33alCR4FvJHm8KiL95Cn/nhic3u3St
-6poLD11p1Twlk/aXKQd2LVVXw7nQt6izywJPrbv6gxdx7tmKIgYLyc94bqcVjl/i
-ufe49i09WJ4qNxIuKZDc7JidAZKsJiQMArJANXFvVwj1CLN/A5A=
------END RSA PRIVATE KEY-----
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node2/node2.crt b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node2/node2.crt
deleted file mode 100644
index d6c203789b..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node2/node2.crt
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIElTCCAn2gAwIBAgIUW+7IruzFkAcTBpY03iGey70VKzAwDQYJKoZIhvcNAQEL
-BQAwczELMAkGA1UEBhMCTVUxGDAWBgNVBAgMD1BsYWluZXMgV2lsaGVtczEWMBQG
-A1UEBwwNUXVhdHJlLUJvcm5lczETMBEGA1UECgwKRXZlbnRTdG9yZTEQMA4GA1UE
-CwwHVGVzdGluZzELMAkGA1UEAwwCY2EwIBcNMjQwMjA5MTYxMjM0WhgPMjA1MTA2
-MjcxNjEyMzRaMBwxGjAYBgNVBAMMEWV2ZW50c3RvcmVkYi1ub2RlMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4N01FVHAofXzLnidQk3CsPthhE7JnuwH
-wqpvZIkq7FUem6zFzrsUarfrG052tThCTgYlqUwTHJqYeBPiRSU8IlgmGcbU0YGf
-ztYOEboEK90JCFb21weFkxMAcmf5iwbZryNbzXBB6izeWZ3US1ApFfstxr8dlPzy
-BvyEw3MNMrDAnha64L+4JLiZbIao948wDNfTT6kopftAJoNHy+EauK0tJz5Ns8qN
-geW8lIzsOvR/hmzdcEmtEPwYYmeVuVp6/YZwfjfRZET0CqIzMPx62myJuh4otXxV
-3P3shh2+xR/oxzF/wuGrSLovDFneFrxjhd+Tv6VuTGgkJLBuzwGQsQIDAQABo3Yw
-dDAfBgNVHSMEGDAWgBSKcv8pBZwMD9/ssPnsztZoigZ37DAJBgNVHRMEAjAAMAsG
-A1UdDwQEAwIF4DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGgYDVR0R
-BBMwEYcEfwAAAYIJbG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4ICAQCITjv8cPa/
-p/EyJXr1o87CmnCj1bKOVvdZGv8HnJWJrtWK3oL24I8lyPtlSTMkpv0f1GWNBZ6b
-MiOrutSYhe5leC5H6hvJM2WslsMdNeYbOhFYXblD6/1A/4l7FyAlAgFgO7r1QoEK
-+uVF1DdeSnfMhBreB00mnKHAIl35cTqYq05BU4/QEIdKhZpRYmbIdmGaV9iGTKpP
-FQVuq0TenVWuEk0UXUo1+TyTdEa7BxHkBbOxkMxo2kLmoz1y9ixb3xZ8nFvpuOah
-1/KSM0sHc3opiE/egPJOOelkjnp3LryFq0H1GXpfiSx9bqieyub4DmH6+fwd0Q1F
-i9htDJE2XvR4ZOxc1zZUd3/95d6VWCD+Q3drqqLuDXVHYLJ08atAHFU4QYs28rh9
-ngjI4dFhnU8SUQN7TEqZYi+DWY9VgtFBTB108WH/d9ccqSes2zbF9L/JdyRhu2Fn
-GINDa9XZgdLASp1cbxFPTKzSG3zPdSqMHm87fvranjc/6CMD0wCZ2zeep58GzVnx
-Y6/XNN2qgcPND5ouQhgB39Q+cXS+RI9uRuAVnfJBlSz8kl39B/SfBB21Koxycjmg
-xDtd6RV0Ha9sInSClzK4U0pRTfjbidomLUemjwgC3lneq4GF6CaWRohmqXFeHzAu
-dM3Q0YkzSmYanm59A5soH79UBlB1WLk1xw==
------END CERTIFICATE-----
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node2/node2.key b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node2/node2.key
deleted file mode 100644
index 06ab14d413..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node2/node2.key
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA4N01FVHAofXzLnidQk3CsPthhE7JnuwHwqpvZIkq7FUem6zF
-zrsUarfrG052tThCTgYlqUwTHJqYeBPiRSU8IlgmGcbU0YGfztYOEboEK90JCFb2
-1weFkxMAcmf5iwbZryNbzXBB6izeWZ3US1ApFfstxr8dlPzyBvyEw3MNMrDAnha6
-4L+4JLiZbIao948wDNfTT6kopftAJoNHy+EauK0tJz5Ns8qNgeW8lIzsOvR/hmzd
-cEmtEPwYYmeVuVp6/YZwfjfRZET0CqIzMPx62myJuh4otXxV3P3shh2+xR/oxzF/
-wuGrSLovDFneFrxjhd+Tv6VuTGgkJLBuzwGQsQIDAQABAoIBAQCzMjWyZrMPntQM
-DZytERD9P2doK+1rE4ffrzkUMmedbPv2bYo5hEbyAN2AplfddRcJ3MY4k2KLofut
-fZMNLW4tpHfAhP5mc1lqWJVftRDL79rZ5YvSsrDVEwiBI7DvBSeG9bOcFUDCIL2V
-Rzy+RARp+wBw6S7m42jw/l3C8DXtVQV/lzk/QtIHCqnZdZDPqjin7aW6/MTjqk+1
-TRRzCAWWWvY8mBw0wZyEgebcT1ROwajUVLC+7z0RA6DiUUClA81fBJaetvzpwmG/
-9QZS2/EbNNvmV5UmOM62bWZdW5D9jAmM9QOzVjdWdkGFhznGtJuAxjzOwNe+Z4/4
-1NYzFDIBAoGBAPoMcbABIlwQneDMP8xOyrwzaIZkJPSaPZm/Rog0mZU2kABx28yM
-DWRNYAUQ8AFOhNb58gs+uGu2AN9n1XghPsj7ZH+jiibWD8ox2awXDBkKy2obc/tI
-KtEfvWhvEiWPmAv9W4N7stVK3N5/SwbivBkwJrrbjBq/QieaFCoezAbRAoGBAOY3
-UCGotezsgBVjxzsPPyPWqK+kP5rbQJ79Kn7q6hesqusi0+kmYIwbE15hhVZqv2km
-hbUTF/9fZjUF/bKl5PiaawvXZCrZL+0Ms/f+EldQ2j9GGo+Mv4q7nUL8svlyt954
-P+NOo4ljyYCMn3pXVeCoXZrB4w1zhBjNdyIO8SPhAoGBAL5ZbspPcrqnI6iXlBGS
-AZ+XewCjh8Z1DGPYSncxo6EFckYEZxClpSQwCuKQbERyY4nLqEiLLJVCbhOj1cun
-c0ZIqc7IzkiWOFrx7ASnXtxJbWSPFZG69G1SPjwcIbJaR6MI8ft71T2tycnPGWxa
-elqqXzFsJJHP+ypujt8ppqOhAoGAXl3uCt4NNMD8/8eWsy7cwuQK4XSCXgfhxUoh
-UUUaD/pHVXtBQiDpEoVGuzleXr4DGCciR8c73wJL8xAxnjlCUmV527C+7pF4g8Lh
-QpZzDjemPqmN2anoGgYtwHe1JWtQ03CXP6XMg1TUFE2QUaXbHevl8rnnSGxBiakv
-XFajogECgYB2LxjHqrM3PBxlne+RHerhTBPfkUm4uLwllby6kSPCXXy9NQm/NVP4
-tKmh7NdnaBr1w2/qf9qHEAFOD8TjRALpj/ykQy3ep5sQ/fgJZBHs4nhxs37yyzIo
-7/DrKczuJnRAYcsOtTrASjsleZ1f2DHHJIkOS0F71WGnwR8a/UfdFw==
------END RSA PRIVATE KEY-----
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node3/node3.crt b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node3/node3.crt
deleted file mode 100644
index 4cbfe52423..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node3/node3.crt
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIElTCCAn2gAwIBAgIUObXdVNzmq5Hx995l4Rq+4GvF5E0wDQYJKoZIhvcNAQEL
-BQAwczELMAkGA1UEBhMCTVUxGDAWBgNVBAgMD1BsYWluZXMgV2lsaGVtczEWMBQG
-A1UEBwwNUXVhdHJlLUJvcm5lczETMBEGA1UECgwKRXZlbnRTdG9yZTEQMA4GA1UE
-CwwHVGVzdGluZzELMAkGA1UEAwwCY2EwIBcNMjQwMjA5MTYxMjM2WhgPMjA1MTA2
-MjcxNjEyMzZaMBwxGjAYBgNVBAMMEWV2ZW50c3RvcmVkYi1ub2RlMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtRnWJxkP1ftS1qTiuDkXGOddi+2J72Zd
-8GFv1t7a/8dgqq/gjBykhEm1KRlg0rbBaea04TXla2OcJ5KLBGgQfHYN99lyizTx
-e1zD9XWahsO71uBoMwfmZSomoiEgGN08FMSrdoaD82m7Il8bE7osw6GFM1PiExei
-0buoLUZ4aNAc4C1nMHrIIMUTa66LUVBXg35VAwNPHOyPH35uccI5B9/NXyBTHkhq
-/WC+FLcRDC3lo1Ez10rVlrsRs6LFFL9JtYrpAu0MnhubsRlvVvehzWeNK736g5bp
-CrFlVLhx2ErL7GGgYviu34CT+o9f7TCUSYjzk+ArOwXvJdQ37OCE/wIDAQABo3Yw
-dDAfBgNVHSMEGDAWgBSKcv8pBZwMD9/ssPnsztZoigZ37DAJBgNVHRMEAjAAMAsG
-A1UdDwQEAwIF4DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGgYDVR0R
-BBMwEYcEfwAAAYIJbG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4ICAQB4I0f8/AbA
-V6Ml9Tai4V/ArLwAtcHoEJnwEs8YMf27iCQwYvDF/OQZkMk75bHbNycKdluJbmHJ
-bHZPGuKQHKvOfNTdr3ciz5RqsccgOQ+3rJ/q40z83TsnWtAxyiZEzkbn1X8JqBmX
-AFcl28jV1EwaQtqJ0XRsf0+JTzhj5WhMXh3viPJ1kpbQE/HzKzZ/sghNxVwqxUq9
-EASrxZiJYYjz8hCppGVo8P9t+2tsrdlvgK/+ljWNxcDlTeQrZZO/ds0AuVpWbtFP
-2TRJapwPTOBkl17bvobs9hzWxjDNli4hnFgzeRMGJ/gDd4Cit48UgCHoWxWonqo3
-FAv/Y6cgdAzyQZI0/siAIc13MQl+xiYT+WurcS5NVRpYZYAY+m473HJ/rzhy8dJk
-Z/ofLrtAlQ9k6DZU8XSzHIrgs3AtiJEaTlmNTCR5CFWuUM5VcIvOljAqoMTe1dIo
-/HhqZpZ9cmklhNd4F9BZKa8QaJ789mhrOIvihx/vBMYXIbwiNrILZWZ3E/MDg0ho
-rvjnKxxHWcAH+bLnvEk1WV7ItfuDQIJr3MqunChSA05mltjo/r7g6N6MG3s67OeH
-2qvCv78vs29dPpfah7rC+dXM6yH5AtsP26nindJ7LVu3eduWmAHeqcJd21NEnGUA
-ar/DNwXKDcozLEXD4PCdSskhzrrXO6e7Nw==
------END CERTIFICATE-----
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node3/node3.key b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node3/node3.key
deleted file mode 100644
index eac058ebe4..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/node3/node3.key
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAtRnWJxkP1ftS1qTiuDkXGOddi+2J72Zd8GFv1t7a/8dgqq/g
-jBykhEm1KRlg0rbBaea04TXla2OcJ5KLBGgQfHYN99lyizTxe1zD9XWahsO71uBo
-MwfmZSomoiEgGN08FMSrdoaD82m7Il8bE7osw6GFM1PiExei0buoLUZ4aNAc4C1n
-MHrIIMUTa66LUVBXg35VAwNPHOyPH35uccI5B9/NXyBTHkhq/WC+FLcRDC3lo1Ez
-10rVlrsRs6LFFL9JtYrpAu0MnhubsRlvVvehzWeNK736g5bpCrFlVLhx2ErL7GGg
-Yviu34CT+o9f7TCUSYjzk+ArOwXvJdQ37OCE/wIDAQABAoIBAQCpRs8fmJNuxg42
-R8ULwYFPa+PKyWum9B5WdB0f0QsPDgPTR7YyAQveAy9sjSYtj1nWbSkhYUliSadK
-bfW3VrYiQA7qXrxsVj5putoH87dOxGIthXCgUoAOi4m0/hWMaC6ikvpaPX3U5j1e
-8VrT46+35KAmy/+DLRKpzCh0uWwPOvTSDYnDO7S5TeAprdlLOxY0wrvAiYr2R9/f
-bVpydCj7morGJaPP7OKBnRb8bj+XH3Gf3DL9I09XhakrlJhXD0ynjLGK7wKwcVu/
-sMO1aGqxjaQerp9qojcp1vkxaYedfQNdjY/0472LiQ7B3UzmKvJ/KGm8SGAuw0ia
-R6kNBFlBAoGBAOLCgn9b8SSFSGgr4ScXDQxW2Ievh9vDrqkjg5YRGsZQ4tY8XObF
-1i2la0oaXAiWU0dPrBGQK2QHWt93LrB9vfgH4XDl+GWzljZ6xTvOZJnV84uqqau5
-fLDbbNhalZzY5b0E4xik5ZuLUnLD5pCbkyrenC6joh3XuvzYfiJP5gxxAoGBAMx0
-GN2L6pn7pPLlixDklR0Fi2nVnMBV8fkLLZiZBuIWXUQHASGVjKH27nAm5ilpHKcS
-fHFyzQwqIUgwCutT0OKWYQqwxkqPvDtkbhSZdyxVMjQ4QrHcbMXwCcn7L6hLV5TX
-IA+PQPWpHveJRUMDhHw0y0h1Xp8wpRueMyAVQyBvAoGAMniuySAyxTkxS5Zwr92u
-ls+BtHm6WIzuhFEWScGW3wtD4gFfgDIKoPBPuBez4mlrMdUm7GXVcpc8f76sUrY6
-IUnHwPQ+3IwjZA7hdZVTyPXZFn4u87z+ZvMAAAvxfw67292JmoOhY4SYHllCKW+n
-SwRvaOYdAF1zDjI1qPd1sdECgYEAofxJxx4X3bA23AtpxxST386Iym1oKCrv7/Uf
-RwvXHEHD2yYBi25FYf2WpFztdlnFTcmjtu7R7pVikSMfQ5vAoAWtFR9Bu8ltxVCo
-tsFwXjuR7zW0Ad82fwzTdKgC9j/bQB3BVRKW0QwRcOXdbl7XFOFvPhVfxphv+BW7
-Q+wUpxkCgYAMSQRtXVOAelCej2e7I3Ufd4wWg+4wkP7sPblHccNnSZ+ZtxFac/6L
-enSNP5NwgMq45KCjHFYIeMfxokVWYjTxrtbm2NJvem2nXPSLhmyBbdjfj6rLfA9K
-xGiGW7bU3qRQUpiDJ7HZOUGUjUe9crirIuZN8Hv0AAazQDrpYP+tYA==
------END RSA PRIVATE KEY-----
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/untrusted/untrusted.crt b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/untrusted/untrusted.crt
deleted file mode 100644
index d1107be6e5..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/untrusted/untrusted.crt
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEwDCCAqigAwIBAgIUcY3ZNOQsWA95vhCh9IlrHdRS3/UwDQYJKoZIhvcNAQEL
-BQAwfTELMAkGA1UEBhMCTVUxGDAWBgNVBAgMD1BsYWluZXMgV2lsaGVtczEWMBQG
-A1UEBwwNUXVhdHJlLUJvcm5lczETMBEGA1UECgwKRXZlbnRTdG9yZTEQMA4GA1UE
-CwwHVGVzdGluZzEVMBMGA1UEAwwMY2EtdW50cnVzdGVkMCAXDTI0MDIxMjEyMjM0
-OFoYDzIwNTEwNjMwMTIyMzQ4WjAcMRowGAYDVQQDDBFldmVudHN0b3JlZGItbm9k
-ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPgRI7yp/BiAtn+ClWK
-E9R7s/RE+q8cc5vxXTNM8/SVZnyjFVkyrRNnS9wUpruf9n68/hqD+1a8mNA6dYDW
-tjVnq7LAFRnHV377yN3cLj3G0l7SPpVZbchvCyf9kaC863+J7QpkWI1jel+vdsDa
-wh1XW9ld1WeEXVN1O/JCrLHlLBv1Th436LvG0oxh7LPZ+XGUXux/mgs06ng3lO9N
-snoowyHlVKuAxokq+akgtmEfxyf+SuhqIs3FhmW6g5adk3Fy0EBAXJUGbeFrDO8r
-E6oiQShOPNj4M4qn1bEGpQ/yvZ8Gjf7tW9s7jFPBYbFlnv/td/7YGKlnyQIGWnq0
-G98CAwEAAaOBljCBkzAfBgNVHSMEGDAWgBR7wCAvGv23KUp05bdIsbUGOdVioTAJ
-BgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB
-BQUHAwIwGgYDVR0RBBMwEYcEfwAAAYIJbG9jYWxob3N0MB0GA1UdDgQWBBSSgCxV
-o7LRR14LUWHwUszgNlO1YzANBgkqhkiG9w0BAQsFAAOCAgEAhN5vF0a/GTM5w/39
-fXD7/G7Ty/6VDDgwiZgfPiTuUfPrNjV79PpxAtXF9k8lfN093I0AwEAmAx5YqkUN
-iFkHyT1XTpRX3gOALJonHbWOfXqq7wZLuc+KUj+g4soK+fQ1/pBqXG76YdFETTWV
-sF0MJLqzjq+CqgXZcyhtoDkSlaT90HaXwvb6Hqt1+Hz+8zlFO5aoPKHYFDT4/mXY
-cQzdMynkjjZJQLM4ZllpAqXnUl0qc5FZ98JQXtYhOvJlRfr1fudB1F743lfAVAn/
-wp1ih6TC/L8Nfb3qm6ljY/8ZxgQiS0CCQB70urp1f1PBE75WQ7iyZMPC1B9xZ2gy
-ASuTM/1ySm/Iw91R/tPhaSXQAkt2jMoUbaQzydk+Jb2e9IMnuJc2wU6G47WOHZHp
-r+uXjnB02p7tmW+AyOpoXEnFvLjOSUfcGXsYQ8+bjVShp5uStZjuuNj5UxCwQ8Sr
-ojC1apGCNyixfWBV1g0DGoHrpP4wYFn4gEVn4s0sHkeHBz82JEhDRKtUquZGBgyw
-9+7GgMNzN99e9ahBUV0igt5OuvQ91DVDOZf/WzwzmUu2CfK40HQxWpjxCIgNzstO
-ynIfM2X/4CrtK8h5qeGEjY8a0V0vcwHe3e/xVOmuJWCPnEjyh6HUyjcQo8OTL/WB
-NmHGXqYUx6c89kiFmBDR1iy/NZA=
------END CERTIFICATE-----
diff --git a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/untrusted/untrusted.key b/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/untrusted/untrusted.key
deleted file mode 100644
index 19eaebcaca..0000000000
--- a/src/EventStore.Core.Tests/Services/Transport/Tcp/test_certificates/untrusted/untrusted.key
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCz4ESO8qfwYgLZ
-/gpVihPUe7P0RPqvHHOb8V0zTPP0lWZ8oxVZMq0TZ0vcFKa7n/Z+vP4ag/tWvJjQ
-OnWA1rY1Z6uywBUZx1d++8jd3C49xtJe0j6VWW3Ibwsn/ZGgvOt/ie0KZFiNY3pf
-r3bA2sIdV1vZXdVnhF1TdTvyQqyx5Swb9U4eN+i7xtKMYeyz2flxlF7sf5oLNOp4
-N5TvTbJ6KMMh5VSrgMaJKvmpILZhH8cn/kroaiLNxYZluoOWnZNxctBAQFyVBm3h
-awzvKxOqIkEoTjzY+DOKp9WxBqUP8r2fBo3+7VvbO4xTwWGxZZ7/7Xf+2BipZ8kC
-Blp6tBvfAgMBAAECggEAAQuMJ94l53K05VW180zsOA2IgW8/AbTv/iRhSb+Ou7UB
-eWpahLNWLRmgAU9ym1rAHibV4UijyfJx+eSMGbWtVlgO9UTwZfdyCesE87GwBwNC
-svgPZKrzxUgE2OpBY4jgWVQsziTztlzVBe3mwm9WJqJAfE5zPmRjyi9yiASh1cxH
-w6DefFV+7eOPPdH9wYDMzfVHxKqfKTWiMaEKSybYWoxJ7boA5YrkCNpUjhUSObmB
-KeLtCuK91ltwInKJ6ejYmZ58sqqNmbmhS0cvwrvSbyoY+nJkley8Ju+uZOExDNLd
-p5Xlsp4fhjMFw3sApgmcGSbUzBhgLUXaDXkdJDoEpQKBgQDUbUJCIElUCyYsiEJU
-4Lv6MP5/YQSuMCkC3aBSd2JAtAh+8p/BIhs1gUG+j47x707bFT3x/P2Po+kEaQTs
-Areld6tsr8c0fJp0ApzdfSzkyigufh2pexIbzCektq4/T4//AnY0kSdNqSZCXLFo
-MoaE49TA9LCRgiRC3WiGZBdpOwKBgQDYxbyxEUQ0DL2hmx1IbelIhXCHd+jPptNZ
-JA3dpEQJei5Oa5UwO7ooZBuKc0AoZ9UVvDuaARiyNh0mDXe51TFGZMcpj/tWTB1p
-QJJMHLdNsGIaeViVMnDN/46xVWltVpg79jbgfBRnjoHMAApOxUa72gsB5zMHmRsg
-1kMH2v4NrQKBgQC7fO91E7AEyI5Z0a3R4kSnDuUgog2SfBlGWTvubUY/22aAPT55
-JNQlBj9zpJtCt7e+r+HrmiJlzAKXDOX2NHPITHX1yLMmhS+BYuj2qEueZzrNxiwB
-8QjLlgYLX90tLdjm91JDFTY+WiPVgKBoWefWlIur/ot08gt1JJvjuaXcDwKBgQCj
-RXx0Gb83PQlvuXd64F4/Y1J4lpZiIRM7Ju7SrDEauk46fsmlxLbYSV59D4WZaWuT
-rW1u97h0MlIOIUK2U5+Dl9Byu6HhQ/87EYmfjll6SIn7yr4v0ggpAH2nj9+SnRCY
-yUBYINz1it60mqso3WoDf52e11cWN/m45+kg9483GQKBgQCUZtAQ9Ozi4b2lxj/q
-WZTLmeLlG9Q8RnUSfj05RY7nMdZ8OKaT4spWtjTUvv3g7uWb/77EnGSbpBaBOFS9
-hAYSavGBYTSCkCTxMF6g5XSKBcpq57uKuAwURap0bNndsXmSAf2zZcLlms9XzFcC
-2NXP7cyUm13HL2gT5RKvxsuWnw==
------END PRIVATE KEY-----
diff --git a/src/EventStore.Core/Authorization/AuthorizationPolicies/LegacyPolicySelectorFactory.cs b/src/EventStore.Core/Authorization/AuthorizationPolicies/LegacyPolicySelectorFactory.cs
index 951bed56fa..70c44939ae 100644
--- a/src/EventStore.Core/Authorization/AuthorizationPolicies/LegacyPolicySelectorFactory.cs
+++ b/src/EventStore.Core/Authorization/AuthorizationPolicies/LegacyPolicySelectorFactory.cs
@@ -62,7 +62,6 @@ public IPolicySelector Create(IPublisher publisher)
addToPolicy(Operations.Node.Options);
addToPolicy(Operations.Node.Statistics.Read);
addToPolicy(Operations.Node.Statistics.Replication);
- addToPolicy(Operations.Node.Statistics.Tcp);
addToPolicy(Operations.Node.Statistics.Custom);
policy.AddMatchAnyAssertion(Operations.Node.Information.Subsystems, Grant.Allow, OperationsOrAdmins);
diff --git a/src/EventStore.Core/ClusterVNode.cs b/src/EventStore.Core/ClusterVNode.cs
index 7332610589..4ed416f955 100644
--- a/src/EventStore.Core/ClusterVNode.cs
+++ b/src/EventStore.Core/ClusterVNode.cs
@@ -1032,7 +1032,6 @@ GossipAdvertiseInfo GetGossipAdvertiseInfo()
_mainBus.Subscribe(forwardingService);
_mainBus.Subscribe(forwardingService);
_mainBus.Subscribe(forwardingService);
- _mainBus.Subscribe(forwardingService);
_mainBus.Subscribe(forwardingService);
_mainBus.Subscribe(forwardingService);
_mainBus.Subscribe(forwardingService);
diff --git a/src/EventStore.Core/EventStore.Core.csproj b/src/EventStore.Core/EventStore.Core.csproj
index fbe5f47564..5c3b635cda 100644
--- a/src/EventStore.Core/EventStore.Core.csproj
+++ b/src/EventStore.Core/EventStore.Core.csproj
@@ -43,15 +43,11 @@
-
-
- Services\Transport\Tcp\protos\ClientMessageDtos.proto
-
Services\Transport\Grpc\Protos\code.proto
@@ -98,7 +94,4 @@
Services\Transport\Grpc\Protos\forwarding.proto
-
-
-
diff --git a/src/EventStore.Core/Helpers/IAsyncMessageFramer.cs b/src/EventStore.Core/Helpers/IAsyncMessageFramer.cs
new file mode 100644
index 0000000000..23820cb0f5
--- /dev/null
+++ b/src/EventStore.Core/Helpers/IAsyncMessageFramer.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace EventStore.Core.Helpers;
+
+public interface IAsyncMessageFramer
+{
+ bool HasData { get; }
+ IEnumerable> FrameData(ArraySegment data);
+ ValueTask UnFrameData(IEnumerable> data, CancellationToken token);
+ ValueTask UnFrameData(ArraySegment data, CancellationToken token);
+ void RegisterMessageArrivedCallback(Func handler);
+ void Reset();
+}
diff --git a/src/EventStore.Core/Helpers/LengthPrefixSuffixFramer.cs b/src/EventStore.Core/Helpers/LengthPrefixSuffixFramer.cs
index 64f7ea7dcd..afd89966de 100644
--- a/src/EventStore.Core/Helpers/LengthPrefixSuffixFramer.cs
+++ b/src/EventStore.Core/Helpers/LengthPrefixSuffixFramer.cs
@@ -7,7 +7,6 @@
using System.Threading.Tasks;
using EventStore.Common.Utils;
using EventStore.Core.TransactionLog.Chunks;
-using EventStore.Transport.Tcp.Framing;
using ILogger = Serilog.ILogger;
namespace EventStore.Core.Helpers;
@@ -85,7 +84,7 @@ private async ValueTask Parse(ArraySegment bytes, CancellationToken token)
if (_packageLength <= 0 || _packageLength > _maxPackageSize)
{
Log.Error("FRAMING ERROR! Data:\n{data}", Helper.FormatBinaryDump(bytes));
- throw new PackageFramingException(string.Format(
+ throw new MessageFramingException(string.Format(
"Package size is out of bounds: {0} (max: {1}).",
_packageLength, _maxPackageSize));
}
diff --git a/src/EventStore.Core/Helpers/MessageFramingException.cs b/src/EventStore.Core/Helpers/MessageFramingException.cs
new file mode 100644
index 0000000000..f8f10f9f03
--- /dev/null
+++ b/src/EventStore.Core/Helpers/MessageFramingException.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace EventStore.Core.Helpers;
+
+public sealed class MessageFramingException : Exception
+{
+ public MessageFramingException(string message) : base(message)
+ {
+ }
+}
diff --git a/src/EventStore.Core/Messages/ClientMessage.cs b/src/EventStore.Core/Messages/ClientMessage.cs
index b9632f1f3a..5903247d7d 100644
--- a/src/EventStore.Core/Messages/ClientMessage.cs
+++ b/src/EventStore.Core/Messages/ClientMessage.cs
@@ -208,15 +208,6 @@ public LeaderInfo(EndPoint http)
Http = http;
}
- public LeaderInfo(EndPoint externalTcp, bool isSecure, EndPoint http)
- {
- ExternalTcp = externalTcp;
- IsSecure = isSecure;
- Http = http;
- }
-
- public bool IsSecure { get; }
- public EndPoint ExternalTcp { get; }
public EndPoint Http { get; }
}
}
diff --git a/src/EventStore.Core/Messages/TcpClientMessageDto.cs b/src/EventStore.Core/Messages/TcpClientMessageDto.cs
deleted file mode 100755
index b62f9cf1bd..0000000000
--- a/src/EventStore.Core/Messages/TcpClientMessageDto.cs
+++ /dev/null
@@ -1,670 +0,0 @@
-using System;
-using System.Net;
-using EventStore.Common.Utils;
-using EventStore.Core.Messages;
-using Google.Protobuf;
-
-// ReSharper disable once CheckNamespace
-namespace EventStore.Client.Messages
-{
- partial class NewEvent
- {
- public NewEvent(byte[] eventId, string eventType, int dataContentType, int metadataContentType, byte[] data, byte[] metadata)
- {
-
- EventId = ByteString.CopyFrom(eventId);
- EventType = eventType;
- DataContentType = dataContentType;
- MetadataContentType = metadataContentType;
- Data = ByteString.CopyFrom(data);
- Metadata = ByteString.CopyFrom(metadata);
- }
- }
-
- partial class EventRecord
- {
- public EventRecord(string eventStreamId, long eventNumber, byte[] eventId, string eventType, int dataContentType, int metadataContentType, byte[] data, byte[] metadata, long created, long createdEpoch)
- {
- AssignValues(eventStreamId, eventNumber, eventId, eventType, dataContentType, metadataContentType, data, metadata, created, createdEpoch);
- }
-
- private void AssignValues(string eventStreamId, long eventNumber, byte[] eventId, string eventType, int dataContentType,
- int metadataContentType, byte[] data, byte[] metadata, long created, long createdEpoch)
- {
- EventStreamId = eventStreamId;
- EventNumber = eventNumber;
- EventId = ByteString.CopyFrom(eventId);
- EventType = eventType;
- DataContentType = dataContentType;
- MetadataContentType = metadataContentType;
- Data = ByteString.CopyFrom(data);
- Metadata = ByteString.CopyFrom(metadata);
- Created = created;
- CreatedEpoch = createdEpoch;
- }
-
- public EventRecord(Core.Data.EventRecord eventRecord)
- {
- if (eventRecord == null)
- {
- return;
- }
-
- AssignValues(
- eventRecord.EventStreamId,
- eventRecord.EventNumber,
- eventRecord.EventId.ToByteArray(),
- eventRecord.EventType,
- eventRecord.IsJson ? 1 : 0,
- eventRecord.IsJson ? 1 : 0,
- eventRecord.Data.ToArray(),
- eventRecord.Metadata.ToArray(),
- eventRecord.TimeStamp.ToBinary(),
- (long)(eventRecord.TimeStamp - new DateTime(1970, 1, 1)).TotalMilliseconds
- );
- }
-
- public EventRecord(Core.Data.EventRecord eventRecord, long eventNumber)
- {
- if (eventRecord == null)
- {
- return;
- }
-
- AssignValues(
- eventRecord.EventStreamId,
- eventNumber,
- eventRecord.EventId.ToByteArray(),
- eventRecord.EventType,
- eventRecord.IsJson ? 1 : 0,
- eventRecord.IsJson ? 1 : 0,
- eventRecord.Data.ToArray(),
- eventRecord.Metadata.ToArray(),
- eventRecord.TimeStamp.ToBinary(),
- (long)(eventRecord.TimeStamp - new DateTime(1970, 1, 1)).TotalMilliseconds
- );
- }
- }
-
- partial class ResolvedIndexedEvent
- {
- public ResolvedIndexedEvent(EventRecord @event, EventRecord link)
- {
- Event = @event;
- Link = link;
- }
-
- public ResolvedIndexedEvent(Core.Data.EventRecord @event, Core.Data.EventRecord link)
- {
- if (@event != null)
- {
- Event = new EventRecord(@event);
- }
-
- if (link != null)
- {
- Link = new EventRecord(link);
- }
- }
- }
-
- partial class ResolvedEvent
- {
- public ResolvedEvent(EventRecord @event, EventRecord link, long commitPosition, long preparePosition)
- {
- if (@event != null)
- {
- Event = @event;
- }
-
- if (link != null)
- {
- Link = link;
- }
-
- CommitPosition = commitPosition;
- PreparePosition = preparePosition;
- }
-
- public ResolvedEvent(Core.Data.ResolvedEvent pair)
- : this(pair.Event != null ? new EventRecord(pair.Event) : null,
- pair.Link != null ? new EventRecord(pair.Link) : null,
- pair.OriginalPosition?.CommitPosition ?? -1,
- pair.OriginalPosition?.PreparePosition ?? -1)
- {
- }
- }
-
- partial class WriteEvents
- {
- public WriteEvents(string eventStreamId, long expectedVersion, NewEvent[] events, bool requireLeader)
- {
- EventStreamId = eventStreamId;
- ExpectedVersion = expectedVersion;
- Events.AddRange(events);
- RequireLeader = requireLeader;
- }
- }
-
- partial class WriteEventsCompleted
- {
- public WriteEventsCompleted(OperationResult result, string message, long firstEventNumber, long lastEventNumber, long preparePosition, long commitPosition, long currentVersion)
- {
- Result = result;
- if (message != null)
- {
- Message = message;
- }
-
- FirstEventNumber = firstEventNumber;
- LastEventNumber = lastEventNumber;
- PreparePosition = preparePosition;
- CommitPosition = commitPosition;
- CurrentVersion = currentVersion;
- }
- }
-
- partial class DeleteStream
- {
- public DeleteStream(string eventStreamId, long expectedVersion, bool requireLeader, bool hardDelete)
- {
- EventStreamId = eventStreamId;
- ExpectedVersion = expectedVersion;
- RequireLeader = requireLeader;
- HardDelete = hardDelete;
- }
- }
-
- partial class DeleteStreamCompleted
- {
- public DeleteStreamCompleted(OperationResult result, string message, long currentVersion, long preparePosition,
- long commitPosition)
- {
- Result = result;
- if (!string.IsNullOrEmpty(message))
- {
- Message = message;
- }
-
- CurrentVersion = currentVersion;
- PreparePosition = preparePosition;
- CommitPosition = commitPosition;
- }
- }
-
- partial class TransactionStart
- {
- public TransactionStart(string eventStreamId, long expectedVersion, bool requireLeader)
- {
- EventStreamId = eventStreamId;
- ExpectedVersion = expectedVersion;
- RequireLeader = requireLeader;
- }
- }
-
- partial class TransactionStartCompleted
- {
- public TransactionStartCompleted(long transactionId, OperationResult result, string message)
- {
- TransactionId = transactionId;
- Result = result;
- if (message != null)
- {
- Message = message;
- }
- }
- }
-
- partial class TransactionWrite
- {
- public TransactionWrite(long transactionId, NewEvent[] events, bool requireLeader)
- {
- TransactionId = transactionId;
- Events.AddRange(events);
- RequireLeader = requireLeader;
- }
- }
-
- partial class TransactionWriteCompleted
- {
- public TransactionWriteCompleted(long transactionId, OperationResult result, string message)
- {
- TransactionId = transactionId;
- Result = result;
- if (message != null)
- {
- Message = message;
- }
- }
- }
-
- partial class TransactionCommit
- {
- public TransactionCommit(long transactionId, bool requireLeader)
- {
- TransactionId = transactionId;
- RequireLeader = requireLeader;
- }
- }
-
- partial class TransactionCommitCompleted
- {
- public TransactionCommitCompleted(long transactionId, OperationResult result, string message, long firstEventNumber, long lastEventNumber, long preparePosition, long commitPosition)
- {
- TransactionId = transactionId;
- Result = result;
- if (message != null)
- {
- Message = message;
- }
-
- FirstEventNumber = firstEventNumber;
- LastEventNumber = lastEventNumber;
- PreparePosition = preparePosition;
- CommitPosition = commitPosition;
- }
- }
-
- partial class ReadEvent
- {
- public ReadEvent(string eventStreamId, long eventNumber, bool resolveLinkTos, bool requireLeader)
- {
- EventStreamId = eventStreamId;
- EventNumber = eventNumber;
- ResolveLinkTos = resolveLinkTos;
- RequireLeader = requireLeader;
- }
- }
-
- partial class ReadEventCompleted
- {
- public ReadEventCompleted(ReadEventCompleted.Types.ReadEventResult result, ResolvedIndexedEvent @event, string error)
- {
- Result = result;
- if (@event != null)
- {
- Event = @event;
- }
-
- if (error != null)
- {
- Error = error;
- }
- }
- }
-
- partial class ReadStreamEvents
- {
- public ReadStreamEvents(string eventStreamId, long fromEventNumber, int maxCount, bool resolveLinkTos, bool requireLeader)
- {
- EventStreamId = eventStreamId;
- FromEventNumber = fromEventNumber;
- MaxCount = maxCount;
- ResolveLinkTos = resolveLinkTos;
- RequireLeader = requireLeader;
- }
- }
-
- partial class ReadStreamEventsCompleted
- {
- public ReadStreamEventsCompleted(ResolvedIndexedEvent[] events, ReadStreamEventsCompleted.Types.ReadStreamResult result, long nextEventNumber, long lastEventNumber, bool isEndOfStream, long lastCommitPosition, string error)
- {
- Events.AddRange(events);
- Result = result;
- NextEventNumber = nextEventNumber;
- LastEventNumber = lastEventNumber;
- IsEndOfStream = isEndOfStream;
- LastCommitPosition = lastCommitPosition;
- if (error != null)
- {
- Error = error;
- }
- }
- }
-
- partial class ReadAllEvents
- {
- public ReadAllEvents(long commitPosition, long preparePosition, int maxCount, bool resolveLinkTos, bool requireLeader)
- {
- CommitPosition = commitPosition;
- PreparePosition = preparePosition;
- MaxCount = maxCount;
- ResolveLinkTos = resolveLinkTos;
- RequireLeader = requireLeader;
- }
- }
-
- partial class ReadAllEventsCompleted
- {
- public ReadAllEventsCompleted(long commitPosition, long preparePosition, ResolvedEvent[] events, long nextCommitPosition, long nextPreparePosition, ReadAllEventsCompleted.Types.ReadAllResult result, string error)
- {
- CommitPosition = commitPosition;
- PreparePosition = preparePosition;
- Events.AddRange(events);
- NextCommitPosition = nextCommitPosition;
- NextPreparePosition = nextPreparePosition;
- Result = result;
- if (error != null)
- {
- Error = error;
- }
- }
- }
-
- partial class Filter
- {
- public Filter(Filter.Types.FilterContext context, Filter.Types.FilterType type, string[] data)
- {
- Context = context;
- Type = type;
- Data.AddRange(data);
- }
- }
-
- partial class FilteredReadAllEvents
- {
- public FilteredReadAllEvents(long commitPosition, long preparePosition, int maxCount, int maxSearchWindow, bool resolveLinkTos, bool requireLeader, Filter filter)
- {
- CommitPosition = commitPosition;
- PreparePosition = preparePosition;
- MaxCount = maxCount;
- MaxSearchWindow = maxSearchWindow;
- ResolveLinkTos = resolveLinkTos;
- RequireLeader = requireLeader;
- Filter = filter;
- }
- }
-
- partial class FilteredReadAllEventsCompleted
- {
- public FilteredReadAllEventsCompleted(long commitPosition, long preparePosition, ResolvedEvent[] events, long nextCommitPosition, long nextPreparePosition, bool isEndOfStream, FilteredReadAllEventsCompleted.Types.FilteredReadAllResult result, string error)
- {
- CommitPosition = commitPosition;
- PreparePosition = preparePosition;
- Events.AddRange(events);
- NextCommitPosition = nextCommitPosition;
- NextPreparePosition = nextPreparePosition;
- IsEndOfStream = isEndOfStream;
- Result = result;
- if (error != null)
- {
- Error = error;
- }
- }
- }
-
- partial class CreatePersistentSubscription
- {
- public CreatePersistentSubscription(string subscriptionGroupName, string eventStreamId, bool resolveLinkTos, long startFrom, int messageTimeoutMilliseconds, bool recordStatistics, int liveBufferSize, int readBatchSize, int bufferSize, int maxRetryCount, bool preferRoundRobin, int checkpointAfterTime, int checkpointMaxCount, int checkpointMinCount, int subscriberMaxCount, string namedConsumerStrategy)
- {
- SubscriptionGroupName = subscriptionGroupName;
- EventStreamId = eventStreamId;
- ResolveLinkTos = resolveLinkTos;
- StartFrom = startFrom;
- MessageTimeoutMilliseconds = messageTimeoutMilliseconds;
- RecordStatistics = recordStatistics;
- LiveBufferSize = liveBufferSize;
- ReadBatchSize = readBatchSize;
- BufferSize = bufferSize;
- MaxRetryCount = maxRetryCount;
- PreferRoundRobin = preferRoundRobin;
- CheckpointAfterTime = checkpointAfterTime;
- CheckpointMaxCount = checkpointMaxCount;
- CheckpointMinCount = checkpointMinCount;
- SubscriberMaxCount = subscriberMaxCount;
- NamedConsumerStrategy = namedConsumerStrategy;
- }
- }
-
- partial class CreatePersistentSubscriptionCompleted
- {
- public CreatePersistentSubscriptionCompleted(CreatePersistentSubscriptionCompleted.Types.CreatePersistentSubscriptionResult result, string reason)
- {
- Result = result;
- if (reason != null)
- {
- Reason = reason;
- }
- }
- }
-
- partial class DeletePersistentSubscription
- {
- public DeletePersistentSubscription(string subscriptionGroupName, string eventStreamId)
- {
- SubscriptionGroupName = subscriptionGroupName;
- EventStreamId = eventStreamId;
- }
- }
-
- partial class DeletePersistentSubscriptionCompleted
- {
- public DeletePersistentSubscriptionCompleted(Types.DeletePersistentSubscriptionResult result, string reason)
- {
- Result = result;
- Reason = reason;
- }
- }
-
- partial class UpdatePersistentSubscription
- {
- public UpdatePersistentSubscription(string subscriptionGroupName, string eventStreamId, bool resolveLinkTos, long startFrom, int messageTimeoutMilliseconds, bool recordStatistics, int liveBufferSize, int readBatchSize, int bufferSize, int maxRetryCount, bool preferRoundRobin, int checkpointAfterTime, int checkpointMaxCount, int checkpointMinCount, int subscriberMaxCount, string namedConsumerStrategy)
- {
- SubscriptionGroupName = subscriptionGroupName;
- EventStreamId = eventStreamId;
- ResolveLinkTos = resolveLinkTos;
- StartFrom = startFrom;
- MessageTimeoutMilliseconds = messageTimeoutMilliseconds;
- RecordStatistics = recordStatistics;
- LiveBufferSize = liveBufferSize;
- ReadBatchSize = readBatchSize;
- BufferSize = bufferSize;
- MaxRetryCount = maxRetryCount;
- PreferRoundRobin = preferRoundRobin;
- CheckpointAfterTime = checkpointAfterTime;
- CheckpointMaxCount = checkpointMaxCount;
- CheckpointMinCount = checkpointMinCount;
- SubscriberMaxCount = subscriberMaxCount;
- NamedConsumerStrategy = namedConsumerStrategy;
- }
- }
-
- partial class UpdatePersistentSubscriptionCompleted
- {
- public UpdatePersistentSubscriptionCompleted(UpdatePersistentSubscriptionCompleted.Types.UpdatePersistentSubscriptionResult result, string reason)
- {
- Result = result;
- if (reason != null)
- {
- Reason = reason;
- }
- }
- }
-
- partial class ConnectToPersistentSubscription
- {
- public ConnectToPersistentSubscription(string subscriptionId, string eventStreamId, int allowedInFlightMessages)
- {
- SubscriptionId = subscriptionId;
- EventStreamId = eventStreamId;
- AllowedInFlightMessages = allowedInFlightMessages;
- }
- }
-
- partial class PersistentSubscriptionConfirmation
- {
- public PersistentSubscriptionConfirmation(long lastCommitPosition, string subscriptionId, long lastEventNumber)
- {
- LastCommitPosition = lastCommitPosition;
- SubscriptionId = subscriptionId;
- LastEventNumber = lastEventNumber;
- }
- }
-
- partial class PersistentSubscriptionAckEvents
- {
- public PersistentSubscriptionAckEvents(string subscriptionId, byte[][] processedEventIds)
- {
- SubscriptionId = subscriptionId;
- for (int i = 0; i < processedEventIds.Length; i++)
- {
- ProcessedEventIds.Add(ByteString.CopyFrom(processedEventIds[i]));
- }
- }
- }
-
- partial class PersistentSubscriptionNakEvents
- {
- public PersistentSubscriptionNakEvents(string subscriptionId, byte[][] processedEventIds, string message, PersistentSubscriptionNakEvents.Types.NakAction action)
- {
- SubscriptionId = subscriptionId;
- for (int i = 0; i < processedEventIds.Length; i++)
- {
- ProcessedEventIds.Add(ByteString.CopyFrom(processedEventIds[i]));
- }
-
- if (message != null)
- {
- Message = message;
- }
-
- Action = action;
- }
- }
-
- partial class PersistentSubscriptionStreamEventAppeared
- {
- public PersistentSubscriptionStreamEventAppeared(ResolvedIndexedEvent @event, int retryCount)
- {
- Event = @event;
- RetryCount = retryCount;
- }
- }
-
- partial class SubscribeToStream
- {
- public SubscribeToStream(string eventStreamId, bool resolveLinkTos)
- {
- EventStreamId = eventStreamId;
- ResolveLinkTos = resolveLinkTos;
- }
- }
-
- partial class FilteredSubscribeToStream
- {
- public FilteredSubscribeToStream(string eventStreamId, bool resolveLinkTos, Filter filter, int checkpointInterval)
- {
- EventStreamId = eventStreamId;
- ResolveLinkTos = resolveLinkTos;
- Filter = filter;
- CheckpointInterval = checkpointInterval;
- }
- }
-
- partial class CheckpointReached
- {
- public CheckpointReached(long commitPosition, long preparePosition)
- {
- CommitPosition = commitPosition;
- PreparePosition = preparePosition;
- }
- }
-
- partial class SubscriptionConfirmation
- {
- public SubscriptionConfirmation(long lastCommitPosition, long lastEventNumber)
- {
- LastCommitPosition = lastCommitPosition;
- LastEventNumber = lastEventNumber;
- }
- }
-
- partial class StreamEventAppeared
- {
- public StreamEventAppeared(ResolvedEvent @event)
- {
- Event = @event;
- }
- }
-
- partial class SubscriptionDropped
- {
- public SubscriptionDropped(SubscriptionDropped.Types.SubscriptionDropReason reason)
- {
- Reason = reason;
- }
- }
-
- partial class NotHandled
- {
- public NotHandled(ClientMessage.NotHandled source)
- {
- Reason = source.Reason switch
- {
- ClientMessage.NotHandled.Types.NotHandledReason.NotReady => Types.NotHandledReason.NotReady,
- ClientMessage.NotHandled.Types.NotHandledReason.TooBusy => Types.NotHandledReason.TooBusy,
- ClientMessage.NotHandled.Types.NotHandledReason.NotLeader => Types.NotHandledReason.NotLeader,
- ClientMessage.NotHandled.Types.NotHandledReason.IsReadOnly => Types.NotHandledReason.IsReadOnly,
- _ => throw new ArgumentOutOfRangeException()
- };
- //this is horrible and only for transport compatibility purposes
- if (source.LeaderInfo != null)
- {
- AdditionalInfo = new Types.LeaderInfo(source.LeaderInfo.ExternalTcp, source.LeaderInfo.IsSecure, source.LeaderInfo.Http).ToByteString();
- }
- }
- partial class Types
- {
- partial class LeaderInfo
- {
- public LeaderInfo(string externalTcpAddress, int externalTcpPort, string httpAddress, int httpPort, string externalSecureTcpAddress, int externalSecureTcpPort)
- {
- ExternalTcpAddress = externalTcpAddress;
- ExternalTcpPort = externalTcpPort;
- HttpAddress = httpAddress;
- HttpPort = httpPort;
- ExternalSecureTcpAddress = externalSecureTcpAddress;
- ExternalSecureTcpPort = externalSecureTcpPort;
- }
-
- public LeaderInfo(EndPoint tcpEndPoint, bool isTcpEndPointSecure, EndPoint httpEndPoint)
- {
- if (isTcpEndPointSecure)
- {
- ExternalSecureTcpAddress = tcpEndPoint?.GetHost();
- ExternalSecureTcpPort = tcpEndPoint?.GetPort() ?? 0;
- }
- else
- {
- ExternalTcpAddress = tcpEndPoint?.GetHost();
- ExternalTcpPort = tcpEndPoint?.GetPort() ?? 0;
- }
-
- HttpAddress = httpEndPoint.GetHost();
- HttpPort = httpEndPoint.GetPort();
- }
- }
- }
- }
-
- partial class ScavengeDatabaseResponse
- {
- public ScavengeDatabaseResponse(ScavengeDatabaseResponse.Types.ScavengeResult result, string scavengeId)
- {
- Result = result;
- ScavengeId = scavengeId;
- }
- }
-
- partial class IdentifyClient
- {
- public IdentifyClient(int version, string connectionName)
- {
- Version = version;
- if (connectionName != null)
- {
- ConnectionName = connectionName;
- }
- }
- }
-}
diff --git a/src/EventStore.Core/Messages/TcpMessage.cs b/src/EventStore.Core/Messages/TcpMessage.cs
deleted file mode 100644
index 40f1425898..0000000000
--- a/src/EventStore.Core/Messages/TcpMessage.cs
+++ /dev/null
@@ -1,127 +0,0 @@
-using System;
-using System.Net.Sockets;
-using EventStore.Core.Messaging;
-using EventStore.Core.Services.Transport.Tcp;
-
-namespace EventStore.Core.Messages
-{
- public static partial class TcpMessage
- {
- [DerivedMessage(CoreMessage.Tcp)]
- public partial class TcpSend : Message
- {
- public override object SynchronizationGroup
- {
- get { return ConnectionManager; }
- }
-
- public readonly TcpConnectionManager ConnectionManager;
- public readonly Message Message;
-
- public TcpSend(TcpConnectionManager connectionManager, Message message)
- {
- ConnectionManager = connectionManager;
- Message = message;
- }
- }
-
- [DerivedMessage(CoreMessage.Tcp)]
- public partial class Heartbeat : Message
- {
- public readonly long ReceiveProgressIndicator;
- public readonly long SendProgressIndicator;
-
- public Heartbeat(long receiveProgressIndicator, long sendProgressIndicator)
- {
- ReceiveProgressIndicator = receiveProgressIndicator;
- SendProgressIndicator = sendProgressIndicator;
- }
- }
-
- [DerivedMessage(CoreMessage.Tcp)]
- public partial class HeartbeatTimeout : Message
- {
- public readonly long ReceiveProgressIndicator;
-
- public HeartbeatTimeout(long receiveProgressIndicator)
- {
- ReceiveProgressIndicator = receiveProgressIndicator;
- }
- }
-
- [DerivedMessage(CoreMessage.Tcp)]
- public partial class PongMessage : Message
- {
- public readonly Guid CorrelationId;
- public readonly byte[] Payload;
-
- public PongMessage(Guid correlationId, byte[] payload)
- {
- CorrelationId = correlationId;
- Payload = payload;
- }
- }
-
- [DerivedMessage(CoreMessage.Tcp)]
- public partial class ConnectionEstablished : Message
- {
- public readonly TcpConnectionManager Connection;
-
- public ConnectionEstablished(TcpConnectionManager connection)
- {
- Connection = connection;
- }
- }
-
- [DerivedMessage(CoreMessage.Tcp)]
- public partial class ConnectionClosed : Message
- {
- public readonly TcpConnectionManager Connection;
- public readonly SocketError SocketError;
-
- public ConnectionClosed(TcpConnectionManager connection, SocketError socketError)
- {
- Connection = connection;
- SocketError = socketError;
- }
- }
-
- [DerivedMessage(CoreMessage.Tcp)]
- public partial class NotReady : Message
- {
- public readonly Guid CorrelationId;
- public readonly string Reason;
-
- public NotReady(Guid correlationId, string reason)
- {
- CorrelationId = correlationId;
- Reason = reason;
- }
- }
-
-
- [DerivedMessage(CoreMessage.Tcp)]
- public partial class NotAuthenticated : Message
- {
- public readonly Guid CorrelationId;
- public readonly string Reason;
-
- public NotAuthenticated(Guid correlationId, string reason)
- {
- CorrelationId = correlationId;
- Reason = reason;
- }
- }
-
- [DerivedMessage(CoreMessage.Tcp)]
- public partial class Authenticated : Message
- {
- public readonly Guid CorrelationId;
-
- public Authenticated(Guid correlationId)
- {
- CorrelationId = correlationId;
- }
- }
- }
-}
diff --git a/src/EventStore.Core/Messaging/CoreMessage.cs b/src/EventStore.Core/Messaging/CoreMessage.cs
index 89d29acc6f..4e6a16e0de 100644
--- a/src/EventStore.Core/Messaging/CoreMessage.cs
+++ b/src/EventStore.Core/Messaging/CoreMessage.cs
@@ -22,7 +22,6 @@ public enum CoreMessage
Storage,
Subscription,
System,
- Tcp,
Telemetry,
Timer,
UserManagement
diff --git a/src/EventStore.Core/NodeTcpOptions.cs b/src/EventStore.Core/NodeTcpOptions.cs
deleted file mode 100644
index 880c10b9d5..0000000000
--- a/src/EventStore.Core/NodeTcpOptions.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace EventStore.Core;
-
-// Still needed for gossip and stats.
-public class NodeTcpOptions
-{
- public int NodeTcpPort { get; init; } = 1113;
- public bool EnableExternalTcp { get; init; }
- public int? NodeTcpPortAdvertiseAs { get; init; }
-}
diff --git a/src/EventStore.Core/Services/AuthorizationGateway.cs b/src/EventStore.Core/Services/AuthorizationGateway.cs
index 927e83bb27..e95f692661 100644
--- a/src/EventStore.Core/Services/AuthorizationGateway.cs
+++ b/src/EventStore.Core/Services/AuthorizationGateway.cs
@@ -211,7 +211,7 @@ public void Authorize(Message toValidate, IPublisher destination)
case ClientMessage.PersistentSubscriptionNackEvents _:
case ClientMessage.UnsubscribeFromStream _:
case ClientMessage.NotHandled _:
- case TcpMessage.NotAuthenticated _:
+ case ClientMessage.NotAuthenticated _:
case ClientMessage.WriteEventsCompleted _:
case ClientMessage.TransactionStartCompleted _:
case ClientMessage.TransactionWriteCompleted _:
@@ -244,8 +244,6 @@ public void Authorize(Message toValidate, IPublisher destination)
break;
default:
#if DEBUG
- //This sucks, because if new tcp messages are added there is no way to be sure they have to be authorized...
- //They should be caught by debug builds though
throw new ArgumentOutOfRangeException(nameof(toValidate), toValidate.GetType().FullName,
"Unhandled client message");
#else
diff --git a/src/EventStore.Core/Services/Monitoring/SystemStatsHelper.cs b/src/EventStore.Core/Services/Monitoring/SystemStatsHelper.cs
index e81c4a859c..7ffa6d8323 100644
--- a/src/EventStore.Core/Services/Monitoring/SystemStatsHelper.cs
+++ b/src/EventStore.Core/Services/Monitoring/SystemStatsHelper.cs
@@ -8,7 +8,6 @@
using EventStore.Core.Services.Monitoring.Stats;
using EventStore.Core.Services.Monitoring.Utils;
using EventStore.Core.TransactionLog.Checkpoint;
-using EventStore.Transport.Tcp;
using ILogger = Serilog.ILogger;
namespace EventStore.Core.Services.Monitoring
@@ -48,19 +47,6 @@ public IDictionary GetSystemStats()
stats["proc-diskIo-readOps"] = diskIo.ReadOps;
stats["proc-diskIo-writeOps"] = diskIo.WriteOps;
- var tcp = TcpConnectionMonitor.Default.GetTcpStats();
- stats["proc-tcp-connections"] = tcp.Connections;
- stats["proc-tcp-receivingSpeed"] = tcp.ReceivingSpeed;
- stats["proc-tcp-sendingSpeed"] = tcp.SendingSpeed;
- stats["proc-tcp-inSend"] = tcp.InSend;
- stats["proc-tcp-measureTime"] = tcp.MeasureTime;
- stats["proc-tcp-pendingReceived"] = tcp.PendingReceived;
- stats["proc-tcp-pendingSend"] = tcp.PendingSend;
- stats["proc-tcp-receivedBytesSinceLastRun"] = tcp.ReceivedBytesSinceLastRun;
- stats["proc-tcp-receivedBytesTotal"] = tcp.ReceivedBytesTotal;
- stats["proc-tcp-sentBytesSinceLastRun"] = tcp.SentBytesSinceLastRun;
- stats["proc-tcp-sentBytesTotal"] = tcp.SentBytesTotal;
-
stats["es-checksum"] = _writerCheckpoint.Read();
stats["es-checksumNonFlushed"] = _writerCheckpoint.ReadNonFlushed();
diff --git a/src/EventStore.Core/Services/PersistentSubscription/PersistentSubscriptionService.cs b/src/EventStore.Core/Services/PersistentSubscription/PersistentSubscriptionService.cs
index c1d3213f9d..9669f2ed46 100644
--- a/src/EventStore.Core/Services/PersistentSubscription/PersistentSubscriptionService.cs
+++ b/src/EventStore.Core/Services/PersistentSubscription/PersistentSubscriptionService.cs
@@ -29,7 +29,6 @@ public abstract class PersistentSubscriptionService
public class PersistentSubscriptionService :
PersistentSubscriptionService,
IHandle,
- IHandle,
IHandle,
IHandle,
IHandle,
@@ -1109,24 +1108,6 @@ private void UnsubscribeFromStream(Guid correlationId, bool sendDropNotification
}
}
- public void Handle(TcpMessage.ConnectionClosed message)
- {
- if (_subscriptionsById == null)
- {
- return; //haven't built yet.
- }
-
- foreach (var subscription in _subscriptionsById.Values)
- {
- if (subscription.RemoveClientByConnectionId(message.Connection.ConnectionId))
- {
- Log.Debug("Persistent subscription {subscription} lost connection from {remoteEndPoint}",
- subscription.SubscriptionId,
- message.Connection.RemoteEndPoint);
- }
- }
- }
-
private void DisconnectFromStream(Guid connectionId)
{
foreach (var subscription in _subscriptionsById.Values)
@@ -1138,7 +1119,6 @@ private void DisconnectFromStream(Guid connectionId)
}
}
}
-
public async ValueTask ConnectToPersistentSubscription(
IPersistentSubscriptionEventSource eventSource,
string groupName,
diff --git a/src/EventStore.Core/Services/Replication/LogRecordFramer.cs b/src/EventStore.Core/Services/Replication/LogRecordFramer.cs
index 117e626d6a..b4c870ae24 100644
--- a/src/EventStore.Core/Services/Replication/LogRecordFramer.cs
+++ b/src/EventStore.Core/Services/Replication/LogRecordFramer.cs
@@ -6,8 +6,8 @@
using System.Threading.Tasks;
using DotNext.IO;
using EventStore.Common.Utils;
+using EventStore.Core.Helpers;
using EventStore.Core.TransactionLog.LogRecords;
-using EventStore.Transport.Tcp.Framing;
namespace EventStore.Core.Services.Replication;
diff --git a/src/EventStore.Core/Services/Replication/TransactionFramer.cs b/src/EventStore.Core/Services/Replication/TransactionFramer.cs
index 8b6788e635..e1166610df 100644
--- a/src/EventStore.Core/Services/Replication/TransactionFramer.cs
+++ b/src/EventStore.Core/Services/Replication/TransactionFramer.cs
@@ -3,8 +3,8 @@
using System.Threading;
using System.Threading.Tasks;
using EventStore.Common.Utils;
+using EventStore.Core.Helpers;
using EventStore.Core.TransactionLog.LogRecords;
-using EventStore.Transport.Tcp.Framing;
namespace EventStore.Core.Services.Replication;
diff --git a/src/EventStore.Core/Services/RequestForwardingService.cs b/src/EventStore.Core/Services/RequestForwardingService.cs
index 9a47f63629..94670ddd75 100644
--- a/src/EventStore.Core/Services/RequestForwardingService.cs
+++ b/src/EventStore.Core/Services/RequestForwardingService.cs
@@ -11,7 +11,6 @@ public class RequestForwardingService : IHandle,
IHandle,
IHandle,
IHandle,
- IHandle,
IHandle,
IHandle,
IHandle,
@@ -62,13 +61,6 @@ public void Handle(ClientMessage.NotAuthenticated message)
(clientCorrId, m) => new ClientMessage.NotAuthenticated(clientCorrId, m.Reason));
}
- public void Handle(TcpMessage.NotAuthenticated message)
- {
- _forwardingProxy.TryForwardReply(
- message.CorrelationId, message,
- (clientCorrId, m) => new TcpMessage.NotAuthenticated(clientCorrId, m.Reason));
- }
-
public void Handle(ClientMessage.WriteEventsCompleted message)
{
_forwardingProxy.TryForwardReply(message.CorrelationId, message,
diff --git a/src/EventStore.Core/Services/Storage/ReaderIndex/EventFilter.cs b/src/EventStore.Core/Services/Storage/ReaderIndex/EventFilter.cs
index fbb3ff716f..52326bdf74 100644
--- a/src/EventStore.Core/Services/Storage/ReaderIndex/EventFilter.cs
+++ b/src/EventStore.Core/Services/Storage/ReaderIndex/EventFilter.cs
@@ -36,31 +36,6 @@ public static IEventFilter Regex(bool isAllStream, string regex)
=> new EventTypeRegexStrategy(isAllStream, regex);
}
- public static IEventFilter Get(bool isAllStream, Client.Messages.Filter filter)
- {
- if (filter == null || filter.Data.Count == 0)
- {
- return isAllStream ? (IEventFilter)new DefaultAllFilterStrategy() : new DefaultStreamFilterStrategy();
- }
-
- return filter.Context switch
- {
- Client.Messages.Filter.Types.FilterContext.EventType when filter.Type ==
- Client.Messages.Filter.Types.FilterType.Prefix =>
- EventType.Prefixes(isAllStream, filter.Data.ToArray()),
- Client.Messages.Filter.Types.FilterContext.EventType when filter.Type ==
- Client.Messages.Filter.Types.FilterType.Regex =>
- EventType.Regex(isAllStream, filter.Data[0]),
- Client.Messages.Filter.Types.FilterContext.StreamId when filter.Type ==
- Client.Messages.Filter.Types.FilterType.Prefix =>
- StreamName.Prefixes(isAllStream, filter.Data.ToArray()),
- Client.Messages.Filter.Types.FilterContext.StreamId when filter.Type ==
- Client.Messages.Filter.Types.FilterType.Regex =>
- StreamName.Regex(isAllStream, filter.Data[0]),
- _ => throw new Exception() // Invalid filter
- };
- }
-
private sealed class DefaultStreamFilterStrategy : IEventFilter
{
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
@@ -281,34 +256,16 @@ public static (bool success, string reason) TryParse(EventFilterDto dto, out IEv
public static (bool Success, string Reason) TryParse(string context, bool isAllStream, string type, string data,
out IEventFilter filter)
{
- Client.Messages.Filter.Types.FilterContext parsedContext;
- switch (context)
+ if (context is not EventTypeContext and not StreamIdContext)
{
- case EventTypeContext:
- parsedContext = Client.Messages.Filter.Types.FilterContext.EventType;
- break;
- case StreamIdContext:
- parsedContext = Client.Messages.Filter.Types.FilterContext.StreamId;
- break;
- default:
- filter = null;
- var names = string.Join(", ", Enum.GetNames(typeof(Client.Messages.Filter.Types.FilterContext)));
- return (false, $"Invalid context please provide one of the following: {names}.");
+ filter = null;
+ return (false, "Invalid context please provide one of the following: EventType, StreamId.");
}
- Client.Messages.Filter.Types.FilterType parsedType;
- switch (type)
+ if (type is not RegexType and not PrefixType)
{
- case RegexType:
- parsedType = Client.Messages.Filter.Types.FilterType.Regex;
- break;
- case PrefixType:
- parsedType = Client.Messages.Filter.Types.FilterType.Prefix;
- break;
- default:
- filter = null;
- var names = string.Join(", ", Enum.GetNames(typeof(Client.Messages.Filter.Types.FilterType)));
- return (false, $"Invalid type please provide one of the following: {names}.");
+ filter = null;
+ return (false, "Invalid type please provide one of the following: Regex, Prefix.");
}
if (string.IsNullOrEmpty(data))
@@ -317,14 +274,18 @@ public static (bool Success, string Reason) TryParse(string context, bool isAllS
return (false, "Please provide a comma delimited list of data with at least one item.");
}
- if (parsedType == Client.Messages.Filter.Types.FilterType.Regex)
+ if (type == RegexType)
{
- filter = Get(isAllStream, new Client.Messages.Filter(parsedContext, parsedType, new[] { data }));
+ filter = context == EventTypeContext
+ ? EventType.Regex(isAllStream, data)
+ : StreamName.Regex(isAllStream, data);
return (true, null);
}
- filter = Get(isAllStream, new Client.Messages.Filter(parsedContext, parsedType,
- data.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries)));
+ var prefixes = data.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
+ filter = context == EventTypeContext
+ ? EventType.Prefixes(isAllStream, prefixes)
+ : StreamName.Prefixes(isAllStream, prefixes);
return (true, null);
}
}
diff --git a/src/EventStore.Core/Services/SubscriptionsService.cs b/src/EventStore.Core/Services/SubscriptionsService.cs
index dba64708b5..6709c71ae0 100644
--- a/src/EventStore.Core/Services/SubscriptionsService.cs
+++ b/src/EventStore.Core/Services/SubscriptionsService.cs
@@ -37,7 +37,6 @@ public class SubscriptionsService :
SubscriptionsService,
IHandle,
IHandle,
- IHandle,
IAsyncHandle,
IAsyncHandle,
IHandle,
@@ -111,41 +110,6 @@ public void Handle(SystemMessage.BecomeShuttingDown message)
_queuedHandler.RequestStop();
}
- public void Handle(TcpMessage.ConnectionClosed message)
- {
- List subscriptionGroupsToRemove = null;
- foreach (var subscriptionGroup in _subscriptionTopics)
- {
- var subscriptions = subscriptionGroup.Value;
- for (int i = 0, n = subscriptions.Count; i < n; ++i)
- {
- if (subscriptions[i].ConnectionId == message.Connection.ConnectionId)
- {
- _subscriptionsById.Remove(subscriptions[i].CorrelationId);
- }
- }
-
- subscriptions.RemoveAll(x => x.ConnectionId == message.Connection.ConnectionId);
- if (subscriptions.Count == 0) // schedule removal of list instance
- {
- if (subscriptionGroupsToRemove == null)
- {
- subscriptionGroupsToRemove = new List();
- }
-
- subscriptionGroupsToRemove.Add(subscriptionGroup.Key);
- }
- }
-
- if (subscriptionGroupsToRemove != null)
- {
- for (int i = 0, n = subscriptionGroupsToRemove.Count; i < n; ++i)
- {
- _subscriptionTopics.Remove(subscriptionGroupsToRemove[i]);
- }
- }
- }
-
async ValueTask IAsyncHandle.HandleAsync(ClientMessage.SubscribeToStream msg,
CancellationToken token)
{
diff --git a/src/EventStore.Core/Services/TcpSendService.cs b/src/EventStore.Core/Services/TcpSendService.cs
deleted file mode 100644
index e3e2d31bcd..0000000000
--- a/src/EventStore.Core/Services/TcpSendService.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using EventStore.Core.Bus;
-using EventStore.Core.Messages;
-
-namespace EventStore.Core.Services
-{
- public class TcpSendService : IHandle
- {
- public void Handle(TcpMessage.TcpSend message)
- {
- // todo: histogram metric?
- message.ConnectionManager.SendMessage(message.Message);
- }
- }
-}
diff --git a/src/EventStore.Core/Services/Transport/Tcp/ClientTcpDispatcher.cs b/src/EventStore.Core/Services/Transport/Tcp/ClientTcpDispatcher.cs
deleted file mode 100644
index fd95d28cff..0000000000
--- a/src/EventStore.Core/Services/Transport/Tcp/ClientTcpDispatcher.cs
+++ /dev/null
@@ -1,600 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Security.Claims;
-using EventStore.Client.Messages;
-using EventStore.Common.Utils;
-using EventStore.Core.Messages;
-using EventStore.Core.Messaging;
-using EventStore.Core.Services.Storage.ReaderIndex;
-using EventStore.Core.Util;
-using ResolvedEvent = EventStore.Core.Data.ResolvedEvent;
-
-namespace EventStore.Core.Services.Transport.Tcp;
-
-public class ClientTcpDispatcher : ClientWriteTcpDispatcher
-{
- public ClientTcpDispatcher(int writeTimeoutMs)
- : this(TimeSpan.FromMilliseconds(writeTimeoutMs))
- {
- }
-
- public ClientTcpDispatcher(TimeSpan writeTimeout) : base(writeTimeout)
- {
- AddUnwrapper(TcpCommand.Ping, UnwrapPing, ClientVersion.V2);
- AddWrapper(WrapPong, ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.IdentifyClient, UnwrapIdentifyClient, ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.ReadEvent, UnwrapReadEvent, ClientVersion.V2);
- AddWrapper(WrapReadEventCompleted, ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.ReadStreamEventsForward, UnwrapReadStreamEventsForward, ClientVersion.V2);
- AddWrapper(WrapReadStreamEventsForwardCompleted,
- ClientVersion.V2);
- AddUnwrapper(TcpCommand.ReadStreamEventsBackward, UnwrapReadStreamEventsBackward, ClientVersion.V2);
- AddWrapper(WrapReadStreamEventsBackwardCompleted,
- ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.ReadAllEventsForward, UnwrapReadAllEventsForward, ClientVersion.V2);
- AddWrapper(WrapReadAllEventsForwardCompleted,
- ClientVersion.V2);
- AddUnwrapper(TcpCommand.ReadAllEventsBackward, UnwrapReadAllEventsBackward, ClientVersion.V2);
- AddWrapper(WrapReadAllEventsBackwardCompleted,
- ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.FilteredReadAllEventsForward, UnwrapFilteredReadAllEventsForward, ClientVersion.V2);
- AddWrapper(WrapFilteredReadAllEventsForwardCompleted,
- ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.FilteredReadAllEventsBackward, UnwrapFilteredReadAllEventsBackward,
- ClientVersion.V2);
- AddWrapper(WrapFilteredReadAllEventsBackwardCompleted,
- ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.SubscribeToStream, UnwrapSubscribeToStream, ClientVersion.V2);
- AddUnwrapper(TcpCommand.FilteredSubscribeToStream, UnwrapFilteredSubscribeToStream, ClientVersion.V2);
- AddUnwrapper(TcpCommand.UnsubscribeFromStream, UnwrapUnsubscribeFromStream, ClientVersion.V2);
-
- AddWrapper(WrapCheckpointReached, ClientVersion.V2);
-
- AddWrapper(WrapSubscribedToStream, ClientVersion.V2);
- AddWrapper(WrapStreamEventAppeared, ClientVersion.V2);
- AddWrapper(WrapSubscriptionDropped, ClientVersion.V2);
- AddUnwrapper(TcpCommand.CreatePersistentSubscription, UnwrapCreatePersistentSubscription, ClientVersion.V2);
- AddUnwrapper(TcpCommand.DeletePersistentSubscription, UnwrapDeletePersistentSubscription, ClientVersion.V2);
- AddWrapper(
- WrapCreatePersistentSubscriptionCompleted,
- ClientVersion.V2);
- AddWrapper(
- WrapDeletePersistentSubscriptionCompleted,
- ClientVersion.V2);
- AddUnwrapper(TcpCommand.UpdatePersistentSubscription, UnwrapUpdatePersistentSubscription, ClientVersion.V2);
- AddWrapper(
- WrapUpdatePersistentSubscriptionCompleted,
- ClientVersion.V2);
-
-
- AddUnwrapper(TcpCommand.ConnectToPersistentSubscription, UnwrapConnectToPersistentSubscription,
- ClientVersion.V2);
- AddUnwrapper(TcpCommand.PersistentSubscriptionAckEvents, UnwrapPersistentSubscriptionAckEvents,
- ClientVersion.V2);
- AddUnwrapper(TcpCommand.PersistentSubscriptionNakEvents, UnwrapPersistentSubscriptionNackEvents,
- ClientVersion.V2);
- AddWrapper(WrapPersistentSubscriptionConfirmation,
- ClientVersion.V2);
- AddWrapper(
- WrapPersistentSubscriptionStreamEventAppeared, ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.ScavengeDatabase, UnwrapScavengeDatabase, ClientVersion.V2);
- AddWrapper(WrapScavengeDatabaseResponse, ClientVersion.V2);
- AddWrapper(WrapScavengeDatabaseResponse, ClientVersion.V2);
- AddWrapper(WrapScavengeDatabaseResponse, ClientVersion.V2);
-
- AddWrapper(WrapAuthenticated, ClientVersion.V2);
- }
-
-
- private TcpPackage WrapCheckpointReached(ClientMessage.CheckpointReached msg)
- {
- var dto = new CheckpointReached(msg.Position.Value.CommitPosition,
- msg.Position.Value.PreparePosition);
- return new TcpPackage(TcpCommand.CheckpointReached, msg.CorrelationId, dto.Serialize());
- }
-
- private static Message UnwrapPing(TcpPackage package, IEnvelope envelope)
- {
- var data = new byte[package.Data.Count];
- Buffer.BlockCopy(package.Data.Array, package.Data.Offset, data, 0, package.Data.Count);
- var pongMessage = new TcpMessage.PongMessage(package.CorrelationId, data);
- envelope.ReplyWith(pongMessage);
- return pongMessage;
- }
-
- private static Message UnwrapIdentifyClient(TcpPackage package, IEnvelope envelope)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.IdentifyClient(package.CorrelationId, dto.Version, dto.ConnectionName);
- }
-
- private static TcpPackage WrapPong(TcpMessage.PongMessage message)
- {
- return new TcpPackage(TcpCommand.Pong, message.CorrelationId, message.Payload);
- }
-
- private static ClientMessage.ReadEvent
- UnwrapReadEvent(TcpPackage package, IEnvelope envelope, ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.ReadEvent(Guid.NewGuid(), package.CorrelationId, envelope, dto.EventStreamId,
- dto.EventNumber, dto.ResolveLinkTos, dto.RequireLeader, user);
- }
-
- private static TcpPackage WrapReadEventCompleted(ClientMessage.ReadEventCompleted msg)
- {
- var dto = new ReadEventCompleted(
- (ReadEventCompleted.Types.ReadEventResult)msg.Result,
- new ResolvedIndexedEvent(msg.Record.Event, msg.Record.Link), msg.Error);
- return new TcpPackage(TcpCommand.ReadEventCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private static ClientMessage.ReadStreamEventsForward UnwrapReadStreamEventsForward(TcpPackage package,
- IEnvelope envelope, ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.ReadStreamEventsForward(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.EventStreamId, dto.FromEventNumber, dto.MaxCount,
- dto.ResolveLinkTos, dto.RequireLeader, null, user,
- replyOnExpired: false);
- }
-
- private static TcpPackage WrapReadStreamEventsForwardCompleted(
- ClientMessage.ReadStreamEventsForwardCompleted msg)
- {
- var dto = new ReadStreamEventsCompleted(
- ConvertToResolvedIndexedEvents(msg.Events),
- (ReadStreamEventsCompleted.Types.ReadStreamResult)msg.Result,
- msg.NextEventNumber, msg.LastEventNumber, msg.IsEndOfStream, msg.TfLastCommitPosition, msg.Error);
- return new TcpPackage(TcpCommand.ReadStreamEventsForwardCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private static ClientMessage.ReadStreamEventsBackward UnwrapReadStreamEventsBackward(TcpPackage package,
- IEnvelope envelope, ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.ReadStreamEventsBackward(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.EventStreamId, dto.FromEventNumber, dto.MaxCount,
- dto.ResolveLinkTos, dto.RequireLeader, null, user);
- }
-
- private static TcpPackage WrapReadStreamEventsBackwardCompleted(
- ClientMessage.ReadStreamEventsBackwardCompleted msg)
- {
- var dto = new ReadStreamEventsCompleted(
- ConvertToResolvedIndexedEvents(msg.Events),
- (ReadStreamEventsCompleted.Types.ReadStreamResult)msg.Result,
- msg.NextEventNumber, msg.LastEventNumber, msg.IsEndOfStream, msg.TfLastCommitPosition, msg.Error);
- return new TcpPackage(TcpCommand.ReadStreamEventsBackwardCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private static ResolvedIndexedEvent[]
- ConvertToResolvedIndexedEvents(IReadOnlyList events)
- {
- var result = new ResolvedIndexedEvent[events.Count];
- for (int i = 0; i < events.Count; ++i)
- {
- result[i] = new ResolvedIndexedEvent(events[i].Event, events[i].Link);
- }
-
- return result;
- }
-
- private static ClientMessage.ReadAllEventsForward UnwrapReadAllEventsForward(TcpPackage package,
- IEnvelope envelope, ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.ReadAllEventsForward(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.CommitPosition, dto.PreparePosition, dto.MaxCount,
- dto.ResolveLinkTos, dto.RequireLeader, null, user,
- replyOnExpired: false,
- longPollTimeout: null);
- }
-
-
- private static TcpPackage WrapReadAllEventsForwardCompleted(ClientMessage.ReadAllEventsForwardCompleted msg)
- {
- var dto = new ReadAllEventsCompleted(
- msg.CurrentPos.CommitPosition, msg.CurrentPos.PreparePosition, ConvertToResolvedEvents(msg.Events),
- msg.NextPos.CommitPosition, msg.NextPos.PreparePosition,
- (ReadAllEventsCompleted.Types.ReadAllResult)msg.Result, msg.Error);
- return new TcpPackage(TcpCommand.ReadAllEventsForwardCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private static ClientMessage.ReadAllEventsBackward UnwrapReadAllEventsBackward(TcpPackage package,
- IEnvelope envelope, ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.ReadAllEventsBackward(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.CommitPosition, dto.PreparePosition, dto.MaxCount,
- dto.ResolveLinkTos, dto.RequireLeader, null, user);
- }
-
- private static TcpPackage WrapReadAllEventsBackwardCompleted(ClientMessage.ReadAllEventsBackwardCompleted msg)
- {
- var dto = new ReadAllEventsCompleted(
- msg.CurrentPos.CommitPosition, msg.CurrentPos.PreparePosition, ConvertToResolvedEvents(msg.Events),
- msg.NextPos.CommitPosition, msg.NextPos.PreparePosition,
- (ReadAllEventsCompleted.Types.ReadAllResult)msg.Result, msg.Error);
- return new TcpPackage(TcpCommand.ReadAllEventsBackwardCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private static ClientMessage.FilteredReadAllEventsForward UnwrapFilteredReadAllEventsForward(TcpPackage package,
- IEnvelope envelope, ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- IEventFilter eventFilter = EventFilter.Get(true, dto.Filter);
-
- int maxSearchWindow = dto.MaxCount;
- if (dto.MaxSearchWindow > 0)
- {
- maxSearchWindow = dto.MaxSearchWindow;
- }
-
- return new ClientMessage.FilteredReadAllEventsForward(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.CommitPosition, dto.PreparePosition, dto.MaxCount,
- dto.ResolveLinkTos, dto.RequireLeader, maxSearchWindow, null, eventFilter, user,
- replyOnExpired: false,
- longPollTimeout: null);
- }
-
- private static TcpPackage WrapFilteredReadAllEventsForwardCompleted(
- ClientMessage.FilteredReadAllEventsForwardCompleted msg)
- {
- var dto = new FilteredReadAllEventsCompleted(
- msg.CurrentPos.CommitPosition, msg.CurrentPos.PreparePosition, ConvertToResolvedEvents(msg.Events),
- msg.NextPos.CommitPosition, msg.NextPos.PreparePosition, msg.IsEndOfStream,
- (FilteredReadAllEventsCompleted.Types.FilteredReadAllResult)msg.Result, msg.Error);
- return new TcpPackage(TcpCommand.FilteredReadAllEventsForwardCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private static Client.Messages.ResolvedEvent[] ConvertToResolvedEvents(IReadOnlyList events)
- {
- var result = new Client.Messages.ResolvedEvent[events.Count];
- for (int i = 0; i < events.Count; ++i)
- {
- result[i] = new Client.Messages.ResolvedEvent(events[i]);
- }
-
- return result;
- }
-
- private static ClientMessage.FilteredReadAllEventsBackward UnwrapFilteredReadAllEventsBackward(
- TcpPackage package,
- IEnvelope envelope, ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- IEventFilter eventFilter = EventFilter.Get(true, dto.Filter);
-
- int maxSearchWindow = dto.MaxCount;
- if (dto.MaxSearchWindow > 0)
- {
- maxSearchWindow = dto.MaxSearchWindow;
- }
-
- return new ClientMessage.FilteredReadAllEventsBackward(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.CommitPosition, dto.PreparePosition, dto.MaxCount,
- dto.ResolveLinkTos, dto.RequireLeader, maxSearchWindow, null, eventFilter, user, null);
- }
-
- private static TcpPackage WrapFilteredReadAllEventsBackwardCompleted(
- ClientMessage.FilteredReadAllEventsBackwardCompleted msg)
- {
- var dto = new FilteredReadAllEventsCompleted(
- msg.CurrentPos.CommitPosition, msg.CurrentPos.PreparePosition, ConvertToResolvedEvents(msg.Events),
- msg.NextPos.CommitPosition, msg.NextPos.PreparePosition, msg.IsEndOfStream,
- (FilteredReadAllEventsCompleted.Types.FilteredReadAllResult)msg.Result, msg.Error);
- return new TcpPackage(TcpCommand.FilteredReadAllEventsBackwardCompleted, msg.CorrelationId,
- dto.Serialize());
- }
-
- private ClientMessage.SubscribeToStream UnwrapSubscribeToStream(TcpPackage package,
- IEnvelope envelope,
- ClaimsPrincipal user,
- TcpConnectionManager connection)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.SubscribeToStream(Guid.NewGuid(), package.CorrelationId, envelope,
- connection.ConnectionId, dto.EventStreamId, dto.ResolveLinkTos, user);
- }
-
- private ClientMessage.FilteredSubscribeToStream UnwrapFilteredSubscribeToStream(TcpPackage package,
- IEnvelope envelope,
- ClaimsPrincipal user,
- TcpConnectionManager connection)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- IEventFilter eventFilter = EventFilter.Get(dto.EventStreamId.IsEmptyString(), dto.Filter);
-
- return new ClientMessage.FilteredSubscribeToStream(Guid.NewGuid(), package.CorrelationId, envelope,
- connection.ConnectionId, dto.EventStreamId, dto.ResolveLinkTos, user, eventFilter,
- dto.CheckpointInterval, checkpointIntervalCurrent: 0);
- }
-
- private ClientMessage.UnsubscribeFromStream UnwrapUnsubscribeFromStream(TcpPackage package, IEnvelope envelope,
- ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.UnsubscribeFromStream(Guid.NewGuid(), package.CorrelationId, envelope, user);
- }
-
- private TcpPackage WrapSubscribedToStream(ClientMessage.SubscriptionConfirmation msg)
- {
- var dto = new SubscriptionConfirmation(msg.LastIndexedPosition, msg.LastEventNumber ?? 0);
- return new TcpPackage(TcpCommand.SubscriptionConfirmation, msg.CorrelationId, dto.Serialize());
- }
-
- private ClientMessage.CreatePersistentSubscriptionToStream UnwrapCreatePersistentSubscription(
- TcpPackage package, IEnvelope envelope, ClaimsPrincipal user, TcpConnectionManager connection)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- var namedConsumerStrategy = dto.NamedConsumerStrategy;
- if (string.IsNullOrEmpty(namedConsumerStrategy))
- {
- namedConsumerStrategy = dto.PreferRoundRobin
- ? SystemConsumerStrategies.RoundRobin
- : SystemConsumerStrategies.DispatchToSingle;
- }
-
- return new ClientMessage.CreatePersistentSubscriptionToStream(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.EventStreamId, dto.SubscriptionGroupName, dto.ResolveLinkTos, dto.StartFrom,
- dto.MessageTimeoutMilliseconds,
- dto.RecordStatistics, dto.MaxRetryCount, dto.BufferSize, dto.LiveBufferSize,
- dto.ReadBatchSize, dto.CheckpointAfterTime, dto.CheckpointMinCount,
- dto.CheckpointMaxCount, dto.SubscriberMaxCount, namedConsumerStrategy,
- user);
- }
-
- private ClientMessage.UpdatePersistentSubscriptionToStream UnwrapUpdatePersistentSubscription(
- TcpPackage package, IEnvelope envelope, ClaimsPrincipal user, TcpConnectionManager connection)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- var namedConsumerStrategy = dto.NamedConsumerStrategy;
- if (string.IsNullOrEmpty(namedConsumerStrategy))
- {
- namedConsumerStrategy = dto.PreferRoundRobin
- ? SystemConsumerStrategies.RoundRobin
- : SystemConsumerStrategies.DispatchToSingle;
- }
-
- return new ClientMessage.UpdatePersistentSubscriptionToStream(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.EventStreamId, dto.SubscriptionGroupName, dto.ResolveLinkTos, dto.StartFrom,
- dto.MessageTimeoutMilliseconds,
- dto.RecordStatistics, dto.MaxRetryCount, dto.BufferSize, dto.LiveBufferSize,
- dto.ReadBatchSize, dto.CheckpointAfterTime, dto.CheckpointMinCount,
- dto.CheckpointMaxCount, dto.SubscriberMaxCount, namedConsumerStrategy,
- user);
- }
-
- private ClientMessage.DeletePersistentSubscriptionToStream UnwrapDeletePersistentSubscription(
- TcpPackage package, IEnvelope envelope, ClaimsPrincipal user, TcpConnectionManager connection)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.DeletePersistentSubscriptionToStream(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.EventStreamId, dto.SubscriptionGroupName, user);
- }
-
- private TcpPackage WrapDeletePersistentSubscriptionCompleted(
- ClientMessage.DeletePersistentSubscriptionToStreamCompleted msg)
- {
- var dto = new DeletePersistentSubscriptionCompleted(
- (DeletePersistentSubscriptionCompleted.Types.DeletePersistentSubscriptionResult)msg
- .Result, msg.Reason);
- return new TcpPackage(TcpCommand.DeletePersistentSubscriptionCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private TcpPackage WrapCreatePersistentSubscriptionCompleted(
- ClientMessage.CreatePersistentSubscriptionToStreamCompleted msg)
- {
- var dto = new CreatePersistentSubscriptionCompleted(
- (CreatePersistentSubscriptionCompleted.Types.CreatePersistentSubscriptionResult)msg
- .Result, msg.Reason);
- return new TcpPackage(TcpCommand.CreatePersistentSubscriptionCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private TcpPackage WrapUpdatePersistentSubscriptionCompleted(
- ClientMessage.UpdatePersistentSubscriptionToStreamCompleted msg)
- {
- var dto = new UpdatePersistentSubscriptionCompleted(
- (UpdatePersistentSubscriptionCompleted.Types.UpdatePersistentSubscriptionResult)msg
- .Result, msg.Reason);
- return new TcpPackage(TcpCommand.UpdatePersistentSubscriptionCompleted, msg.CorrelationId, dto.Serialize());
- }
-
-
- private ClientMessage.ConnectToPersistentSubscriptionToStream UnwrapConnectToPersistentSubscription(
- TcpPackage package, IEnvelope envelope, ClaimsPrincipal user, TcpConnectionManager connection)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.ConnectToPersistentSubscriptionToStream(Guid.NewGuid(), package.CorrelationId,
- envelope,
- connection.ConnectionId, connection.ClientConnectionName, dto.SubscriptionId, dto.EventStreamId,
- dto.AllowedInFlightMessages,
- connection.RemoteEndPoint.ToString(), user);
- }
-
- private ClientMessage.PersistentSubscriptionAckEvents UnwrapPersistentSubscriptionAckEvents(
- TcpPackage package, IEnvelope envelope, ClaimsPrincipal user, TcpConnectionManager connection)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.PersistentSubscriptionAckEvents(
- Guid.NewGuid(), package.CorrelationId, envelope, dto.SubscriptionId,
- dto.ProcessedEventIds.Select(x => new Guid(x.ToByteArray())).ToArray(), user);
- }
-
- private ClientMessage.PersistentSubscriptionNackEvents UnwrapPersistentSubscriptionNackEvents(
- TcpPackage package, IEnvelope envelope, ClaimsPrincipal user, TcpConnectionManager connection)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.PersistentSubscriptionNackEvents(
- Guid.NewGuid(), package.CorrelationId, envelope, dto.SubscriptionId,
- dto.Message, (ClientMessage.PersistentSubscriptionNackEvents.NakAction)dto.Action,
- dto.ProcessedEventIds.Select(x => new Guid(x.ToByteArray())).ToArray(), user);
- }
-
- private TcpPackage
- WrapPersistentSubscriptionConfirmation(ClientMessage.PersistentSubscriptionConfirmation msg)
- {
- var dto = new PersistentSubscriptionConfirmation(msg.LastIndexedPosition,
- msg.SubscriptionId, msg.LastEventNumber ?? 0);
- return new TcpPackage(TcpCommand.PersistentSubscriptionConfirmation, msg.CorrelationId, dto.Serialize());
- }
-
- private TcpPackage WrapPersistentSubscriptionStreamEventAppeared(
- ClientMessage.PersistentSubscriptionStreamEventAppeared msg)
- {
- var dto = new PersistentSubscriptionStreamEventAppeared(
- new ResolvedIndexedEvent(msg.Event.Event, msg.Event.Link), msg.RetryCount);
- return new TcpPackage(TcpCommand.PersistentSubscriptionStreamEventAppeared, msg.CorrelationId,
- dto.Serialize());
- }
-
- private TcpPackage WrapStreamEventAppeared(ClientMessage.StreamEventAppeared msg)
- {
- var dto = new StreamEventAppeared(new Client.Messages.ResolvedEvent(msg.Event));
- return new TcpPackage(TcpCommand.StreamEventAppeared, msg.CorrelationId, dto.Serialize());
- }
-
- private TcpPackage WrapSubscriptionDropped(ClientMessage.SubscriptionDropped msg)
- {
- var dto = new SubscriptionDropped(
- (SubscriptionDropped.Types.SubscriptionDropReason)msg.Reason);
- return new TcpPackage(TcpCommand.SubscriptionDropped, msg.CorrelationId, dto.Serialize());
- }
-
- private ClientMessage.ScavengeDatabase UnwrapScavengeDatabase(TcpPackage package, IEnvelope envelope,
- ClaimsPrincipal user)
- {
- return new ClientMessage.ScavengeDatabase(envelope, package.CorrelationId, user, 0, 1, null, null, false);
- }
-
- private TcpPackage WrapScavengeDatabaseResponse(Message msg)
- {
- ScavengeDatabaseResponse.Types.ScavengeResult result;
- string scavengeId;
- Guid correlationId;
-
- switch (msg)
- {
- case ClientMessage.ScavengeDatabaseStartedResponse startedResponse:
- result = ScavengeDatabaseResponse.Types.ScavengeResult.Started;
- scavengeId = startedResponse.ScavengeId;
- correlationId = startedResponse.CorrelationId;
- break;
- case ClientMessage.ScavengeDatabaseInProgressResponse inProgressResponse:
- result = ScavengeDatabaseResponse.Types.ScavengeResult.InProgress;
- scavengeId = inProgressResponse.ScavengeId;
- correlationId = inProgressResponse.CorrelationId;
- break;
- case ClientMessage.ScavengeDatabaseUnauthorizedResponse unauthorizedResponse:
- result = ScavengeDatabaseResponse.Types.ScavengeResult.Unauthorized;
- scavengeId = unauthorizedResponse.ScavengeId;
- correlationId = unauthorizedResponse.CorrelationId;
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
-
- var dto = new ScavengeDatabaseResponse(result, scavengeId);
- return new TcpPackage(TcpCommand.ScavengeDatabaseResponse, correlationId, dto.Serialize());
- }
-
- private TcpPackage WrapAuthenticated(TcpMessage.Authenticated msg)
- {
- return new TcpPackage(TcpCommand.Authenticated, msg.CorrelationId, Empty.ByteArray);
- }
-}
diff --git a/src/EventStore.Core/Services/Transport/Tcp/ClientWriteTcpDispatcher.cs b/src/EventStore.Core/Services/Transport/Tcp/ClientWriteTcpDispatcher.cs
deleted file mode 100644
index 3b8bf388c8..0000000000
--- a/src/EventStore.Core/Services/Transport/Tcp/ClientWriteTcpDispatcher.cs
+++ /dev/null
@@ -1,439 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net;
-using System.Security.Claims;
-using System.Security.Principal;
-using System.Threading;
-using EventStore.Client.Messages;
-using EventStore.Common.Utils;
-using EventStore.Core.Authentication;
-using EventStore.Core.Authentication.DelegatedAuthentication;
-using EventStore.Core.Data;
-using EventStore.Core.Helpers;
-using EventStore.Core.Messages;
-using EventStore.Core.Messaging;
-using EventStore.Core.Util;
-using Google.Protobuf;
-using Microsoft.Diagnostics.Tracing.Parsers.IIS_Trace;
-using OperationResult = EventStore.Core.Messages.OperationResult;
-
-namespace EventStore.Core.Services.Transport.Tcp
-{
- public enum ClientVersion : byte
- {
- V1 = 0,
- V2 = 1
- }
-
- public class ClientWriteTcpDispatcher : TcpDispatcher
- {
- private readonly TimeSpan _writeTimeout;
-
- protected ClientWriteTcpDispatcher(TimeSpan writeTimeout)
- {
- _writeTimeout = writeTimeout;
- AddUnwrapper(TcpCommand.WriteEvents, UnwrapWriteEvents, ClientVersion.V2);
- AddWrapper(WrapWriteEvents, ClientVersion.V2);
- AddUnwrapper(TcpCommand.WriteEventsCompleted, UnwrapWriteEventsCompleted, ClientVersion.V2);
- AddWrapper(WrapWriteEventsCompleted, ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.TransactionStart, UnwrapTransactionStart, ClientVersion.V2);
- AddWrapper(WrapTransactionStart, ClientVersion.V2);
- AddUnwrapper(TcpCommand.TransactionStartCompleted, UnwrapTransactionStartCompleted, ClientVersion.V2);
- AddWrapper(WrapTransactionStartCompleted, ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.TransactionWrite, UnwrapTransactionWrite, ClientVersion.V2);
- AddWrapper(WrapTransactionWrite, ClientVersion.V2);
- AddUnwrapper(TcpCommand.TransactionWriteCompleted, UnwrapTransactionWriteCompleted, ClientVersion.V2);
- AddWrapper(WrapTransactionWriteCompleted, ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.TransactionCommit, UnwrapTransactionCommit, ClientVersion.V2);
- AddWrapper(WrapTransactionCommit, ClientVersion.V2);
- AddUnwrapper(TcpCommand.TransactionCommitCompleted, UnwrapTransactionCommitCompleted, ClientVersion.V2);
- AddWrapper(WrapTransactionCommitCompleted, ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.DeleteStream, UnwrapDeleteStream, ClientVersion.V2);
- AddWrapper(WrapDeleteStream, ClientVersion.V2);
- AddUnwrapper(TcpCommand.DeleteStreamCompleted, UnwrapDeleteStreamCompleted, ClientVersion.V2);
- AddWrapper(WrapDeleteStreamCompleted, ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.NotHandled, UnwrapNotHandled, ClientVersion.V2);
- AddWrapper(WrapNotHandled, ClientVersion.V2);
-
- AddUnwrapper(TcpCommand.NotAuthenticated, UnwrapNotAuthenticated, ClientVersion.V2);
- AddWrapper(WrapNotAuthenticated, ClientVersion.V2);
- }
- private ClientMessage.WriteEvents UnwrapWriteEvents(TcpPackage package, IEnvelope envelope,
- ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- var events = new Event[dto.Events.Count];
- for (int i = 0; i < events.Length; ++i)
- {
- // ReSharper disable PossibleNullReferenceException
- var e = dto.Events[i];
- // ReSharper restore PossibleNullReferenceException
- events[i] = new Event(new Guid(e.EventId.ToByteArray()), e.EventType, e.DataContentType == 1, e.Data.ToByteArray(), e.Metadata.ToByteArray());
- }
-
- var cts = new CancellationTokenSource();
- var envelopeWrapper = new CallbackEnvelope(OnMessage);
- cts.CancelAfter(_writeTimeout);
-
- return new ClientMessage.WriteEvents(Guid.NewGuid(), package.CorrelationId, envelopeWrapper, dto.RequireLeader,
- dto.EventStreamId, dto.ExpectedVersion, events, user, package.Tokens, cts.Token);
-
- void OnMessage(Message m)
- {
- cts.Dispose();
- envelope.ReplyWith(m);
- }
- }
-
- private static TcpPackage WrapWriteEvents(ClientMessage.WriteEvents msg)
- {
- var events = new NewEvent[msg.Events.Length];
- for (int i = 0; i < events.Length; ++i)
- {
- var e = msg.Events[i];
- events[i] = new NewEvent(e.EventId.ToByteArray(),
- e.EventType,
- e.IsJson ? 1 : 0,
- 0, e.Data,
- e.Metadata);
- }
-
- var dto = new WriteEvents(msg.EventStreamId, msg.ExpectedVersion, events,
- msg.RequireLeader);
- return CreateWriteRequestPackage(TcpCommand.WriteEvents, msg, dto);
- }
-
- private static TcpPackage CreateWriteRequestPackage(TcpCommand command, ClientMessage.WriteRequestMessage msg,
- T dto) where T : IMessage
- {
- // we forwarding with InternalCorrId, not client's CorrelationId!!!
- if (msg.User == UserManagement.SystemAccounts.System)
- {
- return new TcpPackage(command, TcpFlags.TrustedWrite, msg.InternalCorrId, null, null, dto.Serialize());
- }
-
- foreach (var identity in msg.User.Identities)
- {
- if (!(identity is DelegatedClaimsIdentity dci))
- {
- continue;
- }
-
- var jwtClaim = dci.FindFirst(AuthenticationTokenKeys.Jwt);
- if (jwtClaim != null)
- {
- return new TcpPackage(command, TcpFlags.Authenticated, msg.InternalCorrId, jwtClaim.Value,
- dto.Serialize());
- }
-
- var uidClaim = dci.FindFirst(AuthenticationTokenKeys.Username);
- var pwdClaim = dci.FindFirst(AuthenticationTokenKeys.Password);
-
- if (uidClaim != null && pwdClaim != null)
- {
- return new TcpPackage(command, TcpFlags.Authenticated, msg.InternalCorrId, uidClaim.Value,
- pwdClaim.Value, dto.Serialize());
- }
- }
-
- return msg.Login != null && msg.Password != null
- ? new TcpPackage(command, TcpFlags.Authenticated, msg.InternalCorrId, msg.Login, msg.Password,
- dto.Serialize())
- : new TcpPackage(command, TcpFlags.None, msg.InternalCorrId, null, null, dto.Serialize());
- }
-
- private static ClientMessage.WriteEventsCompleted UnwrapWriteEventsCompleted(TcpPackage package,
- IEnvelope envelope)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- if (dto.Result == Client.Messages.OperationResult.Success)
- {
- return new ClientMessage.WriteEventsCompleted(package.CorrelationId,
- dto.FirstEventNumber,
- dto.LastEventNumber,
- dto.PreparePosition,
- dto.CommitPosition);
- }
-
- return new ClientMessage.WriteEventsCompleted(package.CorrelationId,
- (OperationResult)dto.Result,
- dto.Message,
- dto.CurrentVersion);
- }
-
- private static TcpPackage WrapWriteEventsCompleted(ClientMessage.WriteEventsCompleted msg)
- {
- var dto = new WriteEventsCompleted((Client.Messages.OperationResult)msg.Result,
- msg.Message,
- msg.FirstEventNumber,
- msg.LastEventNumber,
- msg.PreparePosition,
- msg.CommitPosition,
- msg.CurrentVersion);
- return new TcpPackage(TcpCommand.WriteEventsCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private static ClientMessage.TransactionStart UnwrapTransactionStart(TcpPackage package, IEnvelope envelope,
- ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.TransactionStart(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.RequireLeader,
- dto.EventStreamId, dto.ExpectedVersion, user, package.Tokens);
- }
-
- private static TcpPackage WrapTransactionStart(ClientMessage.TransactionStart msg)
- {
- var dto = new TransactionStart(msg.EventStreamId, msg.ExpectedVersion,
- msg.RequireLeader);
- return CreateWriteRequestPackage(TcpCommand.TransactionStart, msg, dto);
- }
-
- private static ClientMessage.TransactionStartCompleted UnwrapTransactionStartCompleted(TcpPackage package,
- IEnvelope envelope)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.TransactionStartCompleted(package.CorrelationId, dto.TransactionId,
- (OperationResult)dto.Result, dto.Message);
- }
-
- private static TcpPackage WrapTransactionStartCompleted(ClientMessage.TransactionStartCompleted msg)
- {
- var dto = new TransactionStartCompleted(msg.TransactionId,
- (Client.Messages.OperationResult)msg.Result, msg.Message);
- return new TcpPackage(TcpCommand.TransactionStartCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private static ClientMessage.TransactionWrite UnwrapTransactionWrite(TcpPackage package, IEnvelope envelope,
- ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- var events = new Event[dto.Events.Count];
- for (int i = 0; i < events.Length; ++i)
- {
- // ReSharper disable PossibleNullReferenceException
- var e = dto.Events[i];
- // ReSharper restore PossibleNullReferenceException
- events[i] = new Event(new Guid(e.EventId.ToByteArray()), e.EventType, e.DataContentType == 1, e.Data.ToByteArray(), e.Metadata.ToByteArray());
- }
-
- return new ClientMessage.TransactionWrite(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.RequireLeader,
- dto.TransactionId, events, user, package.Tokens);
- }
-
- private static TcpPackage WrapTransactionWrite(ClientMessage.TransactionWrite msg)
- {
- var events = new NewEvent[msg.Events.Length];
- for (int i = 0; i < events.Length; ++i)
- {
- var e = msg.Events[i];
- events[i] = new NewEvent(e.EventId.ToByteArray(), e.EventType, e.IsJson ? 1 : 0, 0,
- e.Data, e.Metadata);
- }
-
- var dto = new TransactionWrite(msg.TransactionId, events, msg.RequireLeader);
- return CreateWriteRequestPackage(TcpCommand.TransactionWrite, msg, dto);
- }
-
- private static ClientMessage.TransactionWriteCompleted UnwrapTransactionWriteCompleted(TcpPackage package,
- IEnvelope envelope)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.TransactionWriteCompleted(package.CorrelationId, dto.TransactionId,
- (OperationResult)dto.Result, dto.Message);
- }
-
- private static TcpPackage WrapTransactionWriteCompleted(ClientMessage.TransactionWriteCompleted msg)
- {
- var dto = new TransactionWriteCompleted(msg.TransactionId,
- (Client.Messages.OperationResult)msg.Result, msg.Message);
- return new TcpPackage(TcpCommand.TransactionWriteCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private static ClientMessage.TransactionCommit UnwrapTransactionCommit(TcpPackage package, IEnvelope envelope,
- ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.TransactionCommit(Guid.NewGuid(), package.CorrelationId, envelope,
- dto.RequireLeader, dto.TransactionId, user, package.Tokens);
- }
-
- private static TcpPackage WrapTransactionCommit(ClientMessage.TransactionCommit msg)
- {
- var dto = new TransactionCommit(msg.TransactionId, msg.RequireLeader);
- return CreateWriteRequestPackage(TcpCommand.TransactionCommit, msg, dto);
- }
-
- private static ClientMessage.TransactionCommitCompleted UnwrapTransactionCommitCompleted(TcpPackage package,
- IEnvelope envelope)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- if (dto.Result == Client.Messages.OperationResult.Success)
- {
- return new ClientMessage.TransactionCommitCompleted(package.CorrelationId, dto.TransactionId,
- dto.FirstEventNumber, dto.LastEventNumber, dto.PreparePosition, dto.CommitPosition);
- }
-
- return new ClientMessage.TransactionCommitCompleted(package.CorrelationId, dto.TransactionId,
- (OperationResult)dto.Result, dto.Message);
- }
-
- private static TcpPackage WrapTransactionCommitCompleted(ClientMessage.TransactionCommitCompleted msg)
- {
- var dto = new TransactionCommitCompleted(msg.TransactionId,
- (Client.Messages.OperationResult)msg.Result,
- msg.Message, msg.FirstEventNumber, msg.LastEventNumber, msg.PreparePosition, msg.CommitPosition);
- return new TcpPackage(TcpCommand.TransactionCommitCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private ClientMessage.DeleteStream UnwrapDeleteStream(TcpPackage package, IEnvelope envelope,
- ClaimsPrincipal user)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- var cts = new CancellationTokenSource();
- var envelopeWrapper = new CallbackEnvelope(OnMessage);
- cts.CancelAfter(_writeTimeout);
-
- return new ClientMessage.DeleteStream(Guid.NewGuid(), package.CorrelationId, envelopeWrapper, dto.RequireLeader,
- dto.EventStreamId, dto.ExpectedVersion, dto.HardDelete, user, package.Tokens, cts.Token);
-
- void OnMessage(Message m)
- {
- cts.Dispose();
- envelope.ReplyWith(m);
- }
- }
-
- private static TcpPackage WrapDeleteStream(ClientMessage.DeleteStream msg)
- {
- var dto = new DeleteStream(msg.EventStreamId, msg.ExpectedVersion, msg.RequireLeader,
- msg.HardDelete);
- return CreateWriteRequestPackage(TcpCommand.DeleteStream, msg, dto);
- }
-
- private static ClientMessage.DeleteStreamCompleted UnwrapDeleteStreamCompleted(TcpPackage package,
- IEnvelope envelope)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- return new ClientMessage.DeleteStreamCompleted(package.CorrelationId, (OperationResult)dto.Result,
- dto.Message,
- dto.CurrentVersion,
- dto.PreparePosition,
- dto.CommitPosition);
- }
-
- private static TcpPackage WrapDeleteStreamCompleted(ClientMessage.DeleteStreamCompleted msg)
- {
- var dto = new DeleteStreamCompleted((Client.Messages.OperationResult)msg.Result,
- msg.Message,
- msg.CurrentVersion,
- msg.PreparePosition,
- msg.CommitPosition);
- return new TcpPackage(TcpCommand.DeleteStreamCompleted, msg.CorrelationId, dto.Serialize());
- }
-
- private static ClientMessage.NotHandled UnwrapNotHandled(TcpPackage package, IEnvelope envelope)
- {
- var dto = package.Data.Deserialize();
- if (dto == null)
- {
- return null;
- }
-
- var reason = dto.Reason switch
- {
- NotHandled.Types.NotHandledReason.NotReady => ClientMessage.NotHandled.Types.NotHandledReason.NotReady,
- NotHandled.Types.NotHandledReason.TooBusy => ClientMessage.NotHandled.Types.NotHandledReason.TooBusy,
- NotHandled.Types.NotHandledReason.NotLeader => ClientMessage.NotHandled.Types.NotHandledReason.NotLeader,
- NotHandled.Types.NotHandledReason.IsReadOnly => ClientMessage.NotHandled.Types.NotHandledReason.IsReadOnly,
- _ => ClientMessage.NotHandled.Types.NotHandledReason.NotReady
- };
- var leaderInfoDto = dto.AdditionalInfo.IsEmpty
- ? null
- : dto.AdditionalInfo.ToByteArray().Deserialize();
-
- var leaderInfo = leaderInfoDto switch
- {
- { ExternalTcpAddress.Length: > 0 } => new ClientMessage.NotHandled.Types.LeaderInfo(
- new DnsEndPoint(leaderInfoDto.ExternalTcpAddress, leaderInfoDto.ExternalTcpPort), false,
- new DnsEndPoint(leaderInfoDto.HttpAddress, leaderInfoDto.HttpPort)),
- { ExternalSecureTcpAddress.Length: > 0 } => new ClientMessage.NotHandled.Types.LeaderInfo(
- new DnsEndPoint(leaderInfoDto.ExternalSecureTcpAddress, leaderInfoDto.ExternalSecureTcpPort), true,
- new DnsEndPoint(leaderInfoDto.HttpAddress, leaderInfoDto.HttpPort)),
- _ => null
- };
- return new ClientMessage.NotHandled(package.CorrelationId, reason, leaderInfo);
- }
-
- private static TcpPackage WrapNotHandled(ClientMessage.NotHandled msg)
- {
- var dto = new Client.Messages.NotHandled(msg);
- return new TcpPackage(TcpCommand.NotHandled, msg.CorrelationId, dto.Serialize());
- }
-
- private static TcpMessage.NotAuthenticated UnwrapNotAuthenticated(TcpPackage package, IEnvelope envelope) =>
- new(package.CorrelationId,
- Helper.UTF8NoBom.GetString(package.Data.Array, package.Data.Offset, package.Data.Count));
-
- private static TcpPackage WrapNotAuthenticated(TcpMessage.NotAuthenticated msg) =>
- new(TcpCommand.NotAuthenticated, msg.CorrelationId,
- Helper.UTF8NoBom.GetBytes(msg.Reason ?? string.Empty));
- }
-}
diff --git a/src/EventStore.Core/Services/Transport/Tcp/ITcpDispatcher.cs b/src/EventStore.Core/Services/Transport/Tcp/ITcpDispatcher.cs
deleted file mode 100644
index d629eb6ab7..0000000000
--- a/src/EventStore.Core/Services/Transport/Tcp/ITcpDispatcher.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Collections.Generic;
-using System.Security.Claims;
-using EventStore.Core.Messaging;
-
-namespace EventStore.Core.Services.Transport.Tcp
-{
- public interface ITcpDispatcher
- {
- TcpPackage? WrapMessage(Message message, byte version);
-
- Message UnwrapPackage(TcpPackage package, IEnvelope envelope, ClaimsPrincipal user,
- IReadOnlyDictionary tokens, TcpConnectionManager connection, byte version);
- }
-}
diff --git a/src/EventStore.Core/Services/Transport/Tcp/ProtobufExtensions.cs b/src/EventStore.Core/Services/Transport/Tcp/ProtobufExtensions.cs
deleted file mode 100644
index 4a2e7bc89e..0000000000
--- a/src/EventStore.Core/Services/Transport/Tcp/ProtobufExtensions.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-using System;
-using System.Collections.Concurrent;
-using System.IO;
-using System.Threading;
-using Google.Protobuf;
-using ILogger = Serilog.ILogger;
-
-namespace EventStore.Core.Services.Transport.Tcp
-{
- public static class ProtobufExtensions
- {
- private static readonly ConcurrentStack _streams;
-
- static ProtobufExtensions()
- {
- _streams = new ConcurrentStack();
- for (var i = 0; i < 300; i++)
- {
- _streams.Push(new MemoryStream(2048));
- }
- }
-
- private static readonly ILogger Log =
- Serilog.Log.ForContext(Serilog.Core.Constants.SourceContextPropertyName, "ProtobufExtensions");
-
- static MemoryStream AcquireStream()
- {
- for (var i = 0; i < 1000; i++)
- {
- MemoryStream ret;
- if (_streams.TryPop(out ret))
- {
- ret.SetLength(0);
- return ret;
- }
-
- if ((i + 1) % 5 == 0)
- {
- Thread.Sleep(1); //need to do better than this
- }
- }
-
- throw new UnableToAcquireStreamException();
- }
-
- static void ReleaseStream(MemoryStream stream)
- {
- _streams.Push(stream);
- }
-
- public static T Deserialize(this byte[] data) where T : IMessage, new()
- {
- return Deserialize(new ArraySegment(data));
- }
-
- public static T Deserialize(this ArraySegment data) where T : IMessage, new()
- {
- try
- {
- using (var memory = new MemoryStream(data.Array, data.Offset, data.Count)
- ) //uses original buffer as memory
- {
- var res = new T();
- res.MergeFrom(memory);
- return res;
- }
- }
- catch (Exception e)
- {
- Log.Information(e, "Deserialization to {type} failed", typeof(T).FullName);
- return default(T);
- }
- }
-
- public static ArraySegment Serialize(this T protoContract) where T : IMessage
- {
- MemoryStream stream = null;
- try
- {
- stream = AcquireStream();
- protoContract.WriteTo(stream);
- var res = new ArraySegment(stream.ToArray(), 0, (int)stream.Length);
- return res;
- }
- finally
- {
- if (stream != null)
- {
- ReleaseStream(stream);
- }
- }
- }
-
- public static byte[] SerializeToArray(this T protoContract) where T : IMessage
- {
- MemoryStream stream = null;
- try
- {
- stream = AcquireStream();
- protoContract.WriteTo(stream);
- return stream.ToArray();
- }
- finally
- {
- if (stream != null)
- {
- ReleaseStream(stream);
- }
- }
- }
- }
-}
diff --git a/src/EventStore.Core/Services/Transport/Tcp/SendOverTcpEnvelope.cs b/src/EventStore.Core/Services/Transport/Tcp/SendOverTcpEnvelope.cs
deleted file mode 100644
index 2eeb6d6c87..0000000000
--- a/src/EventStore.Core/Services/Transport/Tcp/SendOverTcpEnvelope.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using EventStore.Common.Utils;
-using EventStore.Core.Bus;
-using EventStore.Core.Messages;
-using EventStore.Core.Messaging;
-
-namespace EventStore.Core.Services.Transport.Tcp
-{
- public class SendOverTcpEnvelope : IEnvelope
- {
- private readonly IPublisher _networkSendQueue;
- private readonly TcpConnectionManager _manager;
-
- public SendOverTcpEnvelope(TcpConnectionManager manager, IPublisher networkSendQueue)
- {
- Ensure.NotNull(manager, "manager");
- Ensure.NotNull(networkSendQueue, "networkSendQueue");
- _networkSendQueue = networkSendQueue;
- _manager = manager;
- }
-
- public void ReplyWith(T message) where T : Message
- {
- if (_manager != null && !_manager.IsClosed)
- {
- _networkSendQueue.Publish(new TcpMessage.TcpSend(_manager, message));
- }
- }
- }
-}
diff --git a/src/EventStore.Core/Services/Transport/Tcp/TcpCommand.cs b/src/EventStore.Core/Services/Transport/Tcp/TcpCommand.cs
deleted file mode 100644
index d36a90d10e..0000000000
--- a/src/EventStore.Core/Services/Transport/Tcp/TcpCommand.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-namespace EventStore.Core.Services.Transport.Tcp
-{
- public enum TcpCommand : byte
- {
- HeartbeatRequestCommand = 0x01,
- HeartbeatResponseCommand = 0x02,
-
- Ping = 0x03,
- Pong = 0x04,
-
- // CLIENT COMMANDS
- // CreateStream = 0x80,
- // CreateStreamCompleted = 0x81,
-
- WriteEvents = 0x82,
- WriteEventsCompleted = 0x83,
-
- TransactionStart = 0x84,
- TransactionStartCompleted = 0x85,
- TransactionWrite = 0x86,
- TransactionWriteCompleted = 0x87,
- TransactionCommit = 0x88,
- TransactionCommitCompleted = 0x89,
-
- DeleteStream = 0x8A,
- DeleteStreamCompleted = 0x8B,
-
- ReadEvent = 0xB0,
- ReadEventCompleted = 0xB1,
- ReadStreamEventsForward = 0xB2,
- ReadStreamEventsForwardCompleted = 0xB3,
- ReadStreamEventsBackward = 0xB4,
- ReadStreamEventsBackwardCompleted = 0xB5,
- ReadAllEventsForward = 0xB6,
- ReadAllEventsForwardCompleted = 0xB7,
- ReadAllEventsBackward = 0xB8,
- ReadAllEventsBackwardCompleted = 0xB9,
- FilteredReadAllEventsForward = 0xBA,
- FilteredReadAllEventsForwardCompleted = 0xBB,
- FilteredReadAllEventsBackward = 0xBC,
- FilteredReadAllEventsBackwardCompleted = 0xBE,
-
- SubscribeToStream = 0xC0,
- SubscriptionConfirmation = 0xC1,
- StreamEventAppeared = 0xC2,
- UnsubscribeFromStream = 0xC3,
- SubscriptionDropped = 0xC4,
- ConnectToPersistentSubscription = 0xC5,
- PersistentSubscriptionConfirmation = 0xC6,
- PersistentSubscriptionStreamEventAppeared = 0xC7,
- CreatePersistentSubscription = 0xC8,
- CreatePersistentSubscriptionCompleted = 0xC9,
- DeletePersistentSubscription = 0xCA,
- DeletePersistentSubscriptionCompleted = 0xCB,
- PersistentSubscriptionAckEvents = 0xCC,
- PersistentSubscriptionNakEvents = 0xCD,
- UpdatePersistentSubscription = 0xCE,
- UpdatePersistentSubscriptionCompleted = 0xCF,
- FilteredSubscribeToStream = 0xD2,
- CheckpointReached = 0xD3,
-
- ScavengeDatabase = 0xD0,
- ScavengeDatabaseResponse = 0xD1,
-
- BadRequest = 0xF0,
- NotHandled = 0xF1,
- Authenticate = 0xF2,
- Authenticated = 0xF3,
- NotAuthenticated = 0xF4,
- IdentifyClient = 0xF5,
- ClientIdentified = 0xF6,
- }
-}
diff --git a/src/EventStore.Core/Services/Transport/Tcp/TcpConnectionManager.cs b/src/EventStore.Core/Services/Transport/Tcp/TcpConnectionManager.cs
deleted file mode 100644
index 035825907b..0000000000
--- a/src/EventStore.Core/Services/Transport/Tcp/TcpConnectionManager.cs
+++ /dev/null
@@ -1,682 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Net;
-using System.Net.Security;
-using System.Net.Sockets;
-using System.Security.Claims;
-using System.Security.Cryptography.X509Certificates;
-using System.Threading;
-using EventStore.Client.Messages;
-using EventStore.Common.Utils;
-using EventStore.Core.Bus;
-using EventStore.Core.Messages;
-using EventStore.Core.Messaging;
-using EventStore.Core.Services.TimerService;
-using EventStore.Core.Settings;
-using EventStore.Plugins.Authentication;
-using EventStore.Transport.Tcp;
-using EventStore.Transport.Tcp.Framing;
-using ILogger = Serilog.ILogger;
-
-namespace EventStore.Core.Services.Transport.Tcp
-{
- ///
- /// Manager for individual TCP connection. It handles connection lifecycle,
- /// heartbeats, message framing and dispatch to the memory bus.
- ///
- public class TcpConnectionManager : IHandle, IHandle
- {
- public static readonly TimeSpan ConnectionTimeout = TimeSpan.FromMilliseconds(1000);
-
- private static readonly ILogger Log = Serilog.Log.ForContext();
- private static readonly ClaimsPrincipal Anonymous = new ClaimsPrincipal(new ClaimsIdentity(new[] { new Claim(ClaimTypes.Anonymous, ""), }));
- public readonly Guid ConnectionId;
- public readonly string ConnectionName;
- public readonly EndPoint RemoteEndPoint;
-
- public EndPoint LocalEndPoint
- {
- get { return _connection.LocalEndPoint; }
- }
-
- public bool IsClosed
- {
- get { return _isClosed != 0; }
- }
-
- public int SendQueueSize
- {
- get { return _connection.SendQueueSize; }
- }
-
- public string ClientConnectionName
- {
- get { return _clientConnectionName; }
- }
-
- private readonly ITcpConnection _connection;
- private readonly IEnvelope _tcpEnvelope;
- private readonly IPublisher _publisher;
- private readonly ITcpDispatcher _dispatcher;
- private readonly IMessageFramer> _framer;
- private long _receiveProgressIndicator => _connection?.TotalBytesReceived ?? 0L;
- private long _sendProgressIndicator => _connection?.TotalBytesSent ?? 0L;
- private int _isClosed;
- private string _clientConnectionName;
-
- private byte _version;
-
- private readonly Action _connectionClosed;
- private readonly Action _connectionEstablished;
-
- private readonly SendToWeakThisEnvelope _weakThisEnvelope;
- private readonly TimeSpan _heartbeatInterval;
- private readonly TimeSpan _heartbeatTimeout;
- private bool _awaitingHeartbeatTimeoutCheck;
- private readonly int _connectionPendingSendBytesThreshold;
- private readonly int _connectionQueueSizeThreshold;
-
- private readonly IAuthenticationProvider _authProvider;
- private readonly AuthorizationGateway _authorization;
- private UserCredentials _defaultUser;
- private TcpServiceType _serviceType;
-
- public TcpConnectionManager(string connectionName,
- TcpServiceType serviceType,
- ITcpDispatcher dispatcher,
- IPublisher publisher,
- ITcpConnection openedConnection,
- IPublisher networkSendQueue,
- IAuthenticationProvider authProvider,
- AuthorizationGateway authorization,
- TimeSpan heartbeatInterval,
- TimeSpan heartbeatTimeout,
- Action onConnectionClosed,
- int connectionPendingSendBytesThreshold,
- int connectionQueueSizeThreshold)
- {
- Ensure.NotNull(dispatcher, "dispatcher");
- Ensure.NotNull(publisher, "publisher");
- Ensure.NotNull(openedConnection, "openedConnnection");
- Ensure.NotNull(networkSendQueue, "networkSendQueue");
- Ensure.NotNull(authProvider, "authProvider");
- Ensure.NotNull(authorization, "authorization");
- ConnectionId = openedConnection.ConnectionId;
- ConnectionName = connectionName;
-
- _serviceType = serviceType;
- _tcpEnvelope = new SendOverTcpEnvelope(this, networkSendQueue);
- _publisher = publisher;
- _dispatcher = dispatcher;
- _authProvider = authProvider;
- _authorization = authorization;
-
- _framer = new LengthPrefixMessageFramer();
- _framer.RegisterMessageArrivedCallback(OnMessageArrived);
-
- _weakThisEnvelope = new SendToWeakThisEnvelope(this);
- _heartbeatInterval = heartbeatInterval;
- _heartbeatTimeout = heartbeatTimeout;
- _connectionPendingSendBytesThreshold = connectionPendingSendBytesThreshold;
- _connectionQueueSizeThreshold = connectionQueueSizeThreshold;
-
- _connectionClosed = onConnectionClosed;
-
- RemoteEndPoint = openedConnection.RemoteEndPoint;
- _connection = openedConnection;
- _connection.ConnectionClosed += OnConnectionClosed;
- if (_connection.IsClosed)
- {
- OnConnectionClosed(_connection, SocketError.Success);
- return;
- }
-
- ScheduleHeartbeat(0L, 0L);
- }
-
- public TcpConnectionManager(string connectionName,
- Guid connectionId,
- ITcpDispatcher dispatcher,
- IPublisher publisher,
- string targetHost,
- string[] otherNames,
- EndPoint remoteEndPoint,
- TcpClientConnector connector,
- bool useSsl,
- CertificateDelegates.ServerCertificateValidator sslServerCertValidator,
- Func sslClientCertificatesSelector,
- IPublisher networkSendQueue,
- IAuthenticationProvider authProvider,
- AuthorizationGateway authorization,
- TimeSpan heartbeatInterval,
- TimeSpan heartbeatTimeout,
- Action onConnectionEstablished,
- Action onConnectionClosed)
- {
- Ensure.NotEmptyGuid(connectionId, "connectionId");
- Ensure.NotNull(dispatcher, "dispatcher");
- Ensure.NotNull(publisher, "publisher");
- Ensure.NotNull(authProvider, "authProvider");
- Ensure.NotNull(authorization, "authorization");
- Ensure.NotNull(remoteEndPoint, "remoteEndPoint");
- Ensure.NotNull(connector, "connector");
-
- ConnectionId = connectionId;
- ConnectionName = connectionName;
-
- _tcpEnvelope = new SendOverTcpEnvelope(this, networkSendQueue);
- _publisher = publisher;
- _dispatcher = dispatcher;
- _authProvider = authProvider;
- _authorization = authorization;
-
- _framer = new LengthPrefixMessageFramer();
- _framer.RegisterMessageArrivedCallback(OnMessageArrived);
-
- _weakThisEnvelope = new SendToWeakThisEnvelope(this);
- _heartbeatInterval = heartbeatInterval;
- _heartbeatTimeout = heartbeatTimeout;
- _connectionPendingSendBytesThreshold = ESConsts.UnrestrictedPendingSendBytes;
- _connectionQueueSizeThreshold = ESConsts.MaxConnectionQueueSize;
-
- _connectionEstablished = onConnectionEstablished;
- _connectionClosed = onConnectionClosed;
-
- RemoteEndPoint = remoteEndPoint;
- _connection = useSsl
- ? connector.ConnectSslTo(ConnectionId, targetHost, otherNames, remoteEndPoint.ResolveDnsToIPAddress(), ConnectionTimeout,
- sslServerCertValidator, sslClientCertificatesSelector, OnConnectionEstablished, OnConnectionFailed)
- : connector.ConnectTo(ConnectionId, remoteEndPoint.ResolveDnsToIPAddress(), ConnectionTimeout, OnConnectionEstablished,
- OnConnectionFailed);
- _connection.ConnectionClosed += OnConnectionClosed;
- if (_connection.IsClosed)
- {
- OnConnectionClosed(_connection, SocketError.Success);
- }
- }
-
- private void OnConnectionEstablished(ITcpConnection connection)
- {
- Log.Information("Connection '{connectionName}' ({connectionId:B}) to [{remoteEndPoint}] established.",
- ConnectionName, ConnectionId, connection.RemoteEndPoint);
-
- ScheduleHeartbeat(0L, 0L);
-
- var handler = _connectionEstablished;
- if (handler != null)
- {
- handler(this);
- }
- }
-
- private void OnConnectionFailed(ITcpConnection connection, SocketError socketError)
- {
- if (Interlocked.CompareExchange(ref _isClosed, 1, 0) != 0)
- {
- return;
- }
-
- Log.Information("Connection '{connectionName}' ({connectionId:B}) to [{remoteEndPoint}] failed: {e}.",
- ConnectionName, ConnectionId, connection.RemoteEndPoint, socketError);
- if (_connectionClosed != null)
- {
- _connectionClosed(this, socketError);
- }
- }
-
- private void OnConnectionClosed(ITcpConnection connection, SocketError socketError)
- {
- if (Interlocked.CompareExchange(ref _isClosed, 1, 0) != 0)
- {
- return;
- }
-
- Log.Information(
- "Connection '{connectionName}{clientConnectionName}' [{remoteEndPoint}, {connectionId:B}] closed: {e}.",
- ConnectionName, ClientConnectionName.IsEmptyString() ? string.Empty : ":" + ClientConnectionName,
- connection.RemoteEndPoint, ConnectionId, socketError);
-
- if (_serviceType == TcpServiceType.Internal && _connection.TotalBytesSent == 0)
- {
- Log.Warning(
- "Unable to connect to Remote EndPoint : {remoteEndPoint}. Connection is potentially blocked. Total bytes sent: {TotalBytesSent}, Total bytes received: {TotalBytesReceived}",
- RemoteEndPoint, _connection.TotalBytesSent, _connection.TotalBytesReceived);
- }
-
- if (_connectionClosed != null)
- {
- _connectionClosed(this, socketError);
- }
- }
-
- public void StartReceiving()
- {
- _connection.ReceiveAsync(OnRawDataReceived);
- }
-
- private void OnRawDataReceived(ITcpConnection connection, IEnumerable> data)
- {
- try
- {
- _framer.UnFrameData(data);
- }
- catch (PackageFramingException exc)
- {
- SendBadRequestAndClose(Guid.Empty,
- string.Format("Invalid TCP frame received. Error: {0}.", exc.Message));
- return;
- }
-
- _connection.ReceiveAsync(OnRawDataReceived);
- }
-
- private void OnMessageArrived(ArraySegment data)
- {
- TcpPackage package;
- try
- {
- package = TcpPackage.FromArraySegment(data);
- }
- catch (Exception e)
- {
- SendBadRequestAndClose(Guid.Empty, string.Format("Received bad network package. Error: {0}", e));
- return;
- }
-
- OnPackageReceived(package);
- }
-
- private void OnPackageReceived(TcpPackage package)
- {
- try
- {
- ProcessPackage(package);
- }
- catch (Exception e)
- {
- SendBadRequestAndClose(package.CorrelationId,
- string.Format("Error while processing package. Error: {0}", e));
- }
- }
-
- public void ProcessPackage(TcpPackage package)
- {
- if (_serviceType == TcpServiceType.External && (package.Flags & TcpFlags.TrustedWrite) != 0)
- {
- SendBadRequestAndClose(package.CorrelationId,
- "Trusted writes aren't accepted over the external TCP interface");
- return;
- }
-
- switch (package.Command)
- {
- case TcpCommand.HeartbeatResponseCommand:
- break;
- case TcpCommand.HeartbeatRequestCommand:
- SendPackage(new TcpPackage(TcpCommand.HeartbeatResponseCommand, package.CorrelationId, null));
- break;
- case TcpCommand.IdentifyClient:
- {
- try
- {
- var message =
- (ClientMessage.IdentifyClient)_dispatcher.UnwrapPackage(package, _tcpEnvelope, null, null,
- this, _version);
- Log.Information(
- "Connection '{connectionName}' ({connectionId:B}) identified by client. Client connection name: '{clientConnectionName}', Client version: {clientVersion}.",
- ConnectionName, ConnectionId, message.ConnectionName, (ClientVersion)message.Version);
- _version = (byte)message.Version;
- _clientConnectionName = message.ConnectionName;
- _connection.SetClientConnectionName(_clientConnectionName);
- SendPackage(new TcpPackage(TcpCommand.ClientIdentified, package.CorrelationId, null));
- }
- catch (Exception ex)
- {
- Log.Error("Error identifying client: {e}", ex);
- }
-
- break;
- }
- case TcpCommand.BadRequest:
- {
- var reason = string.Empty;
- Helper.EatException(() =>
- reason = Helper.UTF8NoBom.GetString(package.Data.Array, package.Data.Offset,
- package.Data.Count));
- Log.Error(
- "Bad request received from '{connectionName}{clientConnectionName}' [{remoteEndPoint}, L{localEndPoint}, {connectionId:B}]. CorrelationId: {correlationId:B}, Error: {e}.",
- ConnectionName,
- ClientConnectionName.IsEmptyString() ? string.Empty : ":" + ClientConnectionName,
- RemoteEndPoint,
- LocalEndPoint, ConnectionId, package.CorrelationId,
- reason.IsEmptyString() ? "" : reason);
- break;
- }
- case TcpCommand.Authenticate:
- {
- if ((package.Flags & TcpFlags.Authenticated) == 0)
- {
- ReplyNotAuthenticated(package.CorrelationId, "No user credentials provided.");
- }
- else
- {
- var defaultUser = new UserCredentials(package.Tokens, null);
- Interlocked.Exchange(ref _defaultUser, defaultUser);
- _authProvider.Authenticate(new TcpDefaultAuthRequest(this, package.CorrelationId, defaultUser));
- }
-
- break;
- }
- default:
- {
- var defaultUser = _defaultUser;
- if ((package.Flags & TcpFlags.TrustedWrite) != 0)
- {
- UnwrapAndPublishPackage(package, UserManagement.SystemAccounts.System, null);
- }
- else if ((package.Flags & TcpFlags.Authenticated) != 0)
- {
- _authProvider.Authenticate(new TcpAuthRequest(this, package));
- }
- else if (defaultUser != null)
- {
- if (defaultUser.User != null)
- {
- UnwrapAndPublishPackage(package, defaultUser.User, defaultUser.Tokens);
- }
- else
- {
- // The default credentials aren't authenticated
- ReplyNotAuthenticated(package.CorrelationId, "Not Authenticated");
- }
- }
- else
- {
- UnwrapAndPublishPackage(package, Anonymous, null);
- }
-
- break;
- }
- }
- }
-
- private void UnwrapAndPublishPackage(TcpPackage package, ClaimsPrincipal user, IReadOnlyDictionary tokens)
- {
- Message message = null;
- string error = "";
- try
- {
- message = _dispatcher.UnwrapPackage(package, _tcpEnvelope, user, tokens, this, _version);
- }
- catch (Exception ex)
- {
- error = ex.Message;
- }
-
- if (message != null)
- {
- _authorization.Authorize(message, _publisher);
- }
- else
- {
- SendBadRequest(package.CorrelationId,
- string.Format("Could not unwrap network package for command {0}.\n{1}", package.Command, error));
- }
- }
-
- private void ReplyNotAuthenticated(Guid correlationId, string description)
- {
- _tcpEnvelope.ReplyWith(new TcpMessage.NotAuthenticated(correlationId, description));
- }
-
- private void ReplyNotReady(Guid correlationId, string description)
- {
- _tcpEnvelope.ReplyWith(new ClientMessage.NotHandled(correlationId,
- ClientMessage.NotHandled.Types.NotHandledReason.NotReady, description));
- }
-
- private void ReplyAuthenticated(Guid correlationId, UserCredentials userCredentials, ClaimsPrincipal user)
- {
- var authCredentials = new UserCredentials(userCredentials.Tokens, user);
- Interlocked.CompareExchange(ref _defaultUser, authCredentials, userCredentials);
- _tcpEnvelope.ReplyWith(new TcpMessage.Authenticated(correlationId));
- }
-
- public void SendBadRequestAndClose(Guid correlationId, string message)
- {
- Ensure.NotNull(message, "message");
-
- SendPackage(new TcpPackage(TcpCommand.BadRequest, correlationId, Helper.UTF8NoBom.GetBytes(message)),
- checkQueueSize: false);
- Log.Error(
- "Closing connection '{connectionName}{clientConnectionName}' [{remoteEndPoint}, L{localEndPoint}, {connectionId:B}] due to error. Reason: {e}",
- ConnectionName, ClientConnectionName.IsEmptyString() ? string.Empty : ":" + ClientConnectionName,
- RemoteEndPoint, LocalEndPoint, ConnectionId, message);
- _connection.Close(message);
- }
-
- public void SendBadRequest(Guid correlationId, string message)
- {
- Ensure.NotNull(message, "message");
-
- SendPackage(new TcpPackage(TcpCommand.BadRequest, correlationId, Helper.UTF8NoBom.GetBytes(message)),
- checkQueueSize: false);
- }
-
- public void Stop(string reason = null)
- {
- Log.Debug(
- "Closing connection '{connectionName}{clientConnectionName}' [{remoteEndPoint}, L{localEndPoint}, {connectionId:B}] cleanly.{reason}",
- ConnectionName, ClientConnectionName.IsEmptyString() ? string.Empty : ":" + ClientConnectionName,
- RemoteEndPoint, LocalEndPoint, ConnectionId,
- reason.IsEmpty() ? string.Empty : " Reason: " + reason);
- _connection.Close(reason);
- }
-
- public void SendMessage(Message message)
- {
- var package = _dispatcher.WrapMessage(message, _version);
- if (package != null)
- {
- SendPackage(package.Value);
- }
- }
-
- private void SendPackage(TcpPackage package, bool checkQueueSize = true)
- {
- if (IsClosed)
- {
- return;
- }
-
- int queueSize;
- int queueSendBytes;
- if (checkQueueSize)
- {
- if ((queueSize = _connection.SendQueueSize) > _connectionQueueSizeThreshold)
- {
- SendBadRequestAndClose(Guid.Empty,
- string.Format("Connection queue size is too large: {0}.", queueSize));
- return;
- }
-
- if (_connectionPendingSendBytesThreshold > ESConsts.UnrestrictedPendingSendBytes &&
- (queueSendBytes = _connection.PendingSendBytes) > _connectionPendingSendBytesThreshold)
- {
- SendBadRequestAndClose(Guid.Empty,
- string.Format("Connection pending send bytes is too large: {0}.", queueSendBytes));
- return;
- }
- }
-
- var data = package.AsArraySegment();
- var framed = _framer.FrameData(data);
- _connection.EnqueueSend(framed);
- }
-
- public void Handle(TcpMessage.Heartbeat message)
- {
- if (IsClosed)
- {
- return;
- }
-
- var receiveProgressIndicator = _receiveProgressIndicator;
- var sendProgressIndicator = _sendProgressIndicator;
-
- /*
- * If we have not received any data within the heartbeat interval and we are not waiting for a heartbeat timeout check, then we send a heartbeat request.
- */
- if (message.ReceiveProgressIndicator == receiveProgressIndicator && !_awaitingHeartbeatTimeoutCheck)
- {
- SendPackage(new TcpPackage(TcpCommand.HeartbeatRequestCommand, Guid.NewGuid(), null));
- _awaitingHeartbeatTimeoutCheck = true;
- _publisher.Publish(TimerMessage.Schedule.Create(_heartbeatTimeout, _weakThisEnvelope,
- new TcpMessage.HeartbeatTimeout(receiveProgressIndicator)));
- }
- /*
- * As a proactive measure, if we have not sent any data to the remote party within the heartbeat interval,
- * we also send a heartbeat request just to generate some data for the remote party so that it can clear its heartbeat timeouts.
- * This is particularly useful when the remote party's heartbeat request is stuck behind a large (multi-megabyte) TCP message.
- */
- else if (message.SendProgressIndicator == sendProgressIndicator)
- {
- SendPackage(new TcpPackage(TcpCommand.HeartbeatRequestCommand, Guid.NewGuid(), null));
- Log.Verbose(
- "Connection '{connectionName}{clientConnectionName}' [{remoteEndPoint}, {connectionId:B}] Proactive heartbeat request sent to the remote party since no data was sent during the last heartbeat interval.",
- ConnectionName, ClientConnectionName.IsEmptyString() ? string.Empty : ":" + ClientConnectionName,
- _connection.RemoteEndPoint, ConnectionId);
- }
-
- //schedule the next heartbeat regardless of whether or not there's an active heartbeat request
- ScheduleHeartbeat(receiveProgressIndicator, sendProgressIndicator);
- }
-
- public void Handle(TcpMessage.HeartbeatTimeout message)
- {
- _awaitingHeartbeatTimeoutCheck = false;
- if (IsClosed)
- {
- return;
- }
-
- var receiveProgressIndicator = _receiveProgressIndicator;
- var sendProgressIndicator = _sendProgressIndicator;
- if (message.ReceiveProgressIndicator == receiveProgressIndicator)
- {
- Stop(string.Format($"HEARTBEAT TIMEOUT at receiveProgressIndicator={receiveProgressIndicator}, sendProgressIndicator={sendProgressIndicator}"));
- }
- }
-
- private void ScheduleHeartbeat(long receiveProgressIndicator, long sendProgressIndicator)
- {
- _publisher.Publish(TimerMessage.Schedule.Create(_heartbeatInterval, _weakThisEnvelope,
- new TcpMessage.Heartbeat(receiveProgressIndicator, sendProgressIndicator)));
- }
-
- // Same health warnings as SendToThisEnvelope
- private class SendToWeakThisEnvelope : IEnvelope
- {
- private readonly WeakReference _receiver;
-
- public SendToWeakThisEnvelope(object receiver)
- {
- _receiver = new WeakReference(receiver);
- }
-
- public void ReplyWith(T message) where T : Message
- {
- if (_receiver.Target is IHandle handle)
- {
- handle.Handle(message);
- }
- else if (_receiver is IAsyncHandle)
- {
- throw new Exception($"SendToWeakThisEnvelope does not support asynchronous receivers. Receiver: {_receiver}");
- }
- }
- }
-
- private class TcpAuthRequest : AuthenticationRequest
- {
- private readonly TcpConnectionManager _manager;
- private readonly TcpPackage _package;
-
- public TcpAuthRequest(TcpConnectionManager manager, TcpPackage package)
- : base($"(TCP) {manager.RemoteEndPoint}", package.Tokens)
- {
- _manager = manager;
- _package = package;
- }
-
- public override void Unauthorized()
- {
- _manager.ReplyNotAuthenticated(_package.CorrelationId, "Not Authenticated");
- }
-
- public override void Authenticated(ClaimsPrincipal principal)
- {
- _manager.UnwrapAndPublishPackage(_package, principal, _package.Tokens);
- }
-
- public override void Error()
- {
- _manager.ReplyNotAuthenticated(_package.CorrelationId, "Internal Server Error");
- }
-
- public override void NotReady()
- {
- _manager.ReplyNotReady(_package.CorrelationId, "Server not ready");
- }
- }
-
-
- private class TcpDefaultAuthRequest : AuthenticationRequest
- {
- private readonly TcpConnectionManager _manager;
- private readonly Guid _correlationId;
- private readonly UserCredentials _userCredentials;
-
- public TcpDefaultAuthRequest(TcpConnectionManager manager, Guid correlationId,
- UserCredentials userCredentials)
- : base($"(TCP) {manager.RemoteEndPoint}", userCredentials.Tokens)
- {
- _manager = manager;
- _correlationId = correlationId;
- _userCredentials = userCredentials;
- }
-
- public override void Unauthorized()
- {
- _manager.ReplyNotAuthenticated(_correlationId, "Unauthorized");
- }
-
- public override void Authenticated(ClaimsPrincipal principal)
- {
- _manager.ReplyAuthenticated(_correlationId, _userCredentials, principal);
- }
-
- public override void Error()
- {
- _manager.ReplyNotAuthenticated(_correlationId, "Internal Server Error");
- }
-
- public override void NotReady()
- {
- _manager.ReplyNotReady(_correlationId, "Server not yet ready");
- }
- }
-
- private class UserCredentials
- {
- public readonly ClaimsPrincipal User;
- public readonly IReadOnlyDictionary Tokens;
-
- public UserCredentials(IReadOnlyDictionary tokens, ClaimsPrincipal user)
- {
- Tokens = tokens;
- User = user;
- }
- }
- }
-}
diff --git a/src/EventStore.Core/Services/Transport/Tcp/TcpDispatcher.cs b/src/EventStore.Core/Services/Transport/Tcp/TcpDispatcher.cs
deleted file mode 100644
index b62ae907d0..0000000000
--- a/src/EventStore.Core/Services/Transport/Tcp/TcpDispatcher.cs
+++ /dev/null
@@ -1,134 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Security.Claims;
-using EventStore.Core.Messaging;
-using ILogger = Serilog.ILogger;
-
-namespace EventStore.Core.Services.Transport.Tcp
-{
- public abstract class TcpDispatcher : ITcpDispatcher
- {
- private static readonly ILogger Log = Serilog.Log.ForContext();
-
- private readonly Func, TcpConnectionManager, Message>[][]
- _unwrappers;
-
- private readonly IDictionary>[] _wrappers;
-
- protected TcpDispatcher()
- {
- _unwrappers =
- new Func, TcpConnectionManager, Message>[2][];
- _unwrappers[0] =
- new Func, TcpConnectionManager, Message>[255];
- _unwrappers[1] =
- new Func, TcpConnectionManager, Message>[255];
-
- _wrappers = new IDictionary>[2];
- _wrappers[0] = new Dictionary>();
- _wrappers[1] = new Dictionary>();
- }
-
- protected void AddWrapper(Func wrapper, ClientVersion version) where T : Message
- {
- _wrappers[(byte)version][typeof(T)] = x => wrapper((T)x);
- }
-
- protected void AddUnwrapper(TcpCommand command, Func unwrapper,
- ClientVersion version) where T : Message
- {
- _unwrappers[(byte)version][(byte)command] = (pkg, env, user, tokens, conn) => unwrapper(pkg, env);
- }
-
- protected void AddUnwrapper(TcpCommand command,
- Func unwrapper, ClientVersion version) where T : Message
- {
- _unwrappers[(byte)version][(byte)command] =
- (pkg, env, user, tokens, conn) => unwrapper(pkg, env, conn);
- }
-
- protected void AddUnwrapper(TcpCommand command, Func unwrapper,
- ClientVersion version) where T : Message
- {
- _unwrappers[(byte)version][(byte)command] =
- (pkg, env, user, tokens, conn) => unwrapper(pkg, env, user, conn);
- }
-
- protected void AddUnwrapper(TcpCommand command, Func unwrapper,
- ClientVersion version) where T : Message
- {
- _unwrappers[(byte)version][(byte)command] =
- (pkg, env, user, tokens, conn) => unwrapper(pkg, env, user);
- }
-
- protected void AddUnwrapper(TcpCommand command,
- Func, T> unwrapper, ClientVersion version)
- where T : Message
- {
- _unwrappers[(byte)version][(byte)command] = (pkg, env, user, tokens, conn) =>
- unwrapper(pkg, env, user, tokens);
- }
-
- protected void AddUnwrapper(TcpCommand command,
- Func, TcpConnectionManager, T> unwrapper,
- ClientVersion version)
- where T : Message
- {
- // ReSharper disable RedundantCast
- _unwrappers[(byte)version][(byte)command] =
- (Func, TcpConnectionManager, Message>)unwrapper;
- // ReSharper restore RedundantCast
- }
-
- public TcpPackage? WrapMessage(Message message, byte version)
- {
- if (message == null)
- {
- throw new ArgumentNullException(nameof(message));
- }
-
- try
- {
- if (_wrappers[version].TryGetValue(message.GetType(), out var wrapper))
- {
- return wrapper(message);
- }
-
- if (_wrappers[^1].TryGetValue(message.GetType(), out wrapper))
- {
- return wrapper(message);
- }
- }
- catch (Exception exc)
- {
- Log.Error(exc, "Error while wrapping message {message}.", message);
- }
-
- return null;
- }
-
- public Message UnwrapPackage(TcpPackage package, IEnvelope envelope, ClaimsPrincipal user,
- IReadOnlyDictionary tokens, TcpConnectionManager connection, byte version)
- {
- if (envelope == null)
- {
- throw new ArgumentNullException(nameof(envelope));
- }
-
- var unwrapper = _unwrappers[version][(byte)package.Command] ??
- _unwrappers[^1][(byte)package.Command];
-
- try
- {
- return unwrapper?.Invoke(package, envelope, user, tokens, connection);
- }
- catch (Exception exc)
- {
- Log.Error(exc, "Error while unwrapping TcpPackage with command {command}.",
- package.Command);
- }
-
- return null;
- }
- }
-}
diff --git a/src/EventStore.Core/Services/Transport/Tcp/TcpPackage.cs b/src/EventStore.Core/Services/Transport/Tcp/TcpPackage.cs
deleted file mode 100644
index 685f97f957..0000000000
--- a/src/EventStore.Core/Services/Transport/Tcp/TcpPackage.cs
+++ /dev/null
@@ -1,236 +0,0 @@
-using System;
-using System.Collections.Generic;
-using EventStore.Common.Utils;
-using EventStore.Core.Authentication;
-
-namespace EventStore.Core.Services.Transport.Tcp
-{
- [Flags]
- public enum TcpFlags : byte
- {
- None = 0x00,
- Authenticated = 0x01,
- TrustedWrite = 0x02
- }
-
- public struct TcpPackage
- {
- private static readonly IReadOnlyDictionary NotAuthenticated = new Dictionary();
- public const int CommandOffset = 0;
- public const int FlagsOffset = CommandOffset + 1;
- public const int CorrelationOffset = FlagsOffset + 1;
- public const int AuthOffset = CorrelationOffset + 16;
-
- public const int MandatorySize = AuthOffset;
-
- public const int MaxLoginLength = 127;
- public const int MaxPasswordLength = 127;
- public const int MaxTokenLength = short.MaxValue - 2;
-
- public readonly TcpCommand Command;
- public readonly TcpFlags Flags;
- public readonly Guid CorrelationId;
- public readonly ArraySegment Data;
-
- private readonly string _login;
- private readonly string _password;
- private readonly string _authToken;
-
- public IReadOnlyDictionary Tokens => (_login, _authToken) switch
- {
- (null, null) => NotAuthenticated,
- (null, _) => new Dictionary { [AuthenticationTokenKeys.Jwt] = _authToken },
- _ => new Dictionary
- {
- [AuthenticationTokenKeys.Username] = _login,
- [AuthenticationTokenKeys.Password] = _password
- }
- };
-
- public static TcpPackage FromArraySegment(ArraySegment data)
- {
- if (data.Count < MandatorySize)
- {
- throw new ArgumentException($"ArraySegment too short, length: {data.Count}", nameof(data));
- }
-
- var command = (TcpCommand)data.Array[data.Offset + CommandOffset];
- var flags = (TcpFlags)data.Array[data.Offset + FlagsOffset];
-
- var guidBytes = new byte[16];
- Buffer.BlockCopy(data.Array, data.Offset + CorrelationOffset, guidBytes, 0, 16);
- var correlationId = new Guid(guidBytes);
-
- var headerSize = MandatorySize;
- string login = null;
- string pass = null;
- if ((flags & TcpFlags.Authenticated) != 0)
- {
- var firstByte = data.Array[data.Offset + AuthOffset];
- var tokenLength = BitConverter.ToInt16(data.Array, AuthOffset);
- if (Math.Sign(tokenLength) == -1)
- {
- var token = Helper.UTF8NoBom.GetString(data.Array, AuthOffset + 2, -tokenLength);
-
- headerSize += token.Length + 2;
-
- return new TcpPackage(command, flags, correlationId, token,
- new ArraySegment(data.Array, data.Offset + headerSize, data.Count - headerSize));
- }
-
- var loginLen = firstByte;
- login = Helper.UTF8NoBom.GetString(data.Array, data.Offset + AuthOffset + 1, loginLen);
-
- var passLen = data.Array[data.Offset + AuthOffset + 1 + loginLen];
- pass = Helper.UTF8NoBom.GetString(data.Array, data.Offset + AuthOffset + 1 + loginLen + 1, passLen);
-
- headerSize += 1 + loginLen + 1 + passLen;
- }
-
- return new TcpPackage(command,
- flags,
- correlationId,
- login,
- pass,
- new ArraySegment(data.Array, data.Offset + headerSize, data.Count - headerSize));
- }
-
- public TcpPackage(TcpCommand command, Guid correlationId, byte[] data)
- : this(command, TcpFlags.None, correlationId, null, new ArraySegment(data ?? Empty.ByteArray))
- {
- }
-
- public TcpPackage(TcpCommand command, Guid correlationId, ArraySegment data)
- : this(command, TcpFlags.None, correlationId, null, data)
- {
- }
-
- public TcpPackage(TcpCommand command, TcpFlags flags, Guid correlationId, string login, string password,
- byte[] data)
- : this(command, flags, correlationId, login, password, new ArraySegment(data ?? Empty.ByteArray))
- {
- }
-
- public TcpPackage(TcpCommand command, TcpFlags flags, Guid correlationId, string login, string password,
- ArraySegment data) : this(command, flags, correlationId, data)
- {
- if ((flags & TcpFlags.Authenticated) != 0)
- {
- Ensure.NotNull(login, nameof(login));
- Ensure.NotNull(password, nameof(password));
- if (Helper.UTF8NoBom.GetByteCount(login) > MaxLoginLength)
- {
- throw new ArgumentException($"Login length must be less than {MaxLoginLength} bytes.",
- nameof(login));
- }
-
- if (Helper.UTF8NoBom.GetByteCount(password) > MaxPasswordLength)
- {
- throw new ArgumentException($"Password length must be less than {MaxPasswordLength} bytes.",
- nameof(password));
- }
- }
- else
- {
- if (login != null)
- {
- throw new ArgumentException("Login provided for non-authorized TcpPackage", nameof(login));
- }
-
- if (password != null)
- {
- throw new ArgumentException("Password provided for non-authorized TcpPackage", nameof(password));
- }
- }
-
- _login = login;
- _password = password;
- }
-
- public TcpPackage(TcpCommand command, TcpFlags flags, Guid correlationId, string authToken,
- ArraySegment data) : this(command, flags, correlationId, data)
- {
- if ((flags & TcpFlags.Authenticated) != 0)
- {
- Ensure.NotNull(authToken, nameof(authToken));
-
- if (Helper.UTF8NoBom.GetByteCount(authToken) > MaxTokenLength)
- {
- throw new ArgumentException($"Token length must be smaller than {MaxTokenLength} bytes",
- nameof(authToken));
- }
- }
-
- if ((flags & TcpFlags.Authenticated) == 0 && authToken != null)
- {
- throw new ArgumentException("Token provided for non-authorized TcpPackage", nameof(authToken));
- }
-
- _authToken = authToken;
- }
-
-
- private TcpPackage(TcpCommand command, TcpFlags flags, Guid correlationId, ArraySegment data)
- {
- Command = command;
- Flags = flags;
- CorrelationId = correlationId;
- Data = data;
- _login = null;
- _password = null;
- _authToken = null;
- }
-
- public byte[] AsByteArray()
- {
- if ((Flags & TcpFlags.Authenticated) != 0)
- {
- if (_authToken == null)
- {
- var loginLen = Helper.UTF8NoBom.GetByteCount(_login);
- var passLen = Helper.UTF8NoBom.GetByteCount(_password);
- var res = new byte[MandatorySize + 2 + loginLen + passLen + Data.Count];
- res[CommandOffset] = (byte)Command;
- res[FlagsOffset] = (byte)Flags;
- Buffer.BlockCopy(CorrelationId.ToByteArray(), 0, res, CorrelationOffset, 16);
-
- res[AuthOffset] = (byte)loginLen;
- Helper.UTF8NoBom.GetBytes(_login, 0, _login.Length, res, AuthOffset + 1);
- res[AuthOffset + 1 + loginLen] = (byte)passLen;
- Helper.UTF8NoBom.GetBytes(_password, 0, _password.Length, res, AuthOffset + 1 + loginLen + 1);
-
- Buffer.BlockCopy(Data.Array, Data.Offset, res, res.Length - Data.Count, Data.Count);
- return res;
- }
- else
- {
- var authTokenLength = Helper.UTF8NoBom.GetByteCount(_authToken);
- var res = new byte[MandatorySize + 2 + authTokenLength + Data.Count];
- res[CommandOffset] = (byte)Command;
- res[FlagsOffset] = (byte)Flags;
- Buffer.BlockCopy(CorrelationId.ToByteArray(), 0, res, CorrelationOffset, 16);
-
- Buffer.BlockCopy(BitConverter.GetBytes(-Convert.ToInt16(authTokenLength)), 0, res, AuthOffset, 2);
- Helper.UTF8NoBom.GetBytes(_authToken, 0, _authToken.Length, res, AuthOffset + 2);
-
- Buffer.BlockCopy(Data.Array, Data.Offset, res, res.Length - Data.Count, Data.Count);
- return res;
- }
- }
- else
- {
- var res = new byte[MandatorySize + Data.Count];
- res[CommandOffset] = (byte)Command;
- res[FlagsOffset] = (byte)Flags;
- Buffer.BlockCopy(CorrelationId.ToByteArray(), 0, res, CorrelationOffset, 16);
- Buffer.BlockCopy(Data.Array, Data.Offset, res, res.Length - Data.Count, Data.Count);
- return res;
- }
- }
-
- public ArraySegment AsArraySegment()
- {
- return new ArraySegment(AsByteArray());
- }
- }
-}
diff --git a/src/EventStore.Core/Services/Transport/Tcp/TcpService.cs b/src/EventStore.Core/Services/Transport/Tcp/TcpService.cs
deleted file mode 100644
index b1749e8949..0000000000
--- a/src/EventStore.Core/Services/Transport/Tcp/TcpService.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-using System;
-using System.Net;
-using System.Net.Security;
-using System.Net.Sockets;
-using System.Security.Cryptography.X509Certificates;
-using EventStore.Common.Utils;
-using EventStore.Core.Bus;
-using EventStore.Core.Messages;
-using EventStore.Plugins.Authentication;
-using EventStore.Transport.Tcp;
-using ILogger = Serilog.ILogger;
-
-namespace EventStore.Core.Services.Transport.Tcp
-{
- public enum TcpServiceType
- {
- Internal,
- External
- }
-
- public enum TcpSecurityType
- {
- Normal,
- Secure
- }
-
- public class TcpService : IHandle,
- IHandle,
- IHandle
- {
- private static readonly ILogger Log = Serilog.Log.ForContext();
-
- private readonly IPublisher _publisher;
- private readonly IPEndPoint _serverEndPoint;
- private readonly TcpServerListener _serverListener;
- private readonly IPublisher _networkSendQueue;
- private readonly TcpServiceType _serviceType;
- private readonly TcpSecurityType _securityType;
- private readonly Func _dispatcherFactory;
- private readonly TimeSpan _heartbeatInterval;
- private readonly TimeSpan _heartbeatTimeout;
- private readonly IAuthenticationProvider _authProvider;
- private readonly Func _certificateSelector;
- private readonly Func _intermediatesSelector;
- private readonly CertificateDelegates.ClientCertificateValidator _sslClientCertValidator;
- private readonly int _connectionPendingSendBytesThreshold;
- private readonly int _connectionQueueSizeThreshold;
- private readonly AuthorizationGateway _authorizationGateway;
-
- public TcpService(IPublisher publisher,
- IPEndPoint serverEndPoint,
- IPublisher networkSendQueue,
- TcpServiceType serviceType,
- TcpSecurityType securityType,
- ITcpDispatcher dispatcher,
- TimeSpan heartbeatInterval,
- TimeSpan heartbeatTimeout,
- IAuthenticationProvider authProvider,
- AuthorizationGateway authorizationGateway,
- Func certificateSelector,
- Func intermediatesSelector,
- CertificateDelegates.ClientCertificateValidator sslClientCertValidator,
- int connectionPendingSendBytesThreshold,
- int connectionQueueSizeThreshold)
- : this(publisher, serverEndPoint, networkSendQueue, serviceType, securityType, (_, __) => dispatcher,
- heartbeatInterval, heartbeatTimeout, authProvider, authorizationGateway, certificateSelector, intermediatesSelector, sslClientCertValidator, connectionPendingSendBytesThreshold, connectionQueueSizeThreshold)
- {
- }
-
- public TcpService(IPublisher publisher,
- IPEndPoint serverEndPoint,
- IPublisher networkSendQueue,
- TcpServiceType serviceType,
- TcpSecurityType securityType,
- Func dispatcherFactory,
- TimeSpan heartbeatInterval,
- TimeSpan heartbeatTimeout,
- IAuthenticationProvider authProvider,
- AuthorizationGateway authorizationGateway,
- Func certificateSelector,
- Func intermediatesSelector,
- CertificateDelegates.ClientCertificateValidator sslClientCertValidator,
- int connectionPendingSendBytesThreshold,
- int connectionQueueSizeThreshold)
- {
- Ensure.NotNull(publisher, "publisher");
- Ensure.NotNull(serverEndPoint, "serverEndPoint");
- Ensure.NotNull(networkSendQueue, "networkSendQueue");
- Ensure.NotNull(dispatcherFactory, "dispatcherFactory");
- Ensure.NotNull(authProvider, "authProvider");
- Ensure.NotNull(authorizationGateway, "authorizationGateway");
-
- _publisher = publisher;
- _serverEndPoint = serverEndPoint;
- _serverListener = new TcpServerListener(_serverEndPoint);
- _networkSendQueue = networkSendQueue;
- _serviceType = serviceType;
- _securityType = securityType;
- _dispatcherFactory = dispatcherFactory;
- _heartbeatInterval = heartbeatInterval;
- _heartbeatTimeout = heartbeatTimeout;
- _connectionPendingSendBytesThreshold = connectionPendingSendBytesThreshold;
- _connectionQueueSizeThreshold = connectionQueueSizeThreshold;
- _authProvider = authProvider;
- _authorizationGateway = authorizationGateway;
- _certificateSelector = certificateSelector;
- _intermediatesSelector = intermediatesSelector;
- _sslClientCertValidator = sslClientCertValidator;
- }
-
- public void Handle(SystemMessage.SystemInit message)
- {
- try
- {
- _serverListener.StartListening(OnConnectionAccepted, _securityType.ToString());
- }
- catch (Exception e)
- {
- Application.Exit(ExitCode.Error, e.Message);
- }
- }
-
- public void Handle(SystemMessage.SystemStart message)
- {
- }
-
- public void Handle(SystemMessage.BecomeShuttingDown message)
- {
- _serverListener.Stop();
- }
-
- private void OnConnectionAccepted(IPEndPoint endPoint, Socket socket)
- {
- var conn = _securityType == TcpSecurityType.Secure
- ? TcpConnectionSsl.CreateServerFromSocket(Guid.NewGuid(), endPoint, socket, _certificateSelector, _intermediatesSelector, _sslClientCertValidator, verbose: true)
- : TcpConnection.CreateAcceptedTcpConnection(Guid.NewGuid(), endPoint, socket, verbose: true);
- Log.Information(
- "{serviceType} TCP connection accepted: [{securityType}, {remoteEndPoint}, L{localEndPoint}, {connectionId:B}].",
- _serviceType, _securityType, conn.RemoteEndPoint, conn.LocalEndPoint, conn.ConnectionId);
-
- var dispatcher = _dispatcherFactory(conn.ConnectionId, _serverEndPoint);
- var manager = new TcpConnectionManager(
- $"{_serviceType.ToString().ToLower()}-{_securityType.ToString().ToLower()}",
- _serviceType,
- dispatcher,
- _publisher,
- conn,
- _networkSendQueue,
- _authProvider,
- _authorizationGateway,
- _heartbeatInterval,
- _heartbeatTimeout,
- (m, e) => _publisher.Publish(new TcpMessage.ConnectionClosed(m, e)),
- _connectionPendingSendBytesThreshold,
- _connectionQueueSizeThreshold); // TODO AN: race condition
- _publisher.Publish(new TcpMessage.ConnectionEstablished(manager));
- manager.StartReceiving();
- }
- }
-}
diff --git a/src/EventStore.Core/Services/Transport/Tcp/UnableToAcquireStreamException.cs b/src/EventStore.Core/Services/Transport/Tcp/UnableToAcquireStreamException.cs
deleted file mode 100644
index a8a0457b55..0000000000
--- a/src/EventStore.Core/Services/Transport/Tcp/UnableToAcquireStreamException.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System;
-
-namespace EventStore.Core.Services.Transport.Tcp
-{
- class UnableToAcquireStreamException : Exception
- {
- }
-}
diff --git a/src/EventStore.Core/Settings/VNodeSettings.cs b/src/EventStore.Core/Settings/VNodeSettings.cs
deleted file mode 100644
index 1e1d7b149c..0000000000
--- a/src/EventStore.Core/Settings/VNodeSettings.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-using System;
-using System.Net;
-using System.Security.Cryptography.X509Certificates;
-using EventStore.Common.Utils;
-using EventStore.Core.Services.Monitoring;
-
-namespace EventStore.Core.Settings
-{
- public class SingleVNodeSettings
- {
- public readonly IPEndPoint ExternalTcpEndPoint;
- public readonly IPEndPoint ExternalSecureTcpEndPoint;
- public readonly IPEndPoint HttpEndPoint;
- public readonly string[] HttpPrefixes;
- public readonly bool EnableTrustedAuth;
- public readonly X509Certificate2 Certificate;
- public readonly int WorkerThreads;
-
- public readonly TimeSpan MinFlushDelay;
- public readonly TimeSpan PrepareTimeout;
- public readonly TimeSpan CommitTimeout;
-
- public readonly bool DisableScavengeMerging;
-
- public readonly TimeSpan StatsPeriod;
- public readonly StatsStorage StatsStorage;
-
- public readonly bool SkipInitializeStandardUsersCheck;
-
- public readonly TimeSpan TcpTimeout;
-
- public SingleVNodeSettings(IPEndPoint externalTcpEndPoint,
- IPEndPoint externalSecureTcpEndPoint,
- IPEndPoint httpEndPoint,
- string[] httpPrefixes,
- bool enableTrustedAuth,
- X509Certificate2 certificate,
- int workerThreads,
- TimeSpan minFlushDelay,
- TimeSpan prepareTimeout,
- TimeSpan commitTimeout,
- TimeSpan statsPeriod,
- TimeSpan tcpTimeout,
- StatsStorage statsStorage = StatsStorage.StreamAndFile,
- bool skipInitializeStandardUsersCheck = false,
- bool disableScavengeMerging = false)
- {
- Ensure.NotNull(httpEndPoint, nameof(httpEndPoint));
- Ensure.NotNull(httpPrefixes, "httpPrefixes");
- if (externalSecureTcpEndPoint != null)
- {
- Ensure.NotNull(certificate, "certificate");
- }
-
- Ensure.Positive(workerThreads, "workerThreads");
-
- ExternalTcpEndPoint = externalTcpEndPoint;
- ExternalSecureTcpEndPoint = externalSecureTcpEndPoint;
- HttpEndPoint = httpEndPoint;
- HttpPrefixes = httpPrefixes;
- EnableTrustedAuth = enableTrustedAuth;
- Certificate = certificate;
- WorkerThreads = workerThreads;
-
- MinFlushDelay = minFlushDelay;
- PrepareTimeout = prepareTimeout;
- CommitTimeout = commitTimeout;
-
- StatsPeriod = statsPeriod;
- StatsStorage = statsStorage;
-
- SkipInitializeStandardUsersCheck = skipInitializeStandardUsersCheck;
- DisableScavengeMerging = disableScavengeMerging;
- TcpTimeout = tcpTimeout;
- }
-
- public override string ToString()
- {
- return string.Format("ExternalTcpEndPoint: {0},\n"
- + "ExternalSecureTcpEndPoint: {1},\n"
- + "HttpEndPoint: {2},\n"
- + "HttpPrefixes: {3},\n"
- + "EnableTrustedAuth: {4},\n"
- + "Certificate: {5},\n"
- + "WorkerThreads: {6}\n"
- + "MinFlushDelay: {7}\n"
- + "PrepareTimeout: {8}\n"
- + "CommitTimeout: {9}\n"
- + "StatsPeriod: {10}\n"
- + "StatsStorage: {11}",
- ExternalTcpEndPoint == null ? "n/a" : ExternalTcpEndPoint.ToString(),
- ExternalSecureTcpEndPoint == null ? "n/a" : ExternalSecureTcpEndPoint.ToString(),
- HttpEndPoint,
- string.Join(", ", HttpPrefixes),
- EnableTrustedAuth,
- Certificate == null ? "n/a" : Certificate.ToString(verbose: true),
- WorkerThreads,
- MinFlushDelay,
- PrepareTimeout,
- CommitTimeout,
- StatsPeriod,
- StatsStorage);
- }
- }
-}
diff --git a/src/EventStore.Core/Util/Opts.cs b/src/EventStore.Core/Util/Opts.cs
index 358400fa67..dac39b9cf6 100644
--- a/src/EventStore.Core/Util/Opts.cs
+++ b/src/EventStore.Core/Util/Opts.cs
@@ -1,16 +1,7 @@
-using System;
-using System.Net;
-using EventStore.Common.Options;
-using EventStore.Core.TransactionLog.Chunks;
-
namespace EventStore.Core.Util
{
public static class Opts
{
- public const int ConnectionPendingSendBytesThresholdDefault = 10 * 1024 * 1024;
-
- public const int ConnectionQueueSizeThresholdDefault = 50000;
-
public const int HashCollisionReadLimitDefault = 100;
public const bool FaultOutOfOrderProjectionsDefault = false;
diff --git a/src/Protos/ClientAPI/ClientMessageDtos.proto b/src/Protos/ClientAPI/ClientMessageDtos.proto
deleted file mode 100755
index a94dc2fdc7..0000000000
--- a/src/Protos/ClientAPI/ClientMessageDtos.proto
+++ /dev/null
@@ -1,450 +0,0 @@
-syntax = "proto3";
-
-package EventStore.Client.Messages;
-
-enum OperationResult
-{
- Success = 0;
- PrepareTimeout = 1;
- CommitTimeout = 2;
- ForwardTimeout = 3;
- WrongExpectedVersion = 4;
- StreamDeleted = 5;
- InvalidTransaction = 6;
- AccessDenied = 7;
-}
-
-message NewEvent {
- bytes event_id = 1;
- string event_type = 2;
- int32 data_content_type = 3;
- int32 metadata_content_type = 4;
- bytes data = 5;
- bytes metadata = 6;
-}
-
-message EventRecord {
- string event_stream_id = 1;
- int64 event_number = 2;
- bytes event_id = 3;
- string event_type = 4;
- int32 data_content_type = 5;
- int32 metadata_content_type = 6;
- bytes data = 7;
- bytes metadata = 8;
- int64 created = 9;
- int64 created_epoch = 10;
-}
-
-message ResolvedIndexedEvent {
- EventRecord event = 1;
- EventRecord link = 2;
-}
-
-message ResolvedEvent {
- EventRecord event = 1;
- EventRecord link = 2;
- int64 commit_position = 3;
- int64 prepare_position = 4;
-}
-
-message WriteEvents {
- string event_stream_id = 1;
- int64 expected_version = 2;
- repeated NewEvent events = 3;
- bool require_leader = 4;
-}
-
-message WriteEventsCompleted {
- OperationResult result = 1;
- string message = 2;
- int64 first_event_number = 3;
- int64 last_event_number = 4;
- int64 prepare_position = 5;
- int64 commit_position = 6;
- int64 current_version = 7;
-}
-
-message DeleteStream {
- string event_stream_id = 1;
- int64 expected_version = 2;
- bool require_leader = 3;
- bool hard_delete = 4;
-}
-
-message DeleteStreamCompleted {
- OperationResult result = 1;
- string message = 2;
- int64 prepare_position = 3;
- int64 commit_position = 4;
- int64 current_version = 5;
-}
-
-message TransactionStart {
- string event_stream_id = 1;
- int64 expected_version = 2;
- bool require_leader = 3;
-}
-
-message TransactionStartCompleted {
- int64 transaction_id = 1;
- OperationResult result = 2;
- string message = 3;
-}
-
-message TransactionWrite {
- int64 transaction_id = 1;
- repeated NewEvent events = 2;
- bool require_leader = 3;
-}
-
-message TransactionWriteCompleted {
- int64 transaction_id = 1;
- OperationResult result = 2;
- string message = 3;
-}
-
-message TransactionCommit {
- int64 transaction_id = 1;
- bool require_leader = 2;
-}
-
-message TransactionCommitCompleted {
- int64 transaction_id = 1;
- OperationResult result = 2;
- string message = 3;
- int64 first_event_number = 4;
- int64 last_event_number = 5;
- int64 prepare_position = 6;
- int64 commit_position = 7;
-}
-
-message ReadEvent {
- string event_stream_id = 1;
- int64 event_number = 2;
- bool resolve_link_tos = 3;
- bool require_leader = 4;
-}
-
-message ReadEventCompleted {
-
- enum ReadEventResult {
- Success = 0;
- NotFound = 1;
- NoStream = 2;
- StreamDeleted = 3;
- Error = 4;
- AccessDenied = 5;
- }
-
- ReadEventResult result = 1;
- ResolvedIndexedEvent event = 2;
-
- string error = 3;
-}
-
-message ReadStreamEvents {
- string event_stream_id = 1;
- int64 from_event_number = 2;
- int32 max_count = 3;
- bool resolve_link_tos = 4;
- bool require_leader = 5;
-}
-
-message ReadStreamEventsCompleted {
-
- enum ReadStreamResult {
- Success = 0;
- NoStream = 1;
- StreamDeleted = 2;
- NotModified = 3;
- Error = 4;
- AccessDenied = 5;
- }
-
- repeated ResolvedIndexedEvent events = 1;
- ReadStreamResult result = 2;
- int64 next_event_number = 3;
- int64 last_event_number = 4;
- bool is_end_of_stream = 5;
- int64 last_commit_position = 6;
-
- string error = 7;
-}
-
-message ReadAllEvents {
- int64 commit_position = 1;
- int64 prepare_position = 2;
- int32 max_count = 3;
- bool resolve_link_tos = 4;
- bool require_leader = 5;
-}
-
-message ReadAllEventsCompleted {
-
- enum ReadAllResult {
- Success = 0;
- NotModified = 1;
- Error = 2;
- AccessDenied = 3;
- }
-
- int64 commit_position = 1;
- int64 prepare_position = 2;
- repeated ResolvedEvent events = 3;
- int64 next_commit_position = 4;
- int64 next_prepare_position = 5;
-
- ReadAllResult result = 6;
- string error = 7;
-}
-
-message Filter{
-
- enum FilterContext {
- StreamId = 0;
- EventType = 1;
-
- }
-
- enum FilterType {
- Regex = 0;
- Prefix = 1;
- }
-
- FilterContext context = 1;
- FilterType type = 2;
- repeated string data = 3;
-}
-
-message FilteredReadAllEvents {
- int64 commit_position = 1;
- int64 prepare_position = 2;
- int32 max_count = 3;
- int32 max_search_window = 4;
- bool resolve_link_tos = 5;
- bool require_leader = 6;
- Filter filter = 7;
-}
-
-message FilteredReadAllEventsCompleted {
-
- enum FilteredReadAllResult {
- Success = 0;
- NotModified = 1;
- Error = 2;
- AccessDenied = 3;
- }
-
- int64 commit_position = 1;
- int64 prepare_position = 2;
- repeated ResolvedEvent events = 3;
- int64 next_commit_position = 4;
- int64 next_prepare_position = 5;
- bool is_end_of_stream = 6;
-
- FilteredReadAllResult result = 7;
- string error = 8;
-}
-
-message CreatePersistentSubscription {
- string subscription_group_name = 1;
- string event_stream_id = 2;
- bool resolve_link_tos = 3;
- int64 start_from = 4;
- int32 message_timeout_milliseconds = 5;
- bool record_statistics = 6;
- int32 live_buffer_size = 7;
- int32 read_batch_size = 8;
- int32 buffer_size = 9;
- int32 max_retry_count = 10;
- bool prefer_round_robin = 11;
- int32 checkpoint_after_time = 12;
- int32 checkpoint_max_count = 13;
- int32 checkpoint_min_count = 14;
- int32 subscriber_max_count = 15;
- string named_consumer_strategy = 16;
-}
-
-message DeletePersistentSubscription {
- string subscription_group_name = 1;
- string event_stream_id = 2;
-}
-
-message UpdatePersistentSubscription {
- string subscription_group_name = 1;
- string event_stream_id = 2;
- bool resolve_link_tos = 3;
- int64 start_from = 4;
- int32 message_timeout_milliseconds = 5;
- bool record_statistics = 6;
- int32 live_buffer_size = 7;
- int32 read_batch_size = 8;
- int32 buffer_size = 9;
- int32 max_retry_count = 10;
- bool prefer_round_robin = 11;
- int32 checkpoint_after_time = 12;
- int32 checkpoint_max_count = 13;
- int32 checkpoint_min_count = 14;
- int32 subscriber_max_count = 15;
- string named_consumer_strategy = 16;
-}
-
-message UpdatePersistentSubscriptionCompleted {
- enum UpdatePersistentSubscriptionResult {
- Success = 0;
- DoesNotExist = 1;
- Fail = 2;
- AccessDenied=3;
- }
- UpdatePersistentSubscriptionResult result = 1;
- string reason = 2;
-}
-
-message CreatePersistentSubscriptionCompleted {
- enum CreatePersistentSubscriptionResult {
- Success = 0;
- AlreadyExists = 1;
- Fail = 2;
- AccessDenied=3;
- }
- CreatePersistentSubscriptionResult result = 1;
- string reason = 2;
-}
-
-message DeletePersistentSubscriptionCompleted {
- enum DeletePersistentSubscriptionResult {
- Success = 0;
- DoesNotExist = 1;
- Fail = 2;
- AccessDenied = 3;
- }
- DeletePersistentSubscriptionResult result = 1;
- string reason = 2;
-}
-
-message ConnectToPersistentSubscription {
- string subscription_id = 1;
- string event_stream_id = 2;
- int32 allowed_in_flight_messages = 3;
-
-}
-
-message PersistentSubscriptionAckEvents {
- string subscription_id = 1;
- repeated bytes processed_event_ids = 2;
-}
-
-message PersistentSubscriptionNakEvents {
- enum NakAction {
- Unknown = 0;
- Park = 1;
- Retry = 2;
- Skip = 3;
- Stop = 4;
- }
-
- string subscription_id = 1;
- repeated bytes processed_event_ids = 2;
- string message = 3;
- NakAction action = 4;
-}
-
-message PersistentSubscriptionConfirmation {
- int64 last_commit_position = 1;
- string subscription_id = 2;
- int64 last_event_number = 3;
-}
-
-message PersistentSubscriptionStreamEventAppeared {
- ResolvedIndexedEvent event = 1;
- int32 retryCount = 2;
-}
-
-message SubscribeToStream {
- string event_stream_id = 1;
- bool resolve_link_tos = 2;
-}
-
-message FilteredSubscribeToStream {
- string event_stream_id = 1;
- bool resolve_link_tos = 2;
- Filter filter = 3;
- int32 checkpoint_interval = 4;
-}
-
-message CheckpointReached {
- int64 commit_position = 1;
- int64 prepare_position = 2;
-}
-
-message SubscriptionConfirmation {
- int64 last_commit_position = 1;
- int64 last_event_number = 2;
-}
-
-message StreamEventAppeared {
- ResolvedEvent event = 1;
-}
-
-message UnsubscribeFromStream {
-}
-
-message SubscriptionDropped {
-
- enum SubscriptionDropReason {
- Unsubscribed = 0;
- AccessDenied = 1;
- NotFound=2;
- PersistentSubscriptionDeleted=3;
- SubscriberMaxCountReached=4;
- }
-
- SubscriptionDropReason reason = 1;
-}
-
-message NotHandled {
-
- enum NotHandledReason {
- NotReady = 0;
- TooBusy = 1;
- NotLeader = 2;
- IsReadOnly = 3;
- }
-
- NotHandledReason reason = 1;
- bytes additional_info = 2;
-
- message LeaderInfo {
- string external_tcp_address = 1;
- int32 external_tcp_port = 2;
- string http_address = 3;
- int32 http_port = 4;
- string external_secure_tcp_address = 5;
- int32 external_secure_tcp_port = 6;
- }
-}
-
-message ScavengeDatabase {
-}
-
-message ScavengeDatabaseResponse {
-
- enum ScavengeResult {
- Started = 0;
- InProgress = 1;
- Unauthorized = 2;
- }
-
- ScavengeResult result = 1;
- string scavengeId = 2;
-
-}
-
-message IdentifyClient {
- int32 version = 1;
- string connection_name = 2;
-}
-
-message ClientIdentified {
-}