diff --git a/device.go b/device.go new file mode 100644 index 0000000..eedd6a7 --- /dev/null +++ b/device.go @@ -0,0 +1,66 @@ +package onvif + +import ( + "bytes" + "io/ioutil" + "net/http" + "regexp" + "time" + + "github.com/clbanning/mxj" +) + +var httpClient = &http.Client{ + Timeout: time.Second * 5, +} + +// Device contains data of ONVIF camera +type Device struct { + ID string + Name string + XAddr string + User string + Password string +} + +// GetSystemDateAndTime fetch date and time from ONVIF camera +func (device Device) GetSystemDateAndTime() (string, error) { + // Create request + request := ` + + + + + ` + + request = regexp.MustCompile(`\>\s+\<`).ReplaceAllString(request, "><") + request = regexp.MustCompile(`\s+`).ReplaceAllString(request, " ") + + // Create request + buffer := bytes.NewBuffer([]byte(request)) + req, err := http.NewRequest("POST", device.XAddr, buffer) + req.Header.Set("Content-Type", "application/soap+xml") + req.Header.Set("Charset", "utf-8") + + // Send request + resp, err := httpClient.Do(req) + if err != nil { + return "", err + } + defer resp.Body.Close() + + // Read response body + responseBody, err := ioutil.ReadAll(resp.Body) + if err != nil { + return "", err + } + + // Parse XML to map + mapXML, err := mxj.NewMapXml(responseBody) + if err != nil { + return "", err + } + + dateTime, _ := mapXML.ValueForPathString("Envelope.Body.GetSystemDateAndTimeResponse.SystemDateAndTime") + return dateTime, nil +} diff --git a/model.go b/model.go deleted file mode 100644 index 9cb43f1..0000000 --- a/model.go +++ /dev/null @@ -1,10 +0,0 @@ -package onvif - -// Device contains data of Onvif device -type Device struct { - ID string - Name string - XAddrs []string - User string - Password string -}