/***************************************************************************/ /* "Mario Paranhos" as released on peg */ /***************************************************************************/ FUNCTION pingHost RETURNS LOGICAL (INPUT chrDBHost AS CHARACTER): DEFINE VARIABLE pingResponse AS CHARACTER NO-UNDO. DEFINE VARIABLE pingValidResponseUNIX AS CHARACTER NO-UNDO. DEFINE VARIABLE pingValidResponseNT AS CHARACTER NO-UNDO. DEFINE VARIABLE pingValidResponse AS CHARACTER NO-UNDO. DEFINE VARIABLE pingUNIX AS CHARACTER NO-UNDO. DEFINE VARIABLE pingNT AS CHARACTER NO-UNDO. DEFINE VARIABLE pingCMD AS CHARACTER NO-UNDO. DEFINE VARIABLE pingTimeOut AS INTEGER NO-UNDO. DEFINE VARIABLE hostAlive AS LOGICAL NO-UNDO. ASSIGN pingValidResponseUNIX = "9 bytes from" pingValidResponseNT = "Reply from" pingTimeOut = 50 /* Windows is in milliseconds, UNIX seconds */ pingNT = "ping -l 1 -n 1 -w " + STRING(pingTimeOut) + " " + chrDBHost. pingUNIX = "ping -s 1 -c 1 -w " + STRING(pingTimeOut) + " " + chrDBHost. . IF "{&opsys}" = "UNIX" THEN ASSIGN pingCMD = pingUNIX pingValidResponse = pingValidResponseUNIX. ELSE ASSIGN pingCMD = pingNT pingValidResponse = pingValidResponseNT. INPUT THROUGH VALUE(pingCMD). pingLoop: REPEAT: IMPORT UNFORMATTED pingResponse. IF pingResponse BEGINS pingValidResponse THEN DO: ASSIGN hostAlive = TRUE. LEAVE pingLoop. END. END. INPUT CLOSE. RETURN hostAlive. END FUNCTION. /* pingHost */ FUNCTION serverIsUp RETURN LOGICAL (INPUT pServer AS CHARACTER, INPUT pPort AS CHARACTER): DEFINE VARIABLE hSocket AS HANDLE NO-UNDO. DEFINE VARIABLE lStatus AS LOGICAL NO-UNDO. CREATE SOCKET hSocket. ASSIGN lStatus = hSocket:CONNECT("-H " + pServer + " -S " + pPort) NO-ERROR. hSocket:DISCONNECT(). DELETE OBJECT hSocket. ASSIGN hSocket = ?. RETURN lStatus. END FUNCTION. /* serverIsUp */ FUNCTION connectDB RETURNS LOGICAL (INPUT chrDBName AS CHARACTER, INPUT chrDBHost AS CHARACTER, INPUT chrDBService AS CHARACTER): IF NOT pingHost(chrDBHost) THEN RETURN FALSE. IF NOT serverIsUp(chrDBHost,chrDBService) THEN RETURN FALSE. CONNECT VALUE(chrDBName) -H VALUE(chrDBHost) -S VALUE(chrDBService) -N TCP NO-ERROR. IF ERROR-STATUS:ERROR THEN RETURN FALSE. RETURN TRUE. END FUNCTION. /* connectDB */ MESSAGE string(connectDB("DBNAME","IP","PORT")) VIEW-AS ALERT-BOX. /***************************************************************************/