我正在尝试实现一个通往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;。。拆开。这相当于什么呢?
非常感谢!
发布于 2016-05-30 18:37:07
答案就在这里:
现在我要做的是:
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。
https://stackoverflow.com/questions/37470481
复制相似问题