• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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