You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2015/09/28 23:22:26 UTC
[07/50] [abbrv] qpid-proton git commit: PROTON-1003: add SSL error
handler callback
PROTON-1003: add SSL error handler callback
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/c56bcff5
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/c56bcff5
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/c56bcff5
Branch: refs/heads/proton-go
Commit: c56bcff5fc3f5f5087ed227e1dd11d7b835df819
Parents: 84e416e
Author: Gordon Sim <gs...@redhat.com>
Authored: Thu Sep 24 15:29:48 2015 -0400
Committer: Ken Giusti <kg...@apache.org>
Committed: Thu Sep 24 15:29:48 2015 -0400
----------------------------------------------------------------------
proton-c/src/engine/engine-internal.h | 2 +-
proton-c/src/sasl/sasl.c | 4 ++--
proton-c/src/ssl/openssl.c | 14 ++++++++++----
proton-c/src/transport/transport.c | 8 ++++----
4 files changed, 17 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c56bcff5/proton-c/src/engine/engine-internal.h
----------------------------------------------------------------------
diff --git a/proton-c/src/engine/engine-internal.h b/proton-c/src/engine/engine-internal.h
index faba488..0b052a7 100644
--- a/proton-c/src/engine/engine-internal.h
+++ b/proton-c/src/engine/engine-internal.h
@@ -100,7 +100,7 @@ typedef struct {
typedef struct pn_io_layer_t {
ssize_t (*process_input)(struct pn_transport_t *transport, unsigned int layer, const char *, size_t);
ssize_t (*process_output)(struct pn_transport_t *transport, unsigned int layer, char *, size_t);
- void (*handle_error)(struct pn_transport_t* transport);
+ void (*handle_error)(struct pn_transport_t* transport, unsigned int layer);
pn_timestamp_t (*process_tick)(struct pn_transport_t *transport, unsigned int layer, pn_timestamp_t);
size_t (*buffered_output)(struct pn_transport_t *transport); // how much output is held
} pn_io_layer_t;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c56bcff5/proton-c/src/sasl/sasl.c
----------------------------------------------------------------------
diff --git a/proton-c/src/sasl/sasl.c b/proton-c/src/sasl/sasl.c
index fb98894..994082c 100644
--- a/proton-c/src/sasl/sasl.c
+++ b/proton-c/src/sasl/sasl.c
@@ -49,7 +49,7 @@ static ssize_t pn_input_read_sasl_encrypt(pn_transport_t *transport, unsigned in
static ssize_t pn_output_write_sasl_header(pn_transport_t* transport, unsigned int layer, char* bytes, size_t size);
static ssize_t pn_output_write_sasl(pn_transport_t *transport, unsigned int layer, char *bytes, size_t available);
static ssize_t pn_output_write_sasl_encrypt(pn_transport_t *transport, unsigned int layer, char *bytes, size_t available);
-static void pn_error_sasl(pn_transport_t* transport);
+static void pn_error_sasl(pn_transport_t* transport, unsigned int layer);
const pn_io_layer_t sasl_header_layer = {
pn_input_read_sasl_header,
@@ -253,7 +253,7 @@ static void pni_post_sasl_frame(pn_transport_t *transport)
}
}
-static void pn_error_sasl(pn_transport_t* transport)
+static void pn_error_sasl(pn_transport_t* transport, unsigned int layer)
{
transport->close_sent = true;
pni_sasl_set_desired_state(transport, SASL_ERROR);
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c56bcff5/proton-c/src/ssl/openssl.c
----------------------------------------------------------------------
diff --git a/proton-c/src/ssl/openssl.c b/proton-c/src/ssl/openssl.c
index 2781a5b..8710225 100644
--- a/proton-c/src/ssl/openssl.c
+++ b/proton-c/src/ssl/openssl.c
@@ -142,6 +142,7 @@ struct pn_ssl_session_t {
/* */
static int keyfile_pw_cb(char *buf, int size, int rwflag, void *userdata);
+static void handle_error_ssl( pn_transport_t *transport, unsigned int layer);
static ssize_t process_input_ssl( pn_transport_t *transport, unsigned int layer, const char *input_data, size_t len);
static ssize_t process_output_ssl( pn_transport_t *transport, unsigned int layer, char *input_data, size_t len);
static ssize_t process_input_done(pn_transport_t *transport, unsigned int layer, const char *input_data, size_t len);
@@ -682,7 +683,7 @@ int pn_ssl_domain_set_peer_authentication(pn_ssl_domain_t *domain,
const pn_io_layer_t ssl_layer = {
process_input_ssl,
process_output_ssl,
- NULL,
+ handle_error_ssl,
NULL,
buffered_output
};
@@ -690,7 +691,7 @@ const pn_io_layer_t ssl_layer = {
const pn_io_layer_t ssl_input_closed_layer = {
process_input_done,
process_output_ssl,
- NULL,
+ handle_error_ssl,
NULL,
buffered_output
};
@@ -698,7 +699,7 @@ const pn_io_layer_t ssl_input_closed_layer = {
const pn_io_layer_t ssl_output_closed_layer = {
process_input_ssl,
process_output_done,
- NULL,
+ handle_error_ssl,
NULL,
buffered_output
};
@@ -706,7 +707,7 @@ const pn_io_layer_t ssl_output_closed_layer = {
const pn_io_layer_t ssl_closed_layer = {
process_input_done,
process_output_done,
- NULL,
+ handle_error_ssl,
NULL,
buffered_output
};
@@ -1022,6 +1023,11 @@ static ssize_t process_input_ssl( pn_transport_t *transport, unsigned int layer,
return consumed;
}
+static void handle_error_ssl(pn_transport_t *transport, unsigned int layer)
+{
+ transport->io_layers[layer] = &ssl_closed_layer;
+}
+
static ssize_t process_output_ssl( pn_transport_t *transport, unsigned int layer, char *buffer, size_t max_len)
{
pni_ssl_t *ssl = transport->ssl;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c56bcff5/proton-c/src/transport/transport.c
----------------------------------------------------------------------
diff --git a/proton-c/src/transport/transport.c b/proton-c/src/transport/transport.c
index 96ac2a8..8edc9b3 100644
--- a/proton-c/src/transport/transport.c
+++ b/proton-c/src/transport/transport.c
@@ -141,7 +141,7 @@ static ssize_t pn_input_read_amqp_header(pn_transport_t *transport, unsigned int
static ssize_t pn_input_read_amqp(pn_transport_t *transport, unsigned int layer, const char *bytes, size_t available);
static ssize_t pn_output_write_amqp_header(pn_transport_t *transport, unsigned int layer, char *bytes, size_t available);
static ssize_t pn_output_write_amqp(pn_transport_t *transport, unsigned int layer, char *bytes, size_t available);
-static void pn_error_amqp(pn_transport_t *transport);
+static void pn_error_amqp(pn_transport_t *transport, unsigned int layer);
static pn_timestamp_t pn_tick_amqp(pn_transport_t *transport, unsigned int layer, pn_timestamp_t now);
static ssize_t pn_io_layer_input_autodetect(pn_transport_t *transport, unsigned int layer, const char *bytes, size_t available);
@@ -1100,7 +1100,7 @@ int pn_do_error(pn_transport_t *transport, const char *condition, const char *fm
for (int i = 0; i<PN_IO_LAYER_CT; ++i) {
if (transport->io_layers[i] && transport->io_layers[i]->handle_error)
- transport->io_layers[i]->handle_error(transport);
+ transport->io_layers[i]->handle_error(transport, i);
}
pni_close_tail(transport);
@@ -2413,7 +2413,7 @@ static int pni_process(pn_transport_t *transport)
#define AMQP_HEADER ("AMQP\x00\x01\x00\x00")
-static void pn_error_amqp(pn_transport_t* transport)
+static void pn_error_amqp(pn_transport_t* transport, unsigned int layer)
{
if (!transport->close_sent) {
if (!transport->open_sent) {
@@ -2529,7 +2529,7 @@ static ssize_t pn_output_write_amqp_header(pn_transport_t* transport, unsigned i
assert(available >= 8);
memmove(bytes, AMQP_HEADER, 8);
if (pn_condition_is_set(&transport->condition)) {
- pn_error_amqp(transport);
+ pn_error_amqp(transport, layer);
transport->io_layers[layer] = &pni_error_layer;
return pn_dispatcher_output(transport, bytes+8, available-8) + 8;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org