Added block size on sockets to allow different buffer size for SSL.
This commit is contained in:
parent
90f838232f
commit
5d82825687
@ -718,6 +718,12 @@ ref <session> IMAPConnection::getSession()
|
||||
}
|
||||
|
||||
|
||||
ref <const socket> IMAPConnection::getSocket() const
|
||||
{
|
||||
return m_socket;
|
||||
}
|
||||
|
||||
|
||||
} // imap
|
||||
} // net
|
||||
} // vmime
|
||||
|
@ -1284,7 +1284,11 @@ void IMAPFolder::addMessage(utility::inputStream& is, const int size, const int
|
||||
if (progress)
|
||||
progress->start(total);
|
||||
|
||||
char buffer[65536];
|
||||
const socket::size_type blockSize = std::min(is.getBlockSize(),
|
||||
static_cast <size_t>(m_connection->getSocket()->getBlockSize()));
|
||||
|
||||
std::vector <char> vbuffer(blockSize);
|
||||
char* buffer = &vbuffer.front();
|
||||
|
||||
while (!is.eof())
|
||||
{
|
||||
|
@ -90,6 +90,12 @@ bool TLSSocket::isConnected() const
|
||||
}
|
||||
|
||||
|
||||
TLSSocket::size_type TLSSocket::getBlockSize() const
|
||||
{
|
||||
return 16384; // 16 KB
|
||||
}
|
||||
|
||||
|
||||
void TLSSocket::receive(string& buffer)
|
||||
{
|
||||
const int size = receiveRaw(m_buffer, sizeof(m_buffer));
|
||||
@ -103,7 +109,7 @@ void TLSSocket::send(const string& buffer)
|
||||
}
|
||||
|
||||
|
||||
int TLSSocket::receiveRaw(char* buffer, const int count)
|
||||
TLSSocket::size_type TLSSocket::receiveRaw(char* buffer, const size_type count)
|
||||
{
|
||||
const ssize_t ret = gnutls_record_recv
|
||||
(*m_session->m_gnutlsSession,
|
||||
@ -124,7 +130,7 @@ int TLSSocket::receiveRaw(char* buffer, const int count)
|
||||
}
|
||||
|
||||
|
||||
void TLSSocket::sendRaw(const char* buffer, const int count)
|
||||
void TLSSocket::sendRaw(const char* buffer, const size_type count)
|
||||
{
|
||||
gnutls_record_send
|
||||
(*m_session->m_gnutlsSession,
|
||||
|
@ -217,6 +217,12 @@ void posixSocket::disconnect()
|
||||
}
|
||||
|
||||
|
||||
posixSocket::size_type posixSocket::getBlockSize() const
|
||||
{
|
||||
return 16384; // 16 KB
|
||||
}
|
||||
|
||||
|
||||
void posixSocket::receive(vmime::string& buffer)
|
||||
{
|
||||
const int size = receiveRaw(m_buffer, sizeof(m_buffer));
|
||||
@ -224,7 +230,7 @@ void posixSocket::receive(vmime::string& buffer)
|
||||
}
|
||||
|
||||
|
||||
int posixSocket::receiveRaw(char* buffer, const int count)
|
||||
posixSocket::size_type posixSocket::receiveRaw(char* buffer, const size_type count)
|
||||
{
|
||||
const int ret = ::recv(m_desc, buffer, count, 0);
|
||||
|
||||
@ -252,9 +258,9 @@ void posixSocket::send(const vmime::string& buffer)
|
||||
}
|
||||
|
||||
|
||||
void posixSocket::sendRaw(const char* buffer, const int count)
|
||||
void posixSocket::sendRaw(const char* buffer, const size_type count)
|
||||
{
|
||||
int size = count;
|
||||
size_type size = count;
|
||||
|
||||
while (size > 0)
|
||||
{
|
||||
|
@ -121,6 +121,12 @@ void windowsSocket::disconnect()
|
||||
}
|
||||
|
||||
|
||||
windowsSocket::size_type windowsSocket::getBlockSize() const
|
||||
{
|
||||
return 16384; // 16 KB
|
||||
}
|
||||
|
||||
|
||||
void windowsSocket::receive(vmime::string& buffer)
|
||||
{
|
||||
int ret = ::recv(m_desc, m_buffer, sizeof(m_buffer), 0);
|
||||
@ -137,7 +143,7 @@ void windowsSocket::receive(vmime::string& buffer)
|
||||
}
|
||||
|
||||
|
||||
int windowsSocket::receiveRaw(char* buffer, const int count)
|
||||
windowsSocket::size_type windowsSocket::receiveRaw(char* buffer, const size_type count)
|
||||
{
|
||||
int ret = ::recv(m_desc, buffer, count, 0);
|
||||
|
||||
@ -159,7 +165,7 @@ void windowsSocket::send(const vmime::string& buffer)
|
||||
}
|
||||
|
||||
|
||||
void windowsSocket::sendRaw(const char* buffer, const int count)
|
||||
void windowsSocket::sendRaw(const char* buffer, const size_type count)
|
||||
{
|
||||
::send(m_desc, buffer, count, 0);
|
||||
}
|
||||
|
@ -69,6 +69,12 @@ bool SASLSocket::isConnected() const
|
||||
}
|
||||
|
||||
|
||||
SASLSocket::size_type SASLSocket::getBlockSize() const
|
||||
{
|
||||
return m_wrapped->getBlockSize();
|
||||
}
|
||||
|
||||
|
||||
void SASLSocket::receive(string& buffer)
|
||||
{
|
||||
const int n = receiveRaw(m_recvBuffer, sizeof(m_recvBuffer));
|
||||
@ -77,7 +83,7 @@ void SASLSocket::receive(string& buffer)
|
||||
}
|
||||
|
||||
|
||||
int SASLSocket::receiveRaw(char* buffer, const int count)
|
||||
SASLSocket::size_type SASLSocket::receiveRaw(char* buffer, const size_type count)
|
||||
{
|
||||
if (m_pendingLen != 0)
|
||||
{
|
||||
@ -141,7 +147,7 @@ void SASLSocket::send(const string& buffer)
|
||||
}
|
||||
|
||||
|
||||
void SASLSocket::sendRaw(const char* buffer, const int count)
|
||||
void SASLSocket::sendRaw(const char* buffer, const size_type count)
|
||||
{
|
||||
byte_t* output = 0;
|
||||
int outputLen = 0;
|
||||
|
@ -470,7 +470,7 @@ void outputStreamSocketAdapter::flush()
|
||||
|
||||
stream::size_type outputStreamSocketAdapter::getBlockSize()
|
||||
{
|
||||
return 16384; // 16 KB
|
||||
return m_socket.getBlockSize();
|
||||
}
|
||||
|
||||
|
||||
@ -513,7 +513,7 @@ stream::size_type inputStreamSocketAdapter::skip
|
||||
|
||||
stream::size_type inputStreamSocketAdapter::getBlockSize()
|
||||
{
|
||||
return 16384; // 16 KB
|
||||
return m_socket.getBlockSize();
|
||||
}
|
||||
|
||||
|
||||
|
@ -96,6 +96,8 @@ public:
|
||||
bool isSecuredConnection() const;
|
||||
ref <connectionInfos> getConnectionInfos() const;
|
||||
|
||||
ref <const socket> getSocket() const;
|
||||
|
||||
private:
|
||||
|
||||
void authenticate();
|
||||
|
@ -41,6 +41,11 @@ public:
|
||||
|
||||
virtual ~socket() { }
|
||||
|
||||
/** Type used for lengths in streams.
|
||||
*/
|
||||
typedef int size_type;
|
||||
|
||||
|
||||
/** Connect to the specified address and port.
|
||||
*
|
||||
* @param address server address (this can be a full qualified domain name
|
||||
@ -71,7 +76,7 @@ public:
|
||||
* @param count maximum number of bytes to receive (size of buffer)
|
||||
* @return number of bytes received/written into output buffer
|
||||
*/
|
||||
virtual int receiveRaw(char* buffer, const int count) = 0;
|
||||
virtual int receiveRaw(char* buffer, const size_type count) = 0;
|
||||
|
||||
/** Send (text) data to the socket.
|
||||
*
|
||||
@ -84,7 +89,14 @@ public:
|
||||
* @param buffer data to send
|
||||
* @param count number of bytes to send (size of buffer)
|
||||
*/
|
||||
virtual void sendRaw(const char* buffer, const int count) = 0;
|
||||
virtual void sendRaw(const char* buffer, const size_type count) = 0;
|
||||
|
||||
/** Return the preferred maximum block size when reading
|
||||
* from or writing to this stream.
|
||||
*
|
||||
* @return block size, in bytes
|
||||
*/
|
||||
virtual size_type getBlockSize() const = 0;
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -84,10 +84,12 @@ public:
|
||||
bool isConnected() const;
|
||||
|
||||
void receive(string& buffer);
|
||||
int receiveRaw(char* buffer, const int count);
|
||||
size_type receiveRaw(char* buffer, const size_type count);
|
||||
|
||||
void send(const string& buffer);
|
||||
void sendRaw(const char* buffer, const int count);
|
||||
void sendRaw(const char* buffer, const size_type count);
|
||||
|
||||
size_type getBlockSize() const;
|
||||
|
||||
private:
|
||||
|
||||
|
@ -48,10 +48,12 @@ public:
|
||||
void disconnect();
|
||||
|
||||
void receive(vmime::string& buffer);
|
||||
int receiveRaw(char* buffer, const int count);
|
||||
size_type receiveRaw(char* buffer, const size_type count);
|
||||
|
||||
void send(const vmime::string& buffer);
|
||||
void sendRaw(const char* buffer, const int count);
|
||||
void sendRaw(const char* buffer, const size_type count);
|
||||
|
||||
size_type getBlockSize() const;
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -50,10 +50,12 @@ public:
|
||||
void disconnect();
|
||||
|
||||
void receive(vmime::string& buffer);
|
||||
int receiveRaw(char* buffer, const int count);
|
||||
size_type receiveRaw(char* buffer, const size_type count);
|
||||
|
||||
void send(const vmime::string& buffer);
|
||||
void sendRaw(const char* buffer, const int count);
|
||||
void sendRaw(const char* buffer, const size_type count);
|
||||
|
||||
size_type getBlockSize() const;
|
||||
|
||||
private:
|
||||
|
||||
|
@ -53,10 +53,12 @@ public:
|
||||
bool isConnected() const;
|
||||
|
||||
void receive(string& buffer);
|
||||
int receiveRaw(char* buffer, const int count);
|
||||
size_type receiveRaw(char* buffer, const size_type count);
|
||||
|
||||
void send(const string& buffer);
|
||||
void sendRaw(const char* buffer, const int count);
|
||||
void sendRaw(const char* buffer, const size_type count);
|
||||
|
||||
size_type getBlockSize() const;
|
||||
|
||||
private:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user