diff options
Diffstat (limited to 'src/components/media_manager/src/socket_streamer_adapter.cc')
-rw-r--r-- | src/components/media_manager/src/socket_streamer_adapter.cc | 90 |
1 files changed, 28 insertions, 62 deletions
diff --git a/src/components/media_manager/src/socket_streamer_adapter.cc b/src/components/media_manager/src/socket_streamer_adapter.cc index 2bb0fe10ec..7de5e2ce8f 100644 --- a/src/components/media_manager/src/socket_streamer_adapter.cc +++ b/src/components/media_manager/src/socket_streamer_adapter.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Ford Motor Company + * Copyright (c) 2015, Ford Motor Company * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,22 +30,15 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include <sys/socket.h> -#include <sys/types.h> -#include <sys/select.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <netdb.h> -#include <unistd.h> -#include "utils/logger.h" #include "media_manager/socket_streamer_adapter.h" +#include "utils/logger.h" namespace media_manager { CREATE_LOGGERPTR_GLOBAL(logger, "SocketStreamerAdapter") SocketStreamerAdapter::SocketStreamerAdapter(const std::string& ip, - const uint16_t port, + int32_t port, const std::string& header) : StreamerAdapter(new SocketStreamer(this, ip, port, header)) {} @@ -54,95 +47,68 @@ SocketStreamerAdapter::~SocketStreamerAdapter() {} SocketStreamerAdapter::SocketStreamer::SocketStreamer( SocketStreamerAdapter* const adapter, const std::string& ip, - const uint16_t port, + int32_t port, const std::string& header) : Streamer(adapter) , ip_(ip) , port_(port) , header_(header) - , socket_fd_(0) - , send_socket_fd_(0) + , server_socket_() + , client_socket_() , is_first_frame_(true) {} SocketStreamerAdapter::SocketStreamer::~SocketStreamer() {} bool SocketStreamerAdapter::SocketStreamer::Connect() { - LOG4CXX_AUTO_TRACE(logger); - socket_fd_ = socket(AF_INET, SOCK_STREAM, 0); - if (0 >= socket_fd_) { - LOG4CXX_ERROR(logger, "Unable to create socket"); - return false; - } - - int32_t optval = 1; - if (-1 == setsockopt( - socket_fd_, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval)) { - LOG4CXX_ERROR(logger, "Unable to set sockopt"); - return false; - } - - struct sockaddr_in serv_addr_ = {0}; - serv_addr_.sin_addr.s_addr = inet_addr(ip_.c_str()); - serv_addr_.sin_family = AF_INET; - serv_addr_.sin_port = htons(port_); - if (-1 == bind(socket_fd_, - reinterpret_cast<struct sockaddr*>(&serv_addr_), - sizeof(serv_addr_))) { - LOG4CXX_ERROR(logger, "Unable to bind"); - return false; - } + LOGGER_AUTO_TRACE(logger); - if (-1 == listen(socket_fd_, 5)) { - LOG4CXX_ERROR(logger, "Unable to listen"); + const int backlog = 5; + if (!server_socket_.Listen(utils::HostAddress(ip_), port_, backlog)) { + LOGGER_ERROR(logger, "Unable to listen"); return false; } - send_socket_fd_ = accept(socket_fd_, NULL, NULL); - if (0 >= send_socket_fd_) { - LOG4CXX_ERROR(logger, "Unable to accept"); + client_socket_ = server_socket_.Accept(); + if (!client_socket_.IsValid()) { + LOGGER_ERROR(logger, "Unable to accept"); return false; } is_first_frame_ = true; - LOG4CXX_INFO(logger, "Client connected: " << send_socket_fd_); + LOGGER_INFO(logger, "Client connected"); return true; } void SocketStreamerAdapter::SocketStreamer::Disconnect() { - LOG4CXX_AUTO_TRACE(logger); - if (0 < send_socket_fd_) { - close(send_socket_fd_); - } - if (0 < socket_fd_) { - close(socket_fd_); - } + LOGGER_AUTO_TRACE(logger); + client_socket_.Close(); + server_socket_.Close(); } bool SocketStreamerAdapter::SocketStreamer::Send( protocol_handler::RawMessagePtr msg) { - LOG4CXX_AUTO_TRACE(logger); - ssize_t ret; + LOGGER_AUTO_TRACE(logger); + std::size_t written = 0u; if (is_first_frame_) { - ret = send(send_socket_fd_, header_.c_str(), header_.size(), MSG_NOSIGNAL); - if (static_cast<uint32_t>(ret) != header_.size()) { - LOG4CXX_ERROR(logger, "Unable to send data to socket"); + bool sent = client_socket_.Send(header_.c_str(), header_.size(), written); + if (!sent || written != header_.size()) { + LOGGER_ERROR(logger, "Unable to send data to socket"); return false; } is_first_frame_ = false; } - ret = send(send_socket_fd_, msg->data(), msg->data_size(), MSG_NOSIGNAL); - if (-1 == ret) { - LOG4CXX_ERROR(logger, "Unable to send data to socket"); + bool sent = client_socket_.Send(msg->data(), msg->data_size(), written); + if (!sent) { + LOGGER_ERROR(logger, "Unable to send data to socket"); return false; } - if (static_cast<uint32_t>(ret) != msg->data_size()) { - LOG4CXX_WARN(logger, - "Couldn't send all the data to socket " << send_socket_fd_); + if (written != msg->data_size()) { + LOGGER_WARN(logger, "Couldn't send all the data to socket"); } - LOG4CXX_INFO(logger, "Streamer::sent " << msg->data_size()); + LOGGER_INFO(logger, "Streamer::sent " << msg->data_size()); return true; } |