<?xml version="1.0" ?>
<fsm fsm_version="1.3"
  idle_work="1" allow_actions="1"
  init="init" final="unsafe">
  <state id="init">
    <event name="CheckParameters" type="boolean">
      <next result="true"         state="offline" />
      <next result="false"        state="init" />
      </event>
    <!--event name="Progress">
      <next action="CheckParameters" />
      </event-->
    </state>
  <state id="offline">
    <event name="CheckParameters" type="boolean">
      <next result="true"         state="offline" />
      <next result="false"        state="init" />
      </event>
    <event name="Connect"         type="boolean">
      <next result="true"         state="online" />
      <next result="false"        state="unsafe" />
      </event>
    <event name="Progress">
      <next action="Connect" />
      </event>
    </state>
  <state id="online">
    <event name="Close" type="boolean">
      <next result="true"         state="offline" />
      <next result="false"        state="unsafe" />
      </event>
    <event name="Login" type="boolean">
      <next result="true"         state="live" />
      <next result="false"        state="unsafe" />
      </event>
    <event name="Progress">
      <next action="Login" />
      </event>
    </state>
  <state id="live">
    <event name="Close" type="boolean">
      <next result="true"         state="offline" />
      <next result="false"        state="unsafe" />
      </event>
    <event name="Chdir" type="boolean">
      <next result="true"         state="ready" />
      <next result="false"        state="unsafe" />
      </event>
    <event name="Get" type="int">
      <next result="FTP_FINISHED" state="live" />
      <next result="FTP_FAILED"   state="unsafe" />
      <next result="FTP_MOREDATA" state="active" />
      </event>
    <event name="Put" type="int">
      <next result="FTP_FINISHED" state="live" />
      <next result="FTP_FAILED"   state="unsafe" />
      <next result="FTP_MOREDATA" state="active" />
      </event>
    <event name="Progress">
      <next action="Chdir" />
      </event>
    </state>
  <state id="ready">
    <event name="Get" type="string">
      <next result="FTP_FINISHED" state="live" action="Close" />
      <next result="FTP_MOREDATA" state="active" />
      <next result="FTP_FAILED"   state="unsafe" />
      </event>
    <event name="Progress">
      <next action="Get" />
      </event>
    </state>
  <state id="active">
    <event name="close" type="boolean">
      <next result="true"         state="offline" />
      <next result="false"        state="unsafe" />
      </event>
    <event name="Continue" type="int">
      <next result="FTP_FINISHED" state="live" action="Close" />
      <next result="FTP_FAILED"   state="unsafe" />
      <next result="FTP_MOREDATA" state="active" />
      </event>
    <event name="Progress">
      <next action="Continue" />
      </event>
    </state>
  <state id="unsafe"  type="void" />
  </fsm>