Commit 69d97159 authored by Lucian Grijincu's avatar Lucian Grijincu Committed by Facebook Github Bot

folly: AsyncSocketException: move implementation to .cpp, refactor

Reviewed By: yfeldblum

Differential Revision: D6042832

fbshipit-source-id: c716ee672c4acfa39cab9f10f3b3f88ca770cd20
parent d31633e6
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <chrono> #include <chrono>
#include <folly/Bits.h> #include <folly/Bits.h>
#include <folly/Format.h>
#include <folly/SocketAddress.h> #include <folly/SocketAddress.h>
#include <folly/SpinLock.h> #include <folly/SpinLock.h>
#include <folly/io/Cursor.h> #include <folly/io/Cursor.h>
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <folly/io/async/AsyncSocket.h> #include <folly/io/async/AsyncSocket.h>
#include <folly/ExceptionWrapper.h> #include <folly/ExceptionWrapper.h>
#include <folly/Format.h>
#include <folly/Portability.h> #include <folly/Portability.h>
#include <folly/SocketAddress.h> #include <folly/SocketAddress.h>
#include <folly/io/Cursor.h> #include <folly/io/Cursor.h>
......
/*
* Copyright 2017 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "folly/io/async/AsyncSocketException.h"
#include <folly/Format.h>
#include <folly/String.h>
namespace folly {
/* static */ StringPiece AsyncSocketException::getExceptionTypeString(
AsyncSocketExceptionType type) {
switch (type) {
case UNKNOWN:
return "Unknown async socket exception";
case NOT_OPEN:
return "Socket not open";
case ALREADY_OPEN:
return "Socket already open";
case TIMED_OUT:
return "Timed out";
case END_OF_FILE:
return "End of file";
case INTERRUPTED:
return "Interrupted";
case BAD_ARGS:
return "Invalid arguments";
case CORRUPTED_DATA:
return "Corrupted Data";
case INTERNAL_ERROR:
return "Internal error";
case NOT_SUPPORTED:
return "Not supported";
case INVALID_STATE:
return "Invalid state";
case SSL_ERROR:
return "SSL error";
case COULD_NOT_BIND:
return "Could not bind";
case SASL_HANDSHAKE_TIMEOUT:
return "SASL handshake timeout";
case NETWORK_ERROR:
return "Network error";
case EARLY_DATA_REJECTED:
return "Early data rejected";
default:
return "(Invalid exception type)";
}
}
/* static */ std::string AsyncSocketException::getMessage(
AsyncSocketExceptionType type,
const std::string& message,
int errnoCopy) {
if (errnoCopy != 0) {
return sformat(
"AsyncSocketException: {}, type = {}, errno = {} ({})",
message,
getExceptionTypeString(type),
errnoCopy,
errnoStr(errnoCopy));
} else {
return sformat(
"AsyncSocketException: {}, type = {}",
message,
getExceptionTypeString(type));
}
}
} // namespace folly
...@@ -17,9 +17,9 @@ ...@@ -17,9 +17,9 @@
#pragma once #pragma once
#include <stdexcept> #include <stdexcept>
#include <string>
#include <folly/Format.h> #include <folly/Range.h>
#include <folly/io/async/DelayedDestruction.h>
namespace folly { namespace folly {
...@@ -44,13 +44,13 @@ class AsyncSocketException : public std::runtime_error { ...@@ -44,13 +44,13 @@ class AsyncSocketException : public std::runtime_error {
EARLY_DATA_REJECTED = 16, EARLY_DATA_REJECTED = 16,
}; };
AsyncSocketException(AsyncSocketExceptionType type, AsyncSocketException(
const std::string& message, AsyncSocketExceptionType type,
int errno_copy = 0) const std::string& message,
: std::runtime_error( int errnoCopy = 0)
AsyncSocketException::getMessage(type, message, errno_copy)), : std::runtime_error(getMessage(type, message, errnoCopy)),
type_(type), type_(type),
errno_(errno_copy) {} errno_(errnoCopy) {}
/** Error code */ /** Error code */
AsyncSocketExceptionType type_; AsyncSocketExceptionType type_;
...@@ -58,73 +58,24 @@ class AsyncSocketException : public std::runtime_error { ...@@ -58,73 +58,24 @@ class AsyncSocketException : public std::runtime_error {
/** A copy of the errno. */ /** A copy of the errno. */
int errno_; int errno_;
AsyncSocketExceptionType getType() const noexcept { return type_; } AsyncSocketExceptionType getType() const noexcept {
int getErrno() const noexcept { return errno_; } return type_;
}
protected: int getErrno() const noexcept {
/** Just like strerror_r but returns a C++ string object. */ return errno_;
static std::string strerror_s(int errno_copy) {
return folly::sformat("errno = {} ({})", errno_copy, strerror(errno_copy));
} }
protected:
/** get the string of exception type */ /** get the string of exception type */
static folly::StringPiece getExceptionTypeString( static folly::StringPiece getExceptionTypeString(
AsyncSocketExceptionType type) { AsyncSocketExceptionType type);
switch (type) {
case UNKNOWN:
return "Unknown async socket exception";
case NOT_OPEN:
return "Socket not open";
case ALREADY_OPEN:
return "Socket already open";
case TIMED_OUT:
return "Timed out";
case END_OF_FILE:
return "End of file";
case INTERRUPTED:
return "Interrupted";
case BAD_ARGS:
return "Invalid arguments";
case CORRUPTED_DATA:
return "Corrupted Data";
case INTERNAL_ERROR:
return "Internal error";
case NOT_SUPPORTED:
return "Not supported";
case INVALID_STATE:
return "Invalid state";
case SSL_ERROR:
return "SSL error";
case COULD_NOT_BIND:
return "Could not bind";
case SASL_HANDSHAKE_TIMEOUT:
return "SASL handshake timeout";
case NETWORK_ERROR:
return "Network error";
case EARLY_DATA_REJECTED:
return "Early data rejected";
default:
return "(Invalid exception type)";
}
}
/** Return a message based on the input. */ /** Return a message based on the input. */
static std::string getMessage(AsyncSocketExceptionType type, static std::string getMessage(
const std::string& message, AsyncSocketExceptionType type,
int errno_copy) { const std::string& message,
if (errno_copy != 0) { int errnoCopy);
return folly::sformat(
"AsyncSocketException: {}, type = {}, errno = {} ({})",
message,
AsyncSocketException::getExceptionTypeString(type),
errno_copy,
strerror(errno_copy));
} else {
return folly::sformat("AsyncSocketException: {}, type = {}",
message,
AsyncSocketException::getExceptionTypeString(type));
}
}
}; };
} // namespace folly } // namespace folly
...@@ -14,18 +14,18 @@ ...@@ -14,18 +14,18 @@
* limitations under the License. * limitations under the License.
*/ */
#include <thread>
#include <folly/Conv.h>
#include <folly/SocketAddress.h> #include <folly/SocketAddress.h>
#include <folly/io/IOBuf.h>
#include <folly/io/async/AsyncTimeout.h> #include <folly/io/async/AsyncTimeout.h>
#include <folly/io/async/AsyncUDPServerSocket.h> #include <folly/io/async/AsyncUDPServerSocket.h>
#include <folly/io/async/AsyncUDPSocket.h> #include <folly/io/async/AsyncUDPSocket.h>
#include <folly/io/async/EventBase.h> #include <folly/io/async/EventBase.h>
#include <folly/io/IOBuf.h>
#include <folly/portability/GMock.h> #include <folly/portability/GMock.h>
#include <folly/portability/GTest.h> #include <folly/portability/GTest.h>
#include <thread>
using folly::AsyncUDPSocket; using folly::AsyncUDPSocket;
using folly::AsyncUDPServerSocket; using folly::AsyncUDPServerSocket;
using folly::AsyncTimeout; using folly::AsyncTimeout;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment