1 import AnnounceListenManager
2
3
4 Class AGLP -superclass {AnnounceListenManager}
5
6 AGLP public init { type group mtu } {
7 $self instvar unique_port_ max_port_ min_port_
8 $self instvar type_
9 $self next $group $mtu
10 set type_ $type
11 $self set addr_ [localaddr]
12 set min_port_ [$self get_option minPort]
13 set max_port_ [$self get_option maxPort]
14 set unique_port_ $min_port_
15 load_delay
16 }
17
18 AGLP public send { msg } {
19 $self announce "$msg\n"
20 }
21
22 proc print_delay {queue_time} {
23 set now [gettimeofday]
24 puts "A QUEUE [expr $now - $queue_time]"
25 }
26
27 AGLP public recv_announcement { addr post msg length } {
28 $self recv $addr $post "$msg" $length"
29 # set delay [get_delay $addr]
30 # if {$delay != 0} {
31 # after [get_delay $addr] "$self recv $addr $post \"$msg\" $length"
32 # } else {
33 # $self recv $addr $post "$msg" $length"
34 # }
35 }
36
37 AGLP public debug { str } {
38 if {[$self get_option debug] == 1} {
39 puts "$str"
40 }
41 }
42
43 #------------------------------------------------------------------
44 # AnnounceLinstenManager/DegasServer::generate_unique_port
45 #
46 # purpose : generate a unique port for the server.
47 # input : none
48 # output : none
49 #------------------------------------------------------------------
50
51 AGLP private generate_unique_port {} {
52
53 # Generate unique port number
54 $self instvar unique_port_
55 $self instvar port_in_use_
56 $self instvar max_port_
57 $self instvar min_port_
58 incr unique_port_ 4
59 set unique_port_ [expr ($unique_port_ % $max_port_) + $min_port_]
60 while {[info exists port_in_use_($unique_port_)]} {
61 incr unique_port_ 4
62 set unique_port_ [expr ($unique_port_ % $max_port_) + $min_port_]
63 }
64 set port_in_use_($unique_port_) 1
65 return $unique_port_
66 }
67
68 #------------------------------------------------------------------
69 # AnnounceLinstenManager/DegasServer::generate_new_session_spec
70 #
71 # purpose : generate a unique multicast address and port for the
72 # outgoing session. The multicast address will have
73 # prefix 224.3
74 # input : none
75 # output : none
76 #------------------------------------------------------------------
77
78 AGLP private generate_new_session_spec {} {
79
80 set port [$self generate_unique_port]
81
82 # Generate unique multicast address. Just generate a random number
83 # between 2 and 251, and see if they are used.
84 $self instvar addr_in_use_
85 MashRNG seed [pid]
86 set addr1 [expr ([MashRNG integer 250] + 2)]
87 set addr2 [expr ([MashRNG integer 250] + 2)]
88 while {[info exists addr_in_use_($addr1,$addr2)]} {
89 set addr1 [expr ([MashRNG integer 250] + 2)]
90 set addr2 [expr ([MashRNG integer 250] + 2)]
91 }
92 set addr_in_use_($addr1,$addr2) 1
93
94 return 224.3.$addr1.$addr2/$port/[$self get_option ttl]
95 }
96
97 AGLP public recv_offer_service {addr args} {
98 }
99
100 AGLP public recv_serve {addr args} {
101 }
102
103 AGLP public recv_served_by {addr args} {
104 }
105
106 AGLP public recv_replace {addr args} {
107 }
108
109 AGLP public recv_handoff {addr args} {
110 }
111
112 AGLP public recv_handoff_ok {addr args} {
113 }
114
115 AGLP public recv_help_offer {addr args} {
116 }
117
118 AGLP public recv_accept_help {addr args} {
119 }
120
121 AGLP public time {} {
122 return [expr [clock seconds] - 978535100]
123 }
124
125 proc load_delay {} {
126 # delay_table is a list of <host_reg_exp delay> pair
127 # Note : cannot use array here since [array name] cannot
128 # gurantee order of list.
129
130 set f [open "~/.delays" r]
131 global delay_table
132 set data [read $f]
133 set hostname [lindex [split [info hostname] .] 0]
134 foreach {host delay_table} $data {
135 if {$host == $hostname} {
136 return
137 }
138 }
139 }
140
141
142 proc get_delay {addr} {
143 global delay_table
144 set hostname [lindex [split [lookup_host_name $addr] .] 0]
145 foreach {key value} $delay_table {
146 if {[string match $key $addr] || [string match $key $hostname]} {
147 # puts "DELAY $addr $value"
148 return $value
149 }
150 }
151 return 0
152 }
153
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.