Commit 43f9b0f1 authored by Yann Garcia's avatar Yann Garcia
Browse files

Re-organizee meep-iot

parent 8d5a0810
Loading
Loading
Loading
Loading
+102 −27
Original line number Diff line number Diff line
@@ -123,9 +123,48 @@ type ImplSpecificInfo struct {
	DownlinkTopics []string
}

type TrafficRuleDescriptor struct {
	TrafficRuleId string
	FilterType    string
	Priority      int32
	TrafficFilter []TrafficFilter
	Action        string
	DstInterface  *InterfaceDescriptor
}

type InterfaceDescriptor struct {
	InterfaceType string
	//TunnelInfo *TunnelInfo FSCOM Not supported
	SrcMACAddress string
	DstMACAddress string
	DstIPAddress  string
}

type TrafficFilter struct {
	SrcAddress       []string
	DstAddress       []string
	SrcPort          []string
	DstPort          []string
	Protocol         []string
	Tag              []string
	Uri              []string
	PacketLabel      []string
	SrcTunnelAddress []string
	TgtTunnelAddress []string
	SrcTunnelPort    []string
	DstTunnelPort    []string
	QCI              int32
	TC               int32
}

type KeyValuePair struct {
	Key   string
	Value string
}

type DeviceInfo struct {
	DeviceAuthenticationInfo string
	//DeviceMetadata []KeyValuePair
	DeviceMetadata           []KeyValuePair
	Gpsi                     string
	Pei                      string
	Supi                     string
@@ -134,7 +173,7 @@ type DeviceInfo struct {
	Imsi                     string
	Iccid                    string
	DeviceId                 string
	//RequestedMecTrafficRule []TrafficRuleDescriptor
	RequestedMecTrafficRule  []TrafficRuleDescriptor
	RequestedIotPlatformId   string
	RequestedUserTransportId string
	//DeviceSpecificMessageFormats *DeviceSpecificMessageFormats
@@ -380,6 +419,27 @@ func GetDevice(deviceId string) (device DeviceInfo, err error) {
	return device, nil
}

func CreateDevice(device DeviceInfo) (deviceResp DeviceInfo, err error) {
	log.Info(">>> sbi.CreateDevice: ", device)

	d := convertDeviceInfoToIotMgr(device)
	dev, err := sbi.iotMgr.CreateDevice(d)
	if err != nil {
		return deviceResp, err
	}
	deviceResp = convertDeviceInfoFromIotMgr(dev)

	return deviceResp, nil
}

func DeleteDevice(deviceId string) (err error) {
	log.Info(">>> sbi.DeleteDevice: ", deviceId)

	err = sbi.iotMgr.DeleteDevice(deviceId)

	return err
}

func convertIotPlatformInfoToIotMgr(val IotPlatformInfo) (item tm.IotPlatformInfo) {
	item.IotPlatformId = val.IotPlatformId
	item.Enabled = val.Enabled
@@ -479,6 +539,13 @@ func convertDeviceInfoFromIotMgr(dev tm.DeviceInfo) (device DeviceInfo) {
		ClientCertificate:        dev.ClientCertificate,
		Enabled:                  dev.Enabled,
	}
	if len(dev.DeviceMetadata) != 0 {
		device.DeviceMetadata = make([]KeyValuePair, len(dev.DeviceMetadata))
		for i, k := range dev.DeviceMetadata {
			device.DeviceMetadata[i] = KeyValuePair{Key: k.Key, Value: k.Value}
		} // End of 'for' statement
	}
	// FIXME FSCOM Add missing fileds (pointers & arrays)
	//log.Debug("convertDeviceInfoFromIotMgr: device: ", device)

	return device
@@ -489,25 +556,33 @@ func convertDeviceInfosFromIotMgr(devicesList []tm.DeviceInfo) (devices []Device

	devices = make([]DeviceInfo, len(devicesList))
	for idx, item := range devicesList { // FIXME FSCOM Add Filter
		var device = DeviceInfo{
			DeviceAuthenticationInfo: item.DeviceAuthenticationInfo,
			Gpsi:                     item.Gpsi,
			Pei:                      item.Pei,
			Supi:                     item.Supi,
			Msisdn:                   item.Msisdn,
			Imei:                     item.Imei,
			Imsi:                     item.Imsi,
			Iccid:                    item.Iccid,
			DeviceId:                 item.DeviceId,
			RequestedIotPlatformId:   item.RequestedIotPlatformId,
			RequestedUserTransportId: item.RequestedUserTransportId,
			ClientCertificate:        item.ClientCertificate,
			Enabled:                  item.Enabled,
		}
		// FIXME FSCOM Add missing fileds (pointers & arrays)
		devices[idx] = device
		devices[idx] = convertDeviceInfoFromIotMgr(item)
	} // End of 'for' statement
	//log.Debug("convertDeviceInfosFromIotMgr: devices: ", devices)

	return devices, nil
}

func convertDeviceInfoToIotMgr(dev DeviceInfo) (device tm.DeviceInfo) {
	//log.Debug(">>> convertDeviceInfoToIotMgr")

	device = tm.DeviceInfo{
		DeviceAuthenticationInfo: dev.DeviceAuthenticationInfo,
		Gpsi:                     dev.Gpsi,
		Pei:                      dev.Pei,
		Supi:                     dev.Supi,
		Msisdn:                   dev.Msisdn,
		Imei:                     dev.Imei,
		Imsi:                     dev.Imsi,
		Iccid:                    dev.Iccid,
		DeviceId:                 dev.DeviceId,
		RequestedIotPlatformId:   dev.RequestedIotPlatformId,
		RequestedUserTransportId: dev.RequestedUserTransportId,
		ClientCertificate:        dev.ClientCertificate,
		Enabled:                  dev.Enabled,
	}
	// FIXME FSCOM Add missing fileds (pointers & arrays)
	//log.Debug("convertDeviceInfoToIotMgr: device: ", device)

	return device
}
+98 −19
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import (
	"encoding/json"
	"errors"
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	"os"
@@ -810,7 +811,21 @@ func registerediotplatformsPOST(w http.ResponseWriter, r *http.Request) {
func registereddevicesByIdDELETE(w http.ResponseWriter, r *http.Request) {
	log.Debug(">>> registereddevicesByIdDELETE: ", r)

	errHandlerProblemDetails(w, "Not implemented yet", http.StatusBadRequest)
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")

	vars := mux.Vars(r)
	log.Debug("registereddevicesByIdDELETE: vars: ", vars)

	registeredDeviceIdParamStr := vars["registeredDeviceId"]
	log.Debug("registereddevicesByIdDELETE: registeredDeviceIdParamStr: ", registeredDeviceIdParamStr)

	err := sbi.DeleteDevice(registeredDeviceIdParamStr)
	if err != nil {
		errHandlerProblemDetails(w, err.Error(), http.StatusNotFound)
		return
	}

	w.WriteHeader(http.StatusNoContent)
}

func registereddevicesByIdGET(w http.ResponseWriter, r *http.Request) {
@@ -916,7 +931,58 @@ func applyFiltering(devicesList []sbi.DeviceInfo, filter []string) (devices []De
func registereddevicesPOST(w http.ResponseWriter, r *http.Request) {
	log.Debug(">>> registereddevicesPOST: ", r)

	errHandlerProblemDetails(w, "Not implemented yet", http.StatusBadRequest)
	// Read JSON input stream provided in the Request, and stores it in the bodyBytes as bytes
	var registeredDevicesRegisteredDeviceIdBody RegisteredDevicesRegisteredDeviceIdBody
	bodyBytes, _ := ioutil.ReadAll(r.Body)
	// Unmarshal function to converts a JSON-formatted string into a SubscriptionCommon struct and store it in extractSubType
	err := json.Unmarshal(bodyBytes, &registeredDevicesRegisteredDeviceIdBody)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	} else if registeredDevicesRegisteredDeviceIdBody.DeviceInfo == nil {
		err = errors.New("Failed to decode body")
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	deviceInfo := *registeredDevicesRegisteredDeviceIdBody.DeviceInfo
	log.Info("registereddevicesPOST: ", deviceInfo)

	// Sanity checks
	if len(deviceInfo.DeviceId) == 0 {
		err = errors.New("DeviceId field shall be present")
		errHandlerProblemDetails(w, err.Error(), http.StatusBadRequest)
		return
	}
	if len(deviceInfo.RequestedMecTrafficRule) == 0 {
		if len(deviceInfo.RequestedIotPlatformId) == 0 && len(deviceInfo.RequestedUserTransportId) == 0 {
			err = errors.New("Invalid traffic rule provided")
			errHandlerProblemDetails(w, err.Error(), http.StatusBadRequest)
			return
		}
		// Traffic rule provided by either RequestedIotPlatformId or RequestedUserTransportId
	} // else Traffic rule provided by RequestedMecTrafficRule

	// Process the request
	dev := convertDeviceInfoToSbi(deviceInfo)
	deviceInfoResp, err := sbi.CreateDevice(dev)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	log.Info("registereddevicesPOST: deviceInfoResp: ", deviceInfoResp)

	jsonResponse, err := json.Marshal(deviceInfoResp)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	log.Info("registereddevicesPOST: jsonResponse: ", string(jsonResponse))

	w.WriteHeader(http.StatusOK)
	fmt.Fprint(w, string(jsonResponse))
}

func validateQueryParams(params url.Values, validParams []string) error {
@@ -1137,6 +1203,13 @@ func convertDeviceInfoFromSbi(dev sbi.DeviceInfo) (device DeviceInfo) {
		ClientCertificate:        dev.ClientCertificate,
		Enabled:                  dev.Enabled,
	}
	if len(dev.DeviceMetadata) != 0 {
		device.DeviceMetadata = make([]KeyValuePair, len(dev.DeviceMetadata))
		for i, k := range dev.DeviceMetadata {
			device.DeviceMetadata[i] = KeyValuePair{Key: k.Key, Value: k.Value}
		} // End of 'for' statement
	}
	// FIXME FSCOM Add missing fileds (pointers & arrays)
	//log.Debug("convertDeviceInfosFromSbi: devices: ", devices)

	return device
@@ -1145,23 +1218,7 @@ func convertDeviceInfoFromSbi(dev sbi.DeviceInfo) (device DeviceInfo) {
func convertDeviceInfosFromSbi(devicesList []sbi.DeviceInfo) (devices []DeviceInfo, err error) {
	devices = make([]DeviceInfo, len(devicesList))
	for idx, item := range devicesList { // FIXME FSCOM Add Filter
		var device = DeviceInfo{
			DeviceAuthenticationInfo: item.DeviceAuthenticationInfo,
			Gpsi:                     item.Gpsi,
			Pei:                      item.Pei,
			Supi:                     item.Supi,
			Msisdn:                   item.Msisdn,
			Imei:                     item.Imei,
			Imsi:                     item.Imsi,
			Iccid:                    item.Iccid,
			DeviceId:                 item.DeviceId,
			RequestedIotPlatformId:   item.RequestedIotPlatformId,
			RequestedUserTransportId: item.RequestedUserTransportId,
			ClientCertificate:        item.ClientCertificate,
			Enabled:                  item.Enabled,
		}
		// FIXME FSCOM Add missing fileds (pointers & arrays)
		devices[idx] = device
		devices[idx] = convertDeviceInfoFromSbi(item)
	} // End of 'for' statement
	//log.Debug("convertDeviceInfosFromSbi: devices: ", devices)

@@ -1213,3 +1270,25 @@ func convertDeviceInfosFromSbi_with_filter(devicesList []sbi.DeviceInfo, filter

	return devices, nil
}

func convertDeviceInfoToSbi(dev DeviceInfo) (device sbi.DeviceInfo) {
	device = sbi.DeviceInfo{
		DeviceAuthenticationInfo: dev.DeviceAuthenticationInfo,
		Gpsi:                     dev.Gpsi,
		Pei:                      dev.Pei,
		Supi:                     dev.Supi,
		Msisdn:                   dev.Msisdn,
		Imei:                     dev.Imei,
		Imsi:                     dev.Imsi,
		Iccid:                    dev.Iccid,
		DeviceId:                 dev.DeviceId,
		RequestedIotPlatformId:   dev.RequestedIotPlatformId,
		RequestedUserTransportId: dev.RequestedUserTransportId,
		ClientCertificate:        dev.ClientCertificate,
		Enabled:                  dev.Enabled,
	}
	// FIXME FSCOM Add missing fileds (pointers & arrays)
	//log.Debug("convertDeviceInfosFromSbi: devices: ", devices)

	return device
}
+144 −284

File changed.

Preview size limit exceeded, changes collapsed.

+615 −0

File added.

Preview size limit exceeded, changes collapsed.