0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
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 <signal.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
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066 void SGLOC (TPSVCINFO *p_svc)
0067 {
0068 UBFH *p_ub = (UBFH *)p_svc->data;
0069 int ret=EXSUCCEED;
0070 char cmd = EXEOS;
0071 int cd;
0072 int int_diag = 0;
0073 char lock_status;
0074 ndrx_locksm_ctx_t lockst;
0075 long lookup_grpno;
0076
0077 tplogprintubf(log_info, "SGLOC request buffer:", p_ub);
0078
0079
0080 if (EXSUCCEED!=Bget(p_ub, EX_PROCGRP_NO, 0, (char *)&lookup_grpno, 0L))
0081 {
0082 TP_LOG(log_error, "Failed to get EX_PROCGRP_NO: %s", Bstrerror(Berror));
0083 ndrx_exsinglesv_set_error_fmt(p_ub, TPEINVAL, "Failed to get EX_PROCGRP_NO: %s",
0084 Bstrerror(Berror));
0085 EXFAIL_OUT(ret);
0086 }
0087
0088 if (ndrx_G_exsinglesv_conf.procgrp_lp_no!=lookup_grpno)
0089 {
0090 TP_LOG(log_error, "Invalid EX_PROCGRP_NO server %ld, requested %ld",
0091 ndrx_G_exsinglesv_conf.procgrp_lp_no, lookup_grpno);
0092 ndrx_exsinglesv_set_error_fmt(p_ub, TPEINVAL,
0093 "Invalid EX_PROCGRP_NO server %ld, requested %ld",
0094 ndrx_G_exsinglesv_conf.procgrp_lp_no, lookup_grpno);
0095 EXFAIL_OUT(ret);
0096 }
0097
0098 ret=ndrx_exsinglesv_sg_is_locked(&lockst, EXFALSE);
0099
0100 if (EXFAIL==ret)
0101 {
0102 TP_LOG(log_error, "Failed to check lock status");
0103 ndrx_exsinglesv_set_error_fmt(p_ub, TPESYSTEM, "Failed to check lock status");
0104 EXFAIL_OUT(ret);
0105 }
0106
0107 lock_status=(char)ret;
0108 ret=EXSUCCEED;
0109
0110 if (EXSUCCEED!=Bchg(p_ub, EX_LCKSTATUS, 0, &lock_status, 0))
0111 {
0112 TP_LOG(log_error, "Failed to set EX_LCKSTATUS: %s", Bstrerror(Berror));
0113 ndrx_exsinglesv_set_error_fmt(p_ub, TPESYSTEM, "Failed to set EX_LCKSTATUS: %s",
0114 Bstrerror(Berror));
0115 EXFAIL_OUT(ret);
0116 }
0117
0118 if (EXSUCCEED!=Bchg(p_ub, EX_SEQUENCE, 0, (char *)&lockst.local.sequence, 0))
0119 {
0120 TP_LOG(log_error, "Failed to set EX_SEQUENCE: %s", Bstrerror(Berror));
0121 ndrx_exsinglesv_set_error_fmt(p_ub, TPESYSTEM, "Failed to set EX_SEQUENCE: %s",
0122 Bstrerror(Berror));
0123 EXFAIL_OUT(ret);
0124 }
0125
0126
0127 ndrx_exsinglesv_set_error_fmt(p_ub, TPMINVAL, "Succeed");
0128
0129 out:
0130 tplogprintubf(log_info, "SGLOC response buffer:", p_ub);
0131
0132 tpreturn( ret==EXSUCCEED?TPSUCCESS:TPFAIL,
0133 0L,
0134 (char *)p_ub,
0135 0L,
0136 0L);
0137 }
0138
0139