Example #1
0
  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());
  }
Example #2
0
  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());
  }
Example #3
0
  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();
  }
Example #4
0
  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());
  }