-í ¡ƒæ>csÜdklZlZlZdklZdkTdkZdkZdk Z dfd„ƒYZ de ei fd„ƒYZ de ei fd „ƒYZd e eifd „ƒYZd fd „ƒYZdefd„ƒYZdS((simaplibsimaputils threadutil(sUIBase(s*NsUsefulIMAPMixIncs,tZd„Zd„Zdedd„ZRS(Ncs |iSdS(N(sselfsstate(sself((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysgetstatescs&|iƒdjo |iSntSdS(NsSELECTED(sselfsgetstatesselectedfoldersNone(sself((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysgetselectedfolders sINBOXics | o|iƒ|jo||_dSn|iidi|||ƒ}|ddjot dt |ƒ‚n|i ƒdjo ||_ n t|_ dS(NiisOKsError from select: %ssSELECTED(sforcesselfsgetselectedfoldersmailboxsreadonlys is_readonlys __class__s __bases__sselectsresults ValueErrorsstrsgetstatesselectedfoldersNone(sselfsmailboxsreadonlysforcesresult((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysselect!s  (s__name__s __module__sgetstatesgetselectedfoldersNonesselect(((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysUsefulIMAPMixIns  s UsefulIMAP4cstZRS(N(s__name__s __module__(((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pys UsefulIMAP4.ssUsefulIMAP4_SSLcstZRS(N(s__name__s __module__(((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysUsefulIMAP4_SSL/ssUsefulIMAP4_TunnelcstZRS(N(s__name__s __module__(((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysUsefulIMAP4_Tunnel0ss IMAPServerc sƒtZeeeeddedd„Zd„Zd„Zd„Zd„Zd„Zd „Z d „Z d „Z d „Z d „Z RS(Nis""c sà||_||_||_||_t|_||_| |_||_ ||_ t|_ t|_ |tjo!|o d|_ n d|_ n||_g|_g|_h|_t|iƒ|_tƒ|_| |_dS(Niái(s reposnamesselfsconfigsusernamespasswordsNones passworderrorshostnamestunnelsportssslsusesslsdelimsrootsmaxconnectionssavailableconnectionssassignedconnectionss lastownersBoundedSemaphores semaphoresLocksconnectionlocks reference( sselfsconfigs reposnamesusernamespasswordshostnamesportssslsmaxconnectionsstunnels reference((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pys__init__3s,                   csf|itjo |itjo |iSntiƒi|i|i|iƒ|_t|_|iSdS(N( sselfspasswordsNones passworderrorsUIBases getglobaluisgetpasss reposnamesconfig(sself((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pys getpasswordOs   cs |iSdS(sqReturns this server's folder delimiter. Can only be called after one or more calls to acquireconnection.N(sselfsdelim(sself((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysgetdelimZscs |iSdS(slReturns this server's folder root. Can only be called after one or more calls to acquireconnection.N(sselfsroot(sself((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysgetroot_scsK|iiƒ|ii|ƒ|ii|ƒ|iiƒ|i iƒdS(N( sselfsconnectionlocksacquiresassignedconnectionssremoves connectionsavailableconnectionssappendsreleases semaphore(sselfs connection((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysreleaseconnectiones   cswtiƒ}|iƒ}|idd|ƒ|iƒ}|i dt i ||ƒi ƒ}|idd|ƒ|SdS(Nsimapsmd5handler: got challenge %ss smd5handler: returning %s(sUIBases getglobaluisuisresponsesstrips challengesdebugsselfs getpasswordspasswdsusernameshmacsnews hexdigestsretval(sselfsresponsesuispasswds challengesretval((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pys md5handlerls   #cs3tiƒiddƒ|i|i|iƒƒdS(NsimapsAttempting plain authentication(sUIBases getglobaluisdebugsimapobjsloginsselfsusernames getpassword(sselfsimapobj((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pys plainauthvscs‡|iiƒ|iiƒt}t|iƒoÍti ƒ}t}x]t t|iƒdddƒD]<}|i|}|i||jo|}|i|=PnqbW| o|id}|id=n|ii|ƒti ƒ|i|<|iiƒ|Sn|iiƒd}x{| or|io2tiƒid|iƒt|iƒ}d}nq|io5tiƒi|i|iƒt|i|iƒ}n2tiƒi|i|iƒt|i|iƒ}|i o·y€d|ijoYtiƒiddƒy|id|i ƒWn%|i!j o}|i#|ƒnXn|i#|ƒd}Wn0|i!j o!}t$|ƒ|_%t|_&nXnqW|i'tjo¤|i(|i)d ƒd}|tgjp |tjo|i(|i)d ƒd}nt+i,|dƒd\|_'|_-t+i.|i'ƒ|_'t+i.|i-ƒ|_-n|iiƒ|ii|ƒti ƒ|i|<|iiƒ|Sd S( sÖFetches a connection from the pool, making sure to create a new one if needed, to obey the maximum connection limits, etc. Opens a connection to the server and returns an appropriate object.iiÿÿÿÿistunnels AUTH=CRAM-MD5simaps"Attempting CRAM-MD5 authenticationsCRAM-MD5s""s"*"N(/sselfs semaphoresacquiresconnectionlocksNonesimapobjslensavailableconnectionssthreads get_identsthreadidsrangesistryobjs lastownersassignedconnectionssappendsreleasessuccessstunnelsUIBases getglobaluis connectingsUsefulIMAP4_TunnelsusesslshostnamesportsUsefulIMAP4_SSLs UsefulIMAP4s capabilitiessdebugs authenticates md5handlerserrorsvals plainauthsstrs passworderrorspasswordsdelimslists referenceslistressimaputils imapsplitsrootsdequote(sselfsvalssuccesssimapobjsistryobjsthreadidslistres((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysacquireconnection|sx                #  csti|iƒdS(sÎWaits until there is a connection available. Note that between the time that a connection becomes available and the time it is requested, another thread may have grabbed it. This function is mainly present as a way to avoid spawning thousands of threads to copy messages, then have them all wait for 3 available connections. It's OK if we have maxconnections + 1 or 2 threads, which is what this will help us do.N(s threadutils semaphorewaitsselfs semaphore(sself((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysconnectionwaitÌscst|iiƒti|i|iƒx"|i|iD]}|i ƒq4Wg|_g|_h|_ |ii ƒdS(N( sselfsconnectionlocksacquires threadutilssemaphoreresets semaphoresmaxconnectionssassignedconnectionssavailableconnectionssimapobjslogouts lastownersrelease(sselfsimapobj((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pyscloseÖs    c sótiƒ}|iddƒxÐdoÈ|iddƒ|i|ƒ|iddƒ|iƒo|iddƒdSn|iddƒ|i i ƒt |i ƒt |i ƒ}|i iƒ|idd ƒg}g} x¤t|ƒD]–}|idd ||fƒ|iƒ}|idd |ƒ| i|ƒtid |iƒ}|idƒ|iƒ|i|ƒ|idd ƒqçW|iddƒx|D]}|iƒq˜W|iddƒx| D]}|i|ƒqÃW|iddƒqWdS(s<Sends a NOOP to each connection recorded. It will wait a maximum of timeout seconds between doing this, and will continue to do so until the Event object as passed is true. This method is expected to be invoked in a separate thread, which should be join()'d after the event is set.simapskeepalive thread startediskeepalive: top of loopskeepalive: after waits keepalive: event is set; exitingNs#keepalive: acquiring connectionlocks"keepalive: connectionlock releaseds)keepalive: processing connection %d of %ds!keepalive: connection %d acquiredstargetskeepalive: thread startedskeepalive: joining threadss keepalive: releasing connectionsskeepalive: bottom of loop(sUIBases getglobaluisuisdebugseventswaitstimeoutsisSetsselfsconnectionlocksacquireslensassignedconnectionssavailableconnectionssnumconnectionssreleasesthreadssimapobjssrangesisacquireconnectionsimapobjsappends threadutilsExitNotifyThreadsnoopsthrs setDaemonsstartsjoinsreleaseconnection( sselfstimeoutseventsnumconnectionssimapobjsisthrsuisthreadssimapobjs((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pys keepaliveâsL           (s__name__s __module__sNones__init__s getpasswordsgetdelimsgetrootsreleaseconnections md5handlers plainauthsacquireconnectionsconnectionwaitscloses keepalive(((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pys IMAPServer2s!     P sConfigedIMAPServercstZdZhd„ZRS(sThis class is designed for easier initialization given a ConfigParser object and an account name. The passwordhash is used if passwords for certain accounts are known. If the password for this account is listed, it will be obtained from there.c sX||_|iiƒ|_|iiƒ}| o@|iiƒ}|ii ƒ}|ii ƒ} |ii ƒ}n|iiƒ}t}t} |iƒ|jo||iƒ} n|o>ti||i|iiƒd|d|d|iiƒƒn\| o|iiƒ} nti||i|iiƒ|| || ||iiƒd|ƒ dS(sYInitialize the object. If the account is not a tunnel, the password is required.stunnels referencesmaxconnectionsN(s repositorysselfsreposs getconfigsconfigsgetpreauthtunnels usetunnelsgethostshostsgetusersusersgetportsportsgetsslsssls getreferences referencesNonesserverspasswordsgetnames passwordhashs IMAPServers__init__sgetmaxconnectionss getpassword( sselfs repositorys passwordhashs references usetunnelsserverssslshostsuserspasswordsport((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pys__init__s2  (s__name__s __module__s__doc__s__init__(((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pysConfigedIMAPServers (s offlineimapsimaplibsimaputils threadutilsofflineimap.uisUIBases threadingsthreadshmacsossUsefulIMAPMixInsIMAP4s UsefulIMAP4s IMAP4_SSLsUsefulIMAP4_SSLs IMAP4_TunnelsUsefulIMAP4_Tunnels IMAPServersConfigedIMAPServer( s IMAPServersUsefulIMAP4_TunnelsUsefulIMAP4_SSLs UsefulIMAP4sConfigedIMAPServersimaputilsimaplibsthreadsUIBasesUsefulIMAPMixInsosshmacs threadutil((s>/usr/pkg/lib/python2p2/site-packages/offlineimap/imapserver.pys?s à