void SocksConnection::StartUdpAssociate(const QString &, quint16) { _udp_socket = QSharedPointer<QUdpSocket>(new QUdpSocket()); if(!_udp_socket->bind(_socket->localAddress(), 0)) { EstablishFail(SocksReply_GeneralServerFailure); return; } connect(_udp_socket.data(), SIGNAL(readyRead()), this, SLOT(UdpReadFromSocket())); connect(_udp_socket.data(), SIGNAL(disconnected()), this, SLOT(Close())); connect(_udp_socket.data(), SIGNAL(error(QAbstractSocket::SocketError)), SLOT(UdpHandleError(QAbstractSocket::SocketError))); QByteArray verif_bytes = _verif_key->GetByteArray(); _conn_id = Hash().ComputeHash(verif_bytes); emit ProxyConnected(); _state = ConnState_Connected; TunnelPacket packet = TunnelPacket::BuildUdpStart(GetConnectionId(), verif_bytes); SendUpstreamPacket(packet.GetPacket()); qDebug() << "SOCKS UDP Addr" << _udp_socket->localAddress() << _udp_socket->localPort(); WriteSocksReply(SocksReply_Succeeded, _udp_socket->localAddress(), _udp_socket->localPort()); }
void SocksConnection::StartConnect(const QString &host, quint16 port) { QByteArray verif_bytes = _verif_key->GetByteArray(); _conn_id = Hash().ComputeHash(verif_bytes); emit ProxyConnected(); _state = ConnState_Connected; TunnelPacket packet = TunnelPacket::BuildTcpStart(GetConnectionId(), host, port, verif_bytes); SendUpstreamPacket(packet.GetPacket()); WriteSocksReply(SocksReply_Succeeded, _socket->localAddress(), _socket->localPort()); }
void SocksConnection::StartConnect(const SocksHostAddress &dest_host) { QByteArray verif_bytes = _verif_key->GetByteArray(); QByteArray packet = TcpStartPacket(verif_bytes, dest_host).ToByteArray(); // Start the connection _conn_id = _hash_algo->ComputeHash(verif_bytes); emit ProxyConnected(); _state = ConnState_Connected; SendUpstreamPacket(packet); WriteSocksReply(SocksReply_Succeeded, QHostAddress(), 8888); ReadFromSocket(); }
void SocksConnection::StartUdpAssociate(const SocksHostAddress &peer_host) { if(!peer_host.IsHostName() && peer_host.GetPort() && peer_host.GetAddress() != QHostAddress::Any && peer_host.GetAddress() != QHostAddress::AnyIPv6) { _udp_peer = peer_host.GetAddress(); _udp_peer_port = peer_host.GetPort(); } _udp_socket = QSharedPointer<QUdpSocket>(new QUdpSocket()); // Bind to some accessible port on the same address as the // SOCKS TCP server _udp_socket->bind(_socket->localAddress(), 0); if(_udp_socket->state() != QAbstractSocket::BoundState) { return EstablishFail(SocksReply_GeneralServerFailure); } // Connect to methods here connect(_udp_socket.data(), SIGNAL(readyRead()), this, SLOT(UdpReadFromSocket())); connect(_udp_socket.data(), SIGNAL(disconnected()), this, SLOT(Close())); connect(_udp_socket.data(), SIGNAL(error(QAbstractSocket::SocketError)), SLOT(UdpHandleError(QAbstractSocket::SocketError))); QByteArray verif_bytes = _verif_key->GetByteArray(); QByteArray packet = UdpStartPacket(verif_bytes).ToByteArray(); // Start the connection _conn_id = _hash_algo->ComputeHash(verif_bytes); emit ProxyConnected(); _state = ConnState_Connected; SendUpstreamPacket(packet); qDebug() << "SOCKS UDP Addr" << _udp_socket->localAddress() << _udp_socket->localPort(); SocksConnection::WriteSocksReply(SocksReply_Succeeded, _udp_socket->localAddress(), _udp_socket->localPort()); }