init ems server code
This commit is contained in:
99
plat/iptrans/Makefile
Normal file
99
plat/iptrans/Makefile
Normal file
@@ -0,0 +1,99 @@
|
||||
|
||||
##----------------------------------------------------------##
|
||||
## ##
|
||||
## Universal Makefile for module template : V1.6.3 ##
|
||||
## ##
|
||||
## Created : Wei Liu 07/04/11 ##
|
||||
## Revision: [Last]Wei Liu 07/07/07 ##
|
||||
## ##
|
||||
##----------------------------------------------------------##
|
||||
|
||||
##---------------------------------------------------------------------##
|
||||
##--------------------------------------
|
||||
##
|
||||
## Project correlation(Customer define)
|
||||
##
|
||||
##--------------------------------------
|
||||
|
||||
## MODULE= [Module Name]
|
||||
## TYPE = app/plat => Module Type
|
||||
|
||||
## DBUG_FLAGS_ADD = [Module Define Gcc Flags for Debug ]
|
||||
## DBUG_FLAGS_ADD = [Module Define Gcc Flags for Release]
|
||||
|
||||
## BUILD = lib/exef => Output file format
|
||||
## CFG = debug/release => Build Configuration
|
||||
|
||||
## SRC_PATH = [Source file path]
|
||||
## INC_PATH = [Include file path]
|
||||
## APP_PATH = [App Module path]
|
||||
## PLT_PATH = [Plat Module path]
|
||||
|
||||
## PLT_LIB = [Needed plat lib for Link] => just for test or wxc2main
|
||||
## APP_LIB = [Needed app lib for Link] => just for test or wxc2main
|
||||
## LIB_ADD = [Needed Extend lib for Link] => just for test or wxc2main
|
||||
|
||||
## PLT_LIB e.g. = haepub fsm mng proto kernel aif mgc mgcp sip rtp \
|
||||
## 8ecp bicc smpp xapp tcap mtp3 m2ua \
|
||||
## snmp iptrans debug sccp public
|
||||
##
|
||||
## APP_LIB e.g. = msc vlr ssf hlr ae pps mnp smsc vms aas
|
||||
## LIB_ADD e.g. = -liba3a8 -lm
|
||||
|
||||
## OBJ_ADD = [Extend third party object files needed]
|
||||
## TEST_OBJ_PATH = [module object files Path for test ] => just for test
|
||||
##---------------------------------------------------------------------##
|
||||
|
||||
MODULE = iptrans
|
||||
TYPE = plat
|
||||
|
||||
DBUG_FLAGS_ADD =
|
||||
RELS_FLAGS_ADD =
|
||||
|
||||
##Default commonly as below
|
||||
|
||||
BUILD = lib
|
||||
CFG = debug
|
||||
|
||||
|
||||
PLT_LIB =
|
||||
|
||||
APP_LIB =
|
||||
LIB_ADD =
|
||||
|
||||
SRC_PATH = ./src
|
||||
INC_PATH = ./src/include
|
||||
PLT_PATH = ../../plat
|
||||
APP_PATH = ../../mss
|
||||
|
||||
OBJ_ADD =
|
||||
TEST_OBJ_PATH =
|
||||
|
||||
PREPROC_CMD =
|
||||
POSTPROC_CMD =
|
||||
|
||||
##---------------------------------------------------------------------##
|
||||
##--------------------------------------
|
||||
##
|
||||
## Make configuration(Customer define)
|
||||
##
|
||||
##--------------------------------------
|
||||
|
||||
## CCFLAG_SWITCH = on/off => gcc flag show on/off
|
||||
## COVER_NEED = yes/no => PTF cover report needed
|
||||
## COVER_REPORT_PATH = [path ] => PTF cover report path
|
||||
|
||||
CCFLAG_SWITCH = off
|
||||
COVER_NEED = no
|
||||
COVER_REPORT_PATH = ./output
|
||||
MAKE_INCLUDE = $(HOME)/ems.git/include
|
||||
|
||||
##---------------------------------------------------------------------##
|
||||
|
||||
|
||||
##--------------------------------------
|
||||
##
|
||||
## include makefile.rules (Do not change)
|
||||
##
|
||||
##--------------------------------------
|
||||
include $(MAKE_INCLUDE)/Makefile.rules
|
||||
BIN
plat/iptrans/doc/iptrans_bak
Normal file
BIN
plat/iptrans/doc/iptrans_bak
Normal file
Binary file not shown.
3
plat/iptrans/generate_iptrans
Normal file
3
plat/iptrans/generate_iptrans
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
#gcc -o iptrans ./src/iptrmain.c -Llib/ -liptrans -L../debug/lib -ldebug -lcurses -L../snmp/lib -lsnmp -L../public/lib -lpublic -lm
|
||||
gcc -o iptrans ./src/iptrmain.c -Llib/ -liptrans -L../debug/lib -ldebug -L../snmp/lib -lsnmp -L../public/lib -lpublic -lm
|
||||
BIN
plat/iptrans/iptrans
Normal file
BIN
plat/iptrans/iptrans
Normal file
Binary file not shown.
BIN
plat/iptrans/iptrans_bak
Normal file
BIN
plat/iptrans/iptrans_bak
Normal file
Binary file not shown.
81
plat/iptrans/src/comfunc.c
Normal file
81
plat/iptrans/src/comfunc.c
Normal file
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
** CVS: $Id: comfunc.c,v 1.3 2001/01/20 19:58:49 zhangsz Exp $
|
||||
**
|
||||
** Title: comfunc.c
|
||||
** Author: Zhang Shuzhong
|
||||
** Date: 2000.07.03
|
||||
**
|
||||
** Description: Functions of comunication for PACS WLL.
|
||||
**
|
||||
*/
|
||||
|
||||
#include "../../public/src/include/includes.h"
|
||||
|
||||
/*
|
||||
** passivesock - allocate & bind a server socket using TCP or UDP
|
||||
*/
|
||||
|
||||
/*@ignore@*/
|
||||
int
|
||||
passivesock( const char * transport, u_short portbase, int qlen)
|
||||
{
|
||||
struct sockaddr_in sin;
|
||||
int s, type;
|
||||
|
||||
memset(& sin, 0, sizeof(sin));
|
||||
sin.sin_family = AF_INET;
|
||||
sin.sin_port = htons(portbase);
|
||||
sin.sin_addr.s_addr = INADDR_ANY;
|
||||
bzero(&(sin.sin_zero), 8);
|
||||
|
||||
if ( strcmp(transport, "UDP") == 0)
|
||||
type = SOCK_DGRAM;
|
||||
else
|
||||
type = SOCK_STREAM;
|
||||
s = socket(AF_INET, type, 0);
|
||||
if (s < 0) {
|
||||
perror("socket");
|
||||
return -3;
|
||||
}
|
||||
if (bind(s, (struct sockaddr *) & sin, sizeof(sin)) < 0) {
|
||||
perror("bind");
|
||||
close(s);
|
||||
return -4;
|
||||
}
|
||||
|
||||
if (type == SOCK_STREAM && listen(s, qlen) < 0) {
|
||||
perror("listen");
|
||||
close(s);
|
||||
return -5;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
/*
|
||||
** passiveUDP - create a passive socket for use in a UDP server
|
||||
*/
|
||||
|
||||
int
|
||||
passiveUDP(u_short portbase)
|
||||
{
|
||||
return (passivesock("UDP", portbase, 0) );
|
||||
}
|
||||
|
||||
const char *
|
||||
Inet_ntoa(const long addr)
|
||||
{
|
||||
struct sockaddr_in sin;
|
||||
|
||||
sin.sin_addr.s_addr = addr;
|
||||
return ((char *) inet_ntoa(sin.sin_addr) );
|
||||
}
|
||||
|
||||
const long
|
||||
Inet_pton(const char *sp)
|
||||
{
|
||||
struct in_addr i_addr;
|
||||
|
||||
inet_pton(AF_INET, sp, &i_addr);
|
||||
return i_addr.s_addr;
|
||||
}
|
||||
/*@end@*/
|
||||
65
plat/iptrans/src/daemon.c
Normal file
65
plat/iptrans/src/daemon.c
Normal file
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
** CVS: $Id: daemon.c,v 1.4 2001/01/11 04:03:57 zhangsz Exp $
|
||||
** daemon.c
|
||||
** created at 2000/08/22
|
||||
** By Zhang Shuzhong.
|
||||
** Functions of daemon process.
|
||||
*/
|
||||
#include "./include/iptrans.h"
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#define MAXFD 64
|
||||
|
||||
/*@ignore@*/
|
||||
int
|
||||
InitDaemon(void)
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
if ( (pid = fork()) < 0)
|
||||
return FAILURE;
|
||||
else if (pid != 0)
|
||||
exit(0); /* parent goes bye-bye */
|
||||
/* child continues */
|
||||
setsid(); /* become session leader */
|
||||
// chdir("/"); /* change working direactory */
|
||||
umask(0); /* clear our file mode creation mask */
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DaemonInit(const char *pname, int facility)
|
||||
{
|
||||
int i;
|
||||
pid_t pid;
|
||||
|
||||
if ( (pid = fork()) < 0) /* parent terminates */
|
||||
err_sys("%s: %s: fork (%d)",
|
||||
FILE_MACRO, FUNCTION_MACRO, LINE_MACRO);
|
||||
else if (pid != 0)
|
||||
exit(0); /* parent goes bye-bye */
|
||||
|
||||
/* 41st child continues */
|
||||
setsid(); /* become session leader */
|
||||
|
||||
signal(SIGHUP, SIG_IGN);
|
||||
|
||||
if ( (pid = fork()) < 0) /* 1st child terminates */
|
||||
err_sys("%s: %s: fork (%d)",
|
||||
FILE_MACRO, FUNCTION_MACRO, LINE_MACRO);
|
||||
else if (pid != 0)
|
||||
exit(0); /* 1st child goes bye-bye */
|
||||
|
||||
|
||||
// chdir("/"); /* change working directory */
|
||||
|
||||
umask(0); /* clear our file mode creation mask */
|
||||
|
||||
for (i = 0; i < MAXFD; i++)
|
||||
close(i);
|
||||
|
||||
openlog(pname, LOG_PID, facility);
|
||||
}
|
||||
/*@end@*/
|
||||
114
plat/iptrans/src/error.c
Normal file
114
plat/iptrans/src/error.c
Normal file
@@ -0,0 +1,114 @@
|
||||
#include <stdio.h>
|
||||
#include <errno.h> /* for definition of errno */
|
||||
#include <stdarg.h> /* ANSI C header file */
|
||||
#include <string.h>
|
||||
#include "./include/iptrans.h"
|
||||
|
||||
static void err_doit(int, const char *, va_list);
|
||||
|
||||
char *pname = NULL; /* caller can set this from argv[0] */
|
||||
|
||||
/*
|
||||
** Nonfatal error related to a system call.
|
||||
** Print a message and return.
|
||||
*/
|
||||
|
||||
/*@ignore@*/
|
||||
void
|
||||
err_ret(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
err_doit(1, fmt, ap);
|
||||
va_end(ap);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
** Fatal error related to a system call.
|
||||
** Print a message and terminate.
|
||||
*/
|
||||
|
||||
void
|
||||
err_sys(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
err_doit(1, fmt, ap);
|
||||
va_end(ap);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
** Fatal error related to a system call.
|
||||
** Print a message, dump core, and terminate.
|
||||
*/
|
||||
|
||||
void
|
||||
err_dump(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
err_doit(1, fmt, ap);
|
||||
va_end(ap);
|
||||
abort(); /* dump core and terminate */
|
||||
exit(1); /* shouldn't get here */
|
||||
}
|
||||
|
||||
/*
|
||||
** Nonfatal error unrelated to a system call.
|
||||
** Print a message and return.
|
||||
*/
|
||||
|
||||
void
|
||||
err_msg(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
err_doit(0, fmt, ap);
|
||||
va_end(ap);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
** Fatal error unrelated to a system call.
|
||||
** Print a message and terminate.
|
||||
*/
|
||||
|
||||
void
|
||||
err_quit(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
err_doit(0, fmt, ap);
|
||||
va_end(ap);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
** Print a message and return to caller.
|
||||
** Caller specifies "errnoflag".
|
||||
*/
|
||||
|
||||
static void
|
||||
err_doit(int errnoflag, const char *fmt, va_list ap)
|
||||
{
|
||||
int errno_save;
|
||||
char buf[MAXLINE];
|
||||
|
||||
errno_save = errno; /* value caller might want printed */
|
||||
vsprintf(buf, fmt, ap);
|
||||
if (errnoflag)
|
||||
sprintf(buf+strlen(buf), ": %s", strerror(errno_save));
|
||||
strcat(buf, "\n");
|
||||
fflush(stdout); /* in case stdout and stderr are the same */
|
||||
fputs(buf, stderr);
|
||||
fflush(NULL); /* flushes all stdio output streams */
|
||||
return;
|
||||
}
|
||||
/*@end@*/
|
||||
131
plat/iptrans/src/errorlog.c
Normal file
131
plat/iptrans/src/errorlog.c
Normal file
@@ -0,0 +1,131 @@
|
||||
/* Error routines for programs that can run as a daemon. */
|
||||
|
||||
#include <errno.h> /* for definition of errno */
|
||||
#include <stdarg.h> /* ANSI C header file */
|
||||
#include <syslog.h>
|
||||
#include "./include/iptrans.h"
|
||||
|
||||
static void log_doit(int, int, const char *, va_list ap);
|
||||
|
||||
int debug=1; /* caller must define and set this:
|
||||
nonzero if interactive, zero if daemon */
|
||||
|
||||
int under_develop=1; /* caller must define and set this:
|
||||
nonzero if under develop, zero if not */
|
||||
|
||||
|
||||
/*@ignore@*/
|
||||
/* Initialize syslog(), if running as daemon. */
|
||||
void
|
||||
log_open(const char *ident, int option, int facility)
|
||||
{
|
||||
if (debug == 0)
|
||||
openlog(ident, option, facility);
|
||||
}
|
||||
|
||||
/*
|
||||
** Nonfatal error related to a system call.
|
||||
** Print a message with the system's errno value and return.
|
||||
*/
|
||||
|
||||
void
|
||||
log_ret(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
log_doit(1, LOG_ERR, fmt, ap);
|
||||
va_end(ap);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
** Fatal error related to a system call.
|
||||
** Print a message and terminate.
|
||||
*/
|
||||
|
||||
void
|
||||
log_sys(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
log_doit(1, LOG_ERR, fmt, ap);
|
||||
va_end(ap);
|
||||
exit(2);
|
||||
}
|
||||
|
||||
/*
|
||||
** Nonfatal error unrelated to a system call.
|
||||
** Print a message and return.
|
||||
*/
|
||||
|
||||
void
|
||||
log_msg(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
log_doit(0, LOG_ERR, fmt, ap);
|
||||
va_end(ap);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
** Debug message unrelated to a system call.
|
||||
** Print a message and return while .
|
||||
*/
|
||||
|
||||
void
|
||||
log_debug(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (!under_develop) return;
|
||||
va_start(ap, fmt);
|
||||
log_doit(0, LOG_ERR, fmt, ap);
|
||||
va_end(ap);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
** Fatal error unrelated to a system call.
|
||||
** Print a message and terminate.
|
||||
*/
|
||||
|
||||
void
|
||||
log_quit(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
log_doit(0, LOG_ERR, fmt, ap);
|
||||
va_end(ap);
|
||||
exit(2);
|
||||
}
|
||||
|
||||
/*
|
||||
** Print a message and return to caller.
|
||||
** Caller specifies "errnoflag" and "priority".
|
||||
*/
|
||||
|
||||
static void
|
||||
log_doit(int errnoflag, int priority, const char *fmt, va_list ap)
|
||||
{
|
||||
int errno_save;
|
||||
char buf[MAXLINE];
|
||||
|
||||
errno_save = errno; /* value caller might want printed */
|
||||
vsprintf(buf, fmt, ap);
|
||||
if (errnoflag)
|
||||
sprintf(buf+strlen(buf), ": %s", strerror(errno_save));
|
||||
strcat(buf, "\n");
|
||||
if (debug) {
|
||||
fflush(stdout);
|
||||
fputs(buf, stderr);
|
||||
fflush(stderr);
|
||||
} else
|
||||
syslog(priority, buf);
|
||||
return;
|
||||
}
|
||||
/*@end@*/
|
||||
3
plat/iptrans/src/generate_iptrans
Normal file
3
plat/iptrans/src/generate_iptrans
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
gcc -o iptrans iptrmain.c -L../lib/ -liptrans -L../../debug/lib -ldebug -lcurses -L../../snmp/lib -lsnmp -L../../public/lib -lpublic -lm
|
||||
23
plat/iptrans/src/include/config.h
Normal file
23
plat/iptrans/src/include/config.h
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
** PACS-WLL 2000 project, Prepaid System.
|
||||
**
|
||||
** The module Copyright (C) 2000-2001 interWAVE Inc.
|
||||
** Written completely by Zhang Shuzhong at iCRD January, 2001
|
||||
**
|
||||
** module name: config.h
|
||||
** CVS $Id: config.h,v 1.2 2001/01/11 04:07:56 zhangsz Exp $
|
||||
**
|
||||
** configuration of Prepaid System.
|
||||
**
|
||||
*/
|
||||
|
||||
#ifndef CONFIG__H
|
||||
#define CONFIG__H
|
||||
|
||||
#define HAVE_FUNCTION_MACRO 1
|
||||
#define HAVE_FILE_MACRO 1
|
||||
#define HAVE_TIME_MACRO 1
|
||||
#define HAVE_DATE_MACRO 1
|
||||
#define HAVE_LINE_MACRO 1
|
||||
|
||||
#endif /* endof CONFIG__H */
|
||||
37
plat/iptrans/src/include/dbsync.h
Normal file
37
plat/iptrans/src/include/dbsync.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
** PACS-WLL 2000 project, Prepaid System.
|
||||
**
|
||||
** The module Copyright (C) 2000-2001 interWAVE Inc.
|
||||
** Written completely by Zhang Shuzhong at iCRD January, 2001
|
||||
**
|
||||
** file name: dbsync.h
|
||||
** CVS $Id: dbsync.h,v 1.2 2001/02/08 10:53:33 zhangsz Exp $
|
||||
**
|
||||
** Defination for Database Synchronization (dbsync.c).
|
||||
*/
|
||||
|
||||
#ifndef DBSYNC__H
|
||||
#define DBSYNC__H
|
||||
|
||||
#include "iptrans.h"
|
||||
|
||||
#define DS_PORT_NO 4959 /* Prepaid service port */
|
||||
#define DS_PORT_ID DS_PORT_NO - PORT_BASE_NUM
|
||||
|
||||
#define DS_SHM_KEY 0x80000000
|
||||
#define DS_SHM_PERM 0664
|
||||
#define DS_MSG_TYPE "D0"
|
||||
#define DS_DBNAME_MAX_LEN 14
|
||||
#define DS_SQLSCRIPT_MAX_LEN MAX_CONTENT_LEN-DS_DBNAME_MAX_LEN-2
|
||||
|
||||
typedef struct _dbsync_msg {
|
||||
char type[2];
|
||||
char db_name[DS_DBNAME_MAX_LEN];
|
||||
char sql_script[DS_SQLSCRIPT_MAX_LEN];
|
||||
} _dbsync_msg;
|
||||
|
||||
typedef struct ds_shm {
|
||||
char time_created[15];
|
||||
} ds_shm;
|
||||
|
||||
#endif /* DBSYNC__H */
|
||||
53
plat/iptrans/src/include/debug.h
Normal file
53
plat/iptrans/src/include/debug.h
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
** PACS-WLL 2000 project, Prepaid System.
|
||||
**
|
||||
** The module Copyright (C) 2000-2001 interWAVE Inc.
|
||||
**
|
||||
** Written completely by Zhang Shuzhong at iCRD January, 2001
|
||||
**
|
||||
** file name: debug.h
|
||||
** CVS $Id: debug.h,v 1.2 2001/01/20 19:58:49 zhangsz Exp $
|
||||
**
|
||||
** The debug information defination.
|
||||
**
|
||||
*/
|
||||
|
||||
#ifndef DEBUG__H
|
||||
#define DEBUG__H
|
||||
#include "config.h"
|
||||
|
||||
#define UNDER_DEVELOP 1
|
||||
#define DEBUG 1
|
||||
|
||||
/* If we have these macros, we can add additional info to the header. */
|
||||
#ifdef HAVE_FILE_MACRO
|
||||
#define FILE_MACRO (__FILE__)
|
||||
#else
|
||||
#define FILE_MACRO ("")
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FUNCTION_MACRO
|
||||
#define FUNCTION_MACRO (__FUNCTION__)
|
||||
#else
|
||||
#define FUNCTION_MACRO ("")
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DATE_MACRO
|
||||
#define DATE_MACRO (__DATE__)
|
||||
#else
|
||||
#define DATE_MACRO ("")
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_TIME_MACRO
|
||||
#define TIME_MACRO (__TIME__)
|
||||
#else
|
||||
#define TIME_MACRO ("")
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LINE_MACRO
|
||||
#define LINE_MACRO (__LINE__)
|
||||
#else
|
||||
#define LINE_MACRO ("")
|
||||
#endif
|
||||
|
||||
#endif /* DEBUG__H */
|
||||
39
plat/iptrans/src/include/errlog.h
Normal file
39
plat/iptrans/src/include/errlog.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
** Error and log proccess functions header file,
|
||||
** to be included *after* all standard system headers
|
||||
**
|
||||
** CVS: $Id: errlog.h,v 1.2 2001/01/11 04:03:57 zhangsz Exp $
|
||||
*/
|
||||
|
||||
#ifndef ERRLOG__H
|
||||
#define ERRLOG__H
|
||||
|
||||
#include <sys/types.h> /* required for some of our prototypes */
|
||||
#include <stdio.h> /* for convenience */
|
||||
#include <stdlib.h> /* for convenience */
|
||||
#include <string.h> /* for convenience */
|
||||
#include <unistd.h> /* for convenience */
|
||||
|
||||
/* default file access permissions for new files */
|
||||
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
|
||||
|
||||
/* default permissions for new directories */
|
||||
#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
|
||||
|
||||
#define log_flag() \
|
||||
log_debug("%s: %s: %d", FILE_MACRO, FUNCTION_MACRO, LINE_MACRO)
|
||||
|
||||
void err_dump(const char *, ...); /* {App misc_source} */
|
||||
void err_msg(const char *, ...);
|
||||
void err_quit(const char *, ...);
|
||||
void err_ret(const char *, ...);
|
||||
void err_sys(const char *, ...);
|
||||
|
||||
void log_debug(const char *, ...); /* {App misc_source} */
|
||||
void log_msg(const char *, ...); /* {App misc_source} */
|
||||
void log_open(const char *, int, int);
|
||||
void log_quit(const char *, ...);
|
||||
void log_sys(const char *, ...);
|
||||
void log_ret(const char *, ...);
|
||||
|
||||
#endif /* ERRLOG__H */
|
||||
127
plat/iptrans/src/include/function.h
Normal file
127
plat/iptrans/src/include/function.h
Normal file
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
** CVS: $Id: function.h,v 1.6 2001/02/08 10:53:33 zhangsz Exp $
|
||||
**
|
||||
** function.h
|
||||
** Created at 2000/07/23
|
||||
** public domain code by Zhang Shuzhong
|
||||
**
|
||||
** Description: Header file of function definations.
|
||||
*/
|
||||
|
||||
#ifndef FUNCTION__H
|
||||
#define FUNCTION__H
|
||||
|
||||
#define DisplayContent(buf, bcd_buf, nbytes) \
|
||||
BcdToAscii(buf, bcd_buf, 2 * nbytes); \
|
||||
FormatOutput(buf, 2*nbytes, 2, ' '); \
|
||||
log_debug("packets contains (%s):\n%s", FUNCTION_MACRO, buf);
|
||||
|
||||
#define BzeroContent(content, length) \
|
||||
bzero(content+length, MAX_CONTENT_LEN-length);
|
||||
|
||||
#define WriteOutBuffer WriteToOutBuffer
|
||||
|
||||
#define WriteToOutBuffer(PROG_NAME, ip_semid, poutbuf, pbuf) \
|
||||
SemLock(PROG_NAME, ip_semid, PORT_NUM, 1, IPC_NOWAIT); \
|
||||
WriteMsg((in_buffer *) poutbuf, pbuf, OUT_LIST_NUM); \
|
||||
SemUnlock(PROG_NAME, ip_semid, PORT_NUM, 1, IPC_NOWAIT); \
|
||||
SemUnlock(PROG_NAME, ip_semid, SEM_NUM-1, 1, IPC_NOWAIT);
|
||||
|
||||
#define ReadInBuffer ReadFromInBuffer
|
||||
|
||||
#define ReadFromInBuffer(PROG_NAME, ip_semid, port_id, pinbuf, pbuf) \
|
||||
SemLock(PROG_NAME, ip_semid, port_id, 1, IPC_NOWAIT); \
|
||||
ReadMsg((in_buffer *) pinbuf, pbuf, IN_LIST_NUM); \
|
||||
SemUnlock(PROG_NAME, ip_semid, port_id, 1, IPC_NOWAIT); \
|
||||
|
||||
int InitDaemon(void); /* Initialize a daemon process */
|
||||
|
||||
void
|
||||
SetTermSignal(struct termio *ptermio, void (*handler)(int));
|
||||
|
||||
/* Initialize a daemon process */
|
||||
void DaemonInit(const char *pname, int);
|
||||
|
||||
/* passive a socket handler, from comfunc.c */
|
||||
int passivesock( const char * transport, u_short portbase, int qlen);
|
||||
|
||||
/* passive a UDP socket handler, from comfunc.c */
|
||||
int passiveUDP(u_short portbase);
|
||||
|
||||
/* Fill string 'c' into last area of 'str'. */
|
||||
void StringCat(char *str, char *c, int slen);
|
||||
|
||||
int ByteLength(BYTE *bcd, int c);
|
||||
|
||||
/* Cut string while match character c. */
|
||||
void StringCut(char *str, int c);
|
||||
|
||||
void Bstr2Hstr(char *cptr);
|
||||
|
||||
void bitstring(char *str, long byze, int biz, int strwid);
|
||||
|
||||
/* Binary string convert to int. */
|
||||
unsigned int Bstr2Int(char *cptr);
|
||||
|
||||
/* Hex string convert to int. */
|
||||
unsigned int Hstr2Int(char *cptr);
|
||||
|
||||
/* Get current hour */
|
||||
int gethour(char * hour_buf);
|
||||
int getweek(char * week_buf);
|
||||
|
||||
/* Get current hour */
|
||||
int getmin(char * min_buf);
|
||||
|
||||
/* Convert data from ASCII form to left-aligned compact BCD form. */
|
||||
void AsciiToBcd (BYTE *bcd_buf, const char *ascii_buf, int len);
|
||||
|
||||
/* Convert data from left-aligned compact BCD form to ASCII form. */
|
||||
void BcdToAscii (char *ascii_buf, const BYTE *bcd_buf, int len);
|
||||
|
||||
/* Convert data from ASCII form to right-aligned compact BCD form. */
|
||||
void AsciiToRbcd (BYTE *bcd_buf, const char *ascii_buf, int len);
|
||||
|
||||
const char *
|
||||
getdaytime(char *daytime_buf);
|
||||
|
||||
char *GetASCTime(char *timep);
|
||||
|
||||
void *
|
||||
ShmInit(int shm_id, char *prog_name, key_t key, int size, int shmflg);
|
||||
|
||||
int
|
||||
SemInit(char *prog_name, key_t key, int sem_num, int sem_flg);
|
||||
|
||||
BOOL
|
||||
SemLock(char *prog_name, int sem_id, int sem_num,
|
||||
unsigned nsops, int sem_flg);
|
||||
|
||||
BOOL
|
||||
SemUnlock(char *prog_name, int sem_id, int sem_num,
|
||||
unsigned nsops, int sem_flg);
|
||||
|
||||
BOOL
|
||||
ReadMsg(void *pbuf, void *pmsg, int max_num);
|
||||
|
||||
BOOL
|
||||
WriteMsg(void *pbuf, void *pmsg, int max_num);
|
||||
|
||||
const char *
|
||||
Inet_ntoa(const long addr);
|
||||
|
||||
const long
|
||||
Inet_pton(const char *sp);
|
||||
|
||||
char *
|
||||
FormatOutput(char *sp, size_t, int, int);
|
||||
|
||||
void
|
||||
ByteReverse(BYTE *p1, BYTE *p2, size_t size);
|
||||
void
|
||||
SafeFree(void *pmem);
|
||||
|
||||
void
|
||||
GetAsciiField(char *dest, BYTE *src, size_t n);
|
||||
|
||||
#endif
|
||||
47
plat/iptrans/src/include/includes.h
Normal file
47
plat/iptrans/src/include/includes.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
** CVS $Id: includes.h,v 1.3 2001/02/08 10:53:33 zhangsz Exp $
|
||||
** includes.h
|
||||
** Created at 2000-10-17
|
||||
** by Zhang SZ.
|
||||
** Include all header files of PACS-WLL 2000 Project.
|
||||
*/
|
||||
|
||||
#ifndef INCLUDES__H
|
||||
#define INCLUDES__H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <math.h>
|
||||
#include <memory.h>
|
||||
#include <sys/types.h>
|
||||
#include <netinet/in.h>
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <sys/sem.h>
|
||||
#include <sys/msg.h>
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
#include <net/if.h>
|
||||
#include <syslog.h>
|
||||
#include <termio.h>
|
||||
#include <fcntl.h>
|
||||
#include "public.h"
|
||||
#include "function.h"
|
||||
#include "errlog.h"
|
||||
#include "debug.h"
|
||||
|
||||
#ifndef NO_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#endif /* INCLUDES__H */
|
||||
|
||||
201
plat/iptrans/src/include/iptrans.h
Normal file
201
plat/iptrans/src/include/iptrans.h
Normal file
@@ -0,0 +1,201 @@
|
||||
/*
|
||||
**
|
||||
**
|
||||
** file name:
|
||||
**
|
||||
** header file include by IP transceiver.
|
||||
** defination of shared memory structure.
|
||||
**
|
||||
*/
|
||||
|
||||
#ifndef IPTRANS__H
|
||||
#define IPTRANS__H
|
||||
|
||||
#include "../../../public/src/include/includes.h"
|
||||
#include "../../../public/src/include/public.h"
|
||||
#include "../../../public/src/include/pub_fmt.h"
|
||||
#include "errlog.h"
|
||||
#include "debug.h"
|
||||
|
||||
#ifndef NO_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#define IN_LIST_NUM 200 /* list number of in_buffer that
|
||||
can store in the buffer space
|
||||
*/
|
||||
#define DS_LIST_NUM IN_LIST_NUM
|
||||
#define OUT_LIST_NUM 1024 /* list number of out_buffer that
|
||||
can store in the buffer space
|
||||
*/
|
||||
#define PORT_IN_NUM 24 /* number of in port defined */
|
||||
#define PORT_DS_NUM 1 /* number of port to database sync process */
|
||||
#define PORT_OUT_NUM 1 /* number of out port defined */
|
||||
#define PORT_NUM PORT_IN_NUM /* pre-defined port number */
|
||||
|
||||
/* Port service */
|
||||
#define PORT_BASE_NUM 4950 /* minimum port number */
|
||||
#define MAX_CONTENT_LEN 1514
|
||||
|
||||
/* IP transceiver shared memory ipc key and permission */
|
||||
#define IPTRANS_SHM_KEY 0x60000000
|
||||
#define IPTRANS_SHM_PERM 0777
|
||||
#define IPTRANS_DEBUG_SHM 0x61610000
|
||||
#define IPTRANS_DEBUG_PERM 0664
|
||||
|
||||
/* IP transceiver semaphore ipc key and permission */
|
||||
#define RELEASE 1 /* release semaphore */
|
||||
#define ACQUIRE -1 /* acquire semaphore */
|
||||
#define MAX_STATISTICS_SEG 96
|
||||
|
||||
#define _msg_list message_list
|
||||
typedef struct message_list {
|
||||
unsigned int msgSrcIP; //long msgSrcIP; /* ip number of source host */
|
||||
u_short msgSrcPort; /* port of source host */
|
||||
unsigned int msgDstIP; //long msgDstIP; /* ip number of Destination host */
|
||||
u_short msgDstPort; /* port of Destination host */
|
||||
int msgBroadcast; /* message sent with broadcast mode,
|
||||
0(default)/1=no/yes.
|
||||
*/
|
||||
u_short msgLength; /* message's length */
|
||||
BYTE msgContent[MAX_CONTENT_LEN]; /* message of packet received */
|
||||
} message_list;
|
||||
|
||||
typedef struct ds_msg {
|
||||
unsigned int msgSrcIP; //long msgSrcIP; /* ip number of source host */
|
||||
u_short msgSrcPort; /* port of source host */
|
||||
unsigned int msgDstIP; //long msgDstIP; /* ip number of Destination host */
|
||||
u_short msgDstPort; /* port of Destination host */
|
||||
int msgBroadcast; /* message sent with broadcast mode,
|
||||
0(default)/1=no/yes.
|
||||
*/
|
||||
u_short msgLength; /* message's length */
|
||||
char msgContent[MAX_CONTENT_LEN]; /* message of packet received */
|
||||
} db_msg;
|
||||
|
||||
typedef struct ds_buffer {
|
||||
u_short msgReadSub; /* subscript of array msgList for reader */
|
||||
u_short msgWriteSub; /* subscript of array msgList for writer */
|
||||
db_msg msgList[DS_LIST_NUM]; /* message list buffer */
|
||||
} ds_buffer;
|
||||
|
||||
#define _in_buffer in_buffer
|
||||
typedef struct in_buffer {
|
||||
u_short msgReadSub; /* subscript of array msgList for reader */
|
||||
u_short msgWriteSub; /* subscript of array msgList for writer */
|
||||
message_list msgList[IN_LIST_NUM]; /* message list buffer */
|
||||
} in_buffer;
|
||||
|
||||
#define _out_buffer out_buffer
|
||||
typedef struct out_buffer {
|
||||
u_short msgReadSub; /* subscript of array msgList for reader */
|
||||
u_short msgWriteSub; /* subscript of array msgList for writer */
|
||||
message_list msgList[OUT_LIST_NUM]; /* message list buffer */
|
||||
} out_buffer;
|
||||
|
||||
#define _port_stat port_stat
|
||||
typedef struct port_stat {
|
||||
|
||||
short portStatus; /* port status:
|
||||
0=idle 1=normal -1=abnormal
|
||||
*/
|
||||
DWORD inPackets; /* number of packets received */
|
||||
DWORD inBytes;
|
||||
DWORD outPackets; /* number of packets sent */
|
||||
DWORD outBytes;
|
||||
DWORD errorPackets; /* number of error packets received */
|
||||
} port_stat;
|
||||
|
||||
/*
|
||||
#define _port_stat port_stat
|
||||
typedef struct port_stat{
|
||||
port_stat_15m port_stat_static[PORT_NUM];
|
||||
}port_stat;
|
||||
*/
|
||||
|
||||
typedef struct debug_info
|
||||
{
|
||||
DWORD debug_status_id[20];
|
||||
BYTE debug_status;
|
||||
DWORD debug_ascin_id[20];
|
||||
DWORD debug_ascout_id[20];
|
||||
DWORD debug_name_id[20];
|
||||
DWORD debug_page_title[20];
|
||||
DWORD debug_page_line[20];
|
||||
BYTE title0_p[1024];
|
||||
BYTE title1_p[1024];
|
||||
BYTE title2_p[1024];
|
||||
BYTE title3_p[1020];
|
||||
char iptr_asciin_buf[4096];
|
||||
char iptr_asciout_buf[4096];
|
||||
BYTE port_onoff[PORT_NUM];
|
||||
BYTE port_status[PORT_NUM]; //overflow
|
||||
BYTE resettimer[4];
|
||||
DWORD logflag;
|
||||
DWORD srclog;
|
||||
DWORD dstlog;
|
||||
}debug_info;
|
||||
|
||||
|
||||
typedef struct port_configure
|
||||
{
|
||||
BYTE port_config[PORT_NUM];
|
||||
}port_configure;
|
||||
|
||||
typedef struct iptrans_cdr_rec
|
||||
{
|
||||
DWORD inPackets;
|
||||
DWORD inBytes;
|
||||
DWORD outPackets;
|
||||
DWORD outBytes;
|
||||
DWORD errorPackets;
|
||||
}iptrans_cdr_rec;
|
||||
|
||||
typedef struct iptrans_cdr_period
|
||||
{
|
||||
iptrans_cdr_rec cdr_record[PORT_NUM];
|
||||
}iptrans_cdr_period;
|
||||
|
||||
typedef struct snmp_info
|
||||
{
|
||||
BYTE process_conf;
|
||||
BYTE version[3];
|
||||
//port_configure port_conf;
|
||||
//PORT STATUS ; debug_info.port_status
|
||||
iptrans_cdr_period iptrans_cdr[96];
|
||||
}snmp_info;
|
||||
|
||||
#define _iptrans_shm iptrans_shm
|
||||
typedef struct iptrans_shm { /* type defination of IP transceiver
|
||||
shared memory
|
||||
*/
|
||||
in_buffer msgPortIn[PORT_NUM]; /* message in_buffer defination,
|
||||
a port buffer attach only a
|
||||
application module.
|
||||
*/
|
||||
out_buffer msgPortOut;
|
||||
out_buffer msgPlatPortOut;
|
||||
} iptrans_shm;
|
||||
|
||||
typedef struct _iptrans_status
|
||||
{
|
||||
port_stat msgPortStat[PORT_NUM];
|
||||
debug_info debug_msg;
|
||||
snmp_info snmp_data;
|
||||
}iptrans_status;
|
||||
|
||||
int iptrans_init();
|
||||
void iptrans_timer();
|
||||
int iptrMainInit();
|
||||
int iptrGetMessage(message_list *msgGet, int port);
|
||||
int iptrDirectRecvMsg(message_list *msgGet, u_short port);
|
||||
int iptrPutMessage(message_list msgPut);
|
||||
int iptrDirectSendMsg(message_list msgPut);
|
||||
int iptrPlatPutMessage(message_list msgPut);
|
||||
int set_iptrans(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen);
|
||||
int get_iptrans(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD *vartype);
|
||||
int trap_iptrans(BYTE oidlen, DWORD *oid_ptr, BYTE *msg_ptr, BYTE msg_len);
|
||||
int CloseTcpConn();
|
||||
extern void *iptrShmInit(int shm_id, char *prog_name, key_t key, int size, int shmflg);
|
||||
|
||||
#endif /* IPTRANS__H */
|
||||
9
plat/iptrans/src/include/iptrfunc.h
Normal file
9
plat/iptrans/src/include/iptrfunc.h
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
#ifndef _IPTR_FUNCTION
|
||||
#define _IPTR_FUNCTION
|
||||
|
||||
int init_iptrans();
|
||||
void iptr_timer_IRQ();
|
||||
void iptrans_close();
|
||||
|
||||
#endif
|
||||
93
plat/iptrans/src/ipcfunc.c
Normal file
93
plat/iptrans/src/ipcfunc.c
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
** CVS $Id: ipcfunc.c,v 1.4 2001/01/20 19:58:49 zhangsz Exp $
|
||||
**
|
||||
** ipcfunc.c
|
||||
** created at 2000/12/20
|
||||
** by Zhang SZ
|
||||
**
|
||||
** IPC functions for PACS-WLL project.
|
||||
**
|
||||
*/
|
||||
|
||||
#include "./include/iptrans.h"
|
||||
|
||||
/*@ignore@*/
|
||||
void *
|
||||
iptrShmInit(int shm_id, char *prog_name, key_t key, int size, int shmflg)
|
||||
{
|
||||
void *retp;
|
||||
char *func_name = "ShmInit";
|
||||
|
||||
shm_id = shmget(key, size, shmflg);
|
||||
if (shm_id == -1)
|
||||
{
|
||||
log_sys("%s: %s: shmget(key: %x)", prog_name, func_name, key);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
retp = shmat(shm_id, (char *)0, 0);
|
||||
if (retp == (void *) -1)
|
||||
{
|
||||
log_sys("%s: %s: shmat", prog_name, func_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return retp;
|
||||
}
|
||||
|
||||
int
|
||||
iptrSemInit(char *prog_name, key_t key, int sem_num, int sem_flg)
|
||||
{
|
||||
int initarray[sem_num];
|
||||
int sem_id, retval, i;
|
||||
char *func_name = "SemInit";
|
||||
|
||||
sem_id = semget(key, sem_num, sem_flg);
|
||||
if (sem_id == -1)
|
||||
log_sys("%s: %s: semget", prog_name, func_name);
|
||||
for (i=0; i<sem_num; i++) {
|
||||
initarray[i] = 1;
|
||||
retval = semctl(sem_id, i, SETVAL, initarray[i]);
|
||||
if (retval == -1)
|
||||
log_sys("%s: %s: semctl", prog_name, func_name);
|
||||
}
|
||||
|
||||
return sem_id;
|
||||
}
|
||||
|
||||
BOOL
|
||||
iptrSemLock(char *prog_name, int sem_id, int sem_num, unsigned nsops, int sem_flg)
|
||||
{
|
||||
int retval;
|
||||
struct sembuf lock = {0, ACQUIRE, SEM_UNDO};
|
||||
|
||||
lock.sem_num = sem_num;
|
||||
lock.sem_flg |= sem_flg;
|
||||
retval = semop(sem_id, &lock, nsops);
|
||||
if (retval == -1) {
|
||||
// char *func_name = "SemLock";
|
||||
// log_ret("%s: %s: semop(%d)", prog_name, func_name, sem_num);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
BOOL
|
||||
iptrSemUnlock(char *prog_name, int sem_id, int sem_num, unsigned nsops, int sem_flg)
|
||||
{
|
||||
int retval;
|
||||
struct sembuf unlock = {0, RELEASE, IPC_NOWAIT|SEM_UNDO};
|
||||
|
||||
unlock.sem_num = sem_num;
|
||||
unlock.sem_flg |= sem_flg;
|
||||
retval = semop(sem_id, &unlock, nsops);
|
||||
if (retval == -1) {
|
||||
// char *func_name = "SemUnlock";
|
||||
// log_ret("%s: %s: semop(%d)", prog_name, func_name, sem_num);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/*@end@*/
|
||||
51
plat/iptrans/src/ipmsgfun.c
Normal file
51
plat/iptrans/src/ipmsgfun.c
Normal file
@@ -0,0 +1,51 @@
|
||||
#include <sys/ipc.h>
|
||||
#include "./include/iptrans.h"
|
||||
|
||||
static iptrans_shm *IPTRANS_shm_ptr;
|
||||
static int IPTRANS_shm_id;
|
||||
|
||||
/*@ignore@*/
|
||||
int iptransCreate()
|
||||
{
|
||||
IPTRANS_shm_ptr = (iptrans_shm *)ShmInit(IPTRANS_shm_id,"iptrans",IPTRANS_SHM_KEY,
|
||||
sizeof(iptrans_shm),IPTRANS_SHM_PERM | IPC_CREAT);
|
||||
}
|
||||
|
||||
int GetMessage(message_list *msgGet,int port_in)
|
||||
{
|
||||
int port;
|
||||
port=port_in-PORT_BASE_NUM;
|
||||
if(IPTRANS_shm_ptr->msgPortIn[port].msgReadSub !=
|
||||
IPTRANS_shm_ptr->msgPortIn[port].msgWriteSub)
|
||||
{
|
||||
memcpy(msgGet,
|
||||
&IPTRANS_shm_ptr->msgPortIn[port].msgList[IPTRANS_shm_ptr->msgPortIn[port].msgReadSub],
|
||||
sizeof(struct message_list));
|
||||
IPTRANS_shm_ptr->msgPortIn[port].msgReadSub++;
|
||||
if(IPTRANS_shm_ptr->msgPortIn[port].msgReadSub==IN_LIST_NUM)
|
||||
IPTRANS_shm_ptr->msgPortIn[port].msgReadSub=0;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
int PutMessage(message_list msgPut)
|
||||
{
|
||||
memcpy(&IPTRANS_shm_ptr->msgPortOut.msgList[IPTRANS_shm_ptr->msgPortOut.msgWriteSub],
|
||||
&msgPut, sizeof(struct message_list));
|
||||
IPTRANS_shm_ptr->msgPortOut.msgWriteSub ++;
|
||||
if(IPTRANS_shm_ptr->msgPortOut.msgWriteSub==OUT_LIST_NUM)
|
||||
IPTRANS_shm_ptr->msgPortOut.msgWriteSub=0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int clearPort(int port_in)
|
||||
{
|
||||
int port;
|
||||
port=port_in-PORT_BASE_NUM;
|
||||
IPTRANS_shm_ptr->msgPortIn[port].msgReadSub=0;
|
||||
IPTRANS_shm_ptr->msgPortIn[port].msgWriteSub=0;
|
||||
return 1;
|
||||
}
|
||||
/*@end@*/
|
||||
1864
plat/iptrans/src/iptrans.c
Normal file
1864
plat/iptrans/src/iptrans.c
Normal file
File diff suppressed because it is too large
Load Diff
BIN
plat/iptrans/src/iptrans_bak
Normal file
BIN
plat/iptrans/src/iptrans_bak
Normal file
Binary file not shown.
100
plat/iptrans/src/iptrmain.c
Normal file
100
plat/iptrans/src/iptrmain.c
Normal file
@@ -0,0 +1,100 @@
|
||||
#include "./include/iptrans.h"
|
||||
|
||||
|
||||
|
||||
extern void iptrans_timer();
|
||||
|
||||
/*@ignore@*/
|
||||
void init_timer_interrupt(void)
|
||||
{
|
||||
struct sigaction newact;
|
||||
newact.sa_handler =iptrans_timer;
|
||||
newact.sa_flags =0;
|
||||
sigemptyset(&newact.sa_mask);
|
||||
sigaction(SIGALRM,&newact,NULL);
|
||||
}
|
||||
|
||||
void setup_interval_timer(void)
|
||||
{
|
||||
struct itimerval value;
|
||||
value.it_interval.tv_sec =0;
|
||||
value.it_interval.tv_usec =10*1000;
|
||||
value.it_value.tv_sec = 0;
|
||||
value.it_value.tv_usec = 10*1000;
|
||||
setitimer(ITIMER_REAL,&value,NULL);
|
||||
}
|
||||
|
||||
void init_timer()
|
||||
{
|
||||
init_timer_interrupt();
|
||||
setup_interval_timer();
|
||||
}
|
||||
|
||||
void interrupt_handler(int signo)
|
||||
{
|
||||
CloseTcpConn();
|
||||
}
|
||||
|
||||
int initSystem()
|
||||
{
|
||||
struct sigaction act;
|
||||
|
||||
//close(0);
|
||||
//close(1);
|
||||
//close(2);
|
||||
act.sa_handler = interrupt_handler;
|
||||
sigemptyset(&act.sa_mask);
|
||||
act.sa_flags = 0;
|
||||
if(sigaction(SIGPIPE,&act,NULL)<0)
|
||||
fprintf(stderr,"set signal failed\n");
|
||||
|
||||
system("sysctl -w net.ipv4.tcp_keepalive_time=20");
|
||||
system("sysctl -w net.ipv4.tcp_keepalive_probes=2");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
int err_flag = FALSE;
|
||||
int test_mode = FALSE;
|
||||
int ret;
|
||||
SetDebugFlag();
|
||||
|
||||
/*
|
||||
** Get option from command line.
|
||||
** option 'd' is enable to run program with daemon mode.
|
||||
*/
|
||||
while ((ret = getopt(argc, argv, "dt")) != -1)
|
||||
switch (ret)
|
||||
{
|
||||
case 'd':
|
||||
/* Set daemon mode and open a syslog */
|
||||
DaemonInit("IPTRANS", LOG_USER);
|
||||
break;
|
||||
case 't':
|
||||
test_mode = TRUE; /* test mode: bind port 4950 to recvfrom */
|
||||
break;
|
||||
case '?':
|
||||
err_flag = TRUE;
|
||||
}
|
||||
if (err_flag) {
|
||||
log_msg("Usage: %s -d -t \n", argv[0]);
|
||||
log_msg(" -d with daemon mode");
|
||||
log_msg(" -t with test mode");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
debug_init();
|
||||
initSystem();
|
||||
iptrMainInit();
|
||||
init_timer();
|
||||
|
||||
while(1){
|
||||
usleep(1);
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
/*@end@*/
|
||||
59
plat/iptrans/src/mcast_join.c
Normal file
59
plat/iptrans/src/mcast_join.c
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
#include "./include/iptrans.h"
|
||||
|
||||
/*@ignore@*/
|
||||
int
|
||||
mcast_join(int sockfd, struct sockaddr *sa, socklen_t salen,
|
||||
const char *ifname,u_int ifindex)
|
||||
{
|
||||
u_char flag=1;
|
||||
int len;
|
||||
struct hostent *myhost;
|
||||
|
||||
switch(sa->sa_family)
|
||||
{
|
||||
case AF_INET:{
|
||||
struct ip_mreq mreq;
|
||||
struct ifreq ifreq;
|
||||
memcpy(&mreq.imr_multiaddr,
|
||||
&((struct sockaddr_in *)sa)->sin_addr,
|
||||
sizeof(struct in_addr));
|
||||
if(ifindex>0){
|
||||
if(if_indextoname(ifindex,ifreq.ifr_name)==NULL){
|
||||
// errno=ENXIO;
|
||||
return(-1);
|
||||
}
|
||||
goto doioctl;
|
||||
}
|
||||
else if(ifname !=NULL){
|
||||
strncpy(ifreq.ifr_name,ifname,IFNAMSIZ);
|
||||
doioctl:
|
||||
if(ioctl(sockfd,SIOCGIFADDR,&ifreq)<0)
|
||||
return (-1);
|
||||
memcpy(&mreq.imr_interface.s_addr,
|
||||
&((struct sockaddr_in *)&ifreq.ifr_addr)->sin_addr,
|
||||
sizeof(struct in_addr));
|
||||
return (setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,
|
||||
&mreq,sizeof(mreq)));
|
||||
}
|
||||
else
|
||||
mreq.imr_interface.s_addr=htonl(INADDR_ANY);// inet_addr(name);
|
||||
// setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_IF,&flag,sizeof(flag));
|
||||
return (setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,
|
||||
&mreq,sizeof(mreq)));
|
||||
}
|
||||
default:
|
||||
// errno=EPROTONOSUPPORT;
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
mcast_set_loop(int sockfd, int onoff)
|
||||
{
|
||||
u_char flag;
|
||||
flag=onoff;
|
||||
return (setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_LOOP,
|
||||
&flag,sizeof(flag)));
|
||||
}
|
||||
/*@end@*/
|
||||
133
plat/iptrans/src/queuefunc.c
Normal file
133
plat/iptrans/src/queuefunc.c
Normal file
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
** CVS $Id: queuefunc.c,v 1.3 2001/02/08 10:53:33 zhangsz Exp $
|
||||
**
|
||||
** filename: queuefunc.c
|
||||
** created at 2000/12/29
|
||||
** by Zhang Shuzhong
|
||||
**
|
||||
** loop message queue operating functions.
|
||||
**
|
||||
*/
|
||||
|
||||
#include "./include/iptrans.h"
|
||||
|
||||
extern u_char warningFlag;
|
||||
|
||||
/*@ignore@*/
|
||||
/* Read a message from loop queue. */
|
||||
BOOL
|
||||
iptrReadMsg(void *pbuf, void *pmsg, int max_num)
|
||||
{
|
||||
in_buffer *p;
|
||||
message_list *msg_ptr;
|
||||
|
||||
p = (in_buffer *) pbuf;
|
||||
msg_ptr = (message_list *) pmsg;
|
||||
// memset(msg_ptr, EMPTY, sizeof(struct message_list));
|
||||
|
||||
/*
|
||||
** these are some messages not to be read
|
||||
** while subscript of read isn't equal to subscipt of write.
|
||||
*/
|
||||
if (p->msgReadSub == p->msgWriteSub)
|
||||
return FAILURE;
|
||||
|
||||
memcpy(msg_ptr, &p->msgList[p->msgReadSub],
|
||||
p->msgList[p->msgReadSub].msgLength + 44);
|
||||
/*message head length */
|
||||
// sizeof(struct message_list));
|
||||
/*
|
||||
** increase READ SUBSCRIPT after got a message,
|
||||
** set READ SUBSCRIPT to 0 while it equal to max_num.
|
||||
*/
|
||||
p->msgReadSub ++;
|
||||
if (p->msgReadSub == max_num)
|
||||
p->msgReadSub = 0;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/* Write a message to loop queue. */
|
||||
BOOL
|
||||
iptrWriteMsg(void *pbuf, void *pmsg, int max_num)
|
||||
{
|
||||
in_buffer *p;
|
||||
message_list *msg_ptr;
|
||||
int port;
|
||||
p = (in_buffer *) pbuf;
|
||||
msg_ptr = (message_list *) pmsg;
|
||||
memcpy(&p->msgList[p->msgWriteSub], msg_ptr,
|
||||
msg_ptr->msgLength + 44);//sizeof(struct message_list));
|
||||
|
||||
p->msgWriteSub ++;
|
||||
|
||||
|
||||
/*
|
||||
** if write subscript more than max_num,
|
||||
** write subscript equal 0.
|
||||
*/
|
||||
if (p->msgWriteSub == max_num)
|
||||
p->msgWriteSub = 0;
|
||||
|
||||
/*
|
||||
** if message written successful,
|
||||
** Read subscript is same as Write subscript,
|
||||
** then Read subsrcipt add 1.
|
||||
*/
|
||||
if (p->msgReadSub == p->msgWriteSub)
|
||||
{
|
||||
(p->msgReadSub == max_num-1) ?
|
||||
(p->msgReadSub = 0) : (p->msgReadSub ++);
|
||||
if(warningFlag){
|
||||
port = msg_ptr->msgDstPort;
|
||||
SetAsciioutMsg(1,"Warning! Port: %d overflowed!\r\n",port);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
iptrByteRev(BYTE *pbuf, BYTE *p, size_t size)
|
||||
{
|
||||
int i;
|
||||
char ch;
|
||||
|
||||
for (i=0; i<size; i++) {
|
||||
ch = *(pbuf++) >> 4;
|
||||
*pbuf <<= 4;
|
||||
*pbuf &= ch;
|
||||
}
|
||||
memcpy(p, pbuf, size);
|
||||
}
|
||||
|
||||
void
|
||||
iptrStrrev(char *sp)
|
||||
{
|
||||
char ch;
|
||||
ch = sp[0];
|
||||
sp[0] = sp[1];
|
||||
sp[1] = ch;
|
||||
}
|
||||
|
||||
void
|
||||
iptrByteReverse(BYTE *pbuf, BYTE *p, size_t size)
|
||||
{
|
||||
|
||||
int i;
|
||||
char *sp=NULL, tmpbuf[3];
|
||||
|
||||
sp = (char *) malloc(4*size + 1);
|
||||
bzero(p, size);
|
||||
|
||||
for (i=0; i<2*size; i+=2) {
|
||||
sprintf(tmpbuf, "%02x", *(pbuf++));
|
||||
tmpbuf[2]=0;
|
||||
iptrStrrev(tmpbuf);
|
||||
strncpy(sp+i, tmpbuf, 2);
|
||||
}
|
||||
AsciiToBcd(pbuf, sp, 4*size);
|
||||
memcpy(p, pbuf, 2*size);
|
||||
free(sp);
|
||||
}
|
||||
/*@end@*/
|
||||
189
plat/iptrans/src/readmsg.c
Normal file
189
plat/iptrans/src/readmsg.c
Normal file
@@ -0,0 +1,189 @@
|
||||
/*
|
||||
** PACS-WLL 2000 project, Prepaid System.
|
||||
**
|
||||
** The module Copyright (C) 2000-2001 interWAVE Inc.
|
||||
** Written completely by Zhang Shuzhong at iCRD January, 2001
|
||||
**
|
||||
** file name: iptrans.c
|
||||
** CVS: $Id: iptrans.c,v 1.9 2001/02/09 08:53:43 zhangsz Exp $
|
||||
**
|
||||
** Description: IP transceiver common module of PACS-WLL Project.
|
||||
**
|
||||
*/
|
||||
|
||||
#include "./include/iptrans.h"
|
||||
|
||||
#define PROG_NAME "iptrans"
|
||||
|
||||
extern int debug; /* defined in errorlog.c */
|
||||
extern int under_develop; /* defined in errorlog.c */
|
||||
static int iptrans_shm_id;
|
||||
static int iptrans_sem_id;
|
||||
static struct termio prev_termio;
|
||||
static iptrans_shm *iptrans_shm_ptr;
|
||||
|
||||
int GetMessage(message_list *msgGet,int port);
|
||||
void PutMessage(message_list msgPut);
|
||||
|
||||
/*@ignore@*/
|
||||
/* Set debug flag to control debug message print or not */
|
||||
void SetDebugFlag(void)
|
||||
{
|
||||
debug = DEBUG; /* DEBUG defined in debug.h */
|
||||
under_develop = UNDER_DEVELOP; /* UNDER_DEVELOP defined in debug.h */
|
||||
}
|
||||
|
||||
/*
|
||||
** Handler of terminatation,
|
||||
** process while received a signal from user.
|
||||
*/
|
||||
static void Terminate(int sig)
|
||||
{
|
||||
int retval, i;
|
||||
|
||||
usleep(100000);
|
||||
retval = (int) shmdt(0);
|
||||
if (retval == -1) log_ret("%s: %s: shmdt", PROG_NAME, FUNCTION_MACRO);
|
||||
retval = shmctl(iptrans_shm_id, IPC_RMID, NULL);
|
||||
if (retval == -1) log_ret("%s: %s: shmctl", PROG_NAME, FUNCTION_MACRO);
|
||||
retval = semctl(iptrans_sem_id, PORT_NUM, IPC_RMID, NULL);
|
||||
if (retval == -1) log_ret("%s: %s: semctl", PROG_NAME, FUNCTION_MACRO);
|
||||
exit(sig);
|
||||
}
|
||||
|
||||
int GetMessage(struct message_list *msgGet,int port)
|
||||
{
|
||||
message_list msgSend;
|
||||
if(iptrans_shm_ptr->msgPortIn[port].msgReadSub != iptrans_shm_ptr->msgPortIn[port].msgWriteSub)
|
||||
{
|
||||
memcpy(msgGet,
|
||||
&iptrans_shm_ptr->msgPortIn[port].msgList[iptrans_shm_ptr->msgPortIn[port].msgReadSub],
|
||||
sizeof(struct message_list));
|
||||
memcpy(&msgSend,msgGet,sizeof(struct message_list));
|
||||
PutMessage(msgSend);
|
||||
fprintf(stderr,"Recv msg %d.\n",port+4951);
|
||||
iptrans_shm_ptr->msgPortIn[port].msgReadSub ++;
|
||||
if(iptrans_shm_ptr->msgPortIn[port].msgReadSub==IN_LIST_NUM)
|
||||
iptrans_shm_ptr->msgPortIn[port].msgReadSub =0;
|
||||
/*
|
||||
fprintf(stderr,"iptrans state:\n port=%d\n packet in=%ld out=%ld errors=%ld %ld\n",
|
||||
port,
|
||||
iptrans_shm_ptr->msgPortStat[port].inPackets,
|
||||
iptrans_shm_ptr->msgPortStat[port].outPackets,
|
||||
iptrans_shm_ptr->msgPortStat[port].errorInPackets,
|
||||
iptrans_shm_ptr->msgPortStat[port].errorOutPackets);
|
||||
*/
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void PutMessage(struct message_list msgPut)
|
||||
{
|
||||
memcpy(&iptrans_shm_ptr->msgPortOut.msgList[iptrans_shm_ptr->msgPortOut.msgWriteSub],
|
||||
&msgPut,sizeof(struct message_list));
|
||||
|
||||
iptrans_shm_ptr->msgPortOut.msgWriteSub ++;
|
||||
if(iptrans_shm_ptr->msgPortOut.msgWriteSub==OUT_LIST_NUM)
|
||||
iptrans_shm_ptr->msgPortOut.msgWriteSub=0;
|
||||
|
||||
}
|
||||
|
||||
void timer_IRQ()
|
||||
{
|
||||
int i;
|
||||
struct message_list msgList;
|
||||
for(i=0;i<13;i++)
|
||||
{
|
||||
GetMessage(&msgList,i);
|
||||
// PutMessage(msgList);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void init_timer_interrupt(void)
|
||||
{
|
||||
struct sigaction newact;
|
||||
newact.sa_handler =timer_IRQ;
|
||||
newact.sa_flags =0;
|
||||
sigemptyset(&newact.sa_mask);
|
||||
sigaction(SIGALRM,&newact,NULL);
|
||||
}
|
||||
|
||||
void setup_interval_timer(void)
|
||||
{
|
||||
struct itimerval value;
|
||||
value.it_interval.tv_sec =0;
|
||||
value.it_interval.tv_usec =5*1000;
|
||||
value.it_value =value.it_interval;
|
||||
setitimer(ITIMER_REAL,&value,NULL);
|
||||
}
|
||||
|
||||
void init_timer()
|
||||
{
|
||||
init_timer_interrupt();
|
||||
setup_interval_timer();
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
int err_flag = FALSE;
|
||||
int test_mode = FALSE;
|
||||
int ret;
|
||||
SetDebugFlag();
|
||||
|
||||
/*
|
||||
** Get option from command line.
|
||||
** option 'd' is enable to run program with daemon mode.
|
||||
*/
|
||||
while ((ret = getopt(argc, argv, "dt")) != -1)
|
||||
switch (ret)
|
||||
{
|
||||
case 'd':
|
||||
/* Set daemon mode and open a syslog */
|
||||
DaemonInit(PROG_NAME, LOG_USER);
|
||||
break;
|
||||
case 't':
|
||||
test_mode = TRUE; /* test mode: bind port 4950 to recvfrom */
|
||||
break;
|
||||
case '?':
|
||||
err_flag = TRUE;
|
||||
}
|
||||
if (err_flag) {
|
||||
log_msg("Usage: %s -d -t \n", argv[0]);
|
||||
log_msg(" -d with daemon mode");
|
||||
log_msg(" -t with test mode");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
** Get shared memory block,
|
||||
** IPTRANS_SHM_KEY to be defined in iptrans.h.
|
||||
*/
|
||||
iptrans_shm_ptr = (iptrans_shm *) ShmInit(iptrans_shm_id, PROG_NAME,
|
||||
IPTRANS_SHM_KEY, sizeof(iptrans_shm), IPTRANS_SHM_PERM|IPC_CREAT);
|
||||
memset(iptrans_shm_ptr, 0, sizeof(iptrans_shm));
|
||||
|
||||
/*
|
||||
** Get semaphores ID used by shared memory block,
|
||||
** IPTRANS_SEM_KEY to be defined in iptrans.h.
|
||||
*/
|
||||
|
||||
SetTermSignal(&prev_termio, Terminate);
|
||||
/*
|
||||
** Open socket handler for IP transceiver.
|
||||
** maxinum number is PORT_NUM.
|
||||
*/
|
||||
init_timer();
|
||||
while(1){
|
||||
usleep(1);
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
/*@end@*/
|
||||
33
plat/iptrans/src/signal.c
Normal file
33
plat/iptrans/src/signal.c
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
** PACS-WLL 2000 project, Prepaid System.
|
||||
**
|
||||
** The module Copyright (C) 2000-2001 interWAVE Inc.
|
||||
**
|
||||
** Written completely by Zhang Shuzhong at iCRD January, 2001
|
||||
**
|
||||
** module name: signal.c
|
||||
** CVS $Id: signal.c,v 1.2 2001/01/11 04:07:56 zhangsz Exp $
|
||||
**
|
||||
** Signal functions
|
||||
**
|
||||
*/
|
||||
|
||||
#include "./include/iptrans.h"
|
||||
|
||||
/*
|
||||
** Set termination signal in a loop program,
|
||||
** handler of function mostly deal with something,
|
||||
** e.g. closing file handler, socket handler or free allocatied memory.
|
||||
*/
|
||||
/*@ignore@*/
|
||||
void
|
||||
SetTermSignal(struct termio *ptermio, void (*handler)(int))
|
||||
{
|
||||
ioctl(0, TCGETA, ptermio);
|
||||
ptermio->c_cc[VINTR] = '\x03';
|
||||
ioctl(0, TCSETA, ptermio);
|
||||
|
||||
signal(SIGINT, handler);
|
||||
signal(SIGTERM, handler);
|
||||
}
|
||||
/*@end@*/
|
||||
21
plat/iptrans/src/simu_debug.c
Normal file
21
plat/iptrans/src/simu_debug.c
Normal file
@@ -0,0 +1,21 @@
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
/*@ignore@*/
|
||||
int main()
|
||||
{
|
||||
debug_init();
|
||||
init_iptrans();
|
||||
snmp_init(4957);
|
||||
// heartbeat_init(0);
|
||||
while(1)
|
||||
{
|
||||
debug_rt();
|
||||
snmp_timer();
|
||||
// heartbeat_timer();
|
||||
usleep(1);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
/*@end@*/
|
||||
Reference in New Issue
Block a user