7

XMPPFramework と OpenFire を使用して、iOS で XMPP 経由でファイル転送を試みています。私のコードのベースは、次のチュートリアルからのものです。TurnSocket (XEP-0065: SOCKS5 Bytestreams) 接続は成功しましたが、それを使用してデータを送信する方法がわかりません。私が抱えている2つの考慮事項があります.1. [socket writeData]の呼び出しと2.「XEP-0096: SI File Transfer」の使用。

考えられる解決策 1 - [socket writeData] の呼び出し 私の App デリゲートには、didSucceed メソッドがあります。このように [socket writeData] を呼び出すことができます...

- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket {

    NSLog(@"TURN Connection succeeded!");

    [socket writeData:myData withTimeout:60.0f tag:0]; 
    [turnSockets removeObject:sender];
}

6月14日更新:これは正しいですか?もしそうなら、他のユーザーはどのようにデータを読みますか? 実装してみた

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag

しかし、呼び出されることはありません。確実に呼び出されるようにするにはどうすればよいですか?

考えられる解決策 2 - XEP-0096: SI ファイル転送 XEP-0096: SI ファイル転送 を使用する必要がありますか? その場合、作成する必要がある XEP-0096 XML 内で成功した接続を使用するにはどうすればよいですか? XEP-0096 ドキュメントは、「ハッシュ」属性があることを暗示していますが、これがどこから来たのかわかりません。

例えば

<iq type='set' id='offer1' to='receiver@jabber.org/resource'>
  <si xmlns='http://jabber.org/protocol/si' 
      id='a0'
      mime-type='text/plain'
      profile='http://jabber.org/protocol/si/profile/file-transfer'>
    <file xmlns='http://jabber.org/protocol/si/profile/file-transfer'
          name='test.txt'
          size='1022'
          hash='552da749930852c69ae5d2141d3766b1'
          date='1969-07-21T02:56:15Z'>
      <desc>This is a test. If this were a real file...</desc>
    </file>
    <feature xmlns='http://jabber.org/protocol/feature-neg'>
      <x xmlns='jabber:x:data' type='form'>
        <field var='stream-method' type='list-single'>
          <option><value>http://jabber.org/protocol/bytestreams</value></option>
          <option><value>http://jabber.org/protocol/ibb</value></option>
        </field>
      </x>
    </feature>
  </si>
</iq>
4

1 に答える 1