package Ġcom . r vir in . on v if . on v if camera Ċ Ċ import Ġandroid . os . AsyncTask Ċ import Ġandroid . util . Log ĊĊ Ċ import Ġcom . r vir in . on v if . on v if camera . On v if Media Profiles . Companion . get Profiles Command Ċ import Ġcom . r vir in . on v if . on v if camera . On v if Media Stream URI . Companion . get Stream UR IC ommand Ċ import Ġcom . r vir in . on v if . on v if camera . On v if Media Stream URI . Companion . parse Stream URI XML Ċ import Ġcom . r vir in . on v if . on v if camera . On v if Device Information . Companion . device Information Command Ċ import Ġcom . r vir in . on v if . on v if camera . On v if Device Information . Companion . device Information ToString Ċ import Ġcom . r vir in . on v if . on v if camera . On v if Device Information . Companion . parse Device Information Response Ċ import Ġcom . r vir in . on v if . on v if camera . On v if Services . Companion . services Command Ċ import Ġcom . r vir in . on v if . on v if camera . On v if XML Builder . authorization Header Ċ import Ġcom . r vir in . on v if . on v if camera . On v if XML Builder . envelope End Ċ Ċ import Ġokhttp 3 .* Ċ import Ġok io . Buffer Ċ import Ġjava . io . IOException Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġokhttp 3 . logging . Http Logging Interceptor ĊĊ Ċ @ Jvm Field Ġvar Ġcurrent Device Ġ= ĠOn v if Device ("", Ġ"", Ġ"") Ċ Ċ interface ĠOn v if Listener Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġby ĠOn v if Device Ġeach Ġtime Ġa Ġrequest Ġhave Ġbeen Ġretrieved Ġand Ġparsed . ĊĠĠĠĠ Ġ* Ġ@ param Ġresponse ĠThe Ġresult Ġof Ġthe Ġrequest Ġalso Ġcontaining Ġthe Ġrequest ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrequest Performed ( response : ĠOn v if Response ) Ċ } Ċ Ċ /** Ċ Ġ* ĠContains Ġa Ġrequest Ġfor Ġan ĠOn v if Device Ċ Ġ* Ġ@ param Ġxml Command Ġthe Ġxml Ġstring Ġto Ġsend Ġin Ġthe Ġbody Ġof Ġthe Ġrequest Ċ Ġ* Ġ@ param Ġtype ĠThe Ġtype Ġof Ġthe Ġrequest Ċ Ġ*/ Ċ class ĠOn v if Request ( val Ġxml Command : ĠString , Ġval Ġtype : ĠType ) Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠType Ġ{ ĊĠĠĠĠĠĠĠ ĠGet Services , ĊĠĠĠĠĠĠĠ ĠGet Device Information , ĊĠĠĠĠĠĠĠ ĠGet Profiles , ĊĠĠĠĠĠĠĠ ĠGet Stream URI ; ĊĊĠĠĠĠĠĠĠ Ġfun Ġnamespace (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGet Services , ĠGet Device Information Ġ-> Ġreturn Ġ" http :// www . on v if . org / ver 1 0 / device / wsdl " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGet Profiles , ĠGet Stream URI Ġ Ġ-> Ġreturn Ġ" http :// www . on v if . org / ver 2 0 / media / wsdl " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠPaths Ġused Ġto Ġcall Ġeach Ġdifferent s Ġweb Ġservices . ĠThese Ġpaths Ġwill Ġbe Ġupdated Ċ Ġ* Ġby Ġcalling Ġget Services . Ċ Ġ*/ Ċ class ĠOn v if Camera Paths Ġ{ ĊĠĠĠ Ġvar Ġservices Ġ= Ġ"/ on v if / device _ service " ĊĠĠĠ Ġvar Ġdevice Information Ġ= Ġ"/ on v if / device _ service " ĊĠĠĠ Ġvar Ġprofiles Ġ= Ġ"/ on v if / device _ service " ĊĠĠĠ Ġvar Ġstream URI Ġ= Ġ"/ on v if / device _ service " Ċ } Ċ Ċ /** Ċ Ġ* ĠContains Ġthe Ġresponse Ġfrom Ġthe ĠOn v if Ġdevice Ċ Ġ* Ġ@ param Ġsuccess Ġif Ġthe Ġrequest Ġhave Ġbeen Ġsuccessful Ċ Ġ* Ġ@ param Ġparsing UI Message Ġmessage Ġto Ġbe Ġdisplayed Ġto Ġthe Ġuser Ċ Ġ* Ġ@ param Ġresult ĠThe Ġxml Ġstring Ġif Ġthe Ġrequest Ġhave Ġbeen Ġsuccessful Ċ Ġ* Ġ@ param Ġerror ĠThe Ġxml Ġstring Ġif Ġthe Ġrequest Ġhave Ġnot Ġbeen Ġsuccessful Ċ Ġ*/ Ċ class ĠOn v if Response ( val Ġrequest : ĠOn v if Request ) Ġ{ ĊĊĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġvar Ġmessage Ġ= Ġ"" ĊĠĠĠ Ġvar Ġparsing UI Message Ġ= Ġ"" ĊĊĠĠĠ Ġfun Ġupdate Response ( success : ĠBoolean , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . success Ġ= Ġsuccess ĊĠĠĠĠĠĠĠ Ġthis . message Ġ= Ġmessage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġresult : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success ) Ġreturn Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġerror : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! success ) Ġreturn Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ author ĠRem y ĠV ir in Ġon Ġ 0 4 / 0 3 / 2 0 1 8 . Ċ Ġ* ĠThis Ġclass Ġrepresent Ġan ĠON V IF Ġdevice Ġand Ġcontains Ġthe Ġmethods Ġto Ġinteract Ġwith Ġit Ċ Ġ* Ġ( getDevice Information , Ġget Profiles Ġand Ġget Stream URI ). Ċ Ġ* Ġ@ param ĠIP Address ĠThe ĠIP Ġaddress Ġof Ġthe Ġcamera Ċ Ġ* Ġ@ param Ġusername Ġthe Ġusername Ġto Ġlogin Ġon Ġthe Ġcamera Ċ Ġ* Ġ@ param Ġpassword Ġthe Ġpassword Ġto Ġlogin Ġon Ġthe Ġcamera Ċ Ġ*/ Ċ class ĠOn v if Device ( val Ġip Address : ĠString , Ġ@ Jvm Field Ġval Ġusername : ĠString , Ġ@ Jvm Field Ġval Ġpassword : ĠString ) Ġ{ ĊĊĠĠĠ Ġvar Ġlistener : ĠOn v if Listener ? Ġ= Ġnull ĊĠĠĠ Ġ/// ĠWe Ġuse Ġthis Ġvariable Ġto Ġknow Ġif Ġthe Ġconnection Ġhas Ġbeen Ġsuccessful Ġ( retrieve Ġdevice Ġinformation ) ĊĠĠĠ Ġvar Ġis Connected Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġurl Ġ= Ġ" http :// $ ipAddress " ĊĠĠĠ Ġprivate Ġval Ġdevice Information Ġ= ĠOn v if Device Information () ĊĠĠĠ Ġprivate Ġval Ġpaths Ġ= ĠOn v if Camera Paths () ĊĊĠĠĠ Ġvar Ġmedia Profiles : ĠList < Media Profile > Ġ= Ġempty List () ĊĊĠĠĠ Ġvar Ġrt sp URI Ġ: ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġget Services () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠOn v if Request ( services Command , ĠOn v if Request . Type . Get Services ) ĊĠĠĠĠĠĠĠ ĠON V IF communication (). execute ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Device Information () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠOn v if Request ( device Information Command , ĠOn v if Request . Type . GetDevice Information ) ĊĠĠĠĠĠĠĠ ĠON V IF communication (). execute ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Profiles () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠOn v if Request ( get Profiles Command (), ĠOn v if Request . Type . Get Profiles ) ĊĠĠĠĠĠĠĠ ĠON V IF communication (). execute ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Stream URI () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġmedia Profiles . first OrNull ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠOn v if Request ( get Stream UR IC ommand ( it ), ĠOn v if Request . Type . Get Stream URI ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠON V IF communication (). execute ( request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Stream URI ( profile : ĠMedia Profile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠOn v if Request ( get Stream UR IC ommand ( profile ), ĠOn v if Request . Type . Get Stream URI ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠON V IF communication (). execute ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCommunication Ġin ĠAsync ĠTask Ġbetween ĠAndroid Ġand ĠON V IF Ġcamera ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinner Ġclass ĠON V IF communication Ġ: ĠAsync Task < On v if Request , ĠVoid , ĠOn v if Response >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠBackground Ġprocess Ġof Ġcommunication ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġparams ĠThe ĠOn v if ĠRequest Ġto Ġexecute ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ` On v if Response ` ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo In Background ( var arg Ġparams : ĠOn v if Request ): ĠOn v if Response Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon v if Request Ġ= Ġparams [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogging Ġ= ĠHttp Logging Interceptor () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogging . setLevel ( Http Logging Interceptor . Level . BASIC ); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( 1 0 0 0 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Timeout ( 1 0 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( 1 0 0 0 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( logging ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreq Body Type Ġ= ĠMediaType . parse (" application / soap + xml ; Ġcharset = utf - 8 ; ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreq Body Ġ= ĠRequest Body . create ( req Body Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthorization Header Ġ+ Ġon v if Request . xml Command Ġ+ Ġenvelope End ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠRequest Ġto ĠON V IF Ġdevice Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrequest : ĠRequest ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url For Request ( on v if Request )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header (" Content - Type "," text / xml ; Ġcharset = utf - 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( req Body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" ERROR ", Ġe . message !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠOn v if Response ( on v if Request ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠResponse Ġfrom ĠON V IF Ġdevice Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . new Call ( request ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" BODY ", Ġbody ToString ( request )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" RESPONSE ", Ġresponse . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . code () Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= Ġresponse . body () !!. string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġresponse . code (). toString () Ġ+ Ġ" Ġ- Ġ" Ġ+ Ġresponse . message () Ġ+ Ġ"\ n " Ġ+ Ġresponse Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . update Response ( false , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . update Response ( true , Ġresponse . body () !!. string ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġui Message Ġ= Ġparse On v if Responses ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . parsing UI Message Ġ= Ġui Message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . update Response ( false , Ġe . message !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthe Ġappropriate ĠURL Ġfor Ġcalling Ġa Ġweb Ġservice . ĊĠĠĠĠĠĠĠĠ Ġ* ĠWorking Ġif Ġthe Ġcamera Ġis Ġbehind Ġa Ġfirewall Ġalso . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġrequest Ġthe Ġkind Ġof Ġrequest Ġwe 're Ġprocessing . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġurl For Request ( request : ĠOn v if Request ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( request . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOn v if Request . Type . Get Services Ġ-> Ġreturn Ġcurrent Device . url Ġ+ Ġcurrent Device . paths . services ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOn v if Request . Type . GetDevice Information Ġ-> Ġreturn Ġcurrent Device . url Ġ+ Ġcurrent Device . paths . device Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOn v if Request . Type . Get Profiles Ġ-> Ġreturn Ġcurrent Device . url Ġ+ Ġcurrent Device . paths . profiles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOn v if Request . Type . Get Stream URI Ġ-> Ġreturn Ġcurrent Device . url Ġ+ Ġcurrent Device . paths . stream URI ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUtil Ġfunction Ġto Ġlog Ġthe Ġbody Ġof Ġa Ġ` Request ` ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbody ToString ( request : ĠRequest ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= Ġrequest . newBuilder (). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠBuffer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy . body () !!. writeTo ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuffer . read Utf 8 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" did Ġnot Ġwork " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen ĠAsync Task Ġbackground Ġprocess Ġis Ġfinished ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġresult Ġthe Ġ` On v if Response ` ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Execute ( result : ĠOn v if Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" RESULT ", Ġresult . success . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. request Performed ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUtil Ġmethod Ġto Ġappend Ġthe Ġcredentials Ġto Ġthe Ġrt sp ĠURI ĊĠĠĠĠ Ġ* ĠWorking Ġif Ġthe Ġcamera Ġis Ġbehind Ġa Ġfirewall . ĊĠĠĠĠ Ġ* Ġ@ param Ġstream URI Ġthe ĠURI Ġto Ġmodify ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġrt sp ĠURI Ġwith Ġthe Ġcredentials ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġappend Credentials ( stream URI : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprotocol Ġ= Ġ" rt sp ://" ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġstream URI . substring ( protocol . length ) ĊĠĠĠĠĠĠĠ Ġvar Ġport : ĠString Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġrt sp Ġport ĊĠĠĠĠĠĠĠ Ġval Ġport Index Ġ= Ġuri . indexOf (": ") ĊĠĠĠĠĠĠĠ Ġif Ġ( port Index Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġport End Index Ġ= Ġuri . indexOf ("/") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġport Ġ= Ġuri . substring ( port Index , Ġport End Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġpath Ġand Ġquery ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġuri . substring After ('/') ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġtake Ġthe ĠURI Ġpassed Ġas Ġan Ġinput Ġby Ġthe Ġuser Ġ( in Ġcase Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġcamera Ġis Ġbehind Ġa Ġfirewall ). ĊĠĠĠĠĠĠĠ Ġval Ġip Address Without Port Ġ= Ġip Address . substring Before (": ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġprotocol Ġ+ Ġcurrent Device . username Ġ+ Ġ":" Ġ+ Ġcurrent Device . password Ġ+ Ġ"@ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġip Address Without Port Ġ+ Ġport Ġ+ Ġ"/" Ġ+ Ġpath ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠParsing Ġmethod Ġfor Ġthe ĠSOAP ĠXML Ġresponse ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Ġ` On v if Response ` Ġto Ġparse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġparse On v if Responses ( result : ĠOn v if Response ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparsed Result Ġ= Ġ" Parsing Ġfailed " ĊĠĠĠĠĠĠĠ Ġif Ġ(! result . success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Result Ġ= Ġ" Communication Ġerror Ġtrying Ġto Ġget Ġ" Ġ+ Ġresult . request Ġ+ Ġ" :\ n \ n " Ġ+ Ġresult . error ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . request . type Ġ== ĠOn v if Request . Type . Get Services ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . result ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Result Ġ= ĠOn v if Services . parse Services Response ( it , Ġcurrent Device . paths ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( result . request . type Ġ== ĠOn v if Request . Type . GetDevice Information ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Connected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parse Device Information Response ( result . result !! , Ġcurrent Device . device Information )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Result Ġ= Ġdevice Information ToString ( current Device . device Information ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( result . request . type Ġ== ĠOn v if Request . Type . Get Profiles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . result ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofiles Ġ= ĠOn v if Media Profiles . parse XML ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Device . media Profiles Ġ= Ġprofiles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Result Ġ= Ġprofiles . count (). toString () Ġ+ Ġ" Ġprofiles Ġretrieved ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( result . request . type Ġ== ĠOn v if Request . Type . Get Stream URI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . result ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream URI Ġ= Ġparse Stream URI XML ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Device . rt sp URI Ġ= Ġappend Credentials ( stream URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Result Ġ= Ġ" RT SP ĠURI Ġretrieved ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġparsed Result ĊĠĠĠ Ġ} Ċ }