|
|
NVIDIA DeepStream SDK API Reference
|
9.2 Release
|
Go to the documentation of this file.
12 #ifdef HAVE_HTTP_DEBUG
15 # define LOG_TRACE(x, ...) printf(x "\n", __VA_ARGS__)
19 #ifndef HTTP_SERVER_NS
20 # define HTTP_SERVER_NS testing
36 std::map<std::string, std::string>
headers;
44 std::map<std::string, std::string>
headers;
138 second = other.second;
173 std::ostringstream os;
174 os << serverHost <<
":" << port;
217 LOG_INFO(
"HttpServer: Added handler for %s", root.c_str());
225 LOG_INFO(
"HttpServer: Added handler for %s", root.c_str());
231 LOG_INFO(
"HttpServer: Added handler for %s", other.first.c_str());
249 if (socket.
accept(csocket, caddr))
276 char buffer[2048] = {0};
277 int received = socket.
recv(buffer,
sizeof(buffer));
381 if (ofs == std::string::npos)
386 size_t headersLen = (ofs != std::string::npos) ? ofs : conn.
receiveBuffer.length();
390 static_cast<unsigned>(headersLen));
396 if (ofs == std::string::npos)
428 auto const contentLength = conn.
request.
headers.find(
"Content-Length");
453 expect->second.c_str());
459 conn.
sendBuffer =
"HTTP/1.1 100 Continue\r\n\r\n";
506 std::ostringstream os;
511 os << header.first <<
": " << header.second <<
"\r\n";
572 char const *ptr = begin;
573 while (*ptr && *ptr !=
' ' && *ptr !=
'\r' && *ptr !=
'\n')
589 while (*ptr && *ptr !=
' ' && *ptr !=
'\r' && *ptr !=
'\n')
605 while (*ptr && *ptr !=
' ' && *ptr !=
'\r' && *ptr !=
'\n')
609 if (*ptr !=
'\r' && *ptr !=
'\n')
626 while (*ptr !=
'\r' && *ptr !=
'\n')
630 while (*ptr && *ptr !=
':' && *ptr !=
' ' && *ptr !=
'\r' && *ptr !=
'\n')
647 while (*ptr && *ptr !=
'\r' && *ptr !=
'\n')
654 conn.
request.
headers[name].append(
",").append(std::string(begin, ptr));
686 char const *ptr = str.c_str();
687 while (*ptr && *mask && ::tolower(*ptr) == *mask)
692 return !*ptr && !*mask;
697 std::string result(begin,
end);
699 for (
char &ch : result)
703 ch =
static_cast<char>(::toupper(ch));
712 ch =
static_cast<char>(::tolower(ch));
729 if (conn.
request.
uri.length() >= handler.first.length() &&
730 strncmp(conn.
request.
uri.c_str(), handler.first.c_str(), handler.first.length()) == 0)
733 handler.first.c_str());
736 int result = handler.second->onHttpRequest(conn.
request, conn.
response);
767 gmtime_s(&tm, &time);
769 gmtime_r(&time, &tm);
772 strftime(buf,
sizeof(buf),
"%a, %d %b %Y %H:%M:%S GMT", &tm);
785 return "Switching Protocols";
793 return "Non-Authoritative Information";
797 return "Reset Content";
799 return "Partial Content";
801 return "Multiple Choices";
803 return "Moved Permanently";
809 return "Not Modified";
813 return "Switch Proxy";
815 return "Temporary Redirect";
817 return "Permanent Redirect";
819 return "Bad Request";
821 return "Unauthorized";
823 return "Payment Required";
829 return "Method Not Allowed";
831 return "Not Acceptable";
833 return "Proxy Authentication Required";
835 return "Request Timeout";
841 return "Length Required";
843 return "Precondition Failed";
845 return "Payload Too Large";
847 return "URI Too Long";
849 return "Unsupported Media Type";
851 return "Range Not Satisfiable";
853 return "Expectation Failed";
855 return "Misdirected Request";
857 return "Upgrade Required";
859 return "Precondition Required";
861 return "Too Many Requests";
863 return "Request Header Fields Too Large";
865 return "Internal Server Error";
867 return "Not Implemented";
869 return "Bad Gateway";
871 return "Service Unavailable";
873 return "Gateway Timeout";
875 return "HTTP Version Not Supported";
877 return "Variant Also Negotiates";
879 return "Not Extended";
881 return "Network Authentication Required";
HttpRequestHandler & operator[](const std::string &root)
void handleConnection(Connection &conn)
constexpr const char * find
void setServerName(std::string const &name)
SocketTools::Reactor m_reactor
void setRequestLimits(size_t maxRequestHeadersSize, size_t maxRequestContentSize)
HttpRequestHandler & operator=(HttpRequestCallback &cb)
HttpRequestHandler & addHandler(const std::string &root, HttpRequestCallback &handler)
CallbackFunction callback
constexpr const char * CONTENT_TYPE
HttpServer & operator+=(std::pair< const std::string &, HttpRequestCallback & > other)
virtual void onSocketWritable(SocketTools::Socket socket) override
HttpServer(const std::string &serverHost, int port=30000)
virtual void onSocketAcceptable(SocketTools::Socket socket) override
std::string receiveBuffer
static std::string normalizeHeaderName(char const *begin, char const *end)
size_t m_maxRequestHeadersSize
HttpRequestCallback & operator=(CallbackFunction func)
bool sendMore(Connection &conn)
virtual void onSocketReadable(SocketTools::Socket socket) override
std::map< std::string, std::string > headers
SocketTools::Socket socket
size_t m_maxRequestContentSize
constexpr absl::OTABSL_OPTION_NAMESPACE_NAME::remove_reference_t< T > && move(T &&t) noexcept
void setKeepalive(bool keepAlive)
std::map< SocketTools::Socket, Connection > m_connections
static bool equalsLowercased(std::string const &str, char const *mask)
virtual ~HttpRequestCallback()=default
std::map< std::string, std::string > headers
enum HTTP_SERVER_NS::HttpServer::Connection::@30 state
std::list< SocketTools::Socket > m_listeningSockets
std::list< HttpRequestHandler > m_handlers
int addListeningPort(int port)
virtual void onSocketClosed(SocketTools::Socket socket) override
HttpRequestHandler(const std::string &key, HttpRequestCallback *value)
Extensions to the C++ standard library.
HttpRequestHandler & operator=(std::pair< std::string, HttpRequestCallback * > other)
constexpr const char * CONTENT_TYPE_BIN
std::function< int(HttpRequest const &request, HttpResponse &response)> CallbackFunction
HttpRequestCallback(CallbackFunction func)
HttpRequestCallback & operator=(HttpRequestCallback other)
static const char * getDefaultResponseMessage(int code)
constexpr const char * CONTENT_TYPE_TEXT
void handleConnectionClosed(Connection &conn)
bool parseHeaders(Connection &conn)
void processRequest(Connection &conn)
HttpRequestHandler & operator=(HttpRequestCallback *cb)
static std::string formatTimestamp(time_t time)
virtual int onHttpRequest(HttpRequest const &request, HttpResponse &response)
#define LOG_INFO(fmt,...)
constexpr const char * end