Home | History | Annotate | Download | only in public
      1 /** @addtogroup MCD_MCDIMPL_DAEMON_SRV
      2  * @{
      3  * @file
      4  *
      5  * Connection server.
      6  *
      7  * Handles incoming socket connections from clients using the MobiCore driver.
      8  *
      9  * Iterative socket server using UNIX domain stream protocol.
     10  *
     11  * <!-- Copyright Giesecke & Devrient GmbH 2009 - 2012 -->
     12  *
     13  * Redistribution and use in source and binary forms, with or without
     14  * modification, are permitted provided that the following conditions
     15  * are met:
     16  * 1. Redistributions of source code must retain the above copyright
     17  *    notice, this list of conditions and the following disclaimer.
     18  * 2. Redistributions in binary form must reproduce the above copyright
     19  *    notice, this list of conditions and the following disclaimer in the
     20  *    documentation and/or other materials provided with the distribution.
     21  * 3. The name of the author may not be used to endorse or promote
     22  *    products derived from this software without specific prior
     23  *    written permission.
     24  *
     25  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
     26  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     27  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     28  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
     29  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     30  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
     31  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     32  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     33  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     34  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     35  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     36  */
     37 #ifndef SERVER_H_
     38 #define SERVER_H_
     39 
     40 #include <sys/types.h>
     41 #include <sys/socket.h>
     42 #include <sys/un.h>
     43 #include <string>
     44 #include <cstdio>
     45 #include <vector>
     46 #include "CThread.h"
     47 #include "ConnectionHandler.h"
     48 
     49 /** Number of incoming connections that can be queued.
     50  * Additional clients will generate the error ECONNREFUSED. */
     51 #define LISTEN_QUEUE_LEN    (16)
     52 
     53 
     54 class Server: public CThread
     55 {
     56 
     57 public:
     58     /**
     59      * Server contructor.
     60      *
     61      * @param connectionHanler Connection handler to pass incoming connections to.
     62      * @param localAdrerss Pointer to a zero terminated string containing the file to listen to.
     63      */
     64     Server(
     65         ConnectionHandler *connectionHandler,
     66         const char *localAddr
     67     );
     68 
     69     /**
     70      * Server destructor.
     71      * All available connections will be terminated. Resources will be freed.
     72      */
     73     virtual ~Server(
     74         void
     75     );
     76 
     77     /**
     78      * Start server and listen for incoming connections.
     79      * Implements the central socket server loop. Incoming connections will be stored.
     80      */
     81     virtual void run(
     82     );
     83 
     84     /**
     85      * Remove a connection object from the list of available connections.
     86      * Detaching is required for notification connections wich are never used to transfer command
     87      * data from TLCs to the driver. If the function succeeds, the connection object will no longer
     88      * be handled by the server.
     89      *
     90      * @param connection The connection object to remove.
     91      */
     92     virtual void detachConnection(
     93         Connection *connection
     94     );
     95 
     96 protected:
     97     int serverSock;
     98     string socketAddr;
     99     ConnectionHandler   *connectionHandler; /**< Connection handler registered to the server */
    100 
    101 private:
    102     connectionList_t    peerConnections; /**< Connections to devices */
    103 
    104 };
    105 
    106 #endif /* SERVER_H_ */
    107 
    108 /** @} */
    109