1- using FaasNet . EventMesh . Protocols . AMQP . Framing ;
1+ using Amqp ;
2+ using Amqp . Sasl ;
3+ using Amqp . Types ;
4+ using FaasNet . EventMesh . Protocols . AMQP . Framing ;
25using System . Net ;
36using System . Net . Sockets ;
47
@@ -29,13 +32,35 @@ private void Launch()
2932
3033 private void Listen ( )
3134 {
35+ var saslHeaderNegotiation = new ProtocolHeader { Id = 3 , Major = 1 , Minor = 0 , Revision = 0 } ;
3236 var handler = _server . Accept ( ) ;
33- // Header.
34- var header = ReadHeader ( handler ) ;
35- handler . Send ( header . Serialize ( ) ) ;
36- // Frames
37- var frame = new Frame { Channel = 0 , Type = FrameTypes . Amqp } ;
38- handler . Send ( frame . Serialize ( ) ) ;
37+ // Check header & protocol.
38+ ReadHeader ( handler ) ;
39+ handler . Send ( saslHeaderNegotiation . Serialize ( ) , SocketFlags . None ) ;
40+ // Return supported authentication mechanisms.
41+ var saslFrame = new Frame { Channel = 0 , Type = FrameTypes . Sasl } ;
42+ var cmd = new SaslMechanisms
43+ {
44+ SaslServerMechanisms = new Amqp . Types . Symbol [ ]
45+ {
46+ new Amqp . Types . Symbol ( "PLAIN" )
47+ }
48+ } ;
49+ Send ( handler , saslFrame . Serialize ( cmd ) ) ;
50+ // Authenticate the user.
51+ ReadFrame ( handler ) ;
52+ var sCmd = new SaslOutcome { Code = SaslCode . Ok } ;
53+ Send ( handler , saslFrame . Serialize ( sCmd ) ) ;
54+ // Open
55+ var saslSecuredConnection = new ProtocolHeader { Id = 0 , Major = 1 , Minor = 0 , Revision = 0 } ;
56+ handler . Send ( saslSecuredConnection . Serialize ( ) , SocketFlags . None ) ;
57+ var amqpFrame = new Frame { Channel = 0 , Type = FrameTypes . Amqp } ;
58+ var tCmd = new Amqp . Framing . Open
59+ {
60+ HostName = "localhost"
61+ } ;
62+ Send ( handler , amqpFrame . Serialize ( tCmd ) ) ;
63+ string s = "" ;
3964 }
4065
4166 private ProtocolHeader ReadHeader ( Socket socket )
@@ -45,5 +70,30 @@ private ProtocolHeader ReadHeader(Socket socket)
4570 var receivedHeader = ProtocolHeader . Create ( headerBuffer , 0 ) ;
4671 return receivedHeader ;
4772 }
73+
74+ private Sasl . SaslPlainProfile ReadSaslPlainProfile ( )
75+ {
76+ return null ;
77+ }
78+
79+ private static void Send ( Socket socket , ByteBuffer buffer )
80+ {
81+ socket . Send ( buffer . Buffer , buffer . Offset , buffer . Length , SocketFlags . None ) ;
82+ }
83+
84+ private static DescribedList ReadFrame ( Socket socket )
85+ {
86+ var sizeFrameBuffer = new byte [ FixedWidth . UInt ] ;
87+ socket . Receive ( sizeFrameBuffer , 0 , FixedWidth . UInt , SocketFlags . None ) ;
88+ int size = AmqpBitConverter . ReadInt ( sizeFrameBuffer , 0 ) ;
89+ var frameBuffer = new ByteBuffer ( size , false ) ;
90+ AmqpBitConverter . WriteInt ( frameBuffer , size ) ;
91+ socket . Receive ( frameBuffer . Buffer , frameBuffer . Length , frameBuffer . Size , SocketFlags . None ) ;
92+ frameBuffer . Append ( frameBuffer . Size ) ;
93+ ushort channel ;
94+ DescribedList command ;
95+ Frame . Decode ( frameBuffer , out channel , out command ) ;
96+ return command ;
97+ }
4898 }
4999}
0 commit comments