Commit 2bb9ce7510f6c29e1e75ae3b17737d00928e18a5
1 parent
899f1ab0
Fix read and write network interface file for Linux environment.
Showing
1 changed file
with
77 additions
and
50 deletions
Show diff stats
os_tools/linux/config/network_interface_file.anubis
| 1 | 1 | /* |
| 2 | 2 | * Created by PyramIDE. |
| 3 | - * User: Alexis | |
| 3 | + * User: Alexis & Totoro | |
| 4 | 4 | * Date: 03/09/2012 |
| 5 | 5 | * Time: 16:05 |
| 6 | 6 | * |
| 7 | 7 | * To change this template use Tools | Options | Coding | Edit Standard Headers. |
| 8 | 8 | */ |
| 9 | 9 | |
| 10 | - | |
| 11 | 10 | read system/logger.anubis |
| 12 | 11 | read system/string.anubis |
| 13 | 12 | read tools/basis.anubis |
| 14 | -read tools/kero_loggers.anubis | |
| 15 | 13 | read tools/streams.anubis |
| 16 | -read calexium_lib/net_services_protocols/logger_service.anubis | |
| 17 | - | |
| 18 | -read kero_constants.anubis | |
| 19 | 14 | |
| 20 | 15 | delete_entry |
| 21 | 16 | find_entry |
| ... | ... | @@ -64,20 +59,20 @@ define String |
| 64 | 59 | _to_String |
| 65 | 60 | ( |
| 66 | 61 | List(Network_Parameter) interface_entries, |
| 67 | - String so_far | |
| 62 | + String so_far //this is so far of the section, not the general file | |
| 68 | 63 | )= |
| 69 | 64 | if interface_entries is |
| 70 | 65 | { |
| 71 | 66 | [] then so_far, |
| 72 | 67 | [h . t] then |
| 73 | - _to_String(t, so_far + to_String(h)) | |
| 68 | + _to_String(t, so_far + "\t"+to_String(h)+"\n") | |
| 74 | 69 | }. |
| 75 | 70 | |
| 76 | 71 | public define String |
| 77 | 72 | to_String |
| 78 | 73 | ( |
| 79 | 74 | List(Network_entry) network_entries, |
| 80 | - String so_far | |
| 75 | + String so_far | |
| 81 | 76 | )= |
| 82 | 77 | if network_entries is |
| 83 | 78 | { |
| ... | ... | @@ -86,10 +81,10 @@ public define String |
| 86 | 81 | if h is |
| 87 | 82 | { |
| 88 | 83 | blank then to_String(t, so_far+"\n"), |
| 89 | - comment(comment) then to_String(t, so_far + comment+"\n"), | |
| 90 | - section(net_type, params) then to_String(t, so_far+"auto "+net_type.name+"\n")+ | |
| 84 | + comment(comment) then to_String(t, so_far + comment), | |
| 85 | + section(net_type, params) then to_String(t, so_far+"auto "+net_type.name+"\n"+ | |
| 91 | 86 | to_String(net_type)+"\n"+ |
| 92 | - _to_String( params, so_far) | |
| 87 | + _to_String( params, "")) | |
| 93 | 88 | } |
| 94 | 89 | }. |
| 95 | 90 | |
| ... | ... | @@ -100,6 +95,7 @@ define Maybe(Network_Parameter) |
| 100 | 95 | String name, |
| 101 | 96 | String left_line |
| 102 | 97 | )= |
| 98 | + //println(" Extract value for name ["+name+"] in ["+left_line+"]"); | |
| 103 | 99 | if find_char(left_line, '#', 0) is |
| 104 | 100 | { |
| 105 | 101 | failure then success(conf_nv(name, left_line)), |
| ... | ... | @@ -110,8 +106,13 @@ define Maybe(Network_Parameter) |
| 110 | 106 | success(value) then |
| 111 | 107 | if sub_string(left_line, idx+1, (length(left_line) - (idx+1))) is |
| 112 | 108 | { |
| 113 | - failure then success(conf_nv(name, value)), | |
| 114 | - success(comment) then success(conf_nvc(name, value, comment)) | |
| 109 | + failure then | |
| 110 | + //println("conf_nv found name="+name+" value="+value); | |
| 111 | + success(conf_nv(name, value)), | |
| 112 | + | |
| 113 | + success(comment) then | |
| 114 | + //println("conf_nvc found name="+name+" value="+value+" comment="+comment); | |
| 115 | + success(conf_nvc(name, value, comment)) | |
| 115 | 116 | } |
| 116 | 117 | } |
| 117 | 118 | }. |
| ... | ... | @@ -125,6 +126,7 @@ define Maybe(Network_Parameter) |
| 125 | 126 | { |
| 126 | 127 | [] then failure, |
| 127 | 128 | [ name . t] then |
| 129 | + //println("Get network parameter for ["+name+"]"); | |
| 128 | 130 | if nth((Int)0, name) is |
| 129 | 131 | { |
| 130 | 132 | failure then failure, |
| ... | ... | @@ -145,17 +147,19 @@ define Maybe(Network_type) |
| 145 | 147 | if split_by_token(line, ' ') is |
| 146 | 148 | { |
| 147 | 149 | [ ] then failure, |
| 148 | - [h . t] then | |
| 149 | - if h = "iface" then | |
| 150 | + [type . t] then | |
| 151 | + if type = "iface" then | |
| 150 | 152 | if t is |
| 151 | 153 | { |
| 152 | - [] then println("WARNING unamed iface section ["+name+"]");failure, | |
| 154 | + [] then | |
| 155 | + //println("WARNING unamed iface section ["+name+"]"); | |
| 156 | + failure, | |
| 153 | 157 | [h . t] then |
| 154 | 158 | //check if auto name is equal to iface name |
| 155 | 159 | if h = name then |
| 156 | 160 | if get_network_parameter(t) is |
| 157 | 161 | { |
| 158 | - failure then failure, | |
| 162 | + failure then failure, | |
| 159 | 163 | success(net_param) then success(iface(name, net_param)) |
| 160 | 164 | } |
| 161 | 165 | else |
| ... | ... | @@ -170,16 +174,30 @@ define List(Network_Parameter) |
| 170 | 174 | Stream s, |
| 171 | 175 | List(Network_Parameter) so_far |
| 172 | 176 | )= |
| 173 | - if read_line(s) is | |
| 174 | - { | |
| 177 | + if read_line(s) is | |
| 178 | + { | |
| 175 | 179 | failure then reverse(so_far), |
| 176 | 180 | success(line) then |
| 177 | - if get_network_parameter(split_by_token(line, ' ')) is | |
| 178 | - { | |
| 179 | - failure then reverse(so_far), | |
| 180 | - success(param) then parse_section_body(s,[param . so_far]) | |
| 181 | - } | |
| 182 | - }. | |
| 181 | + if nth((Int)0, line) is | |
| 182 | + { | |
| 183 | + failure then reverse(so_far), | |
| 184 | + success(c) then | |
| 185 | + if c = ' ' | c='\t' then | |
| 186 | + //it seem to be a a real section body entry we try it | |
| 187 | + //println("parse section line ["+trim(line)+"]"); | |
| 188 | + if get_network_parameter(split_by_token(trim(line), ' ')) is | |
| 189 | + { | |
| 190 | + failure then reverse(so_far), | |
| 191 | + success(param) then parse_section_body(s,[param . so_far]) | |
| 192 | + } | |
| 193 | + else | |
| 194 | + // itsn't part of section body, so we stop here and unput the line read | |
| 195 | + //and return the found Network_Parameter | |
| 196 | + //println("Not body part ["+trim(line)+"]"); | |
| 197 | + unput_line(s, line); | |
| 198 | + reverse(so_far) | |
| 199 | + } | |
| 200 | + }. | |
| 183 | 201 | |
| 184 | 202 | define Network_entry |
| 185 | 203 | parse_section |
| ... | ... | @@ -194,17 +212,24 @@ define Network_entry |
| 194 | 212 | if h = "auto" then |
| 195 | 213 | if t is |
| 196 | 214 | { |
| 197 | - [] then println("WARNING unamed section ["+h+"]");blank, | |
| 215 | + [] then | |
| 216 | + //println("WARNING unamed section ["+h+"]"); | |
| 217 | + blank, | |
| 198 | 218 | [ name . t ] then |
| 219 | + //println("auto found with name ["+name+"]"); | |
| 199 | 220 | //read the second line of the section where the type is located i.e. iface |
| 200 | 221 | if read_line(s) is |
| 201 | 222 | { |
| 202 | 223 | failure then blank, |
| 203 | 224 | success(type_line) then |
| 204 | - if get_type(type_line, name) is | |
| 225 | + //println("get type line for "+name+"["+trim(type_line)+"]"); | |
| 226 | + if get_type(trim(type_line), name) is | |
| 205 | 227 | { |
| 206 | - failure then blank, | |
| 228 | + failure then | |
| 229 | + //println("type not found for "+name); | |
| 230 | + blank, | |
| 207 | 231 | success(type_entry) then |
| 232 | + //println("type found, parse for section"); | |
| 208 | 233 | section(type_entry, parse_section_body(s,[])) |
| 209 | 234 | } |
| 210 | 235 | } |
| ... | ... | @@ -228,7 +253,7 @@ define Network_entry |
| 228 | 253 | if c = '#' then |
| 229 | 254 | comment(line) |
| 230 | 255 | else |
| 231 | - parse_section(s, line) | |
| 256 | + parse_section(s, trim(line)) | |
| 232 | 257 | }. |
| 233 | 258 | |
| 234 | 259 | define List(Network_entry) |
| ... | ... | @@ -240,7 +265,9 @@ define List(Network_entry) |
| 240 | 265 | if read_line(s) is |
| 241 | 266 | { |
| 242 | 267 | failure then reverse(so_far), |
| 243 | - success(line) then println(line);read_interface_entries(s, [read_interface_entry(s, trim(line)) . so_far]) | |
| 268 | + success(line) then | |
| 269 | + //println("["+line+"]"); | |
| 270 | + read_interface_entries(s, [read_interface_entry(s, line) . so_far]) | |
| 244 | 271 | }. |
| 245 | 272 | |
| 246 | 273 | public define List(Network_entry) |
| ... | ... | @@ -255,34 +282,34 @@ public define List(Network_entry) |
| 255 | 282 | read_interface_entries(make_stream(f), []) |
| 256 | 283 | }. |
| 257 | 284 | |
| 258 | -public define String | |
| 259 | - dump_interface_file | |
| 260 | - = | |
| 261 | - to_String(read_interface(etc_directory+"/network/interfaces"),""). | |
| 262 | - | |
| 263 | 285 | public define Maybe(One) |
| 264 | 286 | write_interface |
| 265 | 287 | ( |
| 266 | - String interface_file | |
| 288 | + String file_name, | |
| 289 | + List(Network_entry) entries | |
| 267 | 290 | )= |
| 268 | - if (Maybe(RWStream))file(etc_directory+"/network/interfaces_bis", new) is | |
| 291 | + if (Maybe(RWStream))file(file_name, new) is | |
| 269 | 292 | { |
| 270 | 293 | failure then failure, |
| 271 | - success(f) then success(forget(reliable_write(f, to_byte_array(dump_interface_file)))) | |
| 294 | + success(f) then success(forget(reliable_write(f, to_byte_array(to_String(entries, ""))))) | |
| 272 | 295 | }. |
| 273 | 296 | |
| 274 | 297 | |
| 275 | - | |
| 276 | - | |
| 298 | + /** here tool for testing | |
| 299 | + * anbexec parse_interface <given_file> | |
| 300 | + * will produce a dump of given_file into file named as original with ".dump" as an extension | |
| 301 | + */ | |
| 302 | + | |
| 277 | 303 | global define One |
| 278 | - test_file | |
| 279 | - ( | |
| 280 | - List(String) args | |
| 281 | - )= | |
| 282 | - if write_interface(dump_interface_file) is | |
| 283 | - { | |
| 284 | - failure then unique, | |
| 285 | - success(_) then unique | |
| 286 | - } | |
| 304 | + parse_interface | |
| 305 | + ( | |
| 306 | + List(String) args | |
| 307 | + )= | |
| 308 | + if args is | |
| 309 | + { | |
| 310 | + [] then print("usage : parse_interface <file>"), | |
| 311 | + [ file_name . t ] then | |
| 312 | + forget(write_interface(file_name+".dump",read_interface(file_name))) | |
| 313 | + } | |
| 287 | 314 | . |
| 288 | 315 | ... | ... |