Example #1
0
void xPLController::Connect()
{
    int portTCP;


    m_UdpRecvHandle = uvw::Loop::getDefault()->resource<uvw::UDPHandle>();

    m_UdpRecvHandle->on<uvw::UDPDataEvent>([this](const uvw::UDPDataEvent &ev, auto &)
    {
        this->udpListenData(ev.data.get(), ev.length, ev.sender.ip, ev.sender.port);
    });

    m_UdpRecvHandle->once<uvw::ErrorEvent>([this](const uvw::ErrorEvent &ev, uvw::UDPHandle &h)
    {
        cErrorDom("xpl") << "xPL UDP server error : " << ev.what();
        h.once<uvw::CloseEvent>([this](auto &, auto &)
        {
            Timer::singleShot(2.5, (sigc::slot<void>)sigc::mem_fun(*this, &xPLController::Connect));
        });
        h.close();
    });

    portTCP = discoverxPLPort();
    m_UdpRecvHandle->broadcast(true);
    cInfoDom("xpl") << "Listening on port " << portTCP;
    m_UdpRecvHandle->bind("0.0.0.0", portTCP, uvw::UDPHandle::Bind::REUSEADDR);
    m_UdpRecvHandle->recv();
    m_xPLDevice.SetRecvSockInfo(localAddress(), portTCP);
    m_xPLDevice.Close();
    m_xPLDevice.Open();
}
QString QBluetoothSocketPrivate::localName() const
{
    const QBluetoothAddress address = localAddress();
    if (address.isNull())
        return QString();

    QBluetoothLocalDevice device(address);
    return device.name();
}
Example #3
0
void UDPSocket::readPendingDatagrams() {
    //qDebug()<<"----UDPSocket::readPendingDatagrams()";

    while (hasPendingDatagrams()) {
        datagram->clear();
        qint64 datagramSize = pendingDatagramSize();
        datagram->resize(datagramSize);
        QHostAddress peerAddress;
        quint16 peerPort;

        qint64 readSize = readDatagram(datagram->data(), datagramSize, &peerAddress, &peerPort);
        if(readSize == -1){
            qWarning()<<"Can not read datagram!";
            break;
        }
        //qDebug()<<"~~datagramSize:"<<datagramSize;

        QDataStream in(datagram, QIODevice::ReadOnly);
        in.setVersion(QDataStream::Qt_4_7);
        QVariant v;
        in >> v;
        if (v.canConvert<Packet>()){
            //Packet *packet = new Packet();
            Packet *packet = PacketHandlerBase::getPacket();
            *packet = v.value<Packet>();
            packet->setTransmissionProtocol(TP_UDP);
            packet->setPeerHostAddress(peerAddress);
            packet->setPeerHostPort(peerPort);
            packet->setLocalHostAddress(localAddress());
            packet->setLocalHostPort(localPort());

//            qWarning()<<"";
//            qWarning()<<"~~packet->getPacketData().size():"<<packet->getPacketData().size();
//            qWarning()<<"~~peerAddress.toString():"<<peerAddress.toString();
//            qWarning()<<"~~peerPort:"<<peerPort;
//            qWarning()<<"~~localAddress():"<<localAddress().toString();
//            qWarning()<<"~~localPort():"<<localPort();
//            qWarning()<<"";


            emit signalNewUDPPacketReceived(packet);

        }else{
            qWarning()<<"ERROR! Can not convert UDP data to Packet!";
        }

    }


    datagram->clear();
    datagram->resize(0);

}
    //
    // Download
    //
    void Options::Download()
    {
      VarString firewall("$.firewall", this);
      VarString localAddress("$.localAddress", this);
      VarInteger port("$.port", this);
      VarString proxy("$.proxy", this);

      Settings::SetFirewallStatus(Crc::CalcStr(firewall));
      Settings::SetLocalAddress(inet_addr(*localAddress));
      Settings::SetPort(port);
      Settings::SetProxy(proxy);

      Settings::SaveToUser();
    }
QString QBluetoothSocketPrivate::peerName() const
{
    quint64 bdaddr;

    if (socketType == QBluetoothServiceInfo::RfcommProtocol) {
        sockaddr_rc addr;
        socklen_t addrLength = sizeof(addr);

        if (::getpeername(socket, reinterpret_cast<sockaddr *>(&addr), &addrLength) < 0)
            return QString();

        convertAddress(addr.rc_bdaddr.b, bdaddr);
    } else if (socketType == QBluetoothServiceInfo::L2capProtocol) {
        sockaddr_l2 addr;
        socklen_t addrLength = sizeof(addr);

        if (::getpeername(socket, reinterpret_cast<sockaddr *>(&addr), &addrLength) < 0)
            return QString();

        convertAddress(addr.l2_bdaddr.b, bdaddr);
    } else {
        qCWarning(QT_BT_BLUEZ) << "peerName() called on socket of unknown type";
        return QString();
    }

    const QString peerAddress = QBluetoothAddress(bdaddr).toString();
    const QString localAdapter = localAddress().toString();

    if (isBluez5()) {
        OrgFreedesktopDBusObjectManagerInterface manager(QStringLiteral("org.bluez"),
                                                         QStringLiteral("/"),
                                                         QDBusConnection::systemBus());
        QDBusPendingReply<ManagedObjectList> reply = manager.GetManagedObjects();
        reply.waitForFinished();
        if (reply.isError())
            return QString();

        foreach (const QDBusObjectPath &path, reply.value().keys()) {
            const InterfaceList ifaceList = reply.value().value(path);
            foreach (const QString &iface, ifaceList.keys()) {
                if (iface == QStringLiteral("org.bluez.Device1")) {
                    if (ifaceList.value(iface).value(QStringLiteral("Address")).toString()
                            == peerAddress)
                        return ifaceList.value(iface).value(QStringLiteral("Alias")).toString();
                }
            }
        }
        return QString();
    } else {
Example #6
0
NPT_UdpMulticastSocket* Server::getNewMulticastSocket()
{
    NPT_NetworkInterface* serverInterface = gMS->serverInterface();

    auto addresses = serverInterface->GetAddresses();
    if (!addresses.GetFirstItem())
    {
        throw new std::runtime_error("No usable addresses found for UPnP multicast");
    }

    NPT_SocketAddress localAddress((*addresses.GetFirstItem()).GetPrimaryAddress(), 0);

    NPT_UdpMulticastSocket* ssdpSocket = new NPT_UdpMulticastSocket();
    ssdpSocket->Bind(localAddress, true);
    ssdpSocket->SetTimeToLive(32);
    return ssdpSocket;
}
Example #7
0
int Socket::accept()
{
	int peerfd = ::accept(sockfd_, NULL, NULL);
	if(-1 == peerfd)
	{
		perror("accept error");
		exit(EXIT_FAILURE);
	}
	InetAddress local = localAddress(peerfd);
	InetAddress peer  = peerAddress(peerfd);
	printf("connected! %s:%d -> %s:%d\n", 
			local.ip().c_str(),
			local.port(),
			peer.ip().c_str(),
			peer.port());

	return peerfd;
}
    //
    // Upload
    //
    void Options::Upload()
    {
      VarString firewall("$.firewall", this);
      VarString localAddress("$.localAddress", this);
      VarInteger port("$.port", this);
      VarString proxy("$.proxy", this);

      Settings::LoadFromUser();

      switch (Settings::GetConfigFirewallStatus())
      {
        case Settings::FirewallStatus::AutoDetect:
          firewall = "FirewallStatus::AutoDetect";
          break;

        case Settings::FirewallStatus::BehindFirewall:
          firewall = "FirewallStatus::BehindFirewall";
          break;

        case Settings::FirewallStatus::NotBehindFirewall:
          firewall = "FirewallStatus::NotBehindFirewall";
          break;
      }

      if (Settings::GetLocalAddress())
      {
        in_addr addr;
        addr.s_addr = Settings::GetLocalAddress();
        localAddress = inet_ntoa(addr);
      }
      else
      {
        localAddress = "";
      }
      port = Settings::GetConfigPort();
      proxy = Settings::GetProxy();
    }