mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-25 07:08:11 +00:00
feat(c-wrapper): getPrivate is more secure
This commit is contained in:
parent
d1dc5af4ea
commit
25c138a64a
1 changed files with 21 additions and 10 deletions
|
|
@ -48,16 +48,21 @@ struct CObjectInitializer {};
|
|||
|
||||
class Wrapper {
|
||||
private:
|
||||
template<typename T>
|
||||
struct WrappedObject {
|
||||
belle_sip_object_t base;
|
||||
std::shared_ptr<T> cppPtr;
|
||||
template<typename CppType>
|
||||
struct IsCppObject {
|
||||
enum { value = std::is_base_of<Object, CppType>::value || std::is_base_of<ClonableObject, CppType>::value };
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
template<typename CType>
|
||||
struct WrappedObject {
|
||||
belle_sip_object_t base;
|
||||
std::shared_ptr<CType> cppPtr;
|
||||
};
|
||||
|
||||
template<typename CType>
|
||||
struct WrappedClonableObject {
|
||||
belle_sip_object_t base;
|
||||
T *cppPtr;
|
||||
CType *cppPtr;
|
||||
};
|
||||
|
||||
public:
|
||||
|
|
@ -65,14 +70,20 @@ public:
|
|||
// Get private data of cpp Object.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
template<typename T>
|
||||
static inline decltype (std::declval<T>().getPrivate()) getPrivate (T *cppObject) {
|
||||
template<
|
||||
typename CppType,
|
||||
typename = typename std::enable_if<IsCppObject<CppType>::value, CppType>::type
|
||||
>
|
||||
static inline decltype (std::declval<CppType>().getPrivate()) getPrivate (CppType *cppObject) {
|
||||
L_ASSERT(cppObject);
|
||||
return cppObject->getPrivate();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static inline decltype (std::declval<T>().getPrivate()) getPrivate (const std::shared_ptr<T> &cppObject) {
|
||||
template<
|
||||
typename CppType,
|
||||
typename = typename std::enable_if<IsCppObject<CppType>::value, CppType>::type
|
||||
>
|
||||
static inline decltype (std::declval<CppType>().getPrivate()) getPrivate (const std::shared_ptr<CppType> &cppObject) {
|
||||
L_ASSERT(cppObject);
|
||||
return cppObject->getPrivate();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue