www.pudn.com > ftp.rar > ftp_y.c


#include 
#include 
#include 
#include 
#include 
#include 

#include "inc.h"
#include "ftp.h"

static void Sig_Handle(int signo)		
{
    char tmp[256];
    int leng;
    DEBUG_BUS(ifdebug,"FTP: sig %d received!\r\n",signo);
    switch(signo)
    {
    case SIGUSR1:
    case SIGUSR2:
	DEBUG_BUS(ifdebug,"FTP:Catch sig USER!\r\n");
	ReceiveMsgQ = 1;
	leng = MSGQ_Read(PROCID_FTP,tmp);
	if((leng==2) && (tmp[0]== 0x00) && (tmp[1]==0x01))
	{
	    systemcall("killall -9 wget",1);
	    sprintf(tmp,"lufsumount ");
	    strcat(tmp,DFTPMOUNT);
	    strcat(tmp," 2>/dev/null");
	    systemcall(tmp,1);
	    systemcall(tmp,1);
	    systemcall(tmp,1);
	    exit(0);
	}
	break;

    case SIGKILL:
	DEBUG_BUS(ifdebug,"FTP:Prog End!\r\n");
	break;

    default:
	break;
    }
}


void Signal_Init(void)
{
    //处理子进程退出,避免僵尸进程;
    //signal(SIGCHLD,SIG_IGN);

    if (signal(SIGUSR1,Sig_Handle) == SIG_ERR)
	perror("FTP:cann't catch SIGUSR1!\r\n");
    if (signal(SIGUSR2,Sig_Handle) == SIG_ERR)
	perror("FTP:cann't catch SIGUSR2!\r\n");
}

int readxml(char *file, struct filename *name)
{
    xmlTextReaderPtr reader;
    const xmlChar *value;
    int ret,num,i;
    
    i = 0;
    num = 0;
    reader = xmlReaderForFile(file, NULL, 0);
    if (reader != NULL) 
    {
    	ret = xmlTextReaderRead(reader);
    	while (ret == 1) 
    	{
	    if(strcmp(xmlTextReaderConstName(reader),"filename") == 0)
	    {
		xmlTextReaderRead(reader);
		value = xmlTextReaderConstValue(reader);
		if(strlen(value) > 30)
		{
		    sprintf(name[i].name,"%s",value);
		    i++;
		    num = i;
		}
	    }
	    ret = xmlTextReaderRead(reader);
    	}
    	xmlFreeTextReader(reader);
    	if (ret != 0) 
    	{
	    xmlCleanupParser();
	    xmlMemoryDump();
	    return -1;
    	}
    } 
    else 
	num = -1;
    xmlCleanupParser();
    xmlMemoryDump();
    return num;
}

int main()
{
    char cmdtmp[256],tmp[256];
    
    struct UPMEDIA upmedia;
    Guard_Info *main_shm, main_local;
    GPS_Info *gps_shm, gps_local;
    FTP_Info *ftp_shm, ftp_local;
    KeyB_Info *keyb_shm, keyb_local;
    Media_Info *media_shm, media_local;
    Dispatch_Info *dispatch_shm, dispatch_local;
    int msgid;
    FILE *fp;
    char logbuf[20] = "info,shutdown";
	
    ifdebug = DEBUG;
	
    ftp_local.Proc_Info.PID = getpid();
    ftp_local.FTPFsrw = 0;
    //初使化共享内存 消息队列
    main_shm = (Guard_Info*)IPC_ProcState_Init(PROCID_GUARD,SHM_RDONLY);
    gps_shm = (GPS_Info *)IPC_ProcState_Init(PROCID_GPS,SHM_RDONLY);
    ftp_shm = (FTP_Info *)IPC_ProcState_Init(PROCID_FTP,0);
    keyb_shm = (KeyB_Info *)IPC_ProcState_Init(PROCID_KEYB,SHM_RDONLY);
    media_shm = (Media_Info *)IPC_ProcState_Init(PROCID_MEDIA,SHM_RDONLY);
    dispatch_shm = (Dispatch_Info *)IPC_ProcState_Init(PROCID_DISPATCH,SHM_RDONLY);
	
    msgid = MSGQ_Init();
    MSGQ_Clear(PROCID_FTP);
    Signal_Init();
	
//	GetPrivateProfileString("NET","LOCALIP","192.168.0.162",upmedia.localip,20,SYSCONFIG);
//	GetPrivateProfileString("NET","FTPIP","192.168.0.74",upmedia.ftpip,20,SYSCONFIG);
    GetPrivateProfileString("NET","FTPUSER","zdbustv",upmedia.ftpuser,40,NETCONFIG);
    GetPrivateProfileString("NET","FTPPASS","cpu1G?od:nw",upmedia.ftppass,40,NETCONFIG);
    GetPrivateProfileString("DEBUG","DBG","0",upmedia.debug,2,SYSCONFIG);
	
    if(upmedia.debug[0] == '1')
    {
	ifdebug = 1;	
    }
    else
    {
	ifdebug = 0;
    }

ftpstart:
    ftp_local.FTPState = 0x00;
    ftp_local.FTPMount = 0x00;
    time(&(ftp_local.Proc_Info.ctime));
    IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);
	
    IPC_ProcState_Read(PROCID_GUARD,main_shm,&main_local);
    strcpy(upmedia.localip,main_local.WlanIP);
    strcpy(upmedia.ftpip,main_local.ServerIP);

    //生成IP自举文件
    sprintf(tmp,"/tmp/%s.ipp",upmedia.localip);
    fp = fopen(tmp,"w+");
    sprintf(tmp,"%s,",upmedia.localip);
    fputs(tmp,fp);
    fclose(fp);

//	if((main_local.NetState ==0) && (main_local.HddState == 0))
    if(main_local.HddState == 0)
    {
/************************通过 USB 设备更新***********************************************/
		
	//挂载USB存储设备
	sprintf(tmp,DUSBMOUNT);
	sprintf(cmdtmp,"mount -t vfat -o rw /dev/sda1 %s 2>/dev/null",tmp);
	DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);
	systemcall(cmdtmp,1);
		
	//更新媒体文件
	if(access(USBMEDCONFIG,F_OK) != -1)
	{
	    char ver[16];
	    int filenum;
	    struct filename filename[100];
	    int ifstopmedia;
	    long verl,vermedial;
	    GetPrivateProfileString("sig","version","0",upmedia.version,16,HDDMEDCONFIG);
	    GetPrivateProfileString("sig","version","0",ver,16,USBMEDCONFIG);
	    vermedial = atol(upmedia.version);
	    verl = atol(ver);
	    if((vermedial == 0) || ((verl != 0) && (verl > vermedial)))
	    {
		//解析XML文件
		char xmlfile[256];
		int i,cpsuccess;
		sprintf(tmp,DUSBPLCFG);
		sprintf(xmlfile,"%s/%s.xml",tmp,upmedia.localip);
		filenum = readxml(xmlfile, filename);
		cpsuccess = 0;
		ifstopmedia = 0;
		
		if(filenum < 0)
		    cpsuccess = -1;
					
		//进程通讯,结束媒体播放进程
		if(ifstopmedia == 0)
		{
		    char exitbuf[2];
		    exitbuf[0] = 0x00;
		    exitbuf[1] = 0x05;
		    ftp_local.FTPState = 0x01;
		    time(&(ftp_local.Proc_Info.ctime));
		    IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);
		    
		    IPC_ProcState_Read(PROCID_MEDIA,media_shm,&media_local);
		    if((media_local.Proc_Info.PID > 0) &&(kill(media_local.Proc_Info.PID,0) == 0))
			MSGQ_Send(PROCID_MEDIA,exitbuf,2);
		    sleep(TIMEOUT);
		    if(media_local.Proc_Info.PID > 0)
			kill(media_local.Proc_Info.PID,SIGKILL);
		    ifstopmedia = 1;
		    sleep(1);
		    waitpid(media_local.Proc_Info.PID,NULL,WNOHANG);
		}
		//检测硬盘剩余空间,删除不用的文件
		if((getdiskfree(DHDDMOUNT) < FREESPACE) && (filenum>0))
		{
		    struct dirent **namelist;
		    int n;
		    
		    n = scandir(DHDDMEDIA, &namelist, 0, alphasort);
		    if (n < 0)
			perror("scandir");
		    else
		    {
			while(n--)
			{
			    int temp,ifdel;
			    ifdel = 1;
			    for(temp=0; tempd_name,filename[temp].name) == 0)
				    ifdel = 0;
				if((strcmp(namelist[n]->d_name,".") == 0) || (strcmp(namelist[n]->d_name,"..") == 0))
				    ifdel = 0;
			    }
			    if(ifdel == 1)
			    {
				char tempc[256];
				sprintf(tempc,DHDDMOUNT);
				strcat(tempc,"/media/");
				strcat(tempc,namelist[n]->d_name);
				DEBUG_BUS(ifdebug,"FTP: remove %s\n",tempc);
				remove(tempc);
			    }
			    free(namelist[n]);
			}
			free(namelist);
		    }
		}
		
		//依次处理每个文件
		for(i=0; i 0)
		    {
			writelog(log_local.LogFile,logbuf);
		    }
		    systemcall("killall -9 cp mv keyb gps mplayer mplayers media busDispatch log showfont lufsd lufsmount lufsmnt lufsumount",1);					
		    systemcall("killall -2 x x x",1);
		    systemcall("sync",1);
		    FedDog();
		    sleep_my(30);
		    FedDog();
		    systemcall("sync",1);
		    systemcall("killall -9 guard",1);
		    systemcall("poweroff",0);
		    //sleep(1);
		    exit(0);
		}
	    }
	}
	//usb 更新报站文件
	sprintf(tmp,DUSBSTATION);
	strcat(tmp,"/zzver.ini");
	if(access(tmp,F_OK) != -1)
	{
	    char sverh[256],sverf[256];
	    GetPrivateProfileString("STATION","VERSION","0.01",sverf,50,tmp);
	    sprintf(tmp,DHDDSTATION);
	    strcat(tmp,"/zzver.ini");
	    GetPrivateProfileString("STATION","VERSION","0.01",sverh,50,tmp);
	    
	    if((access(tmp,F_OK) == -1) || (strcmp(sverf,sverh) > 0))
	    {
		remove(tmp);
		struct fileattr mediafile[MAXFILENUM];
		char cmdftp[256];
		//结束媒体播放进程
		char exitbuf[2];
		exitbuf[0] = 0x00;
		exitbuf[1] = 0x05;
		ftp_local.FTPState = 0x01;
		time(&(ftp_local.Proc_Info.ctime));
		IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);
				
		IPC_ProcState_Read(PROCID_MEDIA,media_shm,&media_local);
		if((media_local.Proc_Info.PID > 0) &&(kill(media_local.Proc_Info.PID,0) == 0))
		    MSGQ_Send(PROCID_MEDIA,exitbuf,2);
		sleep(TIMEOUT);
		if(media_local.Proc_Info.PID > 0)
		    kill(media_local.Proc_Info.PID,SIGKILL);
		sleep(1);
		waitpid(media_local.Proc_Info.PID,NULL,WNOHANG);
				
		//检测硬盘剩余空间,删除不用的报站文件
				
		if(getdiskfree(DHDDMOUNT) < FREESPACE)
		{
		    struct dirent **namelist, **namelisthdd;
		    int n,m;
		    
		    m = scandir(DFTPSTATION, &namelist, 0, alphasort);
		    n = scandir(DHDDSTATION, &namelisthdd, 0, alphasort);
		    
		    if((m>0) && (n>0))
		    {
			while(n--)
			{
			    int temp,ifdel;
			    ifdel = 1;
			    for(temp=0; tempd_name,".") == 0) || (strcmp(namelisthdd[n]->d_name,"..") == 0))
				{
				    ifdel = 0;
				    break;
				}
				if(strcmp(namelisthdd[n]->d_name,namelist[temp]->d_name) == 0)
				{
				    ifdel = 0;
				    break;
				}
			    }
			    if(ifdel == 1)
			    {
				char tempc[256];
				sprintf(tempc,DHDDSTATION);
				strcat(tempc,"/");
				strcat(tempc,namelisthdd[n]->d_name);
				DEBUG_BUS(ifdebug,"FTP: remove %s\n",tempc);
				remove(tempc);
			    }
			    free(namelisthdd[n]);
			}
			free(namelist);
			free(namelisthdd);
		    }
		}
		
		//复制文件
		//comparedir(DHDDSTATION, DUSBSTATION, DTEMP, mediafile,1,0);
		systemcall("rm -rf /busonline/hda1/station/*",1);
		sprintf(cmdtmp,"cp -rf ");
		strcat(cmdtmp,DUSBSTATION);
		strcat(cmdtmp," ");
		strcat(cmdtmp,DHDDMOUNT);
		systemcall(cmdtmp,1);
		if(comparedir(DHDDSTATION, DUSBSTATION, DTEMP, mediafile,0,1) != -1)
		{
		    systemcall("sync",1);
		    systemcall("killall -9 cp mv keyb gps mplayer mplayers media busDispatch log showfont lufsd lufsmount lufsmnt lufsumount",1);
		    IPC_ProcState_Read(PROCID_LOG,log_shm,&log_local);
		    if(strlen(log_local.LogFile) > 0)
		    {
			writelog(log_local.LogFile,logbuf);
		    }
		    systemcall("killall -2 x x x",1);
		    systemcall("sync",1);
		    FedDog();
		    sleep_my(30);
		    FedDog();
		    systemcall("sync",1);
		    systemcall("killall -9 guard",1);
		    systemcall("poweroff",0);
		    //sleep(1);
		    exit(0);
		}
		else
		{
		    remove(tmp);
		}
		systemcall("sync",1);
	    }
	}
		//卸载USB存储设备
	sprintf(tmp,DUSBMOUNT);
	sprintf(cmdtmp,"umount %s 2>/dev/null",tmp);
	DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);
	systemcall(cmdtmp,1);

/***********************通过 ftp 更新***********************************************/
	//挂载ftp
	ftp_local.FTPMount = 0x01;
	ftp_local.FTPFsrw = 1;
	IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);
	systemcall("mount -n -o remount,rw / 2>/dev/null",1);
	sprintf(cmdtmp,"lufsmount ftpfs://");
	strcat(cmdtmp,upmedia.ftpuser);
	strcat(cmdtmp,":");
	strcat(cmdtmp,upmedia.ftppass);
	strcat(cmdtmp,"@");
	strcat(cmdtmp,upmedia.ftpip);
	strcat(cmdtmp," ");
	strcat(cmdtmp,DFTPMOUNT);	//"/busonline/ftp"
	strcat(cmdtmp," 2>/dev/null");
	DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);
	systemcall(cmdtmp,1);
	IPC_ProcState_Read(PROCID_GUARD,main_shm,&main_local);
	if(main_local.FTPFsrw != 1)
	    systemcall("mount -n -o remount,ro / 2>/dev/null",1);
	ftp_local.FTPFsrw = 0;
	IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);
	
	//更新媒体文件
	if(access(FTPMEDCONFIG,F_OK) != -1)
	{
	    char ver[16];
	    int filenum;
	    struct filename filename[100];
	    int ifstopmedia;
	    char logtmp[256];
	    long vermedial,verl;
	    //上传IP自举文件
	    sprintf(tmp,DFTPIPRAISE);
	    sprintf(cmdtmp,"%s/%s.ipp",tmp,upmedia.localip);
	    remove(cmdtmp);
		
	    sprintf(cmdtmp,"cp -f /tmp/%s.ipp %s",upmedia.localip,tmp);
	    DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);
	    systemcall(cmdtmp,1);

			
	    //上传日志文件
	    sprintf(tmp,DHDDLOG);
	    sprintf(logtmp,DFTPLOG);
	    sprintf(cmdtmp,"mv -f %s/*.gz %s/ 2>/dev/null",tmp,logtmp);
	    DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);
	    systemcall(cmdtmp,1);
	    systemcall("sync",1);
			
	    //读取版本信息
	    GetPrivateProfileString("sig","version","0",upmedia.version,16,HDDMEDCONFIG);
	    GetPrivateProfileString("sig","version","0",ver,16,FTPMEDCONFIG);
	    verl = atol(ver);
	    vermedial = atol(upmedia.version);
	    if((vermedial == 0) || ((verl != 0) && (verl > vermedial)))
	    {
		//解析XML文件
		char xmlfile[256];
		int i,cpsuccess;
		sprintf(tmp,DFTPPLCFG);
		sprintf(xmlfile,"%s/%s.xml",tmp,upmedia.localip);
		filenum = readxml(xmlfile, filename);
		cpsuccess = 0;
		ifstopmedia = 0;
		
		ftp_local.FTPState = 0x01;
		time(&(ftp_local.Proc_Info.ctime));
		IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);
				
		if(filenum < 0)
		    cpsuccess = -1;
				
		//检测硬盘剩余空间,删除不用的文件
		if((getdiskfree(DHDDMOUNT) < FREESPACE) && (filenum>0))
		{
		    struct dirent **namelist;
		    int n;
					
		    n = scandir(DHDDMEDIA, &namelist, 0, alphasort);
		    if (n < 0)
			perror("scandir");
		    else
		    {
			while(n--) 
			{
			    int temp,ifdel;
			    ifdel = 1;
			    for(temp=0; tempd_name,filename[temp].name) == 0)
				    ifdel = 0;
				if((strcmp(namelist[n]->d_name,".") == 0) || (strcmp(namelist[n]->d_name,"..") == 0))
				    ifdel = 0;
			    }
			    if(ifdel == 1)
			    {
				char tempc[256];
				sprintf(tempc,DHDDMOUNT);
				strcat(tempc,"/media/");
				strcat(tempc,namelist[n]->d_name);
				DEBUG_BUS(ifdebug,"FTP: remove %s\n",tempc);
				remove(tempc);
			    }
			    free(namelist[n]);
			}
			free(namelist);
		    }					
		}
		
		//依次处理每个文件
		for(i=0; i 0) &&(kill(media_local.Proc_Info.PID,0) == 0))
				    MSGQ_Send(PROCID_MEDIA,exitbuf,2);
				sleep(TIMEOUT);
				if(media_local.Proc_Info.PID > 0)
				    kill(media_local.Proc_Info.PID,SIGKILL);
				ifstopmedia = 1;
				sleep(1);
				waitpid(media_local.Proc_Info.PID,NULL,WNOHANG);
			    }
			    
			    {
				int ftptimeout,ftpretry;
				ftptimeout = FTPTIMEOUT;
				ftpretry = FTPRETRY;
				
				mkdirp(DHDDMEDIA);
				sprintf(tmp,DHDDMEDIA);
				sprintf(cmdtmp,"wget -q -T %d -t %d -P %s --retry-connrefused --ftp-user=%s --ftp-password=%s -c ftp://%s/media/%s",
					ftptimeout,
					ftpretry,
					tmp,
					upmedia.ftpuser,
					upmedia.ftppass,
					upmedia.ftpip,
					filename[i].name);
				DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);
				systemcall(cmdtmp,1);
				systemcall("sync",1);
			    }
			}
			//复制完成后再次比较大小
			if(comparefilesize(fileold,filesrc) != 0)
			    cpsuccess = -1;
		    }
		    else
			cpsuccess = -1;
		}
		//升级版本文件和播放控制xml文件
		if(cpsuccess == 0)
		{
		    mkdirp(DHDDCONFIG);
		    sprintf(tmp,"cp -f ");
		    strcat(tmp,FTPMEDCONFIG);
		    strcat(tmp," ");
		    strcat(tmp,HDDMEDCONFIG);
		    DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",tmp);
		    systemcall(tmp,1);
		    systemcall("sync",1);
		    
		    sprintf(tmp,"cp -f ");
		    strcat(tmp,xmlfile);
		    strcat(tmp," ");
		    strcat(tmp,DHDDCONFIG);
		    DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",tmp);
		    systemcall(tmp,1);
		    systemcall("sync",1);
		    systemcall("killall -9 cp mv keyb gps mplayer mplayers media busDispatch log showfont lufsd lufsmount lufsmnt lufsumount",1);
		    IPC_ProcState_Read(PROCID_LOG,log_shm,&log_local);
		    if(strlen(log_local.LogFile) > 0)
		    {
			writelog(log_local.LogFile,logbuf);
		    }
		    systemcall("killall -2 x x x",1);
		    systemcall("sync",1);
		    FedDog();
		    sleep_my(30);
		    FedDog();
		    systemcall("sync",1);
		    systemcall("killall -9 guard",1);
		    systemcall("poweroff",0);
		    //sleep(1);
		    exit(0);
		}
	    }
	}
	//ftp 更新报站文件
	sprintf(tmp,DFTPSTATION);
	strcat(tmp,"/zzver.ini");
	if(access(tmp,F_OK) != -1)
	{
	    char sverh[256],sverf[256];
	    GetPrivateProfileString("STATION","VERSION","0.01",sverf,50,tmp);
	    sprintf(tmp,DHDDSTATION);
	    strcat(tmp,"/zzver.ini");
	    GetPrivateProfileString("STATION","VERSION","0.01",sverh,50,tmp);
	    if((access(tmp,F_OK) == -1) || (strcmp(sverf,sverh) > 0))
	    {
		remove(tmp);
		int ftptimeout,ftpretry;
		struct fileattr mediafilef[MAXFILENUM];
		char cmdftp[256];
		//结束媒体播放进程
		char exitbuf[2];
		exitbuf[0] = 0x00;
		exitbuf[1] = 0x05;
		ftp_local.FTPState = 0x01;
		time(&(ftp_local.Proc_Info.ctime));
		IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);
		
		IPC_ProcState_Read(PROCID_MEDIA,media_shm,&media_local);
		if((media_local.Proc_Info.PID > 0) &&(kill(media_local.Proc_Info.PID,0) == 0))
		    MSGQ_Send(PROCID_MEDIA,exitbuf,2);
		sleep(TIMEOUT);
		if(media_local.Proc_Info.PID > 0)
		    kill(media_local.Proc_Info.PID,SIGKILL);
		sleep(1);
		waitpid(media_local.Proc_Info.PID,NULL,WNOHANG);
		
		//检测硬盘剩余空间,删除不用的报站文件
		if(getdiskfree(DHDDMOUNT) < FREESPACE)
		{
		    struct dirent **namelist, **namelisthdd;
		    int n,m;
					
		    m = scandir(DFTPSTATION, &namelist, 0, alphasort);
		    n = scandir(DHDDSTATION, &namelisthdd, 0, alphasort);
		    
		    if((m>0) && (n>0))
		    {
			while(n--) 
			{
			    int temp,ifdel;
			    ifdel = 1;
			    for(temp=0; tempd_name,".") == 0) || (strcmp(namelisthdd[n]->d_name,"..") == 0))
				{
				    ifdel = 0;
				    break;
				}
				if(strcmp(namelisthdd[n]->d_name,namelist[temp]->d_name) == 0)
				{
				    ifdel = 0;
				    break;
				}
			    }
			    if(ifdel == 1)
			    {
				char tempc[256];
				sprintf(tempc,DHDDSTATION);
				strcat(tempc,"/");
				strcat(tempc,namelisthdd[n]->d_name);
				DEBUG_BUS(ifdebug,"FTP: remove %s\n",tempc);
				remove(tempc);
			    }
			    free(namelisthdd[n]);
			}
			free(namelist);
			free(namelisthdd);
		    }					
		}
		
		//断点续传文件
		/*ftptimeout = FTPTIMEOUT;
		  ftpretry = FTPRETRY;
		  sprintf(tmp,DHDDSTATION);
		  sprintf(cmdftp,"wget -r -nH --cut-dirs=2 -q -T %d -t %d -P %s --retry-connrefused --ftp-user=%s --ftp-password=%s -c ftp://%s/teamgo/station/*",
		  ftptimeout,
		  ftpretry,
		  tmp,
		  upmedia.ftpuser,
		  upmedia.ftppass,
		  upmedia.ftpip);
		  DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdftp);
		  systemcall(cmdftp,1);
		  systemcall("sync",1);*/
		systemcall("rm -rf /busonline/hda1/station/*",1);
		sprintf(cmdtmp,"cp -rf ");
		strcat(cmdtmp,DFTPSTATION);
		strcat(cmdtmp," ");
		strcat(cmdtmp,DHDDMOUNT);
		systemcall(cmdtmp,1);
		if(comparedir(DHDDSTATION, DFTPSTATION, DTEMP, mediafilef,0,1) != -1)
		{
		    systemcall("sync",1);
		    systemcall("killall -9 cp mv keyb gps mplayer mplayers media busDispatch log showfont lufsd lufsmount lufsmnt lufsumount",1);
		    IPC_ProcState_Read(PROCID_LOG,log_shm,&log_local);
		    if(strlen(log_local.LogFile) > 0)
		    {
			writelog(log_local.LogFile,logbuf);
		    }
		    systemcall("killall -2 x x x",1);
		    systemcall("sync",1);
		    FedDog();
		    sleep_my(30);
		    FedDog();
		    systemcall("sync",1);
		    systemcall("killall -9 guard",1);
		    systemcall("poweroff",0);
		    //sleep(1);
		    exit(0);
		}
		else
		{
		    remove("/busonline/hda1/station/zzver.ini");
		}
	    }
	}
	//卸载ftp
	ftp_local.FTPFsrw = 1;
	IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);
	systemcall("mount -n -o remount,rw / 2>/dev/null",1);
	sprintf(cmdtmp,"lufsumount ");
	strcat(cmdtmp,DFTPMOUNT);
	strcat(cmdtmp," 2>/dev/null");
	DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);
	systemcall(cmdtmp,1);
	systemcall(cmdtmp,1);
	IPC_ProcState_Read(PROCID_GUARD,main_shm,&main_local);
	if(main_local.FTPFsrw != 1)
	    systemcall("mount -n -o remount,ro / 2>/dev/null",1);
	//systemcall("killall -9 lufsd lufsmnt lufsmount lufsumount 2>/dev/null",1);
	ftp_local.FTPFsrw = 0;
	ftp_local.FTPMount = 0x00;
	IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);

    }

    sleep(10);
    goto ftpstart;
    return 0;
}