/[dgee]/dgee/cslib/DotGNU/XmlRpc/XmlRpcReader.cs
ViewVC logotype

Diff of /dgee/cslib/DotGNU/XmlRpc/XmlRpcReader.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1.2.8 by npg, Sat Jul 19 12:29:07 2003 UTC revision 1.1.2.9 by npg, Sun Jul 20 11:43:01 2003 UTC
# Line 30  namespace DotGNU.XmlRpc Line 30  namespace DotGNU.XmlRpc
30    
31    public class XmlRpcReader    public class XmlRpcReader
32    {    {
33      private String method;          private String request;    
34      private XmlRpcRequest request;      private XmlRpcMethod method;
35      private XmlTextReader xmlReader;      private XmlTextReader xmlReader;
36            
37      public XmlRpcReader( String request )      public XmlRpcReader( String request )
# Line 40  namespace DotGNU.XmlRpc Line 40  namespace DotGNU.XmlRpc
40    
41      public XmlRpcReader( StringReader reader )      public XmlRpcReader( StringReader reader )
42      {      {
43        request   = new XmlRpcRequest();        method    = new XmlRpcMethod();
44        xmlReader = new XmlTextReader( reader );        xmlReader = new XmlTextReader( reader );
45        xmlReader.WhitespaceHandling = WhitespaceHandling.None;        xmlReader.WhitespaceHandling = WhitespaceHandling.None;
46                
# Line 48  namespace DotGNU.XmlRpc Line 48  namespace DotGNU.XmlRpc
48        // XmlRpcNodes so we can detect protocol errors and the current        // XmlRpcNodes so we can detect protocol errors and the current
49        // scope/context of a value parameter.        // scope/context of a value parameter.
50        while( xmlReader.Read() ) {        while( xmlReader.Read() ) {
   
51          XmlRpcNode node;          XmlRpcNode node;
   
52          switch( xmlReader.NodeType ) {          switch( xmlReader.NodeType ) {
53    
54          case XmlNodeType.Element:          case XmlNodeType.Element:
             
55            switch( xmlReader.Name ) {            switch( xmlReader.Name ) {
   
56            case "methodCall" :            case "methodCall" :
57              node = new MethodCallNode( xmlReader, node );              node = new MethodCallNode( xmlReader, node );
58              break;                    break;
   
59            case "methodName":            case "methodName":
60              node = new MethodNameNode( xmlReader, node );              node = new MethodNameNode( xmlReader, node );
61              break;              break;
   
62            case "params":            case "params":
63              node = new ParameterListNode( xmlReader, node );              node = new ParameterListNode( xmlReader, node );
64              break;              break;
   
65            case "param":            case "param":
66              node = new ParameterNode( xmlReader, node );              node = new ParameterNode( xmlReader, node );
67              break;              break;
   
68            case "value":            case "value":
69              // Adjust parent node if within struct or array              // Adjust parent node if within struct or array
   
70              if( node.Parent is MemberNode ) {              if( node.Parent is MemberNode ) {
71                // its a member of a structure                // its a member of a structure
72                node = new ValueNode( xmlReader, node.Parent );                node = new ValueNode( xmlReader, node.Parent );
# Line 87  namespace DotGNU.XmlRpc Line 79  namespace DotGNU.XmlRpc
79                node = new ValueNode( xmlReader, node );                node = new ValueNode( xmlReader, node );
80              }              }
81              break;              break;
   
82              // Values              // Values
83            case "i4":            case "i4":
84            case "int":            case "int":
85              node = new IntegerNode( xmlReader, node );              node = new IntegerNode( xmlReader, node );
86              break;              break;
   
87            case "boolean":            case "boolean":
88              node = new BooleanNode( xmlReader, node );              node = new BooleanNode( xmlReader, node );
89              break;              break;
   
90            case "double":            case "double":
91              node = new DoubleNode( xmlReader, node );              node = new DoubleNode( xmlReader, node );
92              break;              break;
   
93            case "dateTime.iso8601":            case "dateTime.iso8601":
94              node = new DateTimeNode( xmlReader, node );              node = new DateTimeNode( xmlReader, node );
95              break;              break;
           
96            case "base64":            case "base64":
97              node = new Base64Node( xmlReader, node );              node = new Base64Node( xmlReader, node );
98              break;              break;
   
99            case "string":            case "string":
100              node = new StringNode( xmlReader, node );              node = new StringNode( xmlReader, node );
101              break;                    break;
           
102              // Structs              // Structs
103            case "struct":            case "struct":
104              node = new StructNode( xmlReader, node );              node = new StructNode( xmlReader, node );
105              break;              break;
           
106            case "member":            case "member":
107              node = new MemberNode( xmlReader, node );              node = new MemberNode( xmlReader, node );
108              break;              break;
           
109            case "name":            case "name":
110              node = new NameNode( xmlReader, node );              node = new NameNode( xmlReader, node );
111              break;              break;
   
112              // Arrays              // Arrays
113            case "array":            case "array":
114              node = new ArrayNode( xmlReader, node );              node = new ArrayNode( xmlReader, node );
115              break;              break;
   
116            case "data":            case "data":
117              node = new DataNode( xmlReader, node );              node = new DataNode( xmlReader, node );
118              break;              break;      
           
119            default:            default:
120              node = new UnknownNode( xmlReader, node );              node = new UnknownNode( xmlReader, node );
121              throw new XmlRpcBadFormatException( 100, "Unknown Element: " + xmlReader.Name, xmlReader );              throw new XmlRpcBadFormatException( 100, "Unknown Element: " + xmlReader.Name, xmlReader );
# Line 144  namespace DotGNU.XmlRpc Line 124  namespace DotGNU.XmlRpc
124            break;            break;
125    
126          case XmlNodeType.Text:          case XmlNodeType.Text:
127            node.Value = xmlReader.Value;            switch( node.Tag ) {
128              case "methodName":
129                method.Name = xmlReader.Value;
130                break;
131              case "base64":
132                byte[] barr = Convert.FromBase64String( xmlReader.Value );
133                method.Parameters.Add( barr );
134                break;
135              case "i4":
136              case "int":
137                int intval = Int32.Parse( xmlReader.Value );
138                method.Parameters.Add( intval );
139                break;
140              case "boolean":
141                string boolstr = xmlReader.Value;
142                if( boolstr == "0" ) {
143                  boolstr = "false";
144                }
145                else {
146                  boolstr = "true";
147                }
148                bool boolval = Convert.ToBoolean( boolstr );
149                method.Parameters.Add( boolval );
150                break;
151              case "double":
152                double dval = Convert.ToDouble( xmlReader.Value );
153                method.Parameters.Add( dval );
154                break;
155              case "dateTime.iso8601":
156                try {
157                  DateTime dtval = Convert.ToDateTime( xmlReader.Value );
158                  method.Parameters.Add( dtval );
159                }
160                catch( FormatException e ){
161                  throw new XmlRpcBadFormatException( 100, "Cannot parse DateTime value: " + xmlReader.Value, xmlReader );
162                }
163                
164                break;
165              case "string":
166                method.Parameters.Add( xmlReader.Value );
167                break;
168              case "name":
169                Console.Out.WriteLine( "{0} name='{1}'", node, xmlReader.Value );
170                break;
171                // anything below here should never have a value.  slap and bark at user.
172              case "methodCall" :
173              case "params":
174              case "param":
175              case "value":
176              case "struct":
177              case "member":
178              case "array":
179              case "data":
180              default:
181                throw new XmlRpcBadFormatException( 100, "Node Does Not Set Value: " + node.Tag, xmlReader );
182                break;
183              }
184    
185  #if DEBUG  #if DEBUG
186            Console.Out.WriteLine( "Node {0} with value {1}", node, node.Value );            Console.Out.WriteLine( "Node {0} with value {1} and tag {2}", node, node.Value, node.Tag );
187  #endif  #endif
188            break;            break;
189          case XmlNodeType.EndElement:          case XmlNodeType.EndElement:
   
190            // TODO: ensure the tags close propperly -- if thats really necessary...            // TODO: ensure the tags close propperly -- if thats really necessary...
191              // yep. its necessary
192            switch( xmlReader.Name ) {            switch( xmlReader.Name ) {
193            case "methodCall" :            case "methodCall" :
194            case "methodName":            case "methodName":
# Line 182  namespace DotGNU.XmlRpc Line 217  namespace DotGNU.XmlRpc
217            break;            break;
218          }          }
219        }        }
220          Console.Out.WriteLine( method );
221      }      }
222    
223      // Read only property for XmlRpcRequest object      // Read only property for XmlRpcMethod object
224      public XmlRpcRequest Request      public XmlRpcMethod Method
225      {      {
226        get {        get {
227          return this.request;          return this.method;
228        }        }
229      }          }    
230    }    }

Legend:
Removed from v.1.1.2.8  
changed lines
  Added in v.1.1.2.9

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26