Commit 2aa09d34 authored by Constantin Rack's avatar Constantin Rack Committed by GitHub

Merge pull request #2262 from Cziken/master

Problem: Duplicated code
parents d514bb59 022eeaf3
......@@ -90,6 +90,35 @@ zmq::options_t::options_t () :
#endif
}
int zmq::options_t::set_curve_key(uint8_t * destination, const void * optval_, size_t optvallen_)
{
char * optval = (char *) optval_;
switch (optvallen_) {
case CURVE_KEYSIZE:
memcpy (destination, optval_, optvallen_);
mechanism = ZMQ_CURVE;
return 0;
case CURVE_KEYSIZE_Z85:
char z85_key [CURVE_KEYSIZE_Z85 + 1];
memcpy (z85_key, optval, optvallen_);
z85_key [optvallen_] = 0;
optval = z85_key;
//Intentionall fallthrough
case CURVE_KEYSIZE_Z85 + 1:
if (zmq_z85_decode (destination, optval)) {
mechanism = ZMQ_CURVE;
return 0;
}
break;
default:
break;
}
return -1;
}
int zmq::options_t::setsockopt (int option_, const void *optval_,
size_t optvallen_)
{
......@@ -418,87 +447,19 @@ int zmq::options_t::setsockopt (int option_, const void *optval_,
break;
case ZMQ_CURVE_PUBLICKEY:
// TODO: refactor repeated code for these three options
// into set_curve_key (destination, optval, optlen) method
// ==> set_curve_key (curve_public_key, optval_, optvallen_);
if (optvallen_ == CURVE_KEYSIZE) {
memcpy (curve_public_key, optval_, CURVE_KEYSIZE);
mechanism = ZMQ_CURVE;
if(0 == set_curve_key(curve_public_key, optval_, optvallen_))
return 0;
}
else
if (optvallen_ == CURVE_KEYSIZE_Z85 + 1) {
if (zmq_z85_decode (curve_public_key, (char *) optval_)) {
mechanism = ZMQ_CURVE;
return 0;
}
}
else
// Deprecated, not symmetrical with zmq_getsockopt
if (optvallen_ == CURVE_KEYSIZE_Z85) {
char z85_key [CURVE_KEYSIZE_Z85 + 1];
memcpy (z85_key, (char *) optval_, CURVE_KEYSIZE_Z85);
z85_key [CURVE_KEYSIZE_Z85] = 0;
if (zmq_z85_decode (curve_public_key, z85_key)) {
mechanism = ZMQ_CURVE;
return 0;
}
}
break;
case ZMQ_CURVE_SECRETKEY:
if (optvallen_ == CURVE_KEYSIZE) {
memcpy (curve_secret_key, optval_, CURVE_KEYSIZE);
mechanism = ZMQ_CURVE;
if(0 == set_curve_key(curve_secret_key, optval_, optvallen_))
return 0;
}
else
if (optvallen_ == CURVE_KEYSIZE_Z85 + 1) {
if (zmq_z85_decode (curve_secret_key, (char *) optval_)) {
mechanism = ZMQ_CURVE;
return 0;
}
}
else
// Deprecated, not symmetrical with zmq_getsockopt
if (optvallen_ == CURVE_KEYSIZE_Z85) {
char z85_key [CURVE_KEYSIZE_Z85 + 1];
memcpy (z85_key, (char *) optval_, CURVE_KEYSIZE_Z85);
z85_key [CURVE_KEYSIZE_Z85] = 0;
if (zmq_z85_decode (curve_secret_key, z85_key)) {
mechanism = ZMQ_CURVE;
return 0;
}
}
break;
case ZMQ_CURVE_SERVERKEY:
if (optvallen_ == CURVE_KEYSIZE) {
memcpy (curve_server_key, optval_, CURVE_KEYSIZE);
mechanism = ZMQ_CURVE;
if(0 == set_curve_key(curve_server_key, optval_, optvallen_))
as_server = 0;
return 0;
}
else
if (optvallen_ == CURVE_KEYSIZE_Z85 + 1) {
if (zmq_z85_decode (curve_server_key, (char *) optval_)) {
mechanism = ZMQ_CURVE;
as_server = 0;
return 0;
}
}
else
// Deprecated, not symmetrical with zmq_getsockopt
if (optvallen_ == CURVE_KEYSIZE_Z85) {
char z85_key [CURVE_KEYSIZE_Z85 + 1];
memcpy (z85_key, (char *) optval_, CURVE_KEYSIZE_Z85);
z85_key [CURVE_KEYSIZE_Z85] = 0;
if (zmq_z85_decode (curve_server_key, z85_key)) {
mechanism = ZMQ_CURVE;
as_server = 0;
return 0;
}
}
break;
#endif
......
......@@ -56,6 +56,8 @@ namespace zmq
{
options_t ();
int set_curve_key(uint8_t * destination, const void * optval_, size_t optvallen_);
int setsockopt (int option_, const void *optval_, size_t optvallen_);
int getsockopt (int option_, void *optval_, size_t *optvallen_) const;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment