⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conn.c

📁 tuxede下面的编程
💻 C
字号:

#include <stdio.h>
#include <ctype.h>
#include <atmi.h>	/* TUXEDO Header File */
#include <userlog.h>	/* TUXEDO Header File */
#include <sys/types.h>
#include <sys/timeb.h>
#include "fml32.h"
#include "myfml.h"


static long time=0;
struct timeb t_start, t_now;
long lasti=0;


/* tpsvrinit is executed when a server is booted, before it begins
   processing requests.  It is not necessary to have this function.
   Also available is tpsvrdone (not used in this example), which is
   called at server shutdown time.
*/

#if defined(__STDC__) || defined(__cplusplus)
tpsvrinit(int argc, char *argv[])
#else
tpsvrinit(argc, argv)
int argc;
char **argv;
#endif
{
	
	return(0);
}

/* This function performs the actual service requested by the client.
   Its argument is a structure containing among other things a pointer
   to the data buffer, and the length of the data buffer.
*/

#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
CONN(TPSVCINFO *rqst)
#else
CONN(rqst)
TPSVCINFO *rqst;
#endif
{
	long count=0;
	FILE *fp;
	FILE *rp;
	long i=0;
	FBFR32 *rcvbuf;
	char *sendbuf;
	char fname[100]="";
	char tmp[100]="";
	FLDLEN32 len=0;
	long bnum,bid,bsize=1024;
	char *fdata;
	long revent;
	long finish=0;
	char id[10];
	
	
	
	
	userlog("SSSSSSSSSSSSSSSSSSSSSSS\n");
	sendbuf = (char *)tpalloc("STRING",NULL , 1000);
	if(sendbuf == NULL)
	{
		userlog("tpalloc(sendbuf) failure\n");	
		tpreturn(TPFAIL,0,0,0L,0);
	}
	
	rcvbuf = (FBFR32 *)tpalloc("FML32",NULL , bsize+1000);//???
	if(rcvbuf == NULL)
	{
		userlog("tpalloc(rcvbuf) failure\n");	
		tpreturn(TPFAIL,0,0,0L,0);
	}
	
	fdata=(char *)malloc(bsize);
	if(fdata == NULL)
	{
		userlog("malloc(fdata) failure");
        	tpreturn(TPFAIL,0,0,0,0);		
	}	
	
	
	for(;;)
	{
	if(tprecv(rqst->cd,&rcvbuf,&len,TPNOCHANGE,&revent)==-1)
	{
		if(tperrno==TPEEVENT&&revent==TPEV_SENDONLY)
		{
			userlog("state change from receive\n");
		}
		else
		{
			userlog("tprecv() failure:%s,event=%ld\n",tpstrerror(tperrno),revent);
			tpreturn(TPFAIL,0,0,0L,0);
		}
	}	
	len=sizeof(bid);
	if(Fget32(rcvbuf,BID,0,(char *)&bid,&len) == -1)
	{
		userlog("Fget32(BID) failure :%s",(char *)Fstrerror32(Ferror32));
		tpreturn(TPFAIL,0,0,0,0);
	}
	/*the first time*/
	if(bid == -1)
	{
		userlog("0\n");
		if((rp=fopen("record", "r+b"))==NULL)
		{
			userlog("fopen(record) failure\n");	
			tpreturn(TPFAIL,0,0,0L,0);
		}	
		len=fread(sendbuf, 1, 100, rp);//???
		
		userlog("recorded id=%s\n",sendbuf);
		if (tpsend(rqst->cd,sendbuf,0,TPRECVONLY,&revent)==-1)
		{
			userlog("tpsend(%d):%s",revent,tpstrerror(tperrno));
			fclose(rp);
			tpreturn(TPFAIL,0,0,0L,0);
		}
		userlog("1\n");
		continue;		
	}
	userlog("2\n");
	len=sizeof(fname);
	if(Fget32(rcvbuf,FNAME,0,fname,&len) == -1)
	{
		userlog("Fget32(FNAME) failure :%s",(char *)Fstrerror32(Ferror32));
		tpreturn(TPFAIL,0,0,0,0);
	}
	strcat(fname,".s");
	
	len=sizeof(bnum);
	if(Fget32(rcvbuf,BNUM,0,(char *)&bnum,&len) == -1)
	{
		userlog("Fget32(BNUM) failure :%s",(char *)Fstrerror32(Ferror32));
		tpreturn(TPFAIL,0,0,0,0);
	}
	
	if ((fp=fopen(fname, "rb"))==NULL)	
	{ 
		fp=fopen(fname, "wb");
	}
	else if(bid == 0 )	
	{
		fclose(fp);
		fp=fopen(fname, "wb");
	}
	else
	{
		fclose(fp);
		fp = fopen(fname, "r+b");
	}
	
	if(fp == NULL)
	{
		userlog("fopen() %s failure,errno=%ld,strerr=%s\n",fname,errno,strerror(errno));
		fclose(fp);
		fp=fopen(fname, "wb");
		//tpreturn(TPFAIL,0,0,0,0);	
	}
	
	userlog("3\n");
	len=bsize;
	if(Fget32(rcvbuf,FDATA,0,fdata,(FLDLEN32 *)&len) == -1)
	{
		userlog("Fget32(FDATA) failure :%s",(char *)Fstrerror32(Ferror32));
		tpreturn(TPFAIL,0,0,0,0);
	}
	
	i=bid * bsize;
	if(fseek(fp, i, 0)!=0)
	{
		userlog("fseek() failure\n");
		tpreturn(TPFAIL,0,0,0,0);		
	}
	i = fwrite(fdata,1,len,fp);
	if(i != len)
	{
		userlog("fwrite()fail\n");
		tpreturn(TPFAIL,0,0,0,0);	
	}
	fclose(fp);
	if(fseek(rp, 0, SEEK_SET)!=0)
	{
		userlog("fseek() failure\n");
		tpreturn(TPFAIL,0,0,0,0);		
	}
	sprintf(tmp,"%ld",bid);
	i = fwrite(tmp,1,strlen(tmp)+1,rp);
	if(i != strlen(tmp) + 1)
	{
		userlog("fwrite(record)fail\n");
		fclose(rp);
		tpreturn(TPFAIL,0,0,0,0);	
	}
	userlog("4\n");
	if(bid == bnum)
	{
		if (tpsend(rqst->cd,rcvbuf,0,0,&revent)==-1)
			userlog("tpsend(%d):%s",revent,tpstrerror(tperrno));
		else
			userlog("finished\n");
		break;
	}
	/* Return the transformed buffer to the requestor. */
}
	userlog("5\n");
	fclose(rp);
	//fclose(fp);
	tpfree(sendbuf);
	tpfree(rcvbuf);
	tpreturn(TPSUCCESS, 0, NULL, 0L, 0);
}

/*
void err()
{
	fclose(rp);
	fclose(fp);
	tpfree(rcvbuf);
	tpfree(sendbuf);
	tpreturn(TPFAIL,0,0,0L,0);
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -