| 1143 guchar *dest, *buf; |
1143 guchar *dest, *buf; |
| 1144 PurpleProxyConnectData *connect_data = data; |
1144 PurpleProxyConnectData *connect_data = data; |
| 1145 int len; |
1145 int len; |
| 1146 |
1146 |
| 1147 if (connect_data->read_buffer == NULL) { |
1147 if (connect_data->read_buffer == NULL) { |
| 1148 connect_data->read_buf_len = 4; |
1148 connect_data->read_buf_len = 5; |
| 1149 connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
1149 connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
| 1150 connect_data->read_len = 0; |
1150 connect_data->read_len = 0; |
| 1151 } |
1151 } |
| 1152 |
1152 |
| 1153 dest = connect_data->read_buffer + connect_data->read_len; |
1153 dest = connect_data->read_buffer + connect_data->read_len; |
| 1212 case 0x04: /* the address is a version-6 IP address, with a length of 16 octets */ |
1212 case 0x04: /* the address is a version-6 IP address, with a length of 16 octets */ |
| 1213 if(!s5_ensure_buffer_length(connect_data, 4 + 16)) |
1213 if(!s5_ensure_buffer_length(connect_data, 4 + 16)) |
| 1214 return; |
1214 return; |
| 1215 buf += 4 + 16; |
1215 buf += 4 + 16; |
| 1216 break; |
1216 break; |
| |
1217 default: |
| |
1218 purple_debug_error("socks5 proxy", "Invalid ATYP received (0x%X)\n", buf[3]); |
| |
1219 purple_proxy_connect_data_disconnect(connect_data, |
| |
1220 _("Received invalid data on connection with server.")); |
| |
1221 return; |
| 1217 } |
1222 } |
| 1218 |
1223 |
| 1219 /* Skip past BND.PORT */ |
1224 /* Skip past BND.PORT */ |
| 1220 if(!s5_ensure_buffer_length(connect_data, (buf - connect_data->read_buffer) + 2)) |
1225 if(!s5_ensure_buffer_length(connect_data, (buf - connect_data->read_buffer) + 2)) |
| 1221 return; |
1226 return; |