|
|
|
|
@@ -38,12 +38,14 @@ type MMLRequest struct {
|
|
|
|
|
var (
|
|
|
|
|
// MML interface
|
|
|
|
|
UriMML = config.DefaultUriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml"
|
|
|
|
|
UriMML2 = config.DefaultUriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml2"
|
|
|
|
|
UriMMLDiscard = config.DefaultUriPrefix + "/opeartionManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml"
|
|
|
|
|
UriNeOmMml = config.DefaultUriPrefix + "/omManagement/{apiVersion}/mml/{netype}/{neid}"
|
|
|
|
|
UriOmMmlExt = config.DefaultUriPrefix + "/{managedType}/{apiVersion}/elementType/OMC/objectType/mml"
|
|
|
|
|
UriOmMmlInt = config.DefaultUriPrefix + "/omManagement/{apiVersion}/mml/{neType}/{neId}"
|
|
|
|
|
|
|
|
|
|
CustomUriMML = config.UriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml"
|
|
|
|
|
CustomUriMML2 = config.UriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml2"
|
|
|
|
|
CustomUriNeOmMml = config.UriPrefix + "/omManagement/{apiVersion}/mml/{netype}/{neid}"
|
|
|
|
|
CustomUriOmMmlExt = config.UriPrefix + "/opeartionManagement/{apiVersion}/elementType/OMC/objectType/mml"
|
|
|
|
|
CustomUriOmMmlInt = config.UriPrefix + "/omManagement/{apiVersion}/mml/{neType}/{neId}"
|
|
|
|
|
@@ -61,6 +63,126 @@ func init() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func PostMMLToSUPF(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
log.Info("PostMMLToSUPF processing... ")
|
|
|
|
|
|
|
|
|
|
vars := mux.Vars(r)
|
|
|
|
|
neType := vars["elementTypeValue"]
|
|
|
|
|
neInfo := new(dborm.NeInfo)
|
|
|
|
|
params := r.URL.Query()
|
|
|
|
|
neId := params["ne_id"]
|
|
|
|
|
neInfo, err := dborm.XormGetNeInfo(neType, neId[0])
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("Failed to dborm.XormGetNeInfo:", err)
|
|
|
|
|
services.ResponseInternalServerError500ProcessError(w, err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var buf [20 * 1024]byte
|
|
|
|
|
//buf := make([]byte, 0)
|
|
|
|
|
var n int
|
|
|
|
|
var mmlResult []string
|
|
|
|
|
port2 := 5002
|
|
|
|
|
if config.GetYamlConfig().MML.Port2 != 0 {
|
|
|
|
|
port2 = config.GetYamlConfig().MML.Port2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if neInfo != nil {
|
|
|
|
|
hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, port2)
|
|
|
|
|
conn, err := net.Dial("tcp", hostMML)
|
|
|
|
|
if err != nil {
|
|
|
|
|
errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err)
|
|
|
|
|
log.Error(errMsg)
|
|
|
|
|
mmlResult = append(mmlResult, errMsg)
|
|
|
|
|
response := Response{mmlResult}
|
|
|
|
|
services.ResponseWithJson(w, http.StatusOK, response)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
defer conn.Close()
|
|
|
|
|
|
|
|
|
|
// localAddr := conn.LocalAddr()
|
|
|
|
|
// remoteAddr := conn.RemoteAddr()
|
|
|
|
|
// if localAddr == nil || remoteAddr == nil {
|
|
|
|
|
// errMsg := fmt.Sprintf("connect invalid: localAddr=%v, remoteAddr=%v", localAddr, remoteAddr)
|
|
|
|
|
// log.Error(errMsg)
|
|
|
|
|
// mmlResult = append(mmlResult, errMsg)
|
|
|
|
|
// response := Response{mmlResult}
|
|
|
|
|
// services.ResponseWithJson(w, http.StatusOK, response)
|
|
|
|
|
// return
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second))
|
|
|
|
|
loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password)
|
|
|
|
|
_, err = conn.Write([]byte(loginStr))
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("Failed to write:", err)
|
|
|
|
|
mmlResult = append(mmlResult, err.Error())
|
|
|
|
|
response := Response{mmlResult}
|
|
|
|
|
services.ResponseWithJson(w, http.StatusOK, response)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
|
|
|
|
|
|
|
|
|
n, err = conn.Read(buf[0:])
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("Failed to read:", err)
|
|
|
|
|
mmlResult = append(mmlResult, err.Error())
|
|
|
|
|
response := Response{mmlResult}
|
|
|
|
|
services.ResponseWithJson(w, http.StatusOK, response)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
log.Trace(string(buf[0:n]))
|
|
|
|
|
|
|
|
|
|
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("Failed to ReadAll:", err)
|
|
|
|
|
services.ResponseNotFound404UriNotExist(w, r)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
log.Trace("Body:", string(body))
|
|
|
|
|
|
|
|
|
|
mmlRequest := new(MMLRequest)
|
|
|
|
|
_ = json.Unmarshal(body, mmlRequest)
|
|
|
|
|
|
|
|
|
|
for _, mml := range mmlRequest.MML {
|
|
|
|
|
mmlCommand := fmt.Sprintf("%s\n", mml)
|
|
|
|
|
_, err = conn.Write([]byte(mmlCommand))
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("Failed to write:", err)
|
|
|
|
|
mmlResult = append(mmlResult, err.Error())
|
|
|
|
|
// response := Response{mmlResult}
|
|
|
|
|
// services.ResponseWithJson(w, http.StatusOK, response)
|
|
|
|
|
// return
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
|
|
|
|
|
|
|
|
|
n, err = conn.Read(buf[0:])
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("Failed to read:", err)
|
|
|
|
|
mmlResult = append(mmlResult, err.Error())
|
|
|
|
|
// response := Response{mmlResult}
|
|
|
|
|
// services.ResponseWithJson(w, http.StatusOK, response)
|
|
|
|
|
// return
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
log.Trace(string(buf[0 : n-len(neType)-2]))
|
|
|
|
|
re1 := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) // 匹配包含␛的控制字符
|
|
|
|
|
//re2 := regexp.MustCompile(`\x00`) // 匹配空字符
|
|
|
|
|
re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符
|
|
|
|
|
//re := regexp.MustCompile(`[\x00-\x1F\x7F]`)
|
|
|
|
|
result := re1.ReplaceAllString(string(buf[0:n-len(neType)-2]), "")
|
|
|
|
|
result = re2.ReplaceAllString(result, "")
|
|
|
|
|
mmlResult = append(mmlResult, result)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
response := Response{mmlResult}
|
|
|
|
|
services.ResponseWithJson(w, http.StatusOK, response)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
log.Debug("PostMMLToNF processing... ")
|
|
|
|
|
|
|
|
|
|
|