summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjmedia/include/pjmedia/aec.h4
-rw-r--r--pjmedia/include/pjmedia/aec_port.h4
-rw-r--r--pjmedia/include/pjmedia/sound_port.h34
-rw-r--r--pjmedia/src/pjmedia/aec_port.c6
-rw-r--r--pjmedia/src/pjmedia/aec_speex.c60
-rw-r--r--pjmedia/src/pjmedia/dsound.c46
-rw-r--r--pjmedia/src/pjmedia/sound_port.c78
-rw-r--r--pjsip-apps/src/pjsua_wince/pjsua_wince.cpp66
-rw-r--r--pjsip-apps/src/pjsua_wince/pjsua_wince.vcp331
-rw-r--r--pjsip-apps/src/samples/aectest.c10
-rw-r--r--pjsip/docs/PJSUA-TESTING.txt41
-rw-r--r--pjsip/docs/TRANSPORT-PROBLEMS.TXT46
-rw-r--r--pjsip/include/pjsua-lib/pjsua.h25
-rw-r--r--pjsip/include/pjsua-lib/pjsua_internal.h1
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c53
15 files changed, 657 insertions, 148 deletions
diff --git a/pjmedia/include/pjmedia/aec.h b/pjmedia/include/pjmedia/aec.h
index a2354ef3..84ed7e0f 100644
--- a/pjmedia/include/pjmedia/aec.h
+++ b/pjmedia/include/pjmedia/aec.h
@@ -51,14 +51,14 @@ typedef struct pjmedia_aec pjmedia_aec;
* @param pool Pool to allocate memory.
* @param clock_rate Media clock rate/sampling rate.
* @param samples_per_frame Number of samples per frame.
- * @param tail_size Tail length, in number of samples.
+ * @param tail_ms Tail length, miliseconds.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjmedia_aec_create( pj_pool_t *pool,
unsigned clock_rate,
unsigned samples_per_frame,
- unsigned tail_size,
+ unsigned tail_ms,
unsigned options,
pjmedia_aec **p_aec );
diff --git a/pjmedia/include/pjmedia/aec_port.h b/pjmedia/include/pjmedia/aec_port.h
index f18b1378..2968c915 100644
--- a/pjmedia/include/pjmedia/aec_port.h
+++ b/pjmedia/include/pjmedia/aec_port.h
@@ -43,14 +43,14 @@ PJ_BEGIN_DECL
*
* @param pool Pool to allocate memory.
* @param dn_port Downstream port.
- * @param tail_length Tail length in samples.
+ * @param tail_ms Tail length in miliseconds.
* @param p_port Pointer to receive the port instance.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjmedia_aec_port_create( pj_pool_t *pool,
pjmedia_port *dn_port,
- unsigned tail_length,
+ unsigned tail_ms,
pjmedia_port **p_port );
diff --git a/pjmedia/include/pjmedia/sound_port.h b/pjmedia/include/pjmedia/sound_port.h
index 15339bcc..c144275d 100644
--- a/pjmedia/include/pjmedia/sound_port.h
+++ b/pjmedia/include/pjmedia/sound_port.h
@@ -183,6 +183,40 @@ PJ_DECL(pjmedia_snd_stream*) pjmedia_snd_port_get_snd_stream(
/**
+ * Enable accoustic echo cancellation (AEC) to the specified sound.
+ * The AEC can only be enabled for sound streams with full-duplex direction.
+ *
+ * And note, you should only change the AEC settings when the sound port
+ * is not connected to any downstream ports.
+ *
+ * @param snd_port The sound device port.
+ * @param pool Pool to re-create the AEC if necessary.
+ * @param tail_ms Maximum echo tail length to be supported, in
+ * miliseconds. If zero is specified, the AEC would
+ * be disabled.
+ *
+ * @return PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjmedia_snd_port_set_aec(pjmedia_snd_port *snd_port,
+ pj_pool_t *pool,
+ unsigned tail_ms);
+
+
+/**
+ * Get current AEC tail length, in miliseconds. The tail length will be zero
+ * if AEC is not enabled.
+ *
+ * @param snd_port The sound device port.
+ * @param p_length Pointer to receive the tail length.
+ *
+ * @return PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjmedia_snd_port_get_aec_tail(pjmedia_snd_port *snd_port,
+ unsigned *p_length);
+
+
+
+/**
* Connect a port to the sound device port. If the sound device port has a
* sound recorder device, then this will start periodic function call to
* the port's put_frame() function. If the sound device has a sound player
diff --git a/pjmedia/src/pjmedia/aec_port.c b/pjmedia/src/pjmedia/aec_port.c
index aa56b175..70d3a217 100644
--- a/pjmedia/src/pjmedia/aec_port.c
+++ b/pjmedia/src/pjmedia/aec_port.c
@@ -45,7 +45,7 @@ static pj_status_t aec_on_destroy(pjmedia_port *this_port);
PJ_DEF(pj_status_t) pjmedia_aec_port_create( pj_pool_t *pool,
pjmedia_port *dn_port,
- unsigned tail_length,
+ unsigned tail_ms,
pjmedia_port **p_port )
{
const pj_str_t AEC = { "AEC", 3 };
@@ -53,7 +53,7 @@ PJ_DEF(pj_status_t) pjmedia_aec_port_create( pj_pool_t *pool,
pj_status_t status;
PJ_ASSERT_RETURN(pool && dn_port && p_port, PJ_EINVAL);
- PJ_ASSERT_RETURN(dn_port->info.bits_per_sample==16 && tail_length,
+ PJ_ASSERT_RETURN(dn_port->info.bits_per_sample==16 && tail_ms,
PJ_EINVAL);
/* Create the port and the AEC itself */
@@ -67,7 +67,7 @@ PJ_DEF(pj_status_t) pjmedia_aec_port_create( pj_pool_t *pool,
status = pjmedia_aec_create(pool, dn_port->info.clock_rate,
dn_port->info.samples_per_frame,
- tail_length, 0, &aec->aec);
+ tail_ms, 0, &aec->aec);
if (status != PJ_SUCCESS)
return status;
diff --git a/pjmedia/src/pjmedia/aec_speex.c b/pjmedia/src/pjmedia/aec_speex.c
index 76a8dd44..95cc15b4 100644
--- a/pjmedia/src/pjmedia/aec_speex.c
+++ b/pjmedia/src/pjmedia/aec_speex.c
@@ -26,10 +26,11 @@
#include <pj/os.h>
#include <pj/pool.h>
#include <speex/speex_echo.h>
+#include <speex/speex_preprocess.h>
#define THIS_FILE "aec_speex.c"
-#define BUF_COUNT 16
+#define BUF_COUNT 8
struct frame
@@ -39,10 +40,13 @@ struct frame
struct pjmedia_aec
{
- SpeexEchoState *state;
+ SpeexEchoState *state;
+ SpeexPreprocessState *preprocess;
+
unsigned samples_per_frame;
unsigned options;
pj_int16_t *tmp_frame;
+ spx_int32_t *residue;
pj_lock_t *lock; /* To protect buffers, if required */
@@ -59,7 +63,7 @@ struct pjmedia_aec
PJ_DEF(pj_status_t) pjmedia_aec_create( pj_pool_t *pool,
unsigned clock_rate,
unsigned samples_per_frame,
- unsigned tail_size,
+ unsigned tail_ms,
unsigned options,
pjmedia_aec **p_aec )
{
@@ -68,6 +72,8 @@ PJ_DEF(pj_status_t) pjmedia_aec_create( pj_pool_t *pool,
unsigned i;
pj_status_t status;
+ *p_aec = NULL;
+
aec = pj_pool_zalloc(pool, sizeof(pjmedia_aec));
PJ_ASSERT_RETURN(aec != NULL, PJ_ENOMEM);
@@ -78,22 +84,35 @@ PJ_DEF(pj_status_t) pjmedia_aec_create( pj_pool_t *pool,
aec->samples_per_frame = samples_per_frame;
aec->options = options;
- aec->state = speex_echo_state_init(samples_per_frame,tail_size);
+ aec->state = speex_echo_state_init(samples_per_frame,
+ clock_rate * tail_ms / 1000);
if (aec->state == NULL) {
pj_lock_destroy(aec->lock);
return PJ_ENOMEM;
}
+ aec->preprocess = speex_preprocess_state_init(samples_per_frame,
+ clock_rate);
+ if (aec->preprocess == NULL) {
+ speex_echo_state_destroy(aec->state);
+ pj_lock_destroy(aec->lock);
+ return PJ_ENOMEM;
+ }
+
/* Set sampling rate */
sampling_rate = clock_rate;
speex_echo_ctl(aec->state, SPEEX_ECHO_SET_SAMPLING_RATE,
&sampling_rate);
/* Create temporary frame for echo cancellation */
- aec->tmp_frame = pj_pool_zalloc(pool, sizeof(pj_int16_t) *
- samples_per_frame);
+ aec->tmp_frame = pj_pool_zalloc(pool, 2 * samples_per_frame);
PJ_ASSERT_RETURN(aec->tmp_frame != NULL, PJ_ENOMEM);
+ /* Create temporary frame to receive residue */
+ aec->residue = pj_pool_zalloc(pool, sizeof(spx_int32_t) *
+ samples_per_frame);
+ PJ_ASSERT_RETURN(aec->residue != NULL, PJ_ENOMEM);
+
/* Create internal playback buffers */
for (i=0; i<BUF_COUNT; ++i) {
aec->frames[i].buf = pj_pool_zalloc(pool, samples_per_frame * 2);
@@ -108,7 +127,7 @@ PJ_DEF(pj_status_t) pjmedia_aec_create( pj_pool_t *pool,
"samples per frame=%d, tail length=%d ms",
clock_rate,
samples_per_frame,
- tail_size * 1000 / clock_rate));
+ tail_ms));
return PJ_SUCCESS;
}
@@ -121,11 +140,19 @@ PJ_DEF(pj_status_t) pjmedia_aec_destroy(pjmedia_aec *aec )
{
PJ_ASSERT_RETURN(aec && aec->state, PJ_EINVAL);
+ if (aec->lock)
+ pj_lock_acquire(aec->lock);
+
if (aec->state) {
speex_echo_state_destroy(aec->state);
aec->state = NULL;
}
+ if (aec->preprocess) {
+ speex_preprocess_state_destroy(aec->preprocess);
+ aec->preprocess = NULL;
+ }
+
if (aec->lock) {
pj_lock_destroy(aec->lock);
aec->lock = NULL;
@@ -224,8 +251,6 @@ PJ_DEF(pj_status_t) pjmedia_aec_cancel_echo( pjmedia_aec *aec,
unsigned options,
void *reserved )
{
- unsigned level0, level1;
-
/* Sanity checks */
PJ_ASSERT_RETURN(aec && rec_frm && play_frm && options==0 &&
reserved==NULL, PJ_EINVAL);
@@ -233,20 +258,13 @@ PJ_DEF(pj_status_t) pjmedia_aec_cancel_echo( pjmedia_aec *aec,
/* Cancel echo, put output in temporary buffer */
speex_echo_cancel(aec->state, (const spx_int16_t*)rec_frm,
(const spx_int16_t*)play_frm,
- (spx_int16_t*)aec->tmp_frame, NULL);
+ (spx_int16_t*)aec->tmp_frame,
+ aec->residue);
-#if 0
- level0 = pjmedia_calc_avg_signal(rec_frm, aec->samples_per_frame);
- level1 = pjmedia_calc_avg_signal(aec->tmp_frame, aec->samples_per_frame);
- if (level1 < level0) {
- PJ_LOG(5,(THIS_FILE, "Input signal reduced from %d to %d",
- level0, level1));
- }
-#else
- PJ_UNUSED_ARG(level0);
- PJ_UNUSED_ARG(level1);
-#endif
+ /* Preprocess output */
+ speex_preprocess(aec->preprocess, (spx_int16_t*)aec->tmp_frame,
+ aec->residue);
/* Copy temporary buffer back to original rec_frm */
pjmedia_copy_samples(rec_frm, aec->tmp_frame, aec->samples_per_frame);
diff --git a/pjmedia/src/pjmedia/dsound.c b/pjmedia/src/pjmedia/dsound.c
index 762378f0..0f9c49a1 100644
--- a/pjmedia/src/pjmedia/dsound.c
+++ b/pjmedia/src/pjmedia/dsound.c
@@ -452,7 +452,6 @@ static int dsound_dev_thread(void *arg)
HANDLE events[2];
unsigned eventCount;
unsigned bytes_per_frame;
- int excess_rec = 0;
pj_status_t status;
@@ -502,7 +501,6 @@ static int dsound_dev_thread(void *arg)
if (signalled_dir == PJMEDIA_DIR_PLAYBACK) {
struct dsound_stream *dsound_strm;
- int i;
/*
* DirectSound has requested us to feed some frames to
@@ -512,31 +510,26 @@ static int dsound_dev_thread(void *arg)
dsound_strm = &strm->play_strm;
status = PJ_SUCCESS;
- for (i=0; i <= excess_rec; ++i) {
- /* Get frame from application. */
- status = (*strm->play_cb)(strm->user_data,
- dsound_strm->timestamp.u32.lo,
- strm->buffer,
- bytes_per_frame);
- if (status != PJ_SUCCESS)
- break;
-
- /* Write to DirectSound buffer. */
- AppWriteDataToBuffer( dsound_strm->ds.play.lpDsBuffer,
- dsound_strm->dwBytePos,
- (LPBYTE)strm->buffer,
+ /* Get frame from application. */
+ status = (*strm->play_cb)(strm->user_data,
+ dsound_strm->timestamp.u32.lo,
+ strm->buffer,
bytes_per_frame);
-
- /* Increment position. */
- dsound_strm->dwBytePos += bytes_per_frame;
- if (dsound_strm->dwBytePos >= dsound_strm->dwDsBufferSize)
- dsound_strm->dwBytePos -= dsound_strm->dwDsBufferSize;
- dsound_strm->timestamp.u64 += strm->samples_per_frame;
- }
-
if (status != PJ_SUCCESS)
break;
+ /* Write to DirectSound buffer. */
+ AppWriteDataToBuffer( dsound_strm->ds.play.lpDsBuffer,
+ dsound_strm->dwBytePos,
+ (LPBYTE)strm->buffer,
+ bytes_per_frame);
+
+ /* Increment position. */
+ dsound_strm->dwBytePos += bytes_per_frame;
+ if (dsound_strm->dwBytePos >= dsound_strm->dwDsBufferSize)
+ dsound_strm->dwBytePos -= dsound_strm->dwDsBufferSize;
+ dsound_strm->timestamp.u64 += strm->samples_per_frame;
+
} else {
/*
* DirectSound has indicated that it has some frames ready
@@ -544,7 +537,6 @@ static int dsound_dev_thread(void *arg)
* prevent overflows.
*/
struct dsound_stream *dsound_strm;
- int captured = 0;
BOOL rc;
dsound_strm = &strm->rec_strm;
@@ -558,9 +550,7 @@ static int dsound_dev_thread(void *arg)
if (!rc) {
pj_bzero(strm->buffer, bytes_per_frame);
- } else {
- captured++;
- }
+ }
/* Call callback */
status = (*strm->rec_cb)(strm->user_data,
@@ -582,8 +572,6 @@ static int dsound_dev_thread(void *arg)
/* Fetch while we have more than 1 frame */
} while (dsound_captured_size(dsound_strm) > bytes_per_frame);
- excess_rec = captured-1;
- if (excess_rec < 0) excess_rec = 0;
}
}
diff --git a/pjmedia/src/pjmedia/sound_port.c b/pjmedia/src/pjmedia/sound_port.c
index ee3e61c9..37338704 100644
--- a/pjmedia/src/pjmedia/sound_port.c
+++ b/pjmedia/src/pjmedia/sound_port.c
@@ -34,7 +34,7 @@
#endif
//#define SIMULATE_LOST_PCT 20
-#define AEC_TAIL 500 /* in ms */
+#define AEC_TAIL 128 /* default AEC length in ms */
#define THIS_FILE "sound_port.c"
@@ -57,6 +57,7 @@ struct pjmedia_snd_port
unsigned options;
pjmedia_aec *aec;
+ unsigned aec_tail_len;
pjmedia_plc *plc;
unsigned clock_rate;
@@ -135,10 +136,6 @@ no_frame:
}
- if (snd_port->aec) {
- pjmedia_aec_playback(snd_port->aec, output);
- }
-
return PJ_SUCCESS;
}
@@ -156,11 +153,6 @@ static pj_status_t rec_cb(/* in */ void *user_data,
pjmedia_port *port;
pjmedia_frame frame;
- /* Cancel echo */
- if (snd_port->aec) {
- pjmedia_aec_capture(snd_port->aec, input, 0);
- }
-
/* We're risking accessing the port without holding any mutex.
* It's possible that port is disconnected then destroyed while
* we're trying to access it.
@@ -171,6 +163,11 @@ static pj_status_t rec_cb(/* in */ void *user_data,
if (port == NULL)
return PJ_SUCCESS;
+ /* Cancel echo */
+ if (snd_port->aec) {
+ pjmedia_aec_capture(snd_port->aec, input, 0);
+ }
+
frame.buf = (void*)input;
frame.size = size;
frame.type = PJMEDIA_FRAME_TYPE_AUDIO;
@@ -246,18 +243,19 @@ static pj_status_t start_sound_device( pj_pool_t *pool,
snd_port->samples_per_frame *
snd_port->channel_count,
0, &snd_port->plc);
- if (status != PJ_SUCCESS)
+ if (status != PJ_SUCCESS) {
+ PJ_LOG(4,(THIS_FILE, "Unable to create PLC"));
snd_port->plc = NULL;
+ }
}
/* Create AEC only when direction is full duplex */
if (snd_port->dir == PJMEDIA_DIR_CAPTURE_PLAYBACK) {
- status = pjmedia_aec_create(pool, snd_port->clock_rate,
- snd_port->samples_per_frame,
- snd_port->clock_rate * AEC_TAIL / 1000,
- 0, &snd_port->aec);
- if (status != PJ_SUCCESS)
+ status = pjmedia_snd_port_set_aec(snd_port, pool, AEC_TAIL);
+ if (status != PJ_SUCCESS) {
+ PJ_LOG(4,(THIS_FILE, "Unable to create AEC"));
snd_port->aec = NULL;
+ }
}
/* Start sound stream. */
@@ -432,6 +430,54 @@ PJ_DEF(pjmedia_snd_stream*) pjmedia_snd_port_get_snd_stream(
/*
+ * Enable AEC
+ */
+PJ_DEF(pj_status_t) pjmedia_snd_port_set_aec( pjmedia_snd_port *snd_port,
+ pj_pool_t *pool,
+ unsigned tail_ms)
+{
+ pj_status_t status;
+
+ /* Sound must be opened in full-duplex mode */
+ PJ_ASSERT_RETURN(snd_port &&
+ snd_port->dir == PJMEDIA_DIR_CAPTURE_PLAYBACK,
+ PJ_EINVALIDOP);
+
+ /* Destroy AEC */
+ if (snd_port->aec) {
+ pjmedia_aec_destroy(snd_port->aec);
+ snd_port->aec = NULL;
+ }
+
+ snd_port->aec_tail_len = tail_ms;
+
+ if (tail_ms != 0) {
+ status = pjmedia_aec_create(pool, snd_port->clock_rate,
+ snd_port->samples_per_frame,
+ snd_port->clock_rate * tail_ms / 1000,
+ 0, &snd_port->aec);
+ if (status != PJ_SUCCESS)
+ snd_port->aec = NULL;
+ } else {
+ status = PJ_SUCCESS;
+ }
+
+ return status;
+}
+
+
+/* Get AEC tail length */
+PJ_DEF(pj_status_t) pjmedia_snd_port_get_aec_tail( pjmedia_snd_port *snd_port,
+ unsigned *p_length)
+{
+ PJ_ASSERT_RETURN(snd_port && p_length, PJ_EINVAL);
+ *p_length = snd_port->aec ? snd_port->aec_tail_len : 0;
+ return PJ_SUCCESS;
+}
+
+
+
+/*
* Connect a port.
*/
PJ_DEF(pj_status_t) pjmedia_snd_port_connect( pjmedia_snd_port *snd_port,
diff --git a/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp b/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp
index e86ec639..177ab957 100644
--- a/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp
+++ b/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp
@@ -12,14 +12,14 @@
static HINSTANCE hInst;
static HWND hMainWnd;
static HWND hwndCB;
-static HWND hwndGlobalStatus;
-static HWND hwndURI;
-static HWND hwndCallStatus;
+static HWND hwndGlobalStatus, hwndURI, hwndCallStatus;
+static HWND hwndActionButton, hwndExitButton;
static pj_pool_t *g_pool;
static pj_str_t g_local_uri;
static int g_current_acc;
static int g_current_call = PJSUA_INVALID_ID;
+static int g_current_action;
enum
{
@@ -35,8 +35,11 @@ enum
ID_MENU_CALL,
ID_MENU_ANSWER,
ID_MENU_DISCONNECT,
+ ID_BTN_ACTION,
};
+#define DEFAULT_URI "sip:192.168.0.7"
+
// Forward declarations of functions included in this code module:
static ATOM MyRegisterClass (HINSTANCE, LPTSTR);
@@ -63,6 +66,7 @@ static void OnError(const wchar_t *title, pj_status_t status)
static void SetLocalURI(const char *uri, int len, bool enabled=true)
{
wchar_t tmp[128];
+ if (len==-1) len=pj_ansi_strlen(uri);
pj_ansi_to_unicode(uri, len, tmp, PJ_ARRAY_SIZE(tmp));
SetDlgItemText(hMainWnd, ID_GLOBAL_STATUS, tmp);
EnableWindow(hwndGlobalStatus, enabled?TRUE:FALSE);
@@ -73,6 +77,7 @@ static void SetLocalURI(const char *uri, int len, bool enabled=true)
static void SetURI(const char *uri, int len, bool enabled=true)
{
wchar_t tmp[128];
+ if (len==-1) len=pj_ansi_strlen(uri);
pj_ansi_to_unicode(uri, len, tmp, PJ_ARRAY_SIZE(tmp));
SetDlgItemText(hMainWnd, ID_URI, tmp);
EnableWindow(hwndURI, enabled?TRUE:FALSE);
@@ -82,6 +87,7 @@ static void SetURI(const char *uri, int len, bool enabled=true)
static void SetCallStatus(const char *state, int len)
{
wchar_t tmp[128];
+ if (len==-1) len=pj_ansi_strlen(state);
pj_ansi_to_unicode(state, len, tmp, PJ_ARRAY_SIZE(tmp));
SetDlgItemText(hMainWnd, ID_CALL_STATUS, tmp);
}
@@ -100,19 +106,26 @@ static void SetAction(int action, bool enable=true)
switch (action) {
case ID_MENU_NONE:
InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("None"));
+ SetWindowText(hwndActionButton, TEXT("-"));
break;
case ID_MENU_CALL:
InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("Call"));
+ SetWindowText(hwndActionButton, TEXT("&Call"));
break;
case ID_MENU_ANSWER:
InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("Answer"));
+ SetWindowText(hwndActionButton, TEXT("&Answer"));
break;
case ID_MENU_DISCONNECT:
InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("Hangup"));
+ SetWindowText(hwndActionButton, TEXT("&Hangup"));
break;
}
EnableMenuItem(hMenu, action, MF_BYCOMMAND | (enable?MF_ENABLED:MF_GRAYED));
+ DrawMenuBar(hMainWnd);
+
+ g_current_action = action;
}
@@ -130,9 +143,10 @@ static void on_call_state(pjsua_call_id call_id, pjsip_event *e)
if (call_info.state == PJSIP_INV_STATE_DISCONNECTED) {
g_current_call = PJSUA_INVALID_ID;
- SetURI("sip:", 4);
+ SetURI(DEFAULT_URI, -1);
SetAction(ID_MENU_CALL);
- SetCallStatus(call_info.state_text.ptr, call_info.state_text.slen);
+ //SetCallStatus(call_info.state_text.ptr, call_info.state_text.slen);
+ SetCallStatus(call_info.last_status_text.ptr, call_info.last_status_text.slen);
} else {
if (g_current_call == PJSUA_INVALID_ID)
@@ -258,7 +272,9 @@ static BOOL OnInitStack(void)
pjsua_logging_config_default(&log_cfg);
pjsua_media_config_default(&media_cfg);
pjsua_transport_config_default(&udp_cfg);
+ udp_cfg.port = 50060;
pjsua_transport_config_default(&rtp_cfg);
+ rtp_cfg.port = 40000;
/* Setup media */
media_cfg.clock_rate = 8000;
@@ -387,7 +403,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 200,
NULL, NULL, hInstance, NULL);
if (!hWnd)
@@ -411,6 +427,7 @@ static void OnCreate(HWND hWnd)
enum
{
X = 10,
+ Y = 40,
W = 220,
H = 30,
};
@@ -430,10 +447,10 @@ static void OnCreate(HWND hWnd)
NULL, // Window text
dwStyle, // Window style
X, // x-coordinate of the upper-left corner
- 60, // y-coordinate of the upper-left corner
+ Y+0, // y-coordinate of the upper-left corner
W, // Width of the window for the edit
// control
- H, // Height of the window for the edit
+ H-5, // Height of the window for the edit
// control
hWnd, // Window handle to the parent window
(HMENU) ID_GLOBAL_STATUS, // Control identifier
@@ -450,18 +467,33 @@ static void OnCreate(HWND hWnd)
NULL, // Window text
dwStyle, // Window style
X, // x-coordinate of the upper-left corner
- 100, // y-coordinate of the upper-left corner
+ Y+H, // y-coordinate of the upper-left corner
W, // Width of the window for the edit
// control
- H, // Height of the window for the edit
+ H-5, // Height of the window for the edit
// control
hWnd, // Window handle to the parent window
(HMENU) ID_URI, // Control identifier
hInst, // Instance handle
NULL); // Specify NULL for this parameter when
// you create a control
- SetURI("sip:", 4, true);
- SetFocus(hwndURI);
+
+ // Create action Button
+ hwndActionButton = CreateWindow( L"button", L"Action",
+ WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
+ X, Y+2*H,
+ 60, H-5, hWnd,
+ (HMENU) ID_BTN_ACTION,
+ hInst, NULL );
+
+ // Create exit button
+ hwndExitButton = CreateWindow( L"button", L"E&xit",
+ WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
+ X+70, Y+2*H,
+ 60, H-5, hWnd,
+ (HMENU) ID_EXIT,
+ hInst, NULL );
+
// Create call status edit
dwStyle = WS_CHILD | WS_VISIBLE | WS_DISABLED;
@@ -470,10 +502,10 @@ static void OnCreate(HWND hWnd)
NULL, // Window text
dwStyle, // Window style
X, // x-coordinate of the upper-left corner
- 140, // y-coordinate of the upper-left corner
+ Y+3*H, // y-coordinate of the upper-left corner
W, // Width of the window for the edit
// control
- H, // Height of the window for the edit
+ H-5, // Height of the window for the edit
// control
hWnd, // Window handle to the parent window
(HMENU) ID_CALL_STATUS, // Control identifier
@@ -481,8 +513,10 @@ static void OnCreate(HWND hWnd)
NULL); // Specify NULL for this parameter when
// you create a control
SetCallStatus("Ready", 5);
-
SetAction(ID_MENU_CALL);
+ SetURI(DEFAULT_URI, -1);
+ SetFocus(hwndURI);
+
}
@@ -499,6 +533,8 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM l
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
+ if (wmId == ID_BTN_ACTION)
+ wmId = g_current_action;
switch (wmId)
{
case ID_MENU_CALL:
diff --git a/pjsip-apps/src/pjsua_wince/pjsua_wince.vcp b/pjsip-apps/src/pjsua_wince/pjsua_wince.vcp
index e430c302..0df2fb9e 100644
--- a/pjsip-apps/src/pjsua_wince/pjsua_wince.vcp
+++ b/pjsip-apps/src/pjsua_wince/pjsua_wince.vcp
@@ -75,6 +75,7 @@ CFG=pjsua_wince - Win32 (WCE MIPSII_FP) Debug
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-MIPSII_FPRel"
# PROP CPU_ID "{D8AC856C-B213-4895-9E83-9EC51A55201E}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /d "R4000" /d "MIPSII" /d "MIPSII_FP" /r
@@ -90,7 +91,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE MIPSII_FP) Debug"
@@ -107,6 +108,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-MIPSII_FPDbg"
# PROP CPU_ID "{D8AC856C-B213-4895-9E83-9EC51A55201E}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /d "R4000" /d "MIPSII" /d "MIPSII_FP" /r
@@ -122,7 +124,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE MIPSII) Release"
@@ -139,6 +141,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-MIPSIIRel"
# PROP CPU_ID "{689DDC64-9D9D-11D5-96F8-00207802C01C}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /d "R4000" /d "MIPSII" /r
@@ -154,7 +157,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE MIPSII) Debug"
@@ -171,6 +174,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-MIPSIIDbg"
# PROP CPU_ID "{689DDC64-9D9D-11D5-96F8-00207802C01C}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /d "R4000" /d "MIPSII" /r
@@ -186,7 +190,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE SH4) Release"
@@ -203,6 +207,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-SH4Rel"
# PROP CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "NDEBUG" /d "UNICODE" /d "_UNICODE" /d "$(CePlatform)" /d "SHx" /d "SH4" /d "_SH4_" /r
@@ -218,7 +223,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH4
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH4
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH4
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE SH4) Debug"
@@ -235,6 +240,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-SH4Dbg"
# PROP CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "DEBUG" /d "UNICODE" /d "_UNICODE" /d "$(CePlatform)" /d "SHx" /d "SH4" /d "_SH4_" /r
@@ -250,7 +256,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH4
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH4
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH4
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE SH3) Release"
@@ -267,6 +273,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-SH3Rel"
# PROP CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "SHx" /d "SH3" /d "_SH3_" /r
@@ -282,7 +289,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH3 /align:4096
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH3 /align:4096
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH3 /align:4096
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE SH3) Debug"
@@ -299,6 +306,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-SH3Dbg"
# PROP CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "SHx" /d "SH3" /d "_SH3_" /r
@@ -314,7 +322,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH3 /align:4096
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH3 /align:4096
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH3 /align:4096
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE MIPSIV) Release"
@@ -331,6 +339,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-MIPSIVRel"
# PROP CPU_ID "{0B2FE524-26C5-4194-8CEF-B1582DEB5A98}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /r
@@ -346,7 +355,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE MIPSIV) Debug"
@@ -363,6 +372,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-MIPSIVDbg"
# PROP CPU_ID "{0B2FE524-26C5-4194-8CEF-B1582DEB5A98}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /r
@@ -378,7 +388,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE emulator) Release"
@@ -395,6 +405,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-emulatorRel"
# PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "_X86_" /d "x86" /d "_i386_" /r
@@ -410,7 +421,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
-# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
+# ADD LINK32 $(CEx86Corelibc) commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE emulator) Debug"
@@ -434,7 +445,7 @@ RSC=rc.exe
# ADD RSC /l 0x409 /d "$(CePlatform)" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "_X86_" /d "x86" /d "_i386_" /r
CPP=cl.exe
# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D "_i386_" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "i_386_" /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /Yu"stdafx.h" /Gs8192 /GF /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjsip/include" /I "../../../pjlib-util/include" /I "../../../pjlib/include" /I "../../../pjmedia/include" /D "DEBUG" /D "_i386_" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "i_386_" /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /Yu"stdafx.h" /Gs8192 /GF /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjsip/include" /I "../../../pjlib-util/include" /I "../../../pjlib/include" /I "../../../pjmedia/include" /D "DEBUG" /D "_i386_" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "i_386_" /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /FR /Yu"stdafx.h" /Gs8192 /GF /c
MTL=midl.exe
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
@@ -443,7 +454,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
-# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
+# ADD LINK32 $(CEx86Corelibc) commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE ARMV4I) Release"
@@ -460,6 +471,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-ARMV4IRel"
# PROP CPU_ID "{DC70F430-E78B-494F-A9D5-62ADC56443B8}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "THUMB" /d "_THUMB_" /d "ARM" /d "_ARM_" /d "ARMV4I" /r
@@ -475,7 +487,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE ARMV4I) Debug"
@@ -492,6 +504,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-ARMV4IDbg"
# PROP CPU_ID "{DC70F430-E78B-494F-A9D5-62ADC56443B8}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "THUMB" /d "_THUMB_" /d "ARM" /d "_ARM_" /d "ARMV4I" /r
@@ -507,7 +520,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE MIPSIV_FP) Release"
@@ -524,6 +537,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-MIPSIV_FPRel"
# PROP CPU_ID "{046A430D-7770-48AB-89B5-24C2D300B03F}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /r
@@ -539,7 +553,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE MIPSIV_FP) Debug"
@@ -556,6 +570,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-MIPSIV_FPDbg"
# PROP CPU_ID "{046A430D-7770-48AB-89B5-24C2D300B03F}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /r
@@ -571,7 +586,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPSFPU
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE ARMV4) Release"
@@ -588,6 +603,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-ARMV4Rel"
# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "NDEBUG" /d "UNICODE" /d "_UNICODE" /d "$(CePlatform)" /d "ARM" /d "_ARM_" /d "ARMV4" /r
@@ -603,7 +619,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE ARMV4) Debug"
@@ -620,6 +636,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-ARMV4Dbg"
# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "DEBUG" /d "UNICODE" /d "_UNICODE" /d "$(CePlatform)" /d "ARM" /d "_ARM_" /d "ARMV4" /r
@@ -635,7 +652,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE MIPS16) Release"
@@ -652,6 +669,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-MIPS16Rel"
# PROP CPU_ID "{D6519013-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "MIPS16SUPPORT" /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /d "R4000" /d "MIPSII" /d "MIPS16" /r
@@ -667,7 +685,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS16 /ALIGN:4096
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS16 /ALIGN:4096
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS16 /ALIGN:4096
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE MIPS16) Debug"
@@ -684,6 +702,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-MIPS16Dbg"
# PROP CPU_ID "{D6519013-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "MIPS16SUPPORT" /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /d "R4000" /d "MIPSII" /d "MIPS16" /r
@@ -699,7 +718,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS16 /ALIGN:4096
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS16 /ALIGN:4096
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS16 /ALIGN:4096
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE ARMV4T) Release"
@@ -716,6 +735,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-ARMV4TRel"
# PROP CPU_ID "{F52316A9-3B7C-4FE7-A67F-68350B41240D}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "THUMB" /d "_THUMB_" /d "ARM" /d "_ARM_" /d "ARMV4T" /r
@@ -731,7 +751,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE ARMV4T) Debug"
@@ -748,6 +768,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-ARMV4TDbg"
# PROP CPU_ID "{F52316A9-3B7C-4FE7-A67F-68350B41240D}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "THUMB" /d "_THUMB_" /d "ARM" /d "_ARM_" /d "ARMV4T" /r
@@ -763,7 +784,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
-# ADD LINK32 commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:THUMB
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE x86) Release"
@@ -780,6 +801,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-X86Rel"
# PROP CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "_X86_" /d "x86" /d "_i386_" /r
@@ -795,7 +817,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
-# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
+# ADD LINK32 $(CEx86Corelibc) commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE x86) Debug"
@@ -812,6 +834,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "../../build/wince-evc4/output/pjsua-wince-X86Dbg"
# PROP CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d "$(CePlatform)" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "_X86_" /d "x86" /d "_i386_" /r
@@ -827,7 +850,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
-# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
+# ADD LINK32 $(CEx86Corelibc) commctrl.lib coredll.lib winsock.lib ws2.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
!ENDIF
@@ -1108,6 +1131,135 @@ DEP_CPP_PJSUA=\
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE ARMV4) Release"
DEP_CPP_PJSUA=\
+ "..\..\..\pjlib-util\include\pjlib-util.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\errno.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\getopt.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\md5.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\scanner.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\scanner_cis_bitwise.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\scanner_cis_uint.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\stun.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\xml.h"\
+ "..\..\..\pjlib\include\pj\addr_resolv.h"\
+ "..\..\..\pjlib\include\pj\array.h"\
+ "..\..\..\pjlib\include\pj\assert.h"\
+ "..\..\..\pjlib\include\pj\compat\assert.h"\
+ "..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+ "..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+ "..\..\..\pjlib\include\pj\compat\ctype.h"\
+ "..\..\..\pjlib\include\pj\compat\errno.h"\
+ "..\..\..\pjlib\include\pj\compat\high_precision.h"\
+ "..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+ "..\..\..\pjlib\include\pj\compat\os_linux.h"\
+ "..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+ "..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+ "..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+ "..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+ "..\..\..\pjlib\include\pj\compat\os_win32.h"\
+ "..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+ "..\..\..\pjlib\include\pj\compat\setjmp.h"\
+ "..\..\..\pjlib\include\pj\compat\size_t.h"\
+ "..\..\..\pjlib\include\pj\compat\string.h"\
+ "..\..\..\pjlib\include\pj\config.h"\
+ "..\..\..\pjlib\include\pj\config_site.h"\
+ "..\..\..\pjlib\include\pj\ctype.h"\
+ "..\..\..\pjlib\include\pj\errno.h"\
+ "..\..\..\pjlib\include\pj\except.h"\
+ "..\..\..\pjlib\include\pj\fifobuf.h"\
+ "..\..\..\pjlib\include\pj\file_access.h"\
+ "..\..\..\pjlib\include\pj\file_io.h"\
+ "..\..\..\pjlib\include\pj\guid.h"\
+ "..\..\..\pjlib\include\pj\hash.h"\
+ "..\..\..\pjlib\include\pj\ioqueue.h"\
+ "..\..\..\pjlib\include\pj\list.h"\
+ "..\..\..\pjlib\include\pj\list_i.h"\
+ "..\..\..\pjlib\include\pj\lock.h"\
+ "..\..\..\pjlib\include\pj\log.h"\
+ "..\..\..\pjlib\include\pj\os.h"\
+ "..\..\..\pjlib\include\pj\pool.h"\
+ "..\..\..\pjlib\include\pj\pool_alt.h"\
+ "..\..\..\pjlib\include\pj\pool_i.h"\
+ "..\..\..\pjlib\include\pj\rand.h"\
+ "..\..\..\pjlib\include\pj\rbtree.h"\
+ "..\..\..\pjlib\include\pj\sock.h"\
+ "..\..\..\pjlib\include\pj\sock_select.h"\
+ "..\..\..\pjlib\include\pj\string.h"\
+ "..\..\..\pjlib\include\pj\string_i.h"\
+ "..\..\..\pjlib\include\pj\timer.h"\
+ "..\..\..\pjlib\include\pj\types.h"\
+ "..\..\..\pjlib\include\pj\unicode.h"\
+ "..\..\..\pjlib\include\pjlib.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\config.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\gsm.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\ilbc.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\l16.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\speex.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\types.h"\
+ "..\..\..\pjmedia\include\pjmedia.h"\
+ "..\..\..\pjmedia\include\pjmedia\clock.h"\
+ "..\..\..\pjmedia\include\pjmedia\codec.h"\
+ "..\..\..\pjmedia\include\pjmedia\conference.h"\
+ "..\..\..\pjmedia\include\pjmedia\config.h"\
+ "..\..\..\pjmedia\include\pjmedia\endpoint.h"\
+ "..\..\..\pjmedia\include\pjmedia\errno.h"\
+ "..\..\..\pjmedia\include\pjmedia\g711.h"\
+ "..\..\..\pjmedia\include\pjmedia\jbuf.h"\
+ "..\..\..\pjmedia\include\pjmedia\master_port.h"\
+ "..\..\..\pjmedia\include\pjmedia\mem_port.h"\
+ "..\..\..\pjmedia\include\pjmedia\null_port.h"\
+ "..\..\..\pjmedia\include\pjmedia\plc.h"\
+ "..\..\..\pjmedia\include\pjmedia\port.h"\
+ "..\..\..\pjmedia\include\pjmedia\resample.h"\
+ "..\..\..\pjmedia\include\pjmedia\rtcp.h"\
+ "..\..\..\pjmedia\include\pjmedia\rtp.h"\
+ "..\..\..\pjmedia\include\pjmedia\sdp.h"\
+ "..\..\..\pjmedia\include\pjmedia\sdp_neg.h"\
+ "..\..\..\pjmedia\include\pjmedia\session.h"\
+ "..\..\..\pjmedia\include\pjmedia\silencedet.h"\
+ "..\..\..\pjmedia\include\pjmedia\sound.h"\
+ "..\..\..\pjmedia\include\pjmedia\sound_port.h"\
+ "..\..\..\pjmedia\include\pjmedia\splitcomb.h"\
+ "..\..\..\pjmedia\include\pjmedia\stream.h"\
+ "..\..\..\pjmedia\include\pjmedia\transport.h"\
+ "..\..\..\pjmedia\include\pjmedia\transport_udp.h"\
+ "..\..\..\pjmedia\include\pjmedia\types.h"\
+ "..\..\..\pjmedia\include\pjmedia\wav_port.h"\
+ "..\..\..\pjmedia\include\pjmedia\wave.h"\
+ "..\..\..\pjsip\include\pjsip-simple\evsub.h"\
+ "..\..\..\pjsip\include\pjsip-simple\iscomposing.h"\
+ "..\..\..\pjsip\include\pjsip-simple\pidf.h"\
+ "..\..\..\pjsip\include\pjsip-simple\presence.h"\
+ "..\..\..\pjsip\include\pjsip-simple\types.h"\
+ "..\..\..\pjsip\include\pjsip-simple\xpidf.h"\
+ "..\..\..\pjsip\include\pjsip-ua\sip_inv.h"\
+ "..\..\..\pjsip\include\pjsip-ua\sip_regc.h"\
+ "..\..\..\pjsip\include\pjsip-ua\sip_xfer.h"\
+ "..\..\..\pjsip\include\pjsip.h"\
+ "..\..\..\pjsip\include\pjsip\sip_auth.h"\
+ "..\..\..\pjsip\include\pjsip\sip_auth_msg.h"\
+ "..\..\..\pjsip\include\pjsip\sip_config.h"\
+ "..\..\..\pjsip\include\pjsip\sip_dialog.h"\
+ "..\..\..\pjsip\include\pjsip\sip_endpoint.h"\
+ "..\..\..\pjsip\include\pjsip\sip_errno.h"\
+ "..\..\..\pjsip\include\pjsip\sip_event.h"\
+ "..\..\..\pjsip\include\pjsip\sip_module.h"\
+ "..\..\..\pjsip\include\pjsip\sip_msg.h"\
+ "..\..\..\pjsip\include\pjsip\sip_parser.h"\
+ "..\..\..\pjsip\include\pjsip\sip_resolve.h"\
+ "..\..\..\pjsip\include\pjsip\sip_tel_uri.h"\
+ "..\..\..\pjsip\include\pjsip\sip_transaction.h"\
+ "..\..\..\pjsip\include\pjsip\sip_transport.h"\
+ "..\..\..\pjsip\include\pjsip\sip_transport_loop.h"\
+ "..\..\..\pjsip\include\pjsip\sip_transport_tcp.h"\
+ "..\..\..\pjsip\include\pjsip\sip_transport_udp.h"\
+ "..\..\..\pjsip\include\pjsip\sip_types.h"\
+ "..\..\..\pjsip\include\pjsip\sip_ua_layer.h"\
+ "..\..\..\pjsip\include\pjsip\sip_uri.h"\
+ "..\..\..\pjsip\include\pjsip\sip_util.h"\
+ "..\..\..\pjsip\include\pjsip_simple.h"\
+ "..\..\..\pjsip\include\pjsip_ua.h"\
+ "..\..\..\pjsip\include\pjsua-lib\pjsua.h"\
".\pjsua_wince.h"\
".\StdAfx.h"\
@@ -1115,6 +1267,135 @@ DEP_CPP_PJSUA=\
!ELSEIF "$(CFG)" == "pjsua_wince - Win32 (WCE ARMV4) Debug"
DEP_CPP_PJSUA=\
+ "..\..\..\pjlib-util\include\pjlib-util.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\errno.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\getopt.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\md5.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\scanner.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\scanner_cis_bitwise.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\scanner_cis_uint.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\stun.h"\
+ "..\..\..\pjlib-util\include\pjlib-util\xml.h"\
+ "..\..\..\pjlib\include\pj\addr_resolv.h"\
+ "..\..\..\pjlib\include\pj\array.h"\
+ "..\..\..\pjlib\include\pj\assert.h"\
+ "..\..\..\pjlib\include\pj\compat\assert.h"\
+ "..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+ "..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+ "..\..\..\pjlib\include\pj\compat\ctype.h"\
+ "..\..\..\pjlib\include\pj\compat\errno.h"\
+ "..\..\..\pjlib\include\pj\compat\high_precision.h"\
+ "..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+ "..\..\..\pjlib\include\pj\compat\os_linux.h"\
+ "..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+ "..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+ "..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+ "..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+ "..\..\..\pjlib\include\pj\compat\os_win32.h"\
+ "..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+ "..\..\..\pjlib\include\pj\compat\setjmp.h"\
+ "..\..\..\pjlib\include\pj\compat\size_t.h"\
+ "..\..\..\pjlib\include\pj\compat\string.h"\
+ "..\..\..\pjlib\include\pj\config.h"\
+ "..\..\..\pjlib\include\pj\config_site.h"\
+ "..\..\..\pjlib\include\pj\ctype.h"\
+ "..\..\..\pjlib\include\pj\errno.h"\
+ "..\..\..\pjlib\include\pj\except.h"\
+ "..\..\..\pjlib\include\pj\fifobuf.h"\
+ "..\..\..\pjlib\include\pj\file_access.h"\
+ "..\..\..\pjlib\include\pj\file_io.h"\
+ "..\..\..\pjlib\include\pj\guid.h"\
+ "..\..\..\pjlib\include\pj\hash.h"\
+ "..\..\..\pjlib\include\pj\ioqueue.h"\
+ "..\..\..\pjlib\include\pj\list.h"\
+ "..\..\..\pjlib\include\pj\list_i.h"\
+ "..\..\..\pjlib\include\pj\lock.h"\
+ "..\..\..\pjlib\include\pj\log.h"\
+ "..\..\..\pjlib\include\pj\os.h"\
+ "..\..\..\pjlib\include\pj\pool.h"\
+ "..\..\..\pjlib\include\pj\pool_alt.h"\
+ "..\..\..\pjlib\include\pj\pool_i.h"\
+ "..\..\..\pjlib\include\pj\rand.h"\
+ "..\..\..\pjlib\include\pj\rbtree.h"\
+ "..\..\..\pjlib\include\pj\sock.h"\
+ "..\..\..\pjlib\include\pj\sock_select.h"\
+ "..\..\..\pjlib\include\pj\string.h"\
+ "..\..\..\pjlib\include\pj\string_i.h"\
+ "..\..\..\pjlib\include\pj\timer.h"\
+ "..\..\..\pjlib\include\pj\types.h"\
+ "..\..\..\pjlib\include\pj\unicode.h"\
+ "..\..\..\pjlib\include\pjlib.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\config.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\gsm.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\ilbc.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\l16.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\speex.h"\
+ "..\..\..\pjmedia\include\pjmedia-codec\types.h"\
+ "..\..\..\pjmedia\include\pjmedia.h"\
+ "..\..\..\pjmedia\include\pjmedia\clock.h"\
+ "..\..\..\pjmedia\include\pjmedia\codec.h"\
+ "..\..\..\pjmedia\include\pjmedia\conference.h"\
+ "..\..\..\pjmedia\include\pjmedia\config.h"\
+ "..\..\..\pjmedia\include\pjmedia\endpoint.h"\
+ "..\..\..\pjmedia\include\pjmedia\errno.h"\
+ "..\..\..\pjmedia\include\pjmedia\g711.h"\
+ "..\..\..\pjmedia\include\pjmedia\jbuf.h"\
+ "..\..\..\pjmedia\include\pjmedia\master_port.h"\
+ "..\..\..\pjmedia\include\pjmedia\mem_port.h"\
+ "..\..\..\pjmedia\include\pjmedia\null_port.h"\
+ "..\..\..\pjmedia\include\pjmedia\plc.h"\
+ "..\..\..\pjmedia\include\pjmedia\port.h"\
+ "..\..\..\pjmedia\include\pjmedia\resample.h"\
+ "..\..\..\pjmedia\include\pjmedia\rtcp.h"\
+ "..\..\..\pjmedia\include\pjmedia\rtp.h"\
+ "..\..\..\pjmedia\include\pjmedia\sdp.h"\
+ "..\..\..\pjmedia\include\pjmedia\sdp_neg.h"\
+ "..\..\..\pjmedia\include\pjmedia\session.h"\
+ "..\..\..\pjmedia\include\pjmedia\silencedet.h"\
+ "..\..\..\pjmedia\include\pjmedia\sound.h"\
+ "..\..\..\pjmedia\include\pjmedia\sound_port.h"\
+ "..\..\..\pjmedia\include\pjmedia\splitcomb.h"\
+ "..\..\..\pjmedia\include\pjmedia\stream.h"\
+ "..\..\..\pjmedia\include\pjmedia\transport.h"\
+ "..\..\..\pjmedia\include\pjmedia\transport_udp.h"\
+ "..\..\..\pjmedia\include\pjmedia\types.h"\
+ "..\..\..\pjmedia\include\pjmedia\wav_port.h"\
+ "..\..\..\pjmedia\include\pjmedia\wave.h"\
+ "..\..\..\pjsip\include\pjsip-simple\evsub.h"\
+ "..\..\..\pjsip\include\pjsip-simple\iscomposing.h"\
+ "..\..\..\pjsip\include\pjsip-simple\pidf.h"\
+ "..\..\..\pjsip\include\pjsip-simple\presence.h"\
+ "..\..\..\pjsip\include\pjsip-simple\types.h"\
+ "..\..\..\pjsip\include\pjsip-simple\xpidf.h"\
+ "..\..\..\pjsip\include\pjsip-ua\sip_inv.h"\
+ "..\..\..\pjsip\include\pjsip-ua\sip_regc.h"\
+ "..\..\..\pjsip\include\pjsip-ua\sip_xfer.h"\
+ "..\..\..\pjsip\include\pjsip.h"\
+ "..\..\..\pjsip\include\pjsip\sip_auth.h"\
+ "..\..\..\pjsip\include\pjsip\sip_auth_msg.h"\
+ "..\..\..\pjsip\include\pjsip\sip_config.h"\
+ "..\..\..\pjsip\include\pjsip\sip_dialog.h"\
+ "..\..\..\pjsip\include\pjsip\sip_endpoint.h"\
+ "..\..\..\pjsip\include\pjsip\sip_errno.h"\
+ "..\..\..\pjsip\include\pjsip\sip_event.h"\
+ "..\..\..\pjsip\include\pjsip\sip_module.h"\
+ "..\..\..\pjsip\include\pjsip\sip_msg.h"\
+ "..\..\..\pjsip\include\pjsip\sip_parser.h"\
+ "..\..\..\pjsip\include\pjsip\sip_resolve.h"\
+ "..\..\..\pjsip\include\pjsip\sip_tel_uri.h"\
+ "..\..\..\pjsip\include\pjsip\sip_transaction.h"\
+ "..\..\..\pjsip\include\pjsip\sip_transport.h"\
+ "..\..\..\pjsip\include\pjsip\sip_transport_loop.h"\
+ "..\..\..\pjsip\include\pjsip\sip_transport_tcp.h"\
+ "..\..\..\pjsip\include\pjsip\sip_transport_udp.h"\
+ "..\..\..\pjsip\include\pjsip\sip_types.h"\
+ "..\..\..\pjsip\include\pjsip\sip_ua_layer.h"\
+ "..\..\..\pjsip\include\pjsip\sip_uri.h"\
+ "..\..\..\pjsip\include\pjsip\sip_util.h"\
+ "..\..\..\pjsip\include\pjsip_simple.h"\
+ "..\..\..\pjsip\include\pjsip_ua.h"\
+ "..\..\..\pjsip\include\pjsua-lib\pjsua.h"\
".\pjsua_wince.h"\
".\StdAfx.h"\
diff --git a/pjsip-apps/src/samples/aectest.c b/pjsip-apps/src/samples/aectest.c
index a2770728..85250024 100644
--- a/pjsip-apps/src/samples/aectest.c
+++ b/pjsip-apps/src/samples/aectest.c
@@ -160,13 +160,6 @@ int main(int argc, char *argv[])
/* Create bidirectional port from the WAV ports */
pjmedia_bidirectional_port_create(pool, play_port, rec_port, &bidir_port);
- /* Create AEC port */
- if (0) {
- pjmedia_aec_port_create(pool, bidir_port,
- bidir_port->info.clock_rate * 200 / 1000,
- &bidir_port);
- }
-
/* Create sound device. */
status = pjmedia_snd_port_create(pool, -1, -1,
play_port->info.clock_rate,
@@ -180,6 +173,9 @@ int main(int argc, char *argv[])
}
+ /* Customize AEC */
+ pjmedia_snd_port_set_aec(snd, pool, 800);
+
/* Connect sound to the port */
pjmedia_snd_port_connect(snd, bidir_port);
diff --git a/pjsip/docs/PJSUA-TESTING.txt b/pjsip/docs/PJSUA-TESTING.txt
new file mode 100644
index 00000000..c1fdd645
--- /dev/null
+++ b/pjsip/docs/PJSUA-TESTING.txt
@@ -0,0 +1,41 @@
+TESTING
+
+SANITY CHECKS:
+- Do pjlib-test
+- Do pjsip-test
+
+BASIC FLOW TEST (compaq1.cfg, compaq2.cfg);
+- with other pjsua
+- with EyeBeam
+- Register
+ - with Route
+ - without Route
+ - with TCP
+- Presence (client and server)
+- Call (UAC and UAS)
+ - hold and being held
+ - DTMF send/receive
+- IM and typing
+- TCP (if there's UDP route, then Contact will be UDP)
+
+- Repeat basic flow test without Route set (to wheter TCP is correctly specified in the contact etc)
+
+
+- STUN test (fwd1.cfg)
+
+COMPATIBILITY WITH FWD
+- presence (xpidf)
+
+
+MULTIPLE ACCOUNTS (combo.cfg)
+
+
+AUDIO QUALITY
+- call to another pjsua that loops incoming call
+
+TEST THE SAMPLES
+
+LINUX TEST
+
+UPDATE DOCUMENTATION
+
diff --git a/pjsip/docs/TRANSPORT-PROBLEMS.TXT b/pjsip/docs/TRANSPORT-PROBLEMS.TXT
new file mode 100644
index 00000000..76539e1e
--- /dev/null
+++ b/pjsip/docs/TRANSPORT-PROBLEMS.TXT
@@ -0,0 +1,46 @@
+Dialog's Contact Address Problems
+
+
+Background
+
+When creating a dialog (UAC or UAS dialog), application needs to specify local address to be put in the Contact header generated by the dialog. This address normally is derived from the transport address created by the application.
+
+This can be a complicated thing to do, because application needs to select the appropriate address based on the transport being used to contact remote peer, and it's not so easy especially when multiple transports are created, or when multiple interfaces are present in the host (multihoming).
+
+(Note: also similarly for client registration).
+
+So a change is being/to be made to allow the dialog to automate this process. If application specify NULL as the value of the local contact when creating a dialog, then the dialog should choose the best transport address according to the following rules.
+
+
+1a. UAC
+
+UAC SHOULD select the Contact address based on the transport to be used to send initial request to target (this can be deduced by the ";transport" param in the target URI). For example, if initial transport is UDP, then the Contact SHOULD specify the appropriate UDP transport address.
+
+When there are multiple transports available to reach the destination (such as multiple UDP transports, although this is not really tested/supported), then which transport to use follows the policy used by the transport manager.
+
+Note that target can be the URI in the request URI, or the first route in the route set. Because initial route set is specified AFTER dialog is created, the Contact header generation is done when the initial request is created/sent.
+
+Unsolved problem(s):
+ - what if the remote Contact header in the 2xx response indicates different transport? Ideally the local Contact needs to be updated too, but this is quite a complicated problem, because if we change the local Contact, then remote may change its Contact too, and this can result in an endles loop.
+
+
+1b. UAS
+
+UAS MUST select the Contact address based on the value of Contact header and the Record-Route set in the incoming request.
+
+
+
+
+2. Multihoming
+
+Problem:
+If application does not specify the address to be used when creating SIP transport, then transport address is calculated based on the primary IP address of the local host. Sometimes this is not the correct IP to be used by the dialog, especially when there are multiple interfaces in the host. If this "incorrect" address is specified in the Contact, then remote would not be able to send request to local host.
+
+
+Workaround:
+Change the behavior of determining local IP. Instead of calling gethostbyname() for local host, the local interface IP is determined by creating an UDP socket, do UDP connect() to some public host, and get the local IP address of the socket.
+
+Although this does not fully solve the problem, hopefully it solves many problems in typical desktop systems, where an "unwanted" adapter takes precendence over the "wanted" adapter on the host/address resolution.
+
+A fully working solution would probably involve having a table to track which interface to use based on the destination, or to query the host's routing table.
+
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index 5e549a34..6fd640fe 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -2152,7 +2152,7 @@ PJ_INLINE(void) pjsua_media_config_default(pjsua_media_config *cfg)
cfg->thread_cnt = 1;
cfg->quality = 6;
cfg->ilbc_mode = 20;
- cfg->ec_tail_len = 0;
+ cfg->ec_tail_len = 500;
}
@@ -2497,6 +2497,29 @@ PJ_DECL(pj_status_t) pjsua_set_null_snd_dev(void);
PJ_DECL(pjmedia_port*) pjsua_set_no_snd_dev(void);
+/**
+ * Configure the AEC settings of the sound port.
+ *
+ * @param tail_ms The tail length, in miliseconds. Set to zero to
+ * disable AEC.
+ *
+ * @return PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjsua_set_aec(unsigned tail_ms);
+
+
+/**
+ * Get current AEC tail length.
+ *
+ * @param p_tail_ms Pointer to receive the tail length, in miliseconds.
+ * If AEC is disabled, the value will be zero.
+ *
+ * @return PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjsua_get_aec(unsigned *p_tail_ms);
+
+
+
/*****************************************************************************
* Codecs.
*/
diff --git a/pjsip/include/pjsua-lib/pjsua_internal.h b/pjsip/include/pjsua-lib/pjsua_internal.h
index 95c5c40e..c862219f 100644
--- a/pjsip/include/pjsua-lib/pjsua_internal.h
+++ b/pjsip/include/pjsua-lib/pjsua_internal.h
@@ -204,7 +204,6 @@ struct pjsua_data
pjmedia_conf *mconf; /**< Conference bridge. */
int cap_dev; /**< Capture device ID. */
int play_dev; /**< Playback device ID. */
- pjmedia_port *aec_port; /**< AEC port to conf bridge. */
pj_bool_t no_snd; /**< No sound (app will manage it) */
pjmedia_snd_port *snd_port; /**< Sound port. */
pjmedia_master_port *null_snd; /**< Master port for null sound. */
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index ffc228b6..3eeb3078 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -968,32 +968,9 @@ PJ_DEF(pj_status_t) pjsua_set_snd_dev( int capture_dev,
conf_port = pjmedia_conf_get_master_port(pjsua_var.mconf);
pj_assert(conf_port != NULL);
- /* Create AEC if it's not created */
- if (pjsua_var.aec_port == NULL && pjsua_var.media_cfg.ec_tail_len) {
- status = pjmedia_aec_port_create(pjsua_var.pool, conf_port,
- conf_port->info.clock_rate *
- pjsua_var.media_cfg.ec_tail_len /
- 1000,
- &pjsua_var.aec_port);
- if (status != PJ_SUCCESS) {
- pjsua_perror(THIS_FILE, "Unable to create AEC port", status);
- pjmedia_snd_port_destroy(pjsua_var.snd_port);
- pjsua_var.snd_port = NULL;
- return status;
- }
- }
-
- /* Connect to the AEC port */
- status = pjmedia_snd_port_connect(pjsua_var.snd_port,
- pjsua_var.media_cfg.ec_tail_len ?
- pjsua_var.aec_port : conf_port );
- if (status != PJ_SUCCESS) {
- pjsua_perror(THIS_FILE, "Unable to connect conference port to "
- "sound device", status);
- pjmedia_snd_port_destroy(pjsua_var.snd_port);
- pjsua_var.snd_port = NULL;
- return status;
- }
+ /* Set AEC */
+ pjmedia_snd_port_set_aec(pjsua_var.snd_port, pjsua_var.pool,
+ pjsua_var.media_cfg.ec_tail_len);
/* Save the device IDs */
pjsua_var.cap_dev = capture_dev;
@@ -1053,6 +1030,30 @@ PJ_DEF(pjmedia_port*) pjsua_set_no_snd_dev(void)
}
+/*
+ * Configure the AEC settings of the sound port.
+ */
+PJ_DEF(pj_status_t) pjsua_set_aec(unsigned tail_ms)
+{
+ pjsua_var.media_cfg.ec_tail_len = tail_ms;
+
+ if (pjsua_var.snd_port)
+ return pjmedia_snd_port_set_aec(pjsua_var.snd_port, pjsua_var.pool,
+ tail_ms);
+
+ return PJ_SUCCESS;
+}
+
+
+/*
+ * Get current AEC tail length.
+ */
+PJ_DEF(pj_status_t) pjsua_get_aec(unsigned *p_tail_ms)
+{
+ *p_tail_ms = pjsua_var.media_cfg.ec_tail_len;
+ return PJ_SUCCESS;
+}
+
/*****************************************************************************
* Codecs.