/[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.9.2.1 by npg, Mon Jul 21 16:23:20 2003 UTC revision 1.1.2.9.2.2 by npg, Mon Jul 21 19:51:46 2003 UTC
# Line 34  namespace DotGNU.XmlRpc Line 34  namespace DotGNU.XmlRpc
34      private XmlRpcMethod method;      private XmlRpcMethod method;
35      private XmlTextReader xmlReader;      private XmlTextReader xmlReader;
36      private XmlRpcStruct structure;      private XmlRpcStruct structure;
37        private XmlRpcArray array;
38    
39      public XmlRpcReader( String request )      public XmlRpcReader( String buffer )
40        : this( new StringReader( request ) ){        : this( new StringReader( buffer ) ){
41      }      }
42    
43      public XmlRpcReader( StringReader reader )      public XmlRpcReader( StringReader reader )
44      {      {
       method    = new XmlRpcMethod();  
45        structure = null;        structure = null;
46          array     = null;
47          method    = new XmlRpcMethod();
48        xmlReader = new XmlTextReader( reader );        xmlReader = new XmlTextReader( reader );
       xmlReader.WhitespaceHandling = WhitespaceHandling.None;  
   
49                
50        // Itereate through the tree and construct an n-ary tree with        // Itereate through the tree and construct an n-ary tree with
51        // XmlRpcNodes so we can detect protocol errors and the current        // XmlRpcNodes so we can detect protocol errors and the current
# Line 118  namespace DotGNU.XmlRpc Line 118  namespace DotGNU.XmlRpc
118              // Arrays              // Arrays
119            case "array":            case "array":
120              node = new ArrayNode( xmlReader, node );              node = new ArrayNode( xmlReader, node );
121                array = new XmlRpcArray();
122              break;              break;
123            case "data":            case "data":
124              node = new DataNode( xmlReader, node );              node = new DataNode( xmlReader, node );
125              break;                    break;      
126            default:            default:
127              node = new UnknownNode( xmlReader, node );              node = new UnknownNode( xmlReader, node );
128              throw new XmlRpcBadFormatException( 100, "Unknown Element: " + xmlReader.Name, xmlReader );              throw new XmlRpcBadFormatException( 100, "Unknown Element: " +
129                                                    xmlReader.Name, xmlReader );
130              break;              break;
131            }            }
132            #if __DEBUG__            #if __DEBUG__
133            Console.Out.WriteLine( "Adding Node {0} with parent{1}", node, node.Parent );            Console.Out.WriteLine( "Opening {0} with parent {1}",
134                                     node, node.Parent );
135            #endif            #endif
136            break;            break;
137    
# Line 169  namespace DotGNU.XmlRpc Line 172  namespace DotGNU.XmlRpc
172                Add( dtval );                Add( dtval );
173              }              }
174              catch( FormatException e ){              catch( FormatException e ){
175                throw new XmlRpcBadFormatException( 100, "Cannot parse DateTime value: " + xmlReader.Value, xmlReader );                throw new XmlRpcBadFormatException( 100, "Cannot parse DateTime value: " +
176                                                      xmlReader.Value, xmlReader );
177              }              }
178              */              */
179              break;              break;
# Line 181  namespace DotGNU.XmlRpc Line 185  namespace DotGNU.XmlRpc
185                structure.MemberName = xmlReader.Value;                structure.MemberName = xmlReader.Value;
186              }              }
187              else {              else {
188                Console.Out.WriteLine( "Error: not in struct context: {0} name='{1}'", node, xmlReader.Value );                // TODO:  make and throw an exception here...
189                  Console.Out.WriteLine( "Error: not in struct context: {0} name='{1}'",
190                                         node, xmlReader.Value );
191              }              }
192              break;              break;
193              // anything below here should never have a value.  slap and bark at user.              // anything below here should never have a value.  slap and bark at user.
# Line 194  namespace DotGNU.XmlRpc Line 200  namespace DotGNU.XmlRpc
200            case "array":            case "array":
201            case "data":            case "data":
202            default:            default:
203              throw new XmlRpcBadFormatException( 100, "Node Does Not Set Value: " + node.Tag, xmlReader );              throw new XmlRpcBadFormatException( 100, "Node Does Not Set Value: " +
204                                                    node.Tag, xmlReader );
205              break;              break;
206            }            }
207            break;            break;
208    
209            // close the scope            // close the scope
210          case XmlNodeType.EndElement:          case XmlNodeType.EndElement:
211            // TODO: ensure the tags close propperly -- if thats really necessary...            // TODO: ensure the tags are well formed -- if thats really
212            // yep. its necessary            // necessary...  yep. its necessary... or maybe not... hehe
213              
214              #if __DEBUG__
215              Console.Out.WriteLine( "Closing {0} with parent {1} [{2}]",
216                                     node, node.Parent, xmlReader.Name );
217              #endif
218            switch( xmlReader.Name ) {            switch( xmlReader.Name ) {
219            case "methodCall" :            case "methodCall" :
220            case "methodName":            case "methodName":
# Line 217  namespace DotGNU.XmlRpc Line 229  namespace DotGNU.XmlRpc
229            case "base64":            case "base64":
230            case "string":            case "string":
231            case "name":            case "name":
232                node = node.Parent;
233                break;
234            case "array":            case "array":
235              node = node.Parent;              node = node.Parent;
236                #if __DEBUG__
237                Console.Out.WriteLine( array + ":" + array.Count );
238                #endif
239                array = null;
240              break;              break;
241            case "member":            case "member":
242              node = node.Parent;              node = node.Parent;
# Line 228  namespace DotGNU.XmlRpc Line 246  namespace DotGNU.XmlRpc
246              node = node.Parent;              node = node.Parent;
247              break;              break;
248            case "struct":            case "struct":
249                node = node.Parent;
250                #if __DEBUG__
251              Console.Out.WriteLine( structure );              Console.Out.WriteLine( structure );
252                #endif
253              structure = null;              structure = null;
254              break;              break;
255            default:            default:
256              node = new UnknownNode( xmlReader, node );              node = new UnknownNode( xmlReader, node );
257              throw new XmlRpcBadFormatException( 100, "Unknown Element: " + xmlReader.Name, xmlReader );              throw new XmlRpcBadFormatException( 100, "Unknown Element: " +
258                                                    xmlReader.Name, xmlReader );
259              break;              break;
260            }            }
261            break; // case XmlNodeType.EndElement            break; // case XmlNodeType.EndElement
# Line 244  namespace DotGNU.XmlRpc Line 266  namespace DotGNU.XmlRpc
266    
267      private void Add( object o )      private void Add( object o )
268      {      {
269        if( structure != null ) {        // HACK!!!: this could be done more elegantly
270          if( (structure == null) && (array == null) ) {
271            method.Parameters.Add( o );
272          }
273          else if( (structure != null) && (array == null) ) {
274          structure.MemberValue = o;          structure.MemberValue = o;
275        }        }
276          else if( (structure == null) && (array != null) ) {
277            array.Add( o );
278         }
279        else {        else {
280          method.Parameters.Add( o );          // Oh dear.  This should never happen
281            // TODO: make and throw exception
282            Console.Out.WriteLine( "Parameter BUMMER:  Unknown state" );
283        }        }
284      }      }
285            

Legend:
Removed from v.1.1.2.9.2.1  
changed lines
  Added in v.1.1.2.9.2.2

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