1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
/****************************************************************************\
*
* MODULE : LANCE_DAEMON.PC
*
* TYPE : PC
*
* LIBELLE :
*
* DESCRIPTION : Ce module a pour but de formater une commande a partir
* d'une chaine extraite du pipe et de la soumettre a la
* queue batch SICOM_QUEUE_J ou SICOM_QUEUE_N .
*
*
* CREE/MODIFIE (DATE, QUI, NATURE) :
* 31/08/1995 M.CHAKIR CREATION
* 08/03/1999 T.FOLTIER MODIFICATION : Utilisation des 2 queues batch
\****************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define INVARCHAR(a,b) {strcpy((char *) a.arr,b) ; a.len=strlen((char *) a.arr); }
#define SQLCODE ((int)(sqlca.sqlcode))
EXEC SQL include sqlca;
EXEC SQL begin declare section;
varchar oUid[100];
varchar oCommande[2000];
varchar oType_rep[5];
varchar oPipe_id[30];
varchar oReponse[80];
EXEC SQL end declare section;
char zArgument[20][255] ;
char zParam[20][255] ;
char zUtilisateur[255] ;
int status;
int iNbArg;
/**********************************************************************/
void Sqlerror()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\n\n Erreur!!! %.70s\n\n",sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE ;
exit(1);
}
/**********************************************************************/
void connexion()
{
EXEC SQL WHENEVER SQLERROR DO Sqlerror();
EXEC SQL CONNECT :oUid;
printf("\n Connexion etablie \n");
}
/**********************************************************************/
void Decompose_Comm(char *Commande)
{
int i,j,k ;
j=0 ;
k=0 ;
for(i=0 ; i <= strlen(Commande) ; i++)
{
if( (Commande[i] == ' ') ||
(Commande[i] == '\n') ||
(Commande[i] == '\0') )
{
zArgument[j][k] = '\0' ;
k=0 ;
j++ ;
}
else
{
zArgument[j][k] = Commande[i] ;
k++ ;
}
}
zArgument[j][k] = '\0' ;
iNbArg=j;
strcpy(zUtilisateur,zArgument[1]);
strcpy(zArgument[1],"");
j=0;
for(i=0 ;i < iNbArg ;i++)
{
if(strcmp(zArgument[i],"") != 0)
{
strcpy(zParam[j],zArgument[i]);
j++;
}
}
}
/**********************************************************************/
void Trait_Comm(char *zQueue)
{
char zCommande[500];
sprintf(zCommande,
"ksh $COM/siges_submit_process.sh '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' ",
zParam[0],zParam[1],
zParam[2],zParam[3],zParam[4],zParam[5],
zParam[6],zParam[7],zParam[8]);
printf(" le serveur traite la commande : \n%s\n",zCommande);
status = system(zCommande);
printf(" status : [%d] \n",status);
}
/**********************************************************************/
/* Programme qui va permettre de lancer sur le serveur un demon qui */
/* sera en attente de demande de service. */
/**********************************************************************/
int main(int argc,char *argv[])
{
char zConnectString [500];
sprintf(zConnectString, getenv("CONNECT_STRING"));
printf("\n Demande de Connexion sur %s " , zConnectString );
strcpy((char *) oUid.arr,zConnectString);
oUid.len = strlen((char *) oUid.arr);
connexion();
EXEC SQL WHENEVER SQLERROR DO Sqlerror();
while(1)
{
EXEC SQL EXECUTE
BEGIN
:oCommande := STD_PIPE_SERVER.RECOIT_MESSAGE;
:oCommande := replace(:oCommande,'\','\\' );
END;
END-EXEC;
oCommande.arr[oCommande.len]='\0';
printf(" Commande recue : \n(%s)\n",(char *) oCommande.arr);
if(strcmp((char *) oCommande.arr,"LOCAL STOP") == 0)
{
break ;
}
Decompose_Comm((char *) oCommande.arr);
INVARCHAR(oPipe_id,zArgument[2]);
EXEC SQL EXECUTE
BEGIN
STD_PIPE_SERVER.ENVOIT_REP('DEB','Traitement soumis, consulter les messages dans suivi de traitements',:oPipe_id);
END;
END-EXEC;
Trait_Comm("") ;
}
printf("\n Deconnexion du daemon...");
EXEC SQL ROLLBACK RELEASE ;
exit(0);
} |
Partager