first commit

This commit is contained in:
renjianbo
2026-01-07 11:40:41 +08:00
parent 2b5d784e31
commit 8f2ed2c108
6466 changed files with 1431506 additions and 0 deletions

View 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'); # 验证码未匹配
?>

View 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;
}/*}}}*/
}
?>

View 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";
}
?>

View 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;
}/*}}}*/
}
?>

View 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;
}/*}}}*/
}
?>