1

現在、受信データを特定のポートでリッスンする 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を初めて使用するという事実に注意してください;)

4

1 に答える 1