OSDN Git Service

Initial commit
[ultramonkey-l7/l7gui.git] / src / src / org / ultramonkey / l7 / controller / GetServ.java
1 package org.ultramonkey.l7.controller;
2
3 import java.util.regex.*;
4 import java.io.*;
5
6 import org.apache.log4j.Logger;
7 import org.ultramonkey.l7.model.LogCategorySet;
8
9 /**
10  * 
11  * <p>
12  * class GetServ
13  * </p>
14  * <p>
15  * Copyright(c) NTT COMWARE 2008
16  * </p>
17  * 
18  * @author tanuma
19  */
20 public class GetServ {
21
22         /**
23          * services filename
24          */
25         private static final String SERVICE_FILENAME = "/etc/services";
26
27         /**
28          * 
29          * <p>
30          * byName method
31          * </p>
32          * 
33          * @param name
34          *            service name
35          * @param proto
36          *            protocol name
37          * @return
38          */
39         public static String byName(String name, String proto) {
40                 // --- debug log (in method) ---
41                 Logger ioFileLogger = Logger.getLogger(LogCategorySet.GUI_IO_FILE);
42                 if (ioFileLogger.isDebugEnabled()) {
43                         ioFileLogger
44                                         .debug("11584 GetServ::byName(String name, String proto) in name=\""
45                                                         + name + "\", proto=\"" + proto + "\"");
46                 }
47                 // --- debug log (in method) ---
48
49                 if (name == null || proto == null) {
50                         // --- debug log (out method) ---
51                         if (ioFileLogger.isDebugEnabled()) {
52                                 ioFileLogger
53                                                 .debug("11585 GetServ::byName(String name, String proto) out return=null");
54                         }
55                         // --- debug log (out method) ---
56                         return null;
57                 }
58
59                 try {
60                         String port = null;
61                         String line;
62
63                         String regex = "^([-_a-zA-Z0-9]+)\\s+(\\d+)/([-_a-zA-Z0-9]+)([-_a-zA-Z0-9\\s]+)*$";
64                         Pattern p = Pattern.compile(regex);
65
66                         BufferedReader br = new BufferedReader(new InputStreamReader(
67                                         new FileInputStream(SERVICE_FILENAME)));
68
69                         while ((line = br.readLine()) != null && port == null) {
70                                 line = line.replaceAll("#.*", "");
71                                 if (line.length() != 0) {
72                                         Matcher m = p.matcher(line.trim());
73                                         if (m.matches() && m.group(3).equals(proto)) {
74                                                 if (m.group(1).equals(name)) {
75                                                         port = m.group(2);
76                                                 } else if (m.group(4) != null) {
77                                                         String[] aliases = m.group(4).split("\\s");
78                                                         for (String alias : aliases) {
79                                                                 if (alias.equals(name)) {
80                                                                         port = m.group(2);
81                                                                         break;
82                                                                 }
83                                                         }
84                                                 }
85                                         }
86                                 }
87                         }
88                         br.close();
89                         if (port != null) {
90                                 // --- debug log (out method) ---
91                                 if (ioFileLogger.isDebugEnabled()) {
92                                         ioFileLogger.debug("11586 GetServ::byName(String name, String proto) out return=\"" + port + "\"");
93                                 }
94                                 // --- debug log (out method) ---
95                                 return port;
96                         } else {
97                                 // --- debug log (out method) ---
98                                 if (ioFileLogger.isDebugEnabled()) {
99                                         ioFileLogger.debug("11587 GetServ::byName(String name, String proto) out return=\"" + name + "\"");
100                                 }
101                                 // --- debug log (out method) ---
102                                 return name;
103                         }
104                 } catch (IOException ioe) {
105                         // --- debug log (out method) ---
106                         if (ioFileLogger.isDebugEnabled()) {
107                                 ioFileLogger.debug("11588 GetServ::byName(String name, String proto) out return=null");
108                         }
109                         // --- debug log (out method) ---
110                         return null;
111                 }
112         }
113 }