(stack, fields)
| 168 | |
| 169 | # parse protocol headers and its fields. Available fields are defined in corresponding nodes. |
| 170 | def ParseStack(stack, fields): |
| 171 | prot = stack["header"] |
| 172 | node_path = parsegraph_path + "/nodes/" + prot + ".json" |
| 173 | if not os.path.exists(node_path): |
| 174 | print("error file not exist '%s' " % (node_path)) |
| 175 | return None |
| 176 | f = open(node_path, "r", encoding="utf-8") |
| 177 | nodeinfo = json.load(f) |
| 178 | for field in fields: |
| 179 | fld_name = field.split("=")[0].strip() |
| 180 | fld_value = ( |
| 181 | field.split("=")[-1].strip() if (len(field.split("=")) >= 2) else None |
| 182 | ) |
| 183 | for item in nodeinfo["layout"]: |
| 184 | if fld_name == item["name"]: |
| 185 | mask = GetMask(item) |
| 186 | stack["fields"].append( |
| 187 | {"name": fld_name, "value": fld_value, "mask": mask} |
| 188 | ) |
| 189 | break |
| 190 | if not stack["fields"]: |
| 191 | print("warning: invalid field '%s'" % (fld_name)) |
| 192 | return None |
| 193 | |
| 194 | return stack |
| 195 | |
| 196 | |
| 197 | def ParsePattern(pattern): |
no test coverage detected