| 129 JabberSIXfer *jsx = xfer->data; |
129 JabberSIXfer *jsx = xfer->data; |
| 130 struct bytestreams_streamhost *streamhost; |
130 struct bytestreams_streamhost *streamhost; |
| 131 char *dstaddr, *p; |
131 char *dstaddr, *p; |
| 132 int i; |
132 int i; |
| 133 unsigned char hashval[20]; |
133 unsigned char hashval[20]; |
| |
134 JabberID *dstjid; |
| 134 |
135 |
| 135 if(!jsx->streamhosts) { |
136 if(!jsx->streamhosts) { |
| 136 JabberIq *iq = jabber_iq_new(jsx->js, JABBER_IQ_ERROR); |
137 JabberIq *iq = jabber_iq_new(jsx->js, JABBER_IQ_ERROR); |
| 137 xmlnode *error, *condition; |
138 xmlnode *error, *condition; |
| 138 |
139 |
| 154 return; |
155 return; |
| 155 } |
156 } |
| 156 |
157 |
| 157 streamhost = jsx->streamhosts->data; |
158 streamhost = jsx->streamhosts->data; |
| 158 |
159 |
| 159 jsx->gpi = gaim_proxy_info_new(); |
160 dstjid = jabber_id_new(xfer->who); |
| 160 gaim_proxy_info_set_type(jsx->gpi, GAIM_PROXY_SOCKS5); |
161 |
| 161 gaim_proxy_info_set_host(jsx->gpi, streamhost->host); |
162 if(dstjid != NULL) { |
| 162 gaim_proxy_info_set_port(jsx->gpi, streamhost->port); |
163 jsx->gpi = gaim_proxy_info_new(); |
| 163 |
164 gaim_proxy_info_set_type(jsx->gpi, GAIM_PROXY_SOCKS5); |
| 164 dstaddr = g_strdup_printf("%s%s%s@%s/%s", jsx->stream_id, xfer->who, jsx->js->user->node, |
165 gaim_proxy_info_set_host(jsx->gpi, streamhost->host); |
| 165 jsx->js->user->domain, jsx->js->user->resource); |
166 gaim_proxy_info_set_port(jsx->gpi, streamhost->port); |
| 166 |
167 |
| 167 gaim_cipher_digest_region("sha1", (guchar *)dstaddr, strlen(dstaddr), |
168 |
| 168 sizeof(hashval), hashval, NULL); |
169 |
| 169 g_free(dstaddr); |
170 dstaddr = g_strdup_printf("%s%s@%s/%s%s@%s/%s", jsx->stream_id, dstjid->node, dstjid->domain, dstjid->resource, jsx->js->user->node, |
| 170 dstaddr = g_malloc(41); |
171 jsx->js->user->domain, jsx->js->user->resource); |
| 171 p = dstaddr; |
172 |
| 172 for(i=0; i<20; i++, p+=2) |
173 gaim_cipher_digest_region("sha1", (guchar *)dstaddr, strlen(dstaddr), |
| 173 snprintf(p, 3, "%02x", hashval[i]); |
174 sizeof(hashval), hashval, NULL); |
| 174 |
175 g_free(dstaddr); |
| 175 jsx->connect_data = gaim_proxy_connect_socks5(jsx->gpi, dstaddr, 0, |
176 dstaddr = g_malloc(41); |
| 176 jabber_si_bytestreams_connect_cb, xfer); |
177 p = dstaddr; |
| 177 g_free(dstaddr); |
178 for(i=0; i<20; i++, p+=2) |
| |
179 snprintf(p, 3, "%02x", hashval[i]); |
| |
180 |
| |
181 jsx->connect_data = gaim_proxy_connect_socks5(jsx->gpi, dstaddr, 0, |
| |
182 jabber_si_bytestreams_connect_cb, xfer); |
| |
183 g_free(dstaddr); |
| |
184 |
| |
185 jabber_id_free(dstjid); |
| |
186 } |
| 178 |
187 |
| 179 if (jsx->connect_data == NULL) |
188 if (jsx->connect_data == NULL) |
| 180 { |
189 { |
| 181 jsx->streamhosts = g_list_remove(jsx->streamhosts, streamhost); |
190 jsx->streamhosts = g_list_remove(jsx->streamhosts, streamhost); |
| 182 g_free(streamhost->jid); |
191 g_free(streamhost->jid); |