/*----------------------------------------------------------------*\
* Nombre : oServer.c *
* ---------------------------------------------------------------*
*----------------------------------------------------------------*
* Compile : cc -o oServer.o -c oServer.c
* Compile : cc -o oServer.o -c oServer.c -w
* Enlace Binario : cc -o oServer oServer.o -w
*----------------------------------------------------------------*
* curl -v telnet://11.212.30.70:1921
* curl -v telnet://Host56narvi.red.intra:1921
\*----------------------------------------------------------------*/
#define Equ ==
#define And &&
#define Or ||
#define SOCKET int
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
/*--------------------------------------------------------------*\
| Max of IO errors when no value is defined |
\*--------------------------------------------------------------*/
#define OVERSION "1.8.9(Release)"
#define FAILURE (-1)
#define MAX_IO_ERRORS (9999)
#define false (0)
#define true (!false)
#define TRUE 1
#define FALSE 0
/*--------------------------------------------------------------*\
| Max of Length of char * variables |
\*--------------------------------------------------------------*/
#define LMAX_FILE 220 /* Usado para variables PATH+NAMFELE.EXT */
#define LMAX_CMND 280 /* Usado para comandos and ShellScripts */
#define LMAX_MSGE 280 /* Usado para definir longitud de Mensaje */
#define LMAX_TITU 90 /* Usado para definir vars de ASUNTO de mail */
#define LSUB_MAIL 280 /* */
#define LDES_MAIL 220 /* */
#define LMAX_RESP 220 /* */
#define TENGO_Q_SALIR 0
/*--------------------------------------------------------------*\
| Definition of tipo Procedencia |
\*--------------------------------------------------------------*/
#define IS_DATANET 1
#define IS_CERRAR 5
/*--------------------------------------------------------------*\
| Functions Prototype |
\*--------------------------------------------------------------*/
int Recibe(SOCKET Socket, char * cCadena, int nBuffLen) ;
int Presentacion() ;
int GetProcedencia( char * cMensaje ) ;
int GetProcedenciav2( char * cMensaje );
void GetNameDatanetLog(char * ccDataLog);
void GetNameDatanetResp(char * ccDataResp);
void GetNameJyam11Log(char * ccJyam11Log);
void GetRespuestaDatanet(char * ccRipo, char * cNameFile);
void GrabaLogs(char * ccFileLog, char * cMessage, char * cRpta);
void GrabaDatanetLog(char * cMessage, char * cRpta);
void GrabaLogJyam11(char * cMessage );
void SendMailDataNet(char * cSubject, char * cGrupete) ;
void SaveBodyDataNet(char * cStrLine, char * ccAsunto);
void GetAsuntoMail(char * ccSubject, char * ccResp );
int GetCodigoRespuesta(char * cRespuesta);
void EliminaLogs(char * cArchivo) ;
void Rta_RTrim( char * ccDestino, char a[LMAX_FILE]);
void rtrim( char * ccDestino, char a[LMAX_MSGE]);
void ltrim( char * ccDestino, char b[LMAX_MSGE]);
void trim( char * ccDestino, char c[LMAX_MSGE]);
void AvisoToCompliance( char * cStrLine );
void ProcJyam11();
int GetPortOfListen();
void GrabaTCPULog(char * cMessage);
void QuitarEndOfLine( char *cadenaOriginal );
void QuitarExtChar( char *cadenaOriginal );
void getSubString(char *str, char *subStr, int start, int length);
static char Error110[] = "Saldo Insuficiente";
static char Error104[] = "Cuenta Invalida o Inexistente";
static char Error105[] = "Cuenta Cerrada";
static char Error106[] = "Operacion Fuera de Fecha";
static char Error107[] = "Error Interno en Particularidades De La Cuenta";
static char Error108[] = "Cuenta Bloqueada";
static char Error113[] = "Importe en Cero ";
static char Error114[] = "Param.Divisa del Movim. Faltante ";
static char Error999[] = "Error Interno. No Se Ejecuta Bloqueo de Saldo en PALLAS II";
static char ErrorDef[] = "Error Indefinido";
/*-------------------------------------------------------------*\
| Nombre......: main() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: |
| ............: |
\*-------------------------------------------------------------*/
int main(int argc, char *argv[]) {
SOCKET ServerSocket = 0;
SOCKET ClientSocket = 0;
struct sockaddr_in ServerInetAddress = { 0,0,0,0}; struct linger linger = { 0 , 0 }; long InetAddressLen = sizeof(ServerInetAddress);
int port = 0,
nLen = 0;
int bNoDelay = 1;
int nSysProcd = 0;
char ccTcplog[LMAX_MSGE] = {0x00};
char ccRegLog[LMAX_MSGE] = {0x00}; char scCadena[LMAX_MSGE] = {0x00}; char cCadena [LMAX_MSGE] = {0x00}; char *pCadena = cCadena;
char cc_Jcl_GLVER34[LMAX_MSGE] = {0x00}; char cDatanetLog[LMAX_FILE] = {0x00} ; char cDatanetRta[LMAX_FILE] = {0x00} ;
char ccResp[LMAX_FILE] = {0x00}; char cAsunto[LMAX_TITU] = {0x00} ;
int iConDatanet = 0;
int iCblo = 0;
int idErroneos = 0;
int ioErroneos = 0;
int EstoyActivo = 1;
char ccCblo[6] = {0x00} ;
pthread_attr_t tattr;
pthread_t handJyam11;
void *status;
/*======================================*/
char client_ip[INET_ADDRSTRLEN];
/*======================================*/
time_t RawTime;
char ccRawTime[25] = {0x00} ;
char cDreamTeam[LDES_MAIL] = "polan.truv@au.korean.com,golen.fgf@au.korean.com";
char cCapitMarket[LDES_MAIL] = "Sea.bo.capmarket@ua.korean.com,ism.vera@au.korean.com";
Presentacion() ;
/*--------------------------------------------------*\
* Allocate the server's socket descriptor *
\*--------------------------------------------------*/
if ((ServerSocket = socket(AF_INET,SOCK_STREAM, 0)) == FAILURE) { printf("Error de creacion del socket\r\n"); system( "GLVER34 MAIL" );
exit(FAILURE);
}
printf("Socket creado\r\n"); /*--------------------------------------------------*\
* Set the linger option to force immediate closing*
\*--------------------------------------------------*/
linger.l_onoff = 1; /* turn on timer */
linger.l_linger = 0; /* close immediately */
if ((setsockopt(ServerSocket, SOL_SOCKET, SO_LINGER, (char *)(&linger), sizeof(linger))) == FAILURE)
{ printf("Error de opcion sobre el socket - linger\r\n"); system( "GLVER34 MAIL" );
exit(FAILURE);
}
/*--------------------------------------------------*\
* Don't buffer up requests - send them immediately*
\*--------------------------------------------------*/
if ((setsockopt(ServerSocket, IPPROTO_TCP, TCP_NODELAY, (char *)(&bNoDelay), sizeof(bNoDelay))) == FAILURE) { printf("Error de creacion del socket - delay\r\n"); system( "GLVER34 MAIL" );
exit(FAILURE);
}
GetNameDatanetLog(cDatanetLog);
printf("LOG Datanet \t %s \n", cDatanetLog) ;
printf("***************************************************************************\r\n"); printf("Transferencias Datanet Online ONLINE \t\t Version %s \n", OVERSION); printf("***************************************************************************\r\n"); GetNameDatanetResp(cDatanetRta);
/*--------------------------------------------------*\
* Initialize the socket address so we can bind it *
\*--------------------------------------------------*/
/*
|
| port = atoi(argv[1]);
| ---------------------
*/
port=GetPortOfListen();
printf("Port Number[ %i ]\n", port);
memset(&ServerInetAddress, 0x00, sizeof(ServerInetAddress));
ServerInetAddress.sin_family = AF_INET;
ServerInetAddress.sin_addr.s_addr = INADDR_ANY; /* Let anyone connect */
ServerInetAddress.sin_port = htons(port);
/*------------------------------------------*\
* Bind socket to the well-known port number *
\*------------------------------------------*/
if (bind(ServerSocket, (struct sockaddr*)&ServerInetAddress, sizeof(ServerInetAddress)) == FAILURE)
{ printf("Error de enlace al socket\r\n"); system( "GLVER34 MAIL" );
exit(FAILURE);
}
/*--------------------------------------------------*\
* Show we are willing to listen *
\*--------------------------------------------------*/
if (listen(ServerSocket, 1) == FAILURE) {
printf("Error de escucha sobre el socket\r\n"); system( "GLVER34 MAIL" );
exit(FAILURE);
}
EstoyActivo=1;
while ( EstoyActivo ) { printf("Escuchando...\r\n"); /*if ((ClientSocket = accept(ServerSocket, (struct sockaddr*)&ServerInetAddress, &InetAddressLen)) == FAILURE) */
if ((ClientSocket = accept(ServerSocket , (struct sockaddr*)&ServerInetAddress,(socklen_t *)&InetAddressLen)) == FAILURE) { printf("Error de aceptacion sobre el socket\r\n"); system( "GLVER34 MAIL" );
exit(FAILURE);
}
memset(ccTcplog, '\0', sizeof(ccTcplog));
memset(ccRawTime, '\0', sizeof(ccRawTime));
time(&RawTime);
sprintf(ccRawTime,"%s", ctime( &RawTime ) );
/*===========================================================================================*/
inet_ntop(AF_INET, &(ServerInetAddress.sin_addr), client_ip, INET_ADDRSTRLEN);
/* printf("Client IP: %s\n", client_ip); */ printf("Conexion IP [%s] aceptada:(handle: %i) Hora [%s]\n", client_ip, ClientSocket, ccRawTime); sprintf(ccTcplog, "IP[ %s ] Conectada a Hs:[ %s ] ", client_ip, ctime( &RawTime ) );
// QuitarEndOfLine( ccTcplog );
GrabaTCPULog( ccTcplog );
/*===========================================================================================*/
/*
printf("Conexion cliente aceptada:(%i)\r\n",ClientSocket); */
/*---------------------------------*\
* Recibe data from the client *
\*---------------------------------*/
memset( scCadena, '\0', sizeof(scCadena));
memset( cCadena, '\0', sizeof( cCadena));
if ((nLen=Recibe(ClientSocket, scCadena, sizeof(scCadena)-1)) < 0) { close(ClientSocket);
ClientSocket = 0;
printf("Conexion cliente cerrada\r\n"); system( "GLVER34 ERROR" );
continue ;
} else { QuitarExtChar( scCadena ); /**/
memset(ccTcplog, '\0', sizeof(ccTcplog));
strncpy(ccTcplog, scCadena, 228);
printf("acabo de recibir:(%s)\r\n", ccTcplog); memset(ccTcplog, '\0', sizeof(ccTcplog));
strncpy(ccTcplog, scCadena, 220);
GrabaTCPULog( ccTcplog );
memset(ccRawTime, '\0', sizeof(ccRawTime));
time(&RawTime);
sprintf(ccRawTime,"%s", ctime( &RawTime ) );
/* printf("Recv of Time: %s\n", ccRawTime); */
memset(ccRegLog, '\0', sizeof(ccRegLog));
rtrim( cCadena, scCadena );
pCadena = cCadena ;
/* printf("(%s)\r\n", cCadena); */ memcpy(scCadena, cCadena, LMAX_MSGE );
sprintf(ccRegLog, "%s : %s\n", cCadena , ccRawTime );
/* printf("%s \n", ccRegLog); */
memcpy(scCadena, cCadena, LMAX_MSGE );
QuitarEndOfLine( cCadena );
nSysProcd=GetProcedenciav2( cCadena );
switch (nSysProcd)
{ case IS_DATANET:
memset(cc_Jcl_GLVER34, '\0', sizeof(cc_Jcl_GLVER34));
strncpy(cc_Jcl_GLVER34,"GLVER34 ",7) ;
/*-------------------------------------------------*\
* PONE DELIMTADOR DE DOBLES COMILLAS *
\*-------------------------------------------------*/
/*
| strcat( cc_Jcl_GLVER34, "\"") ;
*/
strcat( cc_Jcl_GLVER34, "\"");
strcat( cc_Jcl_GLVER34, cCadena);
strcat( cc_Jcl_GLVER34, "\"");
/*
| strncat( cc_Jcl_GLVER34, "\"", 1) ;
*/
/*-------------------------------------------------*\
* EJECUTA EL JCL SELECCIONADO * 1234567890
\*-------------------------------------------------*/
/*
| printf("[%s]\n", cc_Jcl_GLVER34); */
system( cc_Jcl_GLVER34 ) ;
memset( ccResp, '\0', sizeof(ccResp));
GetRespuestaDatanet(ccResp, cDatanetRta);
iCblo=0;
memset( ccCblo, '\0', sizeof(ccCblo));
strncpy(ccCblo, &ccResp[46], 3);
iCblo=atoi(ccCblo) ;
printf("Respuesta[%s] Numerico[%i]\n", ccResp, iCblo ); /*=======================================================*/
/* iCblo=GetCodigoRespuesta(ccResp); */
/* printf("GetCodigoRespuesta(ccResp)=[%i] \n",iCblo) ; */ /*=======================================================*/
GrabaTCPULog( ccResp );
if ( iCblo Equ 120) { printf("ccRegLog=[%s] \n",ccRegLog) ; GrabaLogJyam11( ccRegLog );
}
/*=======================================*/
strcat(ccResp, "\x03");
/*=======================================*/
if (send(ClientSocket, ccResp, strlen(ccResp), 0) == FAILURE) { close(ClientSocket);
ClientSocket = 0;
system( "GLVER34 ERROR" );
}
iConDatanet=iConDatanet+1;
GrabaDatanetLog(ccRegLog, ccResp) ;
/*
aqui se eleimino gran parte del codigo
que sera reemplazado por un shell
en otro job
*/
break;
case IS_CERRAR:
EstoyActivo = TENGO_Q_SALIR;
break;
default:
printf("resultado en nSysProcd: %i \r\n", nSysProcd); printf("Procedencia ERRONEA \n"); }
}
/*----------------------------------------------------*\
* INICIALIZA VARIABLE PUNTERO AL CLIENT-SOCKET*
\*----------------------------------------------------*/
printf("Respuesta Enviada....\n"); close(ClientSocket) ;
ClientSocket = 0 ;
}
/*---------------------------------------------------*\
* CLOSE THE SERVER CONNECTION - ONLY WHEN NO MORE *
* CONNECTION REQUESTS WILL BE ACCEPTED *
\*---------------------------------------------------*/
close(ServerSocket);
ServerSocket = 0;
printf("fin de programa\r\n"); return 0;
}
/*-------------------------------------------------------------*\
| Nombre......: Recibe() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: |
| ............: |
\*-------------------------------------------------------------*/
int Recibe(SOCKET Socket, char * cCadena, int nBuffLen) { int nBytesRx = 0,
nLen = 0,
nBlocklen = nBuffLen;
char *p = cCadena;
while( true ) { if ((nBytesRx = recv(Socket, p, nBlocklen - nLen, 0)) == FAILURE)
return FAILURE;
else if ( 0 == nBytesRx )
break;
if( nBlocklen - nLen == 0)
break;
if( strchr(p, 0x03) )
break;
if( strchr(p, 0x0d) )
break;
if( strchr(p, 0x0a) )
break;
if( strchr(p, 0x0D) )
break;
if( strchr(p, 0x0A) )
break;
nLen += nBytesRx;
p += nBytesRx;
}
nLen = nBlocklen;
return nLen;
}
/*-------------------------------------------------------------*\
| Nombre......: Presentacion() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: |
| ............: |
\*-------------------------------------------------------------*/
int Presentacion() { char cA2_Type_Env[LMAX_FILE]={0x00} ; char cA2_LibEnv[LMAX_FILE]={0x00} ; char cA2_Base[LMAX_FILE]={0x00} ; char cA2_OraVer[LMAX_FILE]={0x00} ; char cA2_NivPatch[LMAX_FILE]={0x00} ; char cA2_Niv_Info[LMAX_FILE]={0x00} ;
printf("***************************************************************************\r\n"); printf("GOLIAN tea \t\t\t Aires\n") ; printf("PALLAS II \t\t\t DEV\n") ; printf("***************************************************************************\r\n"); memcpy(cA2_Type_Env, getenv("A2_TYPE_ENV"), LMAX_FILE ); memcpy(cA2_LibEnv , getenv("A2_LIBENV"), LMAX_FILE ); memcpy(cA2_Base , getenv("A2_BASE"), LMAX_FILE ); memcpy(cA2_OraVer , getenv("A2_ORAVER"), LMAX_FILE ); memcpy(cA2_NivPatch, getenv("A2_NIVPATCH"), LMAX_FILE ); memcpy(cA2_Niv_Info, getenv("A2_NIV_INFO"), LMAX_FILE );
printf("Tipo Ambiente \t %s \n", cA2_Type_Env ) ; printf("Ambiente \t %s \n", cA2_LibEnv ) ; printf("Nombre de la Base \t %s \n", cA2_Base ) ; printf("Version Oracle \t %s \n", cA2_OraVer ) ; printf("Nivel de Gestab \t %s \n", cA2_NivPatch ) ; printf("Nivel de DIN \t %s \n", cA2_Niv_Info ) ; return 0;
}
/*-------------------------------------------------------------*\
| Nombre......: GetProcedencia() |
| Tipo........: int |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: SELECCION DEL SHELL A EJECUTAR DE ACUERDO A |
| ............: PROCEDENCIA DEL MENSAJE QUE PUEDE SER: |
| ............: "DATANET" |
\*-------------------------------------------------------------*/
int GetProcedencia( char * cMensaje ) {
char cProcen[8] = "" ;
int iComp1 = 0 ;
int iComp5 = 0 ;
char *pMensaje = cMensaje ;
int nResul = -1 ;
strncpy(cProcen, &pMensaje[51], 7) ;
iComp1 = strncmp(cProcen,"DATANET",7) ;
iComp5 = strncmp(cProcen,"CERRAR ",7) ;
if (iComp1!=0 && iComp5!=0)
nResul = -1 ;
if (iComp1==0)
nResul = 1 ;
if (iComp5==0)
nResul = 5 ;
return nResul ;
}
/*-------------------------------------------------------------*\
| Nombre......: int GetProcedenciav2( char * cMensaje ) |
| Tipo........: int |
| Autor.......: Golen Von Miller |
| Fecha.......: 03-04-2025 |
| ............: |
| Descripcion.: SELECCION DEL SHELL A EJECUTAR DE ACUERDO A |
| ............: PROCEDENCIA DEL MENSAJE QUE PUEDE SER: |
| ............: "DATANET" |
\*-------------------------------------------------------------*/
int GetProcedenciav2( char * cMensaje ) {
char ccCoaTrf[8] = {0x00}; int iComp1 = 0 ;
char csData[245] ={0x00}; int nResul = -1 ;
memset(csData,'\0', sizeof(csData));
memset(ccCoaTrf,'\0', sizeof(ccCoaTrf));
strcat(csData, cMensaje);
getSubString(csData, ccCoaTrf, 51, 7);
/*
printf("In getSubString [%s]\n", ccCoaTrf ); */
iComp1 = strcmp(ccCoaTrf,"DATANET") ;
if ( iComp1==0)
nResul = 1 ;
else
nResul = -1 ;
return nResul ;
}
/*-------------------------------------------------------------*\
| Nombre......: GetNameDatanetLog() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 05-05-2009 |
| ............: |
| Descripcion.: Genera el Nombre del Archivo LOG donde grabara|
| el Mensaje que llega por Socket |
\*-------------------------------------------------------------*/
void GetNameDatanetLog(char * ccDataLog) {
/* memset(ccDataLog, '\0', sizeof(ccDataLog)); */
memset(ccDataLog, '\0', LMAX_FILE);
memcpy(ccDataLog, getenv("A2_IMP"), LMAX_FILE ); /* printf("ccDataLog es : %s\n ", ccDataLog ); */
strcat(ccDataLog, "/GLVER34.DATANET.log" );
/* printf("ccDataLog es : %s\n ", ccDataLog ); */ return;
}
/*-------------------------------------------------------------*\
| Nombre......: GetNameDatanetResp() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 05-05-2009 |
| ............: |
| Descripcion.: Genera el Nombre del Archivo donde Leera la |
| PRESPUESTA del Programa Cobol que Ejecuta el |
| Mensaje para DATANET |
\*-------------------------------------------------------------*/
void GetNameDatanetResp(char * ccDataResp) { /* memset(ccDataResp, '\0', sizeof(ccDataResp)); */
memset(ccDataResp, '\0', LMAX_FILE);
memcpy(ccDataResp, getenv("A2_IMP"), LMAX_FILE ); strcat(ccDataResp, "/GLVER34.XM001.sysout" );
return;
}
/*-------------------------------------------------------------*\
| Nombre......: GetNameJyam11Log() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 08-12-2022 |
| ............: |
| Descripcion.: Genera el Nombre del Archivo LOG donde grabara|
| el Mensaje que genero una respuest 120 |
\*-------------------------------------------------------------*/
void GetNameJyam11Log(char * ccJyam11Log) { memset(ccJyam11Log, '\0', LMAX_FILE);
memcpy(ccJyam11Log, getenv("A2_IMP"), LMAX_FILE ); strcat(ccJyam11Log, "/GLVER34.SOLO120.log" );
return;
}
/*-------------------------------------------------------------*\
| Nombre......: GetRespuestaDatanet() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 05-05-2009 |
| ............: |
| Descripcion.: Lee la Respuesta de DATANET |
\*-------------------------------------------------------------*/
void GetRespuestaDatanet(char * ccRipo, char * cNameFile) { /*
| char cResp[LMAX_RESP] = {0x00}; | FILE *HandDatanet = NULL ;
| HandDatanet = fopen(cNameFile, "r") ;
| fread( cResp, 1, sizeof(cResp), HandDatanet );
| fclose( HandDatanet ) ;
| HandDatanet = NULL;
|===============================================
| memcpy(ccRipo, cResp, LMAX_RESP );
| strncpy(ccRipo, cResp, strlen(cResp) - 1);
|===============================================
| memcpy(ccRipo, cResp, LMAX_RESP );
| printf("Leido en GLVER34.XM001.sysout [%s]\n", ccRipo); | return;
*/
char cResp[LMAX_RESP] = {0x00}; FILE *HandDatanet = NULL ;
HandDatanet = fopen(cNameFile, "r") ;
fread( cResp, 1, sizeof(cResp), HandDatanet );
fclose( HandDatanet ) ;
HandDatanet = NULL;
memcpy(ccRipo, cResp, LMAX_RESP );
/*
| printf("Leido en GLVER34.XM001.sysout [%s]\n", ccRipo); */
return;
}
/*-------------------------------------------------------------*\
| Nombre......: GrabaLogs() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: Graba Logs de DATANET |
| ............: Mensaje y Respuesta |
| MODIFICACION: Golen Von Miller ( 24-08-2016 ) |
| ............: SE EXTIENDE EL LARGO DEL REGISTRO DE LOGS A |
| ............: 240 CARACTERES. |
\*-------------------------------------------------------------*/
void GrabaLogs(char * ccFileLog, char * cMessage, char * cRpta) {
time_t RawDatetime;
char ccRawDatetime[26] = {0x00}; char strAnsw[120] = {0x00}; FILE *prFileLog = NULL ;
char cRegistro[LMAX_MSGE]={0x00};
memset(ccRawDatetime, '\0', 26);
time(&RawDatetime);
sprintf(ccRawDatetime,"%s", ctime( &RawDatetime ) );
prFileLog =fopen(ccFileLog, "a+") ;
if (prFileLog == NULL) { printf("\n The file could not be opened"); exit(1);
}
printf("\n SE PUDO ABRIR EL ARCHIVO GLVER34.DATANET.log"); memset( cRegistro, '\0', LMAX_MSGE) ;
strncpy(cRegistro,cMessage, sizeof(cRegistro)-1) ;
fprintf (prFileLog, "%s \n", cRegistro) ;
Rta_RTrim( strAnsw, cRpta );
memset( cRegistro, '\0', LMAX_MSGE) ;
strcat( cRegistro, strAnsw );
strcat( cRegistro, " Envio " );
strcat( cRegistro, ccRawDatetime );
fprintf (prFileLog, "%s \n", cRegistro) ;
/*
fwrite(cRegistro, 1 , sizeof(cRegistro) , prFileLog );
printf("listo ya grabo con fwrite: %s \n", cRegistro ) ; */
fclose(prFileLog ) ;
printf("finaliza GrabaLogs de tipo void \n") ; return;
}
/*-------------------------------------------------------------*\
| Nombre......: SendMailDataNet() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: Envia Mails con Errores de DATANET |
\*-------------------------------------------------------------*/
void SendMailDataNet(char * cSubject, char * cGrupete) {
char cRmMail[]= "rm -f $A2_IMP/GLVER34.XMAIL.sysout";
char cDestino[LDES_MAIL] = {0x00}; char cComando[LMAX_CMND] = "mail -s \"DATANET ONLINE: " ;
/*
char *pAsunto = cSubject;
FILE *HandFileErr = NULL ;
char cRegError[LMAX_TITU] = {0x00} ; int nReturn = 0;
*/
char cFileErrName[LMAX_FILE]={0x00}; char *pGrupete= cGrupete;
memset(cDestino,'\0',sizeof(cDestino)-1) ;
strncpy(cDestino,&pGrupete[0], LDES_MAIL );
memcpy(cFileErrName, getenv("A2_IMP"), LMAX_FILE ); strcat(cFileErrName, "/GLVER34.XMAIL.sysout");
strcat(cComando,cSubject);
strcat(cComando,"\" ");
strcat(cComando,cDestino);
strcat(cComando," < ");
strcat(cComando,cFileErrName);
system(cRmMail);
return;
}
/*-------------------------------------------------------------*\
| Nombre......: SaveBodyDataNet() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: Graba el Cuerpo del Mail para DATANET |
\*-------------------------------------------------------------*/
void SaveBodyDataNet(char * cStrLine, char * ccAsunto) {
FILE *HandAttach = NULL ;
char cFileErrName[LMAX_FILE]={0x00}; /*
char cTituMailMail[LMAX_TITU]={0x00} ; */
char *pcStrLine = cStrLine ;
char cSucusal[6] = {0x00} ; char cRaiz[7] = {0x00} ; char cOrdinal[4] = {0x00} ; char cDivisa[4] = {0x00} ; char cImporte[16] = {0x00} ; char cTipoOpe[1] = {0x00} ; char cReferen[9] = {0x00} ; char sTipoOpe[16] = {0x00} ; int nComp = 0;
memset(cSucusal,'\0',sizeof(cSucusal));
memset(cRaiz,'\0',sizeof(cRaiz));
memset(cOrdinal,'\0',sizeof(cOrdinal));
memset(cDivisa,'\0',sizeof(cDivisa));
memset(cImporte,'\0',sizeof(cImporte));
memset(sTipoOpe,'\0',sizeof(sTipoOpe));
memset(cReferen,'\0',sizeof(cReferen));
memset(cTipoOpe,'\0',sizeof(cTipoOpe));
strncpy(cSucusal, &pcStrLine[2], 5);
strncpy(cRaiz, &pcStrLine[7], 6);
strncpy(cOrdinal, &pcStrLine[13], 3);
strncpy(cDivisa, &pcStrLine[16], 3);
strncpy(cImporte, &pcStrLine[19], 15);
strncpy(cTipoOpe, &pcStrLine[1], 1);
strncpy(cReferen, &pcStrLine[37], 8);
nComp=strncmp(cTipoOpe,"1",1) ;
if(nComp>0)
strncpy(sTipoOpe,"Credito",8);
else
strncpy(sTipoOpe,"Debito",8);
memcpy(cFileErrName, getenv("A2_IMP"), LMAX_FILE ); strcat(cFileErrName, "/GLVER34.XMAIL.sysout");
HandAttach = fopen(cFileErrName, "a") ;
if ( HandAttach!=NULL ) { fprintf(HandAttach, " \n") ;
fprintf(HandAttach, "*****************************************************************: \n") ;
fprintf(HandAttach, "Error DATANET ONLINE: %s \n", ccAsunto) ;
fprintf(HandAttach, "*****************************************************************: \n") ;
fprintf(HandAttach, "Sucusal...........: %s \n", cSucusal) ;
fprintf(HandAttach, "Raiz..............: %s \n", cRaiz) ;
fprintf(HandAttach, "Ordinal...........: %s \n", cOrdinal) ;
fprintf(HandAttach, "Divisa............: %s \n", cDivisa) ;
fprintf(HandAttach, "Importe...........: %s \n", cImporte) ;
fprintf(HandAttach, "Tipo Operacion....: %s \n", sTipoOpe) ;
fprintf(HandAttach, "Referencia........: %s \n\n\n", cReferen) ;
}
fclose(HandAttach) ;
return;
}
/*-------------------------------------------------------------*\
| Nombre......: GetAsuntoMail() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: Busca el Asunto del Mail |
\*-------------------------------------------------------------*/
void GetAsuntoMail(char * ccSubject, char * ccResp ) { char *pccResp = ccResp;
char cTituloMail[LMAX_TITU]={0x00}; int iCodigo = 0;
char cCodeRpta[4] = {0x00}; char cCodigo[100] = {0x00} ;
memset(ccSubject,'\0', LMAX_TITU );
memset(cCodeRpta,'\0', LMAX_FILE );
/* strncpy(cCodeRpta, &pccResp[0], 3); */
strncpy(cCodeRpta, &pccResp[43], 3);
iCodigo = atoi(cCodeRpta);
strncpy(cCodigo, &pccResp[0], 3);
strcat(cCodigo, " - ") ;
if (iCodigo Equ 110)
strncpy(cTituloMail,Error110,sizeof(Error110));
else if (iCodigo Equ 002)
strncpy(cTituloMail,"Error Interno de Ejecucion de BLOQUEO",38);
else if (iCodigo Equ 104)
strncpy(cTituloMail,Error104,sizeof(Error104));
else if (iCodigo Equ 105)
strncpy(cTituloMail,Error105,sizeof(Error105));
else if (iCodigo Equ 106)
strncpy(cTituloMail,Error106,sizeof(Error106));
else if (iCodigo Equ 107)
strncpy(cTituloMail,Error107,sizeof(Error107));
else if (iCodigo Equ 108)
strncpy(cTituloMail,Error108,sizeof(Error108));
else if (iCodigo Equ 113)
strncpy(cTituloMail,Error113,sizeof(Error113));
else if (iCodigo Equ 114)
strncpy(cTituloMail,Error114,sizeof(Error114));
else if (iCodigo Equ 120)
strncpy(cTituloMail,Error999,sizeof(Error999));
else if (iCodigo Equ 999)
strncpy(cTituloMail,ErrorDef,sizeof(ErrorDef));
else
strncpy(cTituloMail,"Error desconocido oo no esperado",40);
strcat(cCodigo, cTituloMail) ;
strcat(ccSubject, cCodigo) ;
return;
}
/*-------------------------------------------------------------*\
| Nombre......: GetCodigoRespuesta() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: Tipifica el Numero de Error para poder elegir |
| ............: cual de ellos se debe o no comunicar |
\*-------------------------------------------------------------*/
int GetCodigoRespuesta(char * cRespuesta) { char cCodeRpta[4] = {0x00}; char *pRespuesta= cRespuesta;
int nResult = 0;
/* memset(cCodeRpta,'\0', sizeof(cCodeRpta)); */
printf("respuesta recibida en (GetCodigoRespuesta()) [%s]\n", cRespuesta ); memset(cCodeRpta,'\0', 4*sizeof(char) );
/* strncpy(cCodeRpta, &pRespuesta[0], 3); */
strncpy(cCodeRpta, &pRespuesta[46], 3);
/* printf("respuesta capturada %s \n", cCodeRpta ); */ nResult = atoi(cCodeRpta) ;
/* printf("respuesta convertida %i \n", nResult ); */ return nResult ;
}
/*-------------------------------------------------------------*\
| Nombre......: EliminaLogs() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-07-2009 |
| ............: |
| Descripcion.: Elimina el archivo pasado por parametro |
| ............: |
\*-------------------------------------------------------------*/
void EliminaLogs(char * cArchivo) {
char cComan[LMAX_TITU] = "rm -f ";
strcat( cComan, cArchivo );
system( cComan );
return;
}
/*-------------------------------------------------------------*\
| Nombre......: Rta_RTrim( char * ccDestino,char a[LMAX_FILE])|
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 23-02-2022 |
| ............: |
| Descripcion.: Rutina para quitar los espacios finales de |
| ............: un string de tipo respuesta |
\*-------------------------------------------------------------*/
void Rta_RTrim( char * ccDestino, char a[LMAX_FILE]) {
char rtrim[LMAX_FILE]= {0x00}; int i=strlen(a)-1;
while (i>=0) { /*
| Se quitan espacion TAB y finesde linea enviados por TCP/IP '\n'
*/
if (a[i]==' '|| a[i]=='\t' || a[i]==0x0d || a[i]==0x0a ) { rtrim[i]='\0';
i = i - 1;
}
if (a[i]!=' ' && a[i]!='\t') { break;
}
}
while (i>=0) { rtrim[i]=a[i]; i= i - 1; } memcpy(ccDestino, rtrim, LMAX_FILE );
return;
}
/*-------------------------------------------------------------*\
| Nombre......: rtrim( char * ccDestino, char A[lmax_msge]) |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 31-01-2022 |
| ............: |
| Descripcion.: Rutina para quitar los espacios finales de |
| ............: un string de tipo MENSAJE |
\*-------------------------------------------------------------*/
void rtrim( char * ccDestino, char a[LMAX_MSGE]) {
char rtrim[LMAX_MSGE]= {0x00}; int i=strlen(a)-1;
while (i>=0) { /*
| Se quitan espacion TAB y finesde linea enviados por TCP/IP '\n'
*/
if (a[i]==' '|| a[i]=='\t' || a[i]==0x0d || a[i]==0x0a ) { rtrim[i]='\0';
i = i - 1;
}
if (a[i]!=' ' && a[i]!='\t') { break;
}
}
while (i>=0) { rtrim[i]=a[i]; i= i - 1; } memcpy(ccDestino, rtrim, LMAX_MSGE );
return;
}
/*-------------------------------------------------------------*\
| Nombre......: ltrim( char * ccDestino, char b[LMAX_MSGE]) |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 31-01-2022 |
| ............: |
| Descripcion.: Rutina para quitar los espacios iniciales de |
| ............: un string de tipo MENSAJE |
\*-------------------------------------------------------------*/
void ltrim( char * ccDestino, char b[LMAX_MSGE]) { char ltrim[LMAX_MSGE]= {0x00}; int i=0,j=0;
while (b[i]!='\0') { if (b[i]!=' ' && b[i]!='\t') { break;
}
i++;
}
while (b[i]!='\0') { ltrim[j]=b[i];
i++;
j++;
}
memcpy(ccDestino, ltrim, LMAX_MSGE );
return;
}
/*-------------------------------------------------------------*\
| Nombre......: trim( char * ccDestino, char c[LMAX_MSGE]) |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 31-01-2022 |
| ............: |
| Descripcion.: Rutina para quitar los espacios iniciales y |
| ............: un string de tipo MENSAJE |
\*-------------------------------------------------------------*/
void trim( char * ccDestino, char c[LMAX_MSGE]) { char rtrim[LMAX_MSGE]= {0x00}; int i=strlen(c)-1;
while (i>=0) { if (c[i]==' '|| c[i]=='\t') { rtrim[i]='\0';
}
if (c[i]!=' ' && c[i]!='\t') { break;
}
i = i - 1;
}
while (i>=0) { rtrim[i]=c[i];
i = i - 1;
}
char ltrim[LMAX_MSGE]= {0x00}; int j=0,k=0;
while (rtrim[j]!='\0') { if (rtrim[j]!=' ' && rtrim[j]!='\t') { break;
}
j++;
}
while (rtrim[j]!='\0') { ltrim[k]=rtrim[j];
j++;
k++;
}
char trim[LMAX_MSGE];
strcpy (trim, ltrim);
memcpy(ccDestino, trim, LMAX_MSGE );
return;
}
/*-------------------------------------------------------------*\
| Nombre......: AvisoToCompliance( char * cStrLine ) |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: Graba el Cuerpo del Mail a compliance con |
| ............: Detalles |
\*-------------------------------------------------------------*/
void AvisoToCompliance( char * cStrLine ) {
FILE *HandAttach = NULL ;
char ccCompliance[LMAX_FILE]={0x00};
char *pcStrLine = cStrLine ;
char *ccA2imp = getenv("A2_IMP"); char *iaminprod = getenv("I_AM_IN_PROD");
char cSucursal [5] = {0x00}; char cRaiz [6] = {0x00}; char cOrdinal [3] = {0x00}; char cDivisa [3] = {0x00}; char cImporte [15] = {0x00}; char cProcede [8] = {0x00}; char cOrdenan [29] = {0x00}; char cbenefic [29] = {0x00}; char cNameDeta[16] = {0x00};
char ccEmail[280] = "mailx -s \"Operacion demorada, aviso a Compliance: detalles\" ";
/* char ccdesti[] = "\"dl.ar.compliance.office@au.korean.com,dl.ar.bo.client.services@au.korean.com,pepe.argento@au.korean.com\" < "; */
char ccdesti[] = "\"dl.au.develop@au.korean.com\" < ";
memset(cNameDeta,'\0', sizeof(cNameDeta));
memset(cSucursal,'\0', sizeof(cSucursal));
memset(cRaiz ,'\0', sizeof(cRaiz ));
memset(cOrdinal ,'\0', sizeof(cOrdinal ));
memset(cDivisa ,'\0', sizeof(cDivisa ));
memset(cImporte ,'\0', sizeof(cImporte ));
memset(cProcede ,'\0', sizeof(cProcede ));
memset(cOrdenan ,'\0', sizeof(cOrdenan ));
memset(cbenefic ,'\0', sizeof(cbenefic ));
memset(ccCompliance,'\0', sizeof(ccCompliance));
memcpy(cNameDeta, &pcStrLine[2],17 );
cNameDeta[sizeof(cNameDeta)] = '\0';
sprintf (ccCompliance, "%s/GLVER34.%sZ.sysout", ccA2imp, cNameDeta);
memcpy(cSucursal,&pcStrLine[2],5 );
memcpy(cRaiz ,&pcStrLine[7],6 );
memcpy(cOrdinal ,&pcStrLine[13],3 );
memcpy(cDivisa ,&pcStrLine[16],3 );
memcpy(cImporte ,&pcStrLine[19],15 );
memcpy(cProcede ,&pcStrLine[51],8 );
memcpy(cOrdenan ,&pcStrLine[145],29 );
memcpy(cbenefic ,&pcStrLine[174],29 );
cSucursal[sizeof(cSucursal)] = '\0';
cRaiz [sizeof(cRaiz )] = '\0';
cOrdinal [sizeof(cOrdinal )] = '\0';
cDivisa [sizeof(cDivisa )] = '\0';
cImporte [sizeof(cImporte )] = '\0';
cProcede [sizeof(cProcede )] = '\0';
cOrdenan [sizeof(cOrdenan )] = '\0';
cbenefic [sizeof(cbenefic )] = '\0';
HandAttach = fopen(ccCompliance, "w") ;
if(HandAttach!=NULL) {
fprintf(HandAttach, " \n") ;
fprintf(HandAttach, "***************************************************************** \n") ;
fprintf(HandAttach, "Detalles \n") ;
fprintf(HandAttach, "***************************************************************** \n") ;
fprintf(HandAttach, "Sucusal...........: %s \n", cSucursal ) ;
fprintf(HandAttach, "Raiz..............: %s \n", cRaiz ) ;
fprintf(HandAttach, "Ordinal...........: %s \n", cOrdinal ) ;
fprintf(HandAttach, "Divisa............: %s \n", cDivisa ) ;
fprintf(HandAttach, "Importe...........: %s \n", cImporte ) ;
fprintf(HandAttach, "Procedencia.......: %s \n", cProcede ) ;
fprintf(HandAttach, "Ordenante.........: %s \n", cOrdenan ) ;
fprintf(HandAttach, "Beneficiario......: %s \n", cbenefic ) ;
fclose(HandAttach) ;
if ( strcmp(iaminprod, "Y")==0)
strcat(ccdesti, "\"dl.ar.kanea.off@au.korean.com,dl.arjoclienta.serv@au.korean.com,pepe.argento@au.korean.com\" < ");
else
strcat(ccdesti, "\"dl.au.develop@au.korean.com\" < ");
strcat(ccEmail, ccdesti);
strcat(ccEmail, ccCompliance );
/* printf("este es el mail: %s \n", ccEmail); */ system( ccEmail );
} else { fclose(HandAttach) ;
}
return;
}
/*-------------------------------------------------------------*\
| Nombre......: GrabaLogs() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: Graba Logs de DATANET |
| ............: Mensaje y Respuesta |
| MODIFICACION: Golen Von Miller ( 24-08-2016 ) |
| ............: SE EXTIENDE EL LARGO DEL REGISTRO DE LOGS A |
| ............: 240 CARACTERES. |
\*-------------------------------------------------------------*/
void GrabaDatanetLog(char * cMessage, char * cRpta) {
time_t RawDatetime;
struct tm * time_info;
char ccRawDatetime[26] = {0x00};
char ccFileDataNet[LMAX_FILE] = {0x00} ; char strAnsw[70] = {0x00};
FILE *prFileLog = NULL ;
char cRegistro[LMAX_MSGE]={0x00} ;
memset(ccFileDataNet, '\0', LMAX_FILE);
memcpy(ccFileDataNet, getenv("A2_IMP"), LMAX_FILE ); strcat(ccFileDataNet, "/GLVER34.DATANET.log" );
memset(ccRawDatetime, '\0', 26);
time(&RawDatetime);
time_info = localtime(&RawDatetime);
strftime(ccRawDatetime, 26, "%D %H:%M:%S", time_info);
/*
sprintf(ccRawDatetime,"%s", ctime( &RawDatetime ) );
*/
prFileLog =fopen(ccFileDataNet, "a+") ;
if (prFileLog == NULL) { printf("\n The file %s could not be opened", ccFileDataNet); exit(1);
}
fprintf (prFileLog, "[%s]\n [%s] [%s]\n", cMessage, cRpta, ccRawDatetime) ;
/*
| fwrite(strAnsw, 1 , sizeof(strAnsw) , prFileLog );
*/
fclose(prFileLog ) ;
return;
}
/*-------------------------------------------------------------*\
| Nombre......: GrabaTCPULog() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: Graba los datos del cliente IP, Fecha, Hora |
| ............: Datos recibidos y Datos enviados |
| MODIFICACION: Golen Von Miller ( 24-08-2016 ) |
| ............: SE EXTIENDE EL LARGO DEL REGISTRO DE LOGS A |
| ............: 240 CARACTERES. |
\*-------------------------------------------------------------*/
void GrabaTCPULog(char * cMessage) {
char ccFileTcpu[LMAX_FILE] = {0x00} ; char strAnsw[70] = {0x00}; FILE *prFileLog = NULL ;
char cRegistro[LMAX_MSGE]={0x00} ;
memset(ccFileTcpu, '\0', LMAX_FILE);
memcpy(ccFileTcpu, getenv("A2_IMP"), LMAX_FILE ); strcat(ccFileTcpu, "/JYAM89.TCPU89.log" );
prFileLog =fopen(ccFileTcpu, "a+") ;
if (prFileLog == NULL) { printf("\n The file %s could not be opened", ccFileTcpu); exit(1);
}
fprintf (prFileLog, "%s \n", cMessage) ;
fclose(prFileLog ) ;
return;
}
/*-------------------------------------------------------------*\
| Nombre......: GrabaLogJyam11() |
| Tipo........: void |
| Autor.......: Golen Von Miller |
| Fecha.......: 15-05-2009 |
| ............: |
| Descripcion.: Graba un log para el job jyam11 que hara |
| ............: controles para el area de cumplimiento |
| MODIFICACION: Golen Von Miller ( 24-12-2022 ) |
| ............: |
| ............: |
\*-------------------------------------------------------------*/
void GrabaLogJyam11(char * cMessage ) {
FILE *prHandFile = NULL ;
char ccRJyam11[LMAX_MSGE]={0x00} ;
char cJyam11Log[LMAX_FILE] = {0x00} ;
memset(cJyam11Log, '\0', LMAX_FILE);
memcpy(cJyam11Log, getenv("A2_IMP"), LMAX_FILE ); strcat(cJyam11Log, "/GLVER34.SOLO120.log" );
prHandFile = fopen(cJyam11Log, "a+") ;
strcat(ccRJyam11,cMessage);
fprintf(prHandFile, "%s\n", ccRJyam11) ;
fclose(prHandFile ) ;
printf("Se Grabo le mensaje que dio 120 \n\n") ; return;
}
/*--------------------------------------------------------------------*\
| Nombre......: GetPortOfListen()
| Autor.......: Golen Von Miller
| Fecha.......: 06/11/2024
| Descripcion.:
| ............:
| ............:
| ............:
\*--------------------------------------------------------------------*/
int GetPortOfListen() { char *iaminprod = getenv("I_AM_IN_PROD"); int inPort = 0;
if ( strcmp(iaminprod, "Y")==0)
inPort=1917;
else
inPort=1907;
return inPort;
}
/*------------------------------------------------------------------------*\
| Nombre......: void QuitarEndOfLine( char *cadenaOriginal );
| Tipo........: void
| Autor.......: Golen Von Miller
| Fecha.......: 14-03-2025
| ............:
| Descripcion.: Quitar el ASCII 10 de una cadena
\*------------------------------------------------------------------------*/
void QuitarEndOfLine( char *cadenaOriginal ) { char nuevaCadena[256] = "";
char caracterAQuitar = '\n';
int i, j = 0;
for (i = 0; cadenaOriginal[i] != '\0'; i++) { if (cadenaOriginal[i] != caracterAQuitar) { nuevaCadena[j++] = cadenaOriginal[i];
}
}
nuevaCadena[j] = '\0';
memset(cadenaOriginal, '\0', sizeof(cadenaOriginal)-1);
strcpy(cadenaOriginal, nuevaCadena);
}
/*------------------------------------------------------------------------*\
| Nombre......: void QuitarExtChar( char *cadenaOriginal );
| Tipo........: void
| Autor.......: Golen Von Miller
| Fecha.......: 14-03-2025
| ............:
| Descripcion.: Quitar el ASCII 03 o ETX de una cadena
\*------------------------------------------------------------------------*/
void QuitarExtChar( char *cadenaOriginal ) { char nuevaCadena[256] = "";
char caracterAQuitar = '\x03';
int i, j = 0;
for (i = 0; cadenaOriginal[i] != '\0'; i++) { if (cadenaOriginal[i] != caracterAQuitar) { nuevaCadena[j++] = cadenaOriginal[i];
}
}
nuevaCadena[j] = '\0';
memset(cadenaOriginal, '\0', sizeof(cadenaOriginal)-1);
strcpy(cadenaOriginal, nuevaCadena);
}
/*-------------------------------------------------------------*\
| Nombre......: getSubString(char *str, char *subStr, int start, int length)
| Tipo........: void
| Autor.......: Golen Von Miller
| Fecha.......: 09-01-2025
| ............:
| Descripcion.:
\*-------------------------------------------------------------*/
void getSubString(char *str, char *subStr, int start, int length) { int i;
for (i = 0; i < length && str[start + i] != '\0'; i++) { subStr[i] = str[start + i];
}
subStr[i] = '\0';
}