private void SendStreamHostUsedResponse(StreamHost sh, IQ iq) { ByteStreamIq bsIQ = new ByteStreamIq(IqType.result, m_From); bsIQ.Id = iq.Id; bsIQ.Query.StreamHostUsed = new StreamHostUsed(sh.Jid); m_XmppCon.Send(bsIQ); }
/* * 4.9 Activation of Bytestream * * In order for the bytestream to be used, it MUST first be activated by the StreamHost. If the StreamHost is the Initiator, this is straightforward and does not require any in-band protocol. However, if the StreamHost is a Proxy, the Initiator MUST send an in-band request to the StreamHost. This is done by sending an IQ-set to the Proxy, including an <activate/> element whose XML character data specifies the full JID of the Target. * * Example 17. Initiator Requests Activation of Bytestream * * <iq type='set' * from='initiator@host1/foo' * to='proxy.host3' * id='activate'> * <query xmlns='http://jabber.org/protocol/bytestreams' sid='mySID'> * <activate>target@host2/bar</activate> * </query> * </iq> * * * Using this information, with the SID and from address on the packet, the Proxy is able to activate the stream by hashing the SID + Initiator JID + Target JID. This provides a reasonable level of trust that the activation request came from the Initiator. * * If the Proxy can fulfill the request, it MUST then respond to the Initiator with an IQ-result. * * Example 18. Proxy Informs Initiator of Activation * * <iq type='result' * from='proxy.host3' * to='initiator@host1/foo' * id='activate'/> * */ private void ActivateBytestream(Jid streamHost) { ByteStreamIq bsIq = new ByteStreamIq(); bsIq.To = streamHost; bsIq.Type = IqType.set; bsIq.Query.Sid = m_Sid; bsIq.Query.Activate = new Activate(m_To); m_XmppCon.IqGrabber.SendIq(bsIq, new IqCB(ActivateBytestreamResult), null); }
private void SendStreamHosts() { /* * Recv: * <iq xmlns="jabber:client" from="[email protected]/Psi" to="[email protected]/SharpIM" * type="set" id="aab6a"> <query xmlns="http://jabber.org/protocol/bytestreams" sid="s5b_405645b6f2b7c681" * mode="tcp"> <streamhost port="8010" jid="[email protected]/Psi" host="192.168.74.142" /> * <streamhost port="7777" jid="proxy.ag-software.de" host="82.165.34.23"> * <proxy xmlns="http://affinix.com/jabber/stream" /> * </streamhost> * <fast xmlns="http://affinix.com/jabber/stream" /> </query> </iq> */ ByteStreamIq bsIq = new ByteStreamIq(); bsIq.To = m_To; bsIq.Type = IqType.set; bsIq.Query.Sid = m_Sid; string hostname = System.Net.Dns.GetHostName(); System.Net.IPHostEntry iphe = System.Net.Dns.Resolve(hostname); for (int i = 0; i < iphe.AddressList.Length; i++) { Console.WriteLine("IP address: {0}", iphe.AddressList[i].ToString()); //bsIq.Query.AddStreamHost(m_XmppCon.MyJID, iphe.AddressList[i].ToString(), 1000); } bsIq.Query.AddStreamHost(new Jid(PROXY), PROXY, 7777); _p2pSocks5Socket = new JEP65Socket(); _p2pSocks5Socket.Initiator = m_XmppCon.MyJID; _p2pSocks5Socket.Target = m_To; _p2pSocks5Socket.SID = m_Sid; _p2pSocks5Socket.OnConnect += new ObjectHandler(_socket_OnConnect); _p2pSocks5Socket.OnDisconnect += new ObjectHandler(_socket_OnDisconnect); _p2pSocks5Socket.Listen(1000); m_XmppCon.IqGrabber.SendIq(bsIq, new IqCB(SendStreamHostsResult), null); }