/* Ċ Ġ* ĠCopyright Ġ@ Ġ 2 0 1 8 ĠAt lassian ĠP ty ĠLtd Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . j its i . nl j . module _ tests Ċ Ċ import Ġio . pk ts . P cap Ċ import Ġio . pk ts . packet . Packet Ċ import Ġio . pk ts . packet . UD PP acket Ċ import Ġio . pk ts . protocol . Protocol Ċ import Ġorg . j its i . nl j . sr tp . Sr tp Profile Information Ċ import Ġorg . j its i . nl j . sr tp . Tls Role Ċ import Ġorg . j its i . rtp . Un parsed Packet Ċ import Ġorg . j its i . rtp . util . ByteBuffer Utils Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ abstract Ġclass ĠAbstract Packet Producer Ġ: ĠPacket Producer Ġ{ ĊĠĠĠ Ġprivate Ġval Ġhandlers Ġ= Ġmutable ListOf < Packet Receiver >() ĊĊĠĠĠ Ġoverride Ġfun Ġsubscribe ( handler : ĠPacket Receiver ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandlers . add ( handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġon Packet ( packet : Ġorg . j its i . rtp . Packet ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandlers . forEach Ġ{ Ġit ( packet ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠS rtp Information ( ĊĠĠĠ Ġval Ġsr tp Profile Information : ĠS rtp Profile Information , ĊĠĠĠ Ġval Ġkey ing Material : ĠByteArray , ĊĠĠĠ Ġval Ġtls Role : ĠT ls Role Ċ ) Ċ Ċ data Ġclass ĠP cap File Information ( ĊĠĠĠ Ġval ĠfilePath : ĠString , ĊĠĠĠ Ġval Ġsr tp Information : ĠS rtp Information Ċ ) Ċ Ċ /** Ċ Ġ* ĠRead Ġdata Ġfrom Ġa ĠP CAP Ġfile Ġand Ġplay Ġit Ġout Ġat Ġa Ġrate Ġconsistent Ġwith Ġthe Ġpacket Ġar rival Ġtimes . Ġ ĠI . e . Ġif Ġthe ĠP CAP Ċ Ġ* Ġfile Ġcaptured Ġdata Ġflow ing Ġat Ġ 2 mb ps , Ġthis Ġproducer Ġwill Ġplay Ġit Ġout Ġat Ġ 2 mb ps Ċ Ġ*/ Ċ class ĠP cap Packet Producer ( ĊĠĠĠ Ġp cap File Information : ĠP cap File Information Ċ ) Ġ: ĠAbstract Packet Producer () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġp cap Ġ= ĠP cap . open Stream ( pcap File Information . filePath ) ĊĠĠĠ Ġvar Ġrunning : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġtranslate To Un parsed Packet ( pk ts Packet : ĠPacket ): ĠUn parsed Packet Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= Ġif Ġ( pk ts Packet . has Protocol ( Protocol . UDP )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġudp Packet Ġ= Ġpk ts Packet . get Packet ( Protocol . UDP ) Ġas ĠU D PP acket ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠByteBuffer . wrap ( udp Packet . payload . array ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen Ġcapturing Ġon Ġthe Ġloop back Ġinterface , Ġthe Ġpackets Ġhave Ġa Ġnull Ġe thernet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġframe Ġwhich Ġmes ses Ġup Ġthe Ġpk ts Ġlib ary 's Ġparsing , Ġso Ġinstead Ġuse Ġa Ġhack Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgrab Ġthe Ġbuffer Ġdirectly ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠByteBuffer Utils . wrap Sub Array ( pk ts Packet . payload . raw Array , Ġ 3 2 , Ġpk ts Packet . payload . raw Array . size Ġ- Ġ 3 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUn parsed Packet ( buf ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġnow Micro s (): ĠLong Ġ= ĠSystem . nano Time () Ġ/ Ġ 1 0 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Packet Arrival Time Ġ= Ġ- 1 L ĊĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= Ġnow Micro s () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp cap . loop Ġ{ Ġpkt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Packet Arrival Time Ġ== Ġ- 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Packet Arrival Time Ġ= Ġpkt . arrival Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Send Time Ġ= Ġpkt . arrival Time Ġ- Ġfirst Packet Arrival Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Clock Time Ġ= Ġnow Micro s () Ġ- ĠstartTime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expected Send Time Ġ> Ġnow Clock Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MICRO SECONDS . sleep ( expected Send Time Ġ- Ġnow Clock Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= Ġtranslate To Un parsed Packet ( pkt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Packet ( packet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ