@@ -13,7 +13,8 @@ use bitcoin::blockdata::opcodes;
13
13
14
14
use chain:: chaininterface:: { ChainError , ChainWatchInterface } ;
15
15
use ln:: channelmanager;
16
- use ln:: msgs:: { ErrorAction , HandleError , RoutingMessageHandler , NetAddress , GlobalFeatures , NetworkAPI } ;
16
+
17
+ use ln:: msgs:: { ErrorAction , HandleError , RoutingMessageHandler , NetAddress , GlobalFeatures } ;
17
18
use ln:: msgs;
18
19
use util:: ser:: Writeable ;
19
20
use util:: logger:: Logger ;
@@ -55,7 +56,7 @@ struct DirectionalChannelInfo {
55
56
htlc_minimum_msat : u64 ,
56
57
fee_base_msat : u32 ,
57
58
fee_proportional_millionths : u32 ,
58
- }
59
+ }
59
60
60
61
impl std:: fmt:: Display for DirectionalChannelInfo {
61
62
fn fmt ( & self , f : & mut std:: fmt:: Formatter ) -> Result < ( ) , std:: fmt:: Error > {
@@ -68,6 +69,9 @@ struct ChannelInfo {
68
69
features : GlobalFeatures ,
69
70
one_to_two : DirectionalChannelInfo ,
70
71
two_to_one : DirectionalChannelInfo ,
72
+ //this is cached here so we can send out it later if required by route_init_sync
73
+ announcement_message : Option < msgs:: ChannelAnnouncement > ,
74
+ last_update_message : Option < msgs:: ChannelUpdate > ,
71
75
}
72
76
73
77
impl std:: fmt:: Display for ChannelInfo {
@@ -91,6 +95,8 @@ struct NodeInfo {
91
95
rgb : [ u8 ; 3 ] ,
92
96
alias : [ u8 ; 32 ] ,
93
97
addresses : Vec < NetAddress > ,
98
+ //this is cached here so we can send out it later if required by route_init_sync
99
+ announcement_message : Option < msgs:: NodeAnnouncement > ,
94
100
}
95
101
96
102
impl std:: fmt:: Display for NodeInfo {
@@ -184,7 +190,7 @@ pub struct RouteHint {
184
190
/// Tracks a view of the network, receiving updates from peers and generating Routes to
185
191
/// payment destinations.
186
192
pub struct Router {
187
- secp_ctx : Secp256k1 < secp256k1:: VerifyOnly > ,
193
+ secp_ctx : Secp256k1 < secp256k1:: All > ,
188
194
network_map : RwLock < NetworkMap > ,
189
195
chain_monitor : Arc < ChainWatchInterface > ,
190
196
logger : Arc < Logger > ,
@@ -221,6 +227,7 @@ impl RoutingMessageHandler for Router {
221
227
node. rgb = msg. contents . rgb ;
222
228
node. alias = msg. contents . alias ;
223
229
node. addresses = msg. contents . addresses . clone ( ) ;
230
+
224
231
Ok ( msg. contents . excess_data . is_empty ( ) && msg. contents . excess_address_data . is_empty ( ) && !msg. contents . features . supports_unknown_bits ( ) )
225
232
}
226
233
}
@@ -288,7 +295,9 @@ impl RoutingMessageHandler for Router {
288
295
htlc_minimum_msat : u64:: max_value ( ) ,
289
296
fee_base_msat : u32:: max_value ( ) ,
290
297
fee_proportional_millionths : u32:: max_value ( ) ,
291
- }
298
+ } ,
299
+ announcement_message : Some ( msg. clone ( ) ) ,
300
+ last_update_message : None ,
292
301
} ;
293
302
294
303
match network. channels . entry ( NetworkMap :: get_key ( msg. contents . short_channel_id , msg. contents . chain_hash ) ) {
@@ -332,6 +341,7 @@ impl RoutingMessageHandler for Router {
332
341
rgb: [ 0 ; 3 ] ,
333
342
alias: [ 0 ; 32 ] ,
334
343
addresses: Vec :: new( ) ,
344
+ announcement_message: None ,
335
345
} ) ;
336
346
}
337
347
}
@@ -382,6 +392,7 @@ impl RoutingMessageHandler for Router {
382
392
}
383
393
}
384
394
395
+ channel. last_update_message = Some ( msg. clone ( ) ) ;
385
396
let msg_hash = Message :: from_slice ( & Sha256dHash :: from_data ( & msg. contents . encode ( ) [ ..] ) [ ..] ) . unwrap ( ) ;
386
397
if msg. contents . flags & 1 == 1 {
387
398
dest_node_id = channel. one_to_two . src_node_id . clone ( ) ;
@@ -426,14 +437,29 @@ impl RoutingMessageHandler for Router {
426
437
427
438
Ok ( msg. contents . excess_data . is_empty ( ) )
428
439
}
429
- }
430
-
431
- impl NetworkAPI for Router {
432
- fn get_all_channel_announcements ( & self ) -> Result < Vec < msgs:: NodeAnnouncement > , std:: fmt:: Error > {
433
- unimplemented ! ( ) ;
440
+ fn get_all_channel_announcements ( & self ) -> Result < Vec < ( msgs:: ChannelAnnouncement , msgs:: ChannelUpdate ) > , std:: fmt:: Error > {
441
+ let mut result = Vec :: new ( ) ;
442
+ let network = self . network_map . read ( ) . unwrap ( ) ;
443
+ for ( key, value) in network. channels . iter ( ) {
444
+ if let Some ( ref i) = value. announcement_message {
445
+ if let Some ( ref j) = value. last_update_message {
446
+ let temp_tuple = ( i. clone ( ) , j. clone ( ) ) ;
447
+ result. push ( temp_tuple) ;
448
+ }
449
+ }
450
+ }
451
+ return Ok ( result)
434
452
}
453
+ ///This function generates a vec of all node_annoucment messages for all nodes it known of
435
454
fn get_all_node_announcements ( & self ) -> Result < Vec < msgs:: NodeAnnouncement > , std:: fmt:: Error > {
436
- unimplemented ! ( ) ;
455
+ let mut result = Vec :: new ( ) ;
456
+ let network = self . network_map . read ( ) . unwrap ( ) ;
457
+ for ( key, value) in network. nodes . iter ( ) {
458
+ if let Some ( ref i) = value. announcement_message {
459
+ result. push ( i. clone ( ) ) ;
460
+ }
461
+ }
462
+ Ok ( result)
437
463
}
438
464
}
439
465
@@ -478,9 +504,10 @@ impl Router {
478
504
rgb : [ 0 ; 3 ] ,
479
505
alias : [ 0 ; 32 ] ,
480
506
addresses : Vec :: new ( ) ,
507
+ announcement_message : None ,
481
508
} ) ;
482
509
Router {
483
- secp_ctx : Secp256k1 :: verification_only ( ) ,
510
+ secp_ctx : Secp256k1 :: new ( ) ,
484
511
network_map : RwLock :: new ( NetworkMap {
485
512
channels : HashMap :: new ( ) ,
486
513
our_node_id : our_pubkey,
@@ -841,6 +868,7 @@ mod tests {
841
868
rgb : [ 0 ; 3 ] ,
842
869
alias : [ 0 ; 32 ] ,
843
870
addresses : Vec :: new ( ) ,
871
+ announcement_message : None ,
844
872
} ) ;
845
873
network. channels . insert ( NetworkMap :: get_key ( 1 , zero_hash. clone ( ) ) , ChannelInfo {
846
874
features : GlobalFeatures :: new ( ) ,
@@ -861,6 +889,8 @@ mod tests {
861
889
fee_base_msat : 0 ,
862
890
fee_proportional_millionths : 0 ,
863
891
} ,
892
+ announcement_message : None ,
893
+ last_update_message : None ,
864
894
} ) ;
865
895
network. nodes . insert ( node2. clone ( ) , NodeInfo {
866
896
channels : vec ! ( NetworkMap :: get_key( 2 , zero_hash. clone( ) ) , NetworkMap :: get_key( 4 , zero_hash. clone( ) ) ) ,
@@ -871,6 +901,7 @@ mod tests {
871
901
rgb : [ 0 ; 3 ] ,
872
902
alias : [ 0 ; 32 ] ,
873
903
addresses : Vec :: new ( ) ,
904
+ announcement_message : None ,
874
905
} ) ;
875
906
network. channels . insert ( NetworkMap :: get_key ( 2 , zero_hash. clone ( ) ) , ChannelInfo {
876
907
features : GlobalFeatures :: new ( ) ,
@@ -891,6 +922,8 @@ mod tests {
891
922
fee_base_msat : 0 ,
892
923
fee_proportional_millionths : 0 ,
893
924
} ,
925
+ announcement_message : None ,
926
+ last_update_message : None ,
894
927
} ) ;
895
928
network. nodes . insert ( node8. clone ( ) , NodeInfo {
896
929
channels : vec ! ( NetworkMap :: get_key( 12 , zero_hash. clone( ) ) , NetworkMap :: get_key( 13 , zero_hash. clone( ) ) ) ,
@@ -901,6 +934,7 @@ mod tests {
901
934
rgb : [ 0 ; 3 ] ,
902
935
alias : [ 0 ; 32 ] ,
903
936
addresses : Vec :: new ( ) ,
937
+ announcement_message : None ,
904
938
} ) ;
905
939
network. channels . insert ( NetworkMap :: get_key ( 12 , zero_hash. clone ( ) ) , ChannelInfo {
906
940
features : GlobalFeatures :: new ( ) ,
@@ -921,6 +955,8 @@ mod tests {
921
955
fee_base_msat : 0 ,
922
956
fee_proportional_millionths : 0 ,
923
957
} ,
958
+ announcement_message : None ,
959
+ last_update_message : None ,
924
960
} ) ;
925
961
network. nodes . insert ( node3. clone ( ) , NodeInfo {
926
962
channels : vec ! (
@@ -937,6 +973,7 @@ mod tests {
937
973
rgb : [ 0 ; 3 ] ,
938
974
alias : [ 0 ; 32 ] ,
939
975
addresses : Vec :: new ( ) ,
976
+ announcement_message : None ,
940
977
} ) ;
941
978
network. channels . insert ( NetworkMap :: get_key ( 3 , zero_hash. clone ( ) ) , ChannelInfo {
942
979
features : GlobalFeatures :: new ( ) ,
@@ -957,6 +994,8 @@ mod tests {
957
994
fee_base_msat : 100 ,
958
995
fee_proportional_millionths : 0 ,
959
996
} ,
997
+ announcement_message : None ,
998
+ last_update_message : None ,
960
999
} ) ;
961
1000
network. channels . insert ( NetworkMap :: get_key ( 4 , zero_hash. clone ( ) ) , ChannelInfo {
962
1001
features : GlobalFeatures :: new ( ) ,
@@ -977,6 +1016,8 @@ mod tests {
977
1016
fee_base_msat : 0 ,
978
1017
fee_proportional_millionths : 0 ,
979
1018
} ,
1019
+ announcement_message : None ,
1020
+ last_update_message : None ,
980
1021
} ) ;
981
1022
network. channels . insert ( NetworkMap :: get_key ( 13 , zero_hash. clone ( ) ) , ChannelInfo {
982
1023
features : GlobalFeatures :: new ( ) ,
@@ -997,6 +1038,8 @@ mod tests {
997
1038
fee_base_msat : 0 ,
998
1039
fee_proportional_millionths : 0 ,
999
1040
} ,
1041
+ announcement_message : None ,
1042
+ last_update_message : None ,
1000
1043
} ) ;
1001
1044
network. nodes . insert ( node4. clone ( ) , NodeInfo {
1002
1045
channels : vec ! ( NetworkMap :: get_key( 5 , zero_hash. clone( ) ) , NetworkMap :: get_key( 11 , zero_hash. clone( ) ) ) ,
@@ -1007,6 +1050,7 @@ mod tests {
1007
1050
rgb : [ 0 ; 3 ] ,
1008
1051
alias : [ 0 ; 32 ] ,
1009
1052
addresses : Vec :: new ( ) ,
1053
+ announcement_message : None ,
1010
1054
} ) ;
1011
1055
network. channels . insert ( NetworkMap :: get_key ( 5 , zero_hash. clone ( ) ) , ChannelInfo {
1012
1056
features : GlobalFeatures :: new ( ) ,
@@ -1027,6 +1071,8 @@ mod tests {
1027
1071
fee_base_msat : 0 ,
1028
1072
fee_proportional_millionths : 0 ,
1029
1073
} ,
1074
+ announcement_message : None ,
1075
+ last_update_message : None ,
1030
1076
} ) ;
1031
1077
network. nodes . insert ( node5. clone ( ) , NodeInfo {
1032
1078
channels : vec ! ( NetworkMap :: get_key( 6 , zero_hash. clone( ) ) , NetworkMap :: get_key( 11 , zero_hash. clone( ) ) ) ,
@@ -1037,6 +1083,7 @@ mod tests {
1037
1083
rgb : [ 0 ; 3 ] ,
1038
1084
alias : [ 0 ; 32 ] ,
1039
1085
addresses : Vec :: new ( ) ,
1086
+ announcement_message : None ,
1040
1087
} ) ;
1041
1088
network. channels . insert ( NetworkMap :: get_key ( 6 , zero_hash. clone ( ) ) , ChannelInfo {
1042
1089
features : GlobalFeatures :: new ( ) ,
@@ -1057,6 +1104,8 @@ mod tests {
1057
1104
fee_base_msat : 0 ,
1058
1105
fee_proportional_millionths : 0 ,
1059
1106
} ,
1107
+ announcement_message : None ,
1108
+ last_update_message : None ,
1060
1109
} ) ;
1061
1110
network. channels . insert ( NetworkMap :: get_key ( 11 , zero_hash. clone ( ) ) , ChannelInfo {
1062
1111
features : GlobalFeatures :: new ( ) ,
@@ -1077,6 +1126,8 @@ mod tests {
1077
1126
fee_base_msat : 0 ,
1078
1127
fee_proportional_millionths : 0 ,
1079
1128
} ,
1129
+ announcement_message : None ,
1130
+ last_update_message : None ,
1080
1131
} ) ;
1081
1132
network. nodes . insert ( node6. clone ( ) , NodeInfo {
1082
1133
channels : vec ! ( NetworkMap :: get_key( 7 , zero_hash. clone( ) ) ) ,
@@ -1087,6 +1138,7 @@ mod tests {
1087
1138
rgb : [ 0 ; 3 ] ,
1088
1139
alias : [ 0 ; 32 ] ,
1089
1140
addresses : Vec :: new ( ) ,
1141
+ announcement_message : None ,
1090
1142
} ) ;
1091
1143
network. channels . insert ( NetworkMap :: get_key ( 7 , zero_hash. clone ( ) ) , ChannelInfo {
1092
1144
features : GlobalFeatures :: new ( ) ,
@@ -1107,6 +1159,8 @@ mod tests {
1107
1159
fee_base_msat : 0 ,
1108
1160
fee_proportional_millionths : 0 ,
1109
1161
} ,
1162
+ announcement_message : None ,
1163
+ last_update_message : None ,
1110
1164
} ) ;
1111
1165
}
1112
1166
0 commit comments