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 @@
#include <chrono>
#include <folly/Bits.h>
#include <folly/Format.h>
#include <folly/SocketAddress.h>
#include <folly/SpinLock.h>
#include <folly/io/Cursor.h>
......
......@@ -17,6 +17,7 @@
#include <folly/io/async/AsyncSocket.h>
#include <folly/ExceptionWrapper.h>
#include <folly/Format.h>
#include <folly/Portability.h>
#include <folly/SocketAddress.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 @@
#pragma once
#include <stdexcept>
#include <string>
#include <folly/Format.h>
#include <folly/io/async/DelayedDestruction.h>
#include <folly/Range.h>
namespace folly {
......@@ -44,13 +44,13 @@ class AsyncSocketException : public std::runtime_error {
EARLY_DATA_REJECTED = 16,
};
AsyncSocketException(AsyncSocketExceptionType type,
const std::string& message,
int errno_copy = 0)
: std::runtime_error(
AsyncSocketException::getMessage(type, message, errno_copy)),
AsyncSocketException(
AsyncSocketExceptionType type,
const std::string& message,
int errnoCopy = 0)
: std::runtime_error(getMessage(type, message, errnoCopy)),
type_(type),
errno_(errno_copy) {}
errno_(errnoCopy) {}
/** Error code */
AsyncSocketExceptionType type_;
......@@ -58,73 +58,24 @@ class AsyncSocketException : public std::runtime_error {
/** A copy of the errno. */
int errno_;
AsyncSocketExceptionType getType() const noexcept { return type_; }
int getErrno() const noexcept { return errno_; }
AsyncSocketExceptionType getType() const noexcept {
return type_;
}
protected:
/** Just like strerror_r but returns a C++ string object. */
static std::string strerror_s(int errno_copy) {
return folly::sformat("errno = {} ({})", errno_copy, strerror(errno_copy));
int getErrno() const noexcept {
return errno_;
}
protected:
/** get the string of exception type */
static folly::StringPiece 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)";
}
}
AsyncSocketExceptionType type);
/** Return a message based on the input. */
static std::string getMessage(AsyncSocketExceptionType type,
const std::string& message,
int errno_copy) {
if (errno_copy != 0) {
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));
}
}
static std::string getMessage(
AsyncSocketExceptionType type,
const std::string& message,
int errnoCopy);
};
} // namespace folly
......@@ -14,18 +14,18 @@
* limitations under the License.
*/
#include <thread>
#include <folly/Conv.h>
#include <folly/SocketAddress.h>
#include <folly/io/IOBuf.h>
#include <folly/io/async/AsyncTimeout.h>
#include <folly/io/async/AsyncUDPServerSocket.h>
#include <folly/io/async/AsyncUDPSocket.h>
#include <folly/io/async/EventBase.h>
#include <folly/io/IOBuf.h>
#include <folly/portability/GMock.h>
#include <folly/portability/GTest.h>
#include <thread>
using folly::AsyncUDPSocket;
using folly::AsyncUDPServerSocket;
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