// %flair:license{ // This file is part of the Flair framework distributed under the // CECILL-C License, Version 1.0. // %flair:license} #include "ConnectionLayout.h" #include "UdtSocket.h" #include "DataRemote.h" #include #include "communication.h" #include #include #define COMPRESS_CHUNK 1024 #define RX_TIME 5000 ConnectionLayout::ConnectionLayout(UdtSocket *socket, QString name) : Layout(NULL, name, "root") { 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() { 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; iBufEvent(&buf, &buf_size, period, big_endian); } } int ConnectionLayout::uncompressBuffer(char *in, ssize_t in_size, char **out, ssize_t *out_size) { int ret; unsigned have; z_stream strm; // allocate inflate state strm.zalloc = Z_NULL; strm.zfree = Z_NULL; strm.opaque = Z_NULL; strm.avail_in = 0; strm.next_in = Z_NULL; ret = inflateInit(&strm); if (ret != Z_OK) return ret; *out = (char *)malloc(COMPRESS_CHUNK); if (!(*out)) return Z_BUF_ERROR; strm.avail_in = in_size; strm.next_in = (unsigned char *)in; strm.avail_out = COMPRESS_CHUNK; strm.next_out = (unsigned char *)*out; ret = inflate(&strm, Z_NO_FLUSH); assert(ret != Z_STREAM_ERROR); // state not clobbered switch (ret) { case Z_NEED_DICT: ret = Z_DATA_ERROR; // and fall through case Z_DATA_ERROR: case Z_MEM_ERROR: (void)inflateEnd(&strm); return ret; } have = COMPRESS_CHUNK - strm.avail_out; *out_size = have; // printf("%i -> %i\n",in_size,have); // printf("%s\n",*out); // clean up and return (void)inflateEnd(&strm); return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR; }