simplify socket interface
This commit is contained in:
parent
5d641bc267
commit
8a344788ba
@ -73,7 +73,7 @@ namespace ix
|
|||||||
virtual void close();
|
virtual void close();
|
||||||
|
|
||||||
virtual ssize_t send(char* buffer, size_t length);
|
virtual ssize_t send(char* buffer, size_t length);
|
||||||
virtual ssize_t send(const std::string& buffer);
|
ssize_t send(const std::string& buffer);
|
||||||
virtual ssize_t recv(void* buffer, size_t length);
|
virtual ssize_t recv(void* buffer, size_t length);
|
||||||
|
|
||||||
// Blocking and cancellable versions, working with socket that can be set
|
// Blocking and cancellable versions, working with socket that can be set
|
||||||
|
@ -112,45 +112,10 @@ namespace ix
|
|||||||
|
|
||||||
OSStatus SocketAppleSSL::writeToSocket(SSLConnectionRef connection,
|
OSStatus SocketAppleSSL::writeToSocket(SSLConnectionRef connection,
|
||||||
const void* data,
|
const void* data,
|
||||||
size_t* dataLength)
|
size_t* len)
|
||||||
{
|
{
|
||||||
#if 1
|
int fd = (int) (long) connection;
|
||||||
int sock = (int) (long) connection;
|
if (fd < 0) return errSSLInternal;
|
||||||
if (sock < 0) return errSSLInternal;
|
|
||||||
|
|
||||||
size_t bytesSent = 0;
|
|
||||||
|
|
||||||
ssize_t length;
|
|
||||||
size_t dataLen = *dataLength;
|
|
||||||
const UInt8 *dataPtr = (UInt8 *)data;
|
|
||||||
OSStatus ortn;
|
|
||||||
int theErr;
|
|
||||||
|
|
||||||
*dataLength = 0;
|
|
||||||
|
|
||||||
do {
|
|
||||||
length = write(sock,
|
|
||||||
(char *)dataPtr + bytesSent,
|
|
||||||
dataLen - bytesSent);
|
|
||||||
} while((length > 0) &&
|
|
||||||
( (bytesSent += length) < dataLen) );
|
|
||||||
|
|
||||||
if(length <= 0) {
|
|
||||||
theErr = errno;
|
|
||||||
if(theErr == EAGAIN) {
|
|
||||||
ortn = errSSLWouldBlock;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ortn = errSecIO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ortn = noErr;
|
|
||||||
}
|
|
||||||
*dataLength = bytesSent;
|
|
||||||
return ortn;
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
assert(data != nullptr);
|
assert(data != nullptr);
|
||||||
assert(len != nullptr);
|
assert(len != nullptr);
|
||||||
@ -190,7 +155,6 @@ namespace ix
|
|||||||
default: return errSecIO;
|
default: return errSecIO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -274,29 +238,31 @@ namespace ix
|
|||||||
|
|
||||||
ssize_t SocketAppleSSL::send(char* buf, size_t nbyte)
|
ssize_t SocketAppleSSL::send(char* buf, size_t nbyte)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
OSStatus status = errSSLWouldBlock;
|
||||||
|
while (status == errSSLWouldBlock)
|
||||||
size_t processed = 0;
|
|
||||||
OSStatus status = SSLWrite(_sslContext, buf, nbyte, &processed);
|
|
||||||
|
|
||||||
if (status == noErr)
|
|
||||||
{
|
{
|
||||||
return processed;
|
size_t processed = 0;
|
||||||
}
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
else if (status == errSSLWouldBlock)
|
status = SSLWrite(_sslContext, buf, nbyte, &processed);
|
||||||
{
|
|
||||||
errno = EWOULDBLOCK;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t SocketAppleSSL::send(const std::string& buffer)
|
if (processed > 0) return (ssize_t) processed;
|
||||||
{
|
|
||||||
return send((char*) &buffer[0], buffer.size());
|
// The connection was reset, inform the caller that this
|
||||||
|
// Socket should close
|
||||||
|
if (status == errSSLClosedGraceful || status == errSSLClosedNoNotify ||
|
||||||
|
status == errSSLClosedAbort)
|
||||||
|
{
|
||||||
|
errno = ECONNRESET;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == errSSLWouldBlock)
|
||||||
|
{
|
||||||
|
errno = EWOULDBLOCK;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No wait support
|
// No wait support
|
||||||
|
@ -30,7 +30,6 @@ namespace ix
|
|||||||
virtual void close() final;
|
virtual void close() final;
|
||||||
|
|
||||||
virtual ssize_t send(char* buffer, size_t length) final;
|
virtual ssize_t send(char* buffer, size_t length) final;
|
||||||
virtual ssize_t send(const std::string& buffer) final;
|
|
||||||
virtual ssize_t recv(void* buffer, size_t length) final;
|
virtual ssize_t recv(void* buffer, size_t length) final;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -249,11 +249,6 @@ namespace ix
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t SocketMbedTLS::send(const std::string& buffer)
|
|
||||||
{
|
|
||||||
return send((char*) &buffer[0], buffer.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t SocketMbedTLS::recv(void* buf, size_t nbyte)
|
ssize_t SocketMbedTLS::recv(void* buf, size_t nbyte)
|
||||||
{
|
{
|
||||||
while (true)
|
while (true)
|
||||||
|
@ -35,7 +35,6 @@ namespace ix
|
|||||||
virtual void close() final;
|
virtual void close() final;
|
||||||
|
|
||||||
virtual ssize_t send(char* buffer, size_t length) final;
|
virtual ssize_t send(char* buffer, size_t length) final;
|
||||||
virtual ssize_t send(const std::string& buffer) final;
|
|
||||||
virtual ssize_t recv(void* buffer, size_t length) final;
|
virtual ssize_t recv(void* buffer, size_t length) final;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -629,11 +629,6 @@ namespace ix
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t SocketOpenSSL::send(const std::string& buffer)
|
|
||||||
{
|
|
||||||
return send((char*) &buffer[0], buffer.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t SocketOpenSSL::recv(void* buf, size_t nbyte)
|
ssize_t SocketOpenSSL::recv(void* buf, size_t nbyte)
|
||||||
{
|
{
|
||||||
while (true)
|
while (true)
|
||||||
|
@ -33,7 +33,6 @@ namespace ix
|
|||||||
virtual void close() final;
|
virtual void close() final;
|
||||||
|
|
||||||
virtual ssize_t send(char* buffer, size_t length) final;
|
virtual ssize_t send(char* buffer, size_t length) final;
|
||||||
virtual ssize_t send(const std::string& buffer) final;
|
|
||||||
virtual ssize_t recv(void* buffer, size_t length) final;
|
virtual ssize_t recv(void* buffer, size_t length) final;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Loading…
Reference in New Issue
Block a user