summaryrefslogtreecommitdiff
path: root/python/modules/IcePy/Proxy.cpp
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2015-03-21 15:35:40 -0230
committerMatthew Newhook <matthew@zeroc.com>2015-03-21 15:35:40 -0230
commit630a37d2fe66f24518299e705f958b571803c522 (patch)
tree969723791bdc4d73bb099c19d45554d0ca241ad9 /python/modules/IcePy/Proxy.cpp
parentFix some README.md markdown formatting (diff)
downloadice-630a37d2fe66f24518299e705f958b571803c522.tar.bz2
ice-630a37d2fe66f24518299e705f958b571803c522.tar.xz
ice-630a37d2fe66f24518299e705f958b571803c522.zip
py -> python
rb -> ruby objc -> objective-c cs -> csharp
Diffstat (limited to 'python/modules/IcePy/Proxy.cpp')
-rw-r--r--python/modules/IcePy/Proxy.cpp2689
1 files changed, 2689 insertions, 0 deletions
diff --git a/python/modules/IcePy/Proxy.cpp b/python/modules/IcePy/Proxy.cpp
new file mode 100644
index 00000000000..293c3c16de8
--- /dev/null
+++ b/python/modules/IcePy/Proxy.cpp
@@ -0,0 +1,2689 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <IceUtil/DisableWarnings.h>
+#ifdef _WIN32
+# include <IceUtil/Config.h>
+#endif
+#include <Proxy.h>
+#include <structmember.h>
+#include <Communicator.h>
+#include <Connection.h>
+#include <Endpoint.h>
+#include <Operation.h>
+#include <Thread.h>
+#include <Util.h>
+#include <Ice/Communicator.h>
+#include <Ice/LocalException.h>
+#include <Ice/Locator.h>
+#include <Ice/Proxy.h>
+#include <Ice/Router.h>
+
+using namespace std;
+using namespace IcePy;
+
+namespace IcePy
+{
+
+struct ProxyObject
+{
+ PyObject_HEAD
+ Ice::ObjectPrx* proxy;
+ Ice::CommunicatorPtr* communicator;
+};
+
+}
+
+//
+// Proxy implementation.
+//
+static ProxyObject*
+allocateProxy(const Ice::ObjectPrx& proxy, const Ice::CommunicatorPtr& communicator, PyObject* type)
+{
+ PyTypeObject* typeObj = reinterpret_cast<PyTypeObject*>(type);
+ ProxyObject* p = reinterpret_cast<ProxyObject*>(typeObj->tp_alloc(typeObj, 0));
+ if(!p)
+ {
+ return 0;
+ }
+
+ //
+ // Disabling collocation optimization can cause subtle problems with proxy
+ // comparison (such as in RouterInfo::get) if a proxy from IcePy is
+ // compared with a proxy from Ice/C++.
+ //
+ //if(proxy)
+ //{
+ // p->proxy = new Ice::ObjectPrx(proxy->ice_collocationOptimized(false));
+ //}
+ //
+ p->proxy = new Ice::ObjectPrx(proxy);
+ p->communicator = new Ice::CommunicatorPtr(communicator);
+
+ return p;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static ProxyObject*
+proxyNew(PyTypeObject* /*type*/, PyObject* /*args*/, PyObject* /*kwds*/)
+{
+ PyErr_Format(PyExc_RuntimeError, STRCAST("A proxy cannot be created directly"));
+ return 0;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static void
+proxyDealloc(ProxyObject* self)
+{
+ delete self->proxy;
+ delete self->communicator;
+ Py_TYPE(self)->tp_free(reinterpret_cast<PyObject*>(self));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyCompare(ProxyObject* p1, PyObject* other, int op)
+{
+ bool result = false;
+
+ if(PyObject_TypeCheck(other, &ProxyType))
+ {
+ ProxyObject* p2 = reinterpret_cast<ProxyObject*>(other);
+
+ switch(op)
+ {
+ case Py_EQ:
+ result = *p1->proxy == *p2->proxy;
+ break;
+ case Py_NE:
+ result = *p1->proxy != *p2->proxy;
+ break;
+ case Py_LE:
+ result = *p1->proxy <= *p2->proxy;
+ break;
+ case Py_GE:
+ result = *p1->proxy >= *p2->proxy;
+ break;
+ case Py_LT:
+ result = *p1->proxy < *p2->proxy;
+ break;
+ case Py_GT:
+ result = *p1->proxy > *p2->proxy;
+ break;
+ }
+ }
+ else if(other == Py_None)
+ {
+ result = op == Py_NE || op == Py_GE || op == Py_GT;
+ }
+ else
+ {
+ if(op == Py_EQ)
+ {
+ result = false;
+ }
+ else if(op == Py_NE)
+ {
+ result = true;
+ }
+ else
+ {
+ PyErr_Format(PyExc_TypeError, "can't compare %s to %s", Py_TYPE(p1)->tp_name, Py_TYPE(other)->tp_name);
+ return 0;
+ }
+ }
+
+ PyObject* r = result ? getTrue() : getFalse();
+ Py_INCREF(r);
+ return r;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyRepr(ProxyObject* self)
+{
+ string str = (*self->proxy)->ice_toString();
+ return createString(str);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static long
+proxyHash(ProxyObject* self)
+{
+ return static_cast<long>((*self->proxy)->__hash());
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetCommunicator(ProxyObject* self)
+{
+ return getCommunicatorWrapper(*self->communicator);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIsA(ProxyObject* self, PyObject* args)
+{
+ PyObject* type;
+ PyObject* ctx = Py_None;
+ if(!PyArg_ParseTuple(args, STRCAST("O|O!"), &type, &PyDict_Type, &ctx))
+ {
+ return 0;
+ }
+
+ //
+ // We need to reformat the arguments to match what is used by the generated code: ((params...), ctx|None)
+ //
+ PyObjectHandle newArgs = Py_BuildValue(STRCAST("((O), O)"), type, ctx);
+
+ return invokeBuiltin(reinterpret_cast<PyObject*>(self), "ice_isA", newArgs.get());
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyBeginIceIsA(ProxyObject* self, PyObject* args, PyObject* kwds)
+{
+ static char* argNames[] =
+ {
+ const_cast<char*>("type"),
+ const_cast<char*>("_response"),
+ const_cast<char*>("_ex"),
+ const_cast<char*>("_sent"),
+ const_cast<char*>("_ctx"),
+ 0
+ };
+ PyObject* type;
+ PyObject* response = Py_None;
+ PyObject* ex = Py_None;
+ PyObject* sent = Py_None;
+ PyObject* ctx = Py_None;
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, STRCAST("O|OOOO"), argNames, &type, &response, &ex, &sent, &ctx))
+ {
+ return 0;
+ }
+
+ //
+ // We need to reformat the arguments to match what is used by the generated code:
+ //
+ // ((params...), response|None, ex|None, sent|None, ctx|None)
+ //
+ PyObjectHandle newArgs = Py_BuildValue(STRCAST("((O), O, O, O, O)"), type, response, ex, sent, ctx);
+
+ return beginBuiltin(reinterpret_cast<PyObject*>(self), "ice_isA", newArgs.get());
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyEndIceIsA(ProxyObject* self, PyObject* args)
+{
+ return endBuiltin(reinterpret_cast<PyObject*>(self), "ice_isA", args);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIcePing(ProxyObject* self, PyObject* args)
+{
+ PyObject* ctx = Py_None;
+ if(!PyArg_ParseTuple(args, STRCAST("|O!"), &PyDict_Type, &ctx))
+ {
+ return 0;
+ }
+
+ //
+ // We need to reformat the arguments to match what is used by the generated code: ((params...), ctx|None)
+ //
+ PyObjectHandle newArgs = Py_BuildValue(STRCAST("((), O)"), ctx);
+
+ return invokeBuiltin(reinterpret_cast<PyObject*>(self), "ice_ping", newArgs.get());
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyBeginIcePing(ProxyObject* self, PyObject* args, PyObject* kwds)
+{
+ static char* argNames[] =
+ {
+ const_cast<char*>("_response"),
+ const_cast<char*>("_ex"),
+ const_cast<char*>("_sent"),
+ const_cast<char*>("_ctx"),
+ 0
+ };
+ PyObject* response = Py_None;
+ PyObject* ex = Py_None;
+ PyObject* sent = Py_None;
+ PyObject* ctx = Py_None;
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, STRCAST("|OOOO"), argNames, &response, &ex, &sent, &ctx))
+ {
+ return 0;
+ }
+
+ //
+ // We need to reformat the arguments to match what is used by the generated code:
+ //
+ // ((params...), response|None, ex|None, sent|None, ctx|None)
+ //
+ PyObjectHandle newArgs = Py_BuildValue(STRCAST("((), O, O, O, O)"), response, ex, sent, ctx);
+
+ return beginBuiltin(reinterpret_cast<PyObject*>(self), "ice_ping", newArgs.get());
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyEndIcePing(ProxyObject* self, PyObject* args)
+{
+ return endBuiltin(reinterpret_cast<PyObject*>(self), "ice_ping", args);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIds(ProxyObject* self, PyObject* args)
+{
+ PyObject* ctx = Py_None;
+ if(!PyArg_ParseTuple(args, STRCAST("|O!"), &PyDict_Type, &ctx))
+ {
+ return 0;
+ }
+
+ //
+ // We need to reformat the arguments to match what is used by the generated code: ((params...), ctx|None)
+ //
+ PyObjectHandle newArgs = Py_BuildValue(STRCAST("((), O)"), ctx);
+
+ return invokeBuiltin(reinterpret_cast<PyObject*>(self), "ice_ids", newArgs.get());
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyBeginIceIds(ProxyObject* self, PyObject* args, PyObject* kwds)
+{
+ static char* argNames[] =
+ {
+ const_cast<char*>("_response"),
+ const_cast<char*>("_ex"),
+ const_cast<char*>("_sent"),
+ const_cast<char*>("_ctx"),
+ 0
+ };
+ PyObject* response = Py_None;
+ PyObject* ex = Py_None;
+ PyObject* sent = Py_None;
+ PyObject* ctx = Py_None;
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, STRCAST("|OOOO"), argNames, &response, &ex, &sent, &ctx))
+ {
+ return 0;
+ }
+
+ //
+ // We need to reformat the arguments to match what is used by the generated code:
+ //
+ // ((params...), response|None, ex|None, sent|None, ctx|None)
+ //
+ PyObjectHandle newArgs = Py_BuildValue(STRCAST("((), O, O, O, O)"), response, ex, sent, ctx);
+
+ return beginBuiltin(reinterpret_cast<PyObject*>(self), "ice_ids", newArgs.get());
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyEndIceIds(ProxyObject* self, PyObject* args)
+{
+ return endBuiltin(reinterpret_cast<PyObject*>(self), "ice_ids", args);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceId(ProxyObject* self, PyObject* args)
+{
+ PyObject* ctx = Py_None;
+ if(!PyArg_ParseTuple(args, STRCAST("|O!"), &PyDict_Type, &ctx))
+ {
+ return 0;
+ }
+
+ //
+ // We need to reformat the arguments to match what is used by the generated code: ((params...), ctx|None)
+ //
+ PyObjectHandle newArgs = Py_BuildValue(STRCAST("((), O)"), ctx);
+
+ return invokeBuiltin(reinterpret_cast<PyObject*>(self), "ice_id", newArgs.get());
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyBeginIceId(ProxyObject* self, PyObject* args, PyObject* kwds)
+{
+ static char* argNames[] =
+ {
+ const_cast<char*>("_response"),
+ const_cast<char*>("_ex"),
+ const_cast<char*>("_sent"),
+ const_cast<char*>("_ctx"),
+ 0
+ };
+ PyObject* response = Py_None;
+ PyObject* ex = Py_None;
+ PyObject* sent = Py_None;
+ PyObject* ctx = Py_None;
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, STRCAST("|OOOO"), argNames, &response, &ex, &sent, &ctx))
+ {
+ return 0;
+ }
+
+ //
+ // We need to reformat the arguments to match what is used by the generated code:
+ //
+ // ((params...), response|None, ex|None, sent|None, ctx|None)
+ //
+ PyObjectHandle newArgs = Py_BuildValue(STRCAST("((), O, O, O, O)"), response, ex, sent, ctx);
+
+ return beginBuiltin(reinterpret_cast<PyObject*>(self), "ice_id", newArgs.get());
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyEndIceId(ProxyObject* self, PyObject* args)
+{
+ return endBuiltin(reinterpret_cast<PyObject*>(self), "ice_id", args);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetIdentity(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::Identity id;
+ try
+ {
+ id = (*self->proxy)->ice_getIdentity();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createIdentity(id);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIdentity(ProxyObject* self, PyObject* args)
+{
+ PyObject* identityType = lookupType("Ice.Identity");
+ assert(identityType);
+ PyObject* id;
+ if(!PyArg_ParseTuple(args, STRCAST("O!"), identityType, &id))
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::Identity ident;
+ if(!getIdentity(id, ident))
+ {
+ return 0;
+ }
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_identity(ident);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetContext(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::Context ctx;
+ try
+ {
+ ctx = (*self->proxy)->ice_getContext();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ PyObjectHandle result = PyDict_New();
+ if(result.get() && contextToDictionary(ctx, result.get()))
+ {
+ return result.release();
+ }
+ return 0;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceContext(ProxyObject* self, PyObject* args)
+{
+ PyObject* dict;
+ if(!PyArg_ParseTuple(args, STRCAST("O!"), &PyDict_Type, &dict))
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::Context ctx;
+ if(!dictionaryToContext(dict, ctx))
+ {
+ return 0;
+ }
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_context(ctx);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetFacet(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ string facet;
+ try
+ {
+ facet = (*self->proxy)->ice_getFacet();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createString(facet);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceFacet(ProxyObject* self, PyObject* args)
+{
+ PyObject* facetObj;
+ if(!PyArg_ParseTuple(args, STRCAST("O"), &facetObj))
+ {
+ return 0;
+ }
+
+ string facet;
+ if(!getStringArg(facetObj, "facet", facet))
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_facet(facet);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetAdapterId(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ string id;
+ try
+ {
+ id = (*self->proxy)->ice_getAdapterId();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createString(id);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceAdapterId(ProxyObject* self, PyObject* args)
+{
+ PyObject* idObj;
+ if(!PyArg_ParseTuple(args, STRCAST("O"), &idObj))
+ {
+ return 0;
+ }
+
+ string id;
+ if(!getStringArg(idObj, "id", id))
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_adapterId(id);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetEndpoints(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::EndpointSeq endpoints;
+ try
+ {
+ endpoints = (*self->proxy)->ice_getEndpoints();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ int count = static_cast<int>(endpoints.size());
+ PyObjectHandle result = PyTuple_New(count);
+ int i = 0;
+ for(Ice::EndpointSeq::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p, ++i)
+ {
+ PyObjectHandle endp = createEndpoint(*p);
+ if(!endp.get())
+ {
+ return 0;
+ }
+ PyTuple_SET_ITEM(result.get(), i, endp.release()); // PyTuple_SET_ITEM steals a reference.
+ }
+
+ return result.release();
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceEndpoints(ProxyObject* self, PyObject* args)
+{
+ PyObject* endpoints;
+ if(!PyArg_ParseTuple(args, STRCAST("O"), &endpoints))
+ {
+ return 0;
+ }
+
+ if(!PyTuple_Check(endpoints) && !PyList_Check(endpoints))
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("argument must be a tuple or list"));
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::EndpointSeq seq;
+ Py_ssize_t sz = PySequence_Fast_GET_SIZE(endpoints);
+ for(Py_ssize_t i = 0; i < sz; ++i)
+ {
+ PyObject* p = PySequence_Fast_GET_ITEM(endpoints, i);
+ PyTypeObject* type = &EndpointType; // Necessary to prevent GCC's strict-alias warnings.
+ if(!PyObject_IsInstance(p, reinterpret_cast<PyObject*>(type)))
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("expected element of type Ice.Endpoint"));
+ return 0;
+ }
+ Ice::EndpointPtr endp = getEndpoint(p);
+ if(!endp)
+ {
+ return 0;
+ }
+ seq.push_back(endp);
+ }
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_endpoints(seq);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetLocatorCacheTimeout(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ try
+ {
+ Ice::Int timeout = (*self->proxy)->ice_getLocatorCacheTimeout();
+ return PyLong_FromLong(timeout);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetInvocationTimeout(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ try
+ {
+ Ice::Int timeout = (*self->proxy)->ice_getInvocationTimeout();
+ return PyLong_FromLong(timeout);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetConnectionId(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ try
+ {
+ string connectionId = (*self->proxy)->ice_getConnectionId();
+ return createString(connectionId);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceLocatorCacheTimeout(ProxyObject* self, PyObject* args)
+{
+ int timeout;
+ if(!PyArg_ParseTuple(args, STRCAST("i"), &timeout))
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_locatorCacheTimeout(timeout);
+ }
+ catch(const IceUtil::IllegalArgumentException& ex)
+ {
+ PyErr_Format(PyExc_RuntimeError, "%s", STRCAST(ex.reason().c_str()));
+ return 0;
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceInvocationTimeout(ProxyObject* self, PyObject* args)
+{
+ int timeout;
+ if(!PyArg_ParseTuple(args, STRCAST("i"), &timeout))
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_invocationTimeout(timeout);
+ }
+ catch(const IceUtil::IllegalArgumentException& ex)
+ {
+ PyErr_Format(PyExc_RuntimeError, "%s", STRCAST(ex.reason().c_str()));
+ return 0;
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIsConnectionCached(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ PyObject* b;
+ try
+ {
+ b = (*self->proxy)->ice_isConnectionCached() ? getTrue() : getFalse();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(b);
+ return b;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceConnectionCached(ProxyObject* self, PyObject* args)
+{
+ PyObject* flag;
+ if(!PyArg_ParseTuple(args, STRCAST("O"), &flag))
+ {
+ return 0;
+ }
+
+ int n = PyObject_IsTrue(flag);
+ if(n < 0)
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_connectionCached(n == 1);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetEndpointSelection(ProxyObject* self)
+{
+ PyObject* cls = lookupType("Ice.EndpointSelectionType");
+ assert(cls);
+
+ PyObjectHandle rnd = PyObject_GetAttrString(cls, STRCAST("Random"));
+ PyObjectHandle ord = PyObject_GetAttrString(cls, STRCAST("Ordered"));
+ assert(rnd.get());
+ assert(ord.get());
+
+ assert(self->proxy);
+
+ PyObject* type;
+ try
+ {
+ Ice::EndpointSelectionType val = (*self->proxy)->ice_getEndpointSelection();
+ if(val == Ice::Random)
+ {
+ type = rnd.get();
+ }
+ else
+ {
+ type = ord.get();
+ }
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(type);
+ return type;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceEndpointSelection(ProxyObject* self, PyObject* args)
+{
+ PyObject* cls = lookupType("Ice.EndpointSelectionType");
+ assert(cls);
+ PyObject* type;
+ if(!PyArg_ParseTuple(args, STRCAST("O!"), cls, &type))
+ {
+ return 0;
+ }
+
+ Ice::EndpointSelectionType val;
+ PyObjectHandle rnd = PyObject_GetAttrString(cls, STRCAST("Random"));
+ PyObjectHandle ord = PyObject_GetAttrString(cls, STRCAST("Ordered"));
+ assert(rnd.get());
+ assert(ord.get());
+ if(rnd.get() == type)
+ {
+ val = Ice::Random;
+ }
+ else if(ord.get() == type)
+ {
+ val = Ice::Ordered;
+ }
+ else
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("ice_endpointSelection requires Random or Ordered"));
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_endpointSelection(val);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIsSecure(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ PyObject* b;
+ try
+ {
+ b = (*self->proxy)->ice_isSecure() ? getTrue() : getFalse();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(b);
+ return b;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceSecure(ProxyObject* self, PyObject* args)
+{
+ PyObject* flag;
+ if(!PyArg_ParseTuple(args, STRCAST("O"), &flag))
+ {
+ return 0;
+ }
+
+ int n = PyObject_IsTrue(flag);
+ if(n < 0)
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_secure(n == 1);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetEncodingVersion(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ PyObject* version;
+ try
+ {
+ version = IcePy::createEncodingVersion((*self->proxy)->ice_getEncodingVersion());
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(version);
+ return version;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceEncodingVersion(ProxyObject* self, PyObject* args)
+{
+ Ice::EncodingVersion val;
+ if(!getEncodingVersion(args, val))
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("ice_encodingVersion requires an encoding version"));
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_encodingVersion(val);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIsPreferSecure(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ PyObject* b;
+ try
+ {
+ b = (*self->proxy)->ice_isPreferSecure() ? getTrue() : getFalse();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(b);
+ return b;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIcePreferSecure(ProxyObject* self, PyObject* args)
+{
+ PyObject* flag;
+ if(!PyArg_ParseTuple(args, STRCAST("O"), &flag))
+ {
+ return 0;
+ }
+
+ int n = PyObject_IsTrue(flag);
+ if(n < 0)
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_preferSecure(n == 1);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetRouter(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::RouterPrx router;
+ try
+ {
+ router = (*self->proxy)->ice_getRouter();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ if(!router)
+ {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+ PyObject* routerProxyType = lookupType("Ice.RouterPrx");
+ assert(routerProxyType);
+ return createProxy(router, *self->communicator, routerProxyType);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceRouter(ProxyObject* self, PyObject* args)
+{
+ PyObject* p;
+ if(!PyArg_ParseTuple(args, STRCAST("O"), &p))
+ {
+ return 0;
+ }
+
+ Ice::ObjectPrx proxy;
+ if(!getProxyArg(p, "ice_router", "rtr", proxy, "Ice.RouterPrx"))
+ {
+ return 0;
+ }
+
+ Ice::RouterPrx router = Ice::RouterPrx::uncheckedCast(proxy);
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_router(router);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetLocator(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::LocatorPrx locator;
+ try
+ {
+ locator = (*self->proxy)->ice_getLocator();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ if(!locator)
+ {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+ PyObject* locatorProxyType = lookupType("Ice.LocatorPrx");
+ assert(locatorProxyType);
+ return createProxy(locator, *self->communicator, locatorProxyType);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceLocator(ProxyObject* self, PyObject* args)
+{
+ PyObject* p;
+ if(!PyArg_ParseTuple(args, STRCAST("O"), &p))
+ {
+ return 0;
+ }
+
+ Ice::ObjectPrx proxy;
+ if(!getProxyArg(p, "ice_locator", "loc", proxy, "Ice.LocatorPrx"))
+ {
+ return 0;
+ }
+
+ Ice::LocatorPrx locator = Ice::LocatorPrx::uncheckedCast(proxy);
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_locator(locator);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceTwoway(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_twoway();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIsTwoway(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ PyObject* b;
+ try
+ {
+ b = (*self->proxy)->ice_isTwoway() ? getTrue() : getFalse();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(b);
+ return b;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceOneway(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_oneway();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIsOneway(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ PyObject* b;
+ try
+ {
+ b = (*self->proxy)->ice_isOneway() ? getTrue() : getFalse();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(b);
+ return b;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceBatchOneway(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_batchOneway();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIsBatchOneway(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ PyObject* b;
+ try
+ {
+ b = (*self->proxy)->ice_isBatchOneway() ? getTrue() : getFalse();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(b);
+ return b;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceDatagram(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_datagram();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIsDatagram(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ PyObject* b;
+ try
+ {
+ b = (*self->proxy)->ice_isDatagram() ? getTrue() : getFalse();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(b);
+ return b;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceBatchDatagram(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_batchDatagram();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIsBatchDatagram(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ PyObject* b;
+ try
+ {
+ b = (*self->proxy)->ice_isBatchDatagram() ? getTrue() : getFalse();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(b);
+ return b;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceCompress(ProxyObject* self, PyObject* args)
+{
+ PyObject* flag;
+ if(!PyArg_ParseTuple(args, STRCAST("O"), &flag))
+ {
+ return 0;
+ }
+
+ int n = PyObject_IsTrue(flag);
+ if(n < 0)
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_compress(n == 1);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceTimeout(ProxyObject* self, PyObject* args)
+{
+ int timeout;
+ if(!PyArg_ParseTuple(args, STRCAST("i"), &timeout))
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_timeout(timeout);
+ }
+ catch(const IceUtil::IllegalArgumentException& ex)
+ {
+ PyErr_Format(PyExc_RuntimeError, "%s", STRCAST(ex.reason().c_str()));
+ return 0;
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceIsCollocationOptimized(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ PyObject* b;
+ try
+ {
+ b = (*self->proxy)->ice_isCollocationOptimized() ? getTrue() : getFalse();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(b);
+ return b;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceCollocationOptimized(ProxyObject* self, PyObject* args)
+{
+ PyObject* flag;
+ if(!PyArg_ParseTuple(args, STRCAST("O"), &flag))
+ {
+ return 0;
+ }
+
+ int n = PyObject_IsTrue(flag);
+ if(n < 0)
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_collocationOptimized(n == 1);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceConnectionId(ProxyObject* self, PyObject* args)
+{
+ PyObject* idObj;
+ if(!PyArg_ParseTuple(args, STRCAST("O"), &idObj))
+ {
+ return 0;
+ }
+
+ string id;
+ if(!getStringArg(idObj, "id", id))
+ {
+ return 0;
+ }
+
+ assert(self->proxy);
+
+ Ice::ObjectPrx newProxy;
+ try
+ {
+ newProxy = (*self->proxy)->ice_connectionId(id);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ return createProxy(newProxy, *self->communicator, reinterpret_cast<PyObject*>(Py_TYPE(self)));
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetConnection(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::ConnectionPtr con;
+ try
+ {
+ con = (*self->proxy)->ice_getConnection();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ if(con)
+ {
+ return createConnection(con, *self->communicator);
+ }
+ else
+ {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyBeginIceGetConnection(ProxyObject* self, PyObject* args, PyObject* kwds)
+{
+ assert(self->proxy);
+
+ static char* argNames[] =
+ {
+ const_cast<char*>("_response"),
+ const_cast<char*>("_ex"),
+ 0
+ };
+
+ PyObject* response = Py_None;
+ PyObject* ex = Py_None;
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, STRCAST("|OO"), argNames, &response, &ex))
+ {
+ return 0;
+ }
+
+ if(response == Py_None)
+ {
+ response = 0;
+ }
+ if(ex == Py_None)
+ {
+ ex = 0;
+ }
+
+ if(!response && ex)
+ {
+ PyErr_Format(PyExc_RuntimeError,
+ STRCAST("response callback must also be provided when exception callback is used"));
+ return 0;
+ }
+
+ Ice::Callback_Object_ice_getConnectionPtr cb;
+ if(response || ex)
+ {
+ GetConnectionCallbackPtr d = new GetConnectionCallback(*self->communicator, response, ex, "ice_getConnection");
+ cb = Ice::newCallback_Object_ice_getConnection(d, &GetConnectionCallback::response,
+ &GetConnectionCallback::exception);
+ }
+
+ Ice::AsyncResultPtr result;
+ try
+ {
+ AllowThreads allowThreads; // Release Python's global interpreter lock during remote invocations.
+
+ if(cb)
+ {
+ result = (*self->proxy)->begin_ice_getConnection(cb);
+ }
+ else
+ {
+ result = (*self->proxy)->begin_ice_getConnection();
+ }
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ PyObjectHandle communicator = getCommunicatorWrapper(*self->communicator);
+ return createAsyncResult(result, reinterpret_cast<PyObject*>(self), 0, communicator.get());
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyEndIceGetConnection(ProxyObject* self, PyObject* args)
+{
+ assert(self->proxy);
+
+ PyObject* result;
+ if(!PyArg_ParseTuple(args, STRCAST("O!"), &AsyncResultType, &result))
+ {
+ return 0;
+ }
+
+ Ice::AsyncResultPtr r = getAsyncResult(result);
+ Ice::ConnectionPtr con;
+ try
+ {
+ AllowThreads allowThreads; // Release Python's global interpreter lock during blocking invocations.
+ con = (*self->proxy)->end_ice_getConnection(r);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ if(con)
+ {
+ return createConnection(con, *self->communicator);
+ }
+ else
+ {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceGetCachedConnection(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ Ice::ConnectionPtr con;
+ try
+ {
+ con = (*self->proxy)->ice_getCachedConnection();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ if(con)
+ {
+ return createConnection(con, *self->communicator);
+ }
+ else
+ {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceFlushBatchRequests(ProxyObject* self)
+{
+ assert(self->proxy);
+
+ try
+ {
+ AllowThreads allowThreads; // Release Python's global interpreter lock during remote invocations.
+ (*self->proxy)->ice_flushBatchRequests();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyBeginIceFlushBatchRequests(ProxyObject* self, PyObject* args, PyObject* kwds)
+{
+ assert(self->proxy);
+
+ static char* argNames[] =
+ {
+ const_cast<char*>("_ex"),
+ const_cast<char*>("_sent"),
+ 0
+ };
+ PyObject* ex = Py_None;
+ PyObject* sent = Py_None;
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, STRCAST("|OO"), argNames, &ex, &sent))
+ {
+ return 0;
+ }
+
+ if(ex == Py_None)
+ {
+ ex = 0;
+ }
+ if(sent == Py_None)
+ {
+ sent = 0;
+ }
+
+ if(!ex && sent)
+ {
+ PyErr_Format(PyExc_RuntimeError,
+ STRCAST("exception callback must also be provided when sent callback is used"));
+ return 0;
+ }
+
+ Ice::Callback_Object_ice_flushBatchRequestsPtr cb;
+ if(ex || sent)
+ {
+ FlushCallbackPtr d = new FlushCallback(ex, sent, "ice_flushBatchRequests");
+ cb = Ice::newCallback_Object_ice_flushBatchRequests(d, &FlushCallback::exception, &FlushCallback::sent);
+ }
+
+ Ice::AsyncResultPtr result;
+ try
+ {
+ AllowThreads allowThreads; // Release Python's global interpreter lock during remote invocations.
+
+ if(cb)
+ {
+ result = (*self->proxy)->begin_ice_flushBatchRequests(cb);
+ }
+ else
+ {
+ result = (*self->proxy)->begin_ice_flushBatchRequests();
+ }
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ PyObjectHandle communicator = getCommunicatorWrapper(*self->communicator);
+ return createAsyncResult(result, reinterpret_cast<PyObject*>(self), 0, communicator.get());
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyEndIceFlushBatchRequests(ProxyObject* self, PyObject* args)
+{
+ assert(self->proxy);
+
+ PyObject* result;
+ if(!PyArg_ParseTuple(args, STRCAST("O!"), &AsyncResultType, &result))
+ {
+ return 0;
+ }
+
+ Ice::AsyncResultPtr r = getAsyncResult(result);
+ try
+ {
+ AllowThreads allowThreads; // Release Python's global interpreter lock during blocking invocations.
+ (*self->proxy)->end_ice_flushBatchRequests(r);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+namespace IcePy
+{
+class AMI_Object_ice_flushBatchRequestsI : public IceUtil::Shared
+{
+public:
+
+ AMI_Object_ice_flushBatchRequestsI(PyObject*);
+ ~AMI_Object_ice_flushBatchRequestsI();
+
+ void exception(const Ice::Exception&);
+ void sent(bool);
+
+protected:
+
+ PyObject* _callback;
+};
+typedef IceUtil::Handle<AMI_Object_ice_flushBatchRequestsI> AMI_Object_ice_flushBatchRequestsIPtr;
+
+AMI_Object_ice_flushBatchRequestsI::AMI_Object_ice_flushBatchRequestsI(PyObject* callback) :
+ _callback(callback)
+{
+ Py_INCREF(callback);
+}
+
+AMI_Object_ice_flushBatchRequestsI::~AMI_Object_ice_flushBatchRequestsI()
+{
+ AdoptThread adoptThread; // Ensure the current thread is able to call into Python.
+
+ Py_DECREF(_callback);
+}
+
+void
+AMI_Object_ice_flushBatchRequestsI::exception(const Ice::Exception& ex)
+{
+ AdoptThread adoptThread; // Ensure the current thread is able to call into Python.
+
+ const string methodName = "ice_exception";
+ if(!PyObject_HasAttrString(_callback, STRCAST(methodName.c_str())))
+ {
+ ostringstream ostr;
+ ostr << "AMI callback object for ice_flushBatchRequests does not define " << methodName << "()";
+ string str = ostr.str();
+ PyErr_Warn(PyExc_RuntimeWarning, const_cast<char*>(str.c_str()));
+ }
+ else
+ {
+ PyObjectHandle method = PyObject_GetAttrString(_callback, STRCAST(methodName.c_str()));
+ assert(method.get());
+ PyObjectHandle exh = convertException(ex);
+ assert(exh.get());
+
+ PyObjectHandle args = Py_BuildValue(STRCAST("(O)"), exh.get());
+ PyObjectHandle tmp = PyObject_Call(method.get(), args.get(), 0);
+ if(PyErr_Occurred())
+ {
+ PyErr_Print();
+ }
+ }
+}
+
+void
+AMI_Object_ice_flushBatchRequestsI::sent(bool)
+{
+ AdoptThread adoptThread; // Ensure the current thread is able to call into Python.
+
+ const string methodName = "ice_sent";
+ if(PyObject_HasAttrString(_callback, STRCAST(methodName.c_str())))
+ {
+ PyObjectHandle method = PyObject_GetAttrString(_callback, STRCAST(methodName.c_str()));
+ assert(method.get());
+ PyObjectHandle args = PyTuple_New(0);
+ PyObjectHandle tmp = PyObject_Call(method.get(), args.get(), 0);
+ if(PyErr_Occurred())
+ {
+ PyErr_Print();
+ }
+ }
+}
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceInvoke(ProxyObject* self, PyObject* args)
+{
+ return iceInvoke(reinterpret_cast<PyObject*>(self), args);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyBeginIceInvoke(ProxyObject* self, PyObject* args, PyObject* kwds)
+{
+ return beginIceInvoke(reinterpret_cast<PyObject*>(self), args, kwds);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyEndIceInvoke(ProxyObject* self, PyObject* args)
+{
+ return endIceInvoke(reinterpret_cast<PyObject*>(self), args);
+}
+
+static PyObject*
+checkedCastImpl(ProxyObject* p, const string& id, PyObject* facet, PyObject* ctx, PyObject* type)
+{
+ Ice::ObjectPrx target;
+ if(!facet || facet == Py_None)
+ {
+ target = *p->proxy;
+ }
+ else
+ {
+ string facetStr = getString(facet);
+ target = (*p->proxy)->ice_facet(facetStr);
+ }
+
+ bool b = false;
+ try
+ {
+ AllowThreads allowThreads; // Release Python's global interpreter lock during remote invocations.
+ if(!ctx || ctx == Py_None)
+ {
+ b = target->ice_isA(id);
+ }
+ else
+ {
+ Ice::Context c;
+ if(!dictionaryToContext(ctx, c))
+ {
+ return 0;
+ }
+ b = target->ice_isA(id, c);
+ }
+ }
+ catch(const Ice::FacetNotExistException&)
+ {
+ // Ignore.
+ }
+ catch(const Ice::Exception& ex)
+ {
+ setPythonException(ex);
+ return 0;
+ }
+
+ if(b)
+ {
+ return createProxy(target, *p->communicator, type);
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceCheckedCast(PyObject* type, PyObject* args)
+{
+ //
+ // ice_checkedCast is called from generated code, therefore we always expect
+ // to receive four arguments.
+ //
+ PyObject* obj;
+ char* id;
+ PyObject* facetOrCtx = 0;
+ PyObject* ctx = 0;
+ if(!PyArg_ParseTuple(args, STRCAST("OsOO"), &obj, &id, &facetOrCtx, &ctx))
+ {
+ return 0;
+ }
+
+ if(obj == Py_None)
+ {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+ if(!checkProxy(obj))
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("ice_checkedCast requires a proxy argument"));
+ return 0;
+ }
+
+ PyObject* facet = 0;
+
+ if(checkString(facetOrCtx))
+ {
+ facet = facetOrCtx;
+ }
+ else if(PyDict_Check(facetOrCtx))
+ {
+ if(ctx != Py_None)
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("facet argument to checkedCast must be a string"));
+ return 0;
+ }
+ ctx = facetOrCtx;
+ }
+ else if(facetOrCtx != Py_None)
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("second argument to checkedCast must be a facet or context"));
+ return 0;
+ }
+
+ if(ctx != Py_None && !PyDict_Check(ctx))
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("context argument to checkedCast must be a dictionary"));
+ return 0;
+ }
+
+ return checkedCastImpl(reinterpret_cast<ProxyObject*>(obj), id, facet, ctx, type);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceUncheckedCast(PyObject* type, PyObject* args)
+{
+ //
+ // ice_uncheckedCast is called from generated code, therefore we always expect
+ // to receive two arguments.
+ //
+ PyObject* obj;
+ char* facet = 0;
+ if(!PyArg_ParseTuple(args, STRCAST("Oz"), &obj, &facet))
+ {
+ return 0;
+ }
+
+ if(obj == Py_None)
+ {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+ if(!checkProxy(obj))
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("ice_uncheckedCast requires a proxy argument"));
+ return 0;
+ }
+
+ ProxyObject* p = reinterpret_cast<ProxyObject*>(obj);
+
+ if(facet)
+ {
+ return createProxy((*p->proxy)->ice_facet(facet), *p->communicator, type);
+ }
+ else
+ {
+ return createProxy(*p->proxy, *p->communicator, type);
+ }
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyCheckedCast(PyObject* /*self*/, PyObject* args)
+{
+ PyObject* obj;
+ PyObject* arg1 = 0;
+ PyObject* arg2 = 0;
+ if(!PyArg_ParseTuple(args, STRCAST("O|OO"), &obj, &arg1, &arg2))
+ {
+ return 0;
+ }
+
+ if(obj == Py_None)
+ {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+ if(!checkProxy(obj))
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("checkedCast requires a proxy argument"));
+ return 0;
+ }
+
+ PyObject* facet = 0;
+ PyObject* ctx = 0;
+
+ if(arg1 != 0 && arg2 != 0)
+ {
+ if(arg1 == Py_None)
+ {
+ arg1 = 0;
+ }
+
+ if(arg2 == Py_None)
+ {
+ arg2 = 0;
+ }
+
+ if(arg1 != 0)
+ {
+ if(!checkString(arg1))
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("facet argument to checkedCast must be a string"));
+ return 0;
+ }
+ facet = arg1;
+ }
+
+ if(arg2 != 0 && !PyDict_Check(arg2))
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("context argument to checkedCast must be a dictionary"));
+ return 0;
+ }
+ ctx = arg2;
+ }
+ else if(arg1 != 0 && arg1 != Py_None)
+ {
+ if(checkString(arg1))
+ {
+ facet = arg1;
+ }
+ else if(PyDict_Check(arg1))
+ {
+ ctx = arg1;
+ }
+ else
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("second argument to checkedCast must be a facet or context"));
+ return 0;
+ }
+ }
+
+ return checkedCastImpl(reinterpret_cast<ProxyObject*>(obj), "::Ice::Object", facet, ctx, 0);
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyUncheckedCast(PyObject* /*self*/, PyObject* args)
+{
+ PyObject* obj;
+ PyObject* facetObj = 0;
+ if(!PyArg_ParseTuple(args, STRCAST("O|O"), &obj, &facetObj))
+ {
+ return 0;
+ }
+
+ if(obj == Py_None)
+ {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+ string facet;
+ if(facetObj)
+ {
+ if(!getStringArg(facetObj, "facet", facet))
+ {
+ return 0;
+ }
+ }
+
+ if(!checkProxy(obj))
+ {
+ PyErr_Format(PyExc_ValueError, STRCAST("uncheckedCast requires a proxy argument"));
+ return 0;
+ }
+
+ ProxyObject* p = reinterpret_cast<ProxyObject*>(obj);
+
+ if(facetObj)
+ {
+ return createProxy((*p->proxy)->ice_facet(facet), *p->communicator);
+ }
+ else
+ {
+ return createProxy(*p->proxy, *p->communicator);
+ }
+}
+
+#ifdef WIN32
+extern "C"
+#endif
+static PyObject*
+proxyIceStaticId(PyObject* /*self*/)
+{
+ return createString(Ice::Object::ice_staticId());
+}
+
+static PyMethodDef ProxyMethods[] =
+{
+ { STRCAST("ice_getCommunicator"), reinterpret_cast<PyCFunction>(proxyIceGetCommunicator), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getCommunicator() -> Ice.Communicator")) },
+ { STRCAST("ice_toString"), reinterpret_cast<PyCFunction>(proxyRepr), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_toString() -> string")) },
+ { STRCAST("ice_isA"), reinterpret_cast<PyCFunction>(proxyIceIsA), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_isA(type, [ctx]) -> bool")) },
+ { STRCAST("begin_ice_isA"), reinterpret_cast<PyCFunction>(proxyBeginIceIsA), METH_VARARGS | METH_KEYWORDS,
+ PyDoc_STR(STRCAST("begin_ice_isA(type[, _response][, _ex][, _sent][, _ctx]) -> Ice.AsyncResult")) },
+ { STRCAST("end_ice_isA"), reinterpret_cast<PyCFunction>(proxyEndIceIsA), METH_VARARGS,
+ PyDoc_STR(STRCAST("end_ice_isA(Ice.AsyncResult) -> bool")) },
+ { STRCAST("ice_ping"), reinterpret_cast<PyCFunction>(proxyIcePing), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_ping([ctx]) -> None")) },
+ { STRCAST("begin_ice_ping"), reinterpret_cast<PyCFunction>(proxyBeginIcePing), METH_VARARGS | METH_KEYWORDS,
+ PyDoc_STR(STRCAST("begin_ice_ping([_response][, _ex][, _sent][, _ctx]) -> Ice.AsyncResult")) },
+ { STRCAST("end_ice_ping"), reinterpret_cast<PyCFunction>(proxyEndIcePing), METH_VARARGS,
+ PyDoc_STR(STRCAST("end_ice_ping(Ice.AsyncResult) -> None")) },
+ { STRCAST("ice_ids"), reinterpret_cast<PyCFunction>(proxyIceIds), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_ids([ctx]) -> list")) },
+ { STRCAST("begin_ice_ids"), reinterpret_cast<PyCFunction>(proxyBeginIceIds), METH_VARARGS | METH_KEYWORDS,
+ PyDoc_STR(STRCAST("begin_ice_ids([_response][, _ex][, _sent][, _ctx]) -> Ice.AsyncResult")) },
+ { STRCAST("end_ice_ids"), reinterpret_cast<PyCFunction>(proxyEndIceIds), METH_VARARGS,
+ PyDoc_STR(STRCAST("end_ice_ids(Ice.AsyncResult) -> list")) },
+ { STRCAST("ice_id"), reinterpret_cast<PyCFunction>(proxyIceId), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_id([ctx]) -> string")) },
+ { STRCAST("begin_ice_id"), reinterpret_cast<PyCFunction>(proxyBeginIceId), METH_VARARGS | METH_KEYWORDS,
+ PyDoc_STR(STRCAST("begin_ice_id([_response][, _ex][, _sent][, _ctx]) -> Ice.AsyncResult")) },
+ { STRCAST("end_ice_id"), reinterpret_cast<PyCFunction>(proxyEndIceId), METH_VARARGS,
+ PyDoc_STR(STRCAST("end_ice_id(Ice.AsyncResult) -> string")) },
+ { STRCAST("ice_getIdentity"), reinterpret_cast<PyCFunction>(proxyIceGetIdentity), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getIdentity() -> Ice.Identity")) },
+ { STRCAST("ice_identity"), reinterpret_cast<PyCFunction>(proxyIceIdentity), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_identity(id) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_getContext"), reinterpret_cast<PyCFunction>(proxyIceGetContext), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getContext() -> dict")) },
+ { STRCAST("ice_context"), reinterpret_cast<PyCFunction>(proxyIceContext), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_context(dict) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_getFacet"), reinterpret_cast<PyCFunction>(proxyIceGetFacet), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getFacet() -> string")) },
+ { STRCAST("ice_facet"), reinterpret_cast<PyCFunction>(proxyIceFacet), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_facet(string) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_getAdapterId"), reinterpret_cast<PyCFunction>(proxyIceGetAdapterId), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getAdapterId() -> string")) },
+ { STRCAST("ice_adapterId"), reinterpret_cast<PyCFunction>(proxyIceAdapterId), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_adapterId(string) -> proxy")) },
+ { STRCAST("ice_getEndpoints"), reinterpret_cast<PyCFunction>(proxyIceGetEndpoints), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getEndpoints() -> tuple")) },
+ { STRCAST("ice_endpoints"), reinterpret_cast<PyCFunction>(proxyIceEndpoints), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_endpoints(tuple) -> proxy")) },
+ { STRCAST("ice_getLocatorCacheTimeout"), reinterpret_cast<PyCFunction>(proxyIceGetLocatorCacheTimeout),
+ METH_NOARGS, PyDoc_STR(STRCAST("ice_getLocatorCacheTimeout() -> int")) },
+ { STRCAST("ice_getInvocationTimeout"), reinterpret_cast<PyCFunction>(proxyIceGetInvocationTimeout),
+ METH_NOARGS, PyDoc_STR(STRCAST("ice_getInvocationTimeout() -> int")) },
+ { STRCAST("ice_getConnectionId"), reinterpret_cast<PyCFunction>(proxyIceGetConnectionId),
+ METH_NOARGS, PyDoc_STR(STRCAST("ice_getConnectionId() -> string")) },
+ { STRCAST("ice_isCollocationOptimized"), reinterpret_cast<PyCFunction>(proxyIceIsCollocationOptimized), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_isCollocationOptimized() -> bool")) },
+ { STRCAST("ice_collocationOptimized"), reinterpret_cast<PyCFunction>(proxyIceCollocationOptimized), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_collocationOptimized(bool) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_locatorCacheTimeout"), reinterpret_cast<PyCFunction>(proxyIceLocatorCacheTimeout), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_locatorCacheTimeout(int) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_invocationTimeout"), reinterpret_cast<PyCFunction>(proxyIceInvocationTimeout), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_invocationTimeout(int) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_isConnectionCached"), reinterpret_cast<PyCFunction>(proxyIceIsConnectionCached), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_isConnectionCached() -> bool")) },
+ { STRCAST("ice_connectionCached"), reinterpret_cast<PyCFunction>(proxyIceConnectionCached), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_connectionCached(bool) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_getEndpointSelection"), reinterpret_cast<PyCFunction>(proxyIceGetEndpointSelection), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getEndpointSelection() -> bool")) },
+ { STRCAST("ice_endpointSelection"), reinterpret_cast<PyCFunction>(proxyIceEndpointSelection), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_endpointSelection(Ice.EndpointSelectionType) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_isSecure"), reinterpret_cast<PyCFunction>(proxyIceIsSecure), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_isSecure() -> bool")) },
+ { STRCAST("ice_secure"), reinterpret_cast<PyCFunction>(proxyIceSecure), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_secure(bool) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_getEncodingVersion"), reinterpret_cast<PyCFunction>(proxyIceGetEncodingVersion), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getEncodingVersion() -> Ice.EncodingVersion")) },
+ { STRCAST("ice_encodingVersion"), reinterpret_cast<PyCFunction>(proxyIceEncodingVersion), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_endpointSelection(Ice.EncodingVersion) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_isPreferSecure"), reinterpret_cast<PyCFunction>(proxyIceIsPreferSecure), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_isPreferSecure() -> bool")) },
+ { STRCAST("ice_preferSecure"), reinterpret_cast<PyCFunction>(proxyIcePreferSecure), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_preferSecure(bool) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_getRouter"), reinterpret_cast<PyCFunction>(proxyIceGetRouter), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getRouter() -> Ice.RouterPrx")) },
+ { STRCAST("ice_router"), reinterpret_cast<PyCFunction>(proxyIceRouter), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_router(Ice.RouterPrx) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_getLocator"), reinterpret_cast<PyCFunction>(proxyIceGetLocator), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getLocator() -> Ice.LocatorPrx")) },
+ { STRCAST("ice_locator"), reinterpret_cast<PyCFunction>(proxyIceLocator), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_locator(Ice.LocatorPrx) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_twoway"), reinterpret_cast<PyCFunction>(proxyIceTwoway), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_twoway() -> Ice.ObjectPrx")) },
+ { STRCAST("ice_isTwoway"), reinterpret_cast<PyCFunction>(proxyIceIsTwoway), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_isTwoway() -> bool")) },
+ { STRCAST("ice_oneway"), reinterpret_cast<PyCFunction>(proxyIceOneway), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_oneway() -> Ice.ObjectPrx")) },
+ { STRCAST("ice_isOneway"), reinterpret_cast<PyCFunction>(proxyIceIsOneway), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_isOneway() -> bool")) },
+ { STRCAST("ice_batchOneway"), reinterpret_cast<PyCFunction>(proxyIceBatchOneway), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_batchOneway() -> Ice.ObjectPrx")) },
+ { STRCAST("ice_isBatchOneway"), reinterpret_cast<PyCFunction>(proxyIceIsBatchOneway), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_isBatchOneway() -> bool")) },
+ { STRCAST("ice_datagram"), reinterpret_cast<PyCFunction>(proxyIceDatagram), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_datagram() -> Ice.ObjectPrx")) },
+ { STRCAST("ice_isDatagram"), reinterpret_cast<PyCFunction>(proxyIceIsDatagram), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_isDatagram() -> bool")) },
+ { STRCAST("ice_batchDatagram"), reinterpret_cast<PyCFunction>(proxyIceBatchDatagram), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_batchDatagram() -> Ice.ObjectPrx")) },
+ { STRCAST("ice_isBatchDatagram"), reinterpret_cast<PyCFunction>(proxyIceIsBatchDatagram), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_isBatchDatagram() -> bool")) },
+ { STRCAST("ice_compress"), reinterpret_cast<PyCFunction>(proxyIceCompress), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_compress(bool) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_timeout"), reinterpret_cast<PyCFunction>(proxyIceTimeout), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_timeout(int) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_connectionId"), reinterpret_cast<PyCFunction>(proxyIceConnectionId), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_connectionId(string) -> Ice.ObjectPrx")) },
+ { STRCAST("ice_getConnection"), reinterpret_cast<PyCFunction>(proxyIceGetConnection), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getConnection() -> Ice.Connection")) },
+ { STRCAST("begin_ice_getConnection"), reinterpret_cast<PyCFunction>(proxyBeginIceGetConnection),
+ METH_VARARGS | METH_KEYWORDS, PyDoc_STR(STRCAST("begin_ice_getConnection([_response][, _ex]) -> Ice.AsyncResult")) },
+ { STRCAST("end_ice_getConnection"), reinterpret_cast<PyCFunction>(proxyEndIceGetConnection), METH_VARARGS,
+ PyDoc_STR(STRCAST("end_ice_getConnection(Ice.AsyncResult) -> Ice.Connection")) },
+ { STRCAST("ice_getCachedConnection"), reinterpret_cast<PyCFunction>(proxyIceGetCachedConnection), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_getCachedConnection() -> Ice.Connection")) },
+ { STRCAST("ice_flushBatchRequests"), reinterpret_cast<PyCFunction>(proxyIceFlushBatchRequests), METH_NOARGS,
+ PyDoc_STR(STRCAST("ice_flushBatchRequests() -> void")) },
+ { STRCAST("begin_ice_flushBatchRequests"), reinterpret_cast<PyCFunction>(proxyBeginIceFlushBatchRequests),
+ METH_VARARGS | METH_KEYWORDS, PyDoc_STR(STRCAST("begin_ice_flushBatchRequests([_ex][, _sent]) -> Ice.AsyncResult")) },
+ { STRCAST("end_ice_flushBatchRequests"), reinterpret_cast<PyCFunction>(proxyEndIceFlushBatchRequests), METH_VARARGS,
+ PyDoc_STR(STRCAST("end_ice_flushBatchRequests(Ice.AsyncResult) -> void")) },
+ { STRCAST("ice_invoke"), reinterpret_cast<PyCFunction>(proxyIceInvoke), METH_VARARGS,
+ PyDoc_STR(STRCAST("ice_invoke(operation, mode, inParams) -> bool, outParams")) },
+ { STRCAST("begin_ice_invoke"), reinterpret_cast<PyCFunction>(proxyBeginIceInvoke), METH_VARARGS | METH_KEYWORDS,
+ PyDoc_STR(STRCAST("begin_ice_invoke(op, mode, inParams[, _response][, _ex][, _sent][, _ctx]) -> Ice.AsyncResult")) },
+ { STRCAST("end_ice_invoke"), reinterpret_cast<PyCFunction>(proxyEndIceInvoke), METH_VARARGS,
+ PyDoc_STR(STRCAST("end_ice_invoke(Ice.AsyncResult) -> (bool, results)")) },
+ { STRCAST("ice_checkedCast"), reinterpret_cast<PyCFunction>(proxyIceCheckedCast), METH_VARARGS | METH_CLASS,
+ PyDoc_STR(STRCAST("ice_checkedCast(proxy, id[, facetOrCtx[, ctx]]) -> proxy")) },
+ { STRCAST("ice_uncheckedCast"), reinterpret_cast<PyCFunction>(proxyIceUncheckedCast), METH_VARARGS | METH_CLASS,
+ PyDoc_STR(STRCAST("ice_uncheckedCast(proxy) -> proxy")) },
+ { STRCAST("checkedCast"), reinterpret_cast<PyCFunction>(proxyCheckedCast), METH_VARARGS | METH_STATIC,
+ PyDoc_STR(STRCAST("checkedCast(proxy) -> proxy")) },
+ { STRCAST("uncheckedCast"), reinterpret_cast<PyCFunction>(proxyUncheckedCast), METH_VARARGS | METH_STATIC,
+ PyDoc_STR(STRCAST("uncheckedCast(proxy) -> proxy")) },
+ { STRCAST("ice_staticId"), reinterpret_cast<PyCFunction>(proxyIceStaticId), METH_NOARGS | METH_STATIC,
+ PyDoc_STR(STRCAST("ice_staticId() -> string")) },
+ { 0, 0 } /* sentinel */
+};
+
+namespace IcePy
+{
+
+PyTypeObject ProxyType =
+{
+ /* The ob_type field must be initialized in the module init function
+ * to be portable to Windows without using C++. */
+ PyVarObject_HEAD_INIT(0, 0)
+ STRCAST("IcePy.ObjectPrx"), /* tp_name */
+ sizeof(ProxyObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ /* methods */
+ reinterpret_cast<destructor>(proxyDealloc), /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ reinterpret_cast<reprfunc>(proxyRepr), /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ reinterpret_cast<hashfunc>(proxyHash), /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+#if PY_VERSION_HEX >= 0x03000000
+ Py_TPFLAGS_BASETYPE, /* tp_flags */
+#else
+ Py_TPFLAGS_BASETYPE |
+ Py_TPFLAGS_HAVE_RICHCOMPARE |
+ Py_TPFLAGS_HAVE_CLASS, /* tp_flags */
+#endif
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ reinterpret_cast<richcmpfunc>(proxyCompare), /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ ProxyMethods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ reinterpret_cast<newfunc>(proxyNew), /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+};
+
+}
+
+bool
+IcePy::initProxy(PyObject* module)
+{
+ if(PyType_Ready(&ProxyType) < 0)
+ {
+ return false;
+ }
+ PyTypeObject* proxyType = &ProxyType; // Necessary to prevent GCC's strict-alias warnings.
+ if(PyModule_AddObject(module, STRCAST("ObjectPrx"), reinterpret_cast<PyObject*>(proxyType)) < 0)
+ {
+ return false;
+ }
+
+ return true;
+}
+
+PyObject*
+IcePy::createProxy(const Ice::ObjectPrx& proxy, const Ice::CommunicatorPtr& communicator, PyObject* type)
+{
+ assert(proxy);
+
+ if(!type)
+ {
+ PyTypeObject* proxyType = &ProxyType; // Necessary to prevent GCC's strict-alias warnings.
+ type = reinterpret_cast<PyObject*>(proxyType);
+ }
+ return reinterpret_cast<PyObject*>(allocateProxy(proxy, communicator, type));
+}
+
+bool
+IcePy::checkProxy(PyObject* p)
+{
+ PyTypeObject* type = &ProxyType; // Necessary to prevent GCC's strict-alias warnings.
+ return PyObject_IsInstance(p, reinterpret_cast<PyObject*>(type)) == 1;
+}
+
+Ice::ObjectPrx
+IcePy::getProxy(PyObject* p)
+{
+ assert(checkProxy(p));
+ ProxyObject* obj = reinterpret_cast<ProxyObject*>(p);
+ return *obj->proxy;
+}
+
+bool
+IcePy::getProxyArg(PyObject* p, const string& func, const string& arg, Ice::ObjectPrx& proxy, const string& type)
+{
+ bool result = true;
+
+ if(checkProxy(p))
+ {
+ if(!type.empty())
+ {
+ PyObject* proxyType = lookupType(type);
+ assert(proxyType);
+ if(!PyObject_IsInstance(p, proxyType))
+ {
+ result = false;
+ }
+ }
+ }
+ else if(p != Py_None)
+ {
+ result = false;
+ }
+
+ if(result)
+ {
+ if(p != Py_None)
+ {
+ ProxyObject* obj = reinterpret_cast<ProxyObject*>(p);
+ proxy = *obj->proxy;
+ }
+ else
+ {
+ proxy = 0;
+ }
+ }
+ else
+ {
+ string typeName = type.empty() ? "Ice.ObjectPrx" : type;
+ PyErr_Format(PyExc_ValueError, STRCAST("%s expects a proxy of type %s or None for argument '%s'"),
+ func.c_str(), typeName.c_str(), arg.c_str());
+ }
+
+ return result;
+}
+
+Ice::CommunicatorPtr
+IcePy::getProxyCommunicator(PyObject* p)
+{
+ assert(checkProxy(p));
+ ProxyObject* obj = reinterpret_cast<ProxyObject*>(p);
+ return *obj->communicator;
+}