コード例 #1
0
ファイル: parser.c プロジェクト: MoonTshing/Liso
int Parser(clientSock *client,requestLine *argu)
{

	char cmpletReq[BUF_SIZE];
	if(bufParse(client,argu,cmpletReq)==1)
	{
		if( (cmpletReq != NULL) && argu->status != 411) {
			httpParser(cmpletReq,argu);
		} 
		return 1;
	}
	else{
		return 0;
	}
	

}
コード例 #2
0
ファイル: CheckHttpContent.cpp プロジェクト: death/webwatch
    void CheckHttpContent::CheckImpl(const char *address, const XML::CXML & parameters, XML::CXML & results, StatusNotifyClient *statusNotifyClient)
    {
        const XML::CXML *xmlSocket = parameters.FindFirstChild("Socket");
        if (xmlSocket == 0)
            throw CheckMethodError("Must supply socket information");
        std::auto_ptr<HttpSocket> sock = HttpSocketFactory::Instance().CreateObject(*this, *xmlSocket);

        if (ShouldAbort())
            return;

        if (statusNotifyClient)
            statusNotifyClient->SetStatus("Connecting");

        int res = sock->Connect(address);
        if (res != 0)
            throw CheckMethodError("Cannot connect");

        if (ShouldAbort())
            return;

        if (statusNotifyClient)
            statusNotifyClient->SetStatus("Sending request");

        std::string request = sock->CreateRequest(address, HttpSocket::get);
        if (sock->Send(request) != request.length())
            throw CheckMethodError("Cannot send request completely");

        if (ShouldAbort())
            return;

        if (statusNotifyClient)
            statusNotifyClient->SetStatus("Receiving data");

        std::string data = sock->Receive();

        if (ShouldAbort())
            return;

        if (data.empty())
            throw CheckMethodError("Receive returned with no data");

        if (statusNotifyClient)
            statusNotifyClient->SetStatus("Processing data");

        Util::HttpParser httpParser(data);
        WEBWATCH_CHECKHTTPMETHOD_PERFORM_HEADER_CHECK(httpParser);

        std::string content = httpParser.GetContent();
        Filter(content, parameters);

        const XML::CXML *mode = parameters.FindFirstChild("Mode");
        if (mode) {
            const char *type = mode->GetParamText("Type");
            if (strcmp(type, "GetContent") == 0) {
                std::string xmlContent = XML::MultilineToXML(content);
                results.CreateChild("Content", xmlContent.c_str());
            }
        }

    //    cout << content << endl;

        if (ShouldAbort())
            return;

        const XML::CXML *xmlRegex = parameters.FindFirstChild("Regex");
        if (xmlRegex) {
            while (xmlRegex) {
                const char *expression = xmlRegex->GetText();
                if (!*expression)
                    throw CheckMethodError("No regular expression text specified in Regex field in parameters");
                SearchRegex(content, expression, results);
                xmlRegex = parameters.FindNextChild("Regex");
            }
        } else {
            unsigned char digest[SHA1_SIGNATURE_LENGTH];
            SHA1_CTX sha1;
            SHA1Init(&sha1);
            SHA1Update(&sha1, content.c_str(), static_cast<int>(content.length()));
            SHA1Final(digest, &sha1);

            XML::CXML *xmlHash = results.CreateChild("Hash");
            xmlHash->SetParam("Type", "SHA1");

            std::string hash;
            for (int i = 0; i < SHA1_SIGNATURE_LENGTH; i++) {
                char digit[8];
                std::sprintf(digit, "%02X", digest[i]);
                hash += digit;
            }

            xmlHash->SetText(hash.c_str());
        }
    }