Back to home page

Enduro/X

 
 

    


0001 /**
0002  * @brief Remote requests
0003  *
0004  * @file remote.c
0005  */
0006 /* -----------------------------------------------------------------------------
0007  * Enduro/X Middleware Platform for Distributed Transaction Processing
0008  * Copyright (C) 2009-2016, ATR Baltic, Ltd. All Rights Reserved.
0009  * Copyright (C) 2017-2023, Mavimax, Ltd. All Rights Reserved.
0010  * This software is released under one of the following licenses:
0011  * AGPL (with Java and Go exceptions) or Mavimax's license for commercial use.
0012  * See LICENSE file for full text.
0013  * -----------------------------------------------------------------------------
0014  * AGPL license:
0015  *
0016  * This program is free software; you can redistribute it and/or modify it under
0017  * the terms of the GNU Affero General Public License, version 3 as published
0018  * by the Free Software Foundation;
0019  *
0020  * This program is distributed in the hope that it will be useful, but WITHOUT ANY
0021  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0022  * PARTICULAR PURPOSE. See the GNU Affero General Public License, version 3
0023  * for more details.
0024  *
0025  * You should have received a copy of the GNU Affero General Public License along 
0026  * with this program; if not, write to the Free Software Foundation, Inc.,
0027  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0028  *
0029  * -----------------------------------------------------------------------------
0030  * A commercial use license is available from Mavimax, Ltd
0031  * contact@mavimax.com
0032  * -----------------------------------------------------------------------------
0033  */
0034 #include <stdio.h>
0035 #include <stdlib.h>
0036 #include <string.h>
0037 #include <errno.h>
0038 #include <regex.h>
0039 #include <utlist.h>
0040 #include <unistd.h>
0041 #include <assert.h>
0042 
0043 #include <ndebug.h>
0044 #include <atmi.h>
0045 #include <atmi_int.h>
0046 #include <typed_buf.h>
0047 #include <ndrstandard.h>
0048 #include <ubf.h>
0049 #include <ubfutil.h>
0050 #include <cconfig.h>
0051 #include "exsinglesv.h"
0052 #include <Exfields.h>
0053 #include <singlegrp.h>
0054 /*---------------------------Externs------------------------------------*/
0055 /*---------------------------Macros-------------------------------------*/
0056 /*---------------------------Enums--------------------------------------*/
0057 /*---------------------------Typedefs-----------------------------------*/
0058 /*---------------------------Globals------------------------------------*/
0059 /*---------------------------Statics------------------------------------*/
0060 /*---------------------------Prototypes---------------------------------*/
0061 
0062 /**
0063  * Local checks, may call remote server
0064  * For getting current status & clock time.
0065  * Allow clock drift for one check interval only.
0066  * @param p_svc - data & len used only... (to be in future)
0067  */
0068 void SGREM (TPSVCINFO *p_svc)
0069 {
0070     int ret=EXSUCCEED;
0071     char cmd = EXEOS;
0072     int cd;
0073     int int_diag = 0;
0074     ndrx_sg_shm_t *p_shm, local;
0075     long procgrp_no;
0076     long lck_time;
0077     UBFH *p_ub = (UBFH *)p_svc->data;
0078     
0079     tplogprintubf(log_info, "SGREM request buffer:", p_ub);
0080 
0081     /* just get the group + lock status (our local one)
0082      * and return entry...
0083      */
0084     p_shm = ndrx_sg_get(ndrx_G_exsinglesv_conf.procgrp_lp_no);
0085     assert(NULL!=p_shm);
0086     
0087     /* load local */
0088     ndrx_sg_load(&local, p_shm);
0089 
0090     procgrp_no=ndrx_G_exsinglesv_conf.procgrp_lp_no;
0091 
0092     lck_time=local.last_refresh;
0093     if (EXSUCCEED!=Bchg(p_ub, EX_TSTAMP, 0, (char *)&lck_time, 0)
0094         || EXSUCCEED!=Bchg(p_ub, EX_SEQUENCE, 0, (char *)&local.sequence, 0)
0095         || EXSUCCEED!=Bchg(p_ub, EX_LCKSTATUS, 0, (char *)&local.is_locked, 0)
0096         || EXSUCCEED!=Bchg(p_ub, EX_PROCGRP_NO, 0, (char *)&procgrp_no, 0))
0097     {
0098         TP_LOG(log_error, "Failed to set EX_TSTAMP/EX_SEQUENCE/EX_LCKSTATUS/EX_PROCGRP_NO");
0099         ndrx_exsinglesv_set_error_fmt(p_ub, TPESYSTEM, "Failed to set UBF values: %s",
0100             Bstrerror(Berror));
0101         EXFAIL_OUT(ret);
0102     }
0103 
0104     /* approve the buffer */
0105     ndrx_exsinglesv_set_error_fmt(p_ub, TPMINVAL, "Succeed");
0106     
0107 out:
0108 
0109     tplogprintubf(log_info, "SGREM reply buffer:", p_ub);
0110 
0111     tpreturn(  ret==EXSUCCEED?TPSUCCESS:TPFAIL,
0112                 0L,
0113                 (char *)p_ub,
0114                 0L,
0115                 0L);
0116 }
0117 
0118 
0119 /* vim: set ts=4 sw=4 et smartindent: */