From c3f44e70ea6a8c9bd16281f4b7e2bcd8f7bae47f Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Wed, 31 Jan 2018 17:21:12 +0100 Subject: Added support for ice_fixed, ice_getTimeout, ice_getCompress methods (ICE-7996 & ICE-7976) --- ruby/src/IceRuby/Connection.cpp | 13 ++++++++ ruby/src/IceRuby/Connection.h | 3 ++ ruby/src/IceRuby/Proxy.cpp | 69 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+) (limited to 'ruby/src') diff --git a/ruby/src/IceRuby/Connection.cpp b/ruby/src/IceRuby/Connection.cpp index a4f0f8bcbff..b2df21c6419 100644 --- a/ruby/src/IceRuby/Connection.cpp +++ b/ruby/src/IceRuby/Connection.cpp @@ -512,3 +512,16 @@ IceRuby::initConnection(VALUE iceModule) rb_define_attr(_sslConnectionInfoClass, "certs", 1, 0); rb_define_attr(_sslConnectionInfoClass, "verified", 1, 0); } + +Ice::ConnectionPtr +IceRuby::getConnection(VALUE v) +{ + Ice::ConnectionPtr* p = reinterpret_cast(DATA_PTR(v)); + return *p; +} + +bool +IceRuby::checkConnection(VALUE v) +{ + return callRuby(rb_obj_is_kind_of, v, _connectionClass) == Qtrue; +} diff --git a/ruby/src/IceRuby/Connection.h b/ruby/src/IceRuby/Connection.h index 3c7a1a31038..9debcae3d27 100644 --- a/ruby/src/IceRuby/Connection.h +++ b/ruby/src/IceRuby/Connection.h @@ -21,6 +21,9 @@ void initConnection(VALUE); VALUE createConnection(const Ice::ConnectionPtr&); VALUE createConnectionInfo(const Ice::ConnectionInfoPtr&); +Ice::ConnectionPtr getConnection(VALUE); +bool checkConnection(VALUE); + } #endif diff --git a/ruby/src/IceRuby/Proxy.cpp b/ruby/src/IceRuby/Proxy.cpp index 51a02f5e108..c93f27cea36 100644 --- a/ruby/src/IceRuby/Proxy.cpp +++ b/ruby/src/IceRuby/Proxy.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -825,6 +826,27 @@ IceRuby_ObjectPrx_ice_compress(VALUE self, VALUE b) return Qnil; } +extern "C" +VALUE +IceRuby_ObjectPrx_ice_getCompress(VALUE self) +{ + ICE_RUBY_TRY + { + Ice::ObjectPrx p = getProxy(self); + IceUtil::Optional c = p->ice_getCompress(); + if(c) + { + return *c ? Qtrue : Qfalse; + } + else + { + return Unset; + } + } + ICE_RUBY_CATCH + return Qnil; +} + extern "C" VALUE IceRuby_ObjectPrx_ice_timeout(VALUE self, VALUE t) @@ -846,6 +868,27 @@ IceRuby_ObjectPrx_ice_timeout(VALUE self, VALUE t) return Qnil; } +extern "C" +VALUE +IceRuby_ObjectPrx_ice_getTimeout(VALUE self) +{ + ICE_RUBY_TRY + { + Ice::ObjectPrx p = getProxy(self); + IceUtil::Optional t = p->ice_getTimeout(); + if(t) + { + return INT2FIX(*t); + } + else + { + return Unset; + } + } + ICE_RUBY_CATCH + return Qnil; +} + extern "C" VALUE IceRuby_ObjectPrx_ice_connectionId(VALUE self, VALUE id) @@ -860,6 +903,29 @@ IceRuby_ObjectPrx_ice_connectionId(VALUE self, VALUE id) return Qnil; } +extern "C" +VALUE +IceRuby_ObjectPrx_ice_fixed(VALUE self, VALUE con) +{ + ICE_RUBY_TRY + { + Ice::ObjectPrx p = getProxy(self); + + Ice::ConnectionPtr connection; + if(!NIL_P(con)) + { + if(!checkConnection(con)) + { + throw RubyException(rb_eTypeError, "argument must be an Ice.Connection"); + } + connection = getConnection(con); + } + return createProxy(p->ice_fixed(connection), rb_class_of(self)); + } + ICE_RUBY_CATCH + return Qnil; +} + extern "C" VALUE IceRuby_ObjectPrx_ice_getConnection(VALUE self) @@ -1265,8 +1331,11 @@ IceRuby::initProxy(VALUE iceModule) rb_define_method(_proxyClass, "ice_batchDatagram", CAST_METHOD(IceRuby_ObjectPrx_ice_batchDatagram), 0); rb_define_method(_proxyClass, "ice_isBatchDatagram", CAST_METHOD(IceRuby_ObjectPrx_ice_isBatchDatagram), 0); rb_define_method(_proxyClass, "ice_compress", CAST_METHOD(IceRuby_ObjectPrx_ice_compress), 1); + rb_define_method(_proxyClass, "ice_getCompress", CAST_METHOD(IceRuby_ObjectPrx_ice_getCompress), 0); rb_define_method(_proxyClass, "ice_timeout", CAST_METHOD(IceRuby_ObjectPrx_ice_timeout), 1); + rb_define_method(_proxyClass, "ice_getTimeout", CAST_METHOD(IceRuby_ObjectPrx_ice_getTimeout), 0); rb_define_method(_proxyClass, "ice_connectionId", CAST_METHOD(IceRuby_ObjectPrx_ice_connectionId), 1); + rb_define_method(_proxyClass, "ice_fixed", CAST_METHOD(IceRuby_ObjectPrx_ice_fixed), 1); rb_define_method(_proxyClass, "ice_getConnection", CAST_METHOD(IceRuby_ObjectPrx_ice_getConnection), 0); rb_define_method(_proxyClass, "ice_getCachedConnection", CAST_METHOD(IceRuby_ObjectPrx_ice_getCachedConnection), 0); rb_define_method(_proxyClass, "ice_flushBatchRequests", CAST_METHOD(IceRuby_ObjectPrx_ice_flushBatchRequests), 0); -- cgit v1.2.3