Index: trunk/tools/FlairGCS/src/ConnectionLayout.cpp
===================================================================
--- trunk/tools/FlairGCS/src/ConnectionLayout.cpp	(revision 20)
+++ trunk/tools/FlairGCS/src/ConnectionLayout.cpp	(revision 30)
@@ -12,4 +12,5 @@
 
 #define COMPRESS_CHUNK 1024
+#define RX_TIME 5000
 
 ConnectionLayout::ConnectionLayout(UdtSocket *socket, QString name)
@@ -17,9 +18,23 @@
   isRemoteNameDefined = false;
   this->socket = socket;
+
+  total_received=0;
+  receive_timer = new QTimer(this);
+  connect(receive_timer, SIGNAL(timeout()), this, SLOT(computeRxRate()));
+  receive_timer->start(RX_TIME);
 }
 
-ConnectionLayout::~ConnectionLayout() {}
+ConnectionLayout::~ConnectionLayout() {
+  receive_timer->stop();
+}
+
+void ConnectionLayout::computeRxRate(void) {
+  float receive_rate=((float)total_received/(RX_TIME/1000))/1000;//in Ko/s
+  total_received=0;
+  computedRxRate(receive_rate);
+}
 
 void ConnectionLayout::receive(char *buf, int size) {
+  total_received+=size-1;
   // printf("trame %x\n",buf[0]);
   // for(int i=0; i<size;i++) printf("%x ",buf[i]);
Index: trunk/tools/FlairGCS/src/ConnectionLayout.h
===================================================================
--- trunk/tools/FlairGCS/src/ConnectionLayout.h	(revision 20)
+++ trunk/tools/FlairGCS/src/ConnectionLayout.h	(revision 30)
@@ -6,4 +6,5 @@
 #define CONNECTIONLAYOUT_H
 
+#include <QTimer>
 #include "Layout.h"
 
@@ -33,10 +34,14 @@
   UdtSocket *socket;
   QList<DataRemote *> dataremotes;
+  unsigned int total_received;
+  QTimer *receive_timer;
 
 private slots:
   void receive(char *buf, int size);
+  void computeRxRate(void);
 
 signals:
   void setRemoteName(QString name);
+  void computedRxRate(float rxRate);
 };
 
Index: trunk/tools/FlairGCS/src/Manager.cpp
===================================================================
--- trunk/tools/FlairGCS/src/Manager.cpp	(revision 20)
+++ trunk/tools/FlairGCS/src/Manager.cpp	(revision 30)
@@ -38,5 +38,5 @@
 
   setWindowTitle(name);
-
+//statusBar()->showMessage(tr("Ready to serve"));
   // manager layout
   managerLayout = new QVBoxLayout;
@@ -69,4 +69,8 @@
   connect(save_button, SIGNAL(clicked(bool)), this, SLOT(save()));
 
+  status=new QStatusBar();
+  status->setSizeGripEnabled(false);
+  button_layout->addWidget(status, 1,0);
+
   UDT::startup();
   serv = UDT::socket(AF_INET, SOCK_DGRAM, 0);
@@ -155,4 +159,6 @@
   connect(newLayout, SIGNAL(setRemoteName(QString)), this,
           SLOT(tabName(QString)));
+  connect(newLayout, SIGNAL(computedRxRate(float)), this,
+          SLOT(printRxRates(float)));
   connect(socket, SIGNAL(dataReady(char *, int)), newLayout,
           SLOT(receive(char *, int)));
@@ -172,4 +178,14 @@
   } else { // add a tab for the new connection
     tabBar->addTab("unknown");
+  }
+}
+
+void Manager::printRxRates(float rxRate) {
+  int index = connectionsLayout.indexOf((ConnectionLayout *)sender());
+
+  if (tabBar->count() == 0) {
+    status->showMessage(tr("rx rate %1 kB/s").arg(rxRate,0,'f',3));
+  } else if (index==tabBar->currentIndex()) {
+    status->showMessage(tr("%1 rx rate %2 kB/s").arg(tabBar->tabText(index)).arg(rxRate,0,'f',3));
   }
 }
@@ -209,4 +225,8 @@
     hiddenTabName = tabBar->tabText(0);
     tabBar->removeTab(0);
+  }
+
+  if (connectionsLayout.count() == 0) {
+    status->showMessage("");
   }
 }
Index: trunk/tools/FlairGCS/src/Manager.h
===================================================================
--- trunk/tools/FlairGCS/src/Manager.h	(revision 20)
+++ trunk/tools/FlairGCS/src/Manager.h	(revision 30)
@@ -9,4 +9,5 @@
 #include <udt.h>
 #include <qdom.h>
+#include <QStatusBar>
 
 class UdtSocket;
@@ -38,4 +39,5 @@
   QPushButton *save_button;
   QGridLayout *button_layout;
+  QStatusBar *status;
 
   void newConnection(UdtSocket *socket);
@@ -50,4 +52,5 @@
   void tabBarCurrentChanged(int index);
   void tabName(QString name);
+  void printRxRates(float rxRate);
 
 signals:
Index: trunk/tools/FlairGCS/src/UdtSocket.cpp
===================================================================
--- trunk/tools/FlairGCS/src/UdtSocket.cpp	(revision 20)
+++ trunk/tools/FlairGCS/src/UdtSocket.cpp	(revision 30)
@@ -70,5 +70,5 @@
     if (UDT::epoll_add_usock(eid, file_socket) < 0) {
       if (UDT::getlasterror().getErrorCode() == 5004) {
-        printf("epoll_add_usock\n");
+        printf("epoll_add_usock error\n");
         break;
       } else {
@@ -79,5 +79,5 @@
     if (UDT::epoll_add_usock(eid, com_socket) < 0) {
       if (UDT::getlasterror().getErrorCode() == 5004) {
-        printf("epoll_add_usock\n");
+        printf("epoll_add_usock error\n");
         break;
       } else {
