Skip to content

Commit

Permalink
Merge pull request #12 from symmetryinvestments/openssl-optional
Browse files Browse the repository at this point in the history
Openssl optional
  • Loading branch information
Laeeth authored Jun 30, 2019
2 parents 4b03c67 + 96c191a commit 6c27d83
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 33 deletions.
11 changes: 9 additions & 2 deletions dub.sdl
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,14 @@ description "Binding for librabbitmq"
authors "Laeeth Isharc"
copyright "Copyright © 2017, Laeeth Isharc and Kaleidic Associates"
license "Boost"
dependency "openssl" version="*"
sourcePath "source"
//sourceFiles "c/platform_utils.o"
libs "rabbitmq"
targetType "library"

configuration "openssl" {
versions "OpenSSL"
dependency "openssl" version="*"
}

configuration "no-openssl" {
}
52 changes: 30 additions & 22 deletions source/kaleidic/api/rabbitmq/package.d
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
module kaleidic.api.rabbitmq;
import deimos.openssl.x509v3;
import deimos.openssl.bio;
version(OpenSSL)
{
import deimos.openssl.x509v3;
import deimos.openssl.bio;
}
import core.stdc.string:memcpy;
alias ssize_t= long; // FIXME
struct amqp_time_t {}
struct pthread_mutex_t {}
version(Posix) import core.sys.posix.sys.types:pthread_mutex_t;
else struct pthread_mutex_t {}

alias DWORD=int;

Expand Down Expand Up @@ -714,25 +718,27 @@ amqp_table_entry_t amqp_table_construct_table_entry(const(char)*key, const amqp_
amqp_table_entry_t amqp_table_construct_bool_entry(const(char)*key, const int value);
amqp_table_entry_t *amqp_table_get_entry_by_key(const amqp_table_t *table, const amqp_bytes_t key);

amqp_socket_t * amqp_ssl_socket_new(amqp_connection_state_t state);
int amqp_ssl_socket_set_cacert(amqp_socket_t *self, const(char)*cacert);
int amqp_ssl_socket_set_key(amqp_socket_t *self, const(char)*cert, const(char)*key);
int amqp_ssl_socket_set_key_buffer(amqp_socket_t *self, const(char)*cert, const void *key, size_t n);
void amqp_ssl_socket_set_verify(amqp_socket_t *self, amqp_boolean_t verify);
void amqp_ssl_socket_set_verify_peer(amqp_socket_t *self, amqp_boolean_t verify);
void amqp_ssl_socket_set_verify_hostname(amqp_socket_t *self, amqp_boolean_t verify);

enum amqp_tls_version_t
version(OpenSSL)
{
AMQP_TLSv1 = 1,
AMQP_TLSv1_1 = 2,
AMQP_TLSv1_2 = 3,
AMQP_TLSvLATEST = 0xFFFF
}
amqp_socket_t * amqp_ssl_socket_new(amqp_connection_state_t state);
int amqp_ssl_socket_set_cacert(amqp_socket_t *self, const(char)*cacert);
int amqp_ssl_socket_set_key(amqp_socket_t *self, const(char)*cert, const(char)*key);
int amqp_ssl_socket_set_key_buffer(amqp_socket_t *self, const(char)*cert, const void *key, size_t n);
void amqp_ssl_socket_set_verify(amqp_socket_t *self, amqp_boolean_t verify);
void amqp_ssl_socket_set_verify_peer(amqp_socket_t *self, amqp_boolean_t verify);
void amqp_ssl_socket_set_verify_hostname(amqp_socket_t *self, amqp_boolean_t verify);

int amqp_ssl_socket_set_ssl_versions(amqp_socket_t *self, amqp_tls_version_t min, amqp_tls_version_t max);
void amqp_set_initialize_ssl_library(amqp_boolean_t do_initialize);
enum amqp_tls_version_t
{
AMQP_TLSv1 = 1,
AMQP_TLSv1_1 = 2,
AMQP_TLSv1_2 = 3,
AMQP_TLSvLATEST = 0xFFFF
}

int amqp_ssl_socket_set_ssl_versions(amqp_socket_t *self, amqp_tls_version_t min, amqp_tls_version_t max);
void amqp_set_initialize_ssl_library(amqp_boolean_t do_initialize);
}


enum amqp_socket_flag_enum
Expand Down Expand Up @@ -1091,9 +1097,11 @@ enum amqp_hostname_validation_result
AMQP_HVR_MALFORMED_CERTIFICATE,
AMQP_HVR_ERROR
}

amqp_hostname_validation_result amqp_ssl_validate_hostname(const(char)*hostname, const X509* server_cert);
BIO_METHOD* amqp_openssl_bio();
version(OpenSSL)
{
amqp_hostname_validation_result amqp_ssl_validate_hostname(const(char)*hostname, const X509* server_cert);
BIO_METHOD* amqp_openssl_bio();
}
enum amqp_hostcheck_result
{
AMQP_HCR_NO_MATCH = 0,
Expand Down
25 changes: 16 additions & 9 deletions source/kaleidic/api/rabbitmq/utils.d
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
module kaleidic.api.rabbitmq.utils;
import kaleidic.api.rabbitmq;
public import kaleidic.api.rabbitmq.platform_utils;
import std.stdio:writeln,writef;
import std.stdio:writeln,writef,stderr;
import std.ascii;
import core.stdc.stdarg;
import core.stdc.stdio:stderr,printf,vfprintf;
import std.exception;
import std.format:format;

void die(const char *fmt, ...);
/+
void die(T...)(string formatString,T args)
{
stderr.writefln(formatString,args);
throw new Exception("");
}
void die(const char *fmt, ...)
{
import core.stdc.stdio:stderr;
Expand All @@ -18,12 +24,16 @@ void die(const char *fmt, ...)
va_end(ap);
throw new Exception("");
}

void die_on_error(int x, const(char) *context)
{
enforce(x>=0, format!"%s: %s\n"(context, amqp_error_string2(x)));
}

+/
void die_on_error(int x, string context)
{
import std.string:fromStringz;
enforce(x>=0, format!"%s:%s"(context,amqp_error_string2(x).fromStringz));
}
void die_on_amqp_error(amqp_rpc_reply_t x, string context)
{
import std.stdio:stderr;
Expand All @@ -35,7 +45,7 @@ void die_on_amqp_error(amqp_rpc_reply_t x, string context)
case none:
throw new Exception(format!"%s: missing RPC reply type!"(context));

case libraryException:
/+ case libraryException:
throw new Exception(format!"%s: %s"(context, amqp_error_string2(x.library_error)));
case serverException:
Expand All @@ -52,18 +62,15 @@ void die_on_amqp_error(amqp_rpc_reply_t x, string context)
context,
m.reply_code,
cast(int) m.reply_text.len, cast(char *) m.reply_text.bytes));

default:
throw new Exception(format!"%s: unknown server error, method id 0x%08X"(context, x.reply.id));
}

+/
default:
break;
}

throw new Exception(format!"unknown Response Type: %s"(x.reply_type));
}

void dump_row(long count, int numinrow, int *chs)
{
int i;
Expand Down

0 comments on commit 6c27d83

Please sign in to comment.