2009/4/2 Mark Lagendijk <mar...@marksspeelhoekje.nl> > Youness Alaoui wrote: > > > > 2009/4/1 Stéphane Bisinger <stephane.bisin...@gmail.com> > >> Hi, > > Hello Mark! Welcome to the mailing list! :) > > >> >> >> 2009/4/1 Mark Lagendijk <mar...@marksspeelhoekje.nl>: >> > Since I hated the adds and looks of msn messenger, I switched to aMSN a >> few >> > years ago. I have been an enthusiastic user since. Around a half year >> ago I >> > saw the blogpost of one of the developers about aMSN 2. I thought it >> would >> > be fun to start contributing, but since there was only a 'getting >> started' >> > guide for Linux I lost interest and forgot all about it. >> >> It is nice to know that some people prefer aMSN to the official client! >> >> > A month ago I >> > searched for a Windows guide again, but it still wasn't there. I then >> > decided to make this guide myself, afterall it couldn't be any harder >> than >> > getting the amsn2 code, installing python and maybe a few other things. >> > These 'few other things' turned out to be quite a few (see my post on >> the >> > forums: http://www.amsn-project.net/forums/viewtopic.php?p=37552#37552), so >> > it took me around a day to get it working. >> >> Well I think it is an average time when you have to figure out "few >> other things" to get started, hopefully your experience will shorten >> this time for other users! >> >> > It was then that I found out that I couldn't log in. I spoke with a few >> > developpers on the irc channel, and said that I would fix the bug >> myself. >> > >> > There turned out to be 2 bugs: >> > The first bug is that the socket object has the status 'OPEN', but in >> fact >> > isn't open at all. This means there is a bug in the sock class (or one >> of >> > its super classes) of the 'gnet' module of pymsn. I spend some time >> trying >> > to analyse this bug. I found out the following: >> > >> > The actual opening of the socket returns the 'EWOULDBLOCK' error code >> (line >> > 99 of 'iochannel.py': err = self._transport.connect_ex((host, port) >> ). >> > Might this be the problem? In the code this error is handled the same as >> no >> > error: the status is set to 'OPEN'. >> > The bug doesn't occur when opening 'test.py' from pymsn. Has this >> anything >> > to do with some sort of threading? (I am new to python and don't know if >> it >> > has threading, or how it uses it). I do not know why it works in test.py >> and >> > not in aMSN2, but I do know that the socket object it self is >> responsible >> > for making sure that it is really open when it says it is. >> > When I put a 'sleep' of 1 second in the 'post open' function the bug >> didn't >> > occur anymore. >> >> First of all I must say that I know close to nothing about the >> internals of PyMSN so I'll give you some general advice on how to find >> an answer on your own: first of all I'd try to find out what an >> EWOULDBLOCK error code means. Then you could dive into the amsn2 code >> to see how it handles connecting and how it is different from test.py. >> This has 2 advantages: first you familiarize with the code, and second >> you could find a way to reproduce this bug in a simple test (for >> instance by modifying test.py). If you achieve that, you can have a >> better understanding of the issue and could figure out if it's a PyMSN >> bug or an amsn2 one. >> > Good advice, but I did that allready. The problem was I got stuck and > didn't know if I was fixing the symptoms or the problem itself. > > As for threading, Python has its own threading implementation, but it >> is an internal rewrite of threads and so it basically doesn't work >> with C extensions. We are using Gobject's implementation for >> threading, you may want to check that out to get a better >> understanding. > > I will check it out when I have the time. > > Well, EWOULDBLOCK is easy, it's because the socket is in 'non-blocking' > mode, which means when you do a 'connect' or 'send' or 'recv' it will not > block until the operation is completed.. the error EWstablished, it > woulOULDBLOCK means exactly what it says, it means that the operation WOULD > BLOCK if the socket was not non-blocking.. in other words, if you do a > 'connect', the error EWOULDBLOCK means "there was no error, but the > connection has not yet been ed block if you wanted it to finish connecting, > so just wait and ask me later if i finished connecting" which basically > translates to "the socket is not yet OPEN, I will notify you when it > actually does become OPEN". So the state of the socket should go into a > 'CONNECTING' state before going into OPEN state and listen to the socket > events to figure out when it becomes OPEN (usually a 'writable' event means > that the connection has been completed). The sleep 1 is what makes the > difference, you force it to wait until the TCP connection finishes being set > up! > > That's what I thought. I wasn't sure though and it is frustrating to try to > fix something when you have > > About threading I don't know and I don't think so.. look at > amsn2/protocol/protocol.tcl and compare it with test.py, but I don't think > there is much difference.. I think the only difference is maybe that test.py > is slower for some reason by doing some processing, so by the time it > finishes, the socket was already done connecting. > > O > I think part of your message was lost :) Yes, it's frustrating but that's also why we code! because it's also fun and we love challenges and it's very rewarding once you figure it out! :) With experience you end up understanding all that stuff! A few years ago I would have answered you ":o"
> > >> >> > The second bug occurs in both aMSN 2 and test.py. >> > >> > Only one package (2048 bytes) from the soapresponse is read. After this >> the >> > socket closes. Should the socket stay open? Or should it close, but >> first >> > pass the data it received? >> > >> > When I also use a workaround for this (changing the 2048 bytes to 8000, >> so >> > the first package contains the whole response) I am able to log in and >> chat. >> > >> > Is there anyone (who knows the ins and outs of sockets), who can fix >> these >> > bugs, or point me in the right direction? >> >> Sockets on windows are quite different from sockets on *nix so there >> could be a difference in behaviour in Python too. You should check >> with the documentation about the sockets and see if you can find >> something about this. If on *nix systems logging in works it means >> that we are receiving the whole data, hence the logic should be there. >> You'd have to find where and why it stops on windows (it would also >> help to find out if it's something that happens on every windows box >> or it's just on yours). > > This also seems like a simple issue! > Actually the server sends you the response then closes the socket.. I'm > guessing that on linux you get a 'readable' followed by a 'closed' event.. > but on windows you get the 'closed' event as soon as it happens.. so what > pymsn does is that when it gets the 'closed' event, it closes everything and > thinks it's done.. the solution would be to do something like : > if event = 'closed': > if socket.data_is_available(): > buffer += socket.read_all_remaining_data() > process_close() > (this is of course pseudo code) > When your socket is closed, just make pymsn read whatever the system stored > in its buffer before closing the socket locally, so you don't miss anything! > This should fix it! > > Actually I did do exactly this at some time, but then I thought: "if the > socket doesn't close on Linux, it shouldn't close on Windows" and I > concluded that I was fixing a symtom instead of the problem itself. So I > will only have to do that fix again. > Hehe, yeah, actually the socket is closed on both windows and linux, but linux just waits for you to finish the last chunk of data before telling you it was closed! :) > > >> >> Workarounds like yours are fine, but a full understanding of the issue >> would be advisable: it leads to better solutions. > > Actually, I disagree.. workarounds are fine for TESTING, but I would REALLY > like aMSN2 to be as clean as possible, no hacks anywhere! And I know that > Ali Sabil (original pymsn author) wrote the whole pymsn library with exactly > this idea in mind, he did a lot of engineering to make sure there would be > no hacks anywhere in the code, so trying to fix the thing correctly is the > best solution... I think my tips above should help you enough in fixing > this! > > I agree, I never meant the workarounds as fixes, just as a means to find > the problem. > > > >> >> >> I hope I could help you a little on your way to find your own answers >> ;) Hopefully there is someone who knows better than me and will help >> you further. > > Thanks Stephane, I hope both our answers were helpful for him! > > Thank you from me too. You gave good advice on how to get at the bottom of > those bugs. I did allready do what you suggested, though (except the part > about threading), but you couldn't know that since I didn't say so ;). > > Anyways, Mark, I don't know if I already took the time to thank you for > what you're doing! I hope you best of luck and thanks for contributing! :) > KaKaRoTo > > Thanks! And thanks for your tips. Now I know where the problems ly and how > I can fix them. > And thanks to you especially for taking the time to look into this problem and fix it! :) > > Mark > > > >> >> >> -- >> Stéphane >> >> >> ------------------------------------------------------------------------------ >> _______________________________________________ >> Amsn-devel mailing list >> Amsn-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/amsn-devel >> > > ------------------------------ > > ------------------------------------------------------------------------------ > > > ------------------------------ > > _______________________________________________ > Amsn-devel mailing > listamsn-de...@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/amsn-deve > > > > ------------------------------------------------------------------------------ > > _______________________________________________ > Amsn-devel mailing list > Amsn-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/amsn-devel > >
------------------------------------------------------------------------------
_______________________________________________ Amsn-devel mailing list Amsn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/amsn-devel