1 /* 2 * hunt-proton: AMQP Protocol library for D programming language. 3 * 4 * Copyright (C) 2018-2019 HuntLabs 5 * 6 * Website: https://www.huntlabs.net/ 7 * 8 * Licensed under the Apache-2.0 License. 9 * 10 */ 11 12 module hunt.proton.engine.impl.ssl.SslImpl; 13 14 import hunt.io.ByteBuffer; 15 16 import hunt.proton.engine.impl.ssl.SslHandshakeSniffingTransportWrapper; 17 import hunt.proton.engine.Ssl; 18 import hunt.proton.engine.SslDomain; 19 import hunt.proton.engine.SslPeerDetails; 20 import hunt.proton.engine.Transport; 21 import hunt.proton.engine.TransportException; 22 import hunt.proton.engine.impl.PlainTransportWrapper; 23 import hunt.proton.engine.impl.TransportInput; 24 import hunt.proton.engine.impl.TransportLayer; 25 import hunt.proton.engine.impl.TransportOutput; 26 import hunt.proton.engine.impl.TransportWrapper; 27 import hunt.proton.engine.impl.ssl.SslTransportWrapper; 28 import hunt.proton.engine.impl.ssl.ProtonSslEngineProvider; 29 import hunt.proton.engine.impl.ssl.SimpleSslTransportWrapper; 30 import hunt.Exceptions; 31 32 //class SslImpl : Ssl, TransportLayer 33 //{ 34 // private SslTransportWrapper _unsecureClientAwareTransportWrapper; 35 // 36 // private SslDomain _domain; 37 // private ProtonSslEngineProvider _protonSslEngineProvider; 38 // 39 // private SslPeerDetails _peerDetails; 40 // private TransportException _initException; 41 // 42 // /** 43 // * @param domain must implement {@link hunt.proton.engine.impl.ssl.ProtonSslEngineProvider}. This is not possible 44 // * enforce at the API level because {@link hunt.proton.engine.impl.ssl.ProtonSslEngineProvider} is not part of the 45 // * public Proton API. 46 // */ 47 // this(SslDomain domain, SslPeerDetails peerDetails) 48 // { 49 // _domain = domain; 50 // _protonSslEngineProvider = cast(ProtonSslEngineProvider)domain; 51 // _peerDetails = peerDetails; 52 // 53 // if(_domain.getMode() is null) { 54 // throw new IllegalStateException("Client/server mode must be configured, SslDomain must have init called."); 55 // } 56 // 57 // if(_peerDetails is null && _domain.getPeerAuthentication() == VerifyMode.VERIFY_PEER_NAME) { 58 // throw new IllegalArgumentException("Peer hostname verification is enabled, but no peer details were provided"); 59 // } 60 // } 61 // 62 // public TransportWrapper wrap(TransportInput inputProcessor, TransportOutput outputProcessor) 63 // { 64 // if (_unsecureClientAwareTransportWrapper !is null) 65 // { 66 // throw new IllegalStateException("Transport already wrapped"); 67 // } 68 // 69 // _unsecureClientAwareTransportWrapper = new UnsecureClientAwareTransportWrapper(inputProcessor, outputProcessor); 70 // return _unsecureClientAwareTransportWrapper; 71 // } 72 // 73 // 74 // public string getCipherName() 75 // { 76 // if(_unsecureClientAwareTransportWrapper is null) 77 // { 78 // throw new IllegalStateException("Transport wrapper is uninitialised"); 79 // } 80 // 81 // return _unsecureClientAwareTransportWrapper.getCipherName(); 82 // } 83 // 84 // 85 // public string getProtocolName() 86 // { 87 // if(_unsecureClientAwareTransportWrapper is null) 88 // { 89 // throw new IllegalStateException("Transport wrapper is uninitialised"); 90 // } 91 // 92 // return _unsecureClientAwareTransportWrapper.getProtocolName(); 93 // } 94 // 95 // class UnsecureClientAwareTransportWrapper : SslTransportWrapper 96 // { 97 // private TransportInput _inputProcessor; 98 // private TransportOutput _outputProcessor; 99 // private SslTransportWrapper _transportWrapper; 100 // 101 // this(TransportInput inputProcessor, 102 // TransportOutput outputProcessor) 103 // { 104 // _inputProcessor = inputProcessor; 105 // _outputProcessor = outputProcessor; 106 // } 107 // 108 // 109 // public int capacity() 110 // { 111 // initTransportWrapperOnFirstIO(); 112 // if (_initException is null) { 113 // return _transportWrapper.capacity(); 114 // } else { 115 // return Transport.END_OF_STREAM; 116 // } 117 // } 118 // 119 // 120 // public int position() 121 // { 122 // initTransportWrapperOnFirstIO(); 123 // if (_initException is null) { 124 // return _transportWrapper.position(); 125 // } else { 126 // return Transport.END_OF_STREAM; 127 // } 128 // } 129 // 130 // 131 // public ByteBuffer tail() 132 // { 133 // initTransportWrapperOnFirstIO(); 134 // if (_initException is null) { 135 // return _transportWrapper.tail(); 136 // } else { 137 // return null; 138 // } 139 // } 140 // 141 // 142 // 143 // public void process() 144 // { 145 // initTransportWrapperOnFirstIO(); 146 // if (_initException is null) { 147 // _transportWrapper.process(); 148 // } else { 149 // throw new TransportException(_initException); 150 // } 151 // } 152 // 153 // 154 // public void close_tail() 155 // { 156 // initTransportWrapperOnFirstIO(); 157 // if (_initException is null) { 158 // _transportWrapper.close_tail(); 159 // } 160 // } 161 // 162 // 163 // public int pending() 164 // { 165 // initTransportWrapperOnFirstIO(); 166 // if (_initException is null) { 167 // return _transportWrapper.pending(); 168 // } else { 169 // throw new TransportException(_initException); 170 // } 171 // } 172 // 173 // 174 // public ByteBuffer head() 175 // { 176 // initTransportWrapperOnFirstIO(); 177 // if (_initException is null) { 178 // return _transportWrapper.head(); 179 // } else { 180 // return null; 181 // } 182 // } 183 // 184 // 185 // public void pop(int bytes) 186 // { 187 // initTransportWrapperOnFirstIO(); 188 // if (_initException is null) { 189 // _transportWrapper.pop(bytes); 190 // } 191 // } 192 // 193 // 194 // public void close_head() 195 // { 196 // initTransportWrapperOnFirstIO(); 197 // if (_initException is null) { 198 // _transportWrapper.close_head(); 199 // } 200 // } 201 // 202 // 203 // public string getCipherName() 204 // { 205 // if (_transportWrapper is null) 206 // { 207 // return null; 208 // } 209 // else 210 // { 211 // return _transportWrapper.getCipherName(); 212 // } 213 // } 214 // 215 // 216 // public string getProtocolName() 217 // { 218 // if(_transportWrapper is null) 219 // { 220 // return null; 221 // } 222 // else 223 // { 224 // return _transportWrapper.getProtocolName(); 225 // } 226 // } 227 // 228 // private void initTransportWrapperOnFirstIO() 229 // { 230 // try { 231 // if (_initException is null && _transportWrapper is null) 232 // { 233 // SslTransportWrapper sslTransportWrapper = new SimpleSslTransportWrapper 234 // (_protonSslEngineProvider.createSslEngine(_peerDetails), 235 // _inputProcessor, _outputProcessor); 236 // 237 // if (_domain.allowUnsecuredClient() && _domain.getMode() == SslDomain.Mode.SERVER) 238 // { 239 // TransportWrapper plainTransportWrapper = new PlainTransportWrapper 240 // (_outputProcessor, _inputProcessor); 241 // _transportWrapper = new SslHandshakeSniffingTransportWrapper 242 // (sslTransportWrapper, plainTransportWrapper); 243 // } 244 // else 245 // { 246 // _transportWrapper = sslTransportWrapper; 247 // } 248 // } 249 // } catch (TransportException e) { 250 // _initException = e; 251 // } 252 // } 253 // } 254 // 255 // /** 256 // * {@inheritDoc} 257 // * @throws ProtonUnsupportedOperationException 258 // */ 259 // 260 // public void setPeerHostname(string hostname) 261 // { 262 // implementationMissing(false); 263 // //throw new ProtonUnsupportedOperationException(); 264 // } 265 // 266 // /** 267 // * {@inheritDoc} 268 // * @throws ProtonUnsupportedOperationException 269 // */ 270 // 271 // public string getPeerHostname() 272 // { 273 // implementationMissing(false); 274 // // throw new ProtonUnsupportedOperationException(); 275 // } 276 //}