extern void OpenDB_RedirectPort( DBG_Struct *dbg) { int fh; DBG_Struct *rdbg; ENTER_FUNC; dbgprintf("dbg [%s]\n",dbg->name); if ( ( fNoRedirect ) || ( dbg->redirect == NULL ) ) { dbg->fpLog = NULL; dbg->redirectData = NULL; } else { rdbg = dbg->redirect; if ( ( rdbg->redirectPort == NULL ) || (( fh = ConnectSocket(rdbg->redirectPort,SOCK_STREAM) ) < 0 ) ) { dbgmsg("loging server not ready"); dbg->fpLog = NULL; dbg->redirectData = NULL; if ( !fNoCheck ){ ChangeDBStatus_Redirect(dbg, DB_STATUS_REDFAILURE); } } else { dbg->fpLog = SocketToNet(fh); dbg->redirectData = NewLBS(); if ( !RecvSTATUS_Redirect(dbg) ){ CloseDB_RedirectPort(dbg); } } } LEAVE_FUNC; }
extern void RedirectError(void) { DBG_Struct *dbg; int i; for (i = 0; i < ThisEnv->cDBG; i++) { dbg = ThisEnv->DBG[i]; CloseDB_RedirectPort(dbg); } }
extern ValueStruct *SYSDATA_DBDISCONNECT(DBG_Struct *dbg, DBCOMM_CTRL *ctrl) { if (dbg->dbstatus == DB_STATUS_CONNECT) { SendPacketClass(NBCONN(dbg), SYSDATA_END); CloseNet(NBCONN(dbg)); CloseDB_RedirectPort(dbg); dbg->dbstatus = DB_STATUS_DISCONNECT; if (ctrl != NULL) { ctrl->rc = MCP_OK; } } return (NULL); }
static ValueStruct * _DBDISCONNECT( DBG_Struct *dbg, DBCOMM_CTRL *ctrl) { ENTER_FUNC; if ( dbg->process[PROCESS_UPDATE].dbstatus == DB_STATUS_CONNECT ) { CloseDB_RedirectPort(dbg); FreeLBS((LargeByteString *)dbg->process[PROCESS_UPDATE].conn); dbg->process[PROCESS_UPDATE].dbstatus = DB_STATUS_DISCONNECT; if ( ctrl != NULL ) { ctrl->rc = MCP_OK; } } LEAVE_FUNC; return (NULL); }
extern void CommitDB_Redirect( DBG_Struct *dbg) { Bool rc = TRUE; ENTER_FUNC; if ( dbg->redirect == NULL ) return; rc = SendVeryfyData_Redirect(dbg); if ( rc ){ rc = RecvSTATUS_Redirect(dbg); } if ( !rc ){ CloseDB_RedirectPort(dbg); } LEAVE_FUNC; }
extern Bool CheckDB_Redirect( DBG_Struct *dbg) { Bool rc = TRUE; ENTER_FUNC; if ( dbg->redirect == NULL ) return rc; if ( dbg->redirectData != NULL ) { if ( dbg->fpLog != NULL ) { SendPacketClass(dbg->fpLog,RED_PING); ON_IO_ERROR(dbg->fpLog,badio); if ( RecvPacketClass(dbg->fpLog) != RED_PONG ) { badio: Warning("dbredirect server down?"); ChangeDBStatus_Redirect(dbg, DB_STATUS_REDFAILURE); CloseDB_RedirectPort(dbg); rc = FALSE; } } } LEAVE_FUNC; return (rc); }