@@ -62,16 +62,15 @@ type impl struct {
6262}
6363
6464func New (ctx context.Context , baseURL , username , password string , verbose bool ) (Client , error ) {
65- soapClient , err := serviceSOAPClient ( baseURL , "onvif/device_service" , username , password , verbose , 0 )
65+ diff , err := getTimeDiff ( ctx , baseURL , verbose )
6666 if err != nil {
6767 return nil , err
6868 }
69- d := device .NewDevice (soapClient )
70- diff , err := getTimeDiff (ctx , d )
69+ soapClient , err := serviceSOAPClient (baseURL , "onvif/device_service" , username , password , verbose , diff )
7170 if err != nil {
7271 return nil , err
7372 }
74- soapClient . SetTimeDiff ( diff )
73+ d := device . NewDevice ( soapClient )
7574 resp , err := d .GetServicesContext (ctx , & device.GetServices {})
7675 if err != nil {
7776 return nil , fmt .Errorf ("listing available Onvif services: %w" , err )
@@ -116,7 +115,12 @@ func New(ctx context.Context, baseURL, username, password string, verbose bool)
116115 return & result , nil
117116}
118117
119- func getTimeDiff (ctx context.Context , d device.Device ) (time.Duration , error ) {
118+ func getTimeDiff (ctx context.Context , baseURL string , verbose bool ) (time.Duration , error ) {
119+ soapClient , err := unauthorizedServiceSOAPClient (baseURL , "onvif/device_service" , verbose )
120+ if err != nil {
121+ return 0 , err
122+ }
123+ d := device .NewDevice (soapClient )
120124 resp , err := d .GetSystemDateAndTimeContext (ctx , & device.GetSystemDateAndTime {})
121125 if err != nil {
122126 return 0 , fmt .Errorf ("getting Onvif device time: %w" , err )
@@ -223,6 +227,14 @@ func sanitizeServiceURL(baseURL, advertisedURL string) (string, error) {
223227 return serviceURL (baseURL , u .RequestURI ())
224228}
225229
230+ func unauthorizedServiceSOAPClient (baseURL , advertisedURL string , verbose bool ) (* soap.Client , error ) {
231+ u , err := sanitizeServiceURL (baseURL , advertisedURL )
232+ if err != nil {
233+ return nil , err
234+ }
235+ return UnauthorizedSOAPClient (u , verbose ), nil
236+ }
237+
226238func serviceSOAPClient (
227239 baseURL , advertisedURL , username , password string , verbose bool , diff time.Duration ,
228240) (* soap.Client , error ) {
@@ -233,6 +245,17 @@ func serviceSOAPClient(
233245 return AuthorizedSOAPClient (u , username , password , verbose , diff ), nil
234246}
235247
248+ func UnauthorizedSOAPClient (serviceURL string , verbose bool ) * soap.Client {
249+ httpClient := http .DefaultClient
250+ if verbose {
251+ httpClient = verboseHTTPClient
252+ }
253+ client := soap .NewClient (serviceURL ,
254+ soap .WithHTTPClient (httpClient ),
255+ )
256+ return client
257+ }
258+
236259func AuthorizedSOAPClient (
237260 serviceURL , username , password string , verbose bool , diff time.Duration ,
238261) * soap.Client {
0 commit comments