void aclAdd(unsigned long addr, unsigned long mask, int flags) { addr=ntohl(addr); // printf("adding acl entry for %08x + %08x\n",addr,mask); ACLEntry f={addr,mask,flags}; int os=g_acllist.GetSize(); g_acllist.Resize(os+sizeof(f)); memcpy((char *)g_acllist.Get()+os,&f,sizeof(f)); }
static int LoadDefaultConfig(void **data, const char *desc) { static WDL_HeapBuf m_hb; const char *fn=get_ini_file(); int l=GetPrivateProfileInt(desc,"default_size",0,fn); if (l<1) return 0; if (GetPrivateProfileStruct(desc,"default",m_hb.Resize(l),l,fn)) { *data = m_hb.Get(); return l; } return 0; }
WDL_SHM_Connection::WDL_SHM_Connection(bool whichChan, const char *uniquestring, // identify int shmsize, // bytes, whoever opens first decides int timeout_sec ) { m_timeout_sec=timeout_sec; m_last_recvt=time(NULL)+2; // grace period { // make shmsize the next power of two int a = shmsize; shmsize=2; while (shmsize < SHM_MINSIZE || shmsize<a) shmsize*=2; } m_file=INVALID_HANDLE_VALUE; m_filemap=NULL; m_mem=NULL; m_events[0]=m_events[1]=NULL; m_whichChan=whichChan ? 1 : 0; char buf[512]; GetTempPath(sizeof(buf)-4,buf); if (!buf[0]) lstrcpyn(buf,"C:\\",32); if (buf[strlen(buf)-1] != '/' && buf[strlen(buf)-1] != '\\') strcat(buf,"\\"); m_tempfn.Set(buf); m_tempfn.Append("WDL_SHM_"); m_tempfn.Append(uniquestring); m_tempfn.Append(".tmp"); HANDLE mutex=NULL; { WDL_String tmp; tmp.Set("WDL_SHM_"); tmp.Append(uniquestring); tmp.Append(".mutex"); mutex = CreateMutex(NULL,FALSE,tmp.Get()); } if (mutex) WaitForSingleObject(mutex,INFINITE); DeleteFile(m_tempfn.Get()); // this is designed to fail if another process has it locked m_file=CreateFile(m_tempfn.Get(),GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE , NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_TEMPORARY,NULL); int mapsize; if (m_file != INVALID_HANDLE_VALUE && ((mapsize=GetFileSize(m_file,NULL)) < SHM_HDRSIZE+SHM_MINSIZE*2 || mapsize == 0xFFFFFFFF)) { WDL_HeapBuf tmp; memset(tmp.Resize(shmsize*2 + SHM_HDRSIZE),0,shmsize*2 + SHM_HDRSIZE); ((int *)tmp.Get())[0] = shmsize; DWORD d; WriteFile(m_file,tmp.Get(),tmp.GetSize(),&d,NULL); } if (mutex) { ReleaseMutex(mutex); CloseHandle(mutex); } if (m_file!=INVALID_HANDLE_VALUE) m_filemap=CreateFileMapping(m_file,NULL,PAGE_READWRITE,0,0,NULL); if (m_filemap) { m_mem=(unsigned char *)MapViewOfFile(m_filemap,FILE_MAP_WRITE,0,0,0); WDL_String tmp; if (!(GetVersion()&0x80000000)) tmp.Set("Global\\WDL_SHM_"); else tmp.Set("WDL_SHM_"); tmp.Append(uniquestring); tmp.Append(".1"); m_events[0]=CreateEvent(NULL,false,false,tmp.Get()); tmp.Get()[strlen(tmp.Get())-1]++; m_events[1]=CreateEvent(NULL,false,false,tmp.Get()); } }