diff --git a/api/api.go b/api/api.go index 0306bc4..58c22d4 100644 --- a/api/api.go +++ b/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, " ") -} \ No newline at end of file +}