bool MediaStreamingSocketHandler::Private::processAudioFrameDatagramV1(QDataStream &in, QByteArray *data, const QHostAddress &senderAddress, quint16 senderPort) { // Find detailed sender information (+receiver list). const QString sender_identifier = getReceiverKey(senderAddress, senderPort); const UdpDataSender &senderData = _receiverMap.value(sender_identifier); if (senderData.receivers.isEmpty()) { return true; } // Rewrite senders client-id in package. // Note: Its important to use QDataStream, because it internally swaps BigEndian of some data types! QByteArray ba; QDataStream ds(&ba, QIODevice::WriteOnly); ds.setVersion(UdpProtocol::QDS_VERSION); ds << senderData.client_id; data->replace(sizeof(UdpProtocol::UdpDatagramHeader), sizeof(Protocol::client_id_t), ba); // Send data to sibling clients. std::for_each(senderData.receivers.begin(), senderData.receivers.end(), [&] (const UdpDataReceiver &receiver) { const qint64 bytesWritten = _socket->writeDatagram(*data, receiver.address, receiver.port); if (bytesWritten != -1) _totalBytesWritten += bytesWritten; }); return true; }
bool MediaStreamingSocketHandler::Private::processVideoFrameRecoveryDatagramV1(QDataStream &in, QByteArray *data, const QHostAddress &sender_address, quint16 sender_port) { const QString sender_identifier = getReceiverKey(sender_address, sender_port); const UdpDataSender &sender_data = _receiverMap.value(sender_identifier); if (sender_data.receivers.isEmpty()) { return true; } // Rewrite senders client-id in package. // Note: Its important to use QDataStream, because it internally swaps BigEndian of some data types! QByteArray ba; QDataStream ds(&ba, QIODevice::WriteOnly); ds.setVersion(UdpProtocol::QDS_VERSION); ds << sender_data.client_id; data->replace(sizeof(UdpProtocol::UdpDatagramHeader), sizeof(Protocol::client_id_t), ba); // Only send to the client, which has to resend the frame. Protocol::client_id_t sender_id, receiver_id; in >> sender_id >> receiver_id; for (int i = 0; i < sender_data.receivers.size(); ++i) { const UdpDataReceiver &receiver = sender_data.receivers.at(i); if (receiver.client_id != receiver_id) continue; const qint64 bytesWritten = _socket->writeDatagram(*data, receiver.address, receiver.port); if (bytesWritten != -1) _totalBytesWritten += bytesWritten; break; } return true; }
int main(int argc, char *argv[]) { encryptionInit(); std::thread routing(start, &fwdTable); std::thread test(tcpreceive ,6969, std::ref(q), &fwdTable); GObject *window; GtkBuilder *builder; gtk_init (&argc, &argv); //Construct a GtkBuilder instance and load our UI description builder = gtk_builder_new (); gtk_builder_add_from_file (builder, "builder.ui", NULL); window = gtk_builder_get_object (builder, "window"); g_signal_connect (window, "destroy", G_CALLBACK (End), NULL); Button[0] = (GtkButton*) gtk_builder_get_object (builder, "button1"); Button[1] = (GtkButton*) gtk_builder_get_object (builder, "button2"); Button[2] = (GtkButton*) gtk_builder_get_object (builder, "button3"); Button[3] = (GtkButton*) gtk_builder_get_object (builder, "button4"); Button[4] = (GtkButton*) gtk_builder_get_object (builder, "button5"); g_signal_connect (Button[0], "clicked", G_CALLBACK (ButtonClick), NULL); g_signal_connect (Button[1], "clicked", G_CALLBACK (ButtonClick), NULL); g_signal_connect (Button[2], "clicked", G_CALLBACK (ButtonClick), NULL); g_signal_connect (Button[3], "clicked", G_CALLBACK (ButtonClick), NULL); g_signal_connect (Button[4], "clicked", G_CALLBACK (ButtonClick), NULL); Buffer[0] = (GtkTextBuffer*) gtk_builder_get_object(builder, "AllText1"); Buffer[1] = (GtkTextBuffer*) gtk_builder_get_object(builder, "AllText2"); Buffer[2] = (GtkTextBuffer*) gtk_builder_get_object(builder, "AllText3"); Buffer[3] = (GtkTextBuffer*) gtk_builder_get_object(builder, "AllText4"); Buffer[4] = (GtkTextBuffer*) gtk_builder_get_object(builder, "AllText5"); InputBar = (GtkEntry*) gtk_builder_get_object (builder, "TextInput"); ChatText = (GtkTextView*) gtk_builder_get_object (builder, "ChatText"); g_signal_connect (InputBar, "activate", G_CALLBACK (Printsend), NULL); //std::cout << "Destination IP" << std::endl; //std::cin >> DestinationIP; gtk_main (); std::cout << "Say something: " << std::endl; while(1){ Message.clear(); std::getline(std::cin, Message); if (Message.size()==0){ Message = getIP() + " is connected to you."; } sendMessage(getIP(), DestinationIP, getNextHop(DestinationIP, fwdTable), encrypt(Message,getReceiverKey(DestinationIP, fwdTable))); //string Hoi = encrypt(Message,getPublicKey()); //std:: cout << Hoi << ", " << decrypt(Hoi, getPublicKey()) << std::endl; //std::cout << getNextHop(DestinationIP) << std::endl; } }
void Printsend(GtkMenuItem *sender, gpointer user_data) { if (DestinationIP.size()!=0){ const gchar *Input = gtk_entry_get_text (InputBar); std::string Message = (std::string) Input; std::string Print = "You: " + Message + "\n"; const gchar *Insert = &Print[0]; gtk_text_buffer_insert_at_cursor(gtk_text_view_get_buffer(ChatText), Insert , -1); gtk_entry_set_text(InputBar, ""); sendMessage(getIP(), DestinationIP, getNextHop(DestinationIP, fwdTable), encrypt(Message,getReceiverKey(DestinationIP, fwdTable))); } Message.clear(); return; }