/**
 * @file socket_utils.h
 * @brief Utility functionality for reading/writing commands to/from socket
 * declaration
 * @author Iaroslav Makarchuk (i.makarchuk@samsung.com)
 * @date Created Oct 3, 2016
 * @par In Samsung Ukraine R&D Center (SURC) under a contract between
 * @par LLC "Samsung Electronics Ukraine Company" (Kiev, Ukraine) and
 * @par "Samsung Elecrtronics Co", Ltd (Seoul, Republic of Korea)
 * @par Copyright: (c) Samsung Electronics Co, Ltd 2015. All rights reserved.
 *
 * This software is proprietary of Samsung Electronics.
 * No part of this software, either material or conceptual may be copied
 * or distributed, transmitted, transcribed, stored in a retrieval system
 * or translated into any human or computer language in any form by any means,
 * electronic, mechanical, manual or otherwise, or disclosed to third parties
 * without the express written permission of Samsung Electronics.
 */

#ifndef SOCKET_UTILS_H_
#define SOCKET_UTILS_H_

#include <protocol.h>
#include <sys/un.h>
#include <sys/socket.h>


typedef enum SocketStatusEnum {
  SocketStatusOk = 0,
  SocketStatusError,
} SocketStatus;

/**
 * @brief Reads command from the socket
 *
 * @param[in]      sock        Socket descriptor the command should be read from
 * @param[out]     command     A pointer to command structure to be filled with
 *                             data read from socket
 *
 * @retval   SocketStatusOk    Command read successfully
 * @retval   SocketStatusError Failed to read command from the specified socket
 */
SocketStatus ReadCommand(int sock, ProtocolCmd *command);

/**
 * @brief Writes command to the specified socket
 *
 * @param[in]      sock        Socket descriptor the command should be
 *                             writtten to
 * @param[in]      command     A pointer to command structure which should be
 *                             wrotten to the specified socket
 *
 * @retval   SocketStatusOk    Command written successfully
 * @retval   SocketStatusError Failed to write command to the specified socket
 */
SocketStatus WriteCommand(int sock, ProtocolCmd *command);

SocketStatus ReadPersObj(int sock, PersObjectCmd *po);
SocketStatus WritePersObj(int sock, PersObjectCmd *po);

SocketStatus ReadCancelData(int sock, PersObjectCmd *cancel_data);
SocketStatus WriteCancelData(int sock, PersObjectCmd *cancel_data);

SocketStatus ReadTimeData(int sock, PersObjectCmd *time_data);
SocketStatus WriteTimeData(int sock, PersObjectCmd *time_data);

SocketStatus OpenSocket(struct sockaddr_un *server, int *sock_);
int CheckSocketInput(int sock_, int msec);

#endif /* SOCKET_UTILS_H_ */
