Index: trunk/BNC/bncgetthread.cpp
===================================================================
--- trunk/BNC/bncgetthread.cpp	(revision 1367)
+++ trunk/BNC/bncgetthread.cpp	(revision 1368)
@@ -503,4 +503,5 @@
         _socket->waitForReadyRead(_timeOut);
         nBytes = _socket->bytesAvailable();
+        cout << "nBytes " << nBytes << endl;
       }
       else if (_rawInpFile) {
@@ -512,12 +513,12 @@
         emit newBytes(_staID, nBytes);
 
-        char* data = new char[nBytes];
+        QByteArray data;
 
         if (_socket) {
-          _socket->read(data, nBytes);
+          data = _socket->read(nBytes);
         }
         else if (_rawInpFile) {
-          nBytes = _rawInpFile->read(data, nBytes);
-          if (nBytes <= 0) {
+          data = _rawInpFile->read(nBytes);
+          if (data.isEmpty()) {
             cout << "no more data" << endl;
             ::exit(0);
@@ -526,10 +527,10 @@
 
         if (_rawOutFile) {
-          _rawOutFile->write(data, nBytes);
+          _rawOutFile->write(data);
           _rawOutFile->flush();
         }
 
         if (_serialPort) {
-          _serialPort->write(data, nBytes);
+          _serialPort->write(data);
 	  ////          _serialPort->flush();
         }
@@ -537,5 +538,5 @@
         if (_inspSegm<1) {
           vector<string> errmsg;
-          _decoder->Decode(data, nBytes, errmsg);
+          _decoder->Decode(data.data(), data.size(), errmsg);
 #ifdef DEBUG_RTCM2_2021
           for (unsigned ii = 0; ii < errmsg.size(); ii++) {
@@ -553,5 +554,5 @@
             if (decode) { 
               vector<string> errmsg;
-              if ( _decoder->Decode(data, nBytes, errmsg) == success ) { 
+              if ( _decoder->Decode(data.data(), data.size(), errmsg) == success ) { 
                 numSucc += 1;
               } 
@@ -648,7 +649,4 @@
         }
 
-        delete [] data;
-
-	
 	// RTCM scan output
 	// ----------------
Index: trunk/BNC/bncsocket.cpp
===================================================================
--- trunk/BNC/bncsocket.cpp	(revision 1367)
+++ trunk/BNC/bncsocket.cpp	(revision 1368)
@@ -17,6 +17,4 @@
 #include <iostream>
 #include <iomanip>
-
-#include <string.h>
 
 #include "bncsocket.h"
@@ -145,15 +143,15 @@
 // 
 ////////////////////////////////////////////////////////////////////////////
-qint64 bncSocket::read(char* data, qint64 maxlen) {
-  if      (_http) {
-    strncpy(data, _buffer.data(), maxlen);
-    _buffer = _buffer.right(_buffer.size()-maxlen);
-    return maxlen; 
-  }
-  else if (_socket) {
-    return _socket->read(data, maxlen);
-  }
-  else {
-    return -1;
+QByteArray bncSocket::read(qint64 maxSize) {
+  if      (_http) {
+    QByteArray ret = _buffer.left(maxSize);
+    _buffer = _buffer.right(_buffer.size()-maxSize);
+    return ret; 
+  }
+  else if (_socket) {
+    return _socket->read(maxSize);
+  }
+  else {
+    return "";
   }
 }
Index: trunk/BNC/bncsocket.h
===================================================================
--- trunk/BNC/bncsocket.h	(revision 1367)
+++ trunk/BNC/bncsocket.h	(revision 1368)
@@ -17,5 +17,5 @@
   QByteArray readLine();
   void       waitForReadyRead(int msecs = 30000);
-  qint64     read(char *data, qint64 maxlen);
+  QByteArray read(qint64 maxSize);
   QAbstractSocket::SocketState state() const;
 
