<div dir="ltr">Hi, <div>I suggested one such implementation in mongoose opensource web server </div><div>You can check it in .</div><div><br></div><div><a href="https://groups.google.com/forum/#!msg/mongoose-users/IAzYHF0do-I/INc_VmLAe6gJ">https://groups.google.com/forum/#!msg/mongoose-users/IAzYHF0do-I/INc_VmLAe6gJ</a><br></div><div><br></div><div>This is the function I added </div><div>let me know if it is useful. </div><div><br></div><div><br></div><div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">static int CheckSSL(int nSocket)</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">{</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">  /* taken from s23_svr.c int ssl23_get_client_hello(SSL *s) of openssl */</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">  char szData [12] ;</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">  int nRet = 0 ;</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">  int n;</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">  memset ( szData, 0, sizeof(szData));</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">  n = recv ( nSocket, szData, 11, MSG_PEEK ) ;</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline"><br></font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">  if (n > 2)</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">  {</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">     if((szData[0] & 0x80) && (szData[2] == 1)) // SSL2_MT_CLIENT_HELLO</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">     {</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">       // SSLv2</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">       nRet = 1;</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">     }</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">     else if(n > 9)</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">     {</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">        if ((szData[0] == 22 ) &&              // SSL3_RT_HANDSHAKE</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">           (szData[1] == 0x03) &&              // SSL3_VERSION_MAJOR</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">           (szData[5] == 1) &&                 // SSL3_MT_CLIENT_HELLO</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">           ((szData[3] == 0 && szData[4] < 5)</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">            || (szData[9] == szData[1])))</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">        {</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">          // SSLv3</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">          nRet = 1;</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">        }</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">     }</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">  }</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">  return nRet;</font></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline">}</font></div></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Arial,Helvetica,sans-serif;font-size:13px"><font face="courier new, monospace" style="margin:0px;padding:0px;border:0px;vertical-align:baseline"><br></font></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Apr 4, 2015 at 5:10 AM, James Cloos <span dir="ltr"><<a href="mailto:cloos@jhcloos.com" target="_blank">cloos@jhcloos.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">>>>>> "JR" == Joris Van Remoortere <<a href="mailto:joris@mesosphere.io">joris@mesosphere.io</a>> writes:<br>
<br>
JR> I would like to ask your opinion and advice on accepting HTTP / HTTPS<br>
JR> connections on the same port.<br>
<br>
IPP support both w/ and w/o tls on port 631.<br>
<br>
Cups handles it like this:<br>
<br>
  <a href="http://www.pwg.org/archives/ipp/2014/017906.html" target="_blank">http://www.pwg.org/archives/ipp/2014/017906.html</a><br>
<br>
-JimC<br>
<span class="HOEnZb"><font color="#888888">--<br>
James Cloos <<a href="mailto:cloos@jhcloos.com">cloos@jhcloos.com</a>>         OpenPGP: 0x997A9F17ED7DAEA6<br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
openssl-users mailing list<br>
To unsubscribe: <a href="https://mta.openssl.org/mailman/listinfo/openssl-users" target="_blank">https://mta.openssl.org/mailman/listinfo/openssl-users</a><br>
</div></div></blockquote></div><br></div>