예제 #1
0
파일: CgiParser.C 프로젝트: 913862627/wt
void CgiParser::readMultipartData(WebRequest& request,
				  const std::string type, ::int64_t len)
{
  std::string boundary;
    
  if (!fishValue(type, boundary_e, boundary))
    throw WException("Could not find a boundary for multipart data.");
    
  boundary = "--" + boundary;

  buflen_ = 0;
  left_ = len;
  spoolStream_ = 0;
  currentKey_.clear();

  if (!parseBody(request, boundary))
    return;

  for (;;) {
    if (!parseHead(request))
      break;
    if (!parseBody(request,boundary)) 
      break;
  }
}
예제 #2
0
파일: HtmlParser.cpp 프로젝트: runya-v/run
    HtmlParser(const std::string &file_name)
        : _result(false)
    {
        std::string title;
        std::string body;

        Tree tr;
        html::ParserDom parser;
        parser.parse(getHtmlString(file_name));
        tr = parser.getTree();

        TreeIter it  = tr.begin();
        TreeIter end = tr.end();

        _root_depth = tr.depth(it);

        while (it != end) {
            std::string shift = getShift(tr.depth(it));

            if (not it->tagName().empty() && not it->isComment()) {
                if (it->isTag()) {
                    if (it->tagName() == "head") {
                        title = parseHead(tr, it);
                    }

                    if (it->tagName() == "body") {
                        body = (b::format("<![CDATA[\n%s%s%s%s%s%s%s%s]]>")
                            % shift % it->text() % "\n" % parseBody(tr, it) % shift % it->closingText() % "\n" % shift
                            ).str();
                    }
                }
            }
            ++it;
        }

        b::format res = b::format(
            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
            "<items>\n"
            "   <snip1 type=\"contenttype\">\n"
            "       <title type=\"field\">\n"
            "           %s\n"
            "       </title>\n"
            "       <body type=\"field\">\n"
            "           <value>\n"
            "                %s\n"
            "            </value>\n"
            "       </body>\n"
            "   </snip1>\n"
            "</items>\n"
            )
            % title
            % body
            ;
        std::cout << res.str() << std::flush;

        _result = true;
    }
예제 #3
0
void HttpRequestParser::parse(const QString &raw)
{
	Q_D(HttpRequestParser);
	clear();
	d->vaild = (raw.startsWith("GET"));
	if (!d->vaild){
		return;
	}

	auto httpInfoList = raw.split("\r\n");
	parseHead(httpInfoList.takeFirst());
	parseHeader(httpInfoList);
}
예제 #4
0
	void *NclStructureParser::parseNcl(
		    DOMElement *parentElement,
		    void *objGrandParent) {

		void *parentObject = NULL;
		DOMNodeList *elementNodeList;
		int i, size;
		DOMNode *node;
		void *elementObject = NULL;

		parentObject = createNcl(parentElement, objGrandParent);
		if (parentObject == NULL) {
			return NULL;
		}

		elementNodeList = parentElement->getChildNodes();
		size = elementNodeList->getLength();

		for (i = 0; i < size; i++) {
			node = elementNodeList->item(i);
			if (node->getNodeType()==DOMNode::ELEMENT_NODE &&
				    XMLString::compareIString(((DOMElement*)node)->
				    	    getTagName(), XMLString::transcode("head") )==0) {

				elementObject = parseHead((DOMElement*)node, parentObject);;
				if (elementObject != NULL) {
					addHeadToNcl(parentObject, elementObject);
					break;
				}
			}
		}

		for (i = 0; i < size; i++) {
			node = elementNodeList->item(i);
			if (node->getNodeType()==DOMNode::ELEMENT_NODE &&
				    XMLString::compareIString(((DOMElement*)node)->
				    	    getTagName(), XMLString::transcode("body") )==0) {

				elementObject = parseBody((DOMElement*)node, parentObject);
		      	if (elementObject != NULL) {
					posCompileBody((DOMElement*)node, elementObject);
					addBodyToNcl(parentObject, elementObject);
					break;
				}
			}
		}

		return parentObject;
	}
예제 #5
0
        void parse(QIODevice* device)
        {
            QXmlStreamReader stream(device);

            parseHead(stream);

            while (!stream.atEnd())
            {
                stream.readNextStartElement();
                if (stream.name() == "Contents")
                {
                    parseContents(stream);
                }
            }
        }
예제 #6
0
void Parser::parse()
{
    parseHead();

    if (!_parsed)
    {
        try {
            Object::ParsingContext context(object());
            doParse();
            _parsed = true;
        } catch (const ParsingException& exception) {
            handleParsingException(exception);
        } catch (const Object::ParsingContext::LockException&) {

        }
    }
}
예제 #7
0
bool Parser::parseSome(int hint)
{
    parseHead();
    if (!_parsed)
    {
        try {
            Object::ParsingContext context(object());
            if (doParseSome(hint))
            {
                _parsed = true;
            }
        } catch (const ParsingException& exception) {
            handleParsingException(exception);
        } catch (const Object::ParsingContext::LockException&) {

        }
    }
    return _parsed;
}
예제 #8
0
void KAsyncFetchObject::handleReadHead(KHttpRequest *rq,int got)
{
	char *buf = hot;
	if (got<=0) {
		handleConnectError(rq,STATUS_GATEWAY_TIMEOUT,"cann't recv head from remote server");
		return;
	}
	assert(hot);
	hot += got;
	switch(parseHead(rq,buf,got)){
		case Parse_Success:
			client->isGood();
			handleUpstreamRecvedHead(rq);
			break;
		case Parse_Failed:
			handleError(rq,STATUS_GATEWAY_TIMEOUT,"cann't parse upstream protocol");
			break;
		case Parse_Continue:
			client->upstream_read(rq,resultUpstreamReadHead,bufferUpstreamReadHead);
			break;
	}
	
}