/*   1*/    package PFSaver;
/*   2*/    
/*   3*/    import java.io.BufferedReader;
/*   4*/    import java.io.File;
/*   5*/    import java.io.IOException;
/*   6*/    import java.io.InputStreamReader;
/*   7*/    import java.net.InetAddress;
/*   8*/    import java.net.UnknownHostException;
/*   9*/    import java.util.StringTokenizer;
/*  10*/    
/*  11*/    import WinPacketFiltering.PacketFiltering;
/*  12*/    import WinPacketFiltering.PacketFilteringException;
/*  13*/    
/*  14*/    public class PFSaver_CUI
/*  15*/    {
/*  16*/        private PFSaver saver = new PFSaver();
/*  17*/        private static final String fFolder = "FILTERS"; // フィルタファイル保存用ディレクトリ
/*  18*/        private static final String hFolder = "HANDLES"; // ハンドルファイル保存用
/*  19*/        private static final String lFolder = "RECORD";  // 終了時一時ファイル保存用
/*  20*/        private BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in));
/*  21*/        
/*  22*/        // コンストラクタ(フィルタ、ハンドルの保存用ディレクトリを作る)
/*  23*/        public PFSaver_CUI() throws Exception
/*  24*/        {
/*  25*/            File fFldr = new File(fFolder);
/*  26*/            if(!fFldr.exists())
/*  27*/            {
/*  28*/                fFldr.mkdir();
/*  29*/            }
/*  30*/            else
/*  31*/            {
/*  32*/                if(fFldr.isFile())
/*  33*/                    throw new Exception("Delete \""+fFolder+
/*  34*/                            "\" File Before Starting This Application");
/*  35*/            }
/*  36*/            
/*  37*/            File hFldr = new File(hFolder);
/*  38*/            if(!hFldr.exists())
/*  39*/            {
/*  40*/                hFldr.mkdir();
/*  41*/            }
/*  42*/            else
/*  43*/            {
/*  44*/                if(hFldr.isFile())
/*  45*/                    throw new Exception("Delete \""+hFolder+
/*  46*/                            "\" File Before Starting This Application");
/*  47*/            }
/*  48*/            
/*  49*/            File lFldr = new File(lFolder);
/*  50*/            if(!lFldr.exists())
/*  51*/            {
/*  52*/                lFldr.mkdir();
/*  53*/            }
/*  54*/            else
/*  55*/            {
/*  56*/                if(lFldr.isFile())
/*  57*/                    throw new Exception("Delete \""+lFolder+
/*  58*/                            "\" File Before Starting This Application");
/*  59*/            }
/*  60*/            
/*  61*/            // 前回終了時ファイルを読み込み
/*  62*/            saver.restoreList(lFolder);
/*  63*/        } // PFSaver_CUI END
/*  64*/        
/*  65*/        // メインメニューを表示する
/*  66*/        private void showMainMenu()
/*  67*/            throws PacketFilteringException, IOException, Exception
/*  68*/        {
/*  69*/            while(true)
/*  70*/            {
/*  71*/                boolean isFinished = false;
/*  72*/                
/*  73*/                try
/*  74*/                {
/*  75*/                    System.out.println("1. Start Filtering");
/*  76*/                    System.out.println("2. Stop Filtering");
/*  77*/                    System.out.println("3. Operate Interface");
/*  78*/                    System.out.println("4. Operate Filter");
/*  79*/                    System.out.println("9. Finish");
/*  80*/                    
/*  81*/                    System.out.print("> ");
/*  82*/                    String input = systemIn.readLine();
/*  83*/                    System.out.println();
/*  84*/                    
/*  85*/                    try
/*  86*/                    {
/*  87*/                        int inNum = Integer.parseInt(input);
/*  88*/                        switch(inNum)
/*  89*/                        {
/*  90*/                        case 1: startFiltering();       break;
/*  91*/                        case 2: stopFiltering();        break;
/*  92*/                        case 3: showHandleMenu();       break;  
/*  93*/                        case 4: showFilterMenu();       break;
/*  94*/                        case 9: isFinished=true;        break;
/*  95*/                        default: System.out.println("No Such Command!\n");
/*  96*/                        }
/*  97*/                    }
/*  98*/                    catch(NumberFormatException nfe)
/*  99*/                    {
/* 100*/                        System.out.println("Incorrect Input!\n");
/* 101*/                    }
/* 102*/                }
/* 103*/                catch(Exception e)
/* 104*/                {
/* 105*/                    System.out.println("Unexpected Error Occurred!");
/* 106*/                    e.printStackTrace();
/* 107*/                    System.exit(1);
/* 108*/                }
/* 109*/                
/* 110*/                if(isFinished) break;
/* 111*/            }
/* 112*/            
/* 113*/            finisher();
/* 114*/        } // showMainMenu END
/* 115*/        
/* 116*/        // フィルタリングを開始する
/* 117*/        private void startFiltering() throws IOException, PacketFilteringException
/* 118*/        {
/* 119*/            if(saver.isWorking())
/* 120*/            {
/* 121*/                System.out.println("Filtering has Worked Already!\n");
/* 122*/                return;
/* 123*/            }
/* 124*/            
/* 125*/            if(saver.getHandleNum()==0)
/* 126*/            {
/* 127*/                System.out.println("No Handle Has Been Made Yet!\n");
/* 128*/                return;
/* 129*/            }
/* 130*/            
/* 131*/            try
/* 132*/            {
/* 133*/                InetAddress adrs = InetAddressInputter("Bound IPAddress");
/* 134*/                
/* 135*/                System.out.println();
/* 136*/                showAllHandle();
/* 137*/                System.out.println();
/* 138*/                System.out.println("Inbound Interface Handle Number");
/* 139*/                System.out.print("> ");
/* 140*/                int inbound = Integer.parseInt(systemIn.readLine())-1;
/* 141*/                System.out.println("Outbound Interface Handle Number");
/* 142*/                System.out.print("> ");
/* 143*/                int outbound = Integer.parseInt(systemIn.readLine())-1;
/* 144*/                System.out.println();
/* 145*/                
/* 146*/                saver.startFiltering(adrs, inbound, outbound);
/* 147*/            }
/* 148*/            catch(NumberFormatException nfe)
/* 149*/            {
/* 150*/                System.out.println("Incorrect Input!\n");
/* 151*/            }
/* 152*/        } // startFiltering END
/* 153*/        
/* 154*/        // フィルタリングを停止する
/* 155*/        private void stopFiltering() throws PacketFilteringException
/* 156*/        {
/* 157*/            if(!saver.isWorking())
/* 158*/            {
/* 159*/                System.out.println("Filtering isn't Working Now!\n");
/* 160*/                return;
/* 161*/            }
/* 162*/            saver.stopFiltering();
/* 163*/        } // stopFiltering END
/* 164*/        
/* 165*/        // 終了処理
/* 166*/        private void finisher() throws PacketFilteringException, IOException, Exception
/* 167*/        {
/* 168*/            if(saver.isWorking())
/* 169*/            {
/* 170*/                stopFiltering();
/* 171*/            }
/* 172*/            
/* 173*/            saver.recordList(lFolder);
/* 174*/        } // finisher END
/* 175*/        
/* 176*/        
/* 177*/        
/* 178*/        // インタフェースハンドル関連のメニューを表示する
/* 179*/        private void showHandleMenu()
/* 180*/            throws IOException, ClassNotFoundException
/* 181*/        {
/* 182*/            while(true)
/* 183*/            {
/* 184*/                boolean isFinished = false;
/* 185*/    
/* 186*/                System.out.println("1. Show All Interface Handle");
/* 187*/                System.out.println("2. Make New Interface Handle");
/* 188*/                System.out.println("3. Delete Interface Handle");
/* 189*/                System.out.println("4. Edit Interface Handle");
/* 190*/                System.out.println("5. Load Interface Handle File");
/* 191*/                System.out.println("6. Save Interface Handle File");
/* 192*/                System.out.println("7. Delete Interface Handle File");
/* 193*/                System.out.println("9. Return");
/* 194*/                
/* 195*/                try
/* 196*/                {
/* 197*/                    System.out.print("> ");
/* 198*/                    String input = systemIn.readLine();
/* 199*/                    System.out.println();
/* 200*/                    
/* 201*/                    int inNum = Integer.parseInt(input);
/* 202*/                    switch(inNum)
/* 203*/                    {
/* 204*/                    case 1: showAllHandle();
/* 205*/                            systemIn.readLine();    break;
/* 206*/                    case 2: makeNewHandle();        break;
/* 207*/                    case 3: deleteHandle();         break;  
/* 208*/                    case 4: showEditHandleMenu();   break;
/* 209*/                    case 5: loadHandle();           break;
/* 210*/                    case 6: saveHandle();           break;
/* 211*/                    case 7: deleteHandleFile();     break;
/* 212*/                    case 9: isFinished=true;        break;
/* 213*/                    default: System.out.println("No Such Command!\n");
/* 214*/                    }
/* 215*/                }
/* 216*/                catch(NumberFormatException nfe)
/* 217*/                {
/* 218*/                    System.out.println("Incorrect Input!\n");
/* 219*/                }
/* 220*/                
/* 221*/                if(isFinished) break;
/* 222*/            }
/* 223*/        } // showHandleMenu END
/* 224*/        
/* 225*/        // 全てのインタフェースハンドルを表示する
/* 226*/        private void showAllHandle()
/* 227*/        {
/* 228*/            if(saver.getHandleNum()==0)
/* 229*/            {
/* 230*/                System.out.println("No Interface Handle Has Been Made Yet!\n");
/* 231*/                return;
/* 232*/            }
/* 233*/            
/* 234*/            for(int i=0;i<saver.getHandleNum();i++)
/* 235*/            {
/* 236*/                System.out.println((i+1)+" : "+saver.getHandleString(i));
/* 237*/            }
/* 238*/        } // showAllHandle END
/* 239*/        
/* 240*/        // 新しいインタフェースハンドルを作成する
/* 241*/        private void makeNewHandle() throws IOException
/* 242*/        {
/* 243*/            System.out.println("1. Black List Interface Handle");
/* 244*/            System.out.println("2. White List Interface Handle");
/* 245*/            
/* 246*/            try
/* 247*/            {
/* 248*/                System.out.print("> ");
/* 249*/                String input = systemIn.readLine();
/* 250*/                
/* 251*/                int inNum = Integer.parseInt(input);
/* 252*/                System.out.println();
/* 253*/                
/* 254*/                switch(inNum)
/* 255*/                {
/* 256*/                case 1: saver.addBlackListHandle(); break;
/* 257*/                case 2: saver.addWhiteListHandle(); break;
/* 258*/                default: System.out.println("No Such Command!\n");
/* 259*/                }
/* 260*/            }
/* 261*/            catch(NumberFormatException nfe)
/* 262*/            {
/* 263*/                System.out.println("Incorrect Input!\n");
/* 264*/            }
/* 265*/        } // makeNewHandle END
/* 266*/        
/* 267*/        // インタフェースハンドルを削除する
/* 268*/        private void deleteHandle() throws IOException
/* 269*/        {
/* 270*/            if(saver.getHandleNum()==0)
/* 271*/            {
/* 272*/                System.out.println("No Interface Handle Has Been Made Yet!\n");
/* 273*/                return;
/* 274*/            }
/* 275*/            
/* 276*/            showAllHandle();
/* 277*/            
/* 278*/            try
/* 279*/            {
/* 280*/                System.out.println("Interface Handle Number");
/* 281*/                System.out.print("> ");
/* 282*/                String input = systemIn.readLine();
/* 283*/                System.out.println();
/* 284*/                
/* 285*/                if(input.equalsIgnoreCase("all"))
/* 286*/                {
/* 287*/                    saver.clearHandle();
/* 288*/                }
/* 289*/                else
/* 290*/                {
/* 291*/                    int index = Integer.parseInt(input)-1;
/* 292*/                    try
/* 293*/                    {
/* 294*/                        saver.removeHandle(index);
/* 295*/                    }
/* 296*/                    catch(IndexOutOfBoundsException ioobe)
/* 297*/                    {
/* 298*/                        System.out.println("Incorrect Input!\n");
/* 299*/                    }
/* 300*/                }
/* 301*/            }
/* 302*/            catch(NumberFormatException nfe)
/* 303*/            {
/* 304*/                System.out.println("Incorrect Input!\n");
/* 305*/            }
/* 306*/        } // deleteHandle END
/* 307*/        
/* 308*/        // インタフェースハンドルファイルをロードする
/* 309*/        private void loadHandle() throws IOException, ClassNotFoundException
/* 310*/        {
/* 311*/            // インタフェースハンドルファイル一覧の取得
/* 312*/            String[] hlist = PFSaver.searchHandle(hFolder);
/* 313*/            
/* 314*/            if(hlist.length==0)
/* 315*/            {
/* 316*/                System.out.println("Found No Interface Handle File\n");
/* 317*/                return;
/* 318*/            }
/* 319*/            
/* 320*/            for(int i=0;i<hlist.length;i++)
/* 321*/            {
/* 322*/                System.out.println((i+1)+" : "+hlist[i]);
/* 323*/            }
/* 324*/            
/* 325*/            try
/* 326*/            {
/* 327*/                System.out.println("Interface Handle Number");
/* 328*/                System.out.print("> ");
/* 329*/                int input = Integer.parseInt(systemIn.readLine())-1;
/* 330*/                System.out.println();
/* 331*/                
/* 332*/                saver.readInterfaceHandle(hFolder+"\\"+hlist[input]);
/* 333*/            }
/* 334*/            catch(NumberFormatException nfe)
/* 335*/            {
/* 336*/                System.out.println("Incorrect Input!\n");
/* 337*/            }
/* 338*/            catch(IndexOutOfBoundsException ioobe)
/* 339*/            {
/* 340*/                System.out.println("Incorrect Input!\n");
/* 341*/            }
/* 342*/            catch(IOException ioe)
/* 343*/            {
/* 344*/                throw ioe;
/* 345*/            }
/* 346*/            catch(ClassNotFoundException cnfe)
/* 347*/            {
/* 348*/                throw cnfe;
/* 349*/            }
/* 350*/            catch(Exception e)
/* 351*/            {
/* 352*/                System.out.println("Can't This Handle!\n");
/* 353*/            }
/* 354*/        } // loadHandle END
/* 355*/        
/* 356*/        // インタフェースハンドルを保存する
/* 357*/        private void saveHandle() throws IOException
/* 358*/        {
/* 359*/            if(saver.getHandleNum()==0)
/* 360*/            {
/* 361*/                System.out.println("No Handle Has Been Made Yet!\n");
/* 362*/                return;
/* 363*/            }
/* 364*/            
/* 365*/            showAllHandle();
/* 366*/            
/* 367*/            try
/* 368*/            {
/* 369*/                System.out.println("Interface Handle Number");
/* 370*/                System.out.print("> ");
/* 371*/                int index = Integer.parseInt(systemIn.readLine())-1;
/* 372*/                
/* 373*/                System.out.println("Interface Handle File Name");
/* 374*/                System.out.print("> ");
/* 375*/                String filename = systemIn.readLine();
/* 376*/                
/* 377*/                // 上書き
/* 378*/                if(PFSaver.existHandle(hFolder+"\\"+filename))
/* 379*/                {
/* 380*/                    System.out.println("Overwrite? Y/N");
/* 381*/                    while(true)
/* 382*/                    {
/* 383*/                        System.out.print("> ");
/* 384*/                        String input = systemIn.readLine();
/* 385*/                        if(input.equalsIgnoreCase("Y"))
/* 386*/                        {
/* 387*/                            try
/* 388*/                            {
/* 389*/                                saver.writeInterfaceHandle(hFolder+"\\"+filename, index);
/* 390*/                            }
/* 391*/                            catch(IndexOutOfBoundsException ioobe)
/* 392*/                            {
/* 393*/                                System.out.println("Incorrect Input!\n");
/* 394*/                                continue;
/* 395*/                            }
/* 396*/                            
/* 397*/                            break;
/* 398*/                        }
/* 399*/                        else if(input.equalsIgnoreCase("N"))
/* 400*/                        {
/* 401*/                            break;
/* 402*/                        }
/* 403*/                        else
/* 404*/                        {
/* 405*/                            System.out.println("Incorrect Input!\n");
/* 406*/                        }
/* 407*/                    }
/* 408*/                    System.out.println();
/* 409*/                }
/* 410*/                else
/* 411*/                {
/* 412*/                    try
/* 413*/                    {
/* 414*/                        System.out.println();
/* 415*/                        saver.writeInterfaceHandle(hFolder+"\\"+filename, index);
/* 416*/                    }
/* 417*/                    catch(IndexOutOfBoundsException ioobe)
/* 418*/                    {
/* 419*/                        System.out.println("Incorrect Input!\n");
/* 420*/                    }
/* 421*/                }
/* 422*/            }
/* 423*/            catch(NumberFormatException nfe)
/* 424*/            {
/* 425*/                System.out.println("Incorrect Input!\n");
/* 426*/            }
/* 427*/        } // saveHandle END
/* 428*/        
/* 429*/        // インタフェースハンドルファイルを削除する
/* 430*/        private void deleteHandleFile() throws IOException
/* 431*/        {
/* 432*/            // インタフェースハンドルファイル一覧の取得
/* 433*/            String[] hlist = PFSaver.searchHandle(hFolder);
/* 434*/            
/* 435*/            if(hlist.length==0)
/* 436*/            {
/* 437*/                System.out.println("Found No Interface Handle File\n");
/* 438*/                return;
/* 439*/            }
/* 440*/            
/* 441*/            for(int i=0;i<hlist.length;i++)
/* 442*/            {
/* 443*/                System.out.println((i+1)+" : "+hlist[i]);
/* 444*/            }
/* 445*/            
/* 446*/            try
/* 447*/            {
/* 448*/                System.out.println("Interface Handle Number");
/* 449*/                System.out.print("> ");
/* 450*/                int input = Integer.parseInt(systemIn.readLine())-1;
/* 451*/                System.out.println();
/* 452*/                
/* 453*/                try
/* 454*/                {
/* 455*/                    PFSaver.deleteHandle(hFolder+"\\"+hlist[input]);
/* 456*/                }
/* 457*/                catch(IndexOutOfBoundsException ioobe)
/* 458*/                {
/* 459*/                    System.out.println("Incorrect Input!\n");
/* 460*/                }
/* 461*/                catch(Exception e)
/* 462*/                {
/* 463*/                    System.out.println("Can't Delete This File!\n");
/* 464*/                }
/* 465*/            }
/* 466*/            catch(NumberFormatException nfe)
/* 467*/            {
/* 468*/                System.out.println("Incorrect Input!\n");
/* 469*/            }
/* 470*/        } // deleteHandleFile END
/* 471*/    
/* 472*/        
/* 473*/        
/* 474*/        // インタフェースハンドル編集メニューを表示する
/* 475*/        private void showEditHandleMenu() throws IOException
/* 476*/        {
/* 477*/            if(saver.getHandleNum()==0)
/* 478*/            {
/* 479*/                System.out.println("No Handle Has Been Made Yet!\n");
/* 480*/                return;
/* 481*/            }
/* 482*/            
/* 483*/            while(true)
/* 484*/            {
/* 485*/                boolean isFinished = false;
/* 486*/    
/* 487*/                System.out.println("1. Show Filters in Interface Handle");
/* 488*/                System.out.println("2. Add Filter to Interface Handle");
/* 489*/                System.out.println("3. Remove Filter from Interface Handle");
/* 490*/                System.out.println("9. Return");
/* 491*/                
/* 492*/                System.out.print("> ");
/* 493*/                String input = systemIn.readLine();
/* 494*/                System.out.println();
/* 495*/                
/* 496*/                try
/* 497*/                {
/* 498*/                    int inNum = Integer.parseInt(input);
/* 499*/                    switch(inNum)
/* 500*/                    {
/* 501*/                    case 1: showFiltersInHandle();
/* 502*/                            systemIn.readLine();        break;
/* 503*/                    case 2: addFilterToHandle();        break;
/* 504*/                    case 3: removeFilterFromHandle();   break;  
/* 505*/                    case 9: isFinished=true;            break;
/* 506*/                    default: System.out.println("No Such Command!\n");
/* 507*/                    }
/* 508*/                }
/* 509*/                catch(NumberFormatException nfe)
/* 510*/                {
/* 511*/                    System.out.println("Incorrect Input!\n");
/* 512*/                }
/* 513*/                
/* 514*/                if(isFinished) break;
/* 515*/            }
/* 516*/        } // showEditHandleMenu END
/* 517*/        
/* 518*/        // インタフェースハンドル内の全てのフィルタを表示する
/* 519*/        private void showFiltersInHandle() throws IOException
/* 520*/        {
/* 521*/            showAllHandle();
/* 522*/            
/* 523*/            try
/* 524*/            {
/* 525*/                System.out.println("Interface Handle Number");
/* 526*/                System.out.print("> ");
/* 527*/                int input = Integer.parseInt(systemIn.readLine())-1;
/* 528*/                System.out.println();
/* 529*/                
/* 530*/                String[] list = saver.toStringFiltersInHandle(input);
/* 531*/                
/* 532*/                if(list.length==0)
/* 533*/                {
/* 534*/                    System.out.println("No Filter is Added in!");
/* 535*/                    return;
/* 536*/                }
/* 537*/                
/* 538*/                for(int i=0;i<list.length;i++)
/* 539*/                {
/* 540*/                    System.out.println(list[i]);
/* 541*/                }
/* 542*/            }
/* 543*/            catch(NumberFormatException nfe)
/* 544*/            {
/* 545*/                System.out.println("Incorrect Input!\n");
/* 546*/            }
/* 547*/            catch(IndexOutOfBoundsException ioobe)
/* 548*/            {
/* 549*/                System.out.println("Incorrect Input!\n");
/* 550*/            }
/* 551*/        } // showFiltersInHandle END
/* 552*/        
/* 553*/        // フィルタをインタフェースハンドルに加える
/* 554*/        private void addFilterToHandle() throws IOException
/* 555*/        {
/* 556*/            try
/* 557*/            {
/* 558*/                showAllHandle();
/* 559*/                System.out.println("Interface Handle Number");
/* 560*/                System.out.print("> ");
/* 561*/                int hnum = Integer.parseInt(systemIn.readLine())-1;
/* 562*/                System.out.println();
/* 563*/                
/* 564*/                if(hnum > saver.getHandleNum()-1 || hnum < 0)
/* 565*/                    throw new IndexOutOfBoundsException("Index: "+Integer.toString(hnum));
/* 566*/                    
/* 567*/                if(saver.getFilterNum()==0)
/* 568*/                {
/* 569*/                    System.out.println("No Filter Has Been Made Yet!\n");
/* 570*/                    return;
/* 571*/                }
/* 572*/                
/* 573*/                showAllFilter();
/* 574*/                System.out.println("Filter Number");
/* 575*/                System.out.print("> ");
/* 576*/                int fnum = Integer.parseInt(systemIn.readLine())-1;
/* 577*/                System.out.println();
/* 578*/                
/* 579*/                saver.setFilterToHandle(hnum,fnum);
/* 580*/            }
/* 581*/            catch(NumberFormatException nfe)
/* 582*/            {
/* 583*/                System.out.println("Incorrect Input!\n");
/* 584*/            }
/* 585*/            catch(IndexOutOfBoundsException ioobe)
/* 586*/            {
/* 587*/                System.out.println("Incorrect Input!\n");
/* 588*/            }
/* 589*/        } // addFilterToHandle END
/* 590*/        
/* 591*/        // インタフェースハンドルからフィルタを取り除く
/* 592*/        private void removeFilterFromHandle() throws IOException
/* 593*/        {
/* 594*/            showAllHandle();
/* 595*/            
/* 596*/            try
/* 597*/            {
/* 598*/                System.out.println("Interface Handle Number");
/* 599*/                System.out.print("> ");
/* 600*/                int hIndex = Integer.parseInt(systemIn.readLine())-1;
/* 601*/                System.out.println();
/* 602*/                
/* 603*/                String[] list = saver.toStringFiltersInHandle(hIndex);
/* 604*/                
/* 605*/                if(list.length==0)
/* 606*/                {
/* 607*/                    System.out.println("No Filter is Added in!\n");
/* 608*/                    return;
/* 609*/                }
/* 610*/                
/* 611*/                for(int i=0;i<list.length;i++)
/* 612*/                {
/* 613*/                    System.out.println((i+1)+" : "+list[i]);
/* 614*/                }
/* 615*/                System.out.println("Filter Number");
/* 616*/                System.out.print("> ");
/* 617*/                int fIndex = Integer.parseInt(systemIn.readLine())-1;
/* 618*/                System.out.println();
/* 619*/                
/* 620*/                saver.removeFilterFromHandle(hIndex, fIndex);
/* 621*/            }
/* 622*/            catch(NumberFormatException nfe)
/* 623*/            {
/* 624*/                System.out.println("Incorrect Input!\n");
/* 625*/            }
/* 626*/            catch(IndexOutOfBoundsException ioobe)
/* 627*/            {
/* 628*/                System.out.println("Incorrect Input!\n");
/* 629*/            }
/* 630*/        } // removeFilterFromHandle END
/* 631*/        
/* 632*/        
/* 633*/        
/* 634*/        // フィルタ関連のメニューを表示する
/* 635*/        private void showFilterMenu()
/* 636*/            throws IOException, PacketFilteringException, ClassNotFoundException
/* 637*/        {
/* 638*/            while(true)
/* 639*/            {
/* 640*/                boolean isFinished = false;
/* 641*/                
/* 642*/                System.out.println("1. Show All Filter");
/* 643*/                System.out.println("2. Make new Filter");
/* 644*/                System.out.println("3. Delete Filter");
/* 645*/                System.out.println("4. Edit Filter");
/* 646*/                System.out.println("5. Load Filter File");
/* 647*/                System.out.println("6. Save Filter File");
/* 648*/                System.out.println("7. Delete Filter File");
/* 649*/                System.out.println("9. Return");
/* 650*/                
/* 651*/                try
/* 652*/                {
/* 653*/                    System.out.print("> ");
/* 654*/                    String input = systemIn.readLine();
/* 655*/                    System.out.println();
/* 656*/                    
/* 657*/                    int inNum = Integer.parseInt(input);
/* 658*/                    switch(inNum)
/* 659*/                    {
/* 660*/                    case 1: showAllFilter();
/* 661*/                            systemIn.readLine();    break;
/* 662*/                    case 2: makeNewFilter();        break;
/* 663*/                    case 3: deleteFilter();         break;  
/* 664*/                    case 4: editFilter();           break;
/* 665*/                    case 5: loadFilter();           break;
/* 666*/                    case 6: saveFilter();           break;
/* 667*/                    case 7: deleteFilterFile();     break;
/* 668*/                    case 9: isFinished=true;        break;
/* 669*/                    default: System.out.println("No Such Command!\n");
/* 670*/                    }
/* 671*/                }
/* 672*/                catch(NumberFormatException nfe)
/* 673*/                {
/* 674*/                    System.out.println("Incorrect Input!\n");
/* 675*/                }
/* 676*/                
/* 677*/                if(isFinished) break;
/* 678*/            }
/* 679*/        } // showFilterMenu END
/* 680*/        
/* 681*/        // 全てのフィルタを表示する
/* 682*/        private void showAllFilter()
/* 683*/        {
/* 684*/            if(saver.getFilterNum()==0)
/* 685*/            {
/* 686*/                System.out.println("No Filter Has Been Made Yet!\n");
/* 687*/                return;
/* 688*/            }
/* 689*/            
/* 690*/            for(int i=0;i<saver.getFilterNum();i++)
/* 691*/            {
/* 692*/                System.out.println((i+1)+" : "+saver.getFilterString(i));
/* 693*/            }
/* 694*/        } // showAllFilter END
/* 695*/    
/* 696*/        // フィルタを削除する
/* 697*/        private void deleteFilter() throws IOException
/* 698*/        {
/* 699*/            if(saver.getFilterNum()==0)
/* 700*/            {
/* 701*/                System.out.println("No Filter Has Been Made Yet!\n");
/* 702*/                return;
/* 703*/            }
/* 704*/            
/* 705*/            showAllFilter();
/* 706*/            
/* 707*/            try
/* 708*/            {
/* 709*/                System.out.println("Filter Number");
/* 710*/                System.out.print("> ");
/* 711*/                String input = systemIn.readLine();
/* 712*/                System.out.println();
/* 713*/                
/* 714*/                if(input.equalsIgnoreCase("all"))
/* 715*/                {
/* 716*/                    saver.clearFilter();
/* 717*/                }
/* 718*/                else
/* 719*/                {
/* 720*/                    int index = Integer.parseInt(input)-1;
/* 721*/                    saver.removeFilter(index);
/* 722*/                }
/* 723*/            }
/* 724*/            catch(NumberFormatException nfe)
/* 725*/            {
/* 726*/                System.out.println("Incorrect Input!\n");
/* 727*/            }
/* 728*/            catch(IndexOutOfBoundsException ioobe)
/* 729*/            {
/* 730*/                System.out.println("Incorrect Input!\n");
/* 731*/            }
/* 732*/        } // deleteFilter END
/* 733*/        
/* 734*/        // フィルタファイルをロードする
/* 735*/        private void loadFilter() throws IOException, ClassNotFoundException
/* 736*/        {
/* 737*/            // フィルタディスクリプタファイル一覧の取得
/* 738*/            String[] list = PFSaver.searchFilter(fFolder);
/* 739*/            
/* 740*/            if(list.length==0)
/* 741*/            {
/* 742*/                System.out.println("Found No Filter File\n");
/* 743*/                return;
/* 744*/            }
/* 745*/            
/* 746*/            for(int i=0;i<list.length;i++)
/* 747*/            {
/* 748*/                System.out.println((i+1)+" : "+list[i]);
/* 749*/            }
/* 750*/            
/* 751*/            try
/* 752*/            {
/* 753*/                System.out.print("> ");
/* 754*/                int input = Integer.parseInt(systemIn.readLine())-1;
/* 755*/                System.out.println();
/* 756*/                
/* 757*/                try
/* 758*/                {
/* 759*/                    saver.readFilterDescriptor(fFolder+"\\"+list[input]);
/* 760*/                }
/* 761*/                catch(IndexOutOfBoundsException ioobe)
/* 762*/                {
/* 763*/                    System.out.println("Incorrect Input!\n");
/* 764*/                }
/* 765*/            }
/* 766*/            catch(NumberFormatException nfe)
/* 767*/            {
/* 768*/                System.out.println("Incorrect Input!\n");
/* 769*/            }
/* 770*/        } // loadFilter END
/* 771*/        
/* 772*/        // フィルタをファイルに保存する
/* 773*/        private void saveFilter() throws IOException
/* 774*/        {
/* 775*/            if(saver.getFilterNum()==0)
/* 776*/            {
/* 777*/                System.out.println("No Filter Has Been Made Yet!\n");
/* 778*/                return;
/* 779*/            }
/* 780*/            
/* 781*/            showAllFilter();
/* 782*/            
/* 783*/            try
/* 784*/            {
/* 785*/                System.out.println("Filter Number");
/* 786*/                System.out.print("> ");
/* 787*/                int index = Integer.parseInt(systemIn.readLine())-1;
/* 788*/                
/* 789*/                System.out.println("Filter File Name");
/* 790*/                String filename = systemIn.readLine();
/* 791*/                
/* 792*/                if(PFSaver.existFilter(fFolder+"\\"+filename))
/* 793*/                {
/* 794*/                    System.out.println("Overwrite? Y/N");
/* 795*/                    while(true)
/* 796*/                    {
/* 797*/                        System.out.print("> ");
/* 798*/                        String input = systemIn.readLine();
/* 799*/                        if(input.equalsIgnoreCase("Y"))
/* 800*/                        {
/* 801*/                            try
/* 802*/                            {
/* 803*/                                saver.writeFilterDescriptor(fFolder+"\\"+filename, index);
/* 804*/                            }
/* 805*/                            catch(IndexOutOfBoundsException ioobe)
/* 806*/                            {
/* 807*/                                System.out.println("Incorrect Input!");
/* 808*/                                continue;
/* 809*/                            }
/* 810*/                            
/* 811*/                            break;
/* 812*/                        }
/* 813*/                        else if(input.equalsIgnoreCase("N"))
/* 814*/                        {
/* 815*/                            break;
/* 816*/                        }
/* 817*/                        else
/* 818*/                        {
/* 819*/                            System.out.println("Incorrect Input!");
/* 820*/                        }
/* 821*/                    }
/* 822*/                }
/* 823*/                else
/* 824*/                {
/* 825*/                    try
/* 826*/                    {
/* 827*/                        saver.writeFilterDescriptor(fFolder+"\\"+filename, index);
/* 828*/                    }
/* 829*/                    catch(IndexOutOfBoundsException ioobe)
/* 830*/                    {
/* 831*/                        System.out.println("Incorrect Input!");
/* 832*/                    }
/* 833*/                }
/* 834*/                System.out.println();
/* 835*/            }
/* 836*/            catch(NumberFormatException nfe)
/* 837*/            {
/* 838*/                System.out.println("Incorrect Input!\n");
/* 839*/            }
/* 840*/        } // saveFilter END
/* 841*/        
/* 842*/        // フィルタファイルを削除する
/* 843*/        private void deleteFilterFile() throws IOException
/* 844*/        {
/* 845*/            // フィルタディスクリプタファイル一覧の取得
/* 846*/            String[] list = PFSaver.searchFilter(fFolder);
/* 847*/            
/* 848*/            if(list.length==0)
/* 849*/            {
/* 850*/                System.out.println("Found No Filter File\n");
/* 851*/                return;
/* 852*/            }
/* 853*/            
/* 854*/            for(int i=0;i<list.length;i++)
/* 855*/            {
/* 856*/                System.out.println((i+1)+" : "+list[i]);
/* 857*/            }
/* 858*/            
/* 859*/            try
/* 860*/            {
/* 861*/                System.out.println("Filter File Number");
/* 862*/                System.out.print("> ");
/* 863*/                int index = Integer.parseInt(systemIn.readLine())-1;
/* 864*/                System.out.println();
/* 865*/                
/* 866*/                saver.deleteFilter(fFolder+"\\"+list[index]);
/* 867*/            }
/* 868*/            catch(NumberFormatException nfe)
/* 869*/            {
/* 870*/                System.out.println("Incorrect Input!\n");
/* 871*/            }
/* 872*/            catch(IndexOutOfBoundsException ioobe)
/* 873*/            {
/* 874*/                System.out.println("Incorrect Input!\n");
/* 875*/            }
/* 876*/        } // deleteFilterFile END
/* 877*/    
/* 878*/        
/* 879*/        
/* 880*/        // 新しいフィルタを作成する
/* 881*/        private void makeNewFilter() throws IOException
/* 882*/        {
/* 883*/            System.out.println("1. IP Filter");
/* 884*/            System.out.println("2. ICMP Filter");
/* 885*/            System.out.println("3. TCP Filter");
/* 886*/            System.out.println("4. UDP Filter");
/* 887*/            System.out.println("9. Return");
/* 888*/            System.out.print("> ");
/* 889*/            
/* 890*/            try
/* 891*/            {
/* 892*/                String input = systemIn.readLine();
/* 893*/                System.out.println();
/* 894*/                
/* 895*/                int inNum = Integer.parseInt(input);
/* 896*/                switch(inNum)
/* 897*/                {
/* 898*/                case 1: makeNewIPFilter();      break;
/* 899*/                case 2: makeNewICMPFilter();    break;
/* 900*/                case 3: makeNewTCPFilter();     break;  
/* 901*/                case 4: makeNewUDPFilter();     break;
/* 902*/                default: System.out.println("No Such Command!\n");
/* 903*/                }
/* 904*/                System.out.println();
/* 905*/            }
/* 906*/            catch(NumberFormatException nfe)
/* 907*/            {
/* 908*/                System.out.println("Incorrect Input!\n");
/* 909*/            }
/* 910*/            catch(IllegalArgumentException iae)
/* 911*/            {
/* 912*/                System.out.println("Incorrect Input!\n");
/* 913*/            }
/* 914*/        } // makeNewFilter END
/* 915*/        
/* 916*/        // 新しいIPフィルタを作成する
/* 917*/        private void makeNewIPFilter() throws IOException
/* 918*/        {
/* 919*/            InetAddress[] inetadrs = get4IPelements();
/* 920*/            
/* 921*/            saver.addIPfilter(inetadrs[0], inetadrs[1], inetadrs[2], inetadrs[3]);
/* 922*/        } // makeNewIPFilter END
/* 923*/        
/* 924*/        // 新しいICMPフィルタを作成する
/* 925*/        private void makeNewICMPFilter() throws IOException
/* 926*/        {
/* 927*/            InetAddress[] inetadrs = get4IPelements();
/* 928*/            
/* 929*/            saver.addICMPfilter(inetadrs[0], inetadrs[1], inetadrs[2], inetadrs[3]);
/* 930*/        } // makeNewICMPFilter END
/* 931*/        
/* 932*/        // 新しいTCPフィルタを作成する
/* 933*/        private void makeNewTCPFilter() throws IOException
/* 934*/        {
/* 935*/            InetAddress[] inetadrs = get4IPelements();
/* 936*/            
/* 937*/            int[] ports = get4port();
/* 938*/            
/* 939*/            saver.addTCPfilter(inetadrs[0], inetadrs[1], inetadrs[2], inetadrs[3],
/* 940*/                    ports[0], ports[1], ports[2], ports[3]);
/* 941*/        } // makeNewTCPFilter END
/* 942*/        
/* 943*/        // 新しいUDPフィルタを作成する
/* 944*/        private void makeNewUDPFilter() throws IOException
/* 945*/        {
/* 946*/            InetAddress[] inetadrs = get4IPelements();
/* 947*/            
/* 948*/            int[] ports = get4port();
/* 949*/            
/* 950*/            saver.addUDPfilter(inetadrs[0], inetadrs[1], inetadrs[2], inetadrs[3],
/* 951*/                    ports[0], ports[1], ports[2], ports[3]);
/* 952*/        } // makeNewTCPFilter END
/* 953*/        
/* 954*/        
/* 955*/        
/* 956*/        // フィルタを編集する
/* 957*/        private void editFilter() throws IOException
/* 958*/        {
/* 959*/            if(saver.getFilterNum()==0)
/* 960*/            {
/* 961*/                System.out.println("No Filter Has Been Made Yet!\n");
/* 962*/                return;
/* 963*/            }
/* 964*/            
/* 965*/            showAllFilter();
/* 966*/            
/* 967*/            try
/* 968*/            {
/* 969*/                System.out.println("Filter Number");
/* 970*/                System.out.print("> ");
/* 971*/                int input = Integer.parseInt(systemIn.readLine())-1;
/* 972*/                System.out.println();
/* 973*/                int protocol = saver.getFilterProtocol(input);
/* 974*/                switch(protocol)
/* 975*/                {
/* 976*/                case PacketFiltering.ANY_PROTOCOL:  editIPFilter(input);    break;
/* 977*/                case PacketFiltering.ICMP:          editICMPFilter(input);  break;
/* 978*/                case PacketFiltering.TCP:           editTCPFilter(input);   break;
/* 979*/                case PacketFiltering.UDP:           editUDPFilter(input);   break;
/* 980*/                }
/* 981*/                System.out.println();
/* 982*/            }
/* 983*/            catch(NumberFormatException nfe)
/* 984*/            {
/* 985*/                System.out.println("Incorrect Input!\n");
/* 986*/            }
/* 987*/            catch(IndexOutOfBoundsException ioobe)
/* 988*/            {
/* 989*/                System.out.println("Incorrect Input!\n");
/* 990*/            }
/* 991*/            catch(IllegalArgumentException iae)
/* 992*/            {
/* 993*/                System.out.println("Incorrect Input!\n");
/* 994*/            }
/* 995*/        } // editFilter END
/* 996*/        
/* 997*/        // IPフィルタを編集する
/* 998*/        private void editIPFilter(int index) throws IOException
/* 999*/        {
/*1000*/            InetAddress[] inetadrs = get4IPelementsE();
/*1001*/            
/*1002*/            try
/*1003*/            {
/*1004*/                saver.editIPFilter(index, inetadrs[0], inetadrs[1],
/*1005*/                        inetadrs[2], inetadrs[3]);
/*1006*/            }
/*1007*/            catch(IndexOutOfBoundsException ioobe)
/*1008*/            {
/*1009*/                System.out.println("Incorrect Input!\n");
/*1010*/            }
/*1011*/        } // editIPFilter END
/*1012*/        
/*1013*/        // ICMPフィルタを編集する
/*1014*/        private void editICMPFilter(int index) throws IOException
/*1015*/        {
/*1016*/            InetAddress[] inetadrs = get4IPelementsE();
/*1017*/            
/*1018*/            try
/*1019*/            {
/*1020*/                saver.editICMPFilter(index, inetadrs[0], inetadrs[1],
/*1021*/                        inetadrs[2], inetadrs[3]);
/*1022*/            }
/*1023*/            catch(IndexOutOfBoundsException ioobe)
/*1024*/            {
/*1025*/                System.out.println("Incorrect Input!\n");
/*1026*/            }
/*1027*/        } // editICMPFilter END
/*1028*/        
/*1029*/        // TCPフィルタを編集する
/*1030*/        private void editTCPFilter(int index) throws IOException
/*1031*/        {
/*1032*/            InetAddress[] inetadrs = get4IPelementsE();
/*1033*/            
/*1034*/            int[] ports = get4portE();
/*1035*/            
/*1036*/            try
/*1037*/            {
/*1038*/                saver.editTCPFilter(index, inetadrs[0], inetadrs[1], inetadrs[2],
/*1039*/                        inetadrs[3], ports[0], ports[1], ports[2], ports[3]);
/*1040*/            }
/*1041*/            catch(IndexOutOfBoundsException ioobe)
/*1042*/            {
/*1043*/                System.out.println("Incorrect Input!\n");
/*1044*/            }
/*1045*/        } // editTCPFilter END
/*1046*/        
/*1047*/        // UDPフィルタを編集する
/*1048*/        private void editUDPFilter(int index) throws IOException
/*1049*/        {
/*1050*/            InetAddress[] inetadrs = get4IPelementsE();
/*1051*/            
/*1052*/            int[] ports = get4portE();
/*1053*/            
/*1054*/            try
/*1055*/            {
/*1056*/                saver.editUDPFilter(index, inetadrs[0], inetadrs[1], inetadrs[2],
/*1057*/                        inetadrs[3], ports[0], ports[1], ports[2], ports[3]);
/*1058*/            }
/*1059*/            catch(IndexOutOfBoundsException ioobe)
/*1060*/            {
/*1061*/                System.out.println("Incorrect Input!\n");
/*1062*/            }
/*1063*/        } // editUDPFilter END
/*1064*/    
/*1065*/    
/*1066*/        
/*1067*/        
/*1068*/        // 送信元、送信先のポート番号と(X〜Y)を求める
/*1069*/        private int[] get4port() throws IOException
/*1070*/        {
/*1071*/            int[] ports = new int[4];
/*1072*/            
/*1073*/            ports[0] = portInputter("Source Port");
/*1074*/            ports[2] = portInputter("Ceiling Source Port");
/*1075*/            ports[1] = portInputter("Destinatiopn Port");
/*1076*/            ports[3] = portInputter("Ceiling Destinatiopn Port");
/*1077*/            
/*1078*/            return ports;
/*1079*/        } // get4port END
/*1080*/        
/*1081*/        // 送信元、送信先のポート番号と(X〜Y)を求める
/*1082*/        private int[] get4portE() throws IOException
/*1083*/        {
/*1084*/            int[] ports = new int[4];
/*1085*/            
/*1086*/            ports[0] = portInputterE("Source Port");
/*1087*/            ports[2] = portInputterE("Ceiling Source Port");
/*1088*/            ports[1] = portInputterE("Destinatiopn Port");
/*1089*/            ports[3] = portInputterE("Ceiling Destinatiopn Port");
/*1090*/            
/*1091*/            return ports;
/*1092*/        } // get4portE END
/*1093*/        
/*1094*/        // InetAddressを求める
/*1095*/        private InetAddress InetAddressInputterE(String s) throws IOException
/*1096*/        {
/*1097*/            InetAddress adrs;
/*1098*/            String input;
/*1099*/            
/*1100*/            while(true)
/*1101*/            {
/*1102*/                try
/*1103*/                {
/*1104*/                    System.out.println(s);
/*1105*/                    System.out.print("> ");
/*1106*/                    input = systemIn.readLine();
/*1107*/                    if(input.equalsIgnoreCase("localhost"))
/*1108*/                    {
/*1109*/                        adrs = InetAddress.getLocalHost();
/*1110*/                    }
/*1111*/                    else if(input.equalsIgnoreCase("nomask"))
/*1112*/                    {
/*1113*/                        adrs = PacketFiltering.NO_MASKv4;
/*1114*/                    }
/*1115*/                    else if(input.equalsIgnoreCase("nomaskv6"))
/*1116*/                    {
/*1117*/                        adrs = PacketFiltering.NO_MASKv6;
/*1118*/                    }
/*1119*/                    else if(input.equalsIgnoreCase("all"))
/*1120*/                    {
/*1121*/                        adrs = PacketFiltering.ALL_IPv4;
/*1122*/                    }           
/*1123*/                    else if(input.equalsIgnoreCase("allv6"))
/*1124*/                    {
/*1125*/                        adrs = PacketFiltering.ALL_IPv6;
/*1126*/                    }
/*1127*/                    else if(input.equalsIgnoreCase("noedit"))
/*1128*/                    {
/*1129*/                        adrs = null;
/*1130*/                    }
/*1131*/                    else
/*1132*/                    {
/*1133*/                        adrs = getByAddress(input);
/*1134*/                    }
/*1135*/                    break;
/*1136*/                }
/*1137*/                catch(UnknownHostException uhe)
/*1138*/                {
/*1139*/                    System.out.println("Incorrect Input!\n");
/*1140*/                }
/*1141*/                catch(NumberFormatException nfe)
/*1142*/                {
/*1143*/                    System.out.println("Incorrect Input!\n");
/*1144*/                }
/*1145*/            }
/*1146*/            
/*1147*/            return adrs;
/*1148*/        } // InetAddressInputterE END
/*1149*/        
/*1150*/        // InetAddressを求める
/*1151*/        private InetAddress InetAddressInputter(String s) throws IOException
/*1152*/        {
/*1153*/            InetAddress adrs;
/*1154*/            String input;
/*1155*/            
/*1156*/            while(true)
/*1157*/            {
/*1158*/                try
/*1159*/                {
/*1160*/                    System.out.println(s);
/*1161*/                    System.out.print("> ");
/*1162*/                    input = systemIn.readLine();
/*1163*/                    if(input.equalsIgnoreCase("localhost"))
/*1164*/                    {
/*1165*/                        adrs = InetAddress.getLocalHost();
/*1166*/                    }
/*1167*/                    else if(input.equalsIgnoreCase("nomask"))
/*1168*/                    {
/*1169*/                        adrs = PacketFiltering.NO_MASKv4;
/*1170*/                    }
/*1171*/                    else if(input.equalsIgnoreCase("nomaskv6"))
/*1172*/                    {
/*1173*/                        adrs = PacketFiltering.NO_MASKv6;
/*1174*/                    }
/*1175*/                    else if(input.equalsIgnoreCase("all"))
/*1176*/                    {
/*1177*/                        adrs = PacketFiltering.ALL_IPv4;
/*1178*/                    }           
/*1179*/                    else if(input.equalsIgnoreCase("allv6"))
/*1180*/                    {
/*1181*/                        adrs = PacketFiltering.ALL_IPv6;
/*1182*/                    }
/*1183*/                    else
/*1184*/                    {
/*1185*/                        adrs = getByAddress(input);
/*1186*/                    }
/*1187*/                    break;
/*1188*/                }
/*1189*/                catch(UnknownHostException uhe)
/*1190*/                {
/*1191*/                    System.out.println("Incorrect Input!\n");
/*1192*/                }
/*1193*/                catch(NumberFormatException nfe)
/*1194*/                {
/*1195*/                    System.out.println("Incorrect Input!\n");
/*1196*/                }
/*1197*/            }
/*1198*/            
/*1199*/            return adrs;
/*1200*/        } // InetAddressInputter END
/*1201*/        
/*1202*/        // 送信元、送信先のIPアドレスとサブネットマスクを入力させる
/*1203*/        private InetAddress[] get4IPelementsE() throws IOException
/*1204*/        {
/*1205*/            InetAddress[] inetadrs = new InetAddress[4];
/*1206*/            
/*1207*/            inetadrs[0] = InetAddressInputterE("Source IPAddress");
/*1208*/            inetadrs[1] = InetAddressInputterE("Source Subnet Mask");
/*1209*/            inetadrs[2] = InetAddressInputterE("Destinatiopn IPAddress");
/*1210*/            inetadrs[3] = InetAddressInputterE("Destinatiopn Subnet Mask");
/*1211*/            
/*1212*/            return inetadrs;
/*1213*/        } // get4IPelements END
/*1214*/        
/*1215*/        // 送信元、送信先のIPアドレスとサブネットマスクを入力させる
/*1216*/        private InetAddress[] get4IPelements() throws IOException
/*1217*/        {
/*1218*/            InetAddress[] inetadrs = new InetAddress[4];
/*1219*/            
/*1220*/            inetadrs[0] = InetAddressInputter("Source IPAddress");
/*1221*/            inetadrs[1] = InetAddressInputter("Source Subnet Mask");
/*1222*/            inetadrs[2] = InetAddressInputter("Destinatiopn IPAddress");
/*1223*/            inetadrs[3] = InetAddressInputter("Destinatiopn Subnet Mask");
/*1224*/            
/*1225*/            return inetadrs;
/*1226*/        } // get4IPelements END
/*1227*/        
/*1228*/        // ポート番号を求める
/*1229*/        private int portInputter(String s) throws IOException
/*1230*/        {
/*1231*/            int port;
/*1232*/            String input;
/*1233*/            
/*1234*/            while(true)
/*1235*/            {
/*1236*/                try
/*1237*/                {
/*1238*/                    System.out.println(s);
/*1239*/                    System.out.print("> ");
/*1240*/                    input = systemIn.readLine();
/*1241*/                    if(input.equalsIgnoreCase("anyport"))
/*1242*/                    {
/*1243*/                        port = PacketFiltering.ANY_PORT;
/*1244*/                    }
/*1245*/                    else if(input.equalsIgnoreCase("noset"))
/*1246*/                    {
/*1247*/                        port = PacketFiltering.ONLY_1_PORT;
/*1248*/                    }
/*1249*/                    else
/*1250*/                    {
/*1251*/                        port = Integer.parseInt(input);
/*1252*/                    }
/*1253*/                    break;
/*1254*/                }
/*1255*/                catch(NumberFormatException nfe)
/*1256*/                {
/*1257*/                    System.out.println("Incorrect Input!\n");
/*1258*/                }
/*1259*/            }
/*1260*/            
/*1261*/            return port;
/*1262*/        } // InetAddress END
/*1263*/        
/*1264*/        // ポート番号を求める
/*1265*/        private int portInputterE(String s) throws IOException
/*1266*/        {
/*1267*/            int port;
/*1268*/            String input;
/*1269*/            
/*1270*/            while(true)
/*1271*/            {
/*1272*/                try
/*1273*/                {
/*1274*/                    System.out.println(s);
/*1275*/                    System.out.print("> ");
/*1276*/                    input = systemIn.readLine();
/*1277*/                    if(input.equalsIgnoreCase("anyport"))
/*1278*/                    {
/*1279*/                        port = PacketFiltering.ANY_PORT;
/*1280*/                    }
/*1281*/                    else if(input.equalsIgnoreCase("noset"))
/*1282*/                    {
/*1283*/                        port = PacketFiltering.ONLY_1_PORT;
/*1284*/                    }
/*1285*/                    else if(input.equalsIgnoreCase("noedit"))
/*1286*/                    {
/*1287*/                        port = PacketFiltering.NO_SET;
/*1288*/                    }
/*1289*/                    else
/*1290*/                    {
/*1291*/                        port = Integer.parseInt(input);
/*1292*/                    }
/*1293*/                    break;
/*1294*/                }
/*1295*/                catch(NumberFormatException nfe)
/*1296*/                {
/*1297*/                    System.out.println("Incorrect Input!\n");
/*1298*/                }
/*1299*/            }
/*1300*/            
/*1301*/            return port;
/*1302*/        } // InetAddress END
/*1303*/        
/*1304*/        // String形式アドレスからInetAddressを得る
/*1305*/        private static InetAddress getByAddress(String ipadrs)
/*1306*/            throws NumberFormatException, UnknownHostException
/*1307*/        {
/*1308*/            StringTokenizer tok = new StringTokenizer(ipadrs ,".");
/*1309*/            byte[] adrspart = new byte[tok.countTokens()];
/*1310*/            
/*1311*/            for(int i=0;tok.hasMoreTokens();i++)
/*1312*/            {
/*1313*/                String input = tok.nextToken();
/*1314*/                adrspart[i] = (byte)(Integer.parseInt(input));
/*1315*/            }
/*1316*/            
/*1317*/            return InetAddress.getByAddress(adrspart);
/*1318*/        } //InetAddress END
/*1319*/        
/*1320*/        
/*1321*/        
/*1322*/        public static void main(String[] args)
/*1323*/        {
/*1324*/            try
/*1325*/            {
/*1326*/                PFSaver_CUI app = new PFSaver_CUI();
/*1327*/                app.showMainMenu();
/*1328*/            }
/*1329*/            catch(Exception e)
/*1330*/            {
/*1331*/                e.printStackTrace();
/*1332*/            }
/*1333*/        }
/*1334*/    }
inserted by FC2 system