void OnInit(int svsNum) { printf("OnInit-Record\n"); initializeSigRoutine(); //start = true; num_shared_vars = svsNum + 2; // one for fork, and the other is for synchronizations for (int i = 0; i < MAX_THREAD_NUM; i++) { thread_idx_map[i] = 0; } initialize(num_shared_vars); // initialize locks GLOG = new unsigned*[num_shared_vars]; GIDX = new unsigned[num_shared_vars]; for (int i = 0; i < num_shared_vars; i++) { GLOG[i] = new unsigned[MAX_LOG_LEN]; GIDX[i] = 0; } // main thread. pthread_t tid = pthread_self(); if (threadid(tid) == -1) { threadcreate(tid); } //gettimeofday(&tpstart, NULL); }
void leave(critsect_t cs) { if (cs->owner != threadid()) return; if (cs->recursion > 0) { cs->recursion--; } else { cs->owner = NOHANDLE; if (atomic_add(&cs->count, -1) >= 0) eset(cs->event); } }
void enter(critsect_t cs) { tid_t tid = threadid(); if (cs->owner == tid) { cs->recursion++; } else { if (atomic_add(&cs->count, 1) > 0) while (waitone(cs->event, INFINITE) != 0); cs->owner = tid; } }
void OnFork(long forked_tid_ptr) { if (!start) { return; } pthread_t ftid = *((pthread_t*) forked_tid_ptr); if (threadid(ftid) == -1) { threadcreate(ftid); } #ifdef DEBUG printf("OnFork\n"); #endif pthread_t tid = pthread_self(); int _tid = -1; do { _tid = threadid(tid); } while (_tid < 0); store(num_shared_vars - 1, _tid); forkunlock(num_shared_vars - 1); }
void OnUnlock(int nouse) { #ifdef DEBUG if (!start) { return; } pthread_t tid = pthread_self(); int _tid = -1; do { _tid = threadid(tid); } while (_tid < 0); printf("OnunLock <-- t%d\n", _tid); #endif }
void OnWait(int condId, long cond_ptr, long mutex_ptr) { if (!start) { return; } #ifdef DEBUG printf("OnWait\n"); #endif pthread_t tid = pthread_self(); int _tid = -1; do { _tid = threadid(tid); } while (_tid < 0); store(num_shared_vars - 2, _tid); }
void OnNotify(int condId) { if (!start) { return; } #ifdef DEBUG printf("OnNotify\n"); #endif pthread_t tid = pthread_self(); int _tid = -1; do { _tid = threadid(tid); } while (_tid < 0); store(num_shared_vars - 2, _tid); unlock(num_shared_vars - 2); }
void threadmain(int argc, char **argv) { char args[Arglen]; char *as, *ae; int accel, pena, devid; int csps[] = { KbdCSP, PtrCSP, 0 }; quotefmtinstall(); pena = 1; ae = args+sizeof(args); as = seprint(args, ae, "kb"); ARGBEGIN{ case 'a': accel = strtol(EARGF(usage()), nil, 0); as = seprint(as, ae, " -a %d", accel); break; case 'd': usbdebug++; as = seprint(as, ae, " -d"); break; case 'k': as = seprint(as, ae, " -k"); pena = 0; break; case 'm': as = seprint(as, ae, " -m"); pena = 1; break; case 'N': devid = atoi(EARGF(usage())); /* ignore dev number */ USED(devid); break; case 'b': as = seprint(as, ae, " -b"); break; default: usage(); }ARGEND; rfork(RFNOTEG); fmtinstall('U', Ufmt); threadsetgrp(threadid()); if(pena == 0) csps[1] = 0; startdevs(args, argv, argc, matchdevcsp, csps, kbmain); threadexits(nil); }
void OnLock(int nouse) { if (!start) { return; } pthread_t tid = pthread_self(); int _tid = -1; do { _tid = threadid(tid); } while (_tid < 0); store(num_shared_vars - 2, _tid); #ifdef DEBUG printf("OnLock --> t%d\n", _tid); #endif }
void OnPreStore(int svId, int debug) { if (!start) { return; } pthread_t tid = pthread_self(); int _tid = -1; do { _tid = threadid(tid); } while (_tid < 0); lock(svId); #ifdef DEBUG printf("OnPreStore: %d at t%d [%d]\n", svId, _tid, debug); #endif store(svId, _tid); }
void threadmain(int argc, char **argv) { char *mnt, *srv, *as, *ae; char args[Arglen]; mnt = "/dev"; srv = nil; quotefmtinstall(); ae = args + sizeof args; as = seprint(args, ae, "serial"); ARGBEGIN{ case 'D': usbfsdebug++; break; case 'd': usbdebug++; as = seprint(as, ae, " -d"); break; case 'N': as = seprint(as, ae, " -N %s", EARGF(usage())); break; case 'm': mnt = EARGF(usage()); break; case 's': srv = EARGF(usage()); break; default: usage(); break; }ARGEND; rfork(RFNOTEG); fmtinstall('U', Ufmt); threadsetgrp(threadid()); usbfsinit(srv, mnt, &usbdirfs, MAFTER|MCREATE); startdevs(args, argv, argc, matchserial, nil, serialmain); threadexits(nil); }
static void startdevproc(void *a) { Sarg *sa = a; Dev *d; Devtab *dt; int argc; char *args, *argse, **argv; char *fname; threadsetgrp(threadid()); d = sa->pp->dev; dt = sa->dt; args = sa->args; argse = sa->args + sizeof sa->args; argv = sa->argv; fname = sa->fname; sa->pp->devmaskp = &dt->devmask; sa->pp->devnb = getdevnb(&dt->devmask); if(sa->pp->devnb < 0){ sa->pp->devmaskp = nil; sa->pp->devnb = 0; }else args = seprint(args, argse, "-N %d", sa->pp->devnb); if(dt->args != nil) seprint(args, argse, " %s", dt->args); args = sa->args; dprint(2, "%s: start: %s %s\n", argv0, dt->name, args); argv[0] = dt->name; argc = 1; if(args[0] != 0) argc += tokenize(args, argv+1, nelem(sa->argv)-2); argv[argc] = nil; if(dt->init == nil){ if(d->dfd > 0 ){ close(d->dfd); d->dfd = -1; } rfork(RFCFDG); open("/dev/null", OREAD); open("/dev/cons", OWRITE); open("/dev/cons", OWRITE); xexec(sa->rc, argv[0], argv); snprint(fname, sizeof(sa->fname), "/bin/usb/%s", dt->name); xexec(sa->rc, fname, argv); snprint(fname, sizeof(sa->fname), "/boot/%s", dt->name); xexec(sa->rc, fname, argv); if(cputype == nil) cputype = getenv("cputype"); if(cputype != nil){ snprint(fname, sizeof(sa->fname), "/%s/bin/%s", cputype, dt->name); argv[0] = fname; xexec(sa->rc, fname, argv); } fprint(2, "%s: %s: not found. can't exec\n", argv0, dt->name); sendul(sa->rc, -1); threadexits("exec"); }else{ sa->pp->dev = opendev(d->dir); sendul(sa->rc, 0); if(dt->init(d, argc, argv) < 0) fprint(2, "%s: %s: %r\n", argv0, dt->name); closedev(d); free(sa); } threadexits(nil); }
int CPlayer::ReStartMonitor() { m_comSocket.Close(); m_streamParser.ClearBuf();//清除缓冲 memset(&m_rcRenderRect, 0, sizeof(RECT)); if( m_comSocket.Connect(m_clientInfo.connInfo.ip, m_clientInfo.connInfo.port) < 0 ) { m_comSocket.Close(); return HHV_ERROR_CONNECT; } int streamHeaderSize = 4*1024; memset( m_streamHeader, 0x00, sizeof(m_streamHeader) ); int ret = MonitorStartCmdMT(m_comSocket.m_hSocket, &m_clientInfo, m_streamHeader, streamHeaderSize); if( ret < 0 ) { m_comSocket.Close(); return ret; } PlayM4_Stop(m_index); PlayM4_CloseStream( m_index); ResetBuf(); //mode- 流模式(1-实时流/2-文件流) int nErr = 0; m_playType = STREAME_REALTIME; BOOL bret = PlayM4_SetStreamOpenMode(m_index, m_playType); bret = PlayM4_OpenStream( m_index, (BYTE*)m_streamHeader, streamHeaderSize, 600*1024); if (!bret) { m_comSocket.Close(); nErr = PlayM4_GetLastError(m_index); return -nErr; } m_disconnection = false; if( ! PlayM4_RigisterDrawFun( m_index, MP4SDKDrawFun, (DWORD)this) ) { m_comSocket.Close(); nErr = PlayM4_GetLastError(m_index); //TRACE_SDK_ERROR("执行 CHKSeries::RegisterDrawFun 中 PlayM4_RigisterDrawFun 函数 Fail nErr = %d strErr = %s\r\n\r\n", nErr, strErr.c_str() ); return -nErr; } bret = PlayM4_Play(m_index, m_hWnd); if (!bret) { nErr = PlayM4_GetLastError(m_index); //string strErr = GetPlayMp4LastErrorStr( nErr ); //TRACE_SDK_ERROR("执行 CHKSeries::OpenStream 中 PlayM4_Play 函数 Fail nErr = %d strErr = %s\r\n\r\n", nErr, strErr.c_str() ); return -nErr; } m_hRenderWnd = m_hWnd; ResizeMonitorWindow(); //memcpy(&m_clientInfo, clientInfo, sizeof(UNISDK_CLIENT_INFO)); //开启线程, 接收视频流 m_exit = false; UINT threadid(0); m_Thread = (HANDLE)_beginthreadex( NULL, 4*1024*1024, DecoderRoutine, this, 0, &threadid ); if(m_Thread <= 0) { TRACE(_T("(MTVideo)!!!!!!开辟接受数据线程失败!m_Thread:%d errno:%d _doserrno:%d \r\n"), m_Thread, errno, _doserrno); SetEvent( m_hExitEvent ); } CloseHandle( m_Thread ); // // TRACE(_T("(MTVideo)监视成功结束 m_PlayHandle = %d dvrIP = %s channel = %d\r\n"), //m_PlayHandle, m_clientInfo.connInfo.ip, clientInfo->channel); return m_index; }
INT CPlayer::StartMonitor(HWND hWnd, HHV_CLIENT_INFO* clientInfo) { m_hWnd = hWnd; memcpy(&m_clientInfo, clientInfo, sizeof(HHV_CLIENT_INFO)); m_disconnection = false; if( clientInfo == NULL ) { return HHV_ERROR_INVALID_PARA; } if( !CCommClass::CheckIP(std::string(clientInfo->connInfo.ip)) ) { return HHV_ERROR_INVALID_IP; } if( m_comSocket.Connect(clientInfo->connInfo.ip, clientInfo->connInfo.port) < 0 ) { m_comSocket.Close(); return HHV_ERROR_CONNECT; } int streamHeaderSize = 4*1024; memset( m_streamHeader, 0x00, sizeof(m_streamHeader) ); int ret = MonitorStartCmdMT(m_comSocket.m_hSocket, clientInfo, m_streamHeader, streamHeaderSize); if( ret < 0 ) { //TRACE(_T("(MTVideo)监视失败 发送cmd失败或被服务器拒绝 vsIP = %s vsPort = %d dvrIP = %s channel = %d\r\n", // clientInfo->RFIP, clientInfo->RFTCPPort, clientInfo->connInfo.ip, clientInfo->channel); m_comSocket.Close(); return ret; } //TRACE(_T("(MTVideo)监视 发送cmd成功 vsIP = %s vsPort = %d dvrIP = %s channel = %d\r\n", // clientInfo->RFIP, clientInfo->RFTCPPort, clientInfo->connInfo.ip, clientInfo->channel); //mode- 流模式(1-实时流/2-文件流) int nErr = 0; m_playType = STREAME_REALTIME; //NAME(PlayM4_GetPort)(&m_index); BOOL bret = PlayM4_SetStreamOpenMode(m_index, m_playType); nErr = PlayM4_GetLastError(m_index); bret = PlayM4_OpenStream( m_index, (BYTE*)m_streamHeader, streamHeaderSize, 600*1024); nErr = PlayM4_GetLastError(m_index); if (!bret) { m_comSocket.Close(); nErr = PlayM4_GetLastError(m_index); //string strErr = GetPlayMp4LastErrorStr( nErr ); //TRACE_SDK_ERROR("执行 CHKSeries::OpenStream 中 PlayM4_OpenStream 函数 Fail nErr = %d strErr = %s\r\n\r\n", nErr, strErr.c_str() ); //RACE_LOG("(MTVideo)监视失败 <Error pDvrSDK->OpenPlayStream Fail> m_PlayHandle = %d dvrIP = %s channel = %d\r\n", // m_PlayHandle, clientInfo->connInfo.ip, clientInfo->channel); return -nErr; } if( ! PlayM4_RigisterDrawFun( m_index, MP4SDKDrawFun, (DWORD)this) ) { m_comSocket.Close(); nErr = PlayM4_GetLastError(m_index); //TRACE_SDK_ERROR("执行 CHKSeries::RegisterDrawFun 中 PlayM4_RigisterDrawFun 函数 Fail nErr = %d strErr = %s\r\n\r\n", nErr, strErr.c_str() ); return -nErr; } bret = PlayM4_Play(m_index, hWnd); if (!bret) { nErr = PlayM4_GetLastError(m_index); //string strErr = GetPlayMp4LastErrorStr( nErr ); //TRACE_SDK_ERROR("执行 CHKSeries::OpenStream 中 PlayM4_Play 函数 Fail nErr = %d strErr = %s\r\n\r\n", nErr, strErr.c_str() ); return -nErr; } m_hRenderWnd = hWnd; ResizeMonitorWindow(); TRACE(_T("(MTVideo)监视 OpenPlayStream成功 m_index = %d dvrIP = %s channel = %d\r\n"), m_index, clientInfo->connInfo.ip, clientInfo->channel); //memcpy(&m_clientInfo, clientInfo, sizeof(UNISDK_CLIENT_INFO)); //开启线程, 接收视频流 m_exit = false; UINT threadid(0); m_Thread = (HANDLE)_beginthreadex( NULL, 4*1024*1024, DecoderRoutine, this, 0, &threadid ); if(m_Thread <= 0) { TRACE(_T("(MTVideo)!!!!!!开辟接受数据线程失败!m_Thread:%d errno:%d _doserrno:%d \r\n"), m_Thread, errno, _doserrno); SetEvent( m_hExitEvent ); } CloseHandle( m_Thread ); TRACE(_T("(MTVideo)监视成功结束 m_PlayHandle = %d dvrIP = %s channel = %d\r\n"), m_PlayHandle, clientInfo->connInfo.ip, clientInfo->channel); return m_index; }
int CPlayer::StartPlayBackByTime(HWND hWnd, SYSTEM_VIDEO_FILE* recdFile, char* ssIP, int ssPort) { if( m_comSocket.Connect(ssIP, ssPort) < 0 ) { m_comSocket.Close(); return -1; } int streamHeaderSize = 4*1024; memset( m_streamHeader, 0x00, sizeof(m_streamHeader) ); SPlayBackByTimeResponseInfo rspBody; if( PlayStartCmdByTime(m_comSocket.m_hSocket, recdFile, m_streamHeader, streamHeaderSize, rspBody) < 0 ) { m_comSocket.Close(); return -1; } m_playbacklen = rspBody.nPlayBackLength; m_streamParser_PlayBack.SetSocketPara(&m_comSocket); m_streamParser_PlayBack.SetFileLenPara(m_playbacklen); //mode- 流模式(1-实时流/2-文件流) int nErr = 0; m_playType = STREAME_FILE; BOOL bret = PlayM4_SetStreamOpenMode(m_index, m_playType); bret = PlayM4_OpenStream( m_index, (BYTE*)m_streamHeader, streamHeaderSize, 600*1024); if (!bret) { m_comSocket.Close(); nErr = PlayM4_GetLastError(m_index); //string strErr = GetPlayMp4LastErrorStr( nErr ); //TRACE_SDK_ERROR("执行 CHKSeries::OpenStream 中 PlayM4_OpenStream 函数 Fail nErr = %d strErr = %s\r\n\r\n", nErr, strErr.c_str() ); //RACE_LOG("(MTVideo)监视失败 <Error pDvrSDK->OpenPlayStream Fail> m_PlayHandle = %d dvrIP = %s channel = %d\r\n", // m_PlayHandle, clientInfo->connInfo.ip, clientInfo->channel); return -nErr; } if( ! PlayM4_RigisterDrawFun( m_index, MP4SDKDrawFun, (DWORD)this) ) { m_comSocket.Close(); nErr = PlayM4_GetLastError(m_index); //TRACE_SDK_ERROR("执行 CHKSeries::RegisterDrawFun 中 PlayM4_RigisterDrawFun 函数 Fail nErr = %d strErr = %s\r\n\r\n", nErr, strErr.c_str() ); return -nErr; } bret = PlayM4_Play(m_index, hWnd); if (!bret) { nErr = PlayM4_GetLastError(m_index); //string strErr = GetPlayMp4LastErrorStr( nErr ); //TRACE_SDK_ERROR("执行 CHKSeries::OpenStream 中 PlayM4_Play 函数 Fail nErr = %d strErr = %s\r\n\r\n", nErr, strErr.c_str() ); return -nErr; } m_hRenderWnd = hWnd; ResizeMonitorWindow(); //开启线程, 接收视频流 m_exit = false; UINT threadid(0); m_Thread = (HANDLE)_beginthreadex( NULL, 4*1024*1024, DecoderRoutine, this, 0, &threadid ); if(m_Thread <= 0) { TRACE(_T("(MTVideo)!!!!!!开辟接受数据线程失败!m_Thread:%d errno:%d _doserrno:%d \r\n"), m_Thread, errno, _doserrno); SetEvent( m_hExitEvent ); } CloseHandle( m_Thread ); return m_index; return 0; }
SmbProcessResult smbnegotiate(SmbSession *s, SmbHeader *h, uchar *, SmbBuffer *b) { ushort index; int i; uchar bufferformat; if (!smbcheckwordcount("negotiate", h, 0)) return SmbProcessResultFormat; if (s->state != SmbSessionNeedNegotiate) { /* this acts as a complete session reset */ smblogprint(-1, "smbnegotiate: called when already negotiated\n"); return SmbProcessResultUnimp; } i = 0; index = 0xffff; while (smbbuffergetb(b, &bufferformat)) { char *s; if (bufferformat != 0x02) { smblogprint(-1, "smbnegotiate: unrecognised buffer format 0x%.2ux\n", bufferformat); return SmbProcessResultFormat; } if (!smbbuffergetstr(b, 0, &s)) { smblogprint(-1, "smbnegotiate: no null found\n"); return SmbProcessResultFormat; } smblogprint(h->command, "smbnegotiate: '%s'\n", s); if (index == 0xffff && strcmp(s, "NT LM 0.12") == 0) index = i; i++; free(s); } if (index != 0xffff) { Tm *tm; ulong capabilities; ulong bytecountfixupoffset; h->wordcount = 17; if (!smbbufferputheader(s->response, h, nil) || !smbbufferputs(s->response, index) || !smbbufferputb(s->response, 3) /* user security, encrypted */ || !smbbufferputs(s->response, 1) /* max mux */ || !smbbufferputs(s->response, 1) /* max vc */ || !smbbufferputl(s->response, smbglobals.maxreceive) /* max buffer size */ || !smbbufferputl(s->response, 0x10000) /* max raw */ || !smbbufferputl(s->response, threadid())) /* session key */ goto die; /* <= Win2k insist upon this being set to ensure that they observe the prototol (!) */ capabilities = CAP_NT_SMBS; if (smbglobals.unicode) capabilities |= CAP_UNICODE; tm = localtime(time(nil)); s->tzoff = tm->tzoff; if (!smbbufferputl(s->response, capabilities) || !smbbufferputv(s->response, nsec() / 100 + (vlong)10000000 * 11644473600LL) || !smbbufferputs(s->response, -s->tzoff / 60) || !smbbufferputb(s->response, 8)) /* crypt len */ goto die; bytecountfixupoffset = smbbufferwriteoffset(s->response); if (!smbbufferputs(s->response, 0)) goto die; s->cs = auth_challenge("proto=mschap role=server"); if (s->cs == nil) { smblogprint(h->command, "smbnegotiate: couldn't get mschap challenge\n"); return SmbProcessResultMisc; } if (s->cs->nchal != 8) { smblogprint(h->command, "smbnegotiate: nchal %d\n", s->cs->nchal); return SmbProcessResultMisc; } if (!smbbufferputbytes(s->response, s->cs->chal, s->cs->nchal) || !smbbufferputstring(s->response, nil, SMB_STRING_UNICODE, smbglobals.primarydomain) || !smbbufferfixuprelatives(s->response, bytecountfixupoffset)) goto die; } else { h->wordcount = 1; if (!smbbufferputheader(s->response, h, nil) || !smbbufferputs(s->response, index) || !smbbufferputs(s->response, 0)) goto die; } s->state = SmbSessionNeedSetup; return SmbProcessResultReply; die: return SmbProcessResultDie; }