Пример #1
0
void httplus::App::load(kul::hash::map::S2T<std::shared_ptr<http::Server>>& http,
            kul::hash::map::S2T<std::shared_ptr<https::Server>>& https, Sites& sites) throw(httplus::Exception){

    std::shared_ptr<http::Conf> defHttp;
    if(config.root()["http"])
        for(const YAML::Node& c : config.root()["http"]){
            if(defHttp && !c["host"]) KEXCEPTION("Only one http allowed without 'host' parameter");
            const std::string& port(c["port"] ? c["port"].Scalar() : "80");
            kul::Dir d(c["root"].Scalar());
            if(!d) KEXCEPTION("Directory does not exist: " + c["root"].Scalar());
            kul::Dir p("pub", d);
            if(!p && !p.mk()) KEXCEPTION("Invalid access on directory: " + d.real());
            http::Server* ser = {0};
            std::string home(c["home"] ? c["home"].Scalar() : "");
            const std::string txt(c["text"] ? c["text"].Scalar() : "");
            if(!c["host"]){
                defHttp = std::make_shared<http::Conf>(c["root"].Scalar(), home, txt);
            }else if(sites.count(std::to_string(std::hash<std::string>()(d.real())))){
                const Pages& pages((*sites.find(std::to_string(std::hash<std::string>()(d.real())))).second);
                http.insert(port, std::make_shared<http::Server>(kul::String::UINT16(port), pages));
                ser = http[port].get();
                ser->confs.insert(c["host"].Scalar(), std::make_shared<http::Conf>(c["root"].Scalar(), home, txt));
            }else
                KERR << "WARN: NO GENERATORS FOR HTTP ROOT: " << d;

        }
    for(const auto& p : http) p.second->def = defHttp;
    if(config.root()["https"])
        for(const YAML::Node& c : config.root()["https"]){
            kul::Dir d(c["root"].Scalar());
            if(!d) KEXCEPTION("Directory does not exist: " + c["root"].Scalar());
            kul::Dir p("pub", d);
            if(!p && !p.mk()) KEXCEPTION("Invalid access on directory: " + d.real());
            kul::File crt(c["crt"].Scalar());
            kul::File key(c["key"].Scalar());
            if(!crt) KEXCEPTION("File does not exist: " + crt.full());
            if(!key) KEXCEPTION("File does not exist: " + key.full());
            https::Server* ser = {0};
            const std::string& port(c["port"] ? c["port"].Scalar() : "443");
            const std::string hsh(std::to_string(std::hash<std::string>()(d.real())));
            if(!sites.count(hsh)) {
                KERR << "WARN: NO GENERATORS FOR HTTPS ROOT: " << d;
                continue; 
            }
            const Pages& pages((*sites.find(hsh)).second);
            std::string ssls(c["ssls"] ? c["ssls"].Scalar() 
                : config.root()["ssls"] ? config.root()["ssls"].Scalar() : "");
            https.insert(port, std::make_shared<https::Server>(kul::String::UINT16(port), pages, crt, key, ssls));
            ser = https[port].get();
            ser->init();
            if(c["chain"]) ser->setChain(c["chain"].Scalar());
            std::string home(c["home"] ? c["home"].Scalar() : "");
            const std::string txt(c["text"] ? c["text"].Scalar() : "");
            ser->confs.insert(c["host"].Scalar(), std::make_shared<http::Conf>(c["root"].Scalar(), home, txt));
        }
}
Пример #2
0
int _tmain(int argc, _TCHAR* argv[])
{
	const std::string    Pop3Server = "pop3.lolipop.jp";
	const bool           UseSSL     = false;
	const unsigned short Pop3Port   = UseSSL ? 995 : 110;

	const std::string    Pop3User   = "******";
	const std::string    Pop3Pass   = "******";

	UseWinSock ws(2, 2);
	if( !ws )
		return -1;

	u_long srvr_bin_addr = GetBinAddr(Pop3Server.c_str());
	if( INADDR_NONE==srvr_bin_addr )
	{
		return -1;
	}

	sockaddr_in ssock_addr;
	ssock_addr.sin_family = AF_INET;
	ssock_addr.sin_port = htons(Pop3Port);
	ssock_addr.sin_addr.s_addr = srvr_bin_addr;

	SOCKET hServerSock = socket(AF_INET, SOCK_STREAM, 0);
	if( INVALID_SOCKET == hServerSock )
		return -1;
	AutoCloseSocket CloseSocket(hServerSock);

	int ws_ret = connect(hServerSock, (sockaddr *)&ssock_addr, sizeof(ssock_addr));
	if( SOCKET_ERROR != ws_ret ) 
	{
		AutoShutdownConnection ShutdownConnection(hServerSock, SD_BOTH);
		std::cout<<"Connected to: "<<Pop3Server<<" port:"<<Pop3Port<<std::endl;

		try
		{
			LSockByteStream ss(hServerSock);
			LSSLContext SSLCtx;//in case we will need SSL
			LSSLByteStream ssls(&ss);//in case we will need SSL
			if( UseSSL ) 
			{
				SSLCtx.AcquireCredentials();
				SSLCtx.Handshake(&ss, to_wstring(Pop3Server).c_str() );
				ssls.SetSSLContext(&SSLCtx);
			}

			//POP3 protocol conversation
			LPop3 pop3( UseSSL ? (LByteStream*)&ssls : (LByteStream*)&ss );
			pop3.Greeting();
			std::cout<<"Server greeting: "<<pop3.GetResponse();

			if( pop3.USER(Pop3User) && pop3.PASS(Pop3Pass) ) {
				std::cout<<"User name: "<<Pop3User<<std::endl;

				unsigned int MessagesCount;
				pop3.STAT(&MessagesCount);

				std::cout<<"Total messages: "<<MessagesCount<<std::endl<<std::endl;
				std::vector<char> msg_body;
				for( unsigned int i=1; i<MessagesCount+1; ++i) {
					pop3.TOP(i, 100, &msg_body);
					msg_body.push_back('\0');
					std::cout<<"Message #"<<i<<" headers:"<<std::endl;
					std::cout<<&msg_body[0];

					CStringA aa = &msg_body[0];
					
				}
			}

			pop3.QUIT();
		}
		catch(LPop3::BAD_POP3_PROTOCOL&){//some problem with POP3
			return -1;
		}
		catch(LBS_EOF&){//connection closed.
			return -1;
		}
		catch(LSSL_SEC_E&){//some problems with ssl.
			return -1;
		}
		catch(int){//some problem with socket io.
			return -1;
		}
	}
	else
		return -1;

	return 0;
}