Ejemplo n.º 1
0
    def main(self):
        brokenClient = False
        self.handleConnect()
        self.gettingdata = False
        self.client_connected = True
        self.breakConnection = False

        while (not self.gettingdata) and (not self.breakConnection):
            yield WaitComplete(self.getline(), tag="_getline1")
            try:
                command = self.line.split()
            except AttributeError:
                brokenClient = True
                break
            self.handleCommand(command)
        if not brokenClient:
            if (not self.breakConnection):
                EndOfMessage = False
                self.netPrint('354 Enter message, ending with "." on a line by itself')
                while not EndOfMessage:
                    yield WaitComplete(self.getline(), tag="getline2")
                    if self.lastline():
                        EndOfMessage = True
                self.netPrint("250 OK id-deferred")

        self.send(producerFinished(),"signal")
        if not brokenClient:
            yield WaitComplete(self.handleDisconnect(),tag="_handleDisconnect")
        self.logResult()
Ejemplo n.º 2
0
    def handleCommand(self, command):
        if command[0] == "STAT":
            self.sendCommand("STAT")
            yield WaitComplete(self.getline(), tag="_getline4")
            #            print "SERVER RESPONSE", self.line
            ok, emails, boxsize = self.line.split()
            emails = int(emails)
            boxsize = int(boxsize)
            self.send((emails, boxsize), "client_outbox")

        if command[0] == "DELE":
            net_command = "DELE %d" % (command[1], )
            self.sendCommand(net_command)
            yield WaitComplete(self.getline(), tag="_getline4")
            #            print "SERVER RESPONSE", self.line
            self.send(self.line, "client_outbox")

        if command[0] == "TOP":
            net_command = "TOP %d %d" % (command[1], command[2])
            self.sendCommand(net_command)
            end_of_headers = False
            lines = []
            while not end_of_headers:
                yield WaitComplete(self.getline(), tag="_getline4")
                #                print "SERVER RESPONSE", repr(self.line), "--EOL--"
                self.line = self.line.lower()
                lines.append(self.line)

                if "".join(lines)[-5:] == "\r\n.\r\n":
                    end_of_headers = True
            lines = ("".join(lines)).split("\r\n")

            headers = self.headerlinesToDict(lines[:][1:])
            self.send(headers, "client_outbox")
Ejemplo n.º 3
0
    def main(self):
        requestobject = self.initialiseRequestObject()

        yield WaitComplete(self.getInitialLine())
        self.handleInitialLine(requestobject)

        if requestobject["bad"]: # Initial line may be dud
            self.debug("HTTPParser::main - request line bad\n")
            self.closeConnection()
            return

        if self.mode == "response" or requestobject["method"] == "PUT" or requestobject["method"] == "POST":
            self.bodiedrequest = True
        else:
            self.bodiedrequest = False

        yield WaitComplete(self.getHeaders(requestobject))
        self.setServer(requestobject)
        self.setConnectionMode(requestobject)
        requestobject["peer"] = self.peer
        requestobject["peerport"] = self.peerport
        requestobject["localip"] = self.localip
        requestobject["localport"] = self.localport
        self.send(ParsedHTTPHeader(requestobject), "outbox") # Pass on completed header

        if self.bodiedrequest:
            yield WaitComplete(self.getBody(requestobject))

        #state 4 - request complete, send it on
        self.debug("HTTPParser::main - request sent on\n")
#        print requestobject
        #print 'closing connection!'
        self.closeConnection()
        yield 1
Ejemplo n.º 4
0
    def main(self):
        self.control_message = None
        self.connectionSuccess = False
        self.loggedIn = False

        yield WaitComplete(self.waitForBanner())

        if self.connectionSuccess:
            yield WaitComplete(self.doLogin(self.username, self.password))

            if self.loggedIn:
                run = True
                while run:
                    while not self.anyReady():
                        self.pause()
                        yield 1
                    while self.dataReady("client_inbox"):
                        command = self.recv("client_inbox")
                        yield WaitComplete(self.handleCommand(command))
                        if command[0] == "QUIT":
                            run = False

                self.sendCommand("QUIT")
                yield WaitComplete(self.getline(), tag="_getline5")


#                print "SERVER RESPONSE", self.line

        if self.shutdown() or self.control_message:
            self.send(self.control_message, "signal")  # Pass on
        else:
            self.send(shutdownMicroprocess(), "signal")
        yield 1
Ejemplo n.º 5
0
    def main(self):
        loggedin = False
        try:
            self.netPrint("")
            while not loggedin:
                self.send("login: "******"outbox")
                yield WaitComplete(self.waitMsg())
                username = self.getMsg()[:-2]  # strip \r\n

                self.send("password: "******"outbox")
                yield WaitComplete(self.waitMsg())
                password = self.getMsg()[:-2]  # strip \r\n

                self.netPrint("")
                if users.get(username.lower(), None) == password:
                    self.netPrint("Login Successful")
                    loggedin = True
                else:
                    self.netPrint("Login Failed!")

        except GotShutdownMessage:
            self.send(self.recv("control"), "signal")

        if loggedin:
            self.State["remoteuser"] = username
Ejemplo n.º 6
0
 def main(self):
     print "Reindeer", self.Name, "is up and about!"
     self.send("holiday", "feet")
     for i in xrange(4):
         yield 1  # Nasty hack - we need to here from our feet when we've arrived(!)
     yield WaitComplete(self.onHoliday())
     while 1:
         yield WaitComplete(self.doSantasWorkshop())
Ejemplo n.º 7
0
 def doLogin(self, username, password):
     self.sendCommand("USER " + username)
     yield WaitComplete(self.getline(), tag="_getline2")
     #        print "SERVER RESPONSE", self.line
     if self.line[:3] == "+OK":
         self.sendCommand("PASS " + password)
         yield WaitComplete(self.getline(), tag="_getline3")
         #            print "SERVER RESPONSE", self.line
         if self.line[:3] == "+OK":
             self.loggedIn = True
Ejemplo n.º 8
0
    def main(self):
        """\
        Requests a surface from PygameDisplay and registers to listen for events.
        Then enters the main loop, which checks for Pygame events and updates
        them to the screen.
        """
        yield WaitComplete(self.initPygame(DISPLAYREQUEST = True,
                                 size = (self.screen_width, self.screen_height),
                                 callback = (self, '_surface'),
                                 position = self.position,
                                 events = (self, "_events")))

        self.send({'ADDLISTENEVENT' : pygame.KEYDOWN,
                   'surface' : self.screen
                   }
                  , '_pygame')
        
        while not self.shutdown():
            yield 1
            string_buffer = self.string_buffer
            while self.dataReady('_events'):
                for event in self.recv('_events'):
                    char = event.unicode
                    if char == '\n' or char == '\r':
                        self.send(string_buffer)
                        string_buffer = ''
                    elif event.key == K_BACKSPACE:
                        string_buffer = string_buffer[:len(string_buffer)-1]
                    elif event.key == K_ESCAPE:
                        self.done = True
                    else:
                        string_buffer += char
                    self.setText(string_buffer + '|')
                    self.string_buffer = string_buffer
Ejemplo n.º 9
0
    def main(self):
        while not self.dataReady("control"):

            self.send("login: "******"outbox")
            yield WaitComplete(self.waitMsg())
            username = self.getMsg()

            self.send("password: "******"outbox")
            yield WaitComplete(self.waitMsg())
            password = self.getMsg()

            print
            print repr(username), repr(password)
            self.pause()
            yield 1
        self.send(self.recv("control"), "signal")
Ejemplo n.º 10
0
 def main(self):
    ID = randint(0,20000)
    print "PRE-WAIT"
    yield WaitComplete(self.tick(ID))
    print "POST-WAIT"
    while 1:
       yield 1
       try:
          data = self.recv("inbox")
          print data,
       except:
         print "NO DATA READY, LETS WAIT A BIT"
         ID = randint(0,20000)
         print "PRE-WAIT"
         yield WaitComplete(self.tick(ID))
         print "POST-WAIT"
Ejemplo n.º 11
0
 def main(self):
     print "Santa's up and about!"
     self.send("santasworkshop", "feet")
     for i in xrange(4):
         yield 1  # Nasty hack - we need to here from our feet when we've arrived(!)
     self.send("Ho Ho Ho!", "voicebox")
     yield WaitComplete(self.doSleeping())
Ejemplo n.º 12
0
    def main(self):
        """Main loop"""

        yield WaitComplete(
            self.requestDisplay(
                DISPLAYREQUEST=True,
                callback=(self, "fromDisplay"),
                events=(self, "eventsIn"),
                size=self.size,
                position=self.position,
            ))

        self.surface.fill((255, 255, 255))
        self.send({"REDRAW": True, "surface": self.surface}, "toDisplay")

        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEBUTTONDOWN,
                "surface": self.surface
            }, "toDisplay")
        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEMOTION,
                "surface": self.surface
            }, "toDisplay")
        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEBUTTONUP,
                "surface": self.surface
            }, "toDisplay")

        while not self.finished():

            while self.dataReady("inbox"):
                msgs = self.recv("inbox")
                #                \
                #print repr(msgs)
                self.redrawNeeded = False
                for msg in msgs:
                    cmd = msg[0]
                    args = msg[1:]
                    # parse commands here
                    self.handleCommand(cmd, *args)
                if self.redrawNeeded:
                    self.send({
                        "REDRAW": True,
                        "surface": self.surface
                    }, "toDisplay")
                    if not self.clean:
                        if not self.dirty_sent:
                            self.send("dirty", "surfacechanged")
                            self.dirty_sent = True

            # pass on events received from pygame display
            while self.dataReady("eventsIn"):
                self.send(self.recv("eventsIn"), "eventsOut")

            self.pause()
            yield 1
Ejemplo n.º 13
0
 def doRequestDisplay(self, size):
     return WaitComplete(
         self.requestDisplay(DISPLAYREQUEST=True,
                             callback=(self, "display_control"),
                             events=(self, "events"),
                             size=size,
                             transparency=self.transparency,
                             position=(0, 0)))
Ejemplo n.º 14
0
    def waitMsg(self):
        def _waitMsg(self):
            while (not self.dataReady("inbox")) and (
                    not self.dataReady("control")):
                self.pause()
                yield 1

        return WaitComplete(_waitMsg(self))
Ejemplo n.º 15
0
 def deleteMessage(self, messageid):
     def local():
         self.send(["DELE",messageid], "outbox")
         while not self.dataReady("inbox"):
             self.pause()
             yield 1
         self.result = self.recv("inbox")
     return WaitComplete(local())
Ejemplo n.º 16
0
    def main(self):
        try:
            while 1:
                self.send("login: "******"outbox")
                yield WaitComplete( self.waitMsg() )
                username = self.getMsg()

                self.send("password: "******"outbox")
                yield WaitComplete( self.waitMsg() )
                password= self.getMsg()

                print
                print repr(username), repr(password)
                self.pause()
                yield 1
        except GotShutdownMessage:
            self.send(self.recv("control"), "signal")
        self.send( Axon.Ipc.producerFinished(), "signal")
Ejemplo n.º 17
0
 def getMailStats(self):
     def local():
         self.send(["STAT"], "outbox")
         while not self.dataReady("inbox"):
             self.pause()
             yield 1
         self.stat = self.recv("inbox")
         self.stat_mails, self.stat_size = self.stat
     return WaitComplete(local())
Ejemplo n.º 18
0
 def main(self):
     yield WaitComplete(self.connect())
     for md5key in self.getMD5key():
         yield 1
     for reply in self.getBOSandAuthCookie(md5key):
         yield 1
     goal = self.extractBOSandCookie(reply)
     self.send(goal, "_cookie")
     assert self.debugger.note("AuthCookieGetter.main", 1, str(goal))
Ejemplo n.º 19
0
    def getMessageHeaders(self, messageID):
        def local():
            self.send(["TOP",messageID,0], "outbox")
            while not self.dataReady("inbox"):
                self.pause()
                yield 1

            self.headers = self.recv("inbox")
        return WaitComplete(local())
Ejemplo n.º 20
0
    def waitForBanner(self):
        yield WaitComplete(self.getline(), tag="_getline1")
        #        print "SERVER RESPONSE", self.line
        self.banner = self.line.strip()

        #        print repr(self.banner)
        if self.banner[:3] == "+OK":
            self.connectionSuccess = True
        else:
            self.connectionSuccess = False
Ejemplo n.º 21
0
 def doRequestDisplay(self):
      return WaitComplete(
               self.requestDisplay(DISPLAYREQUEST=True,
                                   callback = (self,"display_control"),
                                   events = (self, "events"),
                                   size = self.surfacesize,
                                   transparency = self.transparency,
                                   position = self.surfaceposition,
                                   onlymouseinside = self.onlymouseinside, ### Tempted to do events depth instead
               )
             )
Ejemplo n.º 22
0
    def getBody(self, requestobject):

        self.debug("HTTPParser::main - stage 3 start - Get Post Body")
        #state 3 - the headers are complete - awaiting the message
        if requestobject["headers"].get("transfer-encoding","").lower() == "chunked":

            yield WaitComplete(self.getBody_ChunkTransferEncoding(requestobject))

        elif requestobject["headers"].has_key("content-length"):

            yield WaitComplete(self.getBody_KnownContentLength(requestobject))

        else: #we'll assume it's a connection: close jobby

            yield WaitComplete(self.getBodyDependingOnHalfClose())
        #else:
        #    #no way of knowing how long the body is
        #    requestobject["bad"] = 411 #length required
#            print "HTTPParser::main - stage 3.bad"
        self.debug("HTTPParser::main - stage 3 end - Got Post Body")
Ejemplo n.º 23
0
    def deleteMessage(self, messageid):
        def local():
            print "WARNING, you missed this!"
            return  # just in case we accidentally missed something
            self.send(["DELE", messageid], "outbox")
            while not self.dataReady("inbox"):
                self.pause()
                yield 1
            self.result = self.recv("inbox")

        return WaitComplete(local())
Ejemplo n.º 24
0
 def main(self):
     """Main loop"""
     yield WaitComplete(self.initPygame(DISPLAYREQUEST = True,
                                        size = (self.screen_width, self.screen_height),
                                        callback = (self, '_surface'),
                                        position = self.position))
     
     while not self.shutdown():
         yield 1
         if self.dataReady('inbox'):
             line = str(self.recv('inbox'))
             self.update(line)
Ejemplo n.º 25
0
    def main(self):
        done = False
        while not done:
            yield WaitComplete(self.waitForData())

            while self.dataReady("inbox"):
                data = self.recv("inbox")
                sys.stdout.write(str(data) + "\n")
                sys.stdout.flush()
                done = data == 0

            yield 1
Ejemplo n.º 26
0
 def main(self):
     while 1:
         yield WaitComplete(self.sleep())
         for d in self.Inbox("inbox"):
             try:
                 command = self.commands.get(d[0])
             except KeyError:
                 pass
             if command:
                 command(d[1:])
             else:
                 (self.contextactions[-1])(d)
Ejemplo n.º 27
0
    def main(self):
        """\
        Requests a surface from PygameDisplay and registers to listen for events
        Then enters the main loop, which checks for Pygame events and updates
        them to the screen.
        """
        yield 1
        yield 1
        yield 1
        yield WaitComplete(self.initPygame(DISPLAYREQUEST = True,
                                           size = (self.screen_width, self.screen_height),
                                           callback = (self, '_surface'),
                                           position = self.position,
                                           events = (self, "_events")))

        self.send({'ADDLISTENEVENT' : pygame.KEYDOWN,
                   'surface' : self.screen},
                  '_pygame')
        
        string_buffer = self.initial_string_buffer
        while not self.needShutdown(): # FIXME: Inconsistent - see method definition
            yield 1
            while self.dataReady('_events'):
                for event in self.recv('_events'):
                    char = event.unicode
                    if char == '\n' or char == '\r':
                        self.send(string_buffer)
                        string_buffer = ''
                    elif event.key == K_BACKSPACE:
                        string_buffer = string_buffer[:-1]
                    elif event.key == K_ESCAPE:
                        self.done = True
                    else:
                        string_buffer += char
                    # Add a '|' character as a text cursor
                    self.setText(string_buffer + '|')
            while self.dataReady("inbox"):
                char = self.recv("inbox")
                if char == "\n" or char == "\r":
                    self.send(string_buffer)
                    string_buffer = ''
                elif char == "\x08":
                    string_buffer = string_buffer[:-1]
                else:
                    string_buffer += char
                self.setText(string_buffer + '|')
                    
            while not self.anyReady() and not self.needShutdown():  # changed to while - can be woken by messages leaving as well as arriving
                self.pause()            # Looping here is safe, since we only update based on information on inboxes
                yield 1

        self.send(Axon.Ipc.producerFinished(message=self.screen), "_pygame")
Ejemplo n.º 28
0
    def main(self):
        yield WaitComplete(self.getDisplay())

        while self.shutdown():
            if self.dataReady("inbox"):
                data = self.recv("inbox")
                if isinstance(data, list):
                    self.display.blit(data[0], data[1])
                else:
                    self.display.blit(data, (0, 0))
                self.pygame_display_flip()
            self.pause()
            yield 1
Ejemplo n.º 29
0
    def handleDisconnect(self):
        if not self.acceptingMail: return
        self.connectToRealSMTPServer()
        yield 1
        sentDataLine = False
        for line in self.inbox_log:
            if not sentDataLine: # wait for a response from the server before sending next line
                yield WaitComplete(self.getline_fromsmtpserver(),tag="getline_smtp")

            self.send(line, "tcp_outbox")
            yield 1
            if not sentDataLine:
                sentDataLine = (line == "DATA\r\n")
        yield 1
        self.send(producerFinished(), "tcp_signal")
Ejemplo n.º 30
0
    def grabStoreHam(self, messageid):
        def local():
            self.send(["RETR", messageid], "outbox")
            while not self.dataReady("inbox"):
                self.pause()
                yield 1
            self.result = self.recv("inbox")
            filename = str(self.hamcount)
            full_filename = os.path.join(self.possible_ham_store, filename)
            F = open(full_filename, "wb")
            F.write(self.result)
            F.close()
#            print "STORED SPAM IN", full_filename

        return WaitComplete(local())