summaryrefslogtreecommitdiff
path: root/src/XmlRpcRequestParserStateMachine.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-11-11 00:37:32 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-11-11 00:37:32 +0900
commit787bfd75dabaec2ff269cc0c1661046679ad91fe (patch)
tree693a3cdeba2e61f974ccdbfe9bc38f14f4bd0c8e /src/XmlRpcRequestParserStateMachine.cc
parent3b4a368554478f07dc9ac4edeb9bbe8004abab50 (diff)
Use XmlParser for XML-RPC.
Diffstat (limited to 'src/XmlRpcRequestParserStateMachine.cc')
-rw-r--r--src/XmlRpcRequestParserStateMachine.cc204
1 files changed, 170 insertions, 34 deletions
diff --git a/src/XmlRpcRequestParserStateMachine.cc b/src/XmlRpcRequestParserStateMachine.cc
index 22fe1511..db3013f8 100644
--- a/src/XmlRpcRequestParserStateMachine.cc
+++ b/src/XmlRpcRequestParserStateMachine.cc
@@ -2,7 +2,7 @@
/*
* aria2 - The high speed download utility
*
- * Copyright (C) 2009 Tatsuhiro Tsujikawa
+ * Copyright (C) 2011 Tatsuhiro Tsujikawa
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -33,79 +33,67 @@
*/
/* copyright --> */
#include "XmlRpcRequestParserStateMachine.h"
+#include "XmlRpcRequestParserController.h"
+#include "XmlRpcRequestParserStateImpl.h"
namespace aria2 {
namespace rpc {
+namespace {
InitialXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::initialState_ =
- new InitialXmlRpcRequestParserState();
+initialState = new InitialXmlRpcRequestParserState();
UnknownElementXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::unknownElementState_ =
- new UnknownElementXmlRpcRequestParserState();
+unknownElementState = new UnknownElementXmlRpcRequestParserState();
MethodCallXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::methodCallState_ =
- new MethodCallXmlRpcRequestParserState();
+methodCallState = new MethodCallXmlRpcRequestParserState();
MethodNameXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::methodNameState_ =
- new MethodNameXmlRpcRequestParserState();
+methodNameState = new MethodNameXmlRpcRequestParserState();
ParamsXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::paramsState_ =
- new ParamsXmlRpcRequestParserState();
+paramsState = new ParamsXmlRpcRequestParserState();
ParamXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::paramState_ =
- new ParamXmlRpcRequestParserState();
+paramState = new ParamXmlRpcRequestParserState();
ValueXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::valueState_ =
- new ValueXmlRpcRequestParserState();
+valueState = new ValueXmlRpcRequestParserState();
IntXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::intState_ =
- new IntXmlRpcRequestParserState();
+intState = new IntXmlRpcRequestParserState();
StringXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::stringState_ =
- new StringXmlRpcRequestParserState();
+stringState = new StringXmlRpcRequestParserState();
Base64XmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::base64State_ =
- new Base64XmlRpcRequestParserState();
+base64State = new Base64XmlRpcRequestParserState();
StructXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::structState_ =
- new StructXmlRpcRequestParserState();
+structState = new StructXmlRpcRequestParserState();
MemberXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::memberState_ =
- new MemberXmlRpcRequestParserState();
+memberState = new MemberXmlRpcRequestParserState();
NameXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::nameState_ =
- new NameXmlRpcRequestParserState();
+nameState = new NameXmlRpcRequestParserState();
ArrayXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::arrayState_ =
- new ArrayXmlRpcRequestParserState();
+arrayState = new ArrayXmlRpcRequestParserState();
DataXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::dataState_ =
- new DataXmlRpcRequestParserState();
+dataState = new DataXmlRpcRequestParserState();
ArrayValueXmlRpcRequestParserState*
-XmlRpcRequestParserStateMachine::arrayValueState_ =
- new ArrayValueXmlRpcRequestParserState();
+arrayValueState = new ArrayValueXmlRpcRequestParserState();
+} // namespace
XmlRpcRequestParserStateMachine::XmlRpcRequestParserStateMachine():
controller_(new XmlRpcRequestParserController())
{
- stateStack_.push(initialState_);
+ stateStack_.push(initialState);
}
XmlRpcRequestParserStateMachine::~XmlRpcRequestParserStateMachine()
@@ -113,6 +101,154 @@ XmlRpcRequestParserStateMachine::~XmlRpcRequestParserStateMachine()
delete controller_;
}
+bool XmlRpcRequestParserStateMachine::needsCharactersBuffering() const
+{
+ return stateStack_.top()->needsCharactersBuffering();
+}
+
+bool XmlRpcRequestParserStateMachine::finished() const
+{
+ return stateStack_.top() == initialState;
+}
+
+void XmlRpcRequestParserStateMachine::beginElement
+(const char* localname,
+ const char* prefix,
+ const char* nsUri,
+ const std::vector<XmlAttr>& attrs)
+{
+ stateStack_.top()->beginElement(this, localname, attrs);
+}
+
+void XmlRpcRequestParserStateMachine::endElement
+(const char* localname,
+ const char* prefix,
+ const char* nsUri,
+ const std::string& characters)
+{
+ stateStack_.top()->endElement(this, localname, characters);
+ stateStack_.pop();
+}
+
+void XmlRpcRequestParserStateMachine::setMethodName
+(const std::string& methodName)
+{
+ controller_->setMethodName(methodName);
+}
+
+const std::string& XmlRpcRequestParserStateMachine::getMethodName() const
+{
+ return controller_->getMethodName();
+}
+
+void XmlRpcRequestParserStateMachine::popArrayFrame()
+{
+ controller_->popArrayFrame();
+}
+
+void XmlRpcRequestParserStateMachine::popStructFrame()
+{
+ controller_->popStructFrame();
+}
+
+void XmlRpcRequestParserStateMachine::pushFrame()
+{
+ controller_->pushFrame();
+}
+
+void XmlRpcRequestParserStateMachine::setCurrentFrameValue
+(const SharedHandle<ValueBase>& value)
+{
+ controller_->setCurrentFrameValue(value);
+}
+
+const SharedHandle<ValueBase>&
+XmlRpcRequestParserStateMachine::getCurrentFrameValue() const
+{
+ return controller_->getCurrentFrameValue();
+}
+
+void XmlRpcRequestParserStateMachine::setCurrentFrameName
+(const std::string& name)
+{
+ controller_->setCurrentFrameName(name);
+}
+
+void XmlRpcRequestParserStateMachine::pushUnknownElementState()
+{
+ stateStack_.push(unknownElementState);
+}
+
+void XmlRpcRequestParserStateMachine::pushMethodCallState()
+{
+ stateStack_.push(methodCallState);
+}
+
+void XmlRpcRequestParserStateMachine::pushMethodNameState()
+{
+ stateStack_.push(methodNameState);
+}
+
+void XmlRpcRequestParserStateMachine::pushParamsState()
+{
+ stateStack_.push(paramsState);
+}
+
+void XmlRpcRequestParserStateMachine::pushParamState()
+{
+ stateStack_.push(paramState);
+}
+
+void XmlRpcRequestParserStateMachine::pushValueState()
+{
+ stateStack_.push(valueState);
+}
+
+void XmlRpcRequestParserStateMachine::pushIntState()
+{
+ stateStack_.push(intState);
+}
+
+void XmlRpcRequestParserStateMachine::pushStringState()
+{
+ stateStack_.push(stringState);
+}
+
+void XmlRpcRequestParserStateMachine::pushBase64State()
+{
+ stateStack_.push(base64State);
+}
+
+void XmlRpcRequestParserStateMachine::pushStructState()
+{
+ stateStack_.push(structState);
+}
+
+void XmlRpcRequestParserStateMachine::pushMemberState()
+{
+ stateStack_.push(memberState);
+}
+
+void XmlRpcRequestParserStateMachine::pushNameState()
+{
+ stateStack_.push(nameState);
+}
+
+void XmlRpcRequestParserStateMachine::pushArrayState()
+{
+ stateStack_.push(arrayState);
+}
+
+void XmlRpcRequestParserStateMachine::pushDataState()
+{
+ stateStack_.push(dataState);
+}
+
+void XmlRpcRequestParserStateMachine::pushArrayValueState()
+{
+ stateStack_.push(arrayValueState);
+}
+
} // namespace rpc
} // namespace aria2