我正在尝试实现到SecureTransport C库的快速桥接。我认为,只要知道如何在sslReadCallback / sslWriteCallback实现中从连接中读取内容,我就可以传递任何内容作为连接。这是我正在使用的假设。当我查看SSLConnectionRef的定义时,似乎是这种情况:
/* Opaque reference to an I/O connection (socket, endpoint, etc.) */
public typealias SSLConnectionRef = UnsafePointer<Void>
因此,我只需要将我的课程变成UnsafePointer。不幸的是,编译器不喜欢我的尝试。有人可以给我提示吗?
func startSSLProcess()
{
self.sslContext = SSLCreateContext(kCFAllocatorDefault, SSLProtocolSide.ClientSide, SSLConnectionType.StreamType)
if let sslContext = self.sslContext
{
SSLSetIOFuncs(sslContext, sslReadCallback, sslWriteCallback)
SSLSetConnection(sslContext, UnsafePointer(self)) // <-- error
SSLSetSessionOption(sslContext, SSLSessionOption.BreakOnClientAuth, true)
SSLHandshake(sslContext)
}
}
在GCDAsyncSocket中,它执行以下操作:
status = SSLSetConnection(sslContext, (__bridge SSLConnectionRef)self);
和
SubZeroGCDAsyncSocket *asyncSocket = (__bridge SubZeroGCDAsyncSocket *)connection;
..展开。这有多快?
非常感谢!
答案在这里:
如何快速将自身转换为UnsafeMutablePointer <Void>类型
因此,我现在执行以下操作:
func startSSLProcess()
{
self.sslContext = SSLCreateContext(kCFAllocatorDefault, SSLProtocolSide.ClientSide, SSLConnectionType.StreamType)
if let sslContext = self.sslContext
{
SSLSetIOFuncs(sslContext, sslReadCallback, sslWriteCallback)
SSLSetConnection(sslContext, UnsafePointer(Unmanaged.passUnretained(self).toOpaque()))
SSLSetSessionOption(sslContext, SSLSessionOption.BreakOnClientAuth, true)
SSLHandshake(sslContext)
}
}
我像这样展开:
let transportWrapper:SecureTransportWrapper = Unmanaged<SecureTransportWrapper>.fromOpaque(COpaquePointer(connection)).takeUnretainedValue()
用您自己的类型替换SecureTransportWrapper。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句