4040import java .net .DatagramSocket ;
4141import java .net .InetAddress ;
4242import java .net .InetSocketAddress ;
43+ import java .net .InterfaceAddress ;
4344import java .net .SocketAddress ;
4445import java .net .SocketException ;
4546import java .net .SocketTimeoutException ;
@@ -101,11 +102,17 @@ public class FirmwareUpdateUI extends JFrame {
101102 private JMenuItem mntmVersion ;
102103 private JMenu mnWorkflow ;
103104 private JMenuItem mntmFirmwareInstallation ;
105+ private JMenu mnNetwork ;
106+ private JMenuItem mntmSelectInterface ;
107+
108+ private static InterfaceAddress interfaceAddress ;
104109
105110 public static void main (String [] args ) {
106111 EventQueue .invokeLater (new Runnable () {
107112 public void run () {
108113 try {
114+ NetworkInterfaces networkInterfaces = new NetworkInterfaces ();
115+ FirmwareUpdateUI .interfaceAddress = networkInterfaces .getInterfaceAddress ();
109116 FirmwareUpdateUI frame = new FirmwareUpdateUI ();
110117 frame .setVisible (true );
111118 frame .constructTree ();
@@ -119,17 +126,17 @@ public void run() {
119126 public FirmwareUpdateUI () {
120127 System .out .println (System .getProperty ("os.name" ));
121128
122- setTitle ("Firmware Update Manager" );
129+ setTitle (interfaceAddress . getAddress () );
123130
124- createReceiveSocket ();
131+ createSocket ();
125132
126133 initComponents ();
127134 createEvents ();
128135 }
129136
130137 private void initComponents () {
131138 setDefaultCloseOperation (JFrame .DO_NOTHING_ON_CLOSE );
132- setBounds (100 , 100 , 338 , 350 );
139+ setBounds (100 , 100 , 408 , 350 );
133140
134141 JMenuBar menuBar = new JMenuBar ();
135142 setJMenuBar (menuBar );
@@ -184,6 +191,13 @@ private void initComponents() {
184191 mntmFirmwareInstallation = new JMenuItem ("Firmware installation" );
185192 mnWorkflow .add (mntmFirmwareInstallation );
186193
194+ mnNetwork = new JMenu ("Network" );
195+ menuBar .add (mnNetwork );
196+
197+ mntmSelectInterface = new JMenuItem ("Select Interface" );
198+ mntmSelectInterface .setAccelerator (KeyStroke .getKeyStroke (KeyEvent .VK_S , InputEvent .ALT_DOWN_MASK ));
199+ mnNetwork .add (mntmSelectInterface );
200+
187201 mnHelp = new JMenu ("Help" );
188202 menuBar .add (mnHelp );
189203
@@ -357,7 +371,7 @@ public void actionPerformed(ActionEvent e) {
357371 final DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode ) path .getPathComponent (1 );
358372 final Node node = (Node ) treeNode .getUserObject ();
359373 try {
360- TFTPClient client = new TFTPClient ("" , InetAddress .getByName (node .getIpAdress ()));
374+ TFTPClient client = new TFTPClient ("" , InetAddress .getByName (node .getIpAdress ()), getInterfaceAddress () );
361375 client .setVisible (true );
362376 } catch (UnknownHostException e1 ) {
363377 e1 .printStackTrace ();
@@ -384,7 +398,7 @@ public void actionPerformed(ActionEvent e) {
384398 }
385399
386400 try {
387- FirmwareInstallation firmware = new FirmwareInstallation (node , getFirmwareUpdate ());
401+ FirmwareInstallation firmware = new FirmwareInstallation (node , getFirmwareUpdate (), interfaceAddress );
388402 firmware .setVisible (true );
389403 } catch (Exception ex ) {
390404 ex .printStackTrace ();
@@ -424,6 +438,22 @@ public void mouseClicked(MouseEvent e) {
424438 }
425439 }
426440 });
441+
442+ mntmSelectInterface .addActionListener (new ActionListener () {
443+ public void actionPerformed (ActionEvent e ) {
444+ doInterfaces ();
445+ }
446+ });
447+ }
448+
449+ private InterfaceAddress getInterfaceAddress () {
450+ return FirmwareUpdateUI .interfaceAddress ;
451+ }
452+
453+ private void doInterfaces () {
454+ NetworkInterfaces networkInterfaces ;
455+ networkInterfaces = new NetworkInterfaces (this );
456+ networkInterfaces .Show ();
427457 }
428458
429459 private FirmwareUpdateUI getFirmwareUpdate () {
@@ -509,6 +539,16 @@ private boolean isRightClick(MouseEvent e) {
509539 && (e .getModifiers () & InputEvent .CTRL_MASK ) != 0 ));
510540 }
511541
542+ public void setTitle (InetAddress inetAddress ) {
543+ String text = inetAddress .getHostAddress ();
544+ setTitle ("Firmware Update Manager " + text );
545+ }
546+
547+ public void setInterfaceAddress (InterfaceAddress interfaceAddress ) {
548+ FirmwareUpdateUI .interfaceAddress = interfaceAddress ;
549+ createSocket ();
550+ }
551+
512552 public void constructTree () {
513553 Graphics g = getGraphics ();
514554
@@ -522,14 +562,9 @@ public void constructTree() {
522562
523563 treeMap = new TreeMap <Integer , Node >();
524564
525- for (int i = 0 ; i < 2 ; i ++) {
565+ for (int i = 0 ; i < 1 ; i ++) {
526566 try {
527- if (i == 0 ) {
528- broadcast ("?list#*" );
529- broadcast ("?list#*" );
530- } else {
531- broadcast ("?list#" );
532- }
567+ broadcast ("?list#" );
533568 while (true ) {
534569 byte [] buffer = new byte [BUFFERSIZE ];
535570 DatagramPacket dpack = new DatagramPacket (buffer , buffer .length );
@@ -647,13 +682,13 @@ public String requestUDP(Node node, String request) {
647682 return new String ("#ERROR - time out" );
648683 }
649684
650- private void createReceiveSocket () {
685+ private void createSocket () {
651686 if (socketReceive != null ) {
652687 socketReceive .close ();
653688 }
654689 try {
655690 socketReceive = new DatagramSocket (null );
656- SocketAddress sockaddr = new InetSocketAddress (PORT );
691+ SocketAddress sockaddr = new InetSocketAddress (interfaceAddress . getAddress (), PORT );
657692 socketReceive .setBroadcast (true );
658693 socketReceive .setSoTimeout (1000 );
659694 socketReceive .bind (sockaddr );
0 commit comments