![]() | ![]() | ![]() |
![]() ![]() ![]() |
dbServer dbserver = db_unknown;
int midInited = 0;
/*
*--------------------------------------------------------------
*
* mid_init
*
*--------------------------------------------------------------
*/
void
mid_init(const char *conf)
{
const char fname[] = "mid_init";
const char *server ;
if ( !conf || !*conf ) {
myconfig_read(MIDWARE_CONFIG_FIENAME);
} else {
myconfig_read(conf);
}
server = myconfig_getstring("backend_server",NULL);
if ( !server || !*server ) {
syslog(LOG_ERR,"[%s]invalid 'backend_server' in conf file",fname);
exit(1); /* yes, we exit directly */
}
/* judge what backend server is */
if ( !strcasecmp(server,BACKEND_MYSQL) ) {
syslog(LOG_DEBUG3,"[%s]backend server is %s",fname,BACKEND_MYSQL);
dbserver = db_mysql;
} else if ( !strcasecmp(server,BACKEND_ORACLE) ) {
syslog(LOG_DEBUG3,"[%s]backend server is %s",fname,BACKEND_ORACLE);
dbserver = db_oracle;
} else if ( !strcasecmp(server,BACKEND_BERKELEYDB) ) {
syslog(LOG_DEBUG3,"[%s]backend server is %s",fname,BACKEND_BERKELEYDB);
dbserver = db_berkeleydb;
} else {
dbserver = db_unknown;
syslog(LOG_CRIT,"[%s]unknown backend server: %s",fname,server);
exit(1);
}
midInited = 1;
} /* mid_init */
/*
*------------------------------------------------------------------------
*
* sendCmd
*
* -- midware protocol implementation on midwared client side
*
* ask midware server something via unix domain socket
*
* RET:
* CMD_ERR_SYS: system error
* CMD_INVALID: null cmd sent to midwared server
* CMD_OK : ok
*
*------------------------------------------------------------------------
*/
static cmdResult
sendCmd(char *cmd,char *sqlcmd,const char *param2,const char *param3,
const char *param4,char **reply)
{
const char fname[]="sendCmd";
int s; int r,iovcount=0;
struct sockaddr_un srvaddr;
struct iovec iov[6];
static char response[MAX_REP_LEN];
char sockfile[1024];
int start, n;
if (reply) *reply = NULL;
if ( !cmd || !*cmd ) {
syslog(LOG_ERR,"[%s]null cmd specified",fname);
return CMD_INVALID;
}
/* create socket and connect to midware server */
s = socket(AF_UNIX, SOCK_STREAM, 0);
if (s == -1) {
syslog(LOG_CRIT,"[%s]create socket failed: %m",fname);
return CMD_ERR_SYS;
}
memset(sockfile,0,sizeof(sockfile));
strncpy(sockfile, myconfig_getstring("unixsock_dir",DEFAULT_MIDWARED_DIR) ,
sizeof(sockfile));
strcat(sockfile,"/");
strcat(sockfile,SOCKET_FILENAME);
syslog(LOG_DEBUG3,"[%s]socket filename: %s",fname,sockfile);
memset((char *)&srvaddr, 0, sizeof(srvaddr));