diff options
author | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-09-24 00:03:24 +0000 |
---|---|---|
committer | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-09-24 00:03:24 +0000 |
commit | e03e8fda07958c6d0146d7a338fcb89a866c5cc2 (patch) | |
tree | 052368d8f02b8d2c55b1a97a832bc611f07069a7 /protocols | |
parent | c1942321e1cde5089afd7a0d39233ee33379fc9a (diff) | |
download | ATCD-e03e8fda07958c6d0146d7a338fcb89a866c5cc2.tar.gz |
ChangeLogTag:Sat Sep 23 16:55:26 2000 Carlos O'Ryan <coryan@uci.edu>
Diffstat (limited to 'protocols')
-rw-r--r-- | protocols/ace/RMCast/Makefile | 365 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast.h | 11 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_IO_UDP.cpp | 6 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_Membership.cpp | 115 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_Membership.h | 73 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_Membership.i | 8 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_Proxy.cpp | 27 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_Proxy.h | 76 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_Proxy.i | 8 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_Retransmission.cpp | 101 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_Retransmission.h | 68 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_Retransmission.i | 6 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_UDP_Proxy.cpp | 68 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_UDP_Proxy.h | 27 | ||||
-rw-r--r-- | protocols/ace/RMCast/RMCast_UDP_Proxy.i | 6 |
15 files changed, 884 insertions, 81 deletions
diff --git a/protocols/ace/RMCast/Makefile b/protocols/ace/RMCast/Makefile index 54ce006f30c..3241d84bca5 100644 --- a/protocols/ace/RMCast/Makefile +++ b/protocols/ace/RMCast/Makefile @@ -15,6 +15,9 @@ FILES= \ RMCast_Fragment \ RMCast_Reassembly \ RMCast_Partial_Message \ + RMCast_Proxy \ + RMCast_Membership \ + RMCast_Retransmission \ \ RMCast_IO_UDP \ RMCast_UDP_Event_Handler \ @@ -145,16 +148,16 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Synch.h \ $(ACE_ROOT)/ace/ACE.h \ $(ACE_ROOT)/ace/ACE.i \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Synch.i \ $(ACE_ROOT)/ace/Synch_T.h \ $(ACE_ROOT)/ace/Event_Handler.h \ $(ACE_ROOT)/ace/Event_Handler.i \ $(ACE_ROOT)/ace/Synch_T.i \ $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \ + $(ACE_ROOT)/ace/Thread_Adapter.inl \ $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Atomic_Op.i \ $(ACE_ROOT)/ace/Synch_T.cpp \ @@ -195,6 +198,10 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Signal.i \ $(ACE_ROOT)/ace/Mem_Map.h \ $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Memory_Pool.i \ $(ACE_ROOT)/ace/Message_Block.i \ $(ACE_ROOT)/ace/Message_Block_T.h \ @@ -240,16 +247,16 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Log_Record.i \ $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \ $(ACE_ROOT)/ace/Synch.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Synch.i \ $(ACE_ROOT)/ace/Synch_T.h \ $(ACE_ROOT)/ace/Event_Handler.h \ $(ACE_ROOT)/ace/Event_Handler.i \ $(ACE_ROOT)/ace/Synch_T.i \ $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \ + $(ACE_ROOT)/ace/Thread_Adapter.inl \ $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Atomic_Op.i \ $(ACE_ROOT)/ace/Synch_T.cpp \ @@ -289,6 +296,10 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Memory_Pool.h \ $(ACE_ROOT)/ace/Mem_Map.h \ $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Memory_Pool.i \ $(ACE_ROOT)/ace/Signal.i \ $(ACE_ROOT)/ace/SString.h \ @@ -331,6 +342,8 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Service_Types.i \ $(ACE_ROOT)/ace/Service_Repository.i \ $(ACE_ROOT)/ace/WFMO_Reactor.h \ + $(ACE_ROOT)/ace/Process_Mutex.h \ + $(ACE_ROOT)/ace/Process_Mutex.inl \ $(ACE_ROOT)/ace/WFMO_Reactor.i \ $(ACE_ROOT)/ace/Strategies.i \ $(ACE_ROOT)/ace/Message_Queue.i \ @@ -378,12 +391,12 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Service_Object.i \ $(ACE_ROOT)/ace/Thread_Manager.h \ $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \ + $(ACE_ROOT)/ace/Thread_Adapter.inl \ $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Synch.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Synch.i \ $(ACE_ROOT)/ace/Synch_T.h \ $(ACE_ROOT)/ace/Synch_T.i \ @@ -424,6 +437,10 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Signal.i \ $(ACE_ROOT)/ace/Mem_Map.h \ $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Memory_Pool.i \ $(ACE_ROOT)/ace/Thread_Manager.i \ $(ACE_ROOT)/ace/Task.i \ @@ -472,6 +489,8 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Service_Types.i \ $(ACE_ROOT)/ace/Service_Repository.i \ $(ACE_ROOT)/ace/WFMO_Reactor.h \ + $(ACE_ROOT)/ace/Process_Mutex.h \ + $(ACE_ROOT)/ace/Process_Mutex.inl \ $(ACE_ROOT)/ace/WFMO_Reactor.i \ $(ACE_ROOT)/ace/Strategies.i \ $(ACE_ROOT)/ace/Message_Queue.i \ @@ -484,6 +503,209 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Stream_Modules.cpp \ RMCast_Partial_Message.i +.obj/RMCast_Proxy.o .obj/RMCast_Proxy.so .shobj/RMCast_Proxy.o .shobj/RMCast_Proxy.so: RMCast_Proxy.cpp RMCast_Proxy.h \ + $(ACE_ROOT)/ace/pre.h \ + RMCast_Module.h RMCast.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/post.h \ + $(ACE_ROOT)/ace/ACE_export.h \ + $(ACE_ROOT)/ace/svc_export.h \ + $(ACE_ROOT)/ace/ace_wchar.h \ + $(ACE_ROOT)/ace/OS_Dirent.h \ + $(ACE_ROOT)/ace/OS_Export.h \ + $(ACE_ROOT)/ace/OS_Dirent.inl \ + $(ACE_ROOT)/ace/OS_String.h \ + $(ACE_ROOT)/ace/OS_String.inl \ + $(ACE_ROOT)/ace/OS_Memory.h \ + $(ACE_ROOT)/ace/OS_Memory.inl \ + $(ACE_ROOT)/ace/OS_TLI.h \ + $(ACE_ROOT)/ace/OS_TLI.inl \ + $(ACE_ROOT)/ace/Min_Max.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/OS.i \ + RMCast_Export.h RMCast.i RMCast_Module.i RMCast_Proxy.i + +.obj/RMCast_Membership.o .obj/RMCast_Membership.so .shobj/RMCast_Membership.o .shobj/RMCast_Membership.so: RMCast_Membership.cpp RMCast_Membership.h \ + $(ACE_ROOT)/ace/pre.h \ + RMCast_Module.h RMCast.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/post.h \ + $(ACE_ROOT)/ace/ACE_export.h \ + $(ACE_ROOT)/ace/svc_export.h \ + $(ACE_ROOT)/ace/ace_wchar.h \ + $(ACE_ROOT)/ace/OS_Dirent.h \ + $(ACE_ROOT)/ace/OS_Export.h \ + $(ACE_ROOT)/ace/OS_Dirent.inl \ + $(ACE_ROOT)/ace/OS_String.h \ + $(ACE_ROOT)/ace/OS_String.inl \ + $(ACE_ROOT)/ace/OS_Memory.h \ + $(ACE_ROOT)/ace/OS_Memory.inl \ + $(ACE_ROOT)/ace/OS_TLI.h \ + $(ACE_ROOT)/ace/OS_TLI.inl \ + $(ACE_ROOT)/ace/Min_Max.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/OS.i \ + RMCast_Export.h RMCast.i RMCast_Module.i \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/Based_Pointer_T.h \ + $(ACE_ROOT)/ace/Based_Pointer_T.i \ + $(ACE_ROOT)/ace/Based_Pointer_T.cpp \ + $(ACE_ROOT)/ace/Based_Pointer_Repository.h \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/Synch.i \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \ + $(ACE_ROOT)/ace/Thread_Adapter.inl \ + $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + RMCast_Membership.i RMCast_Proxy.h RMCast_Proxy.i + +.obj/RMCast_Retransmission.o .obj/RMCast_Retransmission.so .shobj/RMCast_Retransmission.o .shobj/RMCast_Retransmission.so: RMCast_Retransmission.cpp \ + RMCast_Retransmission.h \ + $(ACE_ROOT)/ace/pre.h \ + RMCast_Module.h RMCast.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/post.h \ + $(ACE_ROOT)/ace/ACE_export.h \ + $(ACE_ROOT)/ace/svc_export.h \ + $(ACE_ROOT)/ace/ace_wchar.h \ + $(ACE_ROOT)/ace/OS_Dirent.h \ + $(ACE_ROOT)/ace/OS_Export.h \ + $(ACE_ROOT)/ace/OS_Dirent.inl \ + $(ACE_ROOT)/ace/OS_String.h \ + $(ACE_ROOT)/ace/OS_String.inl \ + $(ACE_ROOT)/ace/OS_Memory.h \ + $(ACE_ROOT)/ace/OS_Memory.inl \ + $(ACE_ROOT)/ace/OS_TLI.h \ + $(ACE_ROOT)/ace/OS_TLI.inl \ + $(ACE_ROOT)/ace/Min_Max.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/OS.i \ + RMCast_Export.h RMCast.i RMCast_Module.i \ + $(ACE_ROOT)/ace/RB_Tree.h \ + $(ACE_ROOT)/ace/Functor.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Functor.i \ + $(ACE_ROOT)/ace/Functor_T.h \ + $(ACE_ROOT)/ace/Functor_T.i \ + $(ACE_ROOT)/ace/Functor_T.cpp \ + $(ACE_ROOT)/ace/RB_Tree.i \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/Synch.i \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \ + $(ACE_ROOT)/ace/Thread_Adapter.inl \ + $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Based_Pointer_T.h \ + $(ACE_ROOT)/ace/Based_Pointer_T.i \ + $(ACE_ROOT)/ace/Based_Pointer_T.cpp \ + $(ACE_ROOT)/ace/Based_Pointer_Repository.h \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/RB_Tree.cpp \ + RMCast_Retransmission.i RMCast_Proxy.h RMCast_Proxy.i \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/Message_Block.i \ + $(ACE_ROOT)/ace/Message_Block_T.h \ + $(ACE_ROOT)/ace/Message_Block_T.i \ + $(ACE_ROOT)/ace/Message_Block_T.cpp + .obj/RMCast_IO_UDP.o .obj/RMCast_IO_UDP.so .shobj/RMCast_IO_UDP.o .shobj/RMCast_IO_UDP.so: RMCast_IO_UDP.cpp RMCast_IO_UDP.h \ $(ACE_ROOT)/ace/pre.h \ RMCast_Module.h RMCast.h \ @@ -539,14 +761,14 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Log_Record.i \ $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \ $(ACE_ROOT)/ace/Synch.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Synch.i \ $(ACE_ROOT)/ace/Synch_T.h \ $(ACE_ROOT)/ace/Synch_T.i \ $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \ + $(ACE_ROOT)/ace/Thread_Adapter.inl \ $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Atomic_Op.i \ $(ACE_ROOT)/ace/Synch_T.cpp \ @@ -586,6 +808,10 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Memory_Pool.h \ $(ACE_ROOT)/ace/Mem_Map.h \ $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Memory_Pool.i \ $(ACE_ROOT)/ace/Signal.i \ $(ACE_ROOT)/ace/SString.h \ @@ -601,8 +827,8 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Reactor.i \ $(ACE_ROOT)/ace/Reactor_Impl.h \ $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ - RMCast_IO_UDP.i RMCast_UDP_Proxy.h RMCast_UDP_Proxy.i \ - RMCast_Module_Factory.h RMCast_Module_Factory.i \ + RMCast_IO_UDP.i RMCast_UDP_Proxy.h RMCast_Proxy.h RMCast_Proxy.i \ + RMCast_UDP_Proxy.i RMCast_Module_Factory.h RMCast_Module_Factory.i \ $(ACE_ROOT)/ace/Message_Block.h \ $(ACE_ROOT)/ace/Message_Block.i \ $(ACE_ROOT)/ace/Message_Block_T.h \ @@ -665,14 +891,14 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Log_Record.i \ $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \ $(ACE_ROOT)/ace/Synch.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Synch.i \ $(ACE_ROOT)/ace/Synch_T.h \ $(ACE_ROOT)/ace/Synch_T.i \ $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \ + $(ACE_ROOT)/ace/Thread_Adapter.inl \ $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Atomic_Op.i \ $(ACE_ROOT)/ace/Synch_T.cpp \ @@ -712,6 +938,10 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Memory_Pool.h \ $(ACE_ROOT)/ace/Mem_Map.h \ $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Memory_Pool.i \ $(ACE_ROOT)/ace/Signal.i \ $(ACE_ROOT)/ace/SString.h \ @@ -731,7 +961,8 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU .obj/RMCast_UDP_Proxy.o .obj/RMCast_UDP_Proxy.so .shobj/RMCast_UDP_Proxy.o .shobj/RMCast_UDP_Proxy.so: RMCast_UDP_Proxy.cpp RMCast_UDP_Proxy.h \ $(ACE_ROOT)/ace/pre.h \ - RMCast.h $(ACE_ROOT)/ace/OS.h \ + RMCast_Proxy.h RMCast_Module.h RMCast.h \ + $(ACE_ROOT)/ace/OS.h \ $(ACE_ROOT)/ace/post.h \ $(ACE_ROOT)/ace/ACE_export.h \ $(ACE_ROOT)/ace/svc_export.h \ @@ -751,40 +982,69 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Basic_Types.i \ $(ACE_ROOT)/ace/Trace.h \ $(ACE_ROOT)/ace/OS.i \ - RMCast_Export.h RMCast.i \ + RMCast_Export.h RMCast.i RMCast_Module.i RMCast_Proxy.i \ $(ACE_ROOT)/ace/INET_Addr.h \ $(ACE_ROOT)/ace/ACE.h \ $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Addr.h \ $(ACE_ROOT)/ace/Addr.i \ $(ACE_ROOT)/ace/INET_Addr.i \ - RMCast_UDP_Proxy.i RMCast_Module.h RMCast_Module.i \ - $(ACE_ROOT)/ace/Message_Block.h \ - $(ACE_ROOT)/ace/Malloc.h \ - $(ACE_ROOT)/ace/Malloc_Base.h \ + RMCast_UDP_Proxy.i RMCast_IO_UDP.h RMCast_UDP_Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + RMCast_UDP_Event_Handler.i \ + $(ACE_ROOT)/ace/SOCK_Dgram_Mcast.h \ + $(ACE_ROOT)/ace/SOCK_Dgram.h \ + $(ACE_ROOT)/ace/SOCK.h \ + $(ACE_ROOT)/ace/IPC_SAP.h \ + $(ACE_ROOT)/ace/IPC_SAP.i \ + $(ACE_ROOT)/ace/QoS_Session.h \ + $(ACE_ROOT)/ace/SOCK.i \ + $(ACE_ROOT)/ace/SOCK_Dgram.i \ + $(ACE_ROOT)/ace/SOCK_Dgram_Mcast.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager.h \ + $(ACE_ROOT)/ace/Functor.h \ + $(ACE_ROOT)/ace/Functor.i \ + $(ACE_ROOT)/ace/Functor_T.h \ + $(ACE_ROOT)/ace/Functor_T.i \ + $(ACE_ROOT)/ace/Functor_T.cpp \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \ $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/Log_Priority.h \ $(ACE_ROOT)/ace/Log_Record.i \ - $(ACE_ROOT)/ace/Based_Pointer_T.h \ - $(ACE_ROOT)/ace/Based_Pointer_T.i \ - $(ACE_ROOT)/ace/Based_Pointer_T.cpp \ - $(ACE_ROOT)/ace/Based_Pointer_Repository.h \ - $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \ $(ACE_ROOT)/ace/Synch.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Synch.i \ $(ACE_ROOT)/ace/Synch_T.h \ - $(ACE_ROOT)/ace/Event_Handler.h \ - $(ACE_ROOT)/ace/Event_Handler.i \ $(ACE_ROOT)/ace/Synch_T.i \ $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \ + $(ACE_ROOT)/ace/Thread_Adapter.inl \ $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Atomic_Op.i \ $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \ + $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.i \ + $(ACE_ROOT)/ace/Service_Object.i \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Based_Pointer_T.h \ + $(ACE_ROOT)/ace/Based_Pointer_T.i \ + $(ACE_ROOT)/ace/Based_Pointer_T.cpp \ + $(ACE_ROOT)/ace/Based_Pointer_Repository.h \ + $(ACE_ROOT)/ace/Singleton.h \ $(ACE_ROOT)/ace/Singleton.i \ $(ACE_ROOT)/ace/Singleton.cpp \ $(ACE_ROOT)/ace/Object_Manager.h \ @@ -800,16 +1060,29 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Malloc_T.i \ $(ACE_ROOT)/ace/Malloc_T.cpp \ $(ACE_ROOT)/ace/Memory_Pool.h \ - $(ACE_ROOT)/ace/Signal.h \ - $(ACE_ROOT)/ace/Containers.h \ - $(ACE_ROOT)/ace/Containers.i \ - $(ACE_ROOT)/ace/Containers_T.h \ - $(ACE_ROOT)/ace/Containers_T.i \ - $(ACE_ROOT)/ace/Containers_T.cpp \ - $(ACE_ROOT)/ace/Signal.i \ $(ACE_ROOT)/ace/Mem_Map.h \ $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/SString.i \ + $(ACE_ROOT)/ace/Service_Config.i \ + $(ACE_ROOT)/ace/Reactor.h \ + $(ACE_ROOT)/ace/Handle_Set.h \ + $(ACE_ROOT)/ace/Handle_Set.i \ + $(ACE_ROOT)/ace/Timer_Queue.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.i \ + $(ACE_ROOT)/ace/Timer_Queue_T.cpp \ + $(ACE_ROOT)/ace/Reactor.i \ + $(ACE_ROOT)/ace/Reactor_Impl.h \ + $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ + RMCast_IO_UDP.i \ + $(ACE_ROOT)/ace/Message_Block.h \ $(ACE_ROOT)/ace/Message_Block.i \ $(ACE_ROOT)/ace/Message_Block_T.h \ $(ACE_ROOT)/ace/Message_Block_T.i \ diff --git a/protocols/ace/RMCast/RMCast.h b/protocols/ace/RMCast/RMCast.h index 654f391204b..c7cdf718c04 100644 --- a/protocols/ace/RMCast/RMCast.h +++ b/protocols/ace/RMCast/RMCast.h @@ -26,6 +26,7 @@ #endif /* ACE_LACKS_PRAGMA_ONCE */ class ACE_Message_Block; +class ACE_RMCast_Proxy; class ACE_RMCast_Export ACE_RMCast { @@ -194,33 +195,43 @@ public: // piggyback the ACK / NAK messages ACE_Message_Block *payload; + + ACE_RMCast_Proxy *source; }; struct Poll { + ACE_RMCast_Proxy *source; }; struct Ack_Join { ACE_INT32 next_sequence_number; + + ACE_RMCast_Proxy *source; }; struct Ack_Leave { + ACE_RMCast_Proxy *source; }; struct Ack { ACE_UINT32 highest_in_sequence; ACE_UINT32 highest_received; + + ACE_RMCast_Proxy *source; }; struct Join { + ACE_RMCast_Proxy *source; }; struct Leave { + ACE_RMCast_Proxy *source; }; }; diff --git a/protocols/ace/RMCast/RMCast_IO_UDP.cpp b/protocols/ace/RMCast/RMCast_IO_UDP.cpp index 476e73d60ea..af655f3130f 100644 --- a/protocols/ace/RMCast/RMCast_IO_UDP.cpp +++ b/protocols/ace/RMCast/RMCast_IO_UDP.cpp @@ -127,7 +127,7 @@ ACE_RMCast_IO_UDP::handle_input (ACE_HANDLE) ACE_RMCast_UDP_Proxy *proxy; if (this->map_.unbind (from_address, proxy) == 0) { - this->factory_->destroy (proxy->module ()); + this->factory_->destroy (proxy->next ()); delete proxy; } return 0; @@ -166,9 +166,9 @@ ACE_RMCast_IO_UDP::handle_input (ACE_HANDLE) } ACE_NEW_RETURN (proxy, ACE_RMCast_UDP_Proxy(this, - from_address, - module), + from_address), 0); + proxy->next (module); if (this->map_.bind (from_address, proxy) != 0) { diff --git a/protocols/ace/RMCast/RMCast_Membership.cpp b/protocols/ace/RMCast/RMCast_Membership.cpp new file mode 100644 index 00000000000..8ab58d84475 --- /dev/null +++ b/protocols/ace/RMCast/RMCast_Membership.cpp @@ -0,0 +1,115 @@ +// +// $Id$ +// + +#include "RMCast_Membership.h" +#include "RMCast_Proxy.h" + +#if !defined (__ACE_INLINE__) +# include "RMCast_Membership.i" +#endif /* ! __ACE_INLINE__ */ + +ACE_RCSID(ace, RMCast_Membership, "$Id$") + +ACE_RMCast_Membership::~ACE_RMCast_Membership (void) +{ +} + +int +ACE_RMCast_Membership::ack (ACE_RMCast::Ack &ack) +{ + Proxy_Iterator end = this->proxies_.end (); + Proxy_Iterator i = this->proxies_.begin (); + if (i == end) + return 0; + + ACE_RMCast::Ack next_ack; + { + ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, ace_mon, this->mutex_, -1); + if (ack.highest_in_sequence < this->highest_in_sequence_) + { + // @@ This violates an invariant of the class, shouldn't + // happen... + return -1; + } + else if (ack.highest_in_sequence == this->highest_in_sequence_) + { + // Nothing new, just continue.... + return 0; + } + // Possible update, re-evaluate the story... + + ACE_UINT32 highest_in_sequence = (*i)->highest_in_sequence (); + ACE_UINT32 highest_received = (*i)->highest_received (); + ++i; + + for (; i != end; ++i) + { + ACE_UINT32 s = (*i)->highest_in_sequence (); + if (s < highest_in_sequence) + highest_in_sequence = s; + ACE_UINT32 r = (*i)->highest_received (); + if (r > highest_received) + highest_received = r; + } + if (this->highest_in_sequence_ >= highest_in_sequence + || this->highest_received_ < highest_received) + { + // No change.... + return 0; + } + this->highest_in_sequence_ = highest_in_sequence; + this->highest_received_ = highest_received; + if (this->next () == 0) + return 0; + next_ack.source = ack.source; + next_ack.highest_in_sequence = this->highest_in_sequence_; + next_ack.highest_received = this->highest_received_; + } + // @@ This looks like a race condition, next() is checked inside the + // lock and used outside, but it is not: the application is only + // supposed to change next() at construction time. + return this->next ()->ack (next_ack); +} + +int +ACE_RMCast_Membership::join (ACE_RMCast::Join &join) +{ + if (join.source == 0) + return 0; + + { + ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, ace_mon, this->mutex_, -1); + if (this->proxies_.insert (join.source) == -1) + return -1; + } + + if (this->next () == 0) + return 0; + + return this->next ()->join (join); +} + +int +ACE_RMCast_Membership::leave (ACE_RMCast::Leave &leave) +{ + if (leave.source == 0) + return 0; + + { + ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, ace_mon, this->mutex_, -1); + if (this->proxies_.remove (leave.source) == -1) + return 0; + } + + if (this->next () == 0) + return 0; + + return this->next ()->leave (leave); +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) + +template class ACE_Unbounded_Set<ACE_RMCast_Proxy*>; + +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/protocols/ace/RMCast/RMCast_Membership.h b/protocols/ace/RMCast/RMCast_Membership.h new file mode 100644 index 00000000000..a99a7752507 --- /dev/null +++ b/protocols/ace/RMCast/RMCast_Membership.h @@ -0,0 +1,73 @@ +/* -*- C++ -*- */ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// ace +// +// = FILENAME +// RMCast_Membership.h +// +// = AUTHOR +// Carlos O'Ryan <coryan@uci.edu> +// +// ============================================================================ + +#ifndef ACE_RMCAST_MEMBERSHIP_H +#define ACE_RMCAST_MEMBERSHIP_H +#include "ace/pre.h" + +#include "RMCast_Module.h" +#include "ace/Containers.h" +#include "ace/Synch.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +class ACE_RMCast_Proxy; + +class ACE_RMCast_Export ACE_RMCast_Membership : public ACE_RMCast_Module +{ + // = TITLE + // Track Receiver membership + // + // = DESCRIPTION + // Define the interface for all reliable multicast membership +public: + // = Initialization and termination methods. + ACE_RMCast_Membership (void); + // Constructor + + virtual ~ACE_RMCast_Membership (void); + // Destructor + + // = The RMCast_Module methods + virtual int ack (ACE_RMCast::Ack &); + virtual int join (ACE_RMCast::Join &); + virtual int leave (ACE_RMCast::Leave &); + +protected: + typedef ACE_Unbounded_Set<ACE_RMCast_Proxy*> Proxy_Collection; + typedef ACE_Unbounded_Set_Iterator<ACE_RMCast_Proxy*> Proxy_Iterator; + + Proxy_Collection proxies_; + // The membership buffer + + ACE_UINT32 highest_in_sequence_; + // The smallest value of <highest_in_sequence> for all the proxies + + ACE_UINT32 highest_received_; + // The highest value of <highest_received> for all the proxies + + ACE_SYNCH_MUTEX mutex_; + // Synchronization +}; + +#if defined (__ACE_INLINE__) +#include "RMCast_Membership.i" +#endif /* __ACE_INLINE__ */ + +#include "ace/post.h" +#endif /* ACE_RMCAST_MEMBERSHIP_H */ diff --git a/protocols/ace/RMCast/RMCast_Membership.i b/protocols/ace/RMCast/RMCast_Membership.i new file mode 100644 index 00000000000..0c3e33c2d01 --- /dev/null +++ b/protocols/ace/RMCast/RMCast_Membership.i @@ -0,0 +1,8 @@ +// $Id$ + +ACE_INLINE +ACE_RMCast_Membership::ACE_RMCast_Membership (void) + : highest_in_sequence_ (0) + , highest_received_ (0) +{ +} diff --git a/protocols/ace/RMCast/RMCast_Proxy.cpp b/protocols/ace/RMCast/RMCast_Proxy.cpp new file mode 100644 index 00000000000..2a8b2ba40b4 --- /dev/null +++ b/protocols/ace/RMCast/RMCast_Proxy.cpp @@ -0,0 +1,27 @@ +// +// $Id$ +// + +#include "RMCast_Proxy.h" + +#if !defined (__ACE_INLINE__) +# include "RMCast_Proxy.i" +#endif /* ! __ACE_INLINE__ */ + +ACE_RCSID(ace, RMCast_Proxy, "$Id$") + +ACE_RMCast_Proxy::~ACE_RMCast_Proxy (void) +{ +} + +ACE_UINT32 +ACE_RMCast_Proxy::highest_in_sequence (void) const +{ + return this->highest_in_sequence_; +} + +ACE_UINT32 +ACE_RMCast_Proxy::highest_received (void) const +{ + return this->highest_received_; +} diff --git a/protocols/ace/RMCast/RMCast_Proxy.h b/protocols/ace/RMCast/RMCast_Proxy.h new file mode 100644 index 00000000000..dca6494e374 --- /dev/null +++ b/protocols/ace/RMCast/RMCast_Proxy.h @@ -0,0 +1,76 @@ +/* -*- C++ -*- */ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// ace +// +// = FILENAME +// RMCast_Proxy.h +// +// = AUTHOR +// Carlos O'Ryan <coryan@uci.edu> +// +// ============================================================================ + +#ifndef ACE_RMCAST_PROXY_H +#define ACE_RMCAST_PROXY_H +#include "ace/pre.h" + +#include "RMCast_Module.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +class ACE_Message_Block; +class ACE_Time_Value; + +class ACE_RMCast_Export ACE_RMCast_Proxy : public ACE_RMCast_Module +{ + // = TITLE + // Reliable Multicast Proxy + // + // = DESCRIPTION + // The proxy is used to send back messages to either a single + // receiver (o supplier). + // +public: + // = Initialization and termination methods. + ACE_RMCast_Proxy (void); + // Constructor + + virtual ~ACE_RMCast_Proxy (void); + // Destructor + + virtual ACE_UINT32 highest_in_sequence (void) const; + virtual ACE_UINT32 highest_received (void) const; + // Get the sequence numbers received by the remote proxy. + // Return 0 for sender proxies + + virtual int reply_data (ACE_RMCast::Data &) = 0; + virtual int reply_poll (ACE_RMCast::Poll &) = 0; + virtual int reply_ack_join (ACE_RMCast::Ack_Join &) = 0; + virtual int reply_ack_leave (ACE_RMCast::Ack_Leave &) = 0; + virtual int reply_ack (ACE_RMCast::Ack &) = 0; + virtual int reply_join (ACE_RMCast::Join &) = 0; + virtual int reply_leave (ACE_RMCast::Leave &) = 0; + // Push data back to the remote proxy + + // = The RMCast_Module methods + virtual int ack (ACE_RMCast::Ack &); + +private: + ACE_UINT32 highest_in_sequence_; + ACE_UINT32 highest_received_; + // Cache the sequence numbers reported from the remote peer using + // Ack messages +}; + +#if defined (__ACE_INLINE__) +#include "RMCast_Proxy.i" +#endif /* __ACE_INLINE__ */ + +#include "ace/post.h" +#endif /* ACE_RMCAST_PROXY_H */ diff --git a/protocols/ace/RMCast/RMCast_Proxy.i b/protocols/ace/RMCast/RMCast_Proxy.i new file mode 100644 index 00000000000..f93feaa5639 --- /dev/null +++ b/protocols/ace/RMCast/RMCast_Proxy.i @@ -0,0 +1,8 @@ +// $Id$ + +ACE_INLINE +ACE_RMCast_Proxy::ACE_RMCast_Proxy (void) + : highest_in_sequence_ (0) + , highest_received_ (0) +{ +} diff --git a/protocols/ace/RMCast/RMCast_Retransmission.cpp b/protocols/ace/RMCast/RMCast_Retransmission.cpp new file mode 100644 index 00000000000..b90cf0ddf31 --- /dev/null +++ b/protocols/ace/RMCast/RMCast_Retransmission.cpp @@ -0,0 +1,101 @@ +// +// $Id$ +// + +#include "RMCast_Retransmission.h" +#include "RMCast_Proxy.h" +#include "ace/Message_Block.h" + +#if !defined (__ACE_INLINE__) +# include "RMCast_Retransmission.i" +#endif /* ! __ACE_INLINE__ */ + +ACE_RCSID(ace, RMCast_Retransmission, "$Id$") + +ACE_RMCast_Retransmission::~ACE_RMCast_Retransmission (void) +{ +} + +int +ACE_RMCast_Retransmission::close (void) +{ + Messages_Iterator end = this->messages_.end (); + + for (Messages_Iterator i = this->messages_.begin (); + i != end; + ++i) + { + ACE_Message_Block::release ((*i).item ().payload); + } + this->messages_.close (); + return 0; +} + +int +ACE_RMCast_Retransmission::data (ACE_RMCast::Data &data) +{ + if (this->next () == 0) + return 0; + + int r = this->next ()->data (data); + if (r == 0) + { + ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, ace_mon, this->mutex_, -1); + ACE_RMCast::Data copy = data; + copy.payload = ACE_Message_Block::duplicate (data.payload); + r = this->messages_.bind (data.sequence_number, copy); + } + return r; +} + +int +ACE_RMCast_Retransmission::join (ACE_RMCast::Join &join) +{ + if (join.source == 0) + return 0; + + ACE_RMCast::Ack_Join ack_join; + { + ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, ace_mon, this->mutex_, -1); + Messages_Iterator end = this->messages_.end (); + Messages_Iterator begin = this->messages_.begin (); + + ack_join.source = 0; + if (begin == end) + { + ack_join.next_sequence_number = 0; + } + else + { + ack_join.next_sequence_number = (*begin).key (); + } + } + (void) join.source->reply_ack_join (ack_join); + + // @@ We should force a full retransmission of all the messages! + + return 0; +} + +int +ACE_RMCast_Retransmission::ack (ACE_RMCast::Ack &ack) +{ + ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, ace_mon, this->mutex_, -1); + for (Messages_Iterator i = this->messages_.begin (); + i != this->messages_.end (); + /* do nothing */) + { + ACE_UINT32 key = (*i).key (); + if (key > ack.highest_in_sequence) + break; + this->messages_.unbind (key); + } + return 0; +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) + +template class ACE_RB_Tree<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex>; +template class ACE_RB_Tree_Iterator<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex>; + +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/protocols/ace/RMCast/RMCast_Retransmission.h b/protocols/ace/RMCast/RMCast_Retransmission.h new file mode 100644 index 00000000000..7c586fe5dd6 --- /dev/null +++ b/protocols/ace/RMCast/RMCast_Retransmission.h @@ -0,0 +1,68 @@ +/* -*- C++ -*- */ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// ace +// +// = FILENAME +// RMCast_Retransmission.h +// +// = AUTHOR +// Carlos O'Ryan <coryan@uci.edu> +// +// ============================================================================ + +#ifndef ACE_RMCAST_RETRANSMISSION_H +#define ACE_RMCAST_RETRANSMISSION_H +#include "ace/pre.h" + +#include "RMCast_Module.h" +#include "ace/RB_Tree.h" +#include "ace/Synch.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +class ACE_RMCast_Export ACE_RMCast_Retransmission : public ACE_RMCast_Module +{ + // = TITLE + // Reliable Multicast Retransmission + // + // = DESCRIPTION + // Define the interface for all reliable multicast retransmission +public: + // = Initialization and termination methods. + ACE_RMCast_Retransmission (void); + // Constructor + + virtual ~ACE_RMCast_Retransmission (void); + // Destructor + + // = The RMCast_Module methods + virtual int close (void); + virtual int data (ACE_RMCast::Data &data); + virtual int ack (ACE_RMCast::Ack &); + virtual int join (ACE_RMCast::Join &); + +protected: + typedef ACE_RB_Tree<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex> + Messages; + typedef ACE_RB_Tree_Iterator<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex> + Messages_Iterator; + + Messages messages_; + // The retransmission buffer + + ACE_SYNCH_MUTEX mutex_; + // Synchronization +}; + +#if defined (__ACE_INLINE__) +#include "RMCast_Retransmission.i" +#endif /* __ACE_INLINE__ */ + +#include "ace/post.h" +#endif /* ACE_RMCAST_RETRANSMISSION_H */ diff --git a/protocols/ace/RMCast/RMCast_Retransmission.i b/protocols/ace/RMCast/RMCast_Retransmission.i new file mode 100644 index 00000000000..e67b41120ce --- /dev/null +++ b/protocols/ace/RMCast/RMCast_Retransmission.i @@ -0,0 +1,6 @@ +// $Id$ + +ACE_INLINE +ACE_RMCast_Retransmission::ACE_RMCast_Retransmission (void) +{ +} diff --git a/protocols/ace/RMCast/RMCast_UDP_Proxy.cpp b/protocols/ace/RMCast/RMCast_UDP_Proxy.cpp index 1fbad27f2cd..010267b0cbb 100644 --- a/protocols/ace/RMCast/RMCast_UDP_Proxy.cpp +++ b/protocols/ace/RMCast/RMCast_UDP_Proxy.cpp @@ -2,6 +2,7 @@ #include "RMCast_UDP_Proxy.h" #include "RMCast_Module.h" +#include "RMCast_IO_UDP.h" #include "ace/Message_Block.h" #if !defined (__ACE_INLINE__) @@ -11,11 +12,9 @@ ACE_RCSID(ace, RMCast_UDP_Proxy, "$Id$") ACE_RMCast_UDP_Proxy::ACE_RMCast_UDP_Proxy (ACE_RMCast_IO_UDP *io_udp, - const ACE_INET_Addr &addr, - ACE_RMCast_Module *module) + const ACE_INET_Addr &addr) : io_udp_ (io_udp) , peer_addr_ (addr) - , module_ (module) { } @@ -36,7 +35,7 @@ ACE_RMCast_UDP_Proxy::receive_message (char *buffer, size_t size) if (type == ACE_RMCast::MT_POLL) { ACE_RMCast::Poll poll; - return this->module ()->poll (poll); + return this->next ()->poll (poll); } else if (type == ACE_RMCast::MT_ACK_JOIN) @@ -54,13 +53,13 @@ ACE_RMCast_UDP_Proxy::receive_message (char *buffer, size_t size) ACE_OS::memcpy (&tmp, buffer + 1, sizeof(tmp)); ack_join.next_sequence_number = ACE_NTOHL (tmp); - return this->module ()->ack_join (ack_join); + return this->next ()->ack_join (ack_join); } else if (type == ACE_RMCast::MT_ACK_LEAVE) { ACE_RMCast::Ack_Leave ack_leave; - return this->module ()->ack_leave (ack_leave); + return this->next ()->ack_leave (ack_leave); } else if (type == ACE_RMCast::MT_DATA) @@ -94,21 +93,21 @@ ACE_RMCast_UDP_Proxy::receive_message (char *buffer, size_t size) mb->copy (buffer + header_size, size - header_size); data.payload = mb; - return this->module ()->data (data); + return this->next ()->data (data); } else if (type == ACE_RMCast::MT_JOIN) { ACE_RMCast::Join join; - return this->module ()->join (join); + return this->next ()->join (join); } - + else if (type == ACE_RMCast::MT_LEAVE) { ACE_RMCast::Leave leave; - return this->module ()->leave (leave); + return this->next ()->leave (leave); } - + else if (type == ACE_RMCast::MT_ACK) { ACE_RMCast::Ack ack; @@ -129,8 +128,51 @@ ACE_RMCast_UDP_Proxy::receive_message (char *buffer, size_t size) sizeof(tmp)); ack.highest_received = ACE_NTOHL (tmp); - return this->module ()->ack (ack); + return this->next ()->ack (ack); } - + return 0; } + +int +ACE_RMCast_UDP_Proxy::reply_data (ACE_RMCast::Data &data) +{ + return this->io_udp_->send_data (data, this->peer_addr_); +} + +int +ACE_RMCast_UDP_Proxy::reply_poll (ACE_RMCast::Poll &poll) +{ + return this->io_udp_->send_poll (poll, this->peer_addr_); +} + +int +ACE_RMCast_UDP_Proxy::reply_ack_join (ACE_RMCast::Ack_Join &ack) +{ + return this->io_udp_->send_ack_join (ack, this->peer_addr_); +} + +int +ACE_RMCast_UDP_Proxy::reply_ack_leave (ACE_RMCast::Ack_Leave &ack_leave) +{ + return this->io_udp_->send_ack_leave (ack_leave, this->peer_addr_); +} + +int +ACE_RMCast_UDP_Proxy::reply_ack (ACE_RMCast::Ack &ack) +{ + return this->io_udp_->send_ack (ack, this->peer_addr_); +} + +int +ACE_RMCast_UDP_Proxy::reply_join (ACE_RMCast::Join &join) +{ + return this->io_udp_->send_join (join, this->peer_addr_); +} + +int +ACE_RMCast_UDP_Proxy::reply_leave (ACE_RMCast::Leave &leave) +{ + return this->io_udp_->send_leave (leave, this->peer_addr_); +} + diff --git a/protocols/ace/RMCast/RMCast_UDP_Proxy.h b/protocols/ace/RMCast/RMCast_UDP_Proxy.h index aa7e08c65be..02d4e3409a9 100644 --- a/protocols/ace/RMCast/RMCast_UDP_Proxy.h +++ b/protocols/ace/RMCast/RMCast_UDP_Proxy.h @@ -18,28 +18,26 @@ #define ACE_RMCAST_UDP_PROXY_H #include "ace/pre.h" -#include "RMCast.h" -#include "ace/INET_Addr.h" +#include "RMCast_Proxy.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ -class ACE_RMCast_Module; +#include "ace/INET_Addr.h" + class ACE_RMCast_IO_UDP; -class ACE_RMCast_Export ACE_RMCast_UDP_Proxy +class ACE_RMCast_Export ACE_RMCast_UDP_Proxy : public ACE_RMCast_Proxy { // = TITLE - // Reliable Multicast Sender Ambassador + // Proxy for UDP-based RMCast // // = DESCRIPTION - // Implement an Ambassador for the reliable multicast senders. // public: ACE_RMCast_UDP_Proxy (ACE_RMCast_IO_UDP *io_udp, - const ACE_INET_Addr &peer_addr, - ACE_RMCast_Module *module); + const ACE_INET_Addr &peer_addr); // Constructor virtual ~ACE_RMCast_UDP_Proxy (void); @@ -51,8 +49,14 @@ public: const ACE_INET_Addr &peer_addr (void) const; // The address of the peer - ACE_RMCast_Module *module (void) const; - // The module + // = The ACE_RMCast_Proxy methods + virtual int reply_data (ACE_RMCast::Data &); + virtual int reply_poll (ACE_RMCast::Poll &); + virtual int reply_ack_join (ACE_RMCast::Ack_Join &); + virtual int reply_ack_leave (ACE_RMCast::Ack_Leave &); + virtual int reply_ack (ACE_RMCast::Ack &); + virtual int reply_join (ACE_RMCast::Join &); + virtual int reply_leave (ACE_RMCast::Leave &); private: ACE_RMCast_IO_UDP *io_udp_; @@ -60,9 +64,6 @@ private: ACE_INET_Addr peer_addr_; // The address of the peer - - ACE_RMCast_Module *module_; - // Process the data and control messages. }; #if defined (__ACE_INLINE__) diff --git a/protocols/ace/RMCast/RMCast_UDP_Proxy.i b/protocols/ace/RMCast/RMCast_UDP_Proxy.i index 8ef6142ed7c..b7a85e78ce2 100644 --- a/protocols/ace/RMCast/RMCast_UDP_Proxy.i +++ b/protocols/ace/RMCast/RMCast_UDP_Proxy.i @@ -5,9 +5,3 @@ ACE_RMCast_UDP_Proxy::peer_addr (void) const { return this->peer_addr_; } - -ACE_INLINE ACE_RMCast_Module * -ACE_RMCast_UDP_Proxy::module (void) const -{ - return this->module_; -} |