Пример #1
0
    def do_GET(self):

        self.log.log(cpc.util.log.TRACE, '%s %s' % (self.command, self.path))

        # if the path starts with application root + / or ?  we have a message to process
        #otherwise we should just strip any request params and keep the resource reference

        if (self.isApplicationRoot()):
            request = HttpMethodParser.parseGET(self.headers.dict, self.path)
            self.processMessage(request)
        #take the input and put it into a request object

        else:
            if self.path == "/":
                self.path += "index.html"
            else:
                self.path = self.path.split('?', 1)[0]  #strip trailing '?...'

            webDir = ServerConf().getWebRootPath()
            resourcePath = webDir + self.path
            if not os.path.isfile(resourcePath):
                self.responseCode = 404
                resourcePath = webDir + '/404.html'

            response = ServerResponse()
            file = open(resourcePath, 'rb')
            response.setFile(file, mimetypes.guess_type(resourcePath))

            self._sendResponse(response)
Пример #2
0
    def do_GET(self):

        self.log.log(cpc.util.log.TRACE,'%s %s'%(self.command,self.path))
    
        # if the path starts with application root + / or ?  we have a message to process
        #otherwise we should just strip any request params and keep the resource reference

        if(self.isApplicationRoot()):
            request = HttpMethodParser.parseGET(self.headers.dict,self.path)
            self.processMessage(request)
        #take the input and put it into a request object

        else:
            if self.path == "/" :
                self.path += "index.html"
            else:
                self.path = self.path.split('?', 1)[0]#strip trailing '?...'

            webDir = ServerConf().getWebRootPath()
            resourcePath = webDir+self.path
            if not os.path.isfile(resourcePath):
                self.responseCode = 404
                resourcePath = webDir+'/404.html'

            response = ServerResponse()
            file = open(resourcePath,'rb')
            response.setFile(file, mimetypes.guess_type(resourcePath))

            self._sendResponse(response)
Пример #3
0
    def do_POST(self):
        self.log.log(cpc.util.log.TRACE, '%s %s' % (self.command, self.path))
        self.log.log(cpc.util.log.TRACE, "Headers are: '%s'\n" % self.headers)
        #can handle single part and multipart messages
        #take the input and put it into a request object
        #process the message
        if (self.isApplicationRoot()):
            request = HttpMethodParser.parsePOST(self.headers.dict, self.rfile)
            self.processMessage(request)

        else:
            self.processMessage(
            )  #this is not a valid command i.e we did not find the resource

        if self.server.getState().getQuit():
            self.log.info("shutting down")
            self.server.shutdown()
Пример #4
0
    def do_POST(self):
        self.log.log(cpc.util.log.TRACE,'%s %s'%(self.command,self.path))
        self.log.log(cpc.util.log.TRACE,"Headers are: '%s'\n"%self.headers)
        #can handle single part and multipart messages
        #take the input and put it into a request object
        #process the message
        if(self.isApplicationRoot()):
            request = HttpMethodParser.parsePOST(self.headers.dict,self.rfile)
            self.processMessage(request)

        else:
            self.processMessage() #this is not a valid command i.e we did not find the resource


        if self.server.getState().getQuit():
            self.log.info("shutting down")
            self.server.shutdown()
Пример #5
0
    def do_PUT(self):
        conf = ServerConf()
        self.log.log(cpc.util.log.TRACE, '%s %s' % (self.command, self.path))
        self.log.log(cpc.util.log.TRACE, "Headers are: '%s'\n" % self.headers)

        if self.headers.has_key('persistent-connection'):
            if not self.headers.has_key('originating-server-id'):
                raise Exception("No originating server id found in request")

            self.originatingServerId = self.headers['originating-server-id']
            self.request.serverId = self.originatingServerId
            direction = self.headers['persistent-connection']
            if (direction == PersistentServerMessage.INBOUND_CONNECTION):
                self.log.log(cpc.util.log.TRACE, "Got request to persist "
                             "incoming connections")

                node = ServerConf().getNodes().get(self.originatingServerId)
                node.addInboundConnection()

            if (direction == PersistentServerMessage.OUTBOUND_CONNECTION):
                self.log.log(cpc.util.log.TRACE, "Got request to persist "
                             "outgoing connections")

                self.request.revertSocket = True

        #Checks if the message should be forwarded to another node
        if self.headers.has_key('server-id') and \
            ServerToServerMessage.connectToSelf(self.headers)==False:

            endNodeServerId = self.headers['server-id']

            self.log.log(cpc.util.log.TRACE,
                         "Trying to reach end node %s" % (endNodeServerId))

            server_msg = ServerToServerMessage(endNodeServerId)
            server_msg.connect()
            retresp = server_msg.delegateMessage(self.headers.dict, self.rfile)
            self.log.log(
                cpc.util.log.TRACE, "Done. Delegating back reply "
                "message  of length %d." % len(retresp.message))
            self.send_response(200)
            # the content-length is in the message.
            self.send_header("content-length", len(retresp.message))
            for (key, val) in retresp.headers.iteritems():
                kl = key.lower()
                if kl != "content-length" and kl != "server" and kl != "date":
                    self.log.log(cpc.util.log.TRACE,
                                 "Sending header '%s'='%s'" % (kl, val))
                    self.send_header(key, val)

            self.send_header("Connection", "keep-alive")
            self.end_headers()
            retresp.message.seek(0)
            self.wfile.write(retresp.message.read(len(retresp.message)))

        else:
            if (self.isApplicationRoot()):
                # put message format should be handled exaclty as POST
                request = HttpMethodParser.parsePOST(self.headers.dict,
                                                     self.rfile)

                self.processMessage(request,
                                    closeConnection=False,
                                    revertSocket=self.request.revertSocket)

            else:
                self.processMessage(closeConnection=False,
                                    revertSocket=self.request.revertSocket)
Пример #6
0
    def do_PUT(self):
        conf = ServerConf()
        self.log.log(cpc.util.log.TRACE,'%s %s'%(self.command,self.path))
        self.log.log(cpc.util.log.TRACE,"Headers are: '%s'\n"%self.headers)

        if self.headers.has_key('persistent-connection'):
            if not self.headers.has_key('originating-server-id'):
                raise Exception("No originating server id found in request")

            self.originatingServerId = self.headers['originating-server-id']
            self.request.serverId = self.originatingServerId
            direction = self.headers['persistent-connection']
            if( direction == PersistentServerMessage.INBOUND_CONNECTION ):
                self.log.log(cpc.util.log.TRACE,"Got request to persist "
                                                "incoming connections")

                node = ServerConf().getNodes().get(self.originatingServerId)
                node.addInboundConnection()

            if( direction == PersistentServerMessage.OUTBOUND_CONNECTION ):
                self.log.log(cpc.util.log.TRACE,"Got request to persist "
                                                "outgoing connections")

                self.request.revertSocket = True

        #Checks if the message should be forwarded to another node
        if self.headers.has_key('server-id') and \
            ServerToServerMessage.connectToSelf(self.headers)==False:

            endNodeServerId = self.headers['server-id']

            self.log.log(cpc.util.log.TRACE,"Trying to reach end node %s"%(
                endNodeServerId))

            server_msg = ServerToServerMessage(endNodeServerId)
            server_msg.connect()
            retresp = server_msg.delegateMessage(self.headers.dict,
                                                 self.rfile)
            self.log.log(cpc.util.log.TRACE,"Done. Delegating back reply "
                                            "message  of length %d."%
                                            len(retresp.message))
            self.send_response(200)
            # the content-length is in the message.
            self.send_header("content-length", len(retresp.message))
            for (key, val) in retresp.headers.iteritems():
                kl=key.lower()
                if kl!="content-length" and kl!="server" and kl!="date":
                    self.log.log(cpc.util.log.TRACE,
                        "Sending header '%s'='%s'"%(kl,val))
                    self.send_header(key,val)

            self.send_header("Connection",  "keep-alive")
            self.end_headers()
            retresp.message.seek(0)
            self.wfile.write(retresp.message.read(len(retresp.message)))

        else:
            if(self.isApplicationRoot()):
                # put message format should be handled exaclty as POST
                request = HttpMethodParser.parsePOST(self.headers.dict,self.rfile)

                self.processMessage(request,closeConnection=False,
                    revertSocket=self.request.revertSocket
                )

            else:
                self.processMessage(closeConnection=False,
                    revertSocket=self.request.revertSocket)