Beispiel #1
0
    def makeRequest(self, request):
        """Connect to the remote HTTP server and send request"""
        self.tcpclient = None
        self.httpparser = None
        port = intval(request.requestobject.get("uri-port", ""))
        if port == None:
            port = 80

        self.tcpclient = self.connectionclass(
            request.requestobject["uri-server"], port)
        self.httpparser = HTTPParser(mode="response")

        self.link((self, "_tcpoutbox"), (self.tcpclient, "inbox"))
        self.link((self, "_tcpsignal"), (self.tcpclient, "control"))
        self.link((self.tcpclient, "signal"), (self, "_tcpcontrol"))

        self.link((self.tcpclient, "outbox"),
                  (self.httpparser,
                   "inbox"))  #incoming TCP data -> HTTPParser directly

        self.link((self, "_parsersignal"), (self.httpparser, "control"))
        self.link((self.httpparser, "outbox"), (self, "_parserinbox"))
        self.link((self.httpparser, "signal"), (self, "_parsercontrol"))

        self.addChildren(self.tcpclient, self.httpparser)
        self.tcpclient.activate()
        self.httpparser.activate()
        self.response = ""
        if isinstance(request.requestobject["request"], str):
            self.send(request.requestobject["request"], "_tcpoutbox")
        else:
            for part in request.requestobject["request"]:
                self.send(part, "_tcpoutbox")
Beispiel #2
0
def HTTPServer(createRequestHandler, **argd):
    """\
    HTTPServer() -> new HTTPServer component capable of handling a single connection

    Arguments:
       -- createRequestHandler - a function required by HTTPRequestHandler that
                                 creates the appropriate request-handler component
                                 for each request, see HTTPResourceGlue
    """
    return Graphline(
        PARSER=HTTPParser(**argd),  # Since this is where the data goes first!
        HANDLER=HTTPRequestHandler(createRequestHandler),
        CORELOGIC=HTTPShutdownLogicHandling(),
        linkages={
            # Data Handling
            ("self", "inbox"): ("PARSER", "inbox"),
            ("PARSER", "outbox"): ("HANDLER", "inbox"),
            ("HANDLER", "outbox"): ("self", "outbox"),

            # Signalling Handling
            ("self", "control"): ("CORELOGIC", "control"),
            ("CORELOGIC", "Psignal"): ("PARSER", "control"),
            ("CORELOGIC", "Hsignal"): ("HANDLER", "control"),
            ("CORELOGIC", "signal"): ("self", "signal"),
            ("PARSER", "signal"): ("CORELOGIC", "Pcontrol"),
            ("HANDLER", "signal"): ("CORELOGIC", "Hcontrol"),
        })