[Search for users]
[Overall Top Noters]
[List of all Conferences]
[Download this site]
Title: | NAS Message Queuing Bus |
Notice: | KITS/DOC, see 4.*; Entering QARs, see 9.1; Register in 10 |
Moderator: | PAMSRC::MARCUS EN |
|
Created: | Wed Feb 27 1991 |
Last Modified: | Fri Jun 06 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 2898 |
Total number of notes: | 12363 |
2834.0. "pams_put_msg too fast,DMQ crash." by BEJVC::JACKWU () Wed Apr 02 1997 10:50
Hi sjz,
I am a DMQ new comer. I have the following applications.
2 VAX/VMS with DMQ at HQ <====> 30 remote PC with DMQ clients.
The network connection is X.25 (low speed; 9600bps).
The protocol is TCP/IP (VAX: UCX; PC: Pathworks).
There are 30 queues which are used to send data from HQ to remote.
There is 1 queues which is used to send data from remote to HQ.
At the HQ, if sending data to 1 Queue too fast (compared to X.25 low
speed
delivery), the parm_put_msg() will return "queue is full". This is OK.
Because X.25 low speed delivery, the real queues which was sent to DMQ
has not been delivered to the remote PC.
But at the HQ, if sending data to multiple Queues too fast, the
para_put_msg() will return "unexpected error". Then the DMQ at the
VAX/VMS
will not work normally. We have to shutdown and restart the DMQ.
I donnot know why.
The followings are my sending program. Please take some time to look
my program. Please check if I have a wrong call or wromg parameters.
Thanks and Regards.
jackwu & tesscui from NSIS.
/******************************************************************/
/* standard "C" and system definition files */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/* VMS definition files */
#include <starlet.h>
#include <ssdef.h>
#include <stsdef.h>
#include <descrip.h>
#include <lib$routines.h>
#include <libdef.h>
#include <rmsdef.h>
#include <fscndef.h>
/* DECmessageQ definition files */
#include "p_entry.h"
#include "p_proces.h"
#include "p_group.h"
#include "p_typecl.h"
#include "p_return.h"
#include "p_symbol.h"
#include "p_struct.h"
#define CLASS_S 1
#define CLASS_D 2
#define DTYPE_T 14
/* Declare variables, pointers and arrays */
char LogMsg[1024];
char LogFileName[255];
char Full_LogFileName[255];
/* subroutines */
short attach_queue() /* start of attach_queue */
{
long int attach_mode;
long int q_type;
long int dmq_status;
q_address my_primary_queue;
char queue_name[32] = "";
long int queue_name_length;
attach_mode = PSYM_ATTACH_TEMPORARY;
q_type = PSYM_ATTACH_PQ; /* primary queue */
dmq_status = pams_attach_q ( &attach_mode,
&my_primary_queue,
&q_type,
queue_name, /* null name */
&queue_name_length,/* not needed */
0,0,0,0,0 );
if ( dmq_status != PAMS__SUCCESS )
return(APP_FAIL);
else
return (APP_OK);
} /* end of attach_queue */
short put_message(branch_code, class, type, msg_area) /* start
of put message */
short int class, type;
char *branch_code;
char *msg_area;
{
long int dmq_status;
char queue_name[32] = "";
long int queue_name_length;
long int wait_mode;
long int req_id;
q_address target;
long int timeout;
char priority;
char delivery;
short int msg_size;
char uma;
struct PSB put_psb;
/* use PCCONNECT_BBB as queue name, here BBB is branch code */
sprintf(queue_name,"PCCONNECT_%s",branch_code);
queue_name_length = strlen(queue_name);
wait_mode = PSYM_WF_RESP;
req_id = 1;
dmq_status = pams_locate_q( queue_name,
&queue_name_length,
&target,
&wait_mode,
&req_id,
(long int *) 0,
(long int *) 0,
(long int *) 0,
(char *) 0
);
/*
printf("queue=%s locate_q ret=%d ", branch_code, dmq_status);
*/
if (dmq_status == PAMS__NOOBJECT)
return(APP_BAD_BRANCH_CODE);
else if (dmq_status != PAMS__SUCCESS)
return(APP_DMQ_LOCATEQ_FAIL);
priority = 0;
delivery = PDEL_MODE_WF_SAF;
msg_size = strlen (msg_area);
timeout = 500; /* 50 seconds */
uma = PDEL_UMA_DISCL;
dmq_status = pams_put_msg ( msg_area,
&priority,
&target,
&class,
&type,
&delivery,
&msg_size,
&timeout,
&put_psb,
&uma,
(q_address *) 0,
(char *) 0,
(char *) 0,
(char *) 0
);
/*
printf("put_message ret=%d psb.status=%d\n", dmq_status,
put_psb.del_psb_status);
*/ if ((dmq_status == PAMS__SUCCESS) &&
( put_psb.del_psb_status == PAMS__SUCCESS
|| put_psb.del_psb_status == PAMS__ENQUEUED
|| put_psb.del_psb_status == PAMS__STORED
|| put_psb.del_psb_status == PAMS__NO_UMA) )
return (APP_OK);
else if ((dmq_status == PAMS__SUCCESS) &&
( put_psb.del_psb_status == PAMS__DQF_DEVICE_FAIL
|| put_psb.del_psb_status == PAMS__NO_DQF
|| put_psb.del_psb_status == PAMS__DISC_FAILED
|| put_psb.del_psb_status == PAMS__DISCL_FAILED) )
return(APP_DMQ_DQF_FAIL);
else if (dmq_status == PAMS__SUCCESS &&
put_psb.del_psb_status == PAMS__DQF_FULL)
return(APP_DMQ_DQF_FULL);
else
return(APP_DMQ_PUTMSG_FAIL);
} /* end of put message */
short send_file(branch_code, msg_type, full_send_file_name,
send_file_name)
char *branch_code;
short msg_type;
char *full_send_file_name;
char *send_file_name;
{
short ret_status = 0;
char msg_area[BUF_SIZE+1];
char msg_header[100];
char sendfilebuffer[BUF_SIZE-100];
short sendfilebuffer_len;
char CRLF[3] = "";
short int dmq_msg_type, dmq_msg_class;
short mutilple_buffer_id;
short no; /* number ID; 0:force close file; 1,2,...: No.ID
*/
char tmp_file_name[255];
char sys_command[255];
CRLF[0] = 13; /* carriage return */
CRLF[1] = 10; /* line feed */
CRLF[2] = 0;
/* send to branch pc connect */
/* put message */
sleep(60);
sprintf(tmp_file_name, "EXE$PCCONNECT:%s", send_file_name);
sprintf(sys_command, "copy %s %s", full_send_file_name,
tmp_file_name);
system(sys_command);
sendfilebuffer_len = BUF_SIZE-100;
switch(msg_type) {
case MSG_TYPE_SWIFT_FM_HQ: /* swift frame flag */
sprintf(msg_header, "%s%s%d", send_file_name, CRLF,
0);
dmq_msg_class = MSG_CLASS_SWIFT;
dmq_msg_type = MSG_TYPE_SWIFT_FM_HQ;
break;
case MSG_TYPE_ACK_FM_HQ: /* ack frame flag */
sprintf(msg_header, "%s%s%d", send_file_name, CRLF,
0);
dmq_msg_class = MSG_CLASS_SWIFT;
dmq_msg_type = MSG_TYPE_ACK_FM_HQ;
break;
case MSG_TYPE_OTHER_FM_HQ: /* free-format frame flag */
dmq_msg_class = MSG_CLASS_OTHER;
dmq_msg_type = MSG_TYPE_OTHER_FM_HQ;
sprintf(msg_header, "%s", send_file_name);
break;
default:
break;
}
no = 1; /* Normal file read ID starting from 1,2...
*/
mutilple_buffer_id = 1;
while(mutilple_buffer_id > 0) {
sendfilebuffer_len = BUF_SIZE - 100;
mutilple_buffer_id = ReadFile(no, tmp_file_name,
sendfilebuffer,
&sendfilebuffer_len);
if (mutilple_buffer_id == 0) {
ret_status = APP_READ_FILE_ERROR;
break;
}
sprintf(msg_area, "%d%s%s%s%s", mutilple_buffer_id, CRLF,
msg_header, CRLF, sendfilebuffer);
ret_status = put_message(branch_code, dmq_msg_class,
dmq_msg_type, msg_area);
if (ret_status != APP_OK) {
if (mutilple_buffer_id > 0) /* force to close file
*/
ReadFile(0, tmp_file_name, sendfilebuffer,
&sendfilebuffer_len);
break;
}
no ++;
}
sprintf(sys_command, "del %s;*", tmp_file_name);
system(sys_command);
return(ret_status);
} /* end of send file */
short confirm_branch_login(branch_code, ip_address)
char *branch_code;
char *ip_address;
{
char sys_command[255];
long int attach_mode;
long int q_type;
long int dmq_status;
q_address my_primary_queue;
char queue_name[32] = "";
long int queue_name_length;
/*
sprintf(sys_command, "ucx ping %s", ip_address);
if (system(sys_command) != 51019923) */ /* ip is not connect */
/* return(APP_FAIL); */
attach_mode = PSYM_ATTACH_BY_NAME;
/* q_type = PSYM_ATTACH_PQ; */ /* primary queue
*/
q_type = PSYM_ATTACH_PQ;
sprintf(queue_name, "PCCONNECT_%s", branch_code);
queue_name_length = strlen(queue_name);
dmq_status = pams_attach_q ( &attach_mode,
&my_primary_queue,
&q_type,
queue_name,
&queue_name_length,
0,0,0,0,0 );
if ( dmq_status == PAMS__DECLARED /* queue has attached by
branch */
|| dmq_status == PAMS__BADDECLARE ) {
return(APP_OK);
} else if ( dmq_status == PAMS__SUCCESS ) {
dmq_status = pams_detach_q (&my_primary_queue,
(char *) 0,
(char *) 0);
return(APP_FAIL);
} else
return(APP_FAIL);
}
short send_format_file_to_branch(msg_type)
short msg_type;
{
short i,ret_status;
FILE *fp_branch, *fp_file;
char buffer[255];
char sys_command[255];
char OK_flag[3];
char branch_code[4];
char branch_in_dir[255];
char branch_out_dir[255];
char suffix[6];
char send_file_dir[255];
char backup_file_dir[255];
char send_file_name[255];
char full_send_file_name[255];
char full_backup_file_name[255];
if ((fp_branch = fopen("EXE$PCCONNECT:BRANCH.DEF", "r")) == NULL) {
sprintf(LogMsg, "\n%-20s Can not read branch defination
file: EXE$PCCONNECT: BRANCH.DEF\n",
today);
WriteFile("a", Full_LogFileName, LogMsg);
return( APP_FAIL );
}
while(fgets(buffer, 255, fp_branch) != NULL) {
if(buffer[0] == '#' || strncmp(buffer, "/*", 2) == 0)
continue;
sscanf(buffer, "%s%s%s%s", OK_flag, branch_code,
branch_in_dir, branch_out_dir);
OK_flag[1] = 0;
branch_code[0] = toupper(branch_code[0]);
branch_code[1] = toupper(branch_code[1]);
branch_code[2] = toupper(branch_code[2]);
branch_code[3] = 0;
if (OK_flag[0] != '1') continue;
if (msg_type == MSG_TYPE_SWIFT_FM_HQ) {
strcpy(send_file_dir, branch_out_dir);
strcpy(backup_file_dir, DIR_SWIFT_TX_BACKUP);
strcpy(suffix, "aui");
} else if (msg_type == MSG_TYPE_ACK_FM_HQ) {
strcpy(send_file_dir, DIR_ACK_FILE);
strcpy(backup_file_dir, DIR_ACK_BACKUP);
strcpy(suffix, "ack");
} else if (msg_type == MSG_TYPE_OTHER_FM_HQ) {
strcpy(send_file_dir, DIR_OTHER_TX);
strcpy(backup_file_dir, DIR_OTHER_TX_BACKUP);
strcpy(suffix, "*");
} else {
break;
}
system("del file.list;*");
sprintf(sys_command, "dir/col=1/output=file.list %s%s*.%s",
send_file_dir, branch_code, suffix);
if (system(sys_command) != 1) /* no file found */
continue;
/*
if (confirm_branch_login(branch_code, ip_address) !=
APP_OK) {
if (strcmp(branch_code, "SSS") == 0)
continue;
sprintf(LogMsg, "\n%-20s Branch %s is not login\n",
today, branch_code);
WriteFile("a", Full_LogFileName, LogMsg);
continue;
}
*/
if ((fp_file = fopen("file.list", "r")) == NULL) continue;
while(fgets(buffer, 255, fp_file) != NULL) {
if(strncmp(buffer, "Directory", 9) == 0) continue;
if(strncmp(buffer, "Total", 5) == 0) continue;
if (Instr(buffer, branch_code) < 0) continue;
i = Instr(buffer, ";");
if (i < 0) continue;
else buffer[i] = 0;
strcpy(send_file_name, buffer);
sprintf(full_send_file_name, "%s%s", send_file_dir,
send_file_name);
sprintf(full_backup_file_name, "%s%s",
backup_file_dir, send_file_name);
ret_status = send_file(branch_code, msg_type,
full_send_file_name,
send_file_name);
get_systemtime();
switch (ret_status) {
case APP_OK:
sprintf(LogMsg, "\n%-20s SUCCESSFUL:File %s
to branch %s\n",
today, send_file_name,
branch_code);
WriteFile("a", Full_LogFileName, LogMsg);
RenameFile(full_send_file_name,
full_backup_file_name);
break;
case APP_BAD_BRANCH_CODE:
sprintf(LogMsg, "\n%-20s ERROR:File %s to
branch %s\n",
today, send_file_name,
branch_code);
sprintf(LogMsg, "%s%20s branch queue not
found\n",
LogMsg, " ");
WriteFile("a", Full_LogFileName, LogMsg);
break;
case APP_DMQ_LOCATEQ_FAIL:
sprintf(LogMsg, "\n%-20s ERROR:File %s to
branch %s\n",
today, send_file_name,
branch_code);
sprintf(LogMsg, "%s%20s Unexpected error
return from pams_locate_q\n",
LogMsg, " ");
WriteFile("a", Full_LogFileName, LogMsg);
break;
case APP_DMQ_PUTMSG_FAIL:
sprintf(LogMsg, "\n%-20s ERROR:File %s to
branch %s\n",
today, send_file_name,
branch_code);
sprintf(LogMsg, "%s%20s Unexpected error
return from pams_put_message\n",
LogMsg, " ");
WriteFile("a", Full_LogFileName, LogMsg);
break;
case APP_DMQ_DQF_FULL:
sprintf(LogMsg, "\n%-20s ERROR:File %s to
branch %s\n",
today, send_file_name,
branch_code);
sprintf(LogMsg, "%s%20s Branch queue is
full\n",
LogMsg, " ");
WriteFile("a", Full_LogFileName, LogMsg);
break;
case APP_DMQ_DQF_FAIL:
sprintf(LogMsg, "\n%-20s ERROR:File %s to
branch %s\n",
today, send_file_name,
branch_code);
sprintf(LogMsg, "%s%20s No DQF buffer for
this queue or DQF buffer is error\n",
LogMsg, " ");
WriteFile("a", Full_LogFileName, LogMsg);
break;
default:
sprintf(LogMsg, "\n%-20s ERROR:File %s to
branch %s\n",
today, send_file_name,
branch_code);
sprintf(LogMsg, "%s%20s Unexpected error
return\n",
LogMsg, " ");
WriteFile("a", Full_LogFileName, LogMsg);
break;
}
if (ret_status != APP_OK)
break;
}
fclose(fp_file);
}
fclose(fp_branch);
return(ret_status);
}
main()
{
short ret_status;
get_systemtime();
strcpy(LogFileName, "TX");
strncat(LogFileName, today, 8);
LogFileName[10] = 0;
strcat(LogFileName, ".log");
sprintf(Full_LogFileName, "%s%s", DIR_LOG_FILE, LogFileName);
sprintf(LogMsg, "\n\nFrom X.400 to PCConnect - Sending program is
starting\n\n");
if (WriteFile("a+", Full_LogFileName, LogMsg) != 0) {
printf("Open log file %s error, Exit !!!\n",
Full_LogFileName);
printf("Plese find the reason of %s open error ,then
re-run\n",Full_LogFileName);
exit (0);
}
printf("\n\nFrom X.400 to PCConnect - Sending program is
starting\n\n");
/* In order to send message, we have to attach a temp queue */
/* attach queue */
if ( attach_queue() != APP_OK ) {
sprintf(LogMsg, "%-20s Attach queue error when sending from
VAX to PC\n%20sPerhaps DMQ problems, re-run this program after DMQ is
OK.", today," ");
writefile("a", Full_LogFileName, LogMsg);
exit(APP_FAIL);
}
while (1) {
get_systemtime();
/* Change LogFileName at 24:00 */
if (strncmp(LogFileName+2, today, 8) != 0) {
strcpy(LogFileName, "TX");
strncat(LogFileName, today, 8);
LogFileName[10] = 0;
strcat(LogFileName, ".log");
sprintf(Full_LogFileName, "%s%s", DIR_LOG_FILE,
LogFileName);
sprintf(LogMsg, "\n\nFrom X.400 to PCConnect -
Sending program is starting\n\n");
if (WriteFile("a+", Full_LogFileName, LogMsg) != 0)
{
printf("Open log file %s error.\n",
Full_LogFileName);
/* exit (APP_FAIL); change on Mar.28,1997
*/
}
}
/* send swift message from HQ to branchQ */
ret_status =
send_format_file_to_branch(MSG_TYPE_SWIFT_FM_HQ);
sleep(60);
/* send swift ACKmessage from HQ to branchQ */
ret_status =
send_format_file_to_branch(MSG_TYPE_ACK_FM_HQ);
sleep(60);
/* send FreeFormatFile from HQ to branchQ */
ret_status =
send_format_file_to_branch(MSG_TYPE_OTHER_FM_HQ);
}
/* detach queue not goto here*/
pams_exit(); /* DMQ lib call */
} /* end of main */
/******************************************************************/
/* standard "C" and system definition files.
*/
/* standard "C" and system definition files */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/* VMS definition files */
#include <starlet.h>
#include <ssdef.h>
#include <stsdef.h>
#include <descrip.h>
#include <lib$routines.h>
#include <libdef.h>
#include <rmsdef.h>
#include <fscndef.h>
/* DECmessageQ definition files */
#include "p_entry.h"
#include "p_proces.h"
#include "p_group.h"
#include "p_typecl.h"
#include "p_return.h"
#include "p_symbol.h"
#include "p_struct.h"
/* FAB defines */
/*
#include <fabdef.h>
*/
#include <fab.h>
/*
*/
short addJNLrecord(flag, branch)
short flag;
struct BRANCH branch;
{
short status = 0;
char filename[255];
char buffer[1024];
char mode[4];
char month[3];
char day[3];
FILE *fp;
/* JNL record format is:
* F BBB BBBnnnn.XXX nnnn mmm mm mmm mm-dd-yy hh:mm:ss
* 012345678901234567890123456789012345678901234567890 total 51
*
* where: F as flag, 0=send, 1=receive
* BBB as branch code
* BBBnnlnn.XXX as file name
* nnnn as file sequence number
* mmm as start message sequence number
* mm as number of messages
* mmm as end message sequence number
* mm-dd-yy as date
* hh:mm:ss as time
*/
strncpy(month, today, 2);
month[2] = 0;
strncpy(day, today+3, 2);
day[2] = 0;
sprintf(filename, "%sBRANCH%2s%2s.JNL", DIR_JNL_FILE, month, day);
sprintf(buffer, "%d %3s %11s %04d %03d %02d %03d %17s\n",
flag,
branch.code,
branch.filename,
branch.newfileno,
branch.startmsgno,
branch.msgnumber,
branch.endmsgno,
today);
WriteFile("a+", filename, buffer);
return(status);
}
void get_systemtime()
{
char month[12][5] = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN",
"JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
char buffer[20];
short i;
short day;
short year;
char time[23] ;
$DESCRIPTOR( time_des , time ) ;
lib$date_time( &time_des ) ;
/* time format is DD-MMM-YYYY HH:MM:SS */
strncpy(buffer, time , 2);
buffer[2] = 0;
day = atoi(buffer);
strncpy(buffer, time+3, 3);
buffer[3] = 0;
i = 0;
while((i<13) && (strcmp(buffer, month[i])!=0))
i++;
i++;
strncpy(buffer, time+9, 2);
buffer[2] = 0;
year = atoi(buffer);
strncpy(buffer, time+12, 8);
buffer[8] = 0;
/* today format is : MM-DD-YY HH:MM:SS */
sprintf(today, "%02d-%02d-%02d %s", i, day, year, buffer);
return ;
}
short GetBranchInformation(branch)
struct BRANCH *branch;
{
short i=0;
short status = 0;
while( (i<BranchNumber) &&
(strcmp(STANDbranch[i].code, branch->code)!=0) )
i++;
if (i > 499) {
branch->no = 500;
branch->newfileno = -1;
branch->startmsgno = -1;
branch->msgnumber = 0;
branch->endmsgno = -1;
strcpy(branch->filename, "");
strcpy(branch->date, "");
strcpy(branch->time, "");
return(-1);
}
if (strcmp(STANDbranch[i].code, branch->code)!=0) {
STANDbranch[i].no = i;
STANDbranch[i].newfileno = -1;
STANDbranch[i].startmsgno = -1;
STANDbranch[i].msgnumber = 0;
STANDbranch[i].endmsgno = -1;
strcpy(STANDbranch[i].code, branch->code);
strcpy(STANDbranch[i].filename, "");
strcpy(STANDbranch[i].date, "");
strcpy(STANDbranch[i].time, "");
BranchNumber ++;
}
branch->no = STANDbranch[i].no;
branch->newfileno = STANDbranch[i].newfileno;
branch->startmsgno = STANDbranch[i].startmsgno;
branch->msgnumber = 0;
branch->endmsgno = STANDbranch[i].startmsgno;
strcpy(branch->filename, "");
strcpy(branch->date, "");
strcpy(branch->time, "");
return(status);
}
short GenModelFile(modelfilename, expect, current,
sourcefilename, targetfilename)
char *modelfilename;
char *expect;
char *current;
char *sourcefilename;
char *targetfilename;
{
short status = -1;
char tailbuffer[1000];
char buffer[BUF_SIZE+1];
short buf_len = BUF_SIZE;
short i, no, mutilple_buffer_id;
short location;
if (ReadFile(1, modelfilename, buffer, &buf_len) == 0)
sprintf(buffer, "******** %s *******", modelfilename);
location = Instr(buffer, "BBB");
if (location>0) {
for (i=0;i<strlen(expect);i++)
buffer[i+location] = expect[i];
location = Instr(buffer, "BBB");
if (location > 0) {
for (i=0;i<strlen(expect);i++)
buffer[i+location] = current[i];
}
}
location = Instr(buffer, "*/");
if (location>0)
strcpy(tailbuffer,buffer+location+2);
else
strcpy(tailbuffer,"\0");
location = Instr(buffer, "/*");
if (location > 0)
buffer[location] = '\0';
WriteFile("w", targetfilename, buffer);
no = 1;
mutilple_buffer_id = 1;
while(mutilple_buffer_id > 0) {
buf_len = BUF_SIZE;
mutilple_buffer_id = ReadFile(no, sourcefilename, buffer,
&buf_len);
if (mutilple_buffer_id == 0)
return(-1);
no ++;
WriteFile("a", targetfilename, buffer);
}
WriteFile("a", targetfilename, tailbuffer);
PrintFile(targetfilename);
return(0);
}
short GetTrailerMessage(branchinfo, filename)
struct BRANCH *branchinfo;
char *filename;
{
short no, mutilple_buffer_id, buf_len;
char buffer[BUF_SIZE+1];
short loc;
short ret_status=0;
char trailerbegin[10];
char str[50];
get_systemtime();
branchinfo->msgnumber = 1;
branchinfo->endmsgno = branchinfo->startmsgno;
strncpy(branchinfo->date, today ,8);
branchinfo->date[8] = 0;
strncpy(branchinfo->time, today + 9 ,8);
branchinfo->time[8] = 0;
strcpy(trailerbegin, "END/");
/* trailer format is:
* END/aaaaaa/bbbb/yy-mm-dd/hh:mm:ss
012345678901234567890123456789012
*/
no = 1;
mutilple_buffer_id = 1;
while(mutilple_buffer_id > 0) {
buf_len = BUF_SIZE;
mutilple_buffer_id = ReadFile(no, filename, buffer,
&buf_len);
if (mutilple_buffer_id == 0)
return(-1);
no ++;
if ((loc=Instr(buffer, trailerbegin)) > 0) {
loc += 4; /* skip "END/" */
strncpy(str, buffer+loc,6);
str[6] = 0;
branchinfo->msgnumber = atoi(str);
if (branchinfo->msgnumber <= 0) {
branchinfo->msgnumber = 0;
branchinfo->endmsgno =
branchinfo->startmsgno;
} else {
branchinfo->endmsgno =
branchinfo->startmsgno+branchinfo->msgnumber-1;
}
loc += 12; /* skip "aaaaaa/bbbb/" */
strncpy(branchinfo->date, buffer+loc,8);
branchinfo->date[8] = 0;
loc += 9; /* skip "yy-mm-dd/" */
strncpy(branchinfo->time, buffer+loc,8);
branchinfo->time[8] = 0;
mutilple_buffer_id = ReadFile(0, filename, buffer,
&buf_len);
break;
}
}
return( ret_status );
}
short init_information(filename)
char *filename;
{
char code[20];
char buffer[200];
long newfileno;
long startmsgno;
FILE *fp;
short i = 0;
short new_day;
BranchNumber = 0;
for(i=0;i<500;i++) {
STANDbranch[i].no = i;
STANDbranch[i].newfileno = -1;
STANDbranch[i].startmsgno = -1;
STANDbranch[i].msgnumber = 0;
STANDbranch[i].endmsgno = -1;
strcpy(STANDbranch[i].code, "");
strcpy(STANDbranch[i].filename, "");
strcpy(STANDbranch[i].date, "");
strcpy(STANDbranch[i].time, "");
}
get_systemtime();
new_day = 0;
if ((fp = fopen (filename, "r")) != NULL )
{
/* read contents from file
*/
while ( fgets(buffer, 200, fp) != NULL ) {
if(buffer[0] == 0)
continue;
if (buffer[0] == '#') {
/* sscanf(buffer+1, "%s", code);
if (strncmp(today,code, strlen(code)) != 0)
new_day = 1;
*/ continue;
}
sscanf(buffer, "%s%d%d", code, &newfileno,
&startmsgno);
for (i=0; i<strlen(code); i++)
code[i] = toupper(code[i]);
strcpy(STANDbranch[BranchNumber].code, code);
STANDbranch[BranchNumber].newfileno =
(short)newfileno;
STANDbranch[BranchNumber].startmsgno =
(short)startmsgno;
if (BranchNumber < 499)
BranchNumber ++;
else
break;
}
fclose (fp);
};
return(0);
}
short Instr(s_string, t_string)
char *s_string;
char *t_string;
{
short location = 0;
short t_len;
short s_len;
char buffer[6400];
t_len = strlen(t_string);
s_len = strlen(s_string);
location = 0;
strcpy(buffer, s_string);
if (s_len < t_len)
return(-1);
while((location <= (s_len-t_len)) &&
(strncmp(buffer, t_string, t_len) != 0) ) {
location ++;
strcpy(buffer, s_string+location);
}
if (strncmp(s_string+location, t_string, t_len) != 0)
return(-1);
else
return(location);
}
short PrintFile(print_filename)
char *print_filename;
{
char print_command[50];
sprintf(print_command, "print/queue=PCC$PRINTQUEUE %s",
print_filename);
/* system(print_command); */
return(0);
}
short ReadFile(short no, char *filename, char *buffer, short
*buf_len)
/*********************************************************/
/* short no: 0:force close file; 1,2,...: Normal.ID */
/* input: no, filename */
/* buf_len = BUF_SIZE - 100 = 4900 */
/* output: buffer */
/* return: 0: force to close file/unnormal return */
/* -2: only 1 buffer is enough for the message */
/* -1: this buffer is the end of the message */
/* +1: sequence number ID */
/* +2: sequence number ID */
/*********************************************************/
{
static FILE *fp;
static char linebuffer[255];
short len;
if (no == 0) { /* force close file; unnormal return */
fclose(fp);
return(0);
}
buffer[0] = 0;
if (no == 1) { /* no=1: start to read a file */
if ((fp = fopen(filename, "r")) == NULL) {
printf("Cannot open file %s at
ReadFile()\n",filename);
return(0);
}
linebuffer[0] = 0;
} else { /* if no > 2: 2,3,4,5.... */
strcpy(buffer, linebuffer);
}
len = strlen(buffer);
while(fgets(linebuffer, 200, fp) != NULL) {
len += strlen(linebuffer);
if (len < *buf_len) {
if (buffer[0] == 0)
strcpy(buffer, linebuffer);
else
strcat(buffer, linebuffer);
} else {
*buf_len = len;
return(no);
}
}
fclose(fp);
if (no == 1) /* only 1 buffer is enough for the file */
return(-2);
else /* this buffer is the end of the file */
return(-1);
}
short RenameFile(Source_file, Target_file)
char *Source_file;
char *Target_file;
{
short status=0;
short len;
char copy_command[200];
char delete_command[200];
len = strlen(Target_file);
sprintf(copy_command, "copy/pro=w:r %s %s", Source_file,
Target_file);
sprintf(delete_command, "delete %s;*", Source_file);
if (len == 0)
system(delete_command);
else if ( system(copy_command) )
system (delete_command);
return(0);
}
short update_information(filename, current)
char *filename;
struct BRANCH current;
{
short status = 0;
char buffer[225];
char pur_command[200];
FILE *fp;
short i = 0;
short no;
i = current.no;
if (current.newfileno >= 0) {
STANDbranch[i].newfileno = current.newfileno+1;
no = STANDbranch[i].newfileno/10000;
STANDbranch[i].newfileno -= no*10000;
} else
STANDbranch[i].newfileno = current.newfileno;
if (current.endmsgno >= 0) {
STANDbranch[i].startmsgno = current.endmsgno+1;
no = STANDbranch[i].startmsgno/1000;
STANDbranch[i].startmsgno -= no*1000;
} else
STANDbranch[i].startmsgno = current.endmsgno;
STANDbranch[i].endmsgno = STANDbranch[i].startmsgno;
STANDbranch[i].msgnumber = 0;
if ((fp = fopen (filename, "w")) != NULL ) {
sprintf(buffer, "# %s\n", today);
fputs(buffer, fp );
for(i=0;i<BranchNumber;i++) {
sprintf(buffer, "%s %d %d\n",STANDbranch[i].code,
STANDbranch[i].newfileno,
STANDbranch[i].startmsgno);
fputs(buffer, fp );
}
fclose (fp);
sprintf(pur_command, "pur %s",filename);
system(pur_command);
};
return(0);
}
short WriteFile(open_mode, filename, buffer)
char *open_mode;
char *filename;
char *buffer;
{
short status = -1;
FILE *fp;
char command[200];
if ((fp = fopen (filename, open_mode)) != NULL ) {
/* write contents in file
*/
if ( fputs (buffer, fp ) != EOF )
status = 0;
fclose(fp);
}
if ((open_mode[0] == 'w') || (strcmp(open_mode, "a+") == 0)) {
sprintf(command, "set file/pro=(s:rwed,o:rwed,g:re,w:r)
%s",
filename);
system (command);
}
if (status == 0) {
sprintf(command, "pur %s", filename);
system(command);
}
return(status);
}
short WriteSWIFTFile(mode, filename, buffer)
char *mode;
char *filename;
char *buffer;
{
short status = -1;
FILE *fp;
char command[200];
if ((mode[0] == 'w') || (mode[0] == 'W')) {
sprintf(command, "creat/fdl=%s %s", UDF,filename);
system (command);
/* sprintf(command, "set file/pro=(s:rwed,o:rwed,g:re,w:r)
%s",
filename);
system (command);
*/ }
if ((fp = fopen (filename, "a", "fab$b_rfm = FAB$C_UDF")) != NULL )
{
/* write contents in file
*/
if ( fputs (buffer, fp ) != EOF )
status = 0;
fclose(fp);
}
if (status == 0) {
sprintf(command, "pur %s", filename);
system(command);
}
return(status);
}
/******************************************************************/
#include "p_struct.h"
/******************************************************************/
#define DIR_SWIFT_RX "MSG$FM_PC:"
#define DIR_SWIFT_TX "MSG$TO_PC:"
#define DIR_SWIFT_TX_BACKUP "MSG$BACKUP:"
#define DIR_ACK_FILE "ACK$TO_PC:"
#define DIR_ACK_BACKUP "ACK$BACKUP:"
#define DIR_OTHER_TX "OTHER$TO_PC:"
#define DIR_OTHER_TX_BACKUP "OTHER$BACKUP:"
#define DIR_OTHER_RX "OTHER$FM_PC:"
#define DIR_LOG_FILE "MSG$LOG:"
#define DIR_ERR_FILE "MSG$ERR:"
#define DIR_TMP_FILE "MSG$TMP:"
#define DIR_STOP_FILE "MSG$STOP:"
#define DIR_JNL_FILE "MSG$JOURNAL:"
#define STOP_FILE "EXE$PCCONNECT:stop.txt"
#define ACK_FILE "EXE$PCCONNECT:ack.txt"
#define BRANCHINFO_SEND "EXE$PCCONNECT:branch.snd"
#define BRANCHINFO_RECV "EXE$PCCONNECT:branch.rev"
#define UDF "EXE$PCCONNECT:undefine_format.fdl"
#define ACK_SUFFIX "ACK"
#define STOP_SUFFIX "STOP"
#define SEND_FLAG 0
#define RECV_FLAG 1
#define MSG_CLASS_SWIFT 400
#define MSG_TYPE_SWIFT_TO_HQ 401
#define MSG_TYPE_SWIFT_FM_HQ 402
#define MSG_TYPE_ACK_FM_HQ 403
#define MSG_CLASS_OTHER 500
#define MSG_TYPE_OTHER_TO_HQ 501
#define MSG_TYPE_OTHER_FM_HQ 502
#define MSG_CLASS_TRANS 600
#define MSG_TYPE_TRANS_TO_HQ 601
#define MSG_TYPE_TRANS_FM_HQ 602
#define BUF_SIZE 5000
#define APP_OK 0
#define APP_FAIL -1
#define APP_READ_FILE_ERROR -2
#define APP_WRITE_FILE_ERROR -3
#define APP_BAD_BRANCH_CODE -11
#define APP_DMQ_LOCATEQ_FAIL -12
#define APP_DMQ_PUTMSG_FAIL -13
#define APP_DMQ_DQF_FULL -14
#define APP_DMQ_DQF_FAIL -15
short BranchNumber;
typedef struct BRANCH
{
short no;
char code[5];
char filename[50];
short newfileno;
short startmsgno;
short msgnumber;
short endmsgno;
char date[20];
char time[20];
};
struct BRANCH STANDbranch[500];
struct BRANCH Current;
struct BRANCH Expect;
char today[20];
/*
short addJNLrecord(short, struct BRANCH);
*/
void get_systemtime();
short WriteFile(char *,char *,char *);
short WriteSWIFTFile(char *, char *, char *);
short GetBranchInformation(struct BRANCH *);
short GenModelFile(char *, char *, char *, char *, char *);
short RenameFile(char *,char *);
short init_information(char *);
short update_information(char *, struct BRANCH);
short PrintFile(char *);
short Instr(char *, char *);
short ReadFile(short, char *, char *,short *);
T.R | Title | User | Personal Name | Date | Lines |
---|
2834.1 | need more info... | KLOVIA::MICHELSEN | BEA/DEC MessageQ Engineering | Wed Apr 02 1997 22:49 | 5 |
| We need to see the exact error codes plus the EVL log file to get a
idea of what is going on.
Marty
|