示例#1
0
文件: engine.cpp 项目: nicklv/pushpin
	void doProxySocket(WebSocket *sock, const DomainMap::Entry &route)
	{
		QByteArray cid = connectionManager.addConnection(sock);

		WsProxySession *ps = new WsProxySession(zroutes, &connectionManager, stats, wsControl, this);
		connect(ps, SIGNAL(finishedByPassthrough()), SLOT(wsps_finishedByPassthrough()));

		ps->setDefaultSigKey(config.sigIss, config.sigKey);
		ps->setDefaultUpstreamKey(config.upstreamKey);
		ps->setUseXForwardedProtocol(config.useXForwardedProtocol);
		ps->setXffRules(config.xffUntrustedRule, config.xffTrustedRule);
		ps->setOrigHeadersNeedMark(config.origHeadersNeedMark);

		WsProxyItem *i = new WsProxyItem;
		i->ps = ps;
		wsProxyItemsBySession.insert(i->ps, i);

		ps->start(sock, cid, route);

		if(stats)
		{
			stats->addConnection(cid, ps->routeId(), StatsManager::WebSocket, sock->peerAddress(), sock->requestUri().scheme() == "wss", false);
			stats->addActivity(ps->routeId());
		}
	}
示例#2
0
文件: app.cpp 项目: sunwill/pushpin
    void doProxy(RequestSession *rs, const InspectData *idata = 0)
    {
        ProxySession *ps = 0;
        if(idata && !idata->sharingKey.isEmpty())
        {
            log_info("need to proxy with sharing key: %s", idata->sharingKey.data());

            ProxyItem *i = proxyItemsByKey.value(idata->sharingKey);
            if(i)
                ps = i->ps;
        }

        if(!ps)
        {
            log_info("creating proxysession");

            ps = new ProxySession(zurl, domainMap, this);
            connect(ps, SIGNAL(addNotAllowed()), SLOT(ps_addNotAllowed()));
            connect(ps, SIGNAL(finishedByPassthrough()), SLOT(ps_finishedByPassthrough()));
            connect(ps, SIGNAL(finishedForAccept(const AcceptData &)), SLOT(ps_finishedForAccept(const AcceptData &)));
            connect(ps, SIGNAL(requestSessionDestroyed(RequestSession *)), SLOT(ps_requestSessionDestroyed(RequestSession *)));

            if(idata)
                ps->setInspectData(*idata);

            ProxyItem *i = new ProxyItem;
            i->ps = ps;
            proxyItemsBySession.insert(i->ps, i);

            if(idata && !idata->sharingKey.isEmpty())
            {
                i->shared = true;
                i->key = idata->sharingKey;
                proxyItemsByKey.insert(i->key, i);
            }
        }
        else
            log_info("reusing proxysession");

        // proxysession will take it from here
        rs->disconnect(this);

        ps->add(rs);
    }