2009-08-07 92 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

我想使用在pyOpenSSL中沒有的SSL_set_verify函數(上下文對象只有set_verify,而不是SSL連接),我不想修改pyOpenSSL(我想使用Ubuntu打包的那個8.04 LTS即使我貢獻補丁也不太可能被修改)。 – math 2009-08-07 13:42:58

+0

您通常不能使用未公開的功能。如果你完全跳過使用pyOpenSSL,你可能可以做到這一點,並且一直使用ctypes。我對ctypes不是很熟悉,但是我懷疑你可以混合使用它,因爲你很難從pyOpenSSL獲得正確的句柄。 我認爲你最好的選擇是提交補丁,並從源代碼安裝pyOpenSSL。 – 2009-08-07 13:51:01