2009-08-07 2 views
1

Я использую интерфейс pyOpenSSL в библиотеке OpenSSL, но у него отсутствуют некоторые функции, которые мне нужны, и я не могу или не хочу изменять его для поддержки этих методов (для различных причины).Доступ к указателю во внутренней структуре объекта

Так что я хочу достичь, это получить указатель объекта OpenSSL. После этого я смогу вызывать отсутствующие функции через ctypes. Каков наилучший способ сделать это?

Я уже нашел, что могу использовать id(), чтобы получить указатель на объект pyOpenSSL. Как я могу получить доступ к переменной ssl.

От pyOpenSSL/connections.h:

typedef struct { 
     PyObject_HEAD 
     SSL     *ssl; 
     ssl_ContextObj  *context; 
     PyObject   *socket; 
     PyThreadState  *tstate; 
     PyObject   *app_data; 
    } ssl_ConnectionObj; 

ответ

3

Указатели на самом деле не имеет большого смысла в Python, так как вы не можете ничего с ними делать. Они просто были бы целыми числами. Как вы заметили, вы можете получить адрес объекта с помощью метода id. Но это именно то, что есть, адрес. Это не указатель, поэтому вы ничего не можете с этим поделать.

Вы также можете увидеть это так: все в Python - указатели. Переменная, которую вы имеете для объекта pyOpenSSL , - это указатель. Но это указатель на pyOpenSSL-объект, а не на структуру соединения. Маловероятно, что вы можете напрямую получить доступ к этой структуре.

Итак, вы должны сказать нам, что вы хотите сделать. Возможно, есть другое решение.

+0

Я хочу использовать функцию SSL_set_verify, которая недоступна в pyOpenSSL (есть только set_verify для объекта контекста, а не для SSL-соединения), и я не хочу изменять pyOpenSSL (я хочу использовать тот, который был упакован Ubuntu 8.04 LTS, который вряд ли будет изменен, даже если я внес вам исправление). – math

+0

Обычно вы не можете использовать функцию, которая не отображается. Возможно, вы сможете это сделать, если вообще пропустите pyOpenSSL и просто используйте ctypes. Я не очень хорошо знаком с ctypes, но я сомневаюсь, что вы можете использовать его в миксе, так как вам будет трудно получить правильные ручки из pyOpenSSL. Я думаю, что лучше всего отправить патч и установить pyOpenSSL из источника. –

Смежные вопросы