Exemplo n.º 1
0
 private void BriefAction(XmlReader reader, ServiceAction action)
 {
     reader.Read();
     foreach (Argument argument in action.Arguments.Values)
     {
         argument.Value = argument.RelatedStateVariable.DefaultValue;
     }
     while (Helper.ReadToNextElement(reader))
     {
         if (!action.Arguments.ContainsKey(reader.Name))
         {
             throw UpnpControlException.InvalidArgs();
         }
         Argument argument = action.Arguments[reader.Name];
         if (argument.RelatedStateVariable.DataType.IsEnum)
         {
             try {
                 argument.Value = Enum.Parse(argument.RelatedStateVariable.DataType, reader.ReadString());
             } catch {
                 throw UpnpControlException.ArgumentValueOutOfRange();
             }
         }
         else
         {
             try {
                 argument.Value = Convert.ChangeType(reader.ReadString(), argument.RelatedStateVariable.DataType);
             } catch {
                 throw UpnpControlException.InvalidArgs();
             }
             // TODO handle min, max, and step
         }
     }
     reader.Close();
 }
Exemplo n.º 2
0
        private void HandleContextCore(HttpListenerContext context)
        {
            XmlReader reader = XmlReader.Create(context.Request.InputStream);

            reader.ReadToFollowing("Body", Protocol.SoapEnvelopeSchema);
            while (Helper.ReadToNextElement(reader))
            {
                if (!service.Actions.ContainsKey(reader.LocalName))
                {
                    throw UpnpControlException.InvalidAction();
                }
                ServiceAction action = service.Actions[reader.LocalName];
                BriefAction(reader.ReadSubtree(), action);
                try {
                    action.Execute();
                } catch (UpnpControlException) {
                    throw;
                } catch (ArgumentOutOfRangeException e) {
                    throw UpnpControlException.ArgumentValueOutOfRange(e.Message);
                } catch (ArgumentException e) {
                    throw UpnpControlException.ArgumentValueInvalid(e.Message);
                } catch (NotImplementedException e) {
                    throw UpnpControlException.OptionalActionNotImplimented(e.Message);
                } catch (Exception e) {
                    throw UpnpControlException.ActionFailed(e.Message);
                }
                DebriefAction(context, action);
            }
        }