LTP GCOV extension - code coverage report
Current view: directory - src/cpp/prod/CORBA - YAServerOrb.cpp
Test: YAORB-0.2.info
Date: 2006-02-27 Instrumented lines: 58
Code covered: 67.2 % Executed lines: 39

       1                 : //=============================================================================
       2                 : // File <$/src/cpp/prod/CORBA/YAServerOrb.cpp>
       3                 : // This file is part of YaOrb : Yet Another Object Request Broker,
       4                 : // Copyright (c) 2000-2003, Marc Alff.
       5                 : //
       6                 : // This program is free software; you can redistribute it and/or
       7                 : // modify it under the terms of the GNU General Public License
       8                 : // as published by the Free Software Foundation; either version 2
       9                 : // of the License, or (at your option) any later version.
      10                 : //
      11                 : // This program is distributed in the hope that it will be useful,
      12                 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13                 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14                 : // GNU General Public License for more details.
      15                 : //
      16                 : // You should have received a copy of the GNU General Public License
      17                 : // along with this program; if not, write to the Free Software
      18                 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
      19                 : //
      20                 : //=============================================================================
      21                 : 
      22                 : // Portability
      23                 : #include "yaorb/config.h"
      24                 : #include "src/cpp/prod/port/port_time.h"
      25                 : #include "src/cpp/prod/port/port_stdc.h"
      26                 : #include "src/cpp/prod/port/port_socket.h"
      27                 : #include "src/cpp/prod/port/port_unistd.h"
      28                 : 
      29                 : #include <sys/types.h>
      30                 : #include <sys/select.h>
      31                 : #include <sys/un.h>
      32                 : #include <rpc/types.h>
      33                 : #include <stdio.h>
      34                 : 
      35                 : #include <yaorb/CORBA.h>
      36                 : 
      37                 : #include "src/cpp/prod/CORBA/YAServerOrb.h"
      38                 : #include "src/cpp/prod/CORBA/YAConnection.h"
      39                 : #include "src/cpp/prod/boot/boot.h"
      40                 : #include "src/cpp/prod/tool/DEVELOPMENT.h"
      41                 : #include "src/cpp/prod/tool/Assert.h"
      42                 : #include "src/cpp/prod/protocol/iop/iop.h"
      43                 : #include "src/cpp/prod/protocol/cdr/cdr_memory.h"
      44                 : 
      45                 : // Max number of pending connect request on the _listning socket.
      46                 : const int NUMBER_OF_CONNECTIONS = 5 ;
      47                 : 
      48                 : //==============================================================================
      49                 : // SERVICES
      50                 : //==============================================================================
      51                 : #define SERVICE_ROOT_POA             (const char*)"RootPOA"
      52                 : #define SERVICE_POA_CURRENT          (const char*)"POACurrent"
      53                 : #define SERVICE_INTERFACE_REPOSITORY (const char*)"InterfaceRepository"
      54                 : #define SERVICE_NAME_SERVICE         (const char*)"NameService"
      55                 : #define SERVICE_TRADING_SERVICE      (const char*)"TradingService"
      56                 : #define SERVICE_SECURITY_CURRENT     (const char*)"SecurityCurrent"
      57                 : #define SERVICE_TRANSACTION_CURRENT  (const char*)"TransactionCurrent"
      58                 : #define SERVICE_DYN_ANY_FACTORY      (const char*)"DynAnyFactory"
      59                 : 
      60                 : //==============================================================================
      61                 : // YAServerORB.
      62                 : //==============================================================================
      63                 : 
      64               3 : YAServerOrb::YAServerOrb(const String & confFileName)
      65                 : : YAOrb(confFileName),
      66                 :    _listningSocket(0),
      67                 :    _listningPort(0),
      68               3 :    _rootPOA(NULL)
      69                 : {
      70                 :    int rc ;
      71                 :    int port ;
      72                 : 
      73                 :    CORBA::Boolean brc ;
      74               3 :    String portString ;
      75               3 :    brc = readConf("SERVER", "PORT", portString) ;
      76               3 :    if (brc == TRUE)
      77                 :    {
      78               0 :       port = atoi(portString) ;
      79                 :    }
      80                 :    else
      81                 :    {
      82                 :       port = 1200 ; // default
      83                 :    }
      84                 : 
      85               3 :    _listningPort = port ;
      86                 : 
      87                 : #ifdef LATER
      88                 :    _listningSocket = socket(AF_INET, SOCK_STREAM, 0) ;
      89                 : 
      90                 :    struct sockaddr_in server ;
      91                 :    server.sin_family = AF_INET ;
      92                 :    server.sin_port = _listningPort ;
      93                 :    server.sin_addr.s_addr = ntohl(INADDR_ANY) ;
      94                 : #else
      95               3 :    NON_DEV("Using UNIX sockets instead of INET") ;
      96                 :    char buff[80] ;
      97               3 :    sprintf(buff, "/tmp/port%d", port) ;
      98                 : 
      99               3 :    _listningSocket = socket(AF_LOCAL, SOCK_STREAM, 0) ;
     100                 : 
     101                 :    struct sockaddr_un server ;
     102               3 :    server.sun_family = AF_LOCAL ;
     103               3 :    strcpy(server.sun_path, buff);
     104                 : #endif
     105                 : 
     106                 :    rc = bind(_listningSocket,
     107                 :              (struct sockaddr*) & server,
     108               3 :              sizeof(server)) ;
     109               3 :    if (rc<0)
     110                 :    {
     111               1 :       perror("bind") ;
     112               1 :       throw CORBA::COMM_FAILURE() ;
     113                 :    }
     114                 : 
     115               2 :    rc = listen(_listningSocket, NUMBER_OF_CONNECTIONS) ;
     116               2 :    if (rc<0)
     117                 :    {
     118               0 :       perror("listen") ;
     119               0 :       throw CORBA::COMM_FAILURE() ;
     120                 :    }
     121                 : 
     122               2 :    YAORB::SkelMgr::RegisterAll() ;
     123               4 :    _rootPOA = new PortableServer::POA() ;
     124               1 : }
     125                 : 
     126               0 : YAServerOrb::~YAServerOrb()
     127                 : {
     128                 :    int rc ;
     129                 : 
     130               0 :    rc = close(_listningSocket) ;
     131               0 :    if (rc != 0)
     132                 :    {
     133               0 :       perror("close") ;
     134                 :    }
     135                 : 
     136                 : /* tmp -- begin */
     137               0 :    NON_DEV("Using UNIX sockets instead of INET") ;
     138                 :    char buff[80] ;
     139               0 :    sprintf(buff, "/tmp/port%d", _listningPort) ;
     140               0 :    rc = unlink(buff) ;
     141                 : 
     142               0 :    if (rc != 0)
     143                 :    {
     144               0 :       perror("unlink") ;
     145                 :    }
     146                 : /* tmp -- end */
     147                 : 
     148               0 : }
     149                 : 
     150                 : const CORBA::ORB::ObjectIdList&
     151               1 : YAServerOrb::listInitialServices(void) const
     152                 : {
     153               2 :    static CORBA::String_var data[8] ;
     154                 : 
     155               1 :    data[0] = SERVICE_ROOT_POA ;
     156               1 :    data[1] = SERVICE_POA_CURRENT ;
     157               1 :    data[2] = SERVICE_INTERFACE_REPOSITORY ;
     158               1 :    data[3] = SERVICE_NAME_SERVICE ;
     159               1 :    data[4] = SERVICE_TRADING_SERVICE ;
     160               1 :    data[5] = SERVICE_SECURITY_CURRENT ;
     161               1 :    data[6] = SERVICE_TRANSACTION_CURRENT ;
     162               1 :    data[7] = SERVICE_DYN_ANY_FACTORY ;
     163                 : 
     164               3 :    static CORBA::ORB::ObjectIdList services(8, 8, data, false) ;
     165                 : 
     166                 :    return services ;
     167                 : }
     168                 : 
     169                 : CORBA::Object_ptr
     170                 : YAServerOrb::resolveInitialReferences(
     171               3 :    const char * id)
     172                 : {
     173                 :    CORBA::Object_ptr ref = NULL ;
     174               3 :    String tmp(id) ;
     175                 : 
     176               3 :    if (tmp == SERVICE_ROOT_POA)
     177                 :    {
     178               2 :       NON_DEV("awful cast") ;
     179                 :       PortableServer::POA *root = _rootPOA ;
     180               2 :       ref = (CORBA::Object_ptr) root ;
     181                 :    }
     182               1 :    else if (tmp == SERVICE_POA_CURRENT)
     183                 :    {
     184               0 :       NON_DEV("SERVICE_POA_CURRENT") ;
     185                 :    }
     186                 :    else
     187                 :    {
     188               1 :       NON_DEV("SERVICE") ;
     189                 :    }
     190                 : 
     191               3 :    return ref ;
     192                 : }
     193                 : 
     194                 : CORBA::Boolean
     195               0 : YAServerOrb::IsLocalIOR(IOP::IOR & ior)
     196                 : {
     197               0 :    NON_DEV("IsLocalIOR") ;
     198                 :    return FALSE ;
     199                 : }
     200                 : 
     201                 : CORBA::Object_ptr
     202               0 : YAServerOrb::ResolveLocalIOR(IOP::IOR & ior)
     203                 : {
     204               0 :    NON_DEV("ResolveLocalIOR") ;
     205               0 :    return CORBA::Object::_nil() ;
     206                 : }
     207                 : 

Generated by: LTP GCOV extension version 1.4