示例#1
0
        public static ServerResource Deserialise(Request request)
        {
            ServerResource result = null;
            string         name   = request.UriPaths.Last();

            if (!string.IsNullOrEmpty(name) && (request.ContentType == TlvConstant.CONTENT_TYPE_TLV))
            {
                result = new ServerResource(name);
                using (TlvReader reader = new TlvReader(request.Payload))
                {
                    result.Deserialise(reader);
                }
            }
            return(result);
        }
示例#2
0
        protected override void DoPut(CoapExchange exchange)
        {
            ServerResource serverResource = ServerResource.Deserialise(exchange.Request);

            if (serverResource == null)
            {
                Response response = Response.CreateResponse(exchange.Request, StatusCode.BadRequest);
                exchange.Respond(response);
            }
            else
            {
                this.Add(serverResource);
                Response response = Response.CreateResponse(exchange.Request, StatusCode.Changed);
                exchange.Respond(response);
            }
        }
示例#3
0
        public void LoadResources()
        {
            if (Directory.Exists(RESOURCES_CACHE))
            {
                foreach (string directory in Directory.GetDirectories(RESOURCES_CACHE))
                {
                    string id = Path.GetFileName(directory);
                    int objectID;
                    if (int.TryParse(id, out objectID))
                    {
                        LWM2MResources resources = null;
                        switch (objectID)
                        {
                            case 0:
                                resources = _SecurityResources;
                                break;
                            case 1:
                                resources = _ServerResources;
                                break;
                            case 3:
                                resources = new DeviceResources();
                                break;
                            case 4:
                                resources = new ConnectivityMonitoringResources();
                                break;
                            case 5:
                                resources = new FirmwareUpdateResources();
                                break;
                            case 6:
                                resources = new LocationResources();
                                break;
                            case 7:
                                resources = new ConnectivityStatisticsResources();
                                break;
                            case 15:
                                resources = new DeviceCapabilityResources();
                                break;
                            case 20000:
                                resources = new FlowObjectResources();
                                break;
                            case 20001:
                                resources = new FlowAccessResources();
                                break;
                            case 20005:
                                resources = new FlowCommandResources();
                                EventHandler<ChildCreatedEventArgs> handler = (s, e) =>
                                {
                                    FlowCommandResource flowCommandResource = e.Resource as FlowCommandResource;
                                    if (flowCommandResource != null)
                                    {
                                        flowCommandResource.Updated += new EventHandler(FlowCommand_Updated);
                                        FlowCommand_Updated(flowCommandResource, null);
                                    }
                                };
                                resources.ChildCreated += handler;
                                break;
                            default:
                                break;
                        }
                        if (resources != null)
                        {
                            foreach (string fileName in Directory.GetFiles(directory, "*.tlv"))
                            {
                                LWM2MResource resource = null;
                                switch (objectID)
                                {
                                    case 0:
                                        resource = new SecurityResource(Path.GetFileNameWithoutExtension(fileName));
                                        break;
                                    case 1:
                                        resource = new ServerResource(Path.GetFileNameWithoutExtension(fileName));
                                        break;
                                    case 3:
                                        resource = new DeviceResource();
                                        break;
                                    case 4:
                                        resource = new ConnectivityMonitoringResource();
                                        break;
                                    case 5:
                                        resource = new FirmwareUpdateResource();
                                        break;
                                    case 6:
                                        resource = new LocationResource();
                                        break;
                                    case 7:
                                        resource = new ConnectivityStatisticsResource();
                                        break;
                                    case 15:
                                        resource = new DeviceCapabilityResource(Path.GetFileNameWithoutExtension(fileName));
                                        break;
                                    case 20000:
                                        resource = new FlowObjectResource();
                                        resource.Updated += new EventHandler(FlowObject_Updated);
                                        break;
                                    case 20001:
                                        resource = new FlowAccessResource();
                                        break;
                                    case 20005:
                                        resource = new FlowCommandResource(Path.GetFileNameWithoutExtension(fileName));
                                        resource.Updated += new EventHandler(FlowCommand_Updated);
                                        break;
                                    default:
                                        break;
                                }
                                if (resource != null)
                                {
                                    using(Stream stream = File.OpenRead(fileName))
                                    {
                                        TlvReader reader = new TlvReader(stream);
                                        if (resource.Deserialise(reader))
                                            resources.Add(resource);
                                    }

                                    if (objectID == 0)
                                    {
                                        SecurityResource securityResource = resource as SecurityResource;
                                        if (securityResource.SecurityMode == TSecurityMode.PreSharedKey)
                                        {
                                            UsePSK(System.Text.Encoding.UTF8.GetString(securityResource.ClientPublicKey), StringUtils.HexString(securityResource.SecretKey));
                                        }
                                    }
                                    else if (objectID == 20000)
                                    {
                                        FlowObjectResource flowObjectResource = resource as FlowObjectResource;
                                        if (flowObjectResource != null)
                                            flowObjectResource.TenantHash = null;
                                    }
                                }
                            }
                            this.AddResources(resources);
                        }
                    }
                }
            }
            else
                LoadDefaultResources();
        }
示例#4
0
 public static ServerResource Deserialise(Request request)
 {
     ServerResource result = null;
     string name = request.UriPaths.Last();
     if (!string.IsNullOrEmpty(name) && (request.ContentType == TlvConstant.CONTENT_TYPE_TLV))
     {
         result = new ServerResource(name);
         using (TlvReader reader = new TlvReader(request.Payload))
         {
             result.Deserialise(reader);
         }
     }
     return result;
 }