Files
dtsstreaming/__pycache__/tmats_packet.cpython-313.pyc

60 lines
16 KiB
Plaintext
Raw Normal View History

2025-07-24 10:50:29 -04:00
<EFBFBD>
8E<38>h<EFBFBD>2<00><00><><00>SrSSKrSSKJrJrJr SSKJrJr "SS5r "S S
5r g!\ a \
"S5 \ "S5 N-f=f) z?
TMATS Packet class for IRIG106 Chapter 10 TMATS frame parsing
<EFBFBD>N)<03>Dict<63>Optional<61>List)<02>IP<49>UDPz?Error: scapy library not found. Install with: pip install scapy<70>c<00><><00>\rSrSrSrSS\\4SjjrS\\4Sjr S\SS4S jr
S\\4S
jr S\ 4S jr S\4S jrS\4S jrSrg)<10> TMATSPacket<65>z-Represents an IRIG106 Chapter 10 TMATS packetN<74>original_frame_numc<00>`<00>XlX l[UR5Ul[ U5UlUR[5(a<>UR[5(aqU[nU[nURUl URUl URUlUR Ul[%UR&5UlO+SUl SUl SUlSUl[%5UlUR)5UlUR*SLUlg)z<>
Initialize TMATS packet from raw scapy packet
Args:
packet: Raw scapy packet
original_frame_num: Original frame number in PCAP file
<EFBFBD>rN)<17>
raw_packetr <00>float<61>time<6D> timestamp<6D>len<65> packet_size<7A>haslayerrr<00>src<72>src_ip<69>dst<73>dst_ip<69>sport<72>src_port<72>dport<72>dst_port<72>bytes<65>payload<61>_parse_tmats_content<6E>
tmats_info<EFBFBD>is_tmats)<05>self<6C>packetr <00>ip_layer<65> udp_layers <20>'/Users/noise/Code/pydts/tmats_packet.py<70>__init__<5F>TMATSPacket.__init__s<><00><00>!<21><0F>1C<31><1F><1F>v<EFBFBD>{<7B>{<7B>+<2B><04><0E><1E>v<EFBFBD>;<3B><04><18> <12>?<3F>?<3F>2<EFBFBD> <1E> <1E>6<EFBFBD>?<3F>?<3F>3<EFBFBD>#7<>#7<><1D>b<EFBFBD>z<EFBFBD>H<EFBFBD><1E>s<EFBFBD> <0B>I<EFBFBD>"<22>,<2C>,<2C>D<EFBFBD>K<EFBFBD>"<22>,<2C>,<2C>D<EFBFBD>K<EFBFBD>%<25>O<EFBFBD>O<EFBFBD>D<EFBFBD>M<EFBFBD>%<25>O<EFBFBD>O<EFBFBD>D<EFBFBD>M<EFBFBD> <20><19>!2<>!2<>3<>D<EFBFBD>L<EFBFBD><1C>D<EFBFBD>K<EFBFBD><1C>D<EFBFBD>K<EFBFBD><1D>D<EFBFBD>M<EFBFBD><1D>D<EFBFBD>M<EFBFBD> <20>7<EFBFBD>D<EFBFBD>L<EFBFBD><1F>3<>3<>5<><04><0F><1C><0F><0F>t<EFBFBD>3<><04> <0A><00>returnc<00><>^<07>[UR5S:agSn[[S[UR5S-
55HTn[UR5US-:<3A>dM![R
"SURX"S-5SnUS:XdMRUn O UbUR U5 US-nOUR5nSUlUbU[UR5:<3A>agURUSnURS S
S 9m/S Qn[U4S jU55(aUTU[U5USLUSLS.$g![a gf=f![R[4a gf=f)z Parse TMATS content from payload<61> Nr <00><00><00><Hri%<25><00>ascii<69>ignore)<01>errors)<08>\zR-1\<5C>G\<5C>T-<2D>P-<2D>COMMENT:<3A>DSI<53>DSTc3<00>,># <00>UH oT;v<00> M g7f<01>N<>)<03>.0<EFBFBD>pattern<72> ascii_contents <20>r'<00> <genexpr><3E>3TMATSPacket._parse_tmats_content.<locals>.<genexpr>^s<00><><00><00>N<>~<7E>G<EFBFBD>-<2D>/<2F>~<7E><><00>)<06>raw_datar@<00>data_start_offset<65> data_length<74>has_ch10_header<65>is_continuation)rr<00>range<67>min<69>struct<63>unpack<63>_parse_ch10_header<65>_find_ascii_data_start<72> ch10_header<65>decode<64>any<6E> Exception<6F>error<6F>
IndexError)r#<00> ch10_offset<65>offset<65> sync_pattern<72>
data_start<EFBFBD>
tmats_data<EFBFBD>tmats_patternsr@s @r'r <00> TMATSPacket._parse_tmats_content7s<><00><><00> <0E>t<EFBFBD>|<7C>|<7C> <1C>r<EFBFBD> !<21><17>1 <18><1E>K<EFBFBD><1F><03>B<EFBFBD><03>D<EFBFBD>L<EFBFBD>L<EFBFBD>(9<>B<EFBFBD>(><3E> ?<3F>@<40><06><16>t<EFBFBD>|<7C>|<7C>$<24><06><11>
<EFBFBD>2<>#)<29>=<3D>=<3D><14>t<EFBFBD>|<7C>|<7C>F<EFBFBD>RS<52>8<EFBFBD>7T<37>#U<>VW<56>#X<>L<EFBFBD>#<23>v<EFBFBD>-<2D>&,<2C> <0B><1D> A<01><1B>&<26><14>'<27>'<27> <0B>4<>(<28>2<EFBFBD>-<2D>
<EFBFBD>
"<22>8<>8<>:<3A>
<EFBFBD>#'<27><04> <20><19>!<21>Z<EFBFBD>3<EFBFBD>t<EFBFBD>|<7C>|<7C>3D<33>%D<><1B><1E><1C><1C>j<EFBFBD>k<EFBFBD>2<>J<EFBFBD> <15> *<2A> 1<> 1<>'<27>(<28> 1<> K<> <0A>"^<01><0E><16>N<>~<7E>N<>N<>N<>$.<2E>)6<>-7<>'*<2A>:<3A><EFBFBD>+6<>d<EFBFBD>+B<>+6<>$<24>+><3E> <16><16>O<01><18><><1D> <15><14><17> <15><>
<17> <0C> <0C>j<EFBFBD>)<29> <18><17> <18>sJ<00>A
E<00>+-E<00>AE<00>0E<00>AE<00>E<00>
E<03>E<00>E<03>E<00>E3<03>2E3rVc
<00><><00>Un[R"SURX"S-5Sn[R"SURUS-US-5Sn[R"SURUS-US-5Sn[R"SURUS-US-5SnURUS-nURUS-nURUS -n URUS
-n
S US 3UUUUUS U S 3S U
S 3US. Ulg![R[
4a
SUlgf=f)z"Parse Chapter 10 header if presentr0r/r<00>z<I<>r-<00> <00><00><00>0x<30>04X<34>02X) rW<00>
channel_id<EFBFBD> packet_lengthrF<00>header_version<6F>sequence_number<65> packet_flags<67> data_typerUN)rKrLrrOrSrT) r#rV<00>baserWrerfrFrgrhrirjs r'rM<00>TMATSPacket._parse_ch10_headerosT<00><00> $<24><19>D<EFBFBD>!<21>=<3D>=<3D><14>t<EFBFBD>|<7C>|<7C>D<EFBFBD>a<EFBFBD><16>/H<>I<>!<21>L<>L<EFBFBD><1F><1D><1D>t<EFBFBD>T<EFBFBD>\<5C>\<5C>$<24>q<EFBFBD>&<26><14>a<EFBFBD><16>-H<>I<>!<21>L<>J<EFBFBD>"<22>M<EFBFBD>M<EFBFBD>$<24><04> <0C> <0C>T<EFBFBD>!<21>V<EFBFBD>D<EFBFBD><11>F<EFBFBD>0K<30>L<>Q<EFBFBD>O<>M<EFBFBD> <20>-<2D>-<2D><04>d<EFBFBD>l<EFBFBD>l<EFBFBD>4<EFBFBD><01>6<EFBFBD>$<24>r<EFBFBD>'<27>.J<>K<>A<EFBFBD>N<>K<EFBFBD>!<21>\<5C>\<5C>$<24>r<EFBFBD>'<27>2<>N<EFBFBD>"<22>l<EFBFBD>l<EFBFBD>4<EFBFBD><02>7<EFBFBD>3<>O<EFBFBD><1F><<3C><<3C><04>R<EFBFBD><07>0<>L<EFBFBD><1C> <0C> <0C>T<EFBFBD>"<22>W<EFBFBD>-<2D>I<EFBFBD>#%<25>\<5C>#<23>$6<> 7<>(<28>!.<2E>*<2A>"0<>#2<>"$<24>\<5C>#<23>$6<> 7<>!<21>)<29>C<EFBFBD><1F>1<>%<25>
<0E>D<EFBFBD> <1C><><17> <0C> <0C>j<EFBFBD>)<29> $<24>#<23>D<EFBFBD> <1C> $<24>s<00>DD<00>!D><03>=D>c<00>j^<03>[[S[UR555HbnUS-[UR5:dM!URXS-nUR S5m[ U4SjS55(aUs $Md [UR5S:<3A>aS$S$! M<>=f)z9Find where ASCII TMATS data starts in continuation frames<65> <00>
r1c3<00>,># <00>UH oT;v<00> M g7fr<r=)r><00>c<>decodeds <20>r'rA<00>5TMATSPacket._find_ascii_data_start.<locals>.<genexpr><3E>s<00><><00><00>V<>1U<31>A<EFBFBD><07><<3C>1U<31>rC)<07>R<>G<>T<>Pr4<00>-<2D>:r-N)rIrJrrrPrQ)r#<00>i<>samplerrs @r'rN<00>"TMATSPacket._find_ascii_data_start<72>s<><00><><00><17>s<EFBFBD>2<EFBFBD>s<EFBFBD>4<EFBFBD><<3C><<3C>0<>1<>2<>A<EFBFBD><10>2<EFBFBD>v<EFBFBD><03>D<EFBFBD>L<EFBFBD>L<EFBFBD>)<29>)<29><1D><1C><1C>a<EFBFBD>"<22><04>-<2D><06><1D>$<24>m<EFBFBD>m<EFBFBD>G<EFBFBD>4<>G<EFBFBD><1A>V<>1U<31>V<>V<>V<> <20><08>W<01>3<><19><14><1C><1C>&<26><12>+<2B>r<EFBFBD>5<><14>5<><35> <1D><1C>s <00>,B-<02>-B2c<00>D<00>UR(aURS$g)z'Get the ASCII content of the TMATS datar@r<00>r!<00>r#s r'<00>get_ascii_content<6E>TMATSPacket.get_ascii_content<6E>s<00><00> <0F>?<3F>?<3F><17>?<3F>?<3F>?<3F>3<> 3<>r*c<00>D<00>UR(aURS$g)zACheck if this is a TMATS continuation frame (without Ch10 header)rHFr~rs r'<00>is_continuation_frame<6D>!TMATSPacket.is_continuation_frame<6D><00><00><00> <0F>?<3F>?<3F><17>?<3F>?<3F>#4<>5<> 5<>r*c<00>D<00>UR(aURS$g)z0Check if this frame has a full Chapter 10 headerrGFr~rs r'<00>has_chapter10_header<65> TMATSPacket.has_chapter10_header<65>r<>r*) rOrrr"r rrrrrrr!r<)<12>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__<5F>__doc__r<00>intr(rr rMrN<00>strr<72><00>boolr<6C>r<><00>__static_attributes__r=r*r'r
r
sn<00><00>7<>"4<>8<EFBFBD>C<EFBFBD>=<3D>"4<>H6<18>h<EFBFBD>t<EFBFBD>n<EFBFBD>6<18>p$<24><13>$<24><14>$<24>66<><08><13> <0A>6<>$<12>3<EFBFBD><12> <15>t<EFBFBD><15> <15>d<EFBFBD>r*r
c<00><><00>\rSrSrSrSrS\SS4SjrS\4Sjr S \S\
4S
jr S\ \4S jr S \S\4S jrS \S\S\
4SjrS\ \S\4SjrS\4SjrS\4SjrS\4SjrSrg)<16>TMATSAssembler<65><72>z)Assembles TMATS data from multiple framesc<00>.<00>/UlSUl/Ulg)Nr)<03> tmats_frames<65>assembled_content<6E> tmats_filesrs r'r(<00>TMATSAssembler.__init__<5F>s<00><00>/1<><04><19>!#<23><04><1E>&(<28><04>r*<00> tmats_packetr+Nc<00>^<00>UR(aURRU5 gg)z"Add a TMATS frame to the assemblerN)r"r<><00>append)r#r<>s r'<00> add_frame<6D>TMATSAssembler.add_frame<6D>s$<00><00> <17> <20> <20> <10> <1D> <1D> $<24> $<24>\<5C> 2<> !r*c<00><><00>UR(dg[URSS9n/n/UlUHsnUR5nU(dMUR U5 UR U5(dMESR U5nURR U5 /nMu U(a,SR U5nURR U5 UR(aXUR5n[U5S:XaUSUl UR$URU5Ul UR$SUl UR$)zHAssemble TMATS frames into complete TMATS files, stopping at END markersrc<00><00>UR$r<)r)<01>xs r'<00><lambda><3E>)TMATSAssembler.assemble.<locals>.<lambda><3E>s<00><00><01> <0B> r*)<01>keyrr) r<><00>sortedr<64>r<>r<><00>_contains_tmats_end<6E>join<69>_get_unique_tmats_filesrr<><00>_format_multiple_tmats_files)r#<00> sorted_frames<65> current_tmats<74>frame<6D>content<6E>complete_tmats<74> partial_tmats<74> unique_filess r'<00>assemble<6C>TMATSAssembler.assemble<6C>s8<00><00><13> <20> <20><15><1F>t<EFBFBD>0<>0<>6K<36>L<> <0A><1B> <0A><1D><04><18>"<22>E<EFBFBD><1B>-<2D>-<2D>/<2F>G<EFBFBD><1A><18> <19> <20> <20><17> )<29><14>'<27>'<27><07>0<>0<>!#<23><17><17><1D>!7<><0E><14> <20> <20>'<27>'<27><0E>7<> "<22> <0A>#<23> <19><1E>G<EFBFBD>G<EFBFBD>M<EFBFBD>2<>M<EFBFBD> <10> <1C> <1C> #<23> #<23>M<EFBFBD> 2<> <10> <1B> <1B><1F>7<>7<>9<>L<EFBFBD><12><<3C> <20>A<EFBFBD>%<25>)5<>a<EFBFBD><1F><04>&<26><14>%<25>%<25>%<25> *.<2E>)J<>)J<><<3C>)X<><04>&<26><14>%<25>%<25>%<25>&(<28>D<EFBFBD> "<22><13>%<25>%<25>%r*r<>c<00>6^<01>/SQn[U4SjU55$)z,Check if content contains a TMATS END marker)<04> TMATS END<4E> TMATS_ENDz-----ENDzEND----c3<00>,># <00>UH oT;v<00> M g7fr<r=)r>r?r<>s <20>r'rA<00>5TMATSAssembler._contains_tmats_end.<locals>.<genexpr><3E>s<00><><00><00>B<>\<5C>'<27>g<EFBFBD>%<25>\<5C>rC)rQ)r#r<><00> end_patternss ` r'r<><00>"TMATSAssembler._contains_tmats_end<6E>s<00><><00>
<EFBFBD> <0C> <13>B<>\<5C>B<>B<>Br*c<00> <00>/nURH{nURU5nSnUH.nURU5nURX65(dM,Sn O U(aMSUR5(dMjUR U5 M} U$)z+Get unique TMATS files, removing duplicatesFT)r<><00>_clean_tmats_content<6E>_are_tmats_equivalent<6E>stripr<70>)r#r<><00>
tmats_file<EFBFBD>cleaned<65> is_duplicate<74> existing_file<6C>existing_cleaneds r'r<><00>&TMATSAssembler._get_unique_tmats_files<65>s<><00><00><19> <0C><1E>*<2A>*<2A>J<EFBFBD><1A>/<2F>/<2F>
<EFBFBD>;<3B>G<EFBFBD>!<21>L<EFBFBD>!-<2D> <0A>#'<27>#<<3C>#<<3C>]<5D>#K<> <20><17>-<2D>-<2D>g<EFBFBD>H<>H<>#'<27>L<EFBFBD><19> ".<2E>  <20><<3C>G<EFBFBD>M<EFBFBD>M<EFBFBD>O<EFBFBD>O<EFBFBD><1C>#<23>#<23>J<EFBFBD>/<2F>+<2B><1C>r*c<00><>^<06>SRSU55nURS5n/nUH<>n[UR55S:aM"UR5m[ U4SjS55(aUR T5 M_[ U4SjS55(dM{UR T5 M<> SRU5$) z>Clean TMATS content for comparison by removing junk charactersrc3<00>^# <00>UH#oR5(dUS:XaUOSv<00> M% g7f)<03>
rN)<01> isprintable)r>rqs r'rA<00>6TMATSAssembler._clean_tmats_content.<locals>.<genexpr> s#<00><00><00>U<>W<EFBFBD><01>}<7D>}<7D><EFBFBD><EFBFBD>!<21>t<EFBFBD>)<29>!<21><12>C<>W<EFBFBD>s<00>+-r<><00>c3<00>F># <00>UHnTRU5v<00> M g7fr<)<01>
startswith<EFBFBD>r>r?<00>strippeds <20>r'rAr<>s!<00><><00><00>k<>?j<>G<EFBFBD>8<EFBFBD>&<26>&<26>w<EFBFBD>/<2F>/<2F>?j<>s<00>!)r5zR-zV-r6r7r8c3<00>,># <00>UH oT;v<00> M g7fr<r=r<>s <20>r'rAr<>s<00><><00><00>N<>8M<38>W<EFBFBD><08>(<28>8M<38>rC)r<>z----)r<><00>splitrr<>rQr<>)r#r<>r<><00>lines<65> clean_lines<65>liner<65>s @r'r<><00>#TMATSAssembler._clean_tmats_contents<><00><><00><15>'<27>'<27>U<>W<EFBFBD>U<>U<><07><18> <0A> <0A>d<EFBFBD>#<23><05><18> <0B><19>D<EFBFBD><12>4<EFBFBD>:<3A>:<3A><<3C> <20>1<EFBFBD>$<24><18><1C>z<EFBFBD>z<EFBFBD>|<7C>H<EFBFBD><12>k<>?j<>k<>k<>k<><1B>"<22>"<22>8<EFBFBD>,<2C><14>N<>8M<38>N<>N<>N<><1B>"<22>"<22>8<EFBFBD>,<2C><1A><14>y<EFBFBD>y<EFBFBD><1B>%<25>%r*<00>content1<74>content2c<00>2<00>[SURS555n[SURS555nU(aU(dgURU5nURU5nU(a[ U5[ U5- OSnUS:<3A>$)zMCheck if two TMATS contents are equivalent (accounting for minor differences)c3<00>n# <00>UH+oR5(dMUR5v<00> M- g7fr<<00>r<><00>r>r<>s r'rA<00>7TMATSAssembler._are_tmats_equivalent.<locals>.<genexpr>"<00>"<00><00><00>S<>.B<>d<EFBFBD>j<EFBFBD>j<EFBFBD>l<EFBFBD>\<5C>T<EFBFBD>Z<EFBFBD>Z<EFBFBD>\<5C>\<5C>.B<><42><00>5<01>5r<>c3<00>n# <00>UH+oR5(dMUR5v<00> M- g7fr<r<>r<>s r'rAr<>#r<>r<>Frg<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)<05>setr<74><00> intersection<6F>unionr)r#r<>r<><00>lines1<73>lines2r<32>r<><00>
similaritys r'r<><00>$TMATSAssembler._are_tmats_equivalents<><00><00><15>S<>h<EFBFBD>n<EFBFBD>n<EFBFBD>T<EFBFBD>.B<>S<>S<><06><14>S<>h<EFBFBD>n<EFBFBD>n<EFBFBD>T<EFBFBD>.B<>S<>S<><06><15>V<EFBFBD><18><1E>*<2A>*<2A>6<EFBFBD>2<> <0C><16> <0C> <0C>V<EFBFBD>$<24><05>7<<3C>S<EFBFBD><1C>&<26><13>U<EFBFBD><1A>3<>!<21>
<EFBFBD><19>C<EFBFBD><1F>r*r<>c
<00>.<00>U(dg[U5S:XaURUS5$/n[U5HIup4US:<3A>aURSSSUS-SSS35 URURU55 MK SR U5$)z+Format multiple TMATS files with separatorsrrrr<>z<============================================================z
TMATS FILE #)rr<><00> enumerater<65>r<>)r#r<><00>formatted_partsrzr<>s r'r<><00>+TMATSAssembler._format_multiple_tmats_files/s<><00><00><1A><15> <0E>{<7B> <1B>q<EFBFBD> <20><17>,<2C>,<2C>[<5B><11>^<5E><<3C> <<3C><1D><0F>&<26>{<7B>3<>M<EFBFBD>A<EFBFBD><10>1<EFBFBD>u<EFBFBD><1F>&<26>&<26><12>F<EFBFBD>8<EFBFBD>><3E>!<21>A<EFBFBD>#<23><15>b<EFBFBD><16><08>PR<50>'S<>T<> <1B> "<22> "<22>4<EFBFBD>#<<3C>#<<3C>Z<EFBFBD>#H<> I<>4<>
<12>w<EFBFBD>w<EFBFBD><EFBFBD>'<27>'r*c<00>,<00>[UR5$)zGet the number of TMATS frames)rr<>rs r'<00>get_frame_count<6E>TMATSAssembler.get_frame_count@s<00><00><12>4<EFBFBD>$<24>$<24>%<25>%r*c<00>,<00>[UR5$)z*Get the number of unique TMATS files found)rr<>rs r'<00>get_file_count<6E>TMATSAssembler.get_file_countDs<00><00><12>4<EFBFBD>#<23>#<23>$<24>$r*c<00>,<00>[UR5$)z,Get the total length of assembled TMATS data)rr<>rs r'<00>get_total_length<74>TMATSAssembler.get_total_lengthHs<00><00><12>4<EFBFBD>)<29>)<29>*<2A>*r*)r<>r<>r<>)r<>r<>r<>r<>r<>r(r
r<>r<>r<>r<>r<>rr<>r<>r<>r<>r<>r<>r<>r<>r<>r=r*r'r<>r<><00>s<><00><00>3<>)<29>
3<>k<EFBFBD>3<>d<EFBFBD>3<>
+&<26>#<23>+&<26>ZC<01>3<EFBFBD>C<01>4<EFBFBD>C<01><1C><14>c<EFBFBD><19><1C>*&<26>C<EFBFBD>&<26>C<EFBFBD>&<26>. <20>c<EFBFBD> <20>S<EFBFBD> <20>T<EFBFBD> <20> (<28><04>S<EFBFBD> <09>(<28>c<EFBFBD>(<28>"&<26><13>&<26>%<25><03>%<25>+<2B>#<23>+r*r<>)r<>rK<00>typingrrr<00>scapy.layers.inetrr<00> ImportError<6F>print<6E>exitr
r<>r=r*r'<00><module>r<>sX<00><01><04><0E>'<27>'<27> <0C>)<29> \<15>\<15>~[+<2B>[+<2B><>I<13> <0C> <09>
K<EFBFBD>L<><08><11>G<EFBFBD> <0C>s<00>/<00>A<03>A