Perform first and second level encoding of name as specified in RFC 1001 (Section 4)
(name, type, scope = None)
| 3 | |
| 4 | |
| 5 | def encode_name(name, type, scope = None): |
| 6 | """ |
| 7 | Perform first and second level encoding of name as specified in RFC 1001 (Section 4) |
| 8 | """ |
| 9 | if name == '*': |
| 10 | name = name + '\0' * 15 |
| 11 | elif len(name) > 15: |
| 12 | name = name[:15] + chr(type) |
| 13 | else: |
| 14 | name = name.ljust(15) + chr(type) |
| 15 | |
| 16 | def _do_first_level_encoding(m): |
| 17 | s = ord(m.group(0)) |
| 18 | return string.ascii_uppercase[s >> 4] + string.ascii_uppercase[s & 0x0f] |
| 19 | |
| 20 | encoded_name = chr(len(name) * 2) + re.sub('.', _do_first_level_encoding, name) |
| 21 | if scope: |
| 22 | encoded_scope = '' |
| 23 | for s in string.split(scope, '.'): |
| 24 | encoded_scope = encoded_scope + chr(len(s)) + s |
| 25 | return bytes(encoded_name + encoded_scope + '\0', 'ascii') |
| 26 | else: |
| 27 | return bytes(encoded_name + '\0', 'ascii') |
| 28 | |
| 29 | |
| 30 | def decode_name(name): |
no outgoing calls
no test coverage detected