@@ -90,29 +90,29 @@ public ObservableCollection<OUIInfo> OUILookupResult
9090 }
9191 }
9292
93- private string _ports ;
94- public string Ports
93+ private string _portsOrService ;
94+ public string PortsOrService
9595 {
96- get { return _ports ; }
96+ get { return _portsOrService ; }
9797 set
9898 {
99- if ( value == _ports )
99+ if ( value == _portsOrService )
100100 return ;
101101
102- _ports = value ;
102+ _portsOrService = value ;
103103 OnPropertyChanged ( ) ;
104104 }
105105 }
106106
107- private bool _portsHasError ;
108- public bool PortsHasError
107+ private bool _portsOrServiceHasError ;
108+ public bool PortsOrServiceHasError
109109 {
110- get { return _portsHasError ; }
110+ get { return _portsOrServiceHasError ; }
111111 set
112112 {
113- if ( value == _portsHasError )
113+ if ( value == _portsOrServiceHasError )
114114 return ;
115- _portsHasError = value ;
115+ _portsOrServiceHasError = value ;
116116 OnPropertyChanged ( ) ;
117117 }
118118 }
@@ -160,6 +160,20 @@ public ObservableCollection<PortLookupInfo> PortLookupResult
160160 _portLookupResult = value ;
161161 }
162162 }
163+
164+ private bool _noPortsFound ;
165+ public bool NoPortsFound
166+ {
167+ get { return _noPortsFound ; }
168+ set
169+ {
170+ if ( value == _noPortsFound )
171+ return ;
172+
173+ _noPortsFound = value ;
174+ OnPropertyChanged ( ) ;
175+ }
176+ }
163177 #endregion
164178
165179 #region Constructor, Load settings
@@ -187,16 +201,12 @@ private void LoadSettings()
187201 }
188202 #endregion
189203
190- #region Settings
191-
192- #endregion
193-
194204 #region ICommands & Actions
195205 public ICommand OUILookupCommand
196206 {
197207 get { return new RelayCommand ( p => OUILookupAction ( ) , OUILookup_CanExecute ) ; }
198208 }
199-
209+
200210 private bool OUILookup_CanExecute ( object parameter )
201211 {
202212 return ! MACAddressHasError ;
@@ -223,12 +233,12 @@ private async void OUILookupAction()
223233
224234 public ICommand PortLookupCommand
225235 {
226- get { return new RelayCommand ( p => PortLookupAction ( ) , PortLookup_CanExecute ) ; }
236+ get { return new RelayCommand ( p => PortLookupAction ( ) , PortLookup_CanExecute ) ; }
227237 }
228238
229239 private bool PortLookup_CanExecute ( object parameter )
230240 {
231- return ! PortsHasError ;
241+ return ! PortsOrServiceHasError ;
232242 }
233243
234244 private async void PortLookupAction ( )
@@ -237,16 +247,68 @@ private async void PortLookupAction()
237247
238248 PortLookupResult . Clear ( ) ;
239249
240- int [ ] ports = await PortRangeHelper . ConvertPortRangeToIntArrayAsync ( Ports ) ;
250+ List < int > ports = new List < int > ( ) ;
251+ List < string > portsByService = new List < string > ( ) ;
252+
253+ foreach ( string portOrService in PortsOrService . Split ( ';' ) )
254+ {
255+ string portOrService1 = portOrService . Trim ( ) ;
256+
257+ if ( portOrService1 . Contains ( "-" ) )
258+ {
259+ string [ ] portRange = portOrService1 . Split ( '-' ) ;
260+
261+ if ( int . TryParse ( portRange [ 0 ] , out int startPort ) && int . TryParse ( portRange [ 1 ] , out int endPort ) )
262+ {
263+ if ( ( startPort > 0 ) && ( startPort < 65536 ) && ( endPort > 0 ) && ( endPort < 65536 ) && ( startPort < endPort ) )
264+ {
265+ for ( int i = startPort ; i < endPort + 1 ; i ++ )
266+ {
267+ ports . Add ( i ) ;
268+ }
269+ }
270+ else
271+ {
272+ portsByService . Add ( portOrService1 ) ;
273+ }
274+
275+ }
276+ else
277+ {
278+ portsByService . Add ( portOrService1 ) ;
279+ }
280+ }
281+ else
282+ {
283+ if ( int . TryParse ( portOrService1 , out int port ) )
284+ {
285+ if ( port > 0 && port < 65536 )
286+ ports . Add ( port ) ;
287+ else
288+ portsByService . Add ( portOrService1 ) ;
289+ }
290+ else
291+ {
292+ portsByService . Add ( portOrService1 ) ;
293+ }
294+ }
295+ }
241296
242297 foreach ( PortLookupInfo info in await PortLookup . LookupAsync ( ports ) )
243298 {
244299 PortLookupResult . Add ( info ) ;
245300 }
246301
247- PortsHistory = new List < string > ( HistoryListHelper . Modify ( PortsHistory , Ports , SettingsManager . Current . Application_HistoryListEntries ) ) ;
302+ foreach ( PortLookupInfo info in await PortLookup . LookupByServiceAsync ( portsByService ) )
303+ {
304+ PortLookupResult . Add ( info ) ;
305+ }
306+
307+ PortsHistory = new List < string > ( HistoryListHelper . Modify ( PortsHistory , PortsOrService , SettingsManager . Current . Application_HistoryListEntries ) ) ;
248308
249309 IsPortLookupRunning = false ;
310+
311+ NoPortsFound = PortLookupResult . Count == 0 ;
250312 }
251313 #endregion
252314 }
0 commit comments