@@ -82,32 +82,49 @@ pub(crate) fn poll_for_user_input(
82
82
continue ;
83
83
}
84
84
let peer_pubkey_and_ip_addr = peer_pubkey_and_ip_addr. unwrap ( ) ;
85
- let ( pubkey, peer_addr) =
86
- match parse_peer_info ( peer_pubkey_and_ip_addr. to_string ( ) ) {
87
- Ok ( info) => info,
88
- Err ( e) => {
89
- println ! ( "{:?}" , e. into_inner( ) . unwrap( ) ) ;
90
- continue ;
91
- } ,
85
+
86
+ let mut pubkey_and_addr = peer_pubkey_and_ip_addr. split ( "@" ) ;
87
+ let pubkey = pubkey_and_addr. next ( ) ;
88
+ let peer_addr_str = pubkey_and_addr. next ( ) ;
89
+ let pubkey = hex_utils:: to_compressed_pubkey ( pubkey. unwrap ( ) ) ;
90
+ if pubkey. is_none ( ) {
91
+ println ! ( "ERROR: unable to parse given pubkey for node" ) ;
92
+ continue ;
93
+ }
94
+ let pubkey = pubkey. unwrap ( ) ;
95
+
96
+ if peer_addr_str. is_none ( ) {
97
+ if peer_manager. peer_by_node_id ( & pubkey) . is_none ( ) {
98
+ println ! ( "ERROR: Peer address not provided and peer is not connected" ) ;
99
+ continue ;
100
+ }
101
+ } else {
102
+ let ( pubkey, peer_addr) =
103
+ match parse_peer_info ( peer_pubkey_and_ip_addr. to_string ( ) ) {
104
+ Ok ( info) => info,
105
+ Err ( e) => {
106
+ println ! ( "{:?}" , e. into_inner( ) . unwrap( ) ) ;
107
+ continue ;
108
+ } ,
109
+ } ;
110
+
111
+ if tokio:: runtime:: Handle :: current ( )
112
+ . block_on ( connect_peer_if_necessary (
113
+ pubkey,
114
+ peer_addr,
115
+ peer_manager. clone ( ) ,
116
+ ) )
117
+ . is_err ( )
118
+ {
119
+ continue ;
92
120
} ;
121
+ }
93
122
94
123
let chan_amt_sat: Result < u64 , _ > = channel_value_sat. unwrap ( ) . parse ( ) ;
95
124
if chan_amt_sat. is_err ( ) {
96
125
println ! ( "ERROR: channel amount must be a number" ) ;
97
126
continue ;
98
127
}
99
-
100
- if tokio:: runtime:: Handle :: current ( )
101
- . block_on ( connect_peer_if_necessary (
102
- pubkey,
103
- peer_addr,
104
- peer_manager. clone ( ) ,
105
- ) )
106
- . is_err ( )
107
- {
108
- continue ;
109
- } ;
110
-
111
128
let ( mut announce_channel, mut with_anchors) = ( false , false ) ;
112
129
while let Some ( word) = words. next ( ) {
113
130
match word {
@@ -131,11 +148,14 @@ pub(crate) fn poll_for_user_input(
131
148
)
132
149
. is_ok ( )
133
150
{
134
- let peer_data_path = format ! ( "{}/channel_peer_data" , ldk_data_dir. clone( ) ) ;
135
- let _ = disk:: persist_channel_peer (
136
- Path :: new ( & peer_data_path) ,
137
- peer_pubkey_and_ip_addr,
138
- ) ;
151
+ if peer_addr_str. is_some ( ) {
152
+ let peer_data_path =
153
+ format ! ( "{}/channel_peer_data" , ldk_data_dir. clone( ) ) ;
154
+ let _ = disk:: persist_channel_peer (
155
+ Path :: new ( & peer_data_path) ,
156
+ peer_pubkey_and_ip_addr,
157
+ ) ;
158
+ }
139
159
}
140
160
} ,
141
161
"sendpayment" => {
@@ -498,7 +518,7 @@ fn help() {
498
518
println ! ( " help\t Shows a list of commands." ) ;
499
519
println ! ( " quit\t Close the application." ) ;
500
520
println ! ( "\n Channels:" ) ;
501
- println ! ( " openchannel pubkey@host:port <amt_satoshis> [--public] [--with-anchors]" ) ;
521
+ println ! ( " openchannel pubkey@[ host:port] <amt_satoshis> [--public] [--with-anchors]" ) ;
502
522
println ! ( " closechannel <channel_id> <peer_pubkey>" ) ;
503
523
println ! ( " forceclosechannel <channel_id> <peer_pubkey>" ) ;
504
524
println ! ( " listchannels" ) ;
0 commit comments