00001 
00002 
00003 #include "ace/XTI_ATM_Mcast.h"
00004 
00005 ACE_RCSID(ace, XTI_ATM_Mcast, "$Id: XTI_ATM_Mcast.cpp 72149 2006-04-19 12:01:10Z jwillemsen $")
00006 
00007 #if defined (ACE_HAS_XTI_ATM)
00008 
00009 #if !defined (__ACE_INLINE__)
00010 #include "ace/XTI_ATM_Mcast.inl"
00011 #endif 
00012 
00013 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00014 
00015 ACE_ALLOC_HOOK_DEFINE(ACE_XTI_ATM_Mcast)
00016 
00017 void
00018 ACE_XTI_ATM_Mcast::dump (void) const
00019 {
00020 #if defined (ACE_HAS_DUMP)
00021   ACE_TRACE ("ACE_XTI_ATM_Mcast::dump");
00022 #endif 
00023 }
00024 
00025 ACE_XTI_ATM_Mcast::ACE_XTI_ATM_Mcast (void)
00026 {
00027   ACE_TRACE ("ACE_XTI_ATM_Mcast::ACE_XTI_ATM_Mcast");
00028 }
00029 
00030 
00031 
00032 int
00033 ACE_XTI_ATM_Mcast::add_leaf (ACE_TLI_Stream ¤t_stream,
00034                              const ACE_Addr &remote_sap,
00035                              ACE_INT32 leaf_id,
00036                              ACE_Time_Value *timeout)
00037 {
00038   ACE_TRACE ("ACE_XTI_ATM_Mcast::add_leaf");
00039 
00040   struct netbuf call_req;
00041   memset(&call_req, 0, sizeof(call_req));
00042   call_req.len = remote_sap.get_size ();
00043   call_req.buf = (char *)remote_sap.get_addr ();
00044 
00045   if (::t_addleaf(current_stream.get_handle(),
00046                   leaf_id,
00047                   &call_req) < 0)
00048     {
00049       
00050       if (t_errno == TLOOK)
00051         {
00052           int const event = ACE_OS::t_look(current_stream.get_handle());
00053           if (event != TNODATA && event != T_DATA)
00054             return -1;
00055           else
00056             
00057             
00058             
00059             return complete (current_stream, 0, timeout);
00060         }
00061       else
00062         return -1;
00063     }
00064 
00065   return 0;
00066 }
00067 
00068 ACE_END_VERSIONED_NAMESPACE_DECL
00069 
00070 #endif