]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
m_ssl_gnutls Move logic that reads data from a session into new class GnuTLS::DataReader
authorAttila Molnar <attilamolnar@hush.com>
Sat, 28 Feb 2015 16:21:49 +0000 (17:21 +0100)
committerAttila Molnar <attilamolnar@hush.com>
Sat, 28 Feb 2015 16:21:49 +0000 (17:21 +0100)
src/modules/extra/m_ssl_gnutls.cpp

index 65e55026790f99fbed8a8474d611dac9c4c037aa..667ad56819d482d7f7925b43a441146264ec0349 100644 (file)
@@ -451,6 +451,28 @@ namespace GnuTLS
                }
        };
 
+       class DataReader
+       {
+               int retval;
+               char* const buffer;
+
+        public:
+               DataReader(gnutls_session_t sess)
+                       : buffer(ServerInstance->GetReadBuffer())
+               {
+                       // Read data from GnuTLS buffers into ReadBuffer
+                       retval = gnutls_record_recv(sess, buffer, ServerInstance->Config->NetBufferSize);
+               }
+
+               void appendto(std::string& recvq)
+               {
+                       // Copy data from ReadBuffer to recvq
+                       recvq.append(buffer, retval);
+               }
+
+               int ret() const { return retval; }
+       };
+
        class Profile : public refcountbase
        {
                /** Name of this profile
@@ -848,12 +870,11 @@ info_done_dealloc:
 
                if (this->status == ISSL_HANDSHAKEN)
                {
-                       char* buffer = ServerInstance->GetReadBuffer();
-                       size_t bufsiz = ServerInstance->Config->NetBufferSize;
-                       int ret = gnutls_record_recv(this->sess, buffer, bufsiz);
+                       GnuTLS::DataReader reader(sess);
+                       int ret = reader.ret();
                        if (ret > 0)
                        {
-                               recvq.append(buffer, ret);
+                               reader.appendto(recvq);
                                return 1;
                        }
                        else if (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED)