diff options
Diffstat (limited to 'python/modules/IcePy/ConnectionInfo.cpp')
-rw-r--r-- | python/modules/IcePy/ConnectionInfo.cpp | 197 |
1 files changed, 75 insertions, 122 deletions
diff --git a/python/modules/IcePy/ConnectionInfo.cpp b/python/modules/IcePy/ConnectionInfo.cpp index 7e884881c23..bab845be7f0 100644 --- a/python/modules/IcePy/ConnectionInfo.cpp +++ b/python/modules/IcePy/ConnectionInfo.cpp @@ -54,38 +54,27 @@ connectionInfoDealloc(ConnectionInfoObject* self) extern "C" #endif static PyObject* -connectionInfoGetIncoming(ConnectionInfoObject* self) -{ - PyObject* result = (*self->connectionInfo)->incoming ? getTrue() : getFalse(); - Py_INCREF(result); - return result; -} - -#ifdef WIN32 -extern "C" -#endif -static PyObject* -connectionInfoGetAdapterName(ConnectionInfoObject* self) +connectionInfoGetUnderlying(ConnectionInfoObject* self) { - return createString((*self->connectionInfo)->adapterName); + return createConnectionInfo((*self->connectionInfo)->underlying); } #ifdef WIN32 extern "C" #endif static PyObject* -connectionInfoGetRcvSize(ConnectionInfoObject* self) +connectionInfoGetIncoming(ConnectionInfoObject* self) { - return PyLong_FromLong((*self->connectionInfo)->rcvSize); + return (*self->connectionInfo)->incoming ? incTrue() : incFalse(); } #ifdef WIN32 extern "C" #endif static PyObject* -connectionInfoGetSndSize(ConnectionInfoObject* self) +connectionInfoGetAdapterName(ConnectionInfoObject* self) { - return PyLong_FromLong((*self->connectionInfo)->sndSize); + return createString((*self->connectionInfo)->adapterName); } #ifdef WIN32 @@ -136,6 +125,28 @@ ipConnectionInfoGetRemotePort(ConnectionInfoObject* self) extern "C" #endif static PyObject* +tcpConnectionInfoGetRcvSize(ConnectionInfoObject* self) +{ + Ice::TCPConnectionInfoPtr info = Ice::TCPConnectionInfoPtr::dynamicCast(*self->connectionInfo); + assert(info); + return PyLong_FromLong(info->rcvSize); +} + +#ifdef WIN32 +extern "C" +#endif +static PyObject* +tcpConnectionInfoGetSndSize(ConnectionInfoObject* self) +{ + Ice::TCPConnectionInfoPtr info = Ice::TCPConnectionInfoPtr::dynamicCast(*self->connectionInfo); + assert(info); + return PyLong_FromLong(info->sndSize); +} + +#ifdef WIN32 +extern "C" +#endif +static PyObject* udpConnectionInfoGetMcastAddress(ConnectionInfoObject* self) { Ice::UDPConnectionInfoPtr info = Ice::UDPConnectionInfoPtr::dynamicCast(*self->connectionInfo); @@ -158,6 +169,28 @@ udpConnectionInfoGetMcastPort(ConnectionInfoObject* self, void* member) extern "C" #endif static PyObject* +udpConnectionInfoGetRcvSize(ConnectionInfoObject* self) +{ + Ice::UDPConnectionInfoPtr info = Ice::UDPConnectionInfoPtr::dynamicCast(*self->connectionInfo); + assert(info); + return PyLong_FromLong(info->rcvSize); +} + +#ifdef WIN32 +extern "C" +#endif +static PyObject* +udpConnectionInfoGetSndSize(ConnectionInfoObject* self) +{ + Ice::UDPConnectionInfoPtr info = Ice::UDPConnectionInfoPtr::dynamicCast(*self->connectionInfo); + assert(info); + return PyLong_FromLong(info->sndSize); +} + +#ifdef WIN32 +extern "C" +#endif +static PyObject* wsConnectionInfoGetHeaders(ConnectionInfoObject* self) { Ice::WSConnectionInfoPtr info = Ice::WSConnectionInfoPtr::dynamicCast(*self->connectionInfo); @@ -212,47 +245,17 @@ sslConnectionInfoGetVerified(ConnectionInfoObject* self) { IceSSL::ConnectionInfoPtr info = IceSSL::ConnectionInfoPtr::dynamicCast(*self->connectionInfo); assert(info); - PyObject* result = info->incoming ? getTrue() : getFalse(); - Py_INCREF(result); - return result; -} - -#ifdef WIN32 -extern "C" -#endif -static PyObject* -wssConnectionInfoGetHeaders(ConnectionInfoObject* self) -{ - IceSSL::WSSConnectionInfoPtr info = IceSSL::WSSConnectionInfoPtr::dynamicCast(*self->connectionInfo); - assert(info); - - PyObjectHandle result = PyDict_New(); - if(result.get()) - { - for(Ice::HeaderDict::iterator p = info->headers.begin(); p != info->headers.end(); ++p) - { - PyObjectHandle key = createString(p->first); - PyObjectHandle val = createString(p->second); - if(!val.get() || PyDict_SetItem(result.get(), key.get(), val.get()) < 0) - { - return 0; - } - } - } - - return result.release(); + return info->incoming ? incTrue() : incFalse(); } static PyGetSetDef ConnectionInfoGetters[] = { + { STRCAST("underlying"), reinterpret_cast<getter>(connectionInfoGetUnderlying), 0, + PyDoc_STR(STRCAST("get underlying connection information")), 0 }, { STRCAST("incoming"), reinterpret_cast<getter>(connectionInfoGetIncoming), 0, PyDoc_STR(STRCAST("whether connection is incoming")), 0 }, { STRCAST("adapterName"), reinterpret_cast<getter>(connectionInfoGetAdapterName), 0, PyDoc_STR(STRCAST("adapter associated the connection")), 0 }, - { STRCAST("rcvSize"), reinterpret_cast<getter>(connectionInfoGetRcvSize), 0, - PyDoc_STR(STRCAST("receive buffer size")), 0 }, - { STRCAST("sndSize"), reinterpret_cast<getter>(connectionInfoGetSndSize), 0, - PyDoc_STR(STRCAST("send buffer size")), 0 }, { 0, 0 } /* sentinel */ }; @@ -269,12 +272,25 @@ static PyGetSetDef IPConnectionInfoGetters[] = { 0, 0 } /* sentinel */ }; +static PyGetSetDef TCPConnectionInfoGetters[] = +{ + { STRCAST("rcvSize"), reinterpret_cast<getter>(tcpConnectionInfoGetRcvSize), 0, + PyDoc_STR(STRCAST("receive buffer size")), 0 }, + { STRCAST("sndSize"), reinterpret_cast<getter>(tcpConnectionInfoGetSndSize), 0, + PyDoc_STR(STRCAST("send buffer size")), 0 }, + { 0, 0 } /* sentinel */ +}; + static PyGetSetDef UDPConnectionInfoGetters[] = { { STRCAST("mcastAddress"), reinterpret_cast<getter>(udpConnectionInfoGetMcastAddress), 0, PyDoc_STR(STRCAST("multicast address")), 0 }, { STRCAST("mcastPort"), reinterpret_cast<getter>(udpConnectionInfoGetMcastPort), 0, PyDoc_STR(STRCAST("multicast port")), 0 }, + { STRCAST("rcvSize"), reinterpret_cast<getter>(udpConnectionInfoGetRcvSize), 0, + PyDoc_STR(STRCAST("receive buffer size")), 0 }, + { STRCAST("sndSize"), reinterpret_cast<getter>(udpConnectionInfoGetSndSize), 0, + PyDoc_STR(STRCAST("send buffer size")), 0 }, { 0, 0 } /* sentinel */ }; @@ -296,13 +312,6 @@ static PyGetSetDef SSLConnectionInfoGetters[] = { 0, 0 } /* sentinel */ }; -static PyGetSetDef WSSConnectionInfoGetters[] = -{ - { STRCAST("headers"), reinterpret_cast<getter>(wssConnectionInfoGetHeaders), 0, - PyDoc_STR(STRCAST("request headers")), 0 }, - { 0, 0 } /* sentinel */ -}; - namespace IcePy { @@ -434,7 +443,7 @@ PyTypeObject TCPConnectionInfoType = 0, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ - 0, /* tp_getset */ + TCPConnectionInfoGetters, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ @@ -588,53 +597,6 @@ PyTypeObject SSLConnectionInfoType = 0, /* tp_is_gc */ }; -PyTypeObject WSSConnectionInfoType = -{ - /* 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.WSSConnectionInfo"),/* tp_name */ - sizeof(ConnectionInfoObject), /* tp_basicsize */ - 0, /* tp_itemsize */ - /* methods */ - (destructor)connectionInfoDealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - 0, /* tp_members */ - WSSConnectionInfoGetters, /* 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 */ - (newfunc)connectionInfoNew, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ -}; - } bool @@ -683,7 +645,7 @@ IcePy::initConnectionInfo(PyObject* module) return false; } - WSConnectionInfoType.tp_base = &IPConnectionInfoType; // Force inheritance from IPConnectionType. + WSConnectionInfoType.tp_base = &ConnectionInfoType; // Force inheritance from IPConnectionType. if(PyType_Ready(&WSConnectionInfoType) < 0) { return false; @@ -694,7 +656,7 @@ IcePy::initConnectionInfo(PyObject* module) return false; } - SSLConnectionInfoType.tp_base = &IPConnectionInfoType; // Force inheritance from IPConnectionInfoType. + SSLConnectionInfoType.tp_base = &ConnectionInfoType; // Force inheritance from IPConnectionInfoType. if(PyType_Ready(&SSLConnectionInfoType) < 0) { return false; @@ -705,17 +667,6 @@ IcePy::initConnectionInfo(PyObject* module) return false; } - WSSConnectionInfoType.tp_base = &SSLConnectionInfoType; // Force inheritance from IPConnectionType. - if(PyType_Ready(&WSSConnectionInfoType) < 0) - { - return false; - } - type = &WSSConnectionInfoType; // Necessary to prevent GCC's strict-alias warnings. - if(PyModule_AddObject(module, STRCAST("WSSConnectionInfo"), reinterpret_cast<PyObject*>(type)) < 0) - { - return false; - } - return true; } @@ -730,6 +681,12 @@ IcePy::getConnectionInfo(PyObject* obj) PyObject* IcePy::createConnectionInfo(const Ice::ConnectionInfoPtr& connectionInfo) { + if(!connectionInfo) + { + Py_INCREF(Py_None); + return Py_None; + } + PyTypeObject* type; if(Ice::WSConnectionInfoPtr::dynamicCast(connectionInfo)) { @@ -743,10 +700,6 @@ IcePy::createConnectionInfo(const Ice::ConnectionInfoPtr& connectionInfo) { type = &UDPConnectionInfoType; } - else if(IceSSL::WSSConnectionInfoPtr::dynamicCast(connectionInfo)) - { - type = &WSSConnectionInfoType; - } else if(IceSSL::ConnectionInfoPtr::dynamicCast(connectionInfo)) { type = &SSLConnectionInfoType; |