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;
}
Example #3
0
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;
	}

}
Example #4
0
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;
}