int ListenSeries(void *pParam) { unsigned char data[256]; char szData[256]; int len, i, cnt, sendsocket, nRet; fd_set rfds; PRINTF("get pid= %d\n", getpid()); while(!gblGetQuit()) { #ifdef DSS_ENC_1100_1200_DEBUG sleep(1); continue; #endif FD_ZERO(&rfds); FD_SET(gRemoteFD, &rfds); select(gRemoteFD + 1, &rfds, NULL, NULL, NULL); len = read(gRemoteFD, data, 256) ; //成功返回数据量大小,失败返回-1 PackHeaderMSG((BYTE *)szData, MSG_TRACKAUTO, HEAD_LEN + 1); szData[HEAD_LEN] = data[3]; if(data[0] == 0x08 && data[1] == 0x09 && data[2] == 0x08) { for(i = 0; i < len; i++) { //printf("ReadDataFroCom:%x\n",data[i]); } for(cnt = 0; cnt < MAX_CLIENT; cnt++) { if(ISUSED(0, cnt) && ISLOGIN(0, cnt)) { pthread_mutex_lock(&gSetP_m.audio_video_m); sendsocket = GETSOCK(0, cnt); if(sendsocket > 0) { nRet = WriteData(sendsocket, szData, HEAD_LEN + 1); if(nRet < 0) { SETCLIUSED(0, cnt, FALSE); SETCLILOGIN(0, cnt, FALSE); //SETFARCTRLLOCK(index, cnt, 0); writeWatchDog(); DEBUG(DL_ERROR, "track Send to socket Error: SOCK = %d count = %d errno = %d ret = %d\n", sendsocket, cnt, errno, nRet); } } pthread_mutex_unlock(&gSetP_m.audio_video_m); } } } } return len; }
int Enconn::SendCmd(char* buf,size_t len,int key) { int rcvLen = 0; char pData[512] = {0}; if((HEAD_LEN+len)>512)return -1; if(Enctype==1)//ENC1200 { PackHeaderMSG((BYTE *)pData, key, (HEAD_LEN+len)); memcpy(pData+HEAD_LEN,buf,len); rcvLen=Send((char*)pData,HEAD_LEN+len);//发送消息 } else//ENC110 { *(short*)(&pData)=htons(3+len); pData[2]=key; memcpy(pData+3,buf,len); rcvLen=Send((char*)pData,3+len);//发送消息 } return rcvLen; }
int Enconn::SetImage(LogoInfo position) { char pData[1024] = {0}; if(Enctype==1)//ENC1200 { PackHeaderMSG((BYTE *)pData, MSG_SET_LOGOINFO, (HEAD_LEN+1+sizeof(LogoInfo))); pData[HEAD_LEN]=0; memcpy(pData+HEAD_LEN+1,&position,sizeof(LogoInfo)); Send(pData,HEAD_LEN+1+sizeof(LogoInfo)); } else { *(short*)(&pData)=htons(4+sizeof(LogoInfo)); pData[2]=MSG_SET_LOGOINFO; pData[3]=0; memcpy(pData+4,&position,sizeof(LogoInfo)); Send(pData,4+sizeof(LogoInfo)); } return 0; }
// 上传img图片logo int Enconn::UploadImg(CString filePath, LogoInfo position,int type) { int length; CFile file; char pData[1024] = {0}; if(file.Open(filePath,CFile::typeBinary|CFile::modeRead)==FALSE) { ::AfxMessageBox(_T("打开文件失败")); return -1; } length=file.GetLength(); printf("img file length=%d\n",length); if(length<1)return -1; if(Enctype==1)//ENC1200 { PackHeaderMSG((BYTE *)pData, MSG_SET_LOGOINFO, (HEAD_LEN+1+sizeof(LogoInfo))); pData[HEAD_LEN]=type; memcpy(pData+HEAD_LEN+1,&position,sizeof(LogoInfo)); *(int*)((pData+HEAD_LEN+1+sizeof(LogoInfo)))=(length); Send(pData,HEAD_LEN+1+sizeof(LogoInfo)+4); } else { *(short*)(&pData)=htons(4+sizeof(LogoInfo)); pData[2]=MSG_SET_LOGOINFO; pData[3]=type; memcpy(pData+4,&position,sizeof(LogoInfo)); *(int*)((pData+4+sizeof(LogoInfo)))=(length); Send(pData,8+sizeof(LogoInfo)); } while(length) { length=file.Read(pData,512); Send(pData,length); } return 0; }
/*update program*/ int update_program(int sSocket, char *data, int len) { unsigned long filesize; unsigned char *p; unsigned long nLen; unsigned char temp[20]; int ret; FILE *fp = NULL; p = NULL; p = malloc(8 * 1024); PRINTF("The File Updata Buffer Is 64KB!\n"); if(!p) { ERR_PRN("Malloc 8KB Buffer Failed!\n"); } else { PRINTF("The Buffer Addr 0x%x\n", (unsigned int)p); } if((fp = fopen("/update.tgz", "w+")) == NULL) { ERR_PRN("open %s error \n", "update.tgz"); return -1; } PRINTF("szData:%x, %x, %x, %x, %x, %x,%x\n", data[0], data[1], data[2], data[HEAD_LEN], data[HEAD_LEN + 1], data[HEAD_LEN + 2], data[HEAD_LEN + 3]); filesize = ((unsigned char)data[HEAD_LEN]) | ((unsigned char)data[HEAD_LEN + 1]) << 8 | ((unsigned char)data[HEAD_LEN + 2]) << 16 | ((unsigned char)data[HEAD_LEN + 3]) << 24; PRINTF("Updata file size = 0x%x! \n", (unsigned int)filesize); while(filesize) { nLen = recv(sSocket, p, 8 * 1024, 0); PRINTF("recv Updata File 0x%x Bytes!\n", (unsigned int)nLen); if(nLen <= 0) { free(p); fclose(fp); p = NULL; return -1; } ret = fwrite(p, 1, nLen, fp); if(ret < 0) { ERR_PRN("product update faith!\n"); free(p); fclose(fp); p = NULL; PackHeaderMSG((BYTE *)temp, MSG_UpdataFile_FAILS, HEAD_LEN); WriteData(sSocket, temp, HEAD_LEN); return -1; } PRINTF("write data ...........................:0x%x\n", (unsigned int)filesize); filesize = filesize - nLen; } PRINTF("recv finish......................\n"); free(p); fclose(fp); ret = updatesystem("/update.tgz"); if(ret == 0) { PackHeaderMSG((BYTE *)temp, MSG_UpdataFile_SUCC, HEAD_LEN); } else { PackHeaderMSG((BYTE *)temp, MSG_UpdataFile_FAILS, HEAD_LEN); } WriteData(sSocket, temp, HEAD_LEN); system("sync"); sleep(5); /*重启*/ PRINTF("----------------reboot----------\n"); system("reboot -f"); return 0; }