sThread
[ class tree: sThread ] [ index: sThread ] [ all elements ]

Source for file sock.php

Documentation is available at sock.php

  1. <?php
  2. /**
  3.  * sThread SOCK module for port knocking
  4.  * 
  5.  * @category    Network
  6.  * @package     sThread
  7.  * @subpackage  sThread_Module
  8.  * @author      JoungKyun.Kim <http://oops.org>
  9.  * @copyright   (c) 2015 OOPS.ORG
  10.  * @license     BSD License
  11.  * @version     $Id$
  12.  * @link        http://pear.oops.org/package/sThread
  13.  * @filesource
  14.  */
  15.  
  16. /**
  17.  * 포트 노킹을 위한 sThread SOCK 모듈
  18.  *
  19.  * 포트만 열었다가 종료한다.
  20.  * 
  21.  * @category    Network
  22.  * @package     sThread
  23.  * @subpackage  sThread_Module
  24.  * @author      JoungKyun.Kim <http://oops.org>
  25.  * @copyright   (c) 2015 OOPS.ORG
  26.  * @license     BSD License
  27.  * @link        http://pear.oops.org/package/sThread
  28.  */
  29. Class sThread_SOCK {
  30.     // {{{ Base properteis
  31.     /**#@+
  32.      * @access public
  33.      */
  34.     /**
  35.      * 이 변수의 값이 true로 셋팅이 되면, clear_session
  36.      * method를 만들어 줘야 한다. 반대로 false 상태에서는
  37.      * clear_session method가 존재하지 않아도 상관이 없다.
  38.      *
  39.      * @var bool 
  40.      */
  41.     static public $clearsession;
  42.     /**
  43.      * SOCK 모듈이 사용하는 protocol
  44.      * @var string 
  45.      */
  46.     static public $protocol;
  47.     /**
  48.      * SOCK 모듈이 사용하는 기본 포트 번호
  49.      * @var int 
  50.      */
  51.     static public $port;
  52.  
  53.     const SOCK_REQUEST  1;
  54.     const SOCK_CLOSE    2;
  55.     /**#@-*/
  56.     // }}}
  57.  
  58.     // {{{ (void) sThread_SOCK::__construct (void)
  59.     /**
  60.      * Class OOP 형식 초기화 메소드
  61.      * @access public
  62.      * @return sThread_SOCK 
  63.      */
  64.     function __construct ({
  65.         self::init ();
  66.         $this->clearsession = &self::$clearsession;
  67.         $this->port         = &self::$port;
  68.         $this->protocol     = &self::$protocol;
  69.     }
  70.     // }}}
  71.  
  72.     // {{{ (void) sThread_SOCK::init (void)
  73.     /**
  74.      * sock 모듈을 초기화 한다.
  75.      *
  76.      * @access public
  77.      * @return void 
  78.      */
  79.     function init ({
  80.         self::$clearsession false;
  81.         self::$port         12345;
  82.         self::$protocol     'tcp';
  83.     }
  84.     // }}}
  85.  
  86.     // {{{ (int) sThread_SOCK::check_buf_status ($status)
  87.     /**
  88.      * 현재 상태가 event read 상태인지 event write 상태인지
  89.      * 를 판단한다.
  90.      *
  91.      * @access public
  92.      * @return int 
  93.      * @param  int    현재 status
  94.      */
  95.     function check_buf_status ($status{
  96.         switch ($status{
  97.             case :
  98.             case self::SOCK_REQUEST :
  99.                 return Vari::EVENT_READY_SEND;
  100.                 break;
  101.             case self::SOCK_CLOSE :
  102.                 return Vari::EVENT_READY_CLOSE;
  103.                 break;
  104.             default :
  105.                 return Vari::EVENT_UNKNOWN;
  106.         }
  107.     }
  108.     // }}}
  109.  
  110.     // {{{ (string) sThread_SOCK::call_status ($status, $call = false)
  111.     /**
  112.      * 현재의 status(integer) 또는 현재 status의 handler 이름을
  113.      * 반환한다.
  114.      *
  115.      * @access public
  116.      * @return int|string
  117.      * @param  int        현재 status
  118.      * @param  boolean    true로 설정했을 경우 현재 status의 handler
  119.      *                     이름을 반환한다.
  120.      */
  121.     function call_status ($status$call false{
  122.         switch ($status{
  123.             case self::SOCK_REQUEST :
  124.                 $r 'SOCK_REQUEST';
  125.                 break;
  126.             default:
  127.                 $r Vari::EVENT_UNKNOWN;
  128.         }
  129.  
  130.         if $call !== false && $r !== Vari::EVENT_UNKNOWN )
  131.             $r strtolower ($r);
  132.  
  133.         return $r;
  134.     }
  135.     // }}}
  136.  
  137.     // {{{ (bool) sThread_SOCK::change_status (&$sess, $key)
  138.     /**
  139.      * 세션의 상태를 단계로 변경한다.
  140.      *
  141.      * @access public
  142.      * @param  boolean  변경한 상태가 마지막 단계일 경우 false를
  143.      *                   반환한다.
  144.      * @param  stdClass sThread 세션 변수 reference
  145.      * @param  int      세션 키
  146.      */
  147.     function change_status (&$sess$key{
  148.         ++$sess->status[$key];
  149.  
  150.         if $sess->status[$key=== self::SOCK_CLOSE )
  151.             return false;
  152.  
  153.         return true;
  154.     }
  155.     // }}}
  156.  
  157.     // {{{ (void) sThread_SOCK::set_last_status (&$sess, $key)
  158.     /**
  159.      * 세션의 상태를 마지막 단계로 변경한다.
  160.      *
  161.      * @access public
  162.      * @param  stdClass sThread 세션 변수 reference
  163.      * @param  int      세션 키
  164.      */
  165.     function set_last_status (&$sess$key{
  166.         $sess->status[$keyself::SOCK_CLOSE;
  167.     }
  168.     // }}}
  169.  
  170.     // {{{ (boolean) sThread_SOCK::clear_session ($key) {
  171.     /**
  172.      * session에서 사용한 변수(self::$sess)의 값을 정리한다.
  173.      *
  174.      * self::$clearsession == false 일 경우, clear_session method
  175.      * 는 존재하지 않아도 된다.
  176.      *
  177.      * @access public
  178.      * @return void 
  179.      * @param  int     세션 키
  180.      */
  181.     function clear_session ($key{
  182.         return;
  183.     }
  184.     // }}}
  185.  
  186.     /*
  187.      * Handler 정의
  188.      *
  189.      * Handler는 call_status 메소드에 정의된 값들 중
  190.      * Vari::EVENT_UNKNOWN를 제외한 모든 status의 constant string을
  191.      * 소문자로해서 만들어야 한다.
  192.      *
  193.      * Handler 이름은 sThread_MODULE::call_status 메소드를
  194.      * 통해서 구할 수 있다.
  195.      *
  196.      * handler는 다음의 구조를 가지며, 실제로 전송을 하거나 받는
  197.      * 것은 libevent가 한다.
  198.      *
  199.      * write handler:
  200.      *       handler_name (&$ses, $key)
  201.      *
  202.      *       write handler는 실제로 전송을 하지 않고 전송할
  203.      *       데이터를 생성해서 반환만 한다.
  204.      *
  205.      * read handler:
  206.      *       handler_name (&$sess, $key, $recv) 
  207.      *
  208.      *       read handler의 반환값은 다음과 같이 지정을 해야 한다.
  209.      *
  210.      *       true  => 모든 전송이 완료
  211.      *       false => 전송 받을 것이 남아 있음
  212.      *       null  => 전송 중 에러 발생
  213.      *
  214.      *       이 의미는 sThread가 read handler에서 결과값에 따라
  215.      *       true는 다음 단계로 전환을 하고, false는 현 status를
  216.      *       유지하며, null의 경우 connection을 종료를 한다.
  217.      */
  218.  
  219.     // {{{ (string) sThread_SOCK::sock_request (&$sess, $key)
  220.     /**
  221.      * 요청할 문자를 반환
  222.      *
  223.      * @access public
  224.      * @return void 
  225.      * @param  stdClass 세션 object
  226.      * @param  int      세션 키
  227.      */
  228.     function sock_request (&$sess$key{
  229.         return "\r\n";
  230.     }
  231.     // }}}
  232. }
  233.  
  234. ?>

Documentation generated on Tue, 14 May 2019 02:00:42 +0900 by phpDocumentor 1.4.4