This commit is contained in:
biosvos
2026-08-07 17:38:18 +09:00
commit 873193a243
9613 changed files with 2755992 additions and 0 deletions
+211
View File
@@ -0,0 +1,211 @@
#ifndef _SHCSDK_H
#define _SHCSDK_H
#ifdef WIN32
# if defined(SHCSDK_EXPORTS)
# define WIN32DLL __declspec(dllexport)
# else
# define WIN32DLL __declspec(dllimport)
# endif
#else
#define WIN32DLL
typedef long long INT64;
//typedef int bool;
#endif
typedef void *HSHSDK;
typedef void *HSHFILELIST;
typedef struct {
char *path;
INT64 size;
char *lastModified;
char *lastModified_gmt;
unsigned int attr;
char *source;
} SHFILE_STRUCT, *PSHFILE_STRUCT;
// For SHFILE.attr
enum SHCSDK_FILEATTR {
SHFILEATTR_FOLDER = 0x00000001,
};
// For write policy
enum SHCSDK_WRITEPOLICY {
SHWRITEPOLICY_NONE = 0,
SHWRITEPOLICY_OVERWRITE,
SHWRITEPOLICY_APPEND,
};
// For error number
enum SHCSDK_ERRNO {
SHCERRNO_UNDEFINED = 30000,
SHCERRNO_INVALIDHDL = 30001,
SHCERRNO_INVALIDFLHDL = 30002,
SHCERRNO_SERVICE = 30003,
SHCERRNO_AUTHORIZATION = 30004,
SHCERRNO_ISBUSY = 30005,
SHCERRNO_EXISTSFILE = 30006,
SHCERRNO_NOEXISTSFILE = 30007,
SHCERRNO_NOAVAILQUOTA = 30008,
SHCERRNO_ALREADYEXIST = 30009,
SHCERRNO_MAX = SHCERRNO_ALREADYEXIST + 1,
};
// Callback function format
typedef int (*sh_callback)(
void *param, // Callback function's param
INT64 progress // Progress
);
typedef int (*down_stream)(
void* userval,
const char* buf,
size_t len
);
#ifdef __cplusplus
extern "C" {
#endif
// Initialization
WIN32DLL HSHSDK sh_init(
const char *url, // Url
const char *authString, // Authentication string
sh_callback proc, // Callback function
void *param); // Callback function's Param
// Termination
WIN32DLL void sh_free(
HSHSDK hshsdk); // SDK HANDLE
WIN32DLL int sh_get_error_number(
HSHSDK hshsdk); // SDK handle
WIN32DLL const char* sh_get_error_message(
HSHSDK hshsdk); // SDK handle
WIN32DLL HSHFILELIST sh_get_filelist(
HSHSDK hshsdk, // SDK handle
const char *path, // Path
unsigned int depth); // 0 : itself
// 1 : 1 depth children
// 2 : all children
WIN32DLL long sh_get_filelist_count(
HSHSDK hshsdk, // SDK handle
HSHFILELIST hshfl); // File list handle
WIN32DLL PSHFILE_STRUCT sh_get_file(
HSHSDK hshsdk, // SDK handle
HSHFILELIST hshfl, // File list handle
long index); // File index
WIN32DLL void sh_free_filelist(
HSHSDK hshsdk, // SDK handle
HSHFILELIST hshfl); // File list handle
WIN32DLL int sh_make_directory(
HSHSDK hshsdk, // SDK handle
const char *drectory); // Directory Path
WIN32DLL int sh_copy(
HSHSDK hshsdk, // SDK handle
const char *srcPath, // Source file | directory
const char *dstPath, // Destination file | directory
int overwrite); // 0 : Don't overwrite
// 1 : Overwrite
WIN32DLL int sh_move(
HSHSDK hshsdk, // SDK handle
const char *srcPath, // Source file | directory
const char *dstPath, // Destination file | directory
int overwrite); // 0 : Don't overwrite
// 1 : Overwrite
WIN32DLL int sh_delete(
HSHSDK hshsdk, // SDK handle
const char *path); // File | directory
WIN32DLL int sh_upload(
HSHSDK hshsdk, // SDK handle
const char *srcPath, // Source file
const char *dstPath, // Destination file
int writePolicy, // Write policy flag
INT64 availQuota); // Avail quota
WIN32DLL int sh_download(
HSHSDK hshsdk, // SDK handle
const char *srcPath, // Source file
const char *dstPath, // Destination file
int writePolicy, // Write policy flag
INT64 availQuota); // Avail quota
WIN32DLL int sh_upload_buffer(
HSHSDK hshsdk, // SDK handle
down_stream proc,
void* userval, // User-supplied value for callback
const char *dstPath, // Destination file
INT64 availQuota); // Avail quota
WIN32DLL int sh_download_buffer(
HSHSDK hshsdk, // SDK handle
const char *srcPath, // Source file
down_stream proc,
void* userval // User-supplied value for callback
); // Avail quota
WIN32DLL int sh_encrypt(
const char *text, // String (< 1000 bytes)
char *encrypted); // Encrypted String (1000 bytes)
WIN32DLL int sh_set_limit(
HSHSDK hshsdk, // SDK handle
int nLimit); // Limit value
WIN32DLL int sh_get_limit(
HSHSDK hshsdk // SDK handle
); // Limit value
WIN32DLL INT64 sh_get_filepos(
HSHSDK hshsdk // SDK handle
);
WIN32DLL bool sh_file_exist(
HSHSDK hshsdk, // SDK Handle
const char *path); // file/folder Path
WIN32DLL void sh_set_C_timeout(
int second // Time out (Second)
);
WIN32DLL int sh_set_sessionID(
HSHSDK hshsdk, // SDK Handle
const char *pszID);
WIN32DLL const char* sh_get_sessionID(
HSHSDK hshsdk // SDK Handle
);
WIN32DLL int sh_set_auth_expire(
HSHSDK hshsdk, // SDK Handle
int ntime // Expire time
);
WIN32DLL int sh_get_auth_expire(
HSHSDK hshsdk // SDK Handle
);
#ifdef __cplusplus
}
#endif
#endif
+111
View File
@@ -0,0 +1,111 @@
#ifndef _SHSDK_H
#define _SHSDK_H
#include <time.h>
#ifdef WIN32
typedef __int64 INT64;
typedef __int64* PINT64;
typedef int BOOL;
#else
typedef long long INT64;
typedef long long* PINT64;
#endif
#ifdef __cplusplus
extern "C" {
#endif
// SSDK 커스텀 에러번호
enum SHSSDK_ERRNO {
SHERRNO_UNDEFINED = 30000,
SHERRNO_AUTHORIZATION = 31000,
SHERRNO_INTERNAL = 31001,
SHERRNO_NOSERVICE = 32000,
SHERRNO_NOCACHEFILE = 33000,
SHERRNO_INVALIDCACHEFILE = 33001,
};
enum SASSDK_ERRNO {
ERR_RCTRAN_NOT_EXSIT_URI = 0x3a27, // 존재하지 않는 URI
ERR_RCTRAN_USERID_NOT_FOUND = 0x3a24, // 존재하지 않는 ID
ERR_RCTRAN_PASSWORD_NOT_MATCH = 0x3a25, // 패스워드 에러
ERR_RCTRAN_NOT_DEFINED = 0x00, // 알수 없는 에러
};
typedef struct tranlog_data{
char *sessionid; // 세션 ID char*
char *filename; // 파일명 char*
unsigned long long length; // 사이즈 long long
int ndirection; // 업다운여부
time_t startdate; // 시작시간 time_t
time_t enddate; // 종료시간 time_t
struct tranlog_data *pnext; // 다음 로그데이타 포인터
}TRANSFER_LOG_DATA,*LPTRANSFER_LOG_DATA;
const char *sh_get_service_host(
const char *userId, // 사용자 ID
const char *password, // 사용자 비밀번호
const char *serviceId // 서비스 ID
);
const int sh_get_service_info(
const char *userId, // 사용자 ID
const char *password, // 사용자 비밀번호
const char *serviceId, // 서비스 ID
PINT64 totalSpace, // 전체 용량
PINT64 freeSpace // 남은 용량
);
const char *sh_get_auth_string(
const char *userId, // 사용자 ID
const char *password, // 사용자 비밀번호
const char *serviceId, // 서비스 ID
const char *authKey, // 인증 키
const char *authFile, // 인증서 파일 경로
time_t expire // (BASE 1970-01-01 00:00:00)
);
const char *sh_decrypt(
const char *encrypted, // 암호화된 문자열
int acceptGap // 허용 시간 차
);
void sh_set_timeout(
int second // ()
);
void sh_set_cache_file(
const char *file_path // 캐쉬파일 저장 경로
);
const char* sh_get_uri_by_filename(
const char* szHost, // 서버 주소
const char *userId, // 사용자 ID
const char *password, // 사용자 비밀 번호
const char* uri, // 패스 URI
int ncount, // 다운로드 횟수
int nexpire); // 다운로드 만료 시한
LPTRANSFER_LOG_DATA sh_get_transfer_log_list(
const char *userId, // 사용자 ID
const char *password, // 사용자 비밀번호
const char *serviceId, // 서비스 ID
const char* szSessionID, // 세션 ID
time_t sTime, // 시작시간
time_t eTime, // 종료시간
int nDelete, // 삭제 여부
int nDirection // Up/Down 여부
);
void sh_free_transfer_log(
LPTRANSFER_LOG_DATA ploglist // 로그리스트 포인터
);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,12 @@
#ifndef CFGCONFIG_H
#define CFGCONFIG_H
#define MAX_BUF 1024
extern char cfgname[60];
#endif
+12
View File
@@ -0,0 +1,12 @@
#ifndef __CHILD_H__
#define __CHILD_H__
typedef struct {
pid_t child_pid; /* process ID */
int child_pipefd; /* parent's stream pipe to/from child */
int child_status; /* 0 = ready */
long child_count; /* # connections handled */
} Child;
Child *cptr; /* array of Child structures; calloc'ed */
#endif
+34
View File
@@ -0,0 +1,34 @@
/****************************************************************************
sh_statusd : Application status monitoring daemon for OpenDisk service
CopyRight(C) 2005 SolutionBox Inc. All Rights reserved.
Author : Sean Kim (sean@0x31.com)
$Id: global.h,v 1.4 2006/10/24 08:35:32 elenoa Exp $
Redistribution and use in source and binary forms, with or with out
modification, are not permitted in outside of SolutionBox Inc.
****************************************************************************/
#ifndef __GLOBAL_H__
#define __GLOBAL_H__
#define HOST_NAME "192.168.0.136"
#define CFGFILE "/user/service/etc/sh_statusd.conf"
#define RCACCT_CONF_PATH "/user/service/etc/rcacct.conf"
#define DEFAULT_LOGFILE_PATH "/user/service/logs/new_sh_statusd/"
#define DEFAULT_RC_CHECK_BIN "/user/service/bin/rccheck"
#define PID_FILE_PATH "/user/service/pid/new_sh_statusd.pid"
#define MAXREADLINE 1024
#define MaxSizeOfSndBuffer 1024*8
#define GetServStatusCmd "GET_SERVSTATUS"
#define RequestServUpdateCmd "REQUEST_SERV_UPDATE"
#define INSERT 1
#define UPDATE 2
#define DELETE 3
#endif
@@ -0,0 +1,3 @@
#define MAXLINE 4096
@@ -0,0 +1,5 @@
extern int socketRecv(int SocketFd, char * stData, int nLength, int nTime);
extern int socketSend(int SocketFd, char * stData, int nLength);
extern int atoPort(char *cpService, char *cpProto);
struct in_addr *atoAddr(char *cpAddress);
extern int makeConnection(char *cpService, int nType, char *cpNetAddress, char *cpResult);
@@ -0,0 +1,27 @@
#ifndef __PRE_THREAD_MODEL_H__
#define __PRE_THREAD_MODEL_H__
#include "protocol.h"
typedef struct {
pthread_t thread_tid; /* thread ID */
int deadORalive; /* is thread dead */
long thread_count; /* # connections handled */
} Thread;
Thread *vrcd_tptr, *report_tptr; /* array of Thread structures; calloc'ed */
servinfo_t *g_servinfo;
socklen_t vrcd_addrlen, report_addrlen;
pthread_mutex_t vrcd_lock, vrcd_lock2, report_s_lock, report_u_lock;
rcacct_t *g_rcacct;
struct sembuf waitop;
struct sembuf postop;
int sem_id;
int check_semid;
int report_semid;
int vrcd_semid;
int vrcdfd, vrcd_threads;
int update_reportfd, send_reportfd, report_threads;
long running_vrcd_thread_count;
#endif
+247
View File
@@ -0,0 +1,247 @@
#ifndef __PROTOCOL_H__
#define __PROTOCOL_H__
#include <stdint.h>
#define RESERVED 5
#define MaxSizeOfCode 3
#define MaxSizeOfTID 52
#define MaxSizeOfIssuer 128
#define MaxSizeOfSID 128
#define MaxSizeOfRCID 32
#define MaxSizeOfRCURL 128
#define MaxSizeOfServiceName 128
#define MaxSizeOfURIPath 1024
#define NumOfServerType 11
#define MaxSizeOfServerName 32
#define MaxSizeOfServerAddr 16
#define MaxSizeOfServerPort 8
#define MaxSizeOfServerType 24
#define MaxSizeOfRCAcctName 32
#define MaxSizeOfRCAcctUser 32
#define MaxSizeOfRCAcctPassword 32
#define MaxSizeOfRCAcctCert 128
#define MaxSizeOfRCAcctAuthkey 128
#define MAX_SRV_NAME 128
#define MAX_DOMAIN_NAME 256
#define MAX_MNG_RCID 128
#define MAX_MNG_SERVNAME 128
#define CONFIG_SERV "SERV"
#define CONFIG_RCACCT "RCACCT"
#define MAX_ALLOWED_DEAD_COUNT 3
#define ALLOWED_MAX_ERROR_COUNT 5
#define SENDSMSTERM 5
#define MAXSENDSMSCOUNT 5
#define SERV_ALIVE 1
#define SERV_DEAD 2
#define NO_MONITOR 3
#define END_OF_SHM "end of shm!"
//#define MYQUERY "SELECT NAME, IP, PORT, TYPE, MONITOR_YN FROM t_rms_rc_server_index WHERE DELETED_YN = 'N' ORDER BY cast(ETC2 as signed) ASC, ETC1 ASC ,NAME ASC"
#define MYQUERY "SELECT NAME, IP, PORT, TYPE, MONITOR_YN from (SELECT NAME, IP, PORT, TYPE, MONITOR_YN FROM t_rms_rc_server_index WHERE DELETED_YN = 'N' AND rcid != 'TIME' ORDER BY cast(ETC2 as signed) ASC, ETC1 ASC ,NAME ASC) a UNION ALL SELECT NAME, IP, PORT, TYPE, MONITOR_YN FROM t_rms_rc_server_index WHERE DELETED_YN = 'N' AND rcid = 'TIME'"
enum eServType
{
SERV_WWW = 0,
SERV_FHS = 1,
SERV_RC = 2,
SERV_DB = 3
};
extern const char a_ServType[NumOfServerType][MaxSizeOfServerType];
#define MAX_IP_STRING 17
struct common_message_header {
char szTransactionID[MaxSizeOfTID];
//unsigned long ulMode;
uint32_t ulMode;
char szIssuer[MaxSizeOfIssuer];
char szServiceID[MaxSizeOfSID];
//unsigned long ulResult;
uint32_t ulResult;
//unsigned long ulBodyLength;
uint32_t ulBodyLength;
};
#define MaxSizeOfCMH (sizeof(struct common_message_header))
struct local_message_header {
char szTransactionID[MaxSizeOfTID];
//unsigned long ulMode;
uint32_t ulMode;
char szIssuer[MaxSizeOfIssuer];
char szServiceID[MaxSizeOfSID];
char szRCID[MaxSizeOfRCID];
//unsigned long ulResult;
uint32_t ulResult;
//unsigned long ulBodyLength;
uint32_t ulBodyLength;
};
#define MaxSizeOfLMH (sizeof(struct local_message_header))
#define CODE_ESC 0x1b
#define DOMAIN_SIZE 512
#define HOSTNAME_SIZE 64
struct disk_usage {
/* Original Message */
char domain[DOMAIN_SIZE];
unsigned long long total;
unsigned long long free;
/* Additional : 2006.11.08 by Elenoa */
/* if manually upload enable/disable */
int manual_disable;
int upload_level;
/* disk stat: backlog and use percentage */
int disk_backlog;
int disk_percent;
/* connection stat: established connection and others all */
int connection_established;
int connection_total;
/* traffic stat: in and out traffic info (packet, byte) */
//unsigned long traffic_ip;
//unsigned long traffic_ib;
//unsigned long traffic_op;
//unsigned long traffic_ob;
uint32_t traffic_ip;
uint32_t traffic_ib;
uint32_t traffic_op;
uint32_t traffic_ob;
char hostname[HOSTNAME_SIZE];
};
struct svr_status {
time_t stamp;
struct disk_usage du;
};
#define AuthPrime 137897
typedef struct _s_time_sync_t {
long sync_info;
} time_sync_t;
typedef struct _ServInfo_e
{;
char m_pszServName[MAX_SRV_NAME];
char m_szIpString[MAX_IP_STRING];
short m_sPort;
time_t m_StatChgTime;
unsigned int m_Status;
unsigned int m_ServType;
unsigned int m_DeadCount;
char m_pszDomainName[MAX_DOMAIN_NAME];
char m_monitorYN[2];
struct svr_status ss;
struct _ServInfo_e *next;
} servinfo_t;
typedef struct _RCAcct_e
{
char * m_pszServiceName;
char * m_pszUserName;
char * m_pszPassword;
char * m_pszAuthkey;
char * m_pszCertLocation;
struct _RCAcct_e *next;
} rcacct_t;
/* Global Shared Memory Address */
typedef struct _g_shm_addr
{
unsigned int is_dirty;
unsigned int serv_num;
unsigned int thread_number[1024];
} g_shm_t;
typedef struct _rcmng_common_header
{
char rcmng_rcid[MAX_MNG_RCID];
char rcmng_servName[MAX_SRV_NAME];
unsigned int rcmng_serviceType;
//unsigned long bodylength;
uint32_t bodylength;
} rcmng_cheader_t;
typedef struct _CellInfo
{
char m_strCellPhone[24];
} cellinfo_t;
/* Definition of Message Mode */
#define MSG_MODE_VRCD_STATUSD_RTS_STATUS 0x0a01
/* Open Service and Subroot Create */
#define MSG_MODE_SMS_CCSYNC_OPEN_SERVICE 0x0001
#define MSG_MODE_CCSYNC_RCSYNC_DATA_INPUT 0x0002
#define MSG_MODE_RCSYNC_CCSYNC_DATA_INPUT_RESP 0x0003
#define MSG_MODE_RCSYNC_RCTRAN_SUBROOT_CREATE 0x0004
#define MSG_MODE_RCTRAN_VMA_SUBROOT_CREATE 0x0005
#define MSG_MODE_RCTRAN_RCSYNC_SUBROOT_CREATE_RESP 0x0006
#define MSG_MODE_RCSYNC_CCSYNC_DATA_INPUT_FAIL 0x0007
#define MSG_MODE_VMA_RCTRAN_SUBROOT_CREATE_RESP 0x0008
/* SP-Console Process : Receive Server List */
#define MSG_MODE_SPCONS_CCTRAN_SERVER_LIST 0x0010
#define MSG_MODE_CCTRAN_SPCONS_SERVER_LIST_RESP 0x0011
/* SP-Console Process : Receive Volume Size */
#define MSG_MODE_SPCONS_RCTRAN_VOLUME_SIZE 0x0012
#define MSG_MODE_RCTRAN_SPCONS_VOLUME_SIZE_RESP 0x0013
/* SP-Console Process : Set/Unset Anonymous Directory */
#define MSG_MODE_SPCONS_RCTRAN_SET_ANONY 0x0014
#define MSG_MODE_RCTRAN_APACHE_SET_ANONY 0x0015
#define MSG_MODE_RCTRAN_SPCONS_SET_ANONY_RESP 0x0016
#define MSG_MODE_APACHE_RCTRAN_SET_ANONY_RESP 0x0017
#define MSG_MODE_SPCONS_RCTRAN_UNSET_ANONY 0x0018
#define MSG_MODE_RCTRAN_APACHE_UNSET_ANONY 0x0019
#define MSG_MODE_RCTRAN_SPCONS_UNSET_ANONY_RESP 0x001a
#define MSG_MODE_APACHE_RCTRAN_UNSET_ANONY_RESP 0x001b
/* SP-Console Process : Bandwidth Level */
#define MSG_MODE_SPCONS_RCTRAN_SET_BCLEVEL 0x001c
#define MSG_MODE_RCTRAN_APACHE_SET_BCLEVEL 0x001d
#define MSG_MODE_RCTRAN_SPCONS_SET_BCLEVEL_RESP 0x001e
#define MSG_MODE_APACHE_RCTRAN_SET_BCLEVEL_RESP 0x001f
/* Volume Manager Agent Process : Statistcs and Disksize broadcast */
#define MSG_MODE_VMA_APACHE_DISKSIZE 0x0100
#define MSG_MODE_APACHE_VMA_DISKSIZE_RESP 0x0101
#define MSG_MODE_GVA_VMA_STG_STAT_REQ 0x0102
#define MSG_MODE_VMA_GVA_STG_STAT_RESP 0x0103
/* Network Statistics */
#define MSG_MODE_STATCOL_APACHE_NETSTAT_REQ 0x0104
#define MSG_MODE_APACHE_STATCOL_NETSTAT_RESP 0x0105
#define MSG_MODE_STATCOL_STATDEM_NETSTAT 0x0106
#define MSG_MODE_STATDEM_STATCOL_NETSTAT_RESP 0x0107
/* Statistics Service */
#define MSG_MODE_OPENDAV_RCSTAT_NETSTAT 0x0110
#define MSG_MODE_RCSTAT_OPENDAV_NETSTAT_RESP 0x0111
#define MSG_MODE_RCSTAT_CCSTAT_NETSTAT 0x0112
#define MSG_MODE_CCSTAT_RCSTAT_NETSTAT_RESP 0x0113
#define MSG_MODE_RCSTAT_CCSTAT_STGSTAT 0x0114
#define MSG_MODE_CCSTAT_RCSTAT_STGSTAT_RESP 0x0115
#endif
@@ -0,0 +1,233 @@
#ifndef __PROTOCOL_H__
#define __PROTOCOL_H__
#define RESERVED 5
#define MaxSizeOfCode 3
#define MaxSizeOfTID 52
#define MaxSizeOfIssuer 128
#define MaxSizeOfSID 128
#define MaxSizeOfRCID 32
#define MaxSizeOfRCURL 128
#define MaxSizeOfServiceName 128
#define MaxSizeOfURIPath 1024
#define NumOfServerType 11
#define MaxSizeOfServerName 32
#define MaxSizeOfServerAddr 16
#define MaxSizeOfServerPort 8
#define MaxSizeOfServerType 24
#define MaxSizeOfRCAcctName 32
#define MaxSizeOfRCAcctUser 32
#define MaxSizeOfRCAcctPassword 32
#define MaxSizeOfRCAcctCert 128
#define MaxSizeOfRCAcctAuthkey 128
#define MAX_SRV_NAME 128
#define MAX_DOMAIN_NAME 256
#define MAX_MNG_RCID 128
#define MAX_MNG_SERVNAME 128
#define CONFIG_SERV "SERV"
#define CONFIG_RCACCT "RCACCT"
#define MAX_ALLOWED_DEAD_COUNT 3
#define ALLOWED_MAX_ERROR_COUNT 5
#define SENDSMSTERM 5
#define MAXSENDSMSCOUNT 5
#define SERV_ALIVE 1
#define SERV_DEAD 2
#define NO_MONITOR 3
#define END_OF_SHM "end of shm!"
//#define MYQUERY "SELECT NAME, IP, PORT, TYPE, MONITOR_YN FROM t_rms_rc_server_index WHERE DELETED_YN = 'N' ORDER BY cast(ETC2 as signed) ASC, ETC1 ASC ,NAME ASC"
#define MYQUERY "SELECT NAME, IP, PORT, TYPE, MONITOR_YN from (SELECT NAME, IP, PORT, TYPE, MONITOR_YN FROM t_rms_rc_server_index WHERE DELETED_YN = 'N' AND rcid != 'TIME' ORDER BY cast(ETC2 as signed) ASC, ETC1 ASC ,NAME ASC) a UNION ALL SELECT NAME, IP, PORT, TYPE, MONITOR_YN FROM t_rms_rc_server_index WHERE DELETED_YN = 'N' AND rcid = 'TIME'"
enum eServType
{
SERV_WWW = 0,
SERV_FHS = 1,
SERV_RC = 2,
SERV_DB = 3
};
extern const char a_ServType[NumOfServerType][MaxSizeOfServerType];
#define MAX_IP_STRING 17
struct common_message_header {
char szTransactionID[MaxSizeOfTID];
unsigned long ulMode;
char szIssuer[MaxSizeOfIssuer];
char szServiceID[MaxSizeOfSID];
unsigned long ulResult;
unsigned long ulBodyLength;
};
#define MaxSizeOfCMH (sizeof(struct common_message_header))
struct local_message_header {
char szTransactionID[MaxSizeOfTID];
unsigned long ulMode;
char szIssuer[MaxSizeOfIssuer];
char szServiceID[MaxSizeOfSID];
char szRCID[MaxSizeOfRCID];
unsigned long ulResult;
unsigned long ulBodyLength;
};
#define MaxSizeOfLMH (sizeof(struct local_message_header))
#define CODE_ESC 0x1b
#define DOMAIN_SIZE 512
#define HOSTNAME_SIZE 64
struct disk_usage {
/* Original Message */
char domain[DOMAIN_SIZE];
unsigned long long total;
unsigned long long free;
/* Additional : 2006.11.08 by Elenoa */
/* if manually upload enable/disable */
int manual_disable;
int upload_level;
/* disk stat: backlog and use percentage */
int disk_backlog;
int disk_percent;
/* connection stat: established connection and others all */
int connection_established;
int connection_total;
/* traffic stat: in and out traffic info (packet, byte) */
unsigned long traffic_ip;
unsigned long traffic_ib;
unsigned long traffic_op;
unsigned long traffic_ob;
char hostname[HOSTNAME_SIZE];
};
struct svr_status {
time_t stamp;
struct disk_usage du;
};
#define AuthPrime 137897
typedef struct _s_time_sync_t {
long sync_info;
} time_sync_t;
typedef struct _ServInfo_e
{;
char m_pszServName[MAX_SRV_NAME];
char m_szIpString[MAX_IP_STRING];
short m_sPort;
time_t m_StatChgTime;
unsigned int m_Status;
unsigned int m_ServType;
unsigned int m_DeadCount;
char m_pszDomainName[MAX_DOMAIN_NAME];
char m_monitorYN[2];
struct svr_status ss;
struct _ServInfo_e *next;
} servinfo_t;
typedef struct _RCAcct_e
{
char * m_pszServiceName;
char * m_pszUserName;
char * m_pszPassword;
char * m_pszAuthkey;
char * m_pszCertLocation;
struct _RCAcct_e *next;
} rcacct_t;
/* Global Shared Memory Address */
typedef struct _g_shm_addr
{
unsigned int is_dirty;
unsigned int serv_num;
unsigned int thread_number[1024];
} g_shm_t;
typedef struct _rcmng_common_header
{
char rcmng_rcid[MAX_MNG_RCID];
char rcmng_servName[MAX_SRV_NAME];
unsigned int rcmng_serviceType;
unsigned long bodylength;
} rcmng_cheader_t;
typedef struct _CellInfo
{
char m_strCellPhone[24];
} cellinfo_t;
/* Definition of Message Mode */
#define MSG_MODE_VRCD_STATUSD_RTS_STATUS 0x0a01
/* Open Service and Subroot Create */
#define MSG_MODE_SMS_CCSYNC_OPEN_SERVICE 0x0001
#define MSG_MODE_CCSYNC_RCSYNC_DATA_INPUT 0x0002
#define MSG_MODE_RCSYNC_CCSYNC_DATA_INPUT_RESP 0x0003
#define MSG_MODE_RCSYNC_RCTRAN_SUBROOT_CREATE 0x0004
#define MSG_MODE_RCTRAN_VMA_SUBROOT_CREATE 0x0005
#define MSG_MODE_RCTRAN_RCSYNC_SUBROOT_CREATE_RESP 0x0006
#define MSG_MODE_RCSYNC_CCSYNC_DATA_INPUT_FAIL 0x0007
#define MSG_MODE_VMA_RCTRAN_SUBROOT_CREATE_RESP 0x0008
/* SP-Console Process : Receive Server List */
#define MSG_MODE_SPCONS_CCTRAN_SERVER_LIST 0x0010
#define MSG_MODE_CCTRAN_SPCONS_SERVER_LIST_RESP 0x0011
/* SP-Console Process : Receive Volume Size */
#define MSG_MODE_SPCONS_RCTRAN_VOLUME_SIZE 0x0012
#define MSG_MODE_RCTRAN_SPCONS_VOLUME_SIZE_RESP 0x0013
/* SP-Console Process : Set/Unset Anonymous Directory */
#define MSG_MODE_SPCONS_RCTRAN_SET_ANONY 0x0014
#define MSG_MODE_RCTRAN_APACHE_SET_ANONY 0x0015
#define MSG_MODE_RCTRAN_SPCONS_SET_ANONY_RESP 0x0016
#define MSG_MODE_APACHE_RCTRAN_SET_ANONY_RESP 0x0017
#define MSG_MODE_SPCONS_RCTRAN_UNSET_ANONY 0x0018
#define MSG_MODE_RCTRAN_APACHE_UNSET_ANONY 0x0019
#define MSG_MODE_RCTRAN_SPCONS_UNSET_ANONY_RESP 0x001a
#define MSG_MODE_APACHE_RCTRAN_UNSET_ANONY_RESP 0x001b
/* SP-Console Process : Bandwidth Level */
#define MSG_MODE_SPCONS_RCTRAN_SET_BCLEVEL 0x001c
#define MSG_MODE_RCTRAN_APACHE_SET_BCLEVEL 0x001d
#define MSG_MODE_RCTRAN_SPCONS_SET_BCLEVEL_RESP 0x001e
#define MSG_MODE_APACHE_RCTRAN_SET_BCLEVEL_RESP 0x001f
/* Volume Manager Agent Process : Statistcs and Disksize broadcast */
#define MSG_MODE_VMA_APACHE_DISKSIZE 0x0100
#define MSG_MODE_APACHE_VMA_DISKSIZE_RESP 0x0101
#define MSG_MODE_GVA_VMA_STG_STAT_REQ 0x0102
#define MSG_MODE_VMA_GVA_STG_STAT_RESP 0x0103
/* Network Statistics */
#define MSG_MODE_STATCOL_APACHE_NETSTAT_REQ 0x0104
#define MSG_MODE_APACHE_STATCOL_NETSTAT_RESP 0x0105
#define MSG_MODE_STATCOL_STATDEM_NETSTAT 0x0106
#define MSG_MODE_STATDEM_STATCOL_NETSTAT_RESP 0x0107
/* Statistics Service */
#define MSG_MODE_OPENDAV_RCSTAT_NETSTAT 0x0110
#define MSG_MODE_RCSTAT_OPENDAV_NETSTAT_RESP 0x0111
#define MSG_MODE_RCSTAT_CCSTAT_NETSTAT 0x0112
#define MSG_MODE_CCSTAT_RCSTAT_NETSTAT_RESP 0x0113
#define MSG_MODE_RCSTAT_CCSTAT_STGSTAT 0x0114
#define MSG_MODE_CCSTAT_RCSTAT_STGSTAT_RESP 0x0115
#endif
+136
View File
@@ -0,0 +1,136 @@
/****************************************************************************
od_statusd : Application status monitoring daemon for OpenDisk service
CopyRight(C) 2005 SolutionBox Inc. All Rights reserved.
Author : Sean Kim (sean@0x31.com)
$Id: serv_conf.h,v 1.7 2007/02/20 04:31:12 mirshead Exp $
Redistribution and use in source and binary forms, with or with out
modification, are not permitted in outside of SolutionBox Inc.
****************************************************************************/
#ifndef __SERV_CONF_H__
#define __SERV_CONF_H__
#include <iostream>
#include <list>
#include <string>
#include <mm.h>
#include "util.h"
#include "rconfig.h"
#include "address.h"
#include "protocol.h"
using namespace std;
using namespace SDSocket;
#define NumOfServerType 10
#define MaxSizeOfServerName 32
#define MaxSizeOfServerAddr 16
#define MaxSizeOfServerPort 8
#define MaxSizeOfServerType 24
#define MaxSizeOfRCAcctName 32
#define MaxSizeOfRCAcctUser 32
#define MaxSizeOfRCAcctPassword 32
#define MaxSizeOfRCAcctCert 128
#define MaxSizeOfRCAcctAuthkey 128
#define CONFIG_SERV "SERV"
#define CONFIG_RCACCT "RCACCT"
enum eServType
{
SERV_WWW = 0,
SERV_FHS = 1,
SERV_RC = 2,
SERV_DB = 3
};
const char a_ServType[NumOfServerType][MaxSizeOfServerType]
= {"www", "rts", "rc", "ccdb", "rcts", "gts", "rcdb", "gms", "timed", "stat"};
#define MAX_IP_STRING 17
typedef struct _ServInfo_e
{
char * m_pszServName;
char m_szIpString[MAX_IP_STRING];
short m_sPort;
//Address m_Address;
time_t m_StatChgTime;
unsigned int m_Status;
unsigned int m_ServType;
unsigned int m_DeadCount;
char * m_pszDomainName;
struct svr_status ss;
struct _ServInfo_e *next;
} servinfo_t;
typedef struct _RCAcct_e
{
char * m_pszServiceName;
char * m_pszUserName;
char * m_pszPassword;
char * m_pszAuthkey;
char * m_pszCertLocation;
struct _RCAcct_e *next;
} rcacct_t;
typedef struct _CellInfo
{
string m_strCellPhone;
} cellinfo_t;
class CLoadServConfig : public Config
{
public:
enum eStatus
{
ALIVE = 1,
DEAD = 2
};
CLoadServConfig() throw();
virtual int GetValue(const char *pzKey, char *pszValue);
int LoadServConfig(const char *pszFileName);
void clearLoadCount(void) { m_Counter = 0; }
int getServerCount(void) { return m_ServerCounter; }
int getRCAcctCount(void) { return m_RCAcctCounter; }
int GetServerValue(servinfo_t *pServInfo);
int GetRCAcctValue(rcacct_t *pRCAcctInfo);
int GetCellphoneValue(cellinfo_t *pCellInfo);
servinfo_t *getList(void) throw() { return m_pServerList; }
void addServerToList(servinfo_t newServInfo) throw();
void addRCToList(rcacct_t newAcctInfo) throw();
rcacct_t *RCAcctFind(char *name);
void addCellphoneToList(cellinfo_t newCellphoneInfo) throw();
void InsertServKeyValue(const char *pszKey, const char *pzValue);
int UpdateStatus(unsigned int _ServType, eStatus _Status, char *servname);
int IncreaseDeadCount(unsigned int _ServType, char *servname);
void DumpStatusString(string &strStatus) throw();
void DumpPrintAll(void) throw();
char *getMemory(int size) throw();
void releaseMemory(char *ptr) throw();
private:
unsigned int m_RCAcctCounter;
unsigned int m_ServerCounter;
unsigned int m_Counter;
//std::list<servinfo_t> m_ServerList;
servinfo_t *m_pServerList;
rcacct_t *m_pRCAcctList;
std::list<cellinfo_t> m_CellInfo;
static Semaphore threadsLock;
MM *m_pShm;
};
#endif
+385
View File
@@ -0,0 +1,385 @@
/* include unph */
/* Our own header. Tabs are set for 4 spaces, not 8 */
#ifndef __unp_h
#define __unp_h
#include <sys/types.h> /* basic system data types */
#include <sys/socket.h> /* basic socket definitions */
#include <sys/time.h> /* timeval{} for select() */
#include <time.h> /* timespec{} for pselect() */
#include <sys/time.h> /* includes <time.h> unsafely */
#include <netinet/in.h> /* sockaddr_in{} and other Internet defns */
#include <arpa/inet.h> /* inet(3) functions */
#include <errno.h>
#include <fcntl.h> /* for nonblocking */
#include <netdb.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h> /* for S_xxx file mode constants */
#include <sys/uio.h> /* for iovec{} and readv/writev */
#include <unistd.h>
#include <sys/wait.h>
#include <sys/un.h> /* for Unix domain sockets */
#include <sys/sem.h>
#include <sys/ipc.h>
#include <semaphore.h>
# include <sys/select.h> /* for convenience */
# include <sys/param.h> /* OpenBSD prereq for sysctl.h */
# include <sys/sysctl.h>
# include <poll.h> /* for convenience */
//# include <sys/event.h> /* for kqueue */
# include <strings.h> /* for convenience */
/* Three headers are normally needed for socket/file ioctl's:
* <sys/ioctl.h>, <sys/filio.h>, and <sys/sockio.h>.
*/
# include <sys/ioctl.h>
//# include <sys/filio.h>
//# include <sys/sockio.h>
# include <pthread.h>
//# include <net/if_dl.h>
#ifndef __PROTOCOL_H__
#include "protocol.h"
#endif
#ifndef __GLOBAL_H__
#include "global.h"
#endif
#ifndef __PRE_THREAD_MODEL_H__
#include "pre_thread_model.h"
#endif
#include <mysql.h>
#include <libpq-fe.h>
/* OSF/1 actually disables recv() and send() in <sys/socket.h> */
#ifdef __osf__
#undef recv
#undef send
#define recv(a,b,c,d) recvfrom(a,b,c,d,0,0)
#define send(a,b,c,d) sendto(a,b,c,d,0,0)
#endif
#ifndef INADDR_NONE
/* $$.Ic INADDR_NONE$$ */
#define INADDR_NONE 0xffffffff /* should have been in <netinet/in.h> */
#endif
#ifndef SHUT_RD /* these three POSIX names are new */
#define SHUT_RD 0 /* shutdown for reading */
#define SHUT_WR 1 /* shutdown for writing */
#define SHUT_RDWR 2 /* shutdown for reading and writing */
/* $$.Ic SHUT_RD$$ */
/* $$.Ic SHUT_WR$$ */
/* $$.Ic SHUT_RDWR$$ */
#endif
/* *INDENT-OFF* */
#ifndef INET_ADDRSTRLEN
/* $$.Ic INET_ADDRSTRLEN$$ */
#define INET_ADDRSTRLEN 16 /* "ddd.ddd.ddd.ddd\0"
1234567890123456 */
#endif
/* Define following even if IPv6 not supported, so we can always allocate
an adequately sized buffer without #ifdefs in the code. */
#ifndef INET6_ADDRSTRLEN
/* $$.Ic INET6_ADDRSTRLEN$$ */
#define INET6_ADDRSTRLEN 46 /* max size of IPv6 address string:
"xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx" or
"xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:ddd.ddd.ddd.ddd\0"
1234567890123456789012345678901234567890123456 */
#endif
/* *INDENT-ON* */
/* Define bzero() as a macro if it's not in standard C library. */
#define bzero(ptr,n) memset(ptr, 0, n)
/* $$.If bzero$$ */
/* $$.If memset$$ */
/* Older resolvers do not have gethostbyname2() */
#define gethostbyname2(host,family) gethostbyname((host))
/* The structure returned by recvfrom_flags() */
struct unp_in_pktinfo {
struct in_addr ipi_addr; /* dst IPv4 address */
int ipi_ifindex;/* received interface index */
};
/* $$.It unp_in_pktinfo$$ */
/* $$.Ib ipi_addr$$ */
/* $$.Ib ipi_ifindex$$ */
/* We need the newer CMSG_LEN() and CMSG_SPACE() macros, but few
implementations support them today. These two macros really need
an ALIGN() macro, but each implementation does this differently. */
#ifndef CMSG_LEN
/* $$.Im CMSG_LEN$$ */
#define CMSG_LEN(size) (sizeof(struct cmsghdr) + (size))
#endif
#ifndef CMSG_SPACE
/* $$.Im CMSG_SPACE$$ */
#define CMSG_SPACE(size) (sizeof(struct cmsghdr) + (size))
#endif
/* POSIX requires the SUN_LEN() macro, but not all implementations DefinE
it (yet). Note that this 4.4BSD macro works regardless whether there is
a length field or not. */
#ifndef SUN_LEN
/* $$.Im SUN_LEN$$ */
# define SUN_LEN(su) \
(sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
#endif
/* POSIX renames "Unix domain" as "local IPC."
Not all systems DefinE AF_LOCAL and PF_LOCAL (yet). */
#ifndef AF_LOCAL
#define AF_LOCAL AF_UNIX
#endif
#ifndef PF_LOCAL
#define PF_LOCAL PF_UNIX
#endif
/* POSIX requires that an #include of <poll.h> DefinE INFTIM, but many
systems still DefinE it in <sys/stropts.h>. We don't want to include
all the STREAMS stuff if it's not needed, so we just DefinE INFTIM here.
This is the standard value, but there's no guarantee it is -1. */
#ifndef INFTIM
#define INFTIM (-1) /* infinite poll timeout */
/* $$.Ic INFTIM$$ */
#define INFTIM_UNPH /* tell unpxti.h we defined it */
#endif
/* Following could be derived from SOMAXCONN in <sys/socket.h>, but many
kernels still #define it as 5, while actually supporting many more */
#define LISTENQ 1024 /* 2nd argument to listen() */
/* Miscellaneous constants */
#define MAXLINE 4096 /* max text line length */
#define BUFFSIZE 8192 /* buffer size for reads and writes */
/* Define some port number that can be used for our examples */
#define SERV_PORT 9877 /* TCP and UDP */
#define SERV_PORT_STR "9877" /* TCP and UDP */
#define UNIXSTR_PATH "/tmp/unix.str" /* Unix domain stream */
#define UNIXDG_PATH "/tmp/unix.dg" /* Unix domain datagram */
/* $$.ix [LISTENQ]~constant,~definition~of$$ */
/* $$.ix [MAXLINE]~constant,~definition~of$$ */
/* $$.ix [BUFFSIZE]~constant,~definition~of$$ */
/* $$.ix [SERV_PORT]~constant,~definition~of$$ */
/* $$.ix [UNIXSTR_PATH]~constant,~definition~of$$ */
/* $$.ix [UNIXDG_PATH]~constant,~definition~of$$ */
/* Following shortens all the typecasts of pointer arguments: */
#define SA struct sockaddr
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
/* default file access permissions for new files */
#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
/* default permissions for new directories */
typedef void Sigfunc(int); /* for signal handlers */
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) > (b) ? (a) : (b))
/* end unph */
/* prototypes for our own library functions */
int connect_nonb(int, const SA *, socklen_t, int);
int connect_timeo(int, const SA *, socklen_t, int);
int daemon_init(const char *, int);
void daemon_inetd(const char *, int);
void dg_cli(FILE *, int, const SA *, socklen_t);
void dg_echo(int, SA *, socklen_t);
int family_to_level(int);
char *gf_time(void);
void heartbeat_cli(int, int, int);
void heartbeat_serv(int, int, int);
struct addrinfo *host_serv(const char *, const char *, int, int);
int inet_srcrt_add(char *);
u_char *inet_srcrt_init(int);
void inet_srcrt_print(u_char *, int);
void inet6_srcrt_print(void *);
char **my_addrs(int *);
int readable_timeo(int, int);
ssize_t readline(int, void *, size_t);
ssize_t readn(int, void *, size_t);
ssize_t read_fd(int, void *, size_t, int *);
ssize_t recvfrom_flags(int, void *, size_t, int *, SA *, socklen_t *,
struct unp_in_pktinfo *);
Sigfunc *signal_intr(int, Sigfunc *);
int sock_bind_wild(int, int);
int sock_cmp_addr(const SA *, const SA *, socklen_t);
int sock_cmp_port(const SA *, const SA *, socklen_t);
int sock_get_port(const SA *, socklen_t);
void sock_set_addr(SA *, socklen_t, const void *);
void sock_set_port(SA *, socklen_t, int);
void sock_set_wild(SA *, socklen_t);
char *sock_ntop(const SA *, socklen_t);
char *sock_ntop_host(const SA *, socklen_t);
int sockfd_to_family(int);
void str_echo(int);
void str_cli(FILE *, int);
int tcp_connect(const char *, const char *);
int tcp_listen(const char *, const char *, socklen_t *);
void tv_sub(struct timeval *, struct timeval *);
int udp_client(const char *, const char *, SA **, socklen_t *);
int udp_connect(const char *, const char *);
int udp_server(const char *, const char *, socklen_t *);
int writable_timeo(int, int);
ssize_t writen(int, const void *, size_t);
ssize_t write_fd(int, void *, size_t, int);
uint16_t in_cksum(uint16_t *, int);
/* prototypes for our own library wrapper functions */
void Connect_timeo(int, const SA *, socklen_t, int);
int Family_to_level(int);
struct addrinfo *Host_serv(const char *, const char *, int, int);
const char *Inet_ntop(int, const void *, char *, size_t);
void Inet_pton(int, const char *, void *);
char *If_indextoname(unsigned int, char *);
unsigned int If_nametoindex(const char *);
struct if_nameindex *If_nameindex(void);
char **My_addrs(int *);
ssize_t Read_fd(int, void *, size_t, int *);
int Readable_timeo(int, int);
ssize_t Recvfrom_flags(int, void *, size_t, int *, SA *, socklen_t *,
struct unp_in_pktinfo *);
Sigfunc *Signal(int, Sigfunc *);
Sigfunc *Signal_intr(int, Sigfunc *);
int Sock_bind_wild(int, int);
char *Sock_ntop(const SA *, socklen_t);
char *Sock_ntop_host(const SA *, socklen_t);
int Sockfd_to_family(int);
int Tcp_connect(const char *, const char *);
int Tcp_listen(const char *, const char *, socklen_t *);
int Udp_client(const char *, const char *, SA **, socklen_t *);
int Udp_connect(const char *, const char *);
int Udp_server(const char *, const char *, socklen_t *);
ssize_t Write_fd(int, void *, size_t, int);
int Writable_timeo(int, int);
/* prototypes for our Unix wrapper functions: see {Sec errors} */
void *Calloc(size_t, size_t);
void Close(int);
void Dup2(int, int);
int Fcntl(int, int, int);
void Gettimeofday(struct timeval *, void *);
int Ioctl(int, int, void *);
pid_t Fork(void);
void *Malloc(size_t);
int Mkstemp(char *);
void *Mmap(void *, size_t, int, int, int, off_t);
int Open(const char *, int, mode_t);
void Pipe(int *fds);
ssize_t Read(int, void *, size_t);
void Sigaddset(sigset_t *, int);
void Sigdelset(sigset_t *, int);
void Sigemptyset(sigset_t *);
void Sigfillset(sigset_t *);
int Sigismember(const sigset_t *, int);
void Sigpending(sigset_t *);
void Sigprocmask(int, const sigset_t *, sigset_t *);
char *Strdup(const char *);
long Sysconf(int);
void Sysctl(int *, u_int, void *, size_t *, void *, size_t);
void Unlink(const char *);
pid_t Wait(int *);
pid_t Waitpid(pid_t, int *, int);
void Write(int, void *, size_t);
/* prototypes for our stdio wrapper functions: see {Sec errors} */
void Fclose(FILE *);
FILE *Fdopen(int, const char *);
char *Fgets(char *, int, FILE *);
FILE *Fopen(const char *, const char *);
void Fputs(const char *, FILE *);
/* prototypes for our socket wrapper functions: see {Sec errors} */
int Accept(int, SA *, socklen_t *);
void Bind(int, const SA *, socklen_t);
void Connect(int, const SA *, socklen_t);
void Getpeername(int, SA *, socklen_t *);
void Getsockname(int, SA *, socklen_t *);
void Getsockopt(int, int, int, void *, socklen_t *);
void Listen(int, int);
ssize_t Readline(int, void *, size_t);
ssize_t Readn(int, void *, size_t);
ssize_t Recv(int, void *, size_t, int);
ssize_t Recvfrom(int, void *, size_t, int, SA *, socklen_t *);
ssize_t Recvmsg(int, struct msghdr *, int);
int Select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
void Send(int, const void *, size_t, int);
void Sendto(int, const void *, size_t, int, const SA *, socklen_t);
void Sendmsg(int, const struct msghdr *, int);
void Setsockopt(int, int, int, const void *, socklen_t);
void Shutdown(int, int);
int Sockatmark(int);
int Socket(int, int, int);
void Socketpair(int, int, int, int *);
void Writen(int, void *, size_t);
int ConnectWait(int, struct sockaddr *, int, int);
void err_dump(const char *, ...);
void err_msg(const char *, ...);
void err_quit(const char *, ...);
void err_ret(const char *, ...);
void err_sys(const char *, ...);
/* Read configuration func */
extern int GetProfileInt(char *part, char *spart, int dval);
extern char *GetProfile(char *part, char *spart, char *rval, char *dval );
extern int SetIniName(char * buf);
/* roolu util func */
int devide(char **val, char *str, char delim);
char * timeToString(struct tm *);
char *makeLogString();
void WriteSHLog(char *, ...);
void WriteSHLog_safe(char *, ...);
/* new status inner func */
void addServerToList(servinfo_t *, MYSQL_ROW);
void vrcd_thread_make(int);
void report_thread_make(int);
void chk_rtime_update_serv_status();
int rcacctFind(char **, char *);
void processing_server_status(int, int, servinfo_t *);
void UpdateStatus(unsigned int, unsigned int, char *);
int timedCheck(char *, int, int);
int socket_open_with_timeout(int, servinfo_t *);
void HandleTimeOut(int);
int increaseDeadCount(unsigned int, char *);
void * report_thread_update_main(void *);
int update_report_func();
void update_server_list(servinfo_t *, servinfo_t *);
void * report_thread_send_main(void *);
void * vrcd_thread_main(void *);
void updateShm(struct svr_status *, int, int);
char *make_status_string(int *);
int get_sizeof_shm();
void SendToWebServ(const char *, char *);
void view_header_packet(struct common_message_header *);
void view_serv_status_packet(struct svr_status *);
void view_rcmng_header_packet(rcmng_cheader_t *);
void view_servinfo_t_packet(servinfo_t *);
servinfo_t *get_shm_start_pointer();
servinfo_t *get_shm_start_pointer_readonly();
void makedaemon(int);
void SafeProcessRunSpinWait(void);
#endif /* __unp_h */
+353
View File
@@ -0,0 +1,353 @@
/* include unpipch */
/* Our own header. Tabs are set for 4 spaces, not 8 */
#ifndef __unpipc_h
#define __unpipc_h
/* Devices */
#define HAVE_DEV_ZERO 1
/* #undef POSIX_IPC_PREFIX */
#define RPCGEN_ANSIC 1 /* defined if rpcgen groks -C option */
/* *INDENT-ON* */
#include <sys/types.h> /* basic system data types */
#include <sys/time.h> /* timeval{} for select() */
#include <time.h> /* timespec{} for pselect() */
#include <errno.h>
#include <fcntl.h> /* for nonblocking */
#include <limits.h> /* PIPE_BUF */
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h> /* for S_xxx file mode constants */
#include <unistd.h>
#include <sys/wait.h>
# include <semaphore.h> /* Posix semaphores */
# include <sys/mman.h> /* Posix shared memory */
# include <sys/ipc.h> /* System V IPC */
# include <sys/msg.h> /* System V message queues */
#ifdef __bsdi__
#undef HAVE_SYS_SEM_H /* hack: BSDI's semctl() prototype is wrong */
#endif
#include <sys/sem.h> /* System V semaphores */
# include <sys/shm.h> /* System V shared memory */
# include <sys/select.h> /* for convenience */
# include <poll.h> /* for convenience */
# include <strings.h> /* for convenience */
/* Next three headers are normally needed for socket/file ioctl's:
* <sys/ioctl.h>, <sys/filio.h>, and <sys/sockio.h>.
*/
# include <sys/ioctl.h>
//# include <sys/filio.h>
# include <pthread.h>
#ifdef _PSX4_NSPACE_H_TS /* Digital Unix 4.0b hack, hack, hack */
#undef SUCCESS
#endif
# include <rpc/rpc.h> /* Sun RPC */
/* Define bzero() as a macro if it's not in standard C library. */
#define bzero(ptr,n) memset(ptr, 0, n)
#ifndef SHM_NAME
//#define SHM_NAME "/user/service/shmmem/sh_statusd_mem" // FreeBSD
#define SHM_NAME "new_sh_statusd_shmem" // Linux
#endif
#ifndef SEM_NAME
//#define SEM_NAME "/tmp/sh_sem" // FreeBSD
#define SEM_NAME "new_sh_statusd_sem" // Linux
#endif
#ifndef GLOBAL_SHM_POINT
#define GLOBAL_SHM_POINT "sh_global_point"
#endif
/* Posix.1g requires that an #include of <poll.h> DefinE INFTIM, but many
systems still DefinE it in <sys/stropts.h>. We don't want to include
all the streams stuff if it's not needed, so we just DefinE INFTIM here.
This is the standard value, but there's no guarantee it is -1. */
#ifndef INFTIM
#define INFTIM (-1) /* infinite poll timeout */
#ifdef HAVE_POLL_H
#define INFTIM_UNPH /* tell unpxti.h we defined it */
#endif
#endif
/* Miscellaneous constants */
#ifndef PATH_MAX /* should be in <limits.h> */
#define PATH_MAX 1024 /* max # of characters in a pathname */
#endif
#define MAX_PATH 1024
/* $$.ix [MAX_PATH]~constant,~definition~of$$ */
#define MAXLINE 4096 /* max text line length */
/* $$.ix [MAXLINE]~constant,~definition~of$$ */
/* $$.ix [BUFFSIZE]~constant,~definition~of$$ */
#define BUFFSIZE 8192 /* buffer size for reads and writes */
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
/* default permissions for new files */
/* $$.ix [FILE_MODE]~constant,~definition~of$$ */
#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
/* default permissions for new directories */
/* $$.ix [DIR_MODE]~constant,~definition~of$$ */
#define SVMSG_MODE (MSG_R | MSG_W | MSG_R>>3 | MSG_R>>6)
/* default permissions for new SV message queues */
/* $$.ix [SVMSG_MODE]~constant,~definition~of$$ */
#define SEM_A 0200 /* alter permission */
#define SEM_R 0400 /* read permission */
#define SVSEM_MODE (SEM_R | SEM_A | SEM_R>>3 | SEM_R>>6)
/* default permissions for new SV semaphores */
/* $$.ix [SVSEM_MODE]~constant,~definition~of$$ */
#define SVSHM_MODE (SHM_R | SHM_W | SHM_R>>3 | SHM_R>>6)
/* default permissions for new SV shared memory */
/* $$.ix [SVSHM_MODE]~constant,~definition~of$$ */
typedef void Sigfunc_rt(int, siginfo_t *, void *);
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) > (b) ? (a) : (b))
/*
* In our wrappers for open(), mq_open(), and sem_open() we handle the
* optional arguments using the va_XXX() macros. But one of the optional
* arguments is of type "mode_t" and this breaks under BSD/OS because it
* uses a 16-bit integer for this datatype. But when our wrapper function
* is called, the compiler expands the 16-bit short integer to a 32-bit
* integer. This breaks our call to va_arg(). All we can do is the
* following hack. Other systems in addition to BSD/OS might have this
* problem too ...
*/
#ifdef __bsdi__
#define va_mode_t int
#else
#define va_mode_t mode_t
#endif
/* $$.ix [va_mode_t]~datatype,~definition~of$$ */
/* our record locking macros */
#define read_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)
#define readw_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len)
#define write_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)
#define writew_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)
#define un_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)
#define is_read_lockable(fd, offset, whence, len) \
lock_test(fd, F_RDLCK, offset, whence, len)
#define is_write_lockable(fd, offset, whence, len) \
lock_test(fd, F_WRLCK, offset, whence, len)
/* end unpipch */
#define Read_lock(fd, offset, whence, len) \
Lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)
#define Readw_lock(fd, offset, whence, len) \
Lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len)
#define Write_lock(fd, offset, whence, len) \
Lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)
#define Writew_lock(fd, offset, whence, len) \
Lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)
#define Un_lock(fd, offset, whence, len) \
Lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)
#define Is_read_lockable(fd, offset, whence, len) \
Lock_test(fd, F_RDLCK, offset, whence, len)
#define Is_write_lockable(fd, offset, whence, len) \
Lock_test(fd, F_WRLCK, offset, whence, len)
/* prototypes for our own library functions */
char *gf_time(void);
int lock_reg(int, int, int, off_t, int, off_t);
pid_t lock_test(int, int, off_t, int, off_t);
void *my_shm(size_t);
char *px_ipc_name(const char *);
int readable_timeo(int, int);
ssize_t readline(int, void *, size_t);
ssize_t readn(int, void *, size_t);
int set_concurrency(int);
Sigfunc *signal_intr(int, Sigfunc *);
int sleep_us(unsigned int);
int start_time(void);
double stop_time(void);
int touch(void *, int);
void tv_sub(struct timeval *, struct timeval *);
int writable_timeo(int, int);
ssize_t writen(int, const void *, size_t);
int isfdtype(int, int);
/* prototypes for our own library wrapper functions */
char *Gf_time(void);
void Lock_reg(int, int, int, off_t, int, off_t);
pid_t Lock_test(int, int, off_t, int, off_t);
void *My_shm(size_t);
char *Px_ipc_name(const char *);
int Readable_timeo(int, int);
ssize_t Readline(int, void *, size_t);
ssize_t Readn(int, void *, size_t);
void Set_concurrency(int);
Sigfunc *Signal(int, Sigfunc *);
Sigfunc *Signal_intr(int, Sigfunc *);
Sigfunc_rt *Signal_rt(int, Sigfunc_rt *);
Sigfunc_rt *Signal_rt_intr(int, Sigfunc_rt *);
void Sleep_us(unsigned int);
void Start_time(void);
double Stop_time(void);
void Touch(void *, int);
int Writable_timeo(int, int);
void Writen(int, void *, size_t);
/* prototypes for our Unix wrapper functions */
void *Calloc(size_t, size_t);
void Close(int);
void Dup2(int, int);
//int Fcntl(int, int, void *);
pid_t Fork(void);
long Fpathconf(int, int);
void Fstat(int, struct stat *);
key_t Ftok(const char *, int);
void Ftruncate(int, off_t);
int Getopt(int, char *const *, const char *);
void Gettimeofday(struct timeval *, void *);
int Ioctl(int, int, void *);
void Kill(pid_t, int);
off_t Lseek(int, off_t, int);
void *Malloc(size_t);
void Mkfifo(const char *, mode_t);
void Mktemp(char *);
void *Mmap(void *, size_t, int, int, int, off_t);
void Munmap(void *, size_t);
//int Open(const char *, int, ...);
long Pathconf(const char *, int);
void Pipe(int *fds);
ssize_t Read(int, void *, size_t);
int Select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
void Sigaddset(sigset_t *, int);
void Sigdelset(sigset_t *, int);
void Sigemptyset(sigset_t *);
void Sigfillset(sigset_t *);
int Sigismember(const sigset_t *, int);
void Sigpending(sigset_t *);
void Sigprocmask(int, const sigset_t *, sigset_t *);
void Sigqueue(pid_t, int, const union sigval);
void Sigwait(const sigset_t *, int *);
void Stat(const char *, struct stat *);
char *Strdup(const char *);
long Sysconf(int);
void Sysctl(int *, u_int, void *, size_t *, void *, size_t);
void Unlink(const char *);
void *Valloc(size_t);
pid_t Wait(int *);
pid_t Waitpid(pid_t, int *, int);
void Write(int, void *, size_t);
/* 4Posix semaphores */
sem_t *Sem_open(const char *, int, ...);
void Sem_close(sem_t *);
void Sem_unlink(const char *);
void Sem_init(sem_t *, int, unsigned int);
void Sem_destroy(sem_t *);
void Sem_wait(sem_t *);
int Sem_trywait(sem_t *);
void Sem_post(sem_t *);
void Sem_getvalue(sem_t *, int *);
/* Note that <sys/mman.h> is defined on some systems that do not support
* Posix shared memory (e.g., 4.4BSD), because this header predates Posix
* and appears on any system that supports mmap(). Therefore we cannot
* use this to determine whether the implementation supports Posix shared
* memory or not. We use our own HAVE_SHM_OPEN_PROTO symbol.
*/
/* 4Posix shared memory */
int Shm_open(const char *, int, mode_t);
void Shm_unlink(const char *);
/* 4System V message queues */
int Msgget(key_t key, int flag);
void Msgctl(int, int, struct msqid_ds *);
void Msgsnd(int, const void *, size_t, int);
ssize_t Msgrcv(int, void *, size_t, int, int);
/* 4System V semaphores */
int Semget(key_t, int, int);
int Semctl(int, int, int, ...);
void Semop(int, struct sembuf *, size_t);
/* 4System V shared memory */
int Shmget(key_t, size_t, int);
void *Shmat(int, const void *, int);
void Shmdt(const void *);
void Shmctl(int, int, struct shmid_ds *);
/* prototypes for our stdio wrapper functions */
void Fclose(FILE *);
FILE *Fdopen(int, const char *);
char *Fgets(char *, int, FILE *);
FILE *Fopen(const char *, const char *);
void Fputs(const char *, FILE *);
FILE *Popen(const char *, const char *);
int Pclose(FILE *);
void Fattach(int, const char *);
int Poll(struct pollfd *, unsigned long, int);
void err_dump(const char *, ...);
void err_msg(const char *, ...);
void err_quit(const char *, ...);
void err_ret(const char *, ...);
void err_sys(const char *, ...);
/* prototypes for our pthread wrapper functions */
void Pthread_attr_init(pthread_attr_t *);
void Pthread_attr_destroy(pthread_attr_t *);
void Pthread_attr_setdetachstate(pthread_attr_t *, int);
void Pthread_attr_setscope(pthread_attr_t *, int);
void Pthread_create(pthread_t *, const pthread_attr_t *,
void * (*)(void *), void *);
void Pthread_join(pthread_t, void **);
void Pthread_detach(pthread_t);
void Pthread_kill(pthread_t, int);
void Pthread_setcancelstate(int, int *);
void Pthread_mutexattr_init(pthread_mutexattr_t *);
void Pthread_mutexattr_destroy(pthread_mutexattr_t *);
void Pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);
void Pthread_mutex_init(pthread_mutex_t *, pthread_mutexattr_t *);
void Pthread_mutex_destroy(pthread_mutex_t *);
void Pthread_mutex_lock(pthread_mutex_t *);
void Pthread_mutex_unlock(pthread_mutex_t *);
void Pthread_condattr_init(pthread_condattr_t *);
void Pthread_condattr_destroy(pthread_condattr_t *);
void Pthread_condattr_setpshared(pthread_condattr_t *, int);
void Pthread_cond_broadcast(pthread_cond_t *);
void Pthread_cond_signal(pthread_cond_t *);
void Pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *);
void Pthread_cond_timedwait(pthread_cond_t *, pthread_mutex_t *,
const struct timespec *);
void Pthread_key_create(pthread_key_t *, void (*)(void *));
void Pthread_setspecific(pthread_key_t, const void *);
void Pthread_once(pthread_once_t *, void (*)(void));
long pr_thread_id(pthread_t *);
CLIENT *Clnt_create(const char *, u_long, u_long, const char *);
void Clnt_control(CLIENT *, u_int, char *);
#endif /* __unpipc_h */
@@ -0,0 +1,31 @@
/* Our own header for the programs that use threads.
Include this file, instead of "unp.h". */
#ifndef __unp_pthread_h
#define __unp_pthread_h
#include "unp.h"
void Pthread_create(pthread_t *, const pthread_attr_t *,
void * (*)(void *), void *);
void Pthread_join(pthread_t, void **);
void Pthread_detach(pthread_t);
void Pthread_kill(pthread_t, int);
void Pthread_mutexattr_init(pthread_mutexattr_t *);
void Pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);
void Pthread_mutex_init(pthread_mutex_t *, pthread_mutexattr_t *);
void Pthread_mutex_lock(pthread_mutex_t *);
void Pthread_mutex_unlock(pthread_mutex_t *);
void Pthread_cond_broadcast(pthread_cond_t *);
void Pthread_cond_signal(pthread_cond_t *);
void Pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *);
void Pthread_cond_timedwait(pthread_cond_t *, pthread_mutex_t *,
const struct timespec *);
void Pthread_key_create(pthread_key_t *, void (*)(void *));
void Pthread_setspecific(pthread_key_t, const void *);
void Pthread_once(pthread_once_t *, void (*)(void));
#endif /* __unp_pthread_h */