From 1c16475e94981bef4c55f9594b31c2cdc3e6a868 Mon Sep 17 00:00:00 2001 From: paulc Date: Thu, 26 Jan 2006 17:43:02 +0000 Subject: [PATCH] Added more tweaking capabilities in dsound channel. ISDN privacy parameters made similar to SIP. git-svn-id: http://yate.null.ro/svn/yate/trunk@666 acf43c95-373e-0410-b603-e72c3f656dc1 --- modules/dsoundchan.cpp | 68 ++++++++++++++----------- modules/libypri.cpp | 38 +++++++++++++- windows/YATE.dsw | 36 +++++++++++++ windows/_dbpbx.dsp | 113 +++++++++++++++++++++++++++++++++++++++++ windows/libypbx.dsp | 102 +++++++++++++++++++++++++++++++++++++ windows/libypri.dsp | 4 +- 6 files changed, 328 insertions(+), 33 deletions(-) create mode 100644 windows/_dbpbx.dsp create mode 100644 windows/libypbx.dsp diff --git a/modules/dsoundchan.cpp b/modules/dsoundchan.cpp index 0bb64f99..87f8aa13 100644 --- a/modules/dsoundchan.cpp +++ b/modules/dsoundchan.cpp @@ -40,13 +40,14 @@ using namespace TelEngine; // we should use the primary sound buffer else we will lose sound while we have no input focus -#define USE_PRIMARY_BUFFER +static bool s_primary = true; // 20ms chunk, 100ms buffer #define CHUNK_SIZE 320 -#define MIN_SIZE (3*CHUNK_SIZE) -#define BUF_SIZE (4*CHUNK_SIZE) -#define MAX_SIZE (5*CHUNK_SIZE) +static unsigned int s_chunk = CHUNK_SIZE; +static unsigned int s_minsize = 2*CHUNK_SIZE; +static unsigned int s_bufsize = 3*CHUNK_SIZE; +static unsigned int s_maxsize = 4*CHUNK_SIZE; class DSoundSource : public DataSource { @@ -181,11 +182,7 @@ bool DSoundPlay::init() HWND wnd = GetForegroundWindow(); if (!wnd) wnd = GetDesktopWindow(); -#ifdef USE_PRIMARY_BUFFER - if (FAILED(hr = m_ds->SetCooperativeLevel(wnd,DSSCL_WRITEPRIMARY))) { -#else - if (FAILED(hr = m_ds->SetCooperativeLevel(wnd,DSSCL_EXCLUSIVE))) { -#endif + if (FAILED(hr = m_ds->SetCooperativeLevel(wnd,s_primary ? DSSCL_WRITEPRIMARY : DSSCL_EXCLUSIVE))) { Debug(DebugGoOn,"Could not set the DirectSound cooperative level, code 0x%X",hr); return false; } @@ -200,23 +197,23 @@ bool DSoundPlay::init() DSBUFFERDESC bdesc; ZeroMemory(&bdesc, sizeof(bdesc)); bdesc.dwSize = sizeof(bdesc); -#ifdef USE_PRIMARY_BUFFER - bdesc.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_STICKYFOCUS; -#else - bdesc.dwFlags = DSBCAPS_LOCSOFTWARE ; - bdesc.dwBufferBytes = BUF_SIZE; - bdesc.lpwfxFormat = &fmt; -#endif + if (s_primary) + bdesc.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_STICKYFOCUS; + else { + bdesc.dwFlags = DSBCAPS_GLOBALFOCUS; + // we have to set format when creating secondary buffers + bdesc.dwBufferBytes = s_bufsize; + bdesc.lpwfxFormat = &fmt; + } if (FAILED(hr = m_ds->CreateSoundBuffer(&bdesc, &m_dsb, NULL)) || !m_dsb) { Debug(DebugGoOn,"Could not create the DirectSound buffer, code 0x%X",hr); return false; } -#ifdef USE_PRIMARY_BUFFER - if (FAILED(hr = m_dsb->SetFormat(&fmt))) { + // format can be changed only for primary buffers + if (s_primary && FAILED(hr = m_dsb->SetFormat(&fmt))) { Debug(DebugGoOn,"Could not set the DirectSound buffer format, code 0x%X",hr); return false; } -#endif if (FAILED(hr = m_dsb->GetFormat(&fmt,sizeof(fmt),0))) { Debug(DebugGoOn,"Could not get the DirectSound buffer format, code 0x%X",hr); return false; @@ -259,19 +256,19 @@ void DSoundPlay::run() while (m_owner) { msleep(1,true); if (first) { - if (m_buf.length() < MIN_SIZE) + if (m_buf.length() < s_minsize) continue; first = false; m_dsb->GetCurrentPosition(NULL,&m_writePos); Debug(&__plugin,DebugAll,"DSoundPlay has %u in buffer and starts playing at %u", m_buf.length(),m_writePos); } - while (m_dsb && (m_buf.length() >= CHUNK_SIZE)) { + while (m_dsb && (m_buf.length() >= s_chunk)) { void* buf = 0; void* buf2 = 0; DWORD len = 0; DWORD len2 = 0; - HRESULT hr = m_dsb->Lock(m_writePos,CHUNK_SIZE,&buf,&len,&buf2,&len2,0); + HRESULT hr = m_dsb->Lock(m_writePos,s_chunk,&buf,&len,&buf2,&len2,0); if (FAILED(hr)) { m_writePos = 0; if ((hr == DSERR_BUFFERLOST) && SUCCEEDED(m_dsb->Restore())) { @@ -292,10 +289,10 @@ void DSoundPlay::run() if (buf2) ::memcpy(buf2,((const char*)m_buf.data())+len,len2); m_dsb->Unlock(buf,len,buf2,len2); - m_writePos += CHUNK_SIZE; + m_writePos += s_chunk; if (m_writePos >= m_buffSize) m_writePos -= m_buffSize; - m_buf.cut(-CHUNK_SIZE); + m_buf.cut(-(int)s_chunk); unlock(); XDebug(&__plugin,DebugAll,"Locked %p,%d %p,%d",buf,len,buf2,len2); } @@ -322,7 +319,7 @@ void DSoundPlay::put(const DataBlock& data) if (!m_dsb) return; lock(); - if (m_buf.length() + data.length() <= MAX_SIZE) + if (m_buf.length() + data.length() <= s_maxsize) m_buf += data; #ifdef DDEBUG else @@ -332,7 +329,7 @@ void DSoundPlay::put(const DataBlock& data) } DSoundRec::DSoundRec(DSoundSource* owner, LPGUID device) - : Thread("DirectSound Rec"), + : Thread("DirectSound Rec",High), m_owner(owner), m_device(device), m_ds(0), m_dsb(0), m_buffSize(0), m_readPos(0) { @@ -372,7 +369,7 @@ bool DSoundRec::init() ZeroMemory(&bdesc, sizeof(bdesc)); bdesc.dwSize = sizeof(bdesc); bdesc.dwFlags = DSCBCAPS_WAVEMAPPED; - bdesc.dwBufferBytes = BUF_SIZE; + bdesc.dwBufferBytes = s_bufsize; bdesc.lpwfxFormat = &fmt; if (FAILED(hr = m_ds->CreateCaptureBuffer(&bdesc, &m_dsb, NULL)) || !m_dsb) { Debug(DebugGoOn,"Could not create the DirectSoundCapture buffer, code 0x%X",hr); @@ -422,13 +419,13 @@ void DSoundRec::run() if (pos < m_readPos) pos += m_buffSize; pos -= m_readPos; - if (pos < CHUNK_SIZE) + if (pos < s_chunk) continue; void* buf = 0; void* buf2 = 0; DWORD len = 0; DWORD len2 = 0; - if (FAILED(m_dsb->Lock(m_readPos,CHUNK_SIZE,&buf,&len,&buf2,&len2,0))) + if (FAILED(m_dsb->Lock(m_readPos,s_chunk,&buf,&len,&buf2,&len2,0))) continue; DataBlock data(0,len+len2); ::memcpy(data.data(),buf,len); @@ -629,6 +626,19 @@ void SoundDriver::initialize() setup(0,true); // no need to install notifications Driver::initialize(); if (!m_handler) { + Configuration cfg(Engine::configFile("dsoundchan")); + s_chunk = cfg.getIntValue("general","chunk",CHUNK_SIZE); + // make sure the chunk is even sized + s_chunk &= ~1; + // and set some decent limits for it (5-100 ms) + if (s_chunk < 80) + s_chunk = 80; + if (s_chunk > 1600) + s_chunk = 1600; + s_minsize = cfg.getIntValue("general","minsize",2*s_chunk); + s_bufsize = cfg.getIntValue("general","bufsize",3*s_chunk); + s_maxsize = cfg.getIntValue("general","maxsize",4*s_chunk); + s_primary = cfg.getBoolValue("general","primary",true); m_handler = new AttachHandler; Engine::install(m_handler); } diff --git a/modules/libypri.cpp b/modules/libypri.cpp index 75f6d5b7..b3e9efd8 100644 --- a/modules/libypri.cpp +++ b/modules/libypri.cpp @@ -24,6 +24,19 @@ #include +/* Individual bit groups in number presentation - Q931 octet 3a bits 7,6 */ +#define PRESENTATION_BIT_MASK 0x60 +#define PRESENTATION_ALLOWED 0x00 +#define PRESENTATION_RESTRICTED 0x20 +#define PRESENTATION_UNAVAILABLE 0x40 + +/* Individual bit groups in number screening - Q931 octet 3a bits 2,1 */ +#define SCREENING_BIT_MASK 0x03 +#define SCREENING_USER_NOT_SCREENED 0x00 +#define SCREENING_USER_PASSED 0x01 +#define SCREENING_USER_FAILED 0x02 +#define SCREENING_NETWORK_PROVIDED 0x03 + extern "C" { extern int q931_setup(struct pri *pri, q931_call *c, struct pri_sr *req); }; @@ -116,7 +129,7 @@ static TokenDict dict_str2dplan[] = { { 0, -1 } }; -/* Presentation */ +/* Presentation and screening */ static TokenDict dict_str2pres[] = { { "allow_user_not_screened", PRES_ALLOWED_USER_NUMBER_NOT_SCREENED }, { "allow_user_passed", PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN }, @@ -130,6 +143,7 @@ static TokenDict dict_str2pres[] = { { 0, -1 } }; + #ifdef PRI_NSF_NONE #define YATE_NSF_DEFAULT PRI_NSF_NONE #else @@ -824,7 +838,15 @@ bool PriChan::call(Message &msg, const char *called) char *caller = (char *)msg.getValue("caller"); int callerplan = msg.getIntValue("callerplan",dict_str2dplan,m_span->dplan()); char *callername = (char *)msg.getValue("callername"); - int callerpres = msg.getIntValue("callerpres",dict_str2pres,m_span->pres()); + int callerpres = m_span->pres(); + String tmp = msg.getValue("screened"); + if (tmp.isBoolean()) + callerpres = (callerpres & ~SCREENING_BIT_MASK) | + (tmp.toBoolean() ? SCREENING_USER_PASSED : SCREENING_USER_NOT_SCREENED); + tmp = msg.getValue("privacy"); + if (tmp && tmp.toBoolean(true)) + callerpres = (callerpres & ~PRESENTATION_BIT_MASK) | PRESENTATION_RESTRICTED; + callerpres = msg.getIntValue("presentation",dict_str2pres,callerpres); int calledplan = msg.getIntValue("calledplan",dict_str2dplan,m_span->dplan()); Debug(this,DebugAll,"Caller='%s' name='%s' plan=%s pres=%s, Called plan=%s", caller,callername,lookup(callerplan,dict_str2dplan), @@ -882,6 +904,8 @@ void PriChan::ring(pri_event_ring &ev) openData(lookup(ev.layer1,dict_str2law),0); m = message("call.preroute"); + m->addParam("span",String(m_span->span())); + m->addParam("channel",String(m_chan)); if (m_span->overlapped() && !ev.complete && (::strlen(ev.callednum) < m_span->overlapped())) { ::pri_need_more_info(m_span->pri(),m_call,m_chan,!isISDN()); m->addParam("overlapped","yes"); @@ -890,6 +914,16 @@ void PriChan::ring(pri_event_ring &ev) m->addParam("caller",ev.callingnum); if (ev.callednum[0]) m->addParam("called",ev.callednum); + if ((ev.callingpres & PRESENTATION_BIT_MASK) == PRESENTATION_RESTRICTED) + m->addParam("privacy","name"); + switch (ev.callingpres & SCREENING_BIT_MASK) { + case SCREENING_USER_PASSED: + m->addParam("screened","yes"); + break; + case SCREENING_USER_NOT_SCREENED: + m->addParam("screened","no"); + break; + } const char* dataLaw = "slin"; switch (ev.layer1) { case PRI_LAYER_1_ALAW: diff --git a/windows/YATE.dsw b/windows/YATE.dsw index 4b7a4a00..3001c613 100644 --- a/windows/YATE.dsw +++ b/windows/YATE.dsw @@ -191,6 +191,9 @@ Package=<4> Begin Project Dependency Project_Dep_Name _ilbccodec End Project Dependency + Begin Project Dependency + Project_Dep_Name _dbpbx + End Project Dependency }}} ############################################################################### @@ -312,6 +315,24 @@ Package=<4> ############################################################################### +Project: "_dbpbx"=.\_dbpbx.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name Libyate + End Project Dependency + Begin Project Dependency + Project_Dep_Name libypbx + End Project Dependency +}}} + +############################################################################### + Project: "_dsoundchan"=.\_dsoundchan.dsp - Package Owner=<4> Package=<5> @@ -633,6 +654,21 @@ Package=<4> ############################################################################### +Project: "libypbx"=.\libypbx.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name Libyate + End Project Dependency +}}} + +############################################################################### + Project: "libypri"=.\libypri.dsp - Package Owner=<4> Package=<5> diff --git a/windows/_dbpbx.dsp b/windows/_dbpbx.dsp new file mode 100644 index 00000000..24f3e2d9 --- /dev/null +++ b/windows/_dbpbx.dsp @@ -0,0 +1,113 @@ +# Microsoft Developer Studio Project File - Name="_dbpbx" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=_dbpbx - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "_dbpbx.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "_dbpbx.mak" CFG="_dbpbx - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "_dbpbx - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "_dbpbx - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "_dbpbx - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "_dbpbx___Win32_Release" +# PROP BASE Intermediate_Dir "_dbpbx___Win32_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release\modules" +# PROP Ignore_Export_Lib 1 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_dbpbx_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /O2 /I "." /I ".." /I "..\contrib\ypbx" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBYPBX_STATIC" /FD /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib Release/libypbx.lib /nologo /dll /machine:I386 /out:"Release/dbpbx.yate" + +!ELSEIF "$(CFG)" == "_dbpbx - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "_dbpbx___Win32_Debug" +# PROP BASE Intermediate_Dir "_dbpbx___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug\modules" +# PROP Ignore_Export_Lib 1 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_dbpbx_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /Zi /Od /I "." /I ".." /I "..\contrib\ypbx" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBYPBX_STATIC" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib Debug/libypbx.lib /nologo /dll /incremental:no /debug /machine:I386 /out:"Debug/dbpbx.yate" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "_dbpbx - Win32 Release" +# Name "_dbpbx - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\modules\dbpbx.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\version.rc +# End Source File +# End Group +# End Target +# End Project diff --git a/windows/libypbx.dsp b/windows/libypbx.dsp new file mode 100644 index 00000000..c28361e8 --- /dev/null +++ b/windows/libypbx.dsp @@ -0,0 +1,102 @@ +# Microsoft Developer Studio Project File - Name="libypbx" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=libypbx - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "libypbx.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "libypbx.mak" CFG="libypbx - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "libypbx - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "libypbx - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "libypbx - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "libypbx___Win32_Release" +# PROP BASE Intermediate_Dir "libypbx___Win32_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release\ypbx" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /MD /W3 /O2 /I "." /I ".." /I "..\contrib\ypbx" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LIBYPBX_STATIC" /FD /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "libypbx - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "libypbx___Win32_Debug" +# PROP BASE Intermediate_Dir "libypbx___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug\ypbx" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /Zi /Od /I "." /I ".." /I "..\contrib\ypbx" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LIBYPBX_STATIC" /FR /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "libypbx - Win32 Release" +# Name "libypbx - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\contrib\ypbx\multiroute.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\contrib\ypbx\yatepbx.h +# End Source File +# End Group +# End Target +# End Project diff --git a/windows/libypri.dsp b/windows/libypri.dsp index 555691d4..ea828657 100644 --- a/windows/libypri.dsp +++ b/windows/libypri.dsp @@ -41,7 +41,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MD /W3 /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c +# ADD CPP /nologo /MD /W3 /O2 /I "." /I ".." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LIBYPRI_STATIC" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" @@ -65,7 +65,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /Zi /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FR /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /Zi /Od /I "." /I ".." /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LIBYPRI_STATIC" /FR /FD /GZ /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG"