summaryrefslogtreecommitdiff
path: root/protocols
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-09-24 00:03:24 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-09-24 00:03:24 +0000
commite03e8fda07958c6d0146d7a338fcb89a866c5cc2 (patch)
tree052368d8f02b8d2c55b1a97a832bc611f07069a7 /protocols
parentc1942321e1cde5089afd7a0d39233ee33379fc9a (diff)
downloadATCD-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/Makefile365
-rw-r--r--protocols/ace/RMCast/RMCast.h11
-rw-r--r--protocols/ace/RMCast/RMCast_IO_UDP.cpp6
-rw-r--r--protocols/ace/RMCast/RMCast_Membership.cpp115
-rw-r--r--protocols/ace/RMCast/RMCast_Membership.h73
-rw-r--r--protocols/ace/RMCast/RMCast_Membership.i8
-rw-r--r--protocols/ace/RMCast/RMCast_Proxy.cpp27
-rw-r--r--protocols/ace/RMCast/RMCast_Proxy.h76
-rw-r--r--protocols/ace/RMCast/RMCast_Proxy.i8
-rw-r--r--protocols/ace/RMCast/RMCast_Retransmission.cpp101
-rw-r--r--protocols/ace/RMCast/RMCast_Retransmission.h68
-rw-r--r--protocols/ace/RMCast/RMCast_Retransmission.i6
-rw-r--r--protocols/ace/RMCast/RMCast_UDP_Proxy.cpp68
-rw-r--r--protocols/ace/RMCast/RMCast_UDP_Proxy.h27
-rw-r--r--protocols/ace/RMCast/RMCast_UDP_Proxy.i6
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_;
-}