Author: kgiusti
Date: Tue Aug 14 15:55:23 2012
New Revision: 1372948
URL: http://svn.apache.org/viewvc?rev=1372948&view=rev
Log:
PROTON-2: fix clear/encrypted detection.
Modified:
qpid/proton/branches/driver_abstraction/examples/mailbox/server
qpid/proton/branches/driver_abstraction/proton-c/src/drivers/openssl.c
Modified: qpid/proton/branches/driver_abstraction/examples/mailbox/server
URL:
http://svn.apache.org/viewvc/qpid/proton/branches/driver_abstraction/examples/mailbox/server?rev=1372948&r1=1372947&r2=1372948&view=diff
==============================================================================
--- qpid/proton/branches/driver_abstraction/examples/mailbox/server (original)
+++ qpid/proton/branches/driver_abstraction/examples/mailbox/server Tue Aug 14
15:55:23 2012
@@ -116,6 +116,7 @@ class MailboxServer(object):
self.ca_database);
assert(rc == 0)
if not self.require_encryption:
+ self.log("Allowing both encrypted AND unencrypted
connections!")
rc = pn_listener_ssl_allow_unsecured_clients(self.listener)
assert(rc == 0)
return True
Modified: qpid/proton/branches/driver_abstraction/proton-c/src/drivers/openssl.c
URL:
http://svn.apache.org/viewvc/qpid/proton/branches/driver_abstraction/proton-c/src/drivers/openssl.c?rev=1372948&r1=1372947&r2=1372948&view=diff
==============================================================================
--- qpid/proton/branches/driver_abstraction/proton-c/src/drivers/openssl.c
(original)
+++ qpid/proton/branches/driver_abstraction/proton-c/src/drivers/openssl.c Tue
Aug 14 15:55:23 2012
@@ -465,6 +465,7 @@ static int configure_ca_database(SSL_CTX
static int start_check_for_ssl( pn_connector_t *client )
{
+ printf("start_check_for_ssl()\n");
client->status |= PN_SEL_RD;
client->io_handler = handle_check_for_ssl;
return 0;
@@ -477,13 +478,20 @@ static int handle_check_for_ssl( pn_conn
int rc;
int retries = 3;
+ printf("handle_check_for_ssl()\n");
+
do {
rc = recv(client->fd, buf, sizeof(buf), MSG_PEEK);
if (rc == sizeof(buf))
break;
- if (rc < 0 && errno != EINTR && errno != EAGAIN) {
- perror("handle_check_for_ssl() recv failed:");
- break;
+ if (rc < 0) {
+ if (errno == EWOULDBLOCK) {
+ client->status |= PN_SEL_RD;
+ return 0;
+ } else if (errno != EINTR) {
+ perror("handle_check_for_ssl() recv failed:");
+ break;
+ }
}
} while (retries-- > 0);
@@ -604,6 +612,7 @@ int handle_ssl_connect( pn_connector_t *
static int start_ssl_accept(pn_connector_t *client)
{
+ printf("start_ssl_accept()\n");
pn_connector_ssl_t *impl = client->ssl;
if (!impl) return -1;
pn_listener_ssl_t *parent = client->listener->ssl;
@@ -618,6 +627,7 @@ static int start_ssl_accept(pn_connector
static int handle_ssl_accept(pn_connector_t *client)
{
+ printf("handle_ssl_accept()\n");
pn_connector_ssl_t *impl = client->ssl;
if (!impl) return -1;
@@ -760,7 +770,9 @@ int handle_ssl_connection_up( pn_connect
*/
static int start_clear_connected( pn_connector_t *c )
{
+ printf("start_clear_connected()\n");
pn_connector_free_ssl( c );
+ c->status |= (PN_SEL_RD | PN_SEL_WR);
c->io_handler = pn_io_handler;
return 0;
}
@@ -772,7 +784,7 @@ static int start_clear_connected( pn_con
*/
static int start_ssl_shutdown( pn_connector_t *c )
{
- printf("start_ssl_shutdown...\n");
+ printf("start_ssl_shutdown()\n");
if (c->closed) return 0;
return handle_ssl_shutdown( c );
}
@@ -783,7 +795,7 @@ static int handle_ssl_shutdown( pn_conne
pn_connector_ssl_t *impl = c->ssl;
if (!impl) return -1;
- printf("handle_ssl_shutdown...\n");
+ printf("handle_ssl_shutdown()\n");
do {
rc = SSL_shutdown( impl->ssl );
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]