a oe@sFddlZddlZddlZddlmZddlmZeedrBddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZGddde jZdd ZGd d d eZd d ZddZddZddZdeiZedkrBddlTeedZedddgZedejededZ e ge_!ddl"m#Z#e#dZ$e$j%ddd d!d"e&ee$ed#dS)$N)isapicon)SimpleExtensionZisapidllhandle)InternalReloadExceptionc@s$eZdZddZddZddZdS)ReloadWatcherThreadcCs`d|_t|_|jds$|jdr4|jdd|_ttj|jdt j |_ t j |dS)NFco)change_detected__file__filenameendswith win32fileZFindFirstChangeNotificationospathdirnamewin32conZFILE_NOTIFY_CHANGE_LAST_WRITEhandle threadingThread__init__selfr3C:\Program Files\Certbot\pkgs\isapi\samples\test.pyrs zReloadWatcherThread.__init__c Cst|jtj}z t|jtj}t |jWn@tj yr}z&|j t j krRWYd}~qWYd}~n d}~00t|jtj}||krt dd|_|}qdS)Nz+Detected file change - flagging for reload.T)rstatr ST_MTIME win32eventZWaitForSingleObjectrZINFINITEr ZFindNextChangeNotificationerrorwinerrorZERROR_INVALID_HANDLEprintr )rZ last_timercZdetailsZ this_timerrrrun)s "zReloadWatcherThread.runcCst|jdSN)r ZFindCloseChangeNotificationrrrrrstop:szReloadWatcherThread.stopN)__name__ __module__ __qualname__rr!r#rrrrrs rcCstd|dS)NzTransmit complete!)rclose)ecbZhFileZcbIOZerrCoderrrTransmitFileCallback>sr)c@s(eZdZdZddZddZddZdS) ExtensionzPython test ExtensioncCst|_|jdSr")rreload_watcherstartrrrrrHszExtension.__init__c Cs|jjrtdt|ddrtjtjB}t t tj ddtj |d}tjtjBtjB}z"|t|t|ddddd| Wq|Yq0nB|dddtd|dtd |d |dtd |d|tjS) Nz Doing reloadZ UNICODE_URLztest.pyrz200 OKzContent-Type: text/html z )filezThe root of this site is at/z)r+r rrZGetServerVariabler rZFILE_FLAG_SEQUENTIAL_SCANZFILE_FLAG_OVERLAPPEDr Z CreateFiler Z GENERIC_READZ OPEN_EXISTINGrZ HSE_IO_ASYNCZHSE_IO_DISCONNECT_AFTER_SENDZHSE_IO_SEND_HEADERSZ TransmitFiler)intCloseZSendResponseHeadersZ MapURLToPathr'ZHSE_STATUS_SUCCESS)rr(Z file_flagsZhfileflagsrrrHttpExtensionProcLsT      zExtension.HttpExtensionProccCs|jdSr")r+r#)rstatusrrrTerminateExtensionszExtension.TerminateExtensionN)r$r%r&__doc__rr2r4rrrrr*Es6r*cCstSr")r*rrrr__ExtensionFactory__sr6cCs|jr|j|_dSr") description DescriptionparamsoptionsrrrPreInstallDirectorysr<cCsttdtddS)NzThe sample has been installed.z"Point your browser to /PyISAPITestrr9rrr PostInstallsr>cCs tddS)zQuery the status of somethingzEverything seems to be fine!Nr=)r;logargrrrstatus_handlersrAr3__main__)*)r>rC)r*ZFlagsZ PyISAPITestreplace)Namer8Z ScriptMapsZScriptMapUpdateZ PreInstall) OptionParserz --descriptionstorez3custom description to use for the virtual directory)actionhelp)Z opt_parsercustom_arg_handlers)'rrsysZisapirZ isapi.simplerhasattrZwin32traceutilrrrr rrrrr)r*r6r<r>rArKr$Z isapi.installZISAPIParametersr:ZScriptMapParamsZsmZVirtualDirParametersr5ZvdZ VirtualDirsZoptparserFparserZ add_optionZHandleCommandLinerrrrsV    "B