Home | History | Annotate | Download | only in Common
      1 /** @addtogroup MCD_MCDIMPL_DAEMON_SRV
      2  * @{
      3  * @file
      4  *
      5  * Connection data.
      6  *
      7  * <!-- Copyright Giesecke & Devrient GmbH 2009 - 2012 -->
      8  *
      9  * Redistribution and use in source and binary forms, with or without
     10  * modification, are permitted provided that the following conditions
     11  * are met:
     12  * 1. Redistributions of source code must retain the above copyright
     13  *    notice, this list of conditions and the following disclaimer.
     14  * 2. Redistributions in binary form must reproduce the above copyright
     15  *    notice, this list of conditions and the following disclaimer in the
     16  *    documentation and/or other materials provided with the distribution.
     17  * 3. The name of the author may not be used to endorse or promote
     18  *    products derived from this software without specific prior
     19  *    written permission.
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
     22  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     23  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
     25  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
     27  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     29  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     30  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     31  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32  */
     33 #ifndef CONNECTION_H_
     34 #define CONNECTION_H_
     35 
     36 #include <list>
     37 #include <exception>
     38 
     39 #include <inttypes.h>
     40 
     41 #include <sys/types.h>
     42 #include <sys/socket.h>
     43 #include <sys/un.h>
     44 
     45 
     46 class Connection
     47 {
     48 
     49 public:
     50     struct sockaddr_un remote; /**< Remote address */
     51     int32_t socketDescriptor; /**< Local socket descriptor */
     52     void *connectionData; /**< reference to data related with the connection */
     53     bool detached; /**< Connection state */
     54 
     55     Connection(
     56         void
     57     );
     58 
     59     Connection(
     60         int          socketDescriptor,
     61         sockaddr_un  *remote
     62     );
     63 
     64     virtual ~Connection(
     65         void
     66     );
     67 
     68     /**
     69      * Connect to destination.
     70      *
     71      * @param Destination pointer.
     72      * @return true on success.
     73      */
     74     virtual bool connect(
     75         const char *dest
     76     );
     77 
     78     /**
     79      * Read bytes from the connection.
     80      *
     81      * @param buffer    Pointer to destination buffer.
     82      * @param len       Number of bytes to read.
     83      * @param timeout   Timeout in milliseconds
     84      * @return Number of bytes read.
     85      * @return -1 if select() failed (returned -1)
     86      * @return -2 if no data available, i.e. timeout
     87      */
     88     virtual size_t readData(void *buffer, uint32_t len, int32_t timeout);
     89 
     90     /**
     91      * Read bytes from the connection.
     92      *
     93      * @param buffer    Pointer to destination buffer.
     94      * @param len       Number of bytes to read.
     95      * @return Number of bytes read.
     96      */
     97     virtual size_t readData(void *buffer, uint32_t len);
     98 
     99     /**
    100      * Write bytes to the connection.
    101      *
    102      * @param buffer    Pointer to source buffer.
    103      * @param len       Number of bytes to read.
    104      * @return Number of bytes written.
    105      * @return -1 if written bytes not equal to len.
    106      */
    107     virtual size_t writeData(void *buffer, uint32_t len);
    108 
    109     /**
    110      * Wait for data to be available.
    111      *
    112      * @param timeout   Timeout in milliseconds
    113      * @return 0 if data is available
    114      * @return error code if otherwise
    115      */
    116     virtual int waitData(int32_t timeout);
    117 
    118 };
    119 
    120 typedef std::list<Connection *>         connectionList_t;
    121 typedef connectionList_t::iterator     connectionIterator_t;
    122 
    123 
    124 #endif /* CONNECTION_H_ */
    125 
    126 /** @} */
    127