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

📄 smbsclient.c

📁 一个用于银行视频联播网中客户端广告机的网络通信部分
💻 C
字号:

#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>   //usleep(int micro_sec);
#include "SM_Text_Down.h"
#include "ConfigInfo.h"                                         
#include "SmBsString.h"

#define MAXLINE 1024
#define MAXPlNum 1024
#define MAXLINE 1024

typedef unsigned long int  Pthread_t;

Pthread_t thread[2];
 pthread_mutex_t mut;
 int flag;
int cn;

char *dir;
 char DownLoadingName[MAXPlNum];
char VedioBuffer[MaxReceiveBufSize];
char SendMsg[SendMsgBufSize];
char SendMsgTeampLate[SendMsgBufSize];
char tmpchar[MaxReceiveBufSize];
char tmpchar1[MaxReceiveBufSize];

extern char DnLoadingname[128];
 extern int ServPort2;
 extern char CurDate[10];    
 extern int VisitWsIntervalSeconds ;
 extern char servIP[smallbuffsize];
extern int SavePlFlag;
extern int SaveMlFlag;
extern ExsitList Exsitlist;
extern Fileinfo FileInfo;
extern char *ipaddr;



//char pname1[MAXLINE][MAXLINE];   //downloading program list
struct stat statbuf;
struct VedioPLNumber Vplnumber;

//extern struct IniConfig Conf;
off_t filesize;
char downfilepath[MAXPlNum]="media";

struct VedioInfo{
char pname1[MAXLINE];
int psize;
}vedioinfo[MAXLINE];
#if 1


extern void *Commthread1_Loop();
extern void *Commthread2_Loop();

/*create two thread ,inclue communication thread and ftpdown thread */
void thread_create(void)
{
#if 1
 int temp;
 memset(&thread,0,sizeof(thread));
 /*create thread1*/
 if((temp=pthread_create(&thread[0],NULL,&Commthread1_Loop,NULL))!=0)
 	printf("thread1 create fail!");
 else
 	printf("thread1 create success!");
 if((temp=pthread_create(&thread[1],NULL,&Commthread2_Loop,NULL))!=0)
 	printf("thread2 create fail!");
 else
 	printf("thread2 create success!");
 #endif
}
/*wait thread complete*/
void thread_wait(void)
{
 /*wait the thread quit*/
  if(thread[0]!=0){
  	pthread_join(thread[0],NULL);
	printf("thread1 have quit!");
  	}
  if(thread[1]!=0)
  {
       pthread_join(thread[1],NULL);
       printf("thread2 have quit!");
  }
}
#endif
int main()
{
#if 1
char *s1="down";
char *s2="Template";
char *s3="media";
/*make local directory for need later*/
if(mkdir(s1,0777)<0)
	fprintf(stderr,"Creat file fail!\n");
if(mkdir(s2,0777)<0)
	fprintf(stderr,"Creat file fail!\n");
if(mkdir(s3,0777)<0)
	fprintf(stderr,"Creat file fail!\n");
#endif
dir=getcwd((char*)NULL,256);
 pthread_mutex_init(&mut,NULL);
 printf("creating  thread.......\n");
thread_create();
printf("wait thread done......\n");
thread_wait();

// Commthread1_Loop();
return 0;
}

void *Commthread1_Loop()
{   
int status,ret;
#if 0
int cn=0;
int rtime=0;
int length;
char DnPath[128];
char Config_LocalFileName[128];
char DownLoading_File[128];
char Playlistfile[128];
char Msglistfile[128];
#endif

#if 0
ConfigGetKey("Conf/Config.ini","Path","path",DnPath);
length=strlen(DnPath);
if(DnPath[length-1]!='/')
{
	DnPath[length]='/';
	DnPath[length+1]='\0';
}
strcpy(Config_LocalFileName,DnPath);
strcpy(DownLoading_File,DnPath);
strcpy(Playlistfile,DnPath);
strcat(Config_LocalFileName,"Conf/Config.ini");
printf("%s\n",DnPath);
#endif
 pthread_mutex_lock(&mut);
//dir = getcwd((char *)NULL,256);
printf("Current dir is %s\n",dir);
   while(1)
   	{
   	SavePlFlag=0;
	SaveMlFlag=0;
	DnLoadingname[0]='\0';
SendMsgTeampLate[0]='\0';
//ReqPicMsgBuf[0]='\0';
SendMsg[0]='\0';
//printf("#################\n");
//dir = getcwd((char *)NULL,256);
//printf("Current dir is %s\n",dir);
//printf("#################\n");
if(strcmp(dir,getcwd((char*)NULL,256))!=0)
   if(chdir(dir)<0)
        perror("chdir");

printf("now dir has been %s\n",getcwd((char*)NULL,256));

ReadConfigFile();
Pack_Req_Data(SendMsg);
// printf("%s\n",SendMsg);

 ipaddr=host2ip(Conf.CommServer);
status=http_socket_comm(tmpchar,tmpchar1,SendMsg,ipaddr,ServPort2);
//if(cn%4==1)
//Read_to_File("/opt/WebHttpDownLoad/content.ini",tmpchar1,3);
//printf("%s\n",tmpchar);
//printf("%d\n",status);
//if(status>0)
//	continue;
//printf("%s\n",tmpchar1);	 
Get_Heart_Data(tmpchar1,VedioBuffer);
Get_TempLate_File(SendMsgTeampLate);
//Get_Pic_File(ReqPicMsgBuf);
//printf("PLsave=%s\n",FileInfo.PLsave);
//printf("Mlsave is %s\n",FileInfo.MLsave);
if(!strncmp(FileInfo.PLsave,"1",1)||!strncmp(FileInfo.MLsave,"1",1))
{
printf("write config file!\n");
WriteConfigFile();
}
//free(DataCrc32);
//if(cn%4==0){
//ConfigSetKey(TmlConfigP_LocalConfigFileName,"Status","ExsitPL","44567832");
//ConfigSetKey(TmlConfigP_LocalConfigFileName,"Status","ExsitML","45634667");
//}
//cn++;
//rtime++;
   pthread_mutex_unlock(&mut);
 sleep(VisitWsIntervalSeconds);
  	}

  return ;
}
void *Commthread2_Loop()
{
int i=0,ret,j;
pthread_mutex_lock(&mut);
while(1)
{
printf("the second thread!\n");
#if 1
memset(Vplnumber.DnLoadingName,0,sizeof(Vplnumber.DnLoadingName));
	Vplnumber.DnCompleteFlag=0;
/*get download file num*/
cn=GetDn_File(TempDownLoading_FileList);
//for(i=0;i<cn;i++)
// printf("%s,%d\n",vedioinfo[i].pname1,vedioinfo[i].psize);
//printf("cn=%d\n",cn);
for(i=0;i<cn;i++){
  pthread_mutex_lock(&mut);
  memset(downfilepath,0,sizeof(downfilepath));

strcpy(downfilepath,"media");
  /*construct full downfilepath*/
strcat(downfilepath,strrchr((vedioinfo[i].pname1),'/'));
//printf("%s\n",downfilepath);
/*check needing to download file wether exsit or not*/
printf("filename=%s\n",downfilepath);
if(stat(downfilepath,&statbuf)<0){
	perror("file open");
}
/*get local download file size*/
filesize=statbuf.st_size;
if(filesize<=0)
	flag=0;
else if(vedioinfo[i].psize==filesize)
	continue;
else{
	flag=1;
	filesize=0;
	statbuf.st_size=0;
}

/*if download file is not exsit,so that download a new file*/
if(flag==0){
	Vplnumber.DnCompleteFlag=0;
	memset(Vplnumber.DnLoadingName,0,sizeof(Vplnumber.DnLoadingName));
	strcpy(Vplnumber.DnLoadingName,strrchr((vedioinfo[i].pname1),'/')+1);

       ftpcmd(Conf.FtpHost, "-g",Conf.FtpUser,Conf.FtpPass, (vedioinfo[i].pname1), "media");
	   Vplnumber.DnCompleteFlag=1;
}/*if download file is exsit and size is larger than zero,so that download file at restart point */
else{
		Vplnumber.DnCompleteFlag=0;
	memset(Vplnumber.DnLoadingName,0,sizeof(Vplnumber.DnLoadingName));
	strcpy(Vplnumber.DnLoadingName,strrchr(vedioinfo[i].pname1,'/')+1);
	
       ftpcmd(Conf.FtpHost,"-rg",Conf.FtpUser,Conf.FtpPass,(vedioinfo[i].pname1),"media");
	   Vplnumber.DnCompleteFlag=1;
      }
	   printf("i=%d\n",i);
 	}
memset(Vplnumber.DnLoadingName,0,sizeof(Vplnumber.DnLoadingName));
#endif
pthread_mutex_unlock(&mut);
sleep(10);
}
return ;
}

int GetDn_File( char *filename)
{
 int i=0,k=0;
 int retv=0;
 int rt;
 int size;
 FILE *fp=NULL;
 char *line[MAXLINE];
 char *SaveBuf[MAXLINE];
 char *path[MAXLINE];
 char *line1[MAXLINE];
 char *SaveBuf1[MAXLINE];
 char *temp;
 if((fp=fopen(filename,"r"))==NULL)
 	return (-3);
while(retv>=0)
 	{
 	retv=FileGetLine(fp,(line+i),MAXLINE);
	//printf("ret=%d\n",retv);
	if(retv>0){
	// printf("%s\n",(line+i));
  rt=SubStringV3((line+i),"[","]", MAXLINE,(SaveBuf+i));
	//printf("rt=%d\n",rt);
	if(rt==1)
		{
		memset(Vplnumber.DnPlNo,0,sizeof(Vplnumber.DnPlNo));
		strTrimlf(line+i);
		strcpy(Vplnumber.DnPlNo,(line+i));
	//	printf("%s\n",Vplnumber.DnPlNo);
		}
	if(rt>0)  continue;
	getpath((SaveBuf+i),MAXLINE,(path+i));
	strcpy((vedioinfo[k].pname1),(path+i));
	//printf("%s\n",vedioinfo[k].pname1);
	k++;
		}
//	printf("retv=%d\n",retv);
  i++;
 	}
retv=0;
i=0;
k=0;
fseek(fp,0,SEEK_SET);
while(retv>=0)
{
retv=FileGetLine(fp,(line1+i),MAXLINE);
//printf("retv=%d\n",retv); 
if(retv>0){
	rt=SubStringV3((line1+i),"<",">",MAXLINE,(SaveBuf1+i));
if(rt>0) continue;
//printf("%s\n",(SaveBuf1+i));
size=BsAtoU((SaveBuf1+i));
vedioinfo[k].psize=size;
k++;
}
i++;
}
free(temp);
 fclose(fp);
return k;
}


⌨️ 快捷键说明

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