base
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
Reference in New Issue
Block a user