現在、受信データを特定のポートでリッスンする Mac 上の Objective-C のサーバーで作業しています。双方向の NSStreams に基づく暗号化されていないデータ転送では、すでに機能しています。
次のステップでは、SSL/TLS 経由で接続を保護したいと思います。現在、このページのドキュメントに記載されているアップルのアプローチに従っています。概要では、SSL 接続を構築するための一般的な手順について説明しています。
私が今失敗したところは、フォームのポインタを与えなければならないポイントです
typedef OSStatus (*SSLReadFunc) (
SSLConnectionRef connection,
void *data,
size_t *dataLength
);
SSL 接続の I/O 関数を設定するメソッドで、担当オブジェクトがこれらのメソッドを呼び出してストリームを読み書きできるようにします。私はすでに2つの方法を書いています
// Called by the secure transport to write data on the stream
-(OSStatus)sslWriteCallbackFunction:(SSLContextRef)context data:(const void *)data dataLength:(size_t)dataLength sizeOfProcessedData:(size_t *)processed{
processed = (size_t *)[_writeStream write:data maxLength:dataLength];
if (processed < 0)
return errSSLProtocol;
else if (processed==0)
return 0;
else
return errSSLWouldBlock;
}
// Called by the secure transport to read data from the stream
-(OSStatus) sslReadCallbackFunction:(SSLContextRef)context data:(const void *)data dataLength:(size_t)dataLength{
uint8_t buffer[dataLength];
NSInteger err = [_readStream read:buffer maxLength:dataLength];
if (err < 0)
// Error
return errSSLProtocol;
else if (err==0)
// All bytes have been read
return 0;
else
// err corresponds to the number of bytes read, so there are still bytes available
dataLength = err;
return errSSLWouldBlock;
}
署名付きのメソッドにそれらを設定したい
OSStatus SSLSetIOFuncs (
SSLContextRef context,
SSLReadFunc readFunc,
SSLWriteFunc writeFunc
);
sslReadCallbackFunction
それぞれ経由で渡されるメソッドreadFunc
と書き込みメソッド用。
さて、上記の形式の 2 つのメソッドのいずれかへのポインターを作成するにはどうすればよいでしょうか。誰かが私を助けてくれたり、正しい方向を指し示してくれたりしたら、本当に感謝しています。&
メソッド名の直前にself
、...のメソッドを使用して、セレクターを使用しました。
私がObjective-Cを初めて使用するという事実に注意してください;)