mirror of
https://github.com/kerberos-io/onvif.git
synced 2025-10-07 00:33:37 +08:00
fix bugs
This commit is contained in:
@@ -309,7 +309,7 @@ func (dev device) callAuthorizedMethod(endpoint string, method interface{}) (*ht
|
|||||||
/*
|
/*
|
||||||
Getting an WS-Security struct representation
|
Getting an WS-Security struct representation
|
||||||
*/
|
*/
|
||||||
auth := newSecurity(dev.login, dev.password)
|
auth := NewSecurity(dev.login, dev.password)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Adding WS-Security namespaces to root element of SOAP message
|
Adding WS-Security namespaces to root element of SOAP message
|
||||||
|
75
api/api.go
75
api/api.go
@@ -13,6 +13,8 @@ import (
|
|||||||
"github.com/yakovlevdmv/goonvif/networking"
|
"github.com/yakovlevdmv/goonvif/networking"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"io/ioutil"
|
||||||
|
"encoding/xml"
|
||||||
)
|
)
|
||||||
|
|
||||||
func RunApi () {
|
func RunApi () {
|
||||||
@@ -22,10 +24,10 @@ func RunApi () {
|
|||||||
serviceName := c.Param("service")
|
serviceName := c.Param("service")
|
||||||
methodName := c.Param("method")
|
methodName := c.Param("method")
|
||||||
acceptedData, err := c.GetRawData()
|
acceptedData, err := c.GetRawData()
|
||||||
acpData := string(acceptedData)
|
if err != nil {
|
||||||
_=err
|
fmt.Println(err)
|
||||||
//fmt.Println(string(acceptedData), err,serviceName, methodName)
|
}
|
||||||
message := callNecessaryMethod(serviceName, methodName, &acpData, "192.168.13.12")
|
message := callNecessaryMethod(serviceName, methodName, string(acceptedData), "192.168.13.12")
|
||||||
c.XML(http.StatusOK, message)
|
c.XML(http.StatusOK, message)
|
||||||
})
|
})
|
||||||
router.Run()
|
router.Run()
|
||||||
@@ -51,7 +53,7 @@ func RunApi () {
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
func callNecessaryMethod(serviceName string, methodName string, acceptedData* string, deviceXaddr string) *string {
|
func callNecessaryMethod(serviceName string, methodName string, acceptedData string, deviceXaddr string) string {
|
||||||
var methodStruct interface{}
|
var methodStruct interface{}
|
||||||
var err error
|
var err error
|
||||||
switch serviceName {
|
switch serviceName {
|
||||||
@@ -63,7 +65,7 @@ func callNecessaryMethod(serviceName string, methodName string, acceptedData* st
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
//todo: нормально написать
|
//todo: нормально написать
|
||||||
}
|
}
|
||||||
resp, err := xmlAnalize(methodStruct, acceptedData)
|
resp, err := xmlAnalize(methodStruct, &acceptedData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//todo: нормально написать
|
//todo: нормально написать
|
||||||
}
|
}
|
||||||
@@ -71,27 +73,55 @@ func callNecessaryMethod(serviceName string, methodName string, acceptedData* st
|
|||||||
soap := gosoap.NewEmptySOAP()
|
soap := gosoap.NewEmptySOAP()
|
||||||
soap.AddStringBodyContent(*resp)
|
soap.AddStringBodyContent(*resp)
|
||||||
soap.AddRootNamespaces(goonvif.Xlmns)
|
soap.AddRootNamespaces(goonvif.Xlmns)
|
||||||
log.Println(soap.String())
|
|
||||||
servResp, srvErr := networking.SendSoap(getEndpoint(methodStruct, deviceXaddr), soap.String())
|
/*
|
||||||
|
Getting an WS-Security struct representation
|
||||||
|
*/
|
||||||
|
auth := goonvif.NewSecurity("admin", "Supervisor")
|
||||||
|
|
||||||
|
/*
|
||||||
|
Adding WS-Security namespaces to root element of SOAP message
|
||||||
|
*/
|
||||||
|
soap.AddRootNamespace("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext1.0.xsd")
|
||||||
|
soap.AddRootNamespace("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility1.0.xsd")
|
||||||
|
|
||||||
|
soapReq, err := xml.MarshalIndent(auth, "", " ")
|
||||||
|
|
||||||
|
/*
|
||||||
|
Adding WS-Security struct to SOAP header
|
||||||
|
*/
|
||||||
|
soap.AddStringHeaderContent(string(soapReq))
|
||||||
|
|
||||||
|
endpoint:= getEndpoint(serviceName, deviceXaddr)
|
||||||
|
servResp, srvErr := networking.SendSoap(endpoint, soap.String())
|
||||||
if srvErr != nil {
|
if srvErr != nil {
|
||||||
|
panic(srvErr)
|
||||||
//todo: нормально написать
|
//todo: нормально написать
|
||||||
}
|
}
|
||||||
return &servResp
|
|
||||||
|
rsp, err := ioutil.ReadAll(servResp.Body)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return string(rsp)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getEndpoint(method interface{}, deviceXaddr string) string {
|
func getEndpoint(service, xaddr string) string {
|
||||||
dev := goonvif.NewDevice(deviceXaddr)
|
dev, err := goonvif.NewDevice(xaddr)
|
||||||
|
if err != nil {
|
||||||
pkgPath := strings.Split(reflect.TypeOf(method).PkgPath(),"/")
|
log.Println(err)
|
||||||
pkg := pkgPath[len(pkgPath)-1]
|
return ""
|
||||||
|
}
|
||||||
|
pkg := strings.ToLower(service)
|
||||||
|
|
||||||
var endpoint string
|
var endpoint string
|
||||||
switch pkg {
|
switch pkg {
|
||||||
case "Device": endpoint = dev.GetEndpoint("Device")
|
case "device": endpoint = dev.GetEndpoint("Device")
|
||||||
case "Event": endpoint = dev.GetEndpoint("Event")
|
case "event": endpoint = dev.GetEndpoint("Event")
|
||||||
case "Imaging": endpoint = dev.GetEndpoint("Imaging")
|
case "imaging": endpoint = dev.GetEndpoint("Imaging")
|
||||||
case "Media": endpoint = dev.GetEndpoint("Media")
|
case "media": endpoint = dev.GetEndpoint("Media")
|
||||||
case "PTZ": endpoint = dev.GetEndpoint("PTZ")
|
case "ptz": endpoint = dev.GetEndpoint("PTZ")
|
||||||
}
|
}
|
||||||
return endpoint
|
return endpoint
|
||||||
}
|
}
|
||||||
@@ -221,9 +251,12 @@ func xmlProcessing (tg string) (string, error) {
|
|||||||
return "", errors.New("out of range")
|
return "", errors.New("out of range")
|
||||||
}
|
}
|
||||||
attr := strings.Index(str[1], ",attr")
|
attr := strings.Index(str[1], ",attr")
|
||||||
if attr == -1 {
|
omit := strings.Index(str[1], ",omitempty")
|
||||||
|
if attr == -1 && omit == -1 { //todo: проработать вариант, когдв omitempty и attr вместе
|
||||||
return str[1], nil
|
return str[1], nil
|
||||||
} else {
|
} else if omit > -1 {
|
||||||
|
return str[1][0:omit], nil
|
||||||
|
}else {
|
||||||
return str[0:attr][0], nil
|
return str[0:attr][0], nil
|
||||||
}
|
}
|
||||||
return "", errors.New("something went wrong")
|
return "", errors.New("something went wrong")
|
||||||
|
Reference in New Issue
Block a user