mirror of
https://github.com/kerberos-io/onvif.git
synced 2025-10-08 09:10:17 +08:00
format api code file
This commit is contained in:
69
api/api.go
69
api/api.go
@@ -1,23 +1,24 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"path"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"github.com/beevik/etree"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/yakovlevdmv/gosoap"
|
||||
"github.com/yakovlevdmv/WS-Discovery"
|
||||
"github.com/yakovlevdmv/goonvif"
|
||||
"github.com/yakovlevdmv/goonvif/networking"
|
||||
"net/http"
|
||||
"io/ioutil"
|
||||
"github.com/yakovlevdmv/WS-Discovery"
|
||||
"path"
|
||||
"github.com/yakovlevdmv/gosoap"
|
||||
)
|
||||
|
||||
func RunApi () {
|
||||
func RunApi() {
|
||||
router := gin.Default()
|
||||
|
||||
router.POST("/:service/:method", func(c *gin.Context) {
|
||||
@@ -49,7 +50,7 @@ func RunApi () {
|
||||
interfaceName := context.GetHeader("interface")
|
||||
|
||||
var response = "["
|
||||
devices := WS_Discovery.SendProbe(interfaceName, nil, []string{"dn:NetworkVideoTransmitter"}, map[string]string{"dn":"http://www.onvif.org/ver10/network/wsdl"})
|
||||
devices := WS_Discovery.SendProbe(interfaceName, nil, []string{"dn:NetworkVideoTransmitter"}, map[string]string{"dn": "http://www.onvif.org/ver10/network/wsdl"})
|
||||
for _, j := range devices {
|
||||
doc := etree.NewDocument()
|
||||
if err := doc.ReadFromString(j); err != nil {
|
||||
@@ -57,7 +58,7 @@ func RunApi () {
|
||||
} else {
|
||||
|
||||
endpoints := doc.Root().FindElements("./Body/ProbeMatches/ProbeMatch/XAddrs")
|
||||
scopes := doc.Root().FindElements("./Body/ProbeMatches/ProbeMatch/Scopes")
|
||||
scopes := doc.Root().FindElements("./Body/ProbeMatches/ProbeMatch/Scopes")
|
||||
|
||||
flag := false
|
||||
|
||||
@@ -93,7 +94,6 @@ func RunApi () {
|
||||
router.Run()
|
||||
}
|
||||
|
||||
|
||||
//func soapHandling(tp interface{}, tags* map[string]string) {
|
||||
// ifaceValue := reflect.ValueOf(tp).Elem()
|
||||
// typeOfStruct := ifaceValue.Type()
|
||||
@@ -113,7 +113,6 @@ func RunApi () {
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
func callNecessaryMethod(serviceName, methodName, acceptedData, username, password, xaddr string) (string, error) {
|
||||
var methodStruct interface{}
|
||||
var err error
|
||||
@@ -160,7 +159,7 @@ func callNecessaryMethod(serviceName, methodName, acceptedData, username, passwo
|
||||
return string(rsp), nil
|
||||
}
|
||||
|
||||
func getEndpoint(service, xaddr string) (string, error) {
|
||||
func getEndpoint(service, xaddr string) (string, error) {
|
||||
dev, err := goonvif.NewDevice(xaddr)
|
||||
if err != nil {
|
||||
return "", err
|
||||
@@ -169,19 +168,24 @@ func getEndpoint(service, xaddr string) (string, error) {
|
||||
|
||||
var endpoint string
|
||||
switch pkg {
|
||||
case "device": endpoint = dev.GetEndpoint("Device")
|
||||
case "event": endpoint = dev.GetEndpoint("Event")
|
||||
case "imaging": endpoint = dev.GetEndpoint("Imaging")
|
||||
case "media": endpoint = dev.GetEndpoint("Media")
|
||||
case "ptz": endpoint = dev.GetEndpoint("PTZ")
|
||||
case "device":
|
||||
endpoint = dev.GetEndpoint("Device")
|
||||
case "event":
|
||||
endpoint = dev.GetEndpoint("Event")
|
||||
case "imaging":
|
||||
endpoint = dev.GetEndpoint("Imaging")
|
||||
case "media":
|
||||
endpoint = dev.GetEndpoint("Media")
|
||||
case "ptz":
|
||||
endpoint = dev.GetEndpoint("PTZ")
|
||||
}
|
||||
return endpoint, nil
|
||||
}
|
||||
|
||||
func xmlAnalize(methodStruct interface{}, acceptedData* string) (*string, error) {
|
||||
test := make([]map[string]string, 0) //tags
|
||||
func xmlAnalize(methodStruct interface{}, acceptedData *string) (*string, error) {
|
||||
test := make([]map[string]string, 0) //tags
|
||||
testunMarshal := make([][]interface{}, 0) //data
|
||||
var mas []string //idnt
|
||||
var mas []string //idnt
|
||||
|
||||
soapHandling(methodStruct, &test)
|
||||
test = mapProcessing(test)
|
||||
@@ -194,7 +198,7 @@ func xmlAnalize(methodStruct interface{}, acceptedData* string) (*string, error)
|
||||
xmlUnmarshal(etr, &testunMarshal, &mas)
|
||||
ident(&mas)
|
||||
|
||||
document:= etree.NewDocument()
|
||||
document := etree.NewDocument()
|
||||
var el *etree.Element
|
||||
var idntIndex = 0
|
||||
|
||||
@@ -238,10 +242,10 @@ func xmlAnalize(methodStruct interface{}, acceptedData* string) (*string, error)
|
||||
}
|
||||
} else if mas[idntIndex] == "Pop" {
|
||||
el = el.Parent()
|
||||
lstIndex -= 1
|
||||
lstIndex -= 1
|
||||
}
|
||||
idntIndex += 1
|
||||
lstIndex += 1
|
||||
lstIndex += 1
|
||||
}
|
||||
|
||||
resp, err := document.WriteToString()
|
||||
@@ -252,7 +256,7 @@ func xmlAnalize(methodStruct interface{}, acceptedData* string) (*string, error)
|
||||
return &resp, err
|
||||
}
|
||||
|
||||
func xmlMaker(lst* []interface{}, tags* []map[string]string, lstIndex int) (string, map[string]string, string, error) {
|
||||
func xmlMaker(lst *[]interface{}, tags *[]map[string]string, lstIndex int) (string, map[string]string, string, error) {
|
||||
var elemName, value string
|
||||
attr := make(map[string]string)
|
||||
for tgIndx, tg := range *tags {
|
||||
@@ -287,7 +291,7 @@ func xmlMaker(lst* []interface{}, tags* []map[string]string, lstIndex int) (stri
|
||||
return elemName, attr, value, nil
|
||||
}
|
||||
|
||||
func xmlProcessing (tg string) (string, error) {
|
||||
func xmlProcessing(tg string) (string, error) {
|
||||
r, _ := regexp.Compile(`"(.*?)"`)
|
||||
str := r.FindStringSubmatch(tg)
|
||||
if len(str) == 0 {
|
||||
@@ -330,7 +334,7 @@ func mapProcessing(mapVar []map[string]string) []map[string]string {
|
||||
return mapVar
|
||||
}
|
||||
|
||||
func soapHandling(tp interface{}, tags* []map[string]string) {
|
||||
func soapHandling(tp interface{}, tags *[]map[string]string) {
|
||||
s := reflect.ValueOf(tp).Elem()
|
||||
typeOfT := s.Type()
|
||||
if s.Kind() != reflect.Struct {
|
||||
@@ -342,23 +346,22 @@ func soapHandling(tp interface{}, tags* []map[string]string) {
|
||||
if err == false {
|
||||
fmt.Println(err)
|
||||
}
|
||||
*tags = append(*tags, map[string]string{typeOfT.Field(i).Name : string(tmp.Tag)})
|
||||
subStruct := reflect.New(reflect.TypeOf( f.Interface() ))
|
||||
*tags = append(*tags, map[string]string{typeOfT.Field(i).Name: string(tmp.Tag)})
|
||||
subStruct := reflect.New(reflect.TypeOf(f.Interface()))
|
||||
soapHandling(subStruct.Interface(), tags)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func xmlUnmarshal(elems []*etree.Element, data* [][]interface{}, mas* []string) {
|
||||
func xmlUnmarshal(elems []*etree.Element, data *[][]interface{}, mas *[]string) {
|
||||
for _, elem := range elems {
|
||||
*data = append(*data, []interface{}{elem.Tag,elem.Attr,elem.Text()})
|
||||
*data = append(*data, []interface{}{elem.Tag, elem.Attr, elem.Text()})
|
||||
*mas = append(*mas, "Push")
|
||||
xmlUnmarshal(elem.FindElements("./*"), data, mas)
|
||||
*mas = append(*mas, "Pop")
|
||||
}
|
||||
}
|
||||
|
||||
func ident(mas* []string) {
|
||||
func ident(mas *[]string) {
|
||||
var buffer string
|
||||
for _, j := range *mas {
|
||||
buffer += j + " "
|
||||
@@ -366,4 +369,4 @@ func ident(mas* []string) {
|
||||
buffer = strings.Replace(buffer, "Push Pop ", "PushPop ", -1)
|
||||
buffer = strings.TrimSpace(buffer)
|
||||
*mas = strings.Split(buffer, " ")
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user