first commit
This commit is contained in:
42
ZeedFramework/library/3rd/soar/1.0/basic/errcode.inc
Normal file
42
ZeedFramework/library/3rd/soar/1.0/basic/errcode.inc
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
define('SOAR_ERR_OK', '0000');
|
||||
|
||||
define('SOAR_ERR_COMM_FAIL', '9000'); # 与服务节点通信错误
|
||||
define('SOAR_ERR_CALL_TIMEOUT', '9001'); # 调用超时
|
||||
define('SOAR_ERR_RESOURCE', '9002'); # 内部资源错误
|
||||
define('SOAR_ERR_SVC_NOT_FOUND', '9003'); # 调用不存在服务
|
||||
define('SOAR_ERR_DB', '9004'); # 数据库错误
|
||||
define('SOAR_ERR_MSG', '9005'); # 消息格式错误
|
||||
define('SOAR_ERR_PARA', '9006'); # 参数错误
|
||||
define('SOAR_ERR_NODE_NOT_FOUND', '9007'); # 调用不存在节点
|
||||
define('SOAR_ERR_SVC_INVALID', '9008'); # 无效服务
|
||||
define('SOAR_ERR_SVC_DUPLICATE', '9009'); # 服务重复
|
||||
define('SOAR_ERR_CMD_INVALID', '9010'); # 操作码不存在
|
||||
define('SOAR_ERR_SVR_NOT_FOUND', '9011'); # 输入消息越界
|
||||
define('SOAR_ERR_FILE', '9012'); # 操作文件失败
|
||||
|
||||
define('SOAR_ERR_SESSION_EXIST', '8200'); # 会话已存在
|
||||
define('SOAR_ERR_SESSION_NOT_FOUND', '8201'); # 会话未找到
|
||||
define('SOAR_ERR_SESSION_CREATE_FAIL', '8202'); # 会话创建失败
|
||||
define('SOAR_ERR_SESSION_SID_INVALID', '8203'); # 会话标号无效
|
||||
define('SOAR_ERR_SESSION_KEY_NOT_FOUND','8204'); # 键未找到
|
||||
define('SOAR_ERR_SESSION_PUTKEY_FAIL', '8205'); # 设置键出错
|
||||
define('SOAR_ERR_SESSION_VAL_NOT_INT', '8206'); # 值非整型
|
||||
define('SOAR_ERR_SESSION_MODKEY_FAIL', '8207'); # 修改键出错
|
||||
define('SOAR_ERR_SESSION_SID_DISCORD', '8208'); # 会话内容不一致
|
||||
define('SOAR_ERR_SESSION_KEY_FULL', '8209'); # 键已满
|
||||
|
||||
define('SOAR_ERR_SECURE_NOKEY', '8300'); # 密钥不存在
|
||||
define('SOAR_ERR_SECURE_ENCRYPT', '8301'); # 加密出错
|
||||
define('SOAR_ERR_SECURE_DECRYPT', '8302'); # 解密出错
|
||||
define('SOAR_ERR_SECURE_SIGN', '8303'); # 签名出错
|
||||
define('SOAR_ERR_SECURE_VERIFY', '8304'); # 校验出错
|
||||
define('SOAR_ERR_SECURE_PASSWD_DISCORD','8305'); # 口令不一致
|
||||
|
||||
define('SOAR_ERR_MAILFWD_BLACK', '8400'); # 黑名单
|
||||
|
||||
define('SOAR_ERR_CONFIRM_SEQ_INVALID', '8500'); # 序列号无效
|
||||
define('SOAR_ERR_CONFIRM_SEQ_NOT_FOUND','8501'); # 序列号未找到
|
||||
define('SOAR_ERR_CONFIRM_ID_NOT_MATCH', '8502'); # ID未匹配
|
||||
define('SOAR_ERR_CONFIRM_CD_NOT_MATCH', '8503'); # 验证码未匹配
|
||||
?>
|
||||
130
ZeedFramework/library/3rd/soar/1.0/basic/errlog.inc
Normal file
130
ZeedFramework/library/3rd/soar/1.0/basic/errlog.inc
Normal file
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
class errlog
|
||||
{
|
||||
private static $filename;
|
||||
private static $addr;
|
||||
private static $dir;
|
||||
|
||||
public function init($filename, $location)
|
||||
{/*{{{*/
|
||||
if(empty($filename))
|
||||
return false;
|
||||
self::$filename=basename($filename);
|
||||
|
||||
if(empty($location))
|
||||
$location=".";
|
||||
if(substr($location, 0, 2) == "//")
|
||||
{
|
||||
$addr=explode(":", str_replace("//", "", $location));
|
||||
self::$addr['ip']=gethostbyname($addr[0]);
|
||||
self::$addr['port']=intval($addr[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(substr($location, 0, 1) == "/")
|
||||
$dir=$location;
|
||||
else
|
||||
$dir=getcwd()."/".$location;
|
||||
if(file_exists($dir))
|
||||
{
|
||||
if(!is_dir($dir) ||
|
||||
!is_readable($dir) ||
|
||||
!is_writeable($dir) ||
|
||||
!is_executable($dir))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(mkdir($dir) == false)
|
||||
return false;
|
||||
}
|
||||
self::$dir=$dir;
|
||||
}
|
||||
|
||||
return true;
|
||||
}/*}}}*/
|
||||
|
||||
public function add()
|
||||
{/*{{{*/
|
||||
if(isset(self::$addr['ip']) && isset(self::$addr['port']))
|
||||
{
|
||||
if(func_num_args() > 0)
|
||||
{
|
||||
$sock=socket_create(AF_INET, SOCK_DGRAM, 0);
|
||||
if(socket_connect($sock,
|
||||
self::$addr['ip'],
|
||||
self::$addr['port']) == false)
|
||||
{
|
||||
socket_close($sock);
|
||||
return false;
|
||||
}
|
||||
$args=func_get_args();
|
||||
$fmt=array_shift($args);
|
||||
$msg=vsprintf($fmt, $args);
|
||||
$len=para::put_item($sendbuf, "LOG", self::$filename,
|
||||
$msg);
|
||||
$num=socket_select($read=null, $write=array($sock),
|
||||
$exp=null, 5, 0);
|
||||
if($num > 0)
|
||||
socket_send($sock, $sendbuf, $len, 0);
|
||||
socket_close($sock);
|
||||
}
|
||||
}
|
||||
else if(!empty(self::$dir))
|
||||
{
|
||||
if(func_num_args() > 0)
|
||||
{
|
||||
$file=self::$dir."/".self::$filename.".log";
|
||||
$f=fopen($file, "a");
|
||||
if($f === false) return false;
|
||||
$args=func_get_args();
|
||||
$fmt=array_shift($args);
|
||||
$msg=strftime("%Y-%m-%d %H:%M:%S")." -- ".
|
||||
vsprintf($fmt, $args)."\n";
|
||||
fputs($f, $msg);
|
||||
fclose($f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}/*}}}*/
|
||||
|
||||
public function write()
|
||||
{/*{{{*/
|
||||
$location=get_cfg_var("errlog_location");
|
||||
if($location === false || empty($location))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$addr=explode(":", str_replace("//", "", $location));
|
||||
$ip=gethostbyname($addr[0]);
|
||||
$port=intval($addr[1]);
|
||||
$sock=socket_create(AF_INET, SOCK_DGRAM, 0);
|
||||
if(socket_connect($sock, $ip, $port) == false)
|
||||
{
|
||||
socket_close($sock);
|
||||
return false;
|
||||
}
|
||||
|
||||
$args=func_get_args();
|
||||
$argsnum=func_num_args();
|
||||
if($argsnum > 0)
|
||||
{
|
||||
$fmt=array_shift($args);
|
||||
$msg=vsprintf($fmt, $args);
|
||||
$len=para::put_item($sendbuf, "LOG", "httpd", $msg);
|
||||
$num=socket_select($read=null, $write=array($sock),
|
||||
$exp=null, 5, 0);
|
||||
if($num > 0)
|
||||
socket_send($sock, $sendbuf, $len, 0);
|
||||
}
|
||||
socket_close($sock);
|
||||
return true;
|
||||
}/*}}}*/
|
||||
}
|
||||
?>
|
||||
9
ZeedFramework/library/3rd/soar/1.0/basic/misc.inc
Normal file
9
ZeedFramework/library/3rd/soar/1.0/basic/misc.inc
Normal file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
class misc
|
||||
{
|
||||
const NAME_SIZE=30;
|
||||
const LONG_NAME_SIZE=200;
|
||||
const BIT_OF_CHAR=8;
|
||||
const CRLF="\r\n";
|
||||
}
|
||||
?>
|
||||
58
ZeedFramework/library/3rd/soar/1.0/basic/para.inc
Normal file
58
ZeedFramework/library/3rd/soar/1.0/basic/para.inc
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
class para
|
||||
{
|
||||
const ITEM_DLM="\xff";
|
||||
const ITEM_SIZE_CHAR=5;
|
||||
|
||||
public function put_item(&$msg_in)
|
||||
{/*{{{*/
|
||||
$fmt=sprintf("%%0%dX", self::ITEM_SIZE_CHAR);
|
||||
$item_max_size=(1<<self::ITEM_SIZE_CHAR*misc::BIT_OF_CHAR/2)-1;
|
||||
$total_size=0;
|
||||
$argnum=func_num_args();
|
||||
$arglist=func_get_args();
|
||||
for($i=1; $i<$argnum; ++$i)
|
||||
{
|
||||
$arg=$arglist[$i];
|
||||
if(is_int($arg))
|
||||
$size=strlen(strval($arg));
|
||||
else
|
||||
$size=strlen($arg);
|
||||
if($size > $item_max_size)
|
||||
return -1;
|
||||
$total_size+=self::ITEM_SIZE_CHAR+1+$size+1;
|
||||
}
|
||||
for($i=1; $i<$argnum; ++$i)
|
||||
{
|
||||
$arg=$arglist[$i];
|
||||
if(is_int($arg))
|
||||
$msg_in.=sprintf($fmt, strlen(strval($arg)));
|
||||
else
|
||||
$msg_in.=sprintf($fmt, strlen($arg));
|
||||
$msg_in.=self::ITEM_DLM.$arg.self::ITEM_DLM;
|
||||
}
|
||||
|
||||
return $total_size;
|
||||
}/*}}}*/
|
||||
|
||||
public function get_item($msg_in, &$curr)
|
||||
{/*{{{*/
|
||||
$leftsize=strlen($msg_in)-$curr;
|
||||
if($leftsize < self::ITEM_SIZE_CHAR+1+1)
|
||||
return null;
|
||||
$itempos=$curr+self::ITEM_SIZE_CHAR+1;
|
||||
if(strcmp(substr($msg_in, $itempos-1, 1), self::ITEM_DLM))
|
||||
return null;
|
||||
$itemsize=intval(substr($msg_in, $curr,
|
||||
self::ITEM_SIZE_CHAR), 16);
|
||||
if($itemsize < 0 ||
|
||||
$itemsize > $leftsize-self::ITEM_SIZE_CHAR-1-1 ||
|
||||
strcmp(substr($msg_in, $itempos+$itemsize, 1),
|
||||
self::ITEM_DLM))
|
||||
return null;
|
||||
$item=substr($msg_in, $itempos, $itemsize);
|
||||
$curr+=self::ITEM_SIZE_CHAR+1+$itemsize+1;
|
||||
return $item;
|
||||
}/*}}}*/
|
||||
}
|
||||
?>
|
||||
226
ZeedFramework/library/3rd/soar/1.0/basic/sock.inc
Normal file
226
ZeedFramework/library/3rd/soar/1.0/basic/sock.inc
Normal file
@@ -0,0 +1,226 @@
|
||||
<?php
|
||||
class sock
|
||||
{
|
||||
const MSG_SIZE_SIZE=6;
|
||||
|
||||
private static $RECV=0;
|
||||
private static $SEND=1;
|
||||
private static $ACCEPT=2;
|
||||
|
||||
private function wrap(&$msg)
|
||||
{/*{{{*/
|
||||
$fmt=sprintf("%%0%dX", self::MSG_SIZE_SIZE);
|
||||
return sprintf($fmt, strlen($msg)).$msg;
|
||||
}/*}}}*/
|
||||
|
||||
private function wait($socktype, $sock, &$timeout)
|
||||
{/*{{{*/
|
||||
if($timeout < 0)
|
||||
return true;
|
||||
switch($socktype)
|
||||
{
|
||||
case self::$RECV:
|
||||
case self::$ACCEPT:
|
||||
$read=array($sock);
|
||||
$write=null;
|
||||
break;
|
||||
case self::$SEND:
|
||||
$read=null;
|
||||
$write=array($sock);
|
||||
break;
|
||||
}
|
||||
$now=gettimeofday();
|
||||
$begin=$now['sec'];
|
||||
$to=$timeout;
|
||||
$num=socket_select($read, $write, $exp=null, $to, 0);
|
||||
if($num === false)
|
||||
return false;
|
||||
if($num == 0)
|
||||
{
|
||||
$timeout=0;
|
||||
return false;
|
||||
}
|
||||
$now=gettimeofday();
|
||||
$used=$now['sec']-$begin;
|
||||
$timeout=$to > $used ? $to-$used : 0;
|
||||
return true;
|
||||
}/*}}}*/
|
||||
|
||||
public function listen($port)
|
||||
{/*{{{*/
|
||||
$sock=socket_create(AF_INET, SOCK_STREAM, 0);
|
||||
|
||||
if(@socket_bind($sock, "0.0.0.0", $port) == false)
|
||||
{
|
||||
$error=socket_last_error();
|
||||
errlog::add("%s|%s: socket_bind fail, err:%d %s",
|
||||
basename(__FILE__), __METHOD__,
|
||||
$error, socket_strerror($error));
|
||||
return false;
|
||||
}
|
||||
if(@socket_listen($sock) == false)
|
||||
{
|
||||
$error=socket_last_error();
|
||||
errlog::add("%s|%s: socket_listen fail, err:%d %s",
|
||||
basename(__FILE__), __METHOD__,
|
||||
$error, socket_strerror($error));
|
||||
return false;
|
||||
}
|
||||
|
||||
return $sock;
|
||||
}/*}}}*/
|
||||
|
||||
public function accept($sock, &$timeout)
|
||||
{/*{{{*/
|
||||
if(self::wait(self::$ACCEPT, $sock, $timeout) == false)
|
||||
{
|
||||
// errlog::add("%s|%s: accept timeout",
|
||||
// basename(__FILE__), __METHOD__);
|
||||
return false;
|
||||
}
|
||||
$new_sock=socket_accept($sock);
|
||||
if($new_sock === false)
|
||||
{
|
||||
errlog::add("%s|%s: socket_accept fail, err:%d",
|
||||
basename(__FILE__), __METHOD__, socket_last_error());
|
||||
return false;
|
||||
}
|
||||
return $new_sock;
|
||||
}/*}}}*/
|
||||
|
||||
public function connect($ip, $port, $timeout, &$sock)
|
||||
{/*{{{*/
|
||||
$sock=socket_create(AF_INET, SOCK_STREAM, 0);
|
||||
|
||||
socket_set_nonblock($sock);
|
||||
if(@socket_connect($sock, $ip, $port) == true)
|
||||
{
|
||||
socket_set_block($sock);
|
||||
return true;
|
||||
}
|
||||
$error=socket_last_error();
|
||||
if($error != SOCKET_EINPROGRESS && $error != SOCKET_EWOULDBLOCK)
|
||||
{
|
||||
errlog::add("%s|%s: connect fail:".$error,
|
||||
basename(__FILE__), __METHOD__);
|
||||
socket_close($sock); $sock=null;
|
||||
return false;
|
||||
}
|
||||
$read=$write=array($sock);
|
||||
$num=socket_select($read, $write, $exp=null, $timeout, 0);
|
||||
if($num === false || $num == 0)
|
||||
{
|
||||
errlog::add("%s|%s): connect select fail:".
|
||||
socket_last_error(),
|
||||
basename(__FILE__), __METHOD__);
|
||||
socket_close($sock); $sock=null;
|
||||
return false;
|
||||
}
|
||||
if(!in_array($sock, $read) && !in_array($sock, $write))
|
||||
{
|
||||
errlog::add("%s|%s: connect select invalid",
|
||||
basename(__FILE__), __METHOD__);
|
||||
socket_close($sock); $sock=null;
|
||||
return false;
|
||||
}
|
||||
if(socket_getpeername($sock, $ip, $port) == false)
|
||||
{
|
||||
errlog::add("%s|%s: connect getpeername fail:".
|
||||
socket_last_error(),
|
||||
basename(__FILE__), __METHOD__);
|
||||
socket_close($sock); $sock=null;
|
||||
return false;
|
||||
}
|
||||
socket_set_block($sock);
|
||||
|
||||
return true;
|
||||
}/*}}}*/
|
||||
|
||||
public function send($sock, $msg, $timeout)
|
||||
{/*{{{*/
|
||||
if(self::wait(self::$SEND, $sock, $timeout) == false)
|
||||
{
|
||||
errlog::add("%s|%s: send timeout",
|
||||
basename(__FILE__), __METHOD__);
|
||||
return false;
|
||||
}
|
||||
$buf=self::wrap($msg);
|
||||
$left_size=strlen($buf);
|
||||
$offset=0;
|
||||
while($left_size > 0)
|
||||
{
|
||||
$sendbuf=substr($buf, $offset, $left_size);
|
||||
$res=socket_send($sock, $sendbuf, strlen($sendbuf), 0);
|
||||
if($res === false || $res == 0)
|
||||
{
|
||||
errlog::add("%s|%s: send fail, error:%d %s",
|
||||
basename(__FILE__), __METHOD__,
|
||||
socket_last_error(),
|
||||
socket_strerror(socket_last_error()));
|
||||
return false;
|
||||
}
|
||||
$left_size-=$res;
|
||||
$offset+=$res;
|
||||
if($left_size > 0)
|
||||
{
|
||||
if(self::wait(self::$SEND, $sock, $timeout) == false)
|
||||
{
|
||||
errlog::add("%s|%s: send timeout",
|
||||
basename(__FILE__), __METHOD__);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}/*}}}*/
|
||||
|
||||
public function recv($sock, &$msg_out, $timeout)
|
||||
{/*{{{*/
|
||||
if(self::wait(self::$RECV, $sock, $timeout) == false)
|
||||
{
|
||||
errlog::add("%s|%s: recv timeout",
|
||||
basename(__FILE__), __METHOD__);
|
||||
return false;
|
||||
}
|
||||
$res=socket_recv($sock, $buf, self::MSG_SIZE_SIZE, 0);
|
||||
if($res === false || $res == 0)
|
||||
{
|
||||
errlog::add("%s|%s: recv fail, error:%d %s",
|
||||
basename(__FILE__), __METHOD__,
|
||||
socket_last_error(),
|
||||
socket_strerror(socket_last_error()));
|
||||
return false;
|
||||
}
|
||||
$msg_out_size=intval($buf, 16);
|
||||
|
||||
$left_size=$msg_out_size;
|
||||
while($left_size > 0)
|
||||
{
|
||||
$res=socket_recv($sock, $buf, $left_size, 0);
|
||||
if($res === false || $res == 0)
|
||||
{
|
||||
errlog::add("%s|%s: recv fail, error:%d %s",
|
||||
basename(__FILE__), __METHOD__,
|
||||
socket_last_error(),
|
||||
socket_strerror(socket_last_error()));
|
||||
$msg_out=null;
|
||||
return false;
|
||||
}
|
||||
$left_size-=$res;
|
||||
$msg_out.=$buf;
|
||||
if($left_size > 0)
|
||||
{
|
||||
if(self::wait(self::$RECV, $sock, $timeout) == false)
|
||||
{
|
||||
errlog::add("%s|%s: recv timeout",
|
||||
basename(__FILE__), __METHOD__);
|
||||
$msg_out=null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}/*}}}*/
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user