Compare commits

...

No commits in common. "master" and "master-old" have entirely different histories.

2454 changed files with 1331604 additions and 748 deletions

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "pjproject"]
path = pjproject
url = https://github.com/pjsip/pjproject

View file

@ -1,28 +1,21 @@
PJSIP_DIR=pjproject PJSIP_DIR=pjproject-2.11.1
PKG_CONFIG_PATH=pjsip.install/lib/pkgconfig PKG_CONFIG_PATH=pjsip.install/lib/pkgconfig
ifndef NO_PULSE all: d-modem slmodemd
DM_LDFLAGS += -l pulse -l pulse-simple
DM_CFLAGS += -DHAS_PULSE
endif
all: d-modem slmodemd $(if $(NO_PULSE),,d-modem.nopulse)
$(PKG_CONFIG_PATH)/libpjproject.pc: $(PKG_CONFIG_PATH)/libpjproject.pc:
(cd $(PJSIP_DIR); [ -f ./config.status ] || ./configure --prefix=`pwd`/../pjsip.install --disable-video --disable-sound --enable-ext-sound --disable-speex-aec --enable-g711-codec --disable-l16-codec --disable-gsm-codec --disable-g722-codec --disable-g7221-codec --disable-speex-codec --disable-ilbc-codec --disable-sdl --disable-ffmpeg --disable-v4l2 --disable-openh264 --disable-vpx --disable-android-mediacodec --disable-darwin-ssl --disable-ssl --disable-opencore-amr --disable-silk --disable-opus --disable-bcg729 --disable-libyuv --disable-libwebrtc) (cd $(PJSIP_DIR); [ -f ./config.status ] || ./configure --prefix=`pwd`/../pjsip.install --disable-video)
$(MAKE) -C $(PJSIP_DIR) && \ $(MAKE) -C $(PJSIP_DIR) && \
$(MAKE) -C $(PJSIP_DIR) install $(MAKE) -C $(PJSIP_DIR) install
d-modem d-modem.nopulse : d-modem.c $(PKG_CONFIG_PATH)/libpjproject.pc d-modem: d-modem.c $(PKG_CONFIG_PATH)/libpjproject.pc
$(CC) $(if $(findstring nopulse,$@),,$(DM_CFLAGS) $(DM_LDFLAGS)) -o $@ $< \ $(CC) -o $@ $< `PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" pkg-config --static --cflags --libs libpjproject` -lpulse -lpulse-simple
`PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" pkg-config --static --cflags --libs libpjproject` \
-O2 -s
slmodemd: slmodemd:
$(MAKE) -C slmodemd $(MAKE) -C slmodemd
clean: clean:
rm -f d-modem.o d-modem d-modem.nopulse rm -f d-modem.o d-modem
$(MAKE) -C slmodemd clean $(MAKE) -C slmodemd clean
realclean: clean realclean: clean

View file

@ -1,8 +1,6 @@
# D-Modem # D-Modem
Software modem with **sound** Software modem with **sound**
For burble's retro voip modem https://burble.dn42/retro/modem/ For burble's retro voip modem https://burble.dn42/retro/modem/
Now also for JerryXiao's own software voip modems!
Fortunately this old proprietary software modem still works :) Fortunately this old proprietary software modem still works :)
## Prerequisite ## Prerequisite
@ -23,26 +21,15 @@ screen /tmp/ttySL0 115200
Inside the serial console, use the following at commands: Inside the serial console, use the following at commands:
``` ```
ATX3 >atx3
> OK OK
AT+MS=22,1 >at+ms=22,0,1200,1200
> OK OK
ATD424026019@voip.burble.dn42 >atd424026019@voip.burble.dn42
> CONNECT 1200 ...
``` ```
You can also connect to: Now you should be connected. See https://burble.dn42/retro/modem/ for login username and password. Once logged in, close out of screen and execute pppd like this:
| number | AT+MS | ATD | Modulation |
| ------------ | ------------ | ------------ | ------------ |
| (42403618)361800 | AT+MS=90,1 | ATD361800@pbx.jerry.dn42 | V.90 |
| (42403618)361801 | AT+MS=34,1 | ATD361801@pbx.jerry.dn42 | V.34 |
| (42403618)361802 | AT+MS=32,1 | ATD361802@pbx.jerry.dn42 | V.32 |
| (42403618)361803 | AT+MS=22,1 | ATD361803@pbx.jerry.dn42 | V.22 |
| (42403618)361804 | AT+MS=22,1 | ATD361804@pbx.jerry.dn42 | V.22 |
| (42403618)361805 | AT+MS=23,1 | ATD361805@pbx.jerry.dn42 | V.23 |
| (42403618)361806 | AT+MS=23,1 | ATD361806@pbx.jerry.dn42 | V.23 |
Now you should be connected. If you see a login prompt, go to https://burble.dn42/retro/modem/ for login username and password. Once logged in, close out of GUN Screen and execute pppd like this:
``` ```
sudo pppd $(readlink /tmp/ttySL0) 1200 user dn42 noauth nodefaultroute nodetach sudo pppd $(readlink /tmp/ttySL0) 1200 user dn42 noauth nodefaultroute nodetach
@ -55,7 +42,7 @@ If you would like a full dialup dn42 experience, try using netns:
``` ```
sudo ip netns add modem sudo ip netns add modem
sudo ip netns exec modem pppd $(readlink /tmp/ttySL0) 1200 noauth nodefaultroute nodetach sudo ip netns exec modem pppd $(readlink /tmp/ttySL0) 1200 user dn42 noauth nodefaultroute nodetatch
``` ```
Start a new terminal and Start a new terminal and
@ -68,8 +55,3 @@ ping burble.dn42
``` ```
Have fun! Have fun!
## Server
This code can also work as a server, no docs available though ;)
Just type ATA in the modem console and try it out first.

288
d-modem.c
View file

@ -23,41 +23,23 @@
#include <stdio.h> #include <stdio.h>
#include <signal.h> #include <signal.h>
#include <errno.h> #include <errno.h>
// test
#include <pjsua-lib/pjsua.h> #include <pjsua-lib/pjsua.h>
#include <pjsua-lib/pjsua_internal.h> #include <pjsua-lib/pjsua_internal.h>
#ifdef HAS_PULSE
#include <pulse/simple.h> #include <pulse/simple.h>
#endif
#define PCM_FILE "dmodem.%s.s16le.9600hz.pcm" pa_simple *pa_s1;
#undef PCM_FILE pa_simple *pa_s2;
//#define HAS_PULSE
#ifdef HAS_PULSE
pa_simple *pa_s1 = NULL;
pa_simple *pa_s2 = NULL;
const pa_sample_spec pa_ss = { const pa_sample_spec pa_ss = {
.format = PA_SAMPLE_S16LE, .format = PA_SAMPLE_S16LE,
.rate = 9600, .rate = 9600,
.channels = 1 .channels = 1
}; };
#endif int wave_recv;
#ifdef PCM_FILE int wave_transmit;
int wave_recv = -1;
int wave_transmit = -1;
#endif
#define SIGNATURE PJMEDIA_SIG_CLASS_PORT_AUD('D','M') #define SIGNATURE PJMEDIA_SIG_CLASS_PORT_AUD('D','M')
#define DMODEM_DIAL_MODE 0
#define DMODEM_ANSWER_MODE 1
uint8_t mode = DMODEM_DIAL_MODE;
uint8_t ringing = 0;
uint8_t answered = 0;
int ppid;
pjsua_call_id incoming;
struct dmodem { struct dmodem {
pjmedia_port base; pjmedia_port base;
@ -69,85 +51,22 @@ static struct dmodem port;
static bool destroying = false; static bool destroying = false;
static pj_pool_t *pool; static pj_pool_t *pool;
void stop_pa();
static void error_exit(const char *title, pj_status_t status) { static void error_exit(const char *title, pj_status_t status) {
pjsua_perror(__FILE__, title, status); pjsua_perror(__FILE__, title, status);
if (!destroying) { if (!destroying) {
destroying = true; destroying = true;
pjsua_destroy(); pjsua_destroy();
stop_pa();
if (answered)
kill(ppid, SIGINT);
exit(1); exit(1);
} }
} }
void start_pa() {
#ifdef PCM_FILE
char _wavbuf[50];
sprintf(_wavbuf, PCM_FILE, "recv");
wave_recv = open(_wavbuf, O_WRONLY | O_CREAT, 00644);
sprintf(_wavbuf, PCM_FILE, "transmit");
wave_recv = open(_wavbuf, O_WRONLY | O_CREAT, 00644);
if (wave_recv <= 0 || wave_transmit <= 0)
error_exit("open wave files", 1);
#endif
#ifdef HAS_PULSE
pa_s1 = pa_simple_new(NULL, // Use the default server.
"dmodem", // Our application's name.
PA_STREAM_PLAYBACK,
NULL, // Use the default device.
"recv", // Description of our stream.
&pa_ss, // Our sample format.
NULL, // Use default channel map
NULL, // Use default buffering attributes.
NULL // Ignore error code.
);
pa_s2 = pa_simple_new(NULL, // Use the default server.
"dmodem", // Our application's name.
PA_STREAM_PLAYBACK,
NULL, // Use the default device.
"transmit", // Description of our stream.
&pa_ss, // Our sample format.
NULL, // Use default channel map
NULL, // Use default buffering attributes.
NULL // Ignore error code.
);
if (!pa_s1 || !pa_s2)
error_exit("pulseaudio", 1);
#endif
}
void stop_pa() {
#ifdef HAS_PULSE
if(pa_s1)
pa_simple_free(pa_s1);
if(pa_s2)
pa_simple_free(pa_s2);
pa_s1 = 0;
pa_s1 = 0;
#endif
#ifdef PCM_FILE
if (wave_recv >= 0)
close(wave_recv);
if (wave_transmit >= 0)
close(wave_transmit);
wave_recv = -1;
wave_transmit = -1;
#endif
}
static pj_status_t dmodem_put_frame(pjmedia_port *this_port, pjmedia_frame *frame) { static pj_status_t dmodem_put_frame(pjmedia_port *this_port, pjmedia_frame *frame) {
struct dmodem *sm = (struct dmodem *)this_port; struct dmodem *sm = (struct dmodem *)this_port;
int len; int len;
if (frame->type == PJMEDIA_FRAME_TYPE_AUDIO) { if (frame->type == PJMEDIA_FRAME_TYPE_AUDIO) {
#ifdef HAS_PULSE pa_simple_write(pa_s1, frame->buf, frame->size, NULL);
pa_simple_write(pa_s1, frame->buf, frame->size, NULL); write(wave_recv, frame->buf, frame->size);
#endif
#ifdef PCM_FILE
write(wave_recv, frame->buf, frame->size);
#endif
if ((len=write(sm->sock, frame->buf, frame->size)) != frame->size) { if ((len=write(sm->sock, frame->buf, frame->size)) != frame->size) {
error_exit("error writing frame",0); error_exit("error writing frame",0);
} }
@ -168,20 +87,14 @@ static pj_status_t dmodem_get_frame(pjmedia_port *this_port, pjmedia_frame *fram
frame->timestamp.u64 = sm->timestamp.u64; frame->timestamp.u64 = sm->timestamp.u64;
frame->type = PJMEDIA_FRAME_TYPE_AUDIO; frame->type = PJMEDIA_FRAME_TYPE_AUDIO;
sm->timestamp.u64 += PJMEDIA_PIA_SPF(&this_port->info); sm->timestamp.u64 += PJMEDIA_PIA_SPF(&this_port->info);
#ifdef HAS_PULSE pa_simple_write(pa_s2, frame->buf, frame->size, NULL);
pa_simple_write(pa_s2, frame->buf, frame->size, NULL); write(wave_transmit, frame->buf, frame->size);
#endif
#ifdef PCM_FILE
write(wave_transmit, frame->buf, frame->size);
#endif
return PJ_SUCCESS; return PJ_SUCCESS;
} }
static pj_status_t dmodem_on_destroy(pjmedia_port *this_port) { static pj_status_t dmodem_on_destroy(pjmedia_port *this_port) {
printf("destroy\n"); printf("destroy\n");
if (answered)
kill(ppid, SIGINT);
exit(-1); exit(-1);
} }
@ -201,31 +114,11 @@ static void on_call_state(pjsua_call_id call_id, pjsip_event *e) {
if (!destroying) { if (!destroying) {
destroying = true; destroying = true;
pjsua_destroy(); pjsua_destroy();
stop_pa();
if (answered)
kill(ppid, SIGINT);
exit(0); exit(0);
} }
} }
} }
static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data *rdata) {
pjsua_call_info ci;
pjsua_call_get_info(call_id, &ci);
char* tmp = malloc(pj_strlen(&ci.remote_contact)+1);
strcpy(tmp, ci.remote_contact.ptr);
tmp[pj_strlen(&ci.remote_contact)] = '\0';
if (answered) {
PJ_LOG(2,(__FILE__, "Incoming call rejected from: %s", tmp));
pjsua_call_hangup(call_id, 0u, NULL, NULL);
return;
}
PJ_LOG(2,(__FILE__, "Incoming call from: %s", tmp));
free(tmp);
incoming = call_id;
ringing = 1;
}
/* Callback called by the library when call's media state has changed */ /* Callback called by the library when call's media state has changed */
static void on_call_media_state(pjsua_call_id call_id) { static void on_call_media_state(pjsua_call_id call_id) {
pjsua_call_info ci; pjsua_call_info ci;
@ -247,39 +140,65 @@ static void on_call_media_state(pjsua_call_id call_id) {
} }
} }
void start_pa() {
wave_recv = open("/tmp/dmodem.recv.s16le.9600hz.pcm", O_WRONLY | O_CREAT, 00644);
wave_transmit = open("/tmp/dmodem.transmit.s16le.9600hz.pcm", O_WRONLY | O_CREAT, 00644);
if (wave_recv <= 0 || wave_transmit <= 0)
error_exit("open wave files", 1);
pa_s1 = pa_simple_new(NULL, // Use the default server.
"dmodem", // Our application's name.
PA_STREAM_PLAYBACK,
NULL, // Use the default device.
"recv", // Description of our stream.
&pa_ss, // Our sample format.
NULL, // Use default channel map
NULL, // Use default buffering attributes.
NULL // Ignore error code.
);
pa_s2 = pa_simple_new(NULL, // Use the default server.
"dmodem", // Our application's name.
PA_STREAM_PLAYBACK,
NULL, // Use the default device.
"transmit", // Description of our stream.
&pa_ss, // Our sample format.
NULL, // Use default channel map
NULL, // Use default buffering attributes.
NULL // Ignore error code.
);
if (!pa_s1 || !pa_s2)
error_exit("pulseaudio", 1);
}
void stop_pa() {
pa_simple_free(pa_s1);
pa_simple_free(pa_s2);
close(wave_recv);
close(wave_transmit);
}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
pjsua_acc_id acc_id; pjsua_acc_id acc_id;
pj_status_t status; pj_status_t status;
if (argc != 5) {
if (argc != 3) {
return -1; return -1;
} }
ppid = atoi(argv[3]);
char* _modemid_tmp = argv[4];
for (size_t i = strlen(_modemid_tmp) - 1 ; ; i--) {
if (i < 0 || _modemid_tmp[i] < '0' || _modemid_tmp[i] > '9') {
_modemid_tmp += i+1;
break;
}
}
int sip_port = atoi(_modemid_tmp);
sip_port = sip_port >= 0 ? sip_port : 0;
sip_port += 5060;
sip_port = sip_port <= 65535 ? sip_port : 65535;
if(!strncmp(argv[1], "rr", 2)) {
mode = DMODEM_ANSWER_MODE;
}
signal(SIGPIPE,SIG_IGN); signal(SIGPIPE,SIG_IGN);
char *dialstr = argv[1]; char *dialstr = argv[1];
int has_sip_user = 1; int has_sip_user = 1;
const char *_sip_user = getenv("SIP_LOGIN"); char *sip_user = getenv("SIP_LOGIN");
char *sip_user = NULL; if (!sip_user) {
if (!_sip_user) { has_sip_user = 0;
has_sip_user = 0; printf("[!] SIP_LOGIN is empty, no registration will be attempted\n");
_sip_user = "placeholder:placeholder@placeholder"; char sip_user_buf[40];
strcpy(sip_user_buf, "placeholder:placeholder@placeholder");
sip_user = sip_user_buf;
}
if (!sip_user) {
return -1;
} }
sip_user = malloc(strlen(_sip_user) + 1);
strcpy(sip_user, _sip_user);
char *sip_domain = strchr(sip_user,'@'); char *sip_domain = strchr(sip_user,'@');
if (!sip_domain) { if (!sip_domain) {
return -1; return -1;
@ -293,8 +212,6 @@ int main(int argc, char *argv[]) {
status = pjsua_create(); status = pjsua_create();
if (status != PJ_SUCCESS) error_exit("Error in pjsua_create()", status); if (status != PJ_SUCCESS) error_exit("Error in pjsua_create()", status);
if (!has_sip_user)
PJ_LOG(2,(__FILE__, "SIP_LOGIN is empty, no registration will be attempted"));
/* Init pjsua */ /* Init pjsua */
{ {
@ -306,23 +223,18 @@ int main(int argc, char *argv[]) {
cfg.cb.on_call_media_state = &on_call_media_state; cfg.cb.on_call_media_state = &on_call_media_state;
cfg.cb.on_call_state = &on_call_state; cfg.cb.on_call_state = &on_call_state;
if(mode == DMODEM_ANSWER_MODE) {
cfg.cb.on_incoming_call = &on_incoming_call;
}
pjsua_logging_config_default(&log_cfg); pjsua_logging_config_default(&log_cfg);
// log_cfg.console_level = 4; log_cfg.console_level = 4;
log_cfg.console_level = 2;
pjsua_media_config_default(&med_cfg); pjsua_media_config_default(&med_cfg);
med_cfg.no_vad = true; med_cfg.no_vad = true;
med_cfg.ec_tail_len = 0; med_cfg.ec_tail_len = 0;
med_cfg.jb_max = -1; med_cfg.jb_max = 2000;
med_cfg.jb_init = -1; // med_cfg.jb_init = 200;
/* // med_cfg.jb_init = 200 */
med_cfg.jb_init = 100;
/* med_cfg.audio_frame_ptime = 5; */
med_cfg.audio_frame_ptime = 10; med_cfg.audio_frame_ptime = 10;
med_cfg.quality = 10;
med_cfg.enable_ice = PJ_FALSE;
med_cfg.enable_turn = PJ_FALSE;
status = pjsua_init(&cfg, &log_cfg, &med_cfg); status = pjsua_init(&cfg, &log_cfg, &med_cfg);
if (status != PJ_SUCCESS) error_exit("Error in pjsua_init()", status); if (status != PJ_SUCCESS) error_exit("Error in pjsua_init()", status);
@ -337,31 +249,29 @@ int main(int argc, char *argv[]) {
pjsua_enum_codecs(codecs,&count); pjsua_enum_codecs(codecs,&count);
for (int i=0; i<count; i++) { for (int i=0; i<count; i++) {
int pri = 0; int pri = 0;
if (pj_strcmp2(&codecs[i].codec_id,"PCMA/8000/1") == 0) { if (pj_strcmp2(&codecs[i].codec_id,"PCMU/8000/1") == 0) {
pri = 1; pri = 0;
} else if (pj_strcmp2(&codecs[i].codec_id,"PCMU/8000/1") == 0) { } else if (pj_strcmp2(&codecs[i].codec_id,"PCMA/8000/1") == 0) {
pri = 2; pri = 2;
} }
pjsua_codec_set_priority(&codecs[i].codec_id, pri); pjsua_codec_set_priority(&codecs[i].codec_id, pri);
// printf("codec: %s %d\n",pj_strbuf(&codecs[i].codec_id),pri); // printf("codec: %s %d\n",pj_strbuf(&codecs[i].codec_id),pri);
} }
pjsua_transport_id transport_id; pjsua_transport_id transport_id;
/* Add UDP transport. */ /* Add UDP transport. */
{ {
pjsua_transport_config cfg; pjsua_transport_config cfg;
pjsua_transport_config_default(&cfg); pjsua_transport_config_default(&cfg);
if (mode) // cfg.port = 5060;
cfg.port = sip_port; if (getenv("PJSIP_IPV6"))
if (getenv("PJSIP_IPV6"))
status = pjsua_transport_create(PJSIP_TRANSPORT_UDP6, &cfg, &transport_id); status = pjsua_transport_create(PJSIP_TRANSPORT_UDP6, &cfg, &transport_id);
else else
status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &cfg, &transport_id); status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &cfg, &transport_id);
if (status != PJ_SUCCESS) error_exit("Error creating transport", status); if (status != PJ_SUCCESS) error_exit("Error creating transport", status);
} }
char buf[384];
//printf("Initializing pool\n");
pj_caching_pool cp; pj_caching_pool cp;
pj_caching_pool_init(&cp, NULL, 1024*1024); pj_caching_pool_init(&cp, NULL, 1024*1024);
pool = pj_pool_create(&cp.factory, "pool1", 4000, 4000, NULL); pool = pj_pool_create(&cp.factory, "pool1", 4000, 4000, NULL);
@ -375,13 +285,15 @@ int main(int argc, char *argv[]) {
port.base.get_frame = dmodem_get_frame; port.base.get_frame = dmodem_get_frame;
port.base.on_destroy = dmodem_on_destroy; port.base.on_destroy = dmodem_on_destroy;
char buf[384];
memset(buf,0,sizeof(buf)); memset(buf,0,sizeof(buf));
write(port.sock, buf, sizeof(buf)); write(port.sock, buf, sizeof(buf));
/* Initialization is done, now start pjsua */ /* Initialization is done, now start pjsua */
status = pjsua_start(); status = pjsua_start();
if (status != PJ_SUCCESS) error_exit("Error starting pjsua", status); if (status != PJ_SUCCESS) error_exit("Error starting pjsua", status);
if (has_sip_user) if (has_sip_user)
{ {
pjsua_acc_config cfg; pjsua_acc_config cfg;
pjsua_acc_config_default(&cfg); pjsua_acc_config_default(&cfg);
@ -389,7 +301,7 @@ int main(int argc, char *argv[]) {
pj_strdup2(pool,&cfg.id,buf); pj_strdup2(pool,&cfg.id,buf);
snprintf(buf,sizeof(buf),"sip:%s",sip_domain); snprintf(buf,sizeof(buf),"sip:%s",sip_domain);
pj_strdup2(pool,&cfg.reg_uri,buf); pj_strdup2(pool,&cfg.reg_uri,buf);
cfg.register_on_acc_add = mode ? true : false; cfg.register_on_acc_add = true;
cfg.cred_count = 1; cfg.cred_count = 1;
cfg.cred_info[0].realm = pj_str("*"); cfg.cred_info[0].realm = pj_str("*");
cfg.cred_info[0].scheme = pj_str("digest"); cfg.cred_info[0].scheme = pj_str("digest");
@ -402,38 +314,30 @@ int main(int argc, char *argv[]) {
} }
else else
{ {
status == pjsua_acc_add_local(transport_id, 1, &acc_id); printf("acc add local\n");
status == pjsua_acc_add_local(transport_id, 1, &acc_id);
if (status != PJ_SUCCESS) error_exit("Error adding local account", status); if (status != PJ_SUCCESS) error_exit("Error adding local account", status);
} }
pjsua_get_var()->tpdata[transport_id].has_bound_addr = PJ_TRUE; pjsua_get_var()->tpdata[transport_id].has_bound_addr = PJ_TRUE;
if (getenv("PJSIP_IPV6")) if (getenv("PJSIP_IPV6"))
pjsua_get_var()->acc[acc_id].cfg.ipv6_media_use = PJSUA_IPV6_ENABLED; pjsua_get_var()->acc[acc_id].cfg.ipv6_media_use = PJSUA_IPV6_ENABLED;
start_pa(); if (has_sip_user)
if(mode == DMODEM_DIAL_MODE) { snprintf(buf,sizeof(buf),"sip:%s@%s",dialstr,sip_domain);
if (has_sip_user) else
snprintf(buf,sizeof(buf),"sip:%s@%s",dialstr,sip_domain); snprintf(buf,sizeof(buf),"sip:%s",dialstr);
else printf("calling %s\n",buf);
snprintf(buf,sizeof(buf),"sip:%s",dialstr); pj_str_t uri = pj_str(buf);
PJ_LOG(2,(__FILE__, "calling %s\n",buf)); start_pa();
pj_str_t uri = pj_str(buf); pjsua_call_id callid;
pjsua_call_id callid; status = pjsua_call_make_call(acc_id, &uri, 0, NULL, NULL, &callid);
status = pjsua_call_make_call(acc_id, &uri, 0, NULL, NULL, &callid); if (status != PJ_SUCCESS) error_exit("Error making call", status);
if (status != PJ_SUCCESS) error_exit("Error making call", status);
}
struct timespec ts = {1, 0}; struct timespec ts = {100, 0};
while(1) { while(1) {
if(mode == DMODEM_ANSWER_MODE) {
if(ringing) {
status = pjsua_call_answer(incoming, 200, NULL, NULL);
if (status != PJ_SUCCESS) error_exit("Error answering call", status);
ringing = 0;
answered = 1;
}
}
nanosleep(&ts,NULL); nanosleep(&ts,NULL);
} }
stop_pa();
return 0; return 0;
} }

419
mm.py
View file

@ -1,419 +0,0 @@
import subprocess
import threading
import select
import time
import tty
import pathlib
import re
import os
import signal
import ipaddress
import io
import pty
import logging
import pwd
import ctypes
import argparse
from typing import Union, Dict, List, Tuple, Callable, Any
logging.basicConfig(level=logging.DEBUG,format='%(threadName)-5s - %(levelname)s - %(message)s')
logger = logging.getLogger()
PJSIP_V6 = False
# exports PJSIP_IPV6=1 to d-modem
# uses ipv6 sip transport to preserve address space
# utilize ipv4 over v6 next hop so that no v4 is required in the container
PTY_LOC = pathlib.Path("/tmp")
RUN_AS = "nobody"
get_pty = lambda n: PTY_LOC / f"ttySL{n}"
MODEMD = "./slmodemd/slmodemd"
D_MODEM = './d-modem.nopulse'
IP4RANGE = ipaddress.ip_network("10.0.0.0/27")
IP6RANGE = ipaddress.ip_network("fd00::/64")
PRODUCTION = False
# Do we really need that many?
# modem_configs: Dict[int, List[str]] = {
# **{i: (["AT+MS=92,1" ], lambda: PPPProc) for i in range(00, 05)},
# **{i: (["AT+MS=90,1" ], lambda: PPPProc) for i in range(05, 10)},
# **{i: (["AT+MS=34,1" ], lambda: PPPProc) for i in range(10, 15)},
# **{i: (["AT+MS=132,1"], lambda: PPPProc) for i in range(15, 20)},
# **{i: (["AT+MS=32,1" ], lambda: PPPProc) for i in range(20, 25)}, # broken?
# **{i: (["AT+MS=122,1"], lambda: PPPProc) for i in range(25, 30)},
# **{i: (["AT+MS=22,1" ], lambda: PPPProc) for i in range(30, 35)},
# **{i: (["AT+MS=212,1"], lambda: PPPProc) for i in range(35, 40)},
# **{i: (["AT+MS=23,1" ], lambda: PPPProc) for i in range(40, 45)},
# **{i: (["AT+MS=21,1" ], lambda: PPPProc) for i in range(45, 50)}, # broken?
# **{i: (["AT+MS=103,1"], lambda: PPPProc) for i in range(50, 55)},
# }
modem_configs: Dict[int, Tuple[List[str], Callable]] = {
**{i: (["AT+MS=90,1"], lambda: PPPProc) for i in range(0, 1)},
**{i: (["AT+MS=34,1"], lambda: PPPProc) for i in range(1, 2)},
**{i: (["AT+MS=32,1"], lambda: PPPProc) for i in range(2, 3)},
**{i: (["AT+MS=22,1"], lambda: PPPProc) for i in range(3, 5)},
**{i: (["AT+MS=23,1"], lambda: PPPProc) for i in range(5, 7)},
}
assert all(i >= 0 for i in modem_configs)
class BaseProc:
def __init__(self) -> None:
self.proc: subprocess.Popen = None
def proc(self) -> subprocess.Popen:
return self.proc
def terminate(self, *args, **kwargs):
return self.proc.terminate(*args, **kwargs)
def wait(self, *args, **kwargs):
return self.proc.wait(*args, **kwargs)
def poll(self, *args, **kwargs):
return self.proc.poll(*args, **kwargs)
def send_signal(self, *args, **kwargs):
return self.proc.send_signal(*args, **kwargs)
class ShellProc(BaseProc):
''' danger! '''
def __init__(self, ptyr: io.BufferedReader, ptyw: io.BufferedWriter, speed: int, no: int,
pty_path: pathlib.Path, ip: Tuple[ipaddress.IPv4Address, ipaddress.IPv6Address]) -> None:
assert not PRODUCTION
self.proc = subprocess.Popen(
['bash', '-c', 'stty sane;exec bash'],
stdin=ptyr,
stdout=ptyw,
stderr=ptyw,
preexec_fn=os.setsid,
env=dict(os.environ, TERM='vt100')
)
class PPPProc(BaseProc):
def __init__(self, ptyr: io.BufferedReader, ptyw: io.BufferedWriter, speed: int, no: int,
pty_path: pathlib.Path, ip: Tuple[ipaddress.IPv4Address, ipaddress.IPv6Address]) -> None:
self.no = no
self.ip = ip
ptyw.write((
f"Welcome to D-Modem\r\nExample pppd launch options:\r\n"
f" pppd /dev/ttyACM0 {speed} defaultroute persist noproxyarp noauth modem nodetach\r\n"
f"Your ipv6 address is {ip[1]}.\r\n"
f"Please add Address={ip[1]}/{IP6RANGE.prefixlen} Gateway={IP6RANGE[1]}\r\n"
"to your ppp network device.\r\n"
"Enjoy!\r\n\r\n\r\n"
).encode('utf-8'))
ll_ident = lambda x: ipaddress.IPv6Address(int(x) & int(ipaddress.IPv6Address(2**(128-IP6RANGE.prefixlen)-1)))
self.proc = PopenComm(
[
'pppd', str(pty_path.resolve()), str(speed), 'noproxyarp', 'passive', 'noauth',
'unit', str(no), 'modem', 'nodefaultroute', 'nodetach', f"{IP4RANGE[0]}:{ip[0]}",
'+ipv6', 'ipv6', f"{ll_ident(IP6RANGE[1])},{ll_ident(ip[1])}",
'ipcp-max-configure', '100', 'ipcp-max-failure', '100', 'ipcp-restart', '15',
'ipv6cp-max-configure', '100', 'ipv6cp-max-failure', '100', 'ipv6cp-restart', '15'
]
)
def wait(self, *args, **kwargs):
while (lines := self.proc.readline()) is not None:
for line in lines:
logger.info(f"pppd: {line}")
if 'remote LL address' in line:
try:
subprocess.run(
[
'ip', '-6', 'a', 'replace', 'dev', f"ppp{self.no}",
f"{IP6RANGE[1]}/128", 'peer', f"{self.ip[1]}/128"
],
stdin=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
logger.info(f"added v6 route to ppp{self.no}")
except Exception:
logger.exception(f"adding v6 route to ppp{self.no}")
super().wait(*args, **kwargs)
class ModemManagerError(Exception):
pass
class ReadLineException(ModemManagerError):
pass
class PPPDDead(ModemManagerError):
pass
class CarrierLost(ModemManagerError):
pass
class ModemManager:
terminating = False
''' lol not that modem_manager '''
def __init__(self):
self.modems = {no: Modem(no, config) for no, config in modem_configs.items()}
self.ip_used4 = {IP4RANGE[0]}
self.ip_used6 = {IP6RANGE[0], IP6RANGE[1]}
class PopenComm(subprocess.Popen):
def __init__(self, *args, **kwargs) -> None:
try:
self._popen_comm_master, self._popen_comm_slave = pty.openpty()
os.set_blocking(self._popen_comm_master, False)
self._popen_comm_r = open(self._popen_comm_master, "rb", buffering=0)
kwargs['stdin'] = kwargs['stdout'] = kwargs['stderr'] = self._popen_comm_master
super().__init__(*args, **kwargs)
except Exception:
self._popen_comm_cleanup()
raise
def w(self):
try:
super().wait(timeout=None)
except Exception:
logger.exception("Popen wait")
self._popen_comm_cleanup()
self.wtr = threading.Thread(target=w, args=(self,))
self.wtr.start()
def wait(self, timeout=None) -> int:
if timeout is not None:
return super().wait(timeout=timeout)
self.wtr.join()
if self.poll() is None:
return super().wait(timeout=None)
return self.returncode
def _popen_comm_cleanup(self) -> None:
try:
os.close(self._popen_comm_slave)
except Exception:
pass
try:
self._popen_comm_r.close()
except Exception:
pass
try:
os.close(self._popen_comm_master)
except Exception:
pass
logger.info(f"{self} pty pair closed")
def readline(self) -> Union[List[str], None]:
''' blocks '''
try:
select.select([self._popen_comm_master], list(), list())
read = self._popen_comm_r.read().decode('utf-8', errors='replace')
except (OSError, ValueError):
return None
except Exception:
logger.exception("readline")
return None
if not read:
return None
got = read.split('\n')
if not got[-1]:
got.pop(-1)
return got
class IP_Request:
lock = {4: threading.Lock(), 6: threading.Lock()}
def __init__(self, version: int) -> None:
assert version in {4, 6}
self.v = version
self.addr = None
self.used = modem_manger.ip_used4 if self.v == 4 else modem_manger.ip_used6
def __enter__(self):
with self.lock[self.v]:
for address in (IP4RANGE if self.v == 4 else IP6RANGE):
if address in self.used:
continue
else:
self.addr = address
self.used.add(address)
logger.info(f"ipv{self.v} lease: {str(self.addr)}")
return address
raise RuntimeError(f"error: ipv{self.v} address exhausted")
def __exit__(self, *_):
if self.addr:
with self.lock[self.v]:
self.used.remove(self.addr)
logger.info(f"ipv{self.v} return: {str(self.addr)}")
class Modem:
def __init__(self, no: int, config: Tuple[List[str], Callable]):
self.no = no
self.readline_quit = False
self.readlinebuf = []
self.modem_proc: Union[subprocess.Popen, None] = None
self.ppp_proc: Union[subprocess.Popen, None] = None
self.modem_cmd, get_ppp_func = config
self.ppp_func = get_ppp_func()
self.modem_cmd = [*self.modem_cmd, "ATA"]
self.pty_path = get_pty(self.no)
if os.path.exists(self.pty_path):
logger.warning(f"pty link exists {str(self.pty_path)}")
self.pty_path.unlink()
self.modem_ctl: threading.Thread = threading.Thread(target=self._start_modem_ctl, name=f"md{no:03d}")
self.ppp_ctl: threading.Thread = threading.Thread(target=self._start_ppp_ctl, name=f"pp{no:03d}")
self.modem_ctl.start()
self.ppp_ctl.start()
def _util_readline(self, dev: io.BufferedReader, timeout: float) -> bytes:
readlinebuf = self.readlinebuf
readlinebuf.clear()
time_remaining = timeout
while True:
read_ready, _, _ = select.select([dev], list(), list(), 0.1)
if self.readline_quit:
self.readline_quit = False
raise ReadLineException("process exit")
if not read_ready:
time_remaining -= 0.1
if time_remaining < 0:
break
continue
readlinebuf.append(dev.read(1))
if readlinebuf[-1] == b'\n':
return b''.join(readlinebuf)
return b''.join(readlinebuf)
def _start_modem_ctl(self) -> None:
while not ModemManager.terminating:
try:
if os.geteuid() == 0:
pw_record = pwd.getpwnam(RUN_AS)
uid, gid = pw_record.pw_uid, pw_record.pw_gid
def demote():
PR_SET_NO_NEW_PRIVS = 38
PR_CAP_AMBIENT = 47
PR_CAP_AMBIENT_CLEAR_ALL = 4
PR_GET_SECUREBITS = 27
PR_SET_SECUREBITS = 28
libc = ctypes.CDLL('libc.so.6')
libc.prctl.restype = ctypes.c_int
assert libc.prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) == 0
assert libc.prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_CLEAR_ALL, 0, 0, 0) == 0
assert libc.prctl(PR_SET_SECUREBITS, 0x2f) == 0
# SECBIT_KEEP_CAPS_LOCKED | SECBIT_NO_SETUID_FIXUP | SECBIT_NO_SETUID_FIXUP_LOCKED | SECBIT_NOROOT | SECBIT_NOROOT_LOCKED
assert libc.prctl(PR_GET_SECUREBITS) == 0x2f
os.setgroups([])
os.setresgid(gid, gid, gid)
os.setresuid(uid, uid, uid)
os.chdir(os.getcwd())
preexec_func = demote
env = {
'USER': pw_record.pw_name,
'LOGNAME': pw_record.pw_name,
'HOME': '/',
'PATH': os.environ['PATH'],
}
else:
preexec_func = lambda: None
env = dict(os.environ)
logger.warning("d-modem is running as current user")
assert not PRODUCTION
if PJSIP_V6:
env['PJSIP_IPV6'] = '1'
else:
if 'PJSIP_IPV6' in env:
env.pop('PJSIP_IPV6')
self.modem_proc = PopenComm(
[MODEMD, '-e', D_MODEM, str(self.pty_path)],
preexec_fn=preexec_func,
env = env
)
while (lines := self.modem_proc.readline()) is not None:
for line in lines:
logger.info(f"slmodemd: {line}")
self.modem_proc.wait()
except Exception:
logger.exception("unknown error")
try:
self.readline_quit = True
if self.ppp_proc:
self.ppp_proc.terminate()
self.ppp_proc.wait()
self.ppp_proc = None
except Exception as err:
logger.exception("unknown error")
self.ppp_ctl.join()
def _start_ppp_ctl(self) -> None:
time.sleep(1)
while not ModemManager.terminating:
commands = self.modem_cmd.copy()
try:
with open(self.pty_path.resolve(), "rb", buffering=0) as ptyr, open(self.pty_path.resolve(), "wb", buffering=0) as ptyw:
tty.setraw(ptyr)
tty.setraw(ptyw)
while True:
while (got := self._util_readline(ptyr, 0.3).decode('utf-8', errors='replace')):
logger.debug(f"from pty: {got=}")
if got:
if (match := re.match(r'CONNECT ([0-9]+)', got)) and not self.ppp_proc:
speed = int(match.groups()[0])
assert speed > 0
logger.info(f"connection {speed=}, start subprocess")
ptyw.write(f"Remote speed {speed}\r\n".encode('utf-8'))
try:
with IP_Request(4) as ip4, IP_Request(6) as ip6:
self.ppp_proc = self.ppp_func(ptyr, ptyw, speed, self.no, self.pty_path, (ip4, ip6))
self.ppp_proc.wait()
except Exception:
logger.exception("unknown subprocess error")
self.modem_proc.send_signal(signal.SIGINT)
self.modem_proc.wait()
raise PPPDDead
elif got == 'NO CARRIER\r\n':
self._util_readline(ptyr, 2)
raise CarrierLost
if commands:
cmd = commands.pop(0)
ptyw.write(f"{cmd}\n\r".encode('ascii'))
logger.info(f"command: {cmd}")
ptyw.flush()
time.sleep(0.1)
except ModemManagerError as err:
logger.info(f"pty detach: {repr(err)}")
time.sleep(0.1)
except Exception:
logger.exception("unknown error")
time.sleep(2)
if __name__ == "__main__":
abspath=os.path.abspath(__file__)
abspath=os.path.dirname(abspath)
os.chdir(abspath)
parser = argparse.ArgumentParser(description='ModemManager.py')
parser.add_argument('-4', '--ipv4', type=str, default=str(IP4RANGE), help='ipv4 subnet')
parser.add_argument('-6', '--ipv6', type=str, default=str(IP6RANGE), help='ipv6 subnet')
parser.add_argument('-m', '--modemd', type=str, default=str(MODEMD), help='modemd location')
parser.add_argument('-d', '--dmodem', type=str, default=str(D_MODEM), help='d-modem location')
parser.add_argument('-p', '--pty', type=str, default=str(PTY_LOC), help='pty link location')
parser.add_argument('-u', '--user', type=str, default=str(RUN_AS), help='run as user')
parser.add_argument('-s', '--production', action='store_true', help='enable strict checks')
parser.add_argument('--pjsip6', action='store_true', help='pjsip force v6')
args = parser.parse_args()
def g(x: str, y: Any) -> None:
globals()[x] = y
g('IP4RANGE', ipaddress.ip_network(args.ipv4))
g('IP6RANGE', ipaddress.ip_network(args.ipv6))
g('MODEMD', args.modemd)
g('D_MODEM', args.dmodem)
g('PTY_LOC', pathlib.Path(args.pty))
g('RUN_AS', args.user)
g('PRODUCTION', args.production)
g('PJSIP_V6', args.pjsip6)
if args.production:
logger.setLevel(logging.INFO)
modem_manger = ModemManager()
def sighandler(signum, _frame):
if ModemManager.terminating:
logger.error(f"received signal {signum} while terminating")
else:
ModemManager.terminating = True
logger.warning(f"terminate on signal {signum}")
for modem in modem_manger.modems.values():
modem.modem_proc.terminate()
for sig in (signal.SIGTERM, signal.SIGHUP, signal.SIGINT, signal.SIGABRT):
signal.signal(sig, sighandler)
for modem in modem_manger.modems.values():
modem.modem_ctl.join()

@ -1 +0,0 @@
Subproject commit 43c745789d291496fe1c3ed8a2c0dd6305260b32

View file

@ -0,0 +1,42 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: 'type: bug'
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. run pjsua app with parameter: `--video --registrar sip:some.sip.registrar ...`
1. make two video calls to: `sip:abc` and `sip:xyz`1
1. setup video conference: `vid conf cc ...`
1. assertion occurs!
**Expected behavior**
A clear and concise description of what you expected to happen.
**Logs/Screenshots**
If applicable, add screenshots PJSIP logs with verbosity level 5, packet capture (e.g: using Wireshark), audio/video recording, screenshot, etc.
**Desktop/Smartphone (please complete the following information):**
- OS, Distribution & Version: [e.g. MacOS Mojave, Ubuntu 16.04, iOS 13]
- PJSIP
- version: ...
- applied patch(es): [e.g: patches from issue/PR xyz]
- `configure` script params: ...
- `config_site.h` contents: ...
- related third party libraries & versions: [e.g: OpenSSL 1.1.1b]
**Smartphone (please also complete the following information):**
- Device: [e.g. iPhone 6]
**Additional context**
Add any other context about the problem here.

View file

@ -0,0 +1,4 @@
blank_issues_enabled: false
contact_links:
- name: PJSIP tag on Stack Overflow
url: https://stackoverflow.com/questions/tagged/pjsip

View file

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: 'type: enhancement'
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View file

@ -0,0 +1,31 @@
<!--- Provide a general summary of your changes in the Title above -->
## Description
<!--- Describe your changes in detail -->
## Motivation and Context
<!--- Why is this change required? What problem does it solve? -->
<!--- If it fixes an open issue, please link to the issue here. -->
## How Has This Been Tested?
<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, and the tests you ran to -->
<!--- see how your change affects other areas of the code, etc. -->
## Screenshots (if appropriate):
## Types of changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
## Checklist:
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] My code follows the code style of this project.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [ ] I have read the **CONTRIBUTING** document.
- [ ] I have added tests to cover my changes.
- [ ] All new and existing tests passed.

View file

@ -0,0 +1,703 @@
name: C/C++ CI
on: [push, pull_request]
jobs:
build-ubuntu-default:
# checking pure lib source distribution with plain configure & make
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: configure
run: ./configure
- name: make
run: make
build-ubuntu-default-full-bundle-1:
# full bundle: enable all codecs + AEC + DTLS
# full bundle 1: running pjlib, pjlib-util, pjmedia, and pjsua tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: sudo apt-get install -y swig sip-tester libopencore-amrnb-dev
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h
- name: configure
run: CFLAGS="-g -fPIC" CXXFLAGS="-g -fPIC" LDFLAGS="-rdynamic" ./configure
- name: make
run: make
- name: swig bindings
run: cd pjsip-apps/src/swig && make
- name: set up Python 2.7 for pjsua test
uses: actions/setup-python@v2
with:
python-version: 2.7
- name: unit tests
run: make pjlib-test pjlib-util-test pjmedia-test pjsua-test
build-ubuntu-default-full-bundle-2:
# full bundle 2: running pjnath test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: sudo apt-get install -y libopencore-amrnb-dev
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h
- name: configure
run: CFLAGS="-g" LDFLAGS="-rdynamic" ./configure
- name: make
run: make
- name: unit tests
run: make pjnath-test
build-ubuntu-default-full-bundle-3:
# full bundle 3: running pjsip test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: sudo apt-get install -y libopencore-amrnb-dev
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h
- name: configure
run: CFLAGS="-g" LDFLAGS="-rdynamic" ./configure
- name: make
run: make
- name: unit tests
run: make pjsip-test
build-ubuntu-no-tls:
# no TLS
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: sudo apt-get install -y swig
- name: configure
run: CFLAGS="-fPIC" CXXFLAGS="-fPIC" ./configure --disable-ssl
- name: make
run: make
- name: swig bindings
run: cd pjsip-apps/src/swig && make
# build-ubuntu-openssl
# TLS: with OpenSSL (same as build-ubuntu-default)
build-ubuntu-gnu-tls:
# TLS: with GnuTLS
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: sudo apt-get update && sudo apt-get install -y --fix-missing swig libgnutls28-dev
- name: configure
run: CFLAGS="-fPIC" CXXFLAGS="-fPIC" ./configure --with-gnutls=/usr/
- name: make
run: make
- name: swig bindings
run: cd pjsip-apps/src/swig && make
build-ubuntu-video-openh264-1:
# video: video enabled with vpx and openh264
# video 1: running pjlib, pjlib-util, pjmedia, and pjsua tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: sudo apt-get install -y swig nasm sip-tester libvpx-dev libopencore-amrnb-dev
- name: get openh264
run: git clone --single-branch --branch openh264v2.1.0 https://github.com/cisco/openh264.git
- name: build openh264
run: cd openh264 && make && sudo make install && sudo ldconfig
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h && echo "#define PJMEDIA_HAS_VIDEO 1" >> config_site.h
- name: configure
run: CFLAGS="-g -fPIC -DHAS_VID_CODEC_TEST=0" CXXFLAGS="-g -fPIC" LDFLAGS="-rdynamic" ./configure
- name: make
run: make
- name: swig bindings
run: cd pjsip-apps/src/swig && make
- name: set up Python 2.7 for pjsua test
uses: actions/setup-python@v2
with:
python-version: 2.7
- name: unit tests
run: make pjlib-test pjlib-util-test pjmedia-test pjsua-test
build-ubuntu-video-openh264-2:
# video 2: running pjnath test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: sudo apt-get install -y nasm libvpx-dev libopencore-amrnb-dev
- name: get openh264
run: git clone --single-branch --branch openh264v2.1.0 https://github.com/cisco/openh264.git
- name: build openh264
run: cd openh264 && make && sudo make install && sudo ldconfig
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h && echo "#define PJMEDIA_HAS_VIDEO 1" >> config_site.h
- name: configure
run: CFLAGS="-g" LDFLAGS="-rdynamic" ./configure
- name: make
run: make
- name: unit tests
run: make pjnath-test
build-ubuntu-video-openh264-3:
# video: 3: running pjsip test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: sudo apt-get install -y nasm libvpx-dev libopencore-amrnb-dev
- name: get openh264
run: git clone --single-branch --branch openh264v2.1.0 https://github.com/cisco/openh264.git
- name: build openh264
run: cd openh264 && make && sudo make install && sudo ldconfig
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h && echo "#define PJMEDIA_HAS_VIDEO 1" >> config_site.h
- name: configure
run: CFLAGS="-g" LDFLAGS="-rdynamic" ./configure
- name: make
run: make
- name: unit tests
run: make pjsip-test
build-ubuntu-video-ffmpeg:
# video enabled with vpx and ffmpeg and x264
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: sudo apt-get install -y swig nasm libx264-dev libvpx-dev
- name: get ffmpeg
run: git clone --single-branch --branch release/4.2 https://github.com/FFmpeg/FFmpeg.git
- name: configure ffmpeg
run: cd FFmpeg && ./configure --enable-shared --disable-static --enable-gpl --enable-libx264
- name: build ffmpeg
run: cd FFmpeg && make -j10 && sudo make install
- name: config site
run: echo -e "#define PJMEDIA_HAS_VIDEO 1\n" > pjlib/include/pj/config_site.h
- name: configure
run: CFLAGS="-fPIC" CXXFLAGS="-fPIC" ./configure
- name: make
run: make
- name: swig bindings
run: cd pjsip-apps/src/swig && make
build-mac-default:
# checking pure lib source distribution with plain configure & make
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: configure
run: ./configure
- name: make
run: make
build-mac-default-full-bundle-1:
# full bundle: enable all codecs + AEC + DTLS
# full bundle 1: running pjlib, pjlib-util, pjmedia, and pjsua tests
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: brew install opencore-amr swig sipp
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h
- name: configure
run: CFLAGS="-g -I/usr/local/include -I/usr/local/opt/openssl/include -fPIC" LDFLAGS="-L/usr/local/lib -L/usr/local/opt/openssl/lib" CXXFLAGS="-g -fPIC" ./configure
- name: make
run: make
- name: swig bindings
run: cd pjsip-apps/src/swig && make
- name: disable firewall
run: sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
- name: set up Python 2.7 for pjsua test
uses: actions/setup-python@v2
with:
python-version: 2.7
- name: unit tests
run: make pjlib-test pjmedia-test pjlib-util-test pjsua-test
build-mac-default-full-bundle-2:
# full bundle 2: running pjnath test
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: brew install opencore-amr
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h
- name: configure
run: CFLAGS="-g -I/usr/local/include -I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/lib -L/usr/local/opt/openssl/lib" ./configure
- name: make
run: make
- name: disable firewall
run: sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
- name: unit tests
run: make pjnath-test
build-mac-default-full-bundle-3:
# full bundle 3: running pjsip test
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: brew install opencore-amr
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h
- name: configure
run: CFLAGS="-g -I/usr/local/include -I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/lib -L/usr/local/opt/openssl/lib" ./configure
- name: make
run: make
- name: disable firewall
run: sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
- name: unit tests
run: make pjsip-test
# build-ubuntu-no-tls:
# no TLS (same as build-mac-default)
build-mac-openssl:
# TLS: with OpenSSL
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: brew install swig
- name: configure
run: CFLAGS="-I/usr/local/include -I/usr/local/opt/openssl/include -fPIC" LDFLAGS="-L/usr/local/lib -L/usr/local/opt/openssl/lib" CXXFLAGS="-fPIC" ./configure
- name: make
run: make
- name: swig bindings
run: cd pjsip-apps/src/swig && make
build-mac-gnu-tls:
# TLS: with GnuTLS
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: brew install swig
- name: configure
run: CFLAGS="-fPIC" CXXFLAGS="-fPIC" ./configure --with-gnutls=/usr/local/
- name: make
run: make
- name: swig bindings
run: cd pjsip-apps/src/swig && make
build-mac-video-openh264-1:
# video: video enabled with vpx and openh264
# video 1: running pjlib, pjlib-util, pjmedia, and pjsua tests
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: brew install openh264 libvpx opencore-amr swig sipp
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h && echo "#define PJMEDIA_HAS_VIDEO 1" >> config_site.h
- name: configure
run: CFLAGS="-g -I/usr/local/include -I/usr/local/opt/openssl/include -DHAS_VID_CODEC_TEST=0 -fPIC" LDFLAGS="-L/usr/local/lib -L/usr/local/opt/openssl/lib" CXXFLAGS="-g -fPIC" ./configure
- name: make
run: make
- name: swig bindings
run: cd pjsip-apps/src/swig && make
- name: disable firewall
run: sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
- name: set up Python 2.7 for pjsua test
uses: actions/setup-python@v2
with:
python-version: 2.7
- name: unit tests
run: make pjlib-test pjmedia-test pjlib-util-test pjsua-test
build-mac-video-openh264-2:
# video 2: running pjnath test
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: brew install openh264 libvpx opencore-amr
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h && echo "#define PJMEDIA_HAS_VIDEO 1" >> config_site.h
- name: configure
run: CFLAGS="-g -I/usr/local/include -I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/lib -L/usr/local/opt/openssl/lib" ./configure
- name: make
run: make
- name: disable firewall
run: sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
- name: unit tests
run: make pjnath-test
build-mac-video-openh264-3:
# video 3: running pjsip test
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: brew install openh264 libvpx opencore-amr
- name: config site
run: cd pjlib/include/pj && cp config_site_test.h config_site.h && echo "#define PJMEDIA_HAS_VIDEO 1" >> config_site.h
- name: configure
run: CFLAGS="-g -I/usr/local/include -I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/lib -L/usr/local/opt/openssl/lib" ./configure
- name: make
run: make
- name: disable firewall
run: sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
- name: unit tests
run: make pjsip-test
build-mac-video-ffmpeg:
# video enabled with vpx and ffmpeg and x264
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: brew install x264 libvpx nasm swig
- name: get ffmpeg
run: git clone --single-branch --branch release/4.2 https://github.com/FFmpeg/FFmpeg.git
- name: configure ffmpeg
run: cd FFmpeg && ./configure --enable-shared --disable-static --enable-gpl --enable-libx264
- name: build ffmpeg
run: cd FFmpeg && make -j10 && sudo make install
- name: config site
run: echo -e "#define PJMEDIA_HAS_VIDEO 1\n" > pjlib/include/pj/config_site.h
- name: configure
run: CFLAGS="-I/usr/local/include -I/usr/local/opt/openssl/include -fPIC" LDFLAGS="-L/usr/local/lib -L/usr/local/opt/openssl/lib" CXXFLAGS="-fPIC" ./configure
- name: make
run: make
- name: swig bindings
run: cd pjsip-apps/src/swig && make
build-mac-video-vid-toolbox:
# video enabled with vpx and video toolbox
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: install dependencies
run: brew install libvpx swig
- name: config site
run: echo -e "#define PJMEDIA_HAS_VIDEO 1\n#define PJMEDIA_HAS_VID_TOOLBOX_CODEC 1\n" > pjlib/include/pj/config_site.h
- name: configure
run: CFLAGS="-I/usr/local/include -I/usr/local/opt/openssl/include -fPIC" LDFLAGS="-L/usr/local/lib -L/usr/local/opt/openssl/lib" CXXFLAGS="-fPIC" ./configure
- name: make
run: make
- name: swig bindings
run: cd pjsip-apps/src/swig && make
build-windows-default:
runs-on: windows-latest
steps:
- uses: actions/checkout@master
- name: get swig
run: Invoke-WebRequest -Uri "https://nchc.dl.sourceforge.net/project/swig/swigwin/swigwin-4.0.1/swigwin-4.0.1.zip" -OutFile ".\swigwin.zip"
shell: powershell
- name: expand swig
run: |
Expand-Archive -LiteralPath .\swigwin.zip -DestinationPath .\swigwin\; pwd
cd swigwin\swigwin-4.0.1
Add-Content ..\..\swig_path.txt $pwd.Path
shell: powershell
- name: config site
run:
type nul > pjlib/include/pj/config_site.h
shell: cmd
- name: MSBuild
run: |
call "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
msbuild pjproject-vs14.sln /p:PlatformToolset=v142 /p:Configuration=Debug /p:Platform=win32
shell: cmd
- name: build swig
run: |
set /P SWIG_PATH=<swig_path.txt
set PATH=%PATH%;%SWIG_PATH%
dir pjlib/include/pj/config_site.h
type pjlib/include/pj/config_site.h
call "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
set INCLUDE=%INCLUDE%;%JAVA_HOME%\include;%JAVA_HOME%\include\win32
cd pjsip-apps/build
msbuild swig_java_pjsua2.vcxproj /p:PlatformToolset=v142 /p:Configuration=Debug /p:Platform=win32 /p:UseEnv=true
shell: cmd
build-windows-with-openssl-unit-test-1:
runs-on: windows-latest
steps:
- uses: actions/checkout@master
- name: get openssl
run: Invoke-WebRequest -Uri "https://mirror.firedaemon.com/OpenSSL/openssl-1.1.1e-dev.zip" -OutFile ".\openssl.zip"
shell: powershell
- name: expand openssl
run: |
Expand-Archive -LiteralPath .\openssl.zip -DestinationPath .\openssl_build\;
cd openssl_build\openssl-1.1\x86
Add-Content ..\..\..\openssl_dir.txt $pwd.Path
shell: powershell
- name: check openssl folder
run: |
set /P OPENSSL_DIR=<openssl_dir.txt
dir %OPENSSL_DIR%\include
dir %OPENSSL_DIR%\lib
shell: cmd
- name: config site
run:
cd pjlib/include/pj; cp config_site_test.h config_site.h; Add-Content config_site.h "#define PJ_HAS_SSL_SOCK 1"
shell: powershell
- name: check VsDevCmd.bat
run: dir "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
shell: cmd
- name: MSBuild
working-directory: .
run: |
set /P OPENSSL_DIR=<openssl_dir.txt
call "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
set INCLUDE=%INCLUDE%;%OPENSSL_DIR%\include
set LIB=%LIB%;%OPENSSL_DIR%\lib
msbuild pjproject-vs14.sln /p:PlatformToolset=v142 /p:Configuration=Release /p:Platform=win32 /p:UseEnv=true
shell: cmd
- name: unit tests
run: |
$env:OPENSSL_DIR = Get-Content .\openssl_dir.txt
$env:PATH+=";$env:OPENSSL_DIR\bin"
cd pjlib/bin; ./pjlib-test-i386-Win32-vc14-Release.exe
cd ../../pjlib-util/bin; ./pjlib-util-test-i386-Win32-vc14-Release.exe
cd ../../pjmedia/bin/; ./pjmedia-test-i386-Win32-vc14-Release.exe
shell: powershell
build-windows-with-openssl-unit-test-2:
runs-on: windows-latest
steps:
- uses: actions/checkout@master
- name: get openssl
run: Invoke-WebRequest -Uri "https://mirror.firedaemon.com/OpenSSL/openssl-1.1.1e-dev.zip" -OutFile ".\openssl.zip"
shell: powershell
- name: expand openssl
run: |
Expand-Archive -LiteralPath .\openssl.zip -DestinationPath .\openssl_build\; pwd
cd openssl_build\openssl-1.1\x86
Add-Content ..\..\..\openssl_dir.txt $pwd.Path
shell: powershell
- name: check openssl folder
run: |
set /P OPENSSL_DIR=<openssl_dir.txt
dir "%OPENSSL_DIR%\include"
dir "%OPENSSL_DIR%\lib"
shell: cmd
- name: config site
run:
cd pjlib/include/pj; cp config_site_test.h config_site.h; Add-Content config_site.h "#define PJ_HAS_SSL_SOCK 1"
shell: powershell
- name: check VsDevCmd.bat
run: dir "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
shell: cmd
- name: MSBuild
working-directory: .
run: |
set /P OPENSSL_DIR=<openssl_dir.txt
call "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
set INCLUDE=%INCLUDE%;%OPENSSL_DIR%\include
set LIB=%LIB%;%OPENSSL_DIR%\lib
msbuild pjproject-vs14.sln /p:PlatformToolset=v142 /p:Configuration=Release /p:Platform=win32 /p:UseEnv=true
shell: cmd
- name: unit tests
run: |
$env:OPENSSL_DIR = Get-Content .\openssl_dir.txt
$env:PATH+=";$env:OPENSSL_DIR\bin"
cd pjsip/bin; ./pjsip-test-i386-Win32-vc14-Release.exe
shell: powershell
build-windows-gnu-tls:
runs-on: windows-latest
steps:
- uses: actions/checkout@master
- name: get gnutls
run: Invoke-WebRequest -Uri "https://github.com/ShiftMediaProject/gnutls/releases/download/gnutls_3_6_11/libgnutls_gnutls_3_6_11_msvc14.zip" -Outfile ".\libgnutls.zip"
shell: powershell
- name: expand gnutls
run: |
Expand-Archive -LiteralPath .\libgnutls.zip -DestinationPath .\libgnutls_build\; pwd
cd libgnutls_build
Add-Content ..\libgnutls_dir.txt $pwd.Path
shell: powershell
- name: check gnutls folder
run: |
set /P LIBGNUTLS_DIR=<libgnutls_dir.txt
dir "%LIBGNUTLS_DIR%\include"
dir "%LIBGNUTLS_DIR%\lib\x86"
shell: cmd
- name: config site
run: |
echo "" > pjlib\include\pj\config_site.h
Add-Content config_site.h "#define PJ_HAS_SSL_SOCK 1"
Add-Content config_site.h "#define PJ_SSL_SOCK_IMP PJ_SSL_SOCK_IMP_GNUTLS"
shell: powershell
- name: check VsDevCmd.bat
run: dir "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
shell: cmd
- name: MSBuild
working-directory: .
run: |
set /P LIBGNUTLS_DIR=<gnutls_dir.txt
call "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
set INCLUDE=%INCLUDE%;%LIBGNUTLS_DIR%\include
set LIB=%LIB%;%LIBGNUTLS_DIR%\lib\x86
msbuild pjproject-vs14.sln /p:PlatformToolset=v142 /p:Configuration=Release /p:Platform=win32 /p:UseEnv=true
shell: cmd
build-windows-with-video-libvpx-unit-test-1:
runs-on: windows-latest
steps:
- uses: actions/checkout@master
- name: get openssl
run: Invoke-WebRequest -Uri "https://mirror.firedaemon.com/OpenSSL/openssl-1.1.1e-dev.zip" -OutFile ".\openssl.zip"
shell: powershell
- name: expand openssl
run: |
Expand-Archive -LiteralPath .\openssl.zip -DestinationPath .\openssl_build\; pwd
cd openssl_build\openssl-1.1\x86
Add-Content ..\..\..\openssl_dir.txt $pwd.Path
shell: powershell
- name: check openssl folder
run: |
set /P OPENSSL_DIR=<openssl_dir.txt
dir "%OPENSSL_DIR%\include"
dir "%OPENSSL_DIR%\lib"
shell: cmd
- name: get libvpx
run: Invoke-WebRequest -Uri "https://github.com/ShiftMediaProject/libvpx/releases/download/v1.8.2/libvpx_v1.8.2_msvc14.zip" -Outfile "libvpx.zip"
shell: powershell
- name: expand libvpx
run: |
Expand-Archive -LiteralPath .\libvpx.zip -DestinationPath .\libvpx_build\; pwd
cd libvpx_build
Add-Content ..\libvpx_dir.txt $pwd.Path
shell: powershell
- name: check libvpx folder
run: |
set /P LIBVPX_DIR=<libvpx_dir.txt
dir "%LIBVPX_DIR%\include"
dir "%LIBVPX_DIR%\lib\x86"
shell: cmd
- name: get libsdl
run: Invoke-WebRequest -Uri "https://github.com/ShiftMediaProject/SDL/releases/download/release-2.0.9/libsdl_release-2.0.9_msvc14.zip" -Outfile ".\libsdl.zip"
shell: powershell
- name: expand libsdl
run: |
Expand-Archive -LiteralPath .\libsdl.zip -DestinationPath .\libsdl_build\; pwd
cd libsdl_build
Add-Content ..\libsdl_dir.txt $pwd.Path
shell: powershell
- name: check libsdl folder
run: |
set /P LIBSDL_DIR=<libsdl_dir.txt
dir "%LIBSDL_DIR%\include\SDL"
dir "%LIBSDL_DIR%\lib\x86"
shell: cmd
- name: config site
run: |
cd pjlib/include/pj; cp config_site_test.h config_site.h
Add-Content config_site.h "#define PJ_HAS_SSL_SOCK 1"
Add-Content config_site.h "#define PJMEDIA_HAS_VIDEO 1"
Add-Content config_site.h "#define PJMEDIA_VIDEO_DEV_HAS_DSHOW 1"
Add-Content config_site.h "#define PJMEDIA_HAS_LIBYUV 1"
Add-Content config_site.h "#define PJMEDIA_VIDEO_DEV_HAS_SDL 1"
Add-Content config_site.h "#define PJMEDIA_HAS_VPX_CODEC 1"
shell: powershell
- name: check VsDevCmd.bat
run: dir "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
shell: cmd
- name: MSBuild
working-directory: .
run: |
set /P OPENSSL_DIR=<openssl_dir.txt
set /P LIBVPX_DIR=<libvpx_dir.txt
set /P LIBSDL_DIR=<libsdl_dir.txt
call "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
set INCLUDE=%INCLUDE%;%OPENSSL_DIR%\include;%LIBVPX_DIR%\include;%LIBSDL_DIR%\include\SDL
set LIB=%LIB%;%OPENSSL_DIR%\lib;%LIBVPX_DIR%\lib\x86;%LIBSDL_DIR%\lib\x86
msbuild pjproject-vs14.sln /p:PlatformToolset=v142 /p:Configuration=Release /p:Platform=win32 /p:UseEnv=true
shell: cmd
- name: unit tests
run: |
$env:OPENSSL_DIR = Get-Content .\openssl_dir.txt
$env:LIBVPX_DIR = Get-Content .\libvpx_dir.txt
$env:LIBSDL_DIR = Get-Content .\libsdl_dir.txt
$env:PATH+=";$env:OPENSSL_DIR\bin;$env:LIBVPX_DIR\bin\x86;$env:LIBSDL_DIR\bin\x86;"
cd pjlib/bin; ./pjlib-test-i386-Win32-vc14-Release.exe
cd ../../pjlib-util/bin; ./pjlib-util-test-i386-Win32-vc14-Release.exe
cd ../../pjmedia/bin/; ./pjmedia-test-i386-Win32-vc14-Release.exe
shell: powershell
build-windows-video-ffmpeg:
runs-on: windows-latest
steps:
- uses: actions/checkout@master
- name: get ffmpeg
run: Invoke-WebRequest -Uri "https://github.com/ShiftMediaProject/FFmpeg/releases/download/4.3.r96746/libffmpeg_4.3.r96746_msvc14_x86.zip" -Outfile "libffmpeg.zip"
shell: powershell
- name: expand ffmpeg
run: |
Expand-Archive -LiteralPath .\libffmpeg.zip -DestinationPath .\libffmpeg_build\; pwd
cd libffmpeg_build
Add-Content ..\libffmpeg_dir.txt $pwd.Path
shell: powershell
- name: check ffmpeg folder
run: |
set /P LIBFFMPEG_DIR=<libffmpeg_dir.txt
dir "%LIBFFMPEG_DIR%\include"
dir "%LIBFFMPEG_DIR%\lib\x86"
shell: cmd
- name: get libx264
run: Invoke-WebRequest -Uri "https://github.com/ShiftMediaProject/x264/releases/download/0.159.r2991/libx264_0.159.r2991_msvc14.zip" -Outfile ".\libx264.zip"
shell: powershell
- name: expand libx264
run: |
Expand-Archive -LiteralPath .\libx264.zip -DestinationPath .\libx264_build\; pwd
cd libx264_build
Add-Content ..\libx264_dir.txt $pwd.Path
shell: powershell
- name: check libx264 folder
run: |
set /P LIBX264_DIR=<libx264_dir.txt
dir "%LIBX264_DIR%\include"
dir "%LIBX264_DIR%\lib\x86"
shell: cmd
- name: get libsdl
run: Invoke-WebRequest -Uri "https://github.com/ShiftMediaProject/SDL/releases/download/release-2.0.9/libsdl_release-2.0.9_msvc14.zip" -Outfile ".\libsdl.zip"
shell: powershell
- name: expand libsdl
run: |
Expand-Archive -LiteralPath .\libsdl.zip -DestinationPath .\libsdl_build\; pwd
cd libsdl_build
Add-Content ..\libsdl_dir.txt $pwd.Path
shell: powershell
- name: check libsdl folder
run: |
set /P LIBSDL_DIR=<libsdl_dir.txt
dir "%LIBSDL_DIR%\include\SDL"
dir "%LIBSDL_DIR%\lib\x86"
shell: cmd
- name: config site
run: |
echo "" > pjlib\include\pj\config_site.h
Add-Content config_site.h "#define PJMEDIA_HAS_VIDEO 1"
Add-Content config_site.h "#define PJMEDIA_HAS_FFMPEG 1"
Add-Content config_site.h "#define PJMEDIA_HAS_FFMPEG_VID_CODEC 1"
Add-Content config_site.h "#define PJMEDIA_VIDEO_DEV_HAS_FFMPEG 1"
Add-Content config_site.h "#define PJMEDIA_VIDEO_DEV_HAS_SDL 1"
shell: powershell
- name: check VsDevCmd.bat
run: dir "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
shell: cmd
- name: MSBuild
working-directory: .
run: |
set /P LIBFFMPEG_DIR=<libffmpeg_dir.txt
set /P LIBX264_DIR=<libx264_dir.txt
set /P LIBSDL_DIR=<libsdl_dir.txt
call "%PROGRAMFILES(x86)%\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
set INCLUDE=%INCLUDE%;%LIBFFMPEG_DIR%\include;%LIBX264_DIR%\include;%LIBSDL_DIR%\include\SDL
set LIB=%LIB%;%LIBFFMPEG_DIR%\lib\x86;%LIBX264_DIR%\lib\x86;%LIBSDL_DIR%\lib\x86
msbuild pjproject-vs14.sln /p:PlatformToolset=v142 /p:Configuration=Release /p:Platform=win32 /p:UseEnv=true
shell: cmd

View file

@ -0,0 +1,66 @@
name: "CodeQL"
on:
push:
branches: [master]
pull_request:
# The branches below must be a subset of the branches above
branches: [master]
schedule:
- cron: '0 22 * * 2'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# Override automatic language detection by changing the below list
# Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
language: ['cpp', 'python']
# Learn more...
# https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
# - name: Autobuild
# uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
- run: |
./configure --disable-libyuv --disable-libwebrtc --disable-speex-codec --disable-speex-aec
make
mv tests/pjsua/inc_cfg.py tests/pjsua/inc_cfg.txt
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

69
pjproject-2.11.1/.gitignore vendored Normal file
View file

@ -0,0 +1,69 @@
pjlib/include/pj/config_site.h
lib/
bin/
output/
# VS stuff
*.ncb
*.suo
*.cache
*.resw
.vs/
.vscode/
**/build/**/*.vcproj.*.user
**/build/**/*.vcxproj.*.user
**/build/**/*.vcproj.user
**/build/**/*.vcxproj.user
**/Win32/Debug
**/x64/Debug
**/x86/Debug
UpgradeLog*.htm
# VS 2015 stuff
*.pdb
*.db
*.opendb
samples.log
# GNU stuff
config.log
config.status
build.mak
user.mak
cc-auto.mak
os-auto.mak
m_auto.h
os_auto.h
config_auto.h
sip_autoconf.h
*.depend
# Apple stuff
*.DS_Store
autom4te.cache
xcuserdata
pjsip-apps/src/pjsua/ios*/lib*.a
pjsip-apps/src/pjsua/ios/ipjsua.xcodeproj/project.xcworkspace/
pjsip-apps/src/pjsua/ios/ipjsua.xcworkspace/xcshareddata
pjsip-apps/src/pjsua/ios-swift/Libraries/
# SWIG Java/Android stuff
pjsip-apps/src/swig/java/android/app/src/main/java/org/pjsip/pjsua2/*.java
pjsip-apps/src/swig/java/android/app/src/main/java/org/pjsip/PjCamera*.java
pjsip-apps/src/swig/java/android/app/src/main/jniLibs/
# SWIG CSharp/Xamarin stuff
pjsip-apps/src/swig/csharp/pjsua2xamarin/
# SWIG Python stuff
pjsip-apps/src/swig/python/build/
pjsip-apps/src/swig/python/pjsua2.py
pjsip-apps/src/swig/python/pjsua2_wrap.*
# unit tests files
tests/pjsua/*.pyc
tests/pjsua/scripts-*/*.pyc
tests/pjsua/*.log
tests/pjsua/wavs/tmp*.wav
tests/pjsua/tools/cmp_wav
tests/pjsua/tools/cmp_wav.dSYM
tests/pjsua/logs

339
pjproject-2.11.1/COPYING Normal file
View file

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View file

@ -0,0 +1,48 @@
[Last update: 2007/02/18]
-= INTRO=-
This top level projects:
- pjlib: portability and basic framework library
- pjlib-util: lexical scanner, XML, STUN, MD5, DNS, etc.
- pjmedia: media framework and codecs
- pjsip: SIP stacks (core, UA layer, SIMPLE, etc.)
- pjsip-apps: SIP apps (pjsua, pjsip-perf)
-= COMPILING =-
On Windows:
- Visual Studio 6: open pjproject.dsw
- Visual Studio 8/2005: open pjproject-vs8.sln
- Embedded VisualC 4: open open pjsip-apps\build\wince-evc4\wince_demos.vcw
- Build pjsua
With Makefile:
- on top level dir (e.g. ~/pjproject)
- ./configure && make dep && make clean && make
Binaries will be in pjsip-apps/bin.
-= PYTHON MODULE =-
On Windows:
- Visual Studio 6: open pjsip-apps\build\pjsip_apps.dsw
- Build py_pjsua module
With GNU and Python:
- cd pjsip-apps/src/py_pjsua
- python setup.py install
One Python sample application is provided:
pjsip-apps/src/py_pjsua/pjsua_app.py
-= PORTING =-
- Just need to port pjlib.
- PJLIB doc has detailed info how to do this.
- Must pass pjlib-test!

151
pjproject-2.11.1/Makefile Normal file
View file

@ -0,0 +1,151 @@
include build.mak
include build/host-$(HOST_NAME).mak
-include user.mak
include version.mak
LIB_DIRS = pjlib/build pjlib-util/build pjnath/build third_party/build pjmedia/build pjsip/build
DIRS = $(LIB_DIRS) pjsip-apps/build $(EXTRA_DIRS)
ifdef MINSIZE
MAKE_FLAGS := MINSIZE=1
endif
all clean dep depend print:
for dir in $(DIRS); do \
if $(MAKE) $(MAKE_FLAGS) -C $$dir $@; then \
true; \
else \
exit 1; \
fi; \
done
distclean realclean:
for dir in $(DIRS); do \
if $(MAKE) $(MAKE_FLAGS) -C $$dir $@; then \
true; \
else \
exit 1; \
fi; \
done
$(HOST_RM) config.log
$(HOST_RM) config.status
lib:
for dir in $(LIB_DIRS); do \
if $(MAKE) $(MAKE_FLAGS) -C $$dir lib; then \
true; \
else \
exit 1; \
fi; \
done; \
.PHONY: lib doc
doc:
@if test \( ! "$(WWWDIR)" == "" \) -a \( ! -d $(WWWDIR)/pjlib/docs/html \) ; then \
echo 'Directory "$(WWWDIR)" does not look like a valid pjsip web directory'; \
exit 1; \
fi
for dir in $(DIRS); do \
if $(MAKE) $(MAKE_FLAGS) -C $$dir $@; then \
true; \
else \
exit 1; \
fi; \
done
LIBS = pjlib/lib/libpj-$(TARGET_NAME).a \
pjlib-util/lib/libpjlib-util-$(TARGET_NAME).a \
pjnath/lib/libpjnath-$(TARGET_NAME).a \
pjmedia/lib/libpjmedia-$(TARGET_NAME).a \
pjmedia/lib/libpjmedia-audiodev-$(TARGET_NAME).a \
pjmedia/lib/libpjmedia-codec-$(TARGET_NAME).a \
pjsip/lib/libpjsip-$(TARGET_NAME).a \
pjsip/lib/libpjsip-ua-$(TARGET_NAME).a \
pjsip/lib/libpjsip-simple-$(TARGET_NAME).a \
pjsip/lib/libpjsua-$(TARGET_NAME).a
BINS = pjsip-apps/bin/pjsua-$(TARGET_NAME)$(HOST_EXE)
size:
@echo -n 'Date: '
@date
@echo
@for lib in $(LIBS); do \
echo "$$lib:"; \
size -t $$lib | awk '{print $$1 "\t" $$2 "\t" $$3 "\t" $$6}'; \
echo; \
done
@echo
@for bin in $(BINS); do \
echo "size $$bin:"; \
size $$bin; \
done
#dos2unix:
# for f in `find . | egrep '(mak|h|c|S|s|Makefile)$$'`; do \
# dos2unix "$$f" > dos2unix.tmp; \
# cp dos2unix.tmp "$$f"; \
# done
# rm -f dos2unix.tmp
xhdrid:
for f in `find . | egrep '\.(h|c|S|s|cpp|hpp)$$'`; do \
echo Processing $$f...; \
cat $$f | sed 's/.*\$$Author\$$/ */' > /tmp/id; \
cp /tmp/id $$f; \
done
selftest: pjlib-test pjlib-util-test pjnath-test pjmedia-test pjsip-test pjsua-test
pjlib-test: pjlib/bin/pjlib-test-$(TARGET_NAME)
cd pjlib/build && ../bin/pjlib-test-$(TARGET_NAME)
pjlib-util-test: pjlib-util/bin/pjlib-util-test-$(TARGET_NAME)
cd pjlib-util/build && ../bin/pjlib-util-test-$(TARGET_NAME)
pjnath-test: pjnath/bin/pjnath-test-$(TARGET_NAME)
cd pjnath/build && ../bin/pjnath-test-$(TARGET_NAME)
pjmedia-test: pjmedia/bin/pjmedia-test-$(TARGET_NAME)
cd pjmedia/build && ../bin/pjmedia-test-$(TARGET_NAME)
pjsip-test: pjsip/bin/pjsip-test-$(TARGET_NAME)
cd pjsip/build && ../bin/pjsip-test-$(TARGET_NAME)
pjsua-test: cmp_wav
cd tests/pjsua && python runall.py
cmp_wav:
cd tests/pjsua/tools && make
install:
mkdir -p $(DESTDIR)$(libdir)/
cp -af $(APP_LIB_FILES) $(DESTDIR)$(libdir)/
if [ "$(PJ_EXCLUDE_PJSUA2)x" = "x" ] ; then \
cp -af $(PJ_DIR)/pjsip/lib/libpjsua2-$(LIB_SUFFIX) $(DESTDIR)$(libdir)/; \
fi
mkdir -p $(DESTDIR)$(includedir)/
for d in pjlib pjlib-util pjnath pjmedia pjsip; do \
cp -RLf $$d/include/* $(DESTDIR)$(includedir)/; \
done
mkdir -p $(DESTDIR)$(libdir)/pkgconfig
sed -e "s!@PREFIX@!$(prefix)!" libpjproject.pc.in | \
sed -e "s!@INCLUDEDIR@!$(includedir)!" | \
sed -e "s!@LIBDIR@!$(libdir)!" | \
sed -e "s/@PJ_VERSION@/$(PJ_VERSION)/" | \
sed -e "s!@PJ_INSTALL_LDFLAGS@!$(PJ_INSTALL_LDFLAGS)!" | \
sed -e "s!@PJ_INSTALL_LDFLAGS_PRIVATE@!$(PJ_INSTALL_LDFLAGS_PRIVATE)!" | \
sed -e "s!@PJ_INSTALL_CFLAGS@!$(PJ_INSTALL_CFLAGS)!" > $(DESTDIR)$(libdir)/pkgconfig/libpjproject.pc
uninstall:
$(RM) $(DESTDIR)$(libdir)/pkgconfig/libpjproject.pc
rmdir $(DESTDIR)$(libdir)/pkgconfig 2> /dev/null || true
for d in pjlib pjlib-util pjnath pjmedia pjsip; do \
for f in $$d/include/*; do \
$(RM) -r "$(DESTDIR)$(includedir)/`basename $$f`"; \
done; \
done
rmdir $(DESTDIR)$(includedir) 2> /dev/null || true
$(RM) $(addprefix $(DESTDIR)$(libdir)/,$(notdir $(APP_LIBXX_FILES)))
rmdir $(DESTDIR)$(libdir) 2> /dev/null || true

View file

@ -0,0 +1,87 @@
Build Instructions for PJLIB/PJMEDIA/PJSIP RTEMS Port
The RTEMS port uses the POSIX abstraction layer at the moment, and has been
tested with RTEMS 4.6 on i386 target.
Building RTEMS
---------------
I use RTEMS 4.6 on a cygwin host with i386/pc386 as target, but I think it
should work with different RTEMS versions/hosts/targets.
RTEMS was built with the following commands:
$ /opt/src/rtems-4.6.6/configure --enable-cxx --enable-posix --enable-networking --enable-rdbg --enable-tests --enable-rtemsbsp=pc386 --target=i386-rtems
$ make
$ make install
Supported Targets
-----------------
At the moment, pjlib supports i386 and mpc860 CPU target. For other targets,
you would need to create/tweak the appropriate "m-xxx.mak" in "build" directory
and the corresponding "m_xxx.h" header file in "pj/compat" directory.
Please refer to pjlib porting guide about how to port PJLIB to new CPU target.
Building PJLIB/PJMEDIA/PJSIP
----------------------------
Use the following steps to build the libraries:
1. Set RTEMS_LIBRARY_PATH environment variable to point to your BSP directory
(which is <RTEMS INSTALLATION POINT>/<BOARD SUPPORT PACKAGE>).
For example (with sh):
$ export RTEMS_LIBRARY_PATH=/opt/rtems-4.6/i386-rtems/pc386
2. Unfortunately pjproject's configure script is unable to create "build.mak"
for cross compilation (but this may change in the future), so we need to
create "build.mak" manually.
The file "README-configure" has some info about the variables in "build.mak".
For example, the "build.mak" for i386 target:
export MACHINE_NAME := i386
export OS_NAME := rtems
export HOST_NAME := mingw
export CC_NAME := gcc
export TARGET_NAME := i386-rtems
export CROSS_COMPILE := i386-rtems-
3. Put additional CFLAGS or LDFLAGS that are specific to your target in
"user.mak".
For example, my "user.mak" looks like this:
export CFLAGS +=
export LDFLAGS += -Wl,-Ttext,0x00100000 -Wl,--defsym -Wl,HeapSize=0x400000
4. Build the libraries:
$ make dep && make distclean && make
5. That should be it. The libraries should be in "lib" directory and
applications in "bin" directory.
Acknowledgements
----------------
Many thanks for Phil Torre <ptorre at zetron dot com>, who did most of the
initial porting and testing with pjlib etc. All credits go to him.

968
pjproject-2.11.1/README.txt Normal file
View file

@ -0,0 +1,968 @@
Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation, either version 2 of the License, or (at your option)
any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program. If not, see http://www.gnu.org/licenses/.
Getting Started: Building and Using PJSIP and PJMEDIA
[Last Update: $Date: 2007-02-02 20:42:44 +0000 (Fri, 02 Feb 2007) $]
Print Friendly Page
_________________________________________________________________
This article describes how to download, customize, build, and use the open
source PJSIP and PJMEDIA SIP and media stack. The online (and HTML) version
of this file can be downloaded from http://www.pjsip.org/using.htm
Quick Info
_________________________________________________________________
Building with GNU tools (Linux, *BSD, MacOS X, mingw, etc.)
Generally these should be all that are needed to build the libraries,
applications, and samples:
$ ./configure
$ make dep && make clean && make
Building Win32 Target with Microsoft Visual Studio
Generally we can just do these steps:
1. Visual Studio 6: open pjproject.dsw workspace,
2. Visual Studio 2005: open pjproject-vs8.sln solution,
3. Create an empty pjlib/include/pj/config_site.h, and
4. build the pjsua application.
Building for Windows Mobile
Generally these are all that are needed:
1. Open pjsip-apps/build/wince-evc4/wince_demos.vcw EVC4 workspace,
2. Create an empty pjlib/include/pj/config_site.h, and
3. build the pjsua_wince application.
Invoking Older Build System (e.g. for RTEMS)
Generally these should be all that are needed to build the libraries,
applications, and samples:
$ ./configure-legacy
$ make dep && make clean && make
Locating Output Binaries/Libraries
Libraries will be put in lib directory, and binaries will be put in
bin directory, under each projects.
Running the Applications
After successful build, you can try running pjsua application on
pjsip-apps/bin directory. PJSUA manual can be found in
http://www.pjsip.org/pjsua.htm page.
Table of Contents:
_________________________________________________________________
1. Getting the Source Distribution
1.1 Getting the Release tarball
1.2 Getting from Subversion trunk
1.3 Source Directories Layout
2. Build Preparation
2.1 config_site.h file
2.2 Disk Space Requirements
3. Building Linux, *nix, *BSD, and MacOS X Targets with GNU Build
Systems
3.1 Supported Targets
3.2 Requirements
3.3 Running configure
3.4 Running make
3.5 Cross Compilation
3.6 Build Customizations
4. Building for Windows Targets with Microsoft Visual Studio
4.1 Requirements
4.2 Building the Projects
4.3 Debugging the Sample Application
5. Building for Windows Mobile Targets (Windows CE/WinCE/PDA/SmartPhone)
5.1 Requirements
5.2 Building the Projects
6. Older PJLIB Build System for Non-Autoconf Targets (e.g. RTEMS)
6.1 Supported Targets
6.2 Invoking the Build System
7. Running the Applications
7.1 pjsua
7.2 Sample Applications
7.3 pjlib-test
7.4 pjsip-test
8. Using PJPROJECT with Applications
Appendix I: Common Problems/Frequently Asked Question (FAQ)
I.1 fatal error C1083: Cannot open include file: 'pj/config_site.h':
No such file or directory
1. Getting the Source Code Distribution
_________________________________________________________________
All libraries (PJLIB, PJLIB-UTIL, PJSIP, PJMEDIA, and PJMEDIA-CODEC) are
currently distributed under a single source tree, collectively named as
PJPROJECT or just PJ libraries. These libraries can be obtained by either
downloading the release tarball or getting them from the Subversion trunk.
1.1 Getting the Release tarball
_________________________________________________________________
Getting the released tarball is a convenient way to obtain stable version of
PJPROJECT. The tarball may not contain the latest features or bug-fixes, but
normally it is considered more stable as each will be tested more rigorously
before released.
The latest released tarball can be downloaded from the
http://www.pjsip.org/download.htm.
1.2 Getting from Subversion trunk
_________________________________________________________________
PJPROJECT Subversion repository will always contain the latest/most
up-to-date version of the sources. Normally the Subversion repository is
always kept in a "good" state. However, there's always a chance that things
break and the tree doesn't build correctly (particularly for the
"not-so-popular" targets), so please consult the mailing list should there
be any problems.
Using Subversion also has benefits of keeping the local copy of the source
up to date with the main PJ source tree and to easily track the changes made
to the local copy, if any.
What is Subversion
Subversion (SVN) is Open Source version control system similar to CVS.
Subversion homepage is in http://subversion.tigris.org/
Getting Subversion Client
A Subversion (SVN) client is needed to download the PJ source files from
pjsip.org SVN tree. SVN client binaries can be downloaded from
http://subversion.tigris.org/, and the program should be available for
Windows, Linux, MacOS X, and many more platforms.
Getting the Source for The First Time
Once Subversion client is installed, we can use these commands to initially
retrieve the latest sources from the Subversion trunk:
$ svn co http://svn.pjproject.net/repos/pjproject/trunk pjproject
$ cd pjproject
Keeping The Local Copy Up-to-Date
Once sources have been downloaded, we can keep the local copy up to date by
periodically synchronizing the local source with the latest revision from
the PJ's Subversion trunk. The mailing list provides best source of
information about the availability of new updates in the trunk.
To update the local copy with the latest changes in the main PJ's
repository:
$ cd pjproject
$ svn update
Tracking Local and Remote Changes
To see what files have been changed locally:
$ cd pjproject
$ svn status
The above command only compares local file against the original local copy,
so it doesn't require Internet connection while performing the check.
To see both what files have been changed locally and what files have been
updated in the PJ's Subversion repository:
$ cd pjproject
$ svn status -u
Note that this command requires active Internet connection to query the
status of PJPROJECT's source repository.
1.3 Source Directories Layout
_________________________________________________________________
Top-Level Directory Layout
The top-level directories (denoted as $TOP here) in the source distribution
contains the following sub-directories:
$TOP/build
Contains makefiles that are common for all projects.
$TOP/pjlib
Contains header and source files of PJLIB. PJLIB is the base
portability and framework library which is used by all other
libraries
$TOP/pjlib-util
Contains PJLIB-UTIL header and source files. PJLIB-UTIL is an
auxiliary library that contains utility functions such as scanner,
XML, STUN, MD5 algorithm, getopt() implementation, etc.
$TOP/pjmedia
Contains PJMEDIA and PJMEDIA-CODEC header and source files. The
sources of various codecs (such as GSM, Speex, and iLBC) can be found
under this directory.
$TOP/pjsip
Contains PJSIP header and source files.
$TOP/pjsip-apps
Contains source code for PJSUA and various sample applications.
Individual Directory Inside Each Project
Each library directory further contains these sub-directories:
bin
Contains binaries produced by the build process.
build
Contains build scripts/makefiles, project files, project workspace,
etc. to build the project. In particular, it contains one Makefile
file to build the project with GNU build systems, and a *.dsw
workspace file to build the library with Microsoft Visual Studio 6 or
later.
build/output
The build/output directory contains the object files and other files
generated by the build process. To support building multiple targets
with a single source tree, each build target will occupy a different
subdirectory under this directory.
build/wince-evc4
This directory contains the project/workspace files to build Windows
CE/WinCE version of the project using Microsoft Embedded Visual C++
4.
build/wince-evc4/output
This directory contains the library, executable, and object files
generated by Windows Mobile build process.
docs
Contains Doxygen configuration file (doxygen.cfg) to generate online
documentation from the source files. The output documentation will be
put in this directory as well (for example, docs/html directory for
the HTML files).
(to generate Doxygen documentation from the source tree, just run
"doxygen docs/doxygen.cfg" in the individual project directory. The
generated files will reside in docs directory).
include
Contains the header files for the project.
lib
Contains libraries produced by the build process.
src
Contains the source files of the project.
2. Build Preparation
_________________________________________________________________
2.1 Create config_site.h file
_________________________________________________________________
Before source files can be built, the pjlib/include/pj/config_site.h file
must be created (it can just be an empty file).
Note:
When the Makefile based build system is used, this process is taken
care by the Makefiles. But when non-Makefile based build system (such
as Visual Studio) is used, the config_site.h file must be created
manually.
What is config_site.h File
The pjlib/include/pj/config_site.h contains local customizations to the
libraries.
All customizations should be put in this file instead of modifying PJ's
files, because if PJ's files get modified, then those modified files will
not be updated the next time the source is synchronized. Or in other case,
the local modification may be overwritten with the fresh copy from the SVN.
Putting the local customization to the config_site.h solves this problem,
because this file is not included in the version control, so it will never
be overwritten by "svn update" command.
Please find list of configuration macros that can be overriden from these
files:
* PJLIB Configuration (the pjlib/config.h file)
* PJLIB-UTIL Configuration (the pjlib-util/config.h file)
* PJMEDIA Configuration (the pjmedia/config.h file)
* PJSIP Configuration (the pjsip/sip_config.h file)
A sample config_site.h file is also available in
pjlib/include/config_site_sample.h.
Creating config_site.h file
The simplest way is just to create an empty file, to use whetever default
values set by the libraries.
Another way to create the config_site.h file is to write something like the
following:
// Uncomment to get minimum footprint (suitable for 1-2 concurrent calls
only)
//#define PJ_CONFIG_MINIMAL_SIZE
// Uncomment to get maximum performance
//#define PJ_CONFIG_MAXIMUM_SPEED
#include <pj/config_site_sample.h>
2.2 Disk Space Requirements
_________________________________________________________________
The building process needs:
about 50-60 MB of disk space to store the uncompressed source files, and
* about 30-50 MB of additional space for building each target
(Visual Studio Debug and Release are considered as separate targets)
3. Building Linux, *nix, *BSD, and MacOS X Targets with GNU Build Systems
_________________________________________________________________
3.1 Supported Targets
_________________________________________________________________
The new, autoconf based GNU build system can be used to build the
libraries/applications for the following targets:
* Linux/uC-Linux (i386, Opteron, Itanium, MIPS, PowerPC, etc.),
* MacOS X (PowerPC),
* mingw (i386),
* FreeBSD and maybe other BSD's (i386, Opteron, etc.),
* RTEMS with cross compilation (ARM, powerpc),
* Embox RTOS (i386, ARM including STM32),
* etc.
3.2 Requirements
_________________________________________________________________
In order to use PJ's GNU build system, these typical GNU tools are needed:
* GNU make (other make will not work),
* GNU binutils for the target, and
* GNU gcc for the target.
* OpenSSL header files/libraries (optional) if TLS support is wanted.
In addition, the appropriate "SDK" must be installed for the particular
target (this could just be a libc and the appropriate system abstraction
library such as Posix).
The build system is known to work on the following hosts:
* Linux, many types of distributions.
* MacOS X 10.2
* mingw (Win2K, XP)
* FreeBSD (must use gmake instead of make)
Building Win32 applications with Cygwin is currently not supported by the
autoconf script (there is some Windows header conflicts), but one can still
use the old configure script by calling ./configure-legacy. More over,
cross-compilations might also work with Cygwin.
3.3 Running configure
_________________________________________________________________
Using Default Settings
Run "./configure" without any options to let the script detect the
appropriate settings for the host:
$ cd pjproject
$ ./configure
...
Notes:
The default settings build the libraries in "debug" mode
(active assert()), with default CFLAGS set to "-O2". To change
the default CFLAGS, we can use the usual "./configure CFLAGS='-g'"
construct. To build in "release" mode, and deactivate assert(),
we can use "./configure CFLAGS='-DNDEBUG'".
Features Customization
With the new autoconf based build system, most configuration/customization
can be specified as configure arguments. The list of customizable features
can be viewed by running "./configure --help" command:
$ cd pjproject
$ ./configure --help
...
Optional Features:
--enable-epoll Use epoll on Linux instead of select
--disable-floating-point Disable floating point where possible
--disable-sound Exclude sound (i.e. use null sound)
--disable-small-filter Exclude small filter in resampling
--disable-large-filter Exclude large filter in resampling
--disable-g711-plc Exclude G.711 Annex A PLC
--disable-speex-aec Exclude Speex Acoustic Echo Canceller/AEC
--disable-g711-codec Exclude G.711 codecs from the build
--disable-l16-codec Exclude Linear/L16 codec family from the build
--disable-gsm-codec Exclude GSM codec in the build
--disable-speex-codec Exclude Speex codecs in the build
--disable-ilbc-codec Exclude iLBC codec in the build
--disable-tls Force excluding TLS support (default is autodetected based on
OpenSSL availability)
...
Configuring Debug Version and Other Customizations
The configure script accepts standard customization, which details can be
obtained by executing ./configure --help.
Below is an example of specifying CFLAGS in configure:
$ ./configure CFLAGS="-O3 -DNDEBUG -msoft-float -fno-builtin"
...
Configuring TLS Support
By default, TLS support is configured based on the availability of OpenSSL
header files and libraries. If OpenSSL is available at the default include
and library path locations, TLS will be enabled by the configure script.
You can explicitly disable TLS support by giving the configure script
--disable-tls option.
3.4 Cross Compilation
_________________________________________________________________
Cross compilation should be supported, using the usual autoconf syntax:
$ ./configure --host=arm-elf-linux
...
Since cross-compilation is not tested as often as the "normal" build, please
watch for the ./configure output for incorrect settings (well ideally this
should be done for normal build too).
Please refer to Porting Guide for further information about porting PJ
software.
3.5 Running make
_________________________________________________________________
Once the configure script completes successfully, start the build process by
invoking these commands:
$ cd pjproject
$ make dep
$ make
Note:
gmake may need to be specified instead of make for some hosts, to
invoke GNU make instead of the native make.
Description of all make targets supported by the Makefile's:
all
The default (or first) target to build the libraries/binaries.
dep, depend
Build dependencies rule from the source files.
clean
Clean the object files for current target, but keep the output
library/binary files intact.
distclean, realclean
Remove all generated files (object, libraries, binaries, and
dependency files) for current target.
Note:
make can be invoked either in the top-level PJ directory or in build
directory under each project to build only the particular project.
3.6 Build Customizations
_________________________________________________________________
Build features can be customized by specifying the options when running
./configure as described in Running Configure above.
In addition, additional CFLAGS and LDFLAGS options can be put in user.mak
file in PJ root directory (this file may need to be created if it doesn't
exist). Below is a sample of user.mak file contents:
export CFLAGS += -msoft-float -fno-builtin
export LDFLAGS +=
4. Building for Windows Targets with Microsoft Visual Studio
_________________________________________________________________
4.1 Requirements
_________________________________________________________________
The Microsoft Visual Studio based project files can be used with one of the
following:
* Microsoft Visual Studio 6,
* Microsoft Visual Studio .NET 2002,
* Microsoft Visual Studio .NET 2003,
* Microsoft Visual C++ 2005 (including Express edition),
In addition, the following SDK's are needed:
* Platform SDK, if you're using Visual Studio 2005 Express (tested with
Platform SDK for Windows Server 2003 SP1),
* DirectX SDK (tested with DirectX version 8 and 9),
* OpenSSL development kit would be needed if TLS support is wanted, or
otherwise this is optional.
For the host, the following are required:
* Windows NT, 2000, XP, 2003, or later ,
* Windows 95/98 should work too, but this has not been tested,
* Sufficient amount of RAM for the build process (at least 256MB).
Enabling TLS Support with OpenSSL
If TLS support is wanted, then OpenSSL SDK must be installed in the
development host.
To install OpenSSL SDK from the Win32 binary distribution:
1. Install OpenSSL SDK to any folder (e.g. C:\OpenSSL)
2. Add OpenSSL DLL location to the system PATH.
3. Add OpenSSL include path to Visual Studio includes search directory.
Make sure that OpenSSL header files can be accessed from the program
with #include <openssl/ssl.h> construct.
4. Add OpenSSL library path to Visual Studio library search directory. Make
sure the following libraries are accessible:
+ For Debug build: libeay32MTd and ssleay32MTd.
+ For Release build: libeay32MT and ssleay32MT.
Then to enable TLS transport support in PJSIP, just add
#define PJSIP_HAS_TLS_TRANSPORT 1
in your pj/config_site.h. When this macro is defined, OpenSSL libraries will
be automatically linked to the application via the #pragma construct in
sip_transport_tls_ossl.c file.
4.2 Building the Projects
_________________________________________________________________
Follow the steps below to build the libraries/application using Visual
Studio:
1. For Visual Studio 6: open pjproject.dsw workspace file.
2. For Visual Studio 8 (VS 2005): open pjproject-vs8.sln solution file.
3. Set pjsua as Active Project.
4. Select Debug or Release build as appropriate.
5. Build the project. This will build pjsua application and all libraries
needed by pjsua.
6. After successful build, the pjsua application will be placed in
pjsip-apps/bin directory, and the libraries in lib directory under each
projects.
To build the samples:
1. (Still using the same workspace)
2. Set samples project as Active Project
3. Select Debug or Release build as appropriate.
4. Build the project. This will build all sample applications and all
libraries needed.
5. After successful build, the sample applications will be placed in
pjsip-apps/bin/samples directory, and the libraries in lib directory
under each projects.
4.3 Debugging the Sample Application
_________________________________________________________________
The sample applications are build using Samples.mak makefile, therefore it
is difficult to setup debugging session in Visual Studio for these
applications. To solve this issue, the pjsip_apps workspace contain one
project called sample_debug which can be used to debug the sample
application.
To setup debugging using sample_debug project:
1. (Still using pjsip_apps workspace)
2. Set sample_debug project as Active Project
3. Edit debug.c file inside this project.
4. Modify the #include line to include the particular sample application to
debug
5. Select Debug build.
6. Build and debug the project.
5. Building for Windows Mobile Targets (Windows CE/WinCE/PDA/SmartPhone)
_________________________________________________________________
PJ supports building SIP and media stacks and applications for Windows
Mobile targets. A very simple WinCE SIP user agent (with media) application
is provided just as proof of concept that the port works.
5.1 Requirements
_________________________________________________________________
One of the following development tools is needed to build SIP and media
components for Windows Mobile:
* Microsoft Embedded Visual C++ 4 with appropriate SDKs, or
* Microsoft Visual Studio 2005 for Windows Mobile with appropriate SDKs.
Note that VS2005 is not directly supported (as I don't have the tools), but
it is reported to work (I assumed that VS2005 for Windows Mobile can import
EVC4 workspace file).
5.2 Building the Projects
_________________________________________________________________
The Windows Mobile port is included in the main source distribution. Please
follow the following steps to build the WinCE libraries and sample
application:
1. Open pjsip-apps/build/wince-evc4/wince_demos.vcw workspace file. If
later version of EVC4 is being used, this may cause the workspace file
to be converted to the appropriate format.
2. Select pjsua_wince project as the Active Project.
3. Select the appropriate SDK (for example Pocket PC 2003 SDK or SmartPhone
2003 SDK)
4. Select the appropriate configuration (for example, Win32 (WCE Emulator
Debug) to debug the program in emulator, or other configurations such as
ARMV4, MIPS, SH3, SH4, or whatever suitable for the device)
5. Select the appropriate device (Emulator or the actual Device).
6. Build the project. This will build the sample WinCE application and all
libraries (SIP, Media, etc.) needed by this application.
Notes
+ If the config_site.h includes config_site_sample.h file, then
there are certain configuration in config_site_sample.h that get
activated for Windows CE targets. Please make sure that these
configurations are suitable for the application.
+ The libraries, binaries and object files produced by the build
process are located under build/wince-evc4/output directory of each
projects.
6. Older PJLIB Build System for Non-Autoconf Targets (e.g. RTEMS)
_________________________________________________________________
The old PJLIB build system can still be used for building PJ libraries, for
example for RTEMS target. Please see the Porting PJLIB page in PJLIB
Reference documentation for information on how to support new target using
this build system.
6.1 Supported Targets
_________________________________________________________________
The older build system supports building PJ libraries for the following
operating systems:
* RTEMS
* Linux
* MacOS X
* Cygwin and Mingw
And it supports the following target architectures:
* i386, x86_64, itanium
* ARM
* mips
* powerpc
* mpc860
* etc.
For other targets, specific files need to be added to the build system,
please see the Porting PJLIB page in PJLIB Reference documentation for
details.
6.2 Invoking the Build System
_________________________________________________________________
To invoke the older build system, run the following:
$ cd pjproject
$ ./configure-legacy
$ make dep && make clean && make
7. Running the Applications
_________________________________________________________________
Upon successful build, the output libraries (PJLIB, PJLIB-UTIL, PJMEDIA,
PJSIP, etc.) are put under ./lib sub-directory under each project directory.
In addition, some applications may also be built, and such applications will
be put in ./bin sub-directory under each project directory.
7.1 pjsua
_________________________________________________________________
pjsua is the reference implementation for both PJSIP and PJMEDIA stack, and
is the main target of the build system. Upon successful build, pjsua
application will be put in pjsip-apps/bin directory.
pjsua manual can be found in pjsua Manual Page.
7.2 Sample Applications
_________________________________________________________________
Sample applications will be built with the Makefile build system. For Visual
Studio, you have to build the samples manually by selecting and building the
Samples project inside pjsip-apps/build/pjsip_apps.dsw project workspace.
Upon successful build, the sample applications are put in
pjsip-apps/bin/samples directory.
The sample applications are described in PJMEDIA Samples Page and
PJSIP Samples Page in the website.
7.3 pjlib-test
_________________________________________________________________
pjlib-test contains comprehensive tests for testing PJLIB functionality.
This application will only be built when the Makefile build system is used;
with Visual Studio, one has to open pjlib.dsw project in pjlib/build
directory to build this application.
If you're porting PJLIB to new target, it is recommended to run this
application to make sure that all functionalities works as expected.
7.4 pjsip-test
_________________________________________________________________
pjsip-test contains codes for testing various SIP functionalities in PJSIP
and also to benchmark static performance metrics such as message parsing per
second.
8. Using PJPROJECT with Applications
_________________________________________________________________
Regardless of the build system being used, the following tasks are normally
needed to be done in order to build application to use PJSIP and PJMEDIA:
1. Put these include directories in the include search path:
+ pjlib/include
+ pjlib-util/include
+ pjmedia/include
+ pjsip/include
2. Put these library directories in the library search path:
+ pjlib/lib
+ pjlib-util/lib
+ pjmedia/lib
+ pjsip/lib
3. Include the relevant PJ header files in the application source file. For
example, using these would include ALL APIs exported by PJ:
#include <pjlib.h>
#include <pjlib-util.h>
#include <pjsip.h>
#include <pjsip_ua.h>
#include <pjsip_simple.h>
#include <pjsua.h>
#include <pjmedia.h>
#include <pjmedia-codec.h>
(Note: the documentation of the relevant libraries should say which
header files should be included to get the declaration of the APIs).
4. Declare the OS macros.
+ For Windows applications built with Visual Studio, we need to
declare PJ_WIN32=1 macro in the project settings (declaring the
macro in the source file may not be sufficient).
+ For Windows Mobile applications build with Visual C++, we need to
declare PJ_WIN32_WINCE=1 macro in the project settings.
+ For GNU build system/autoconf based build system, we need to
declare PJ_AUTOCONF=1 macro when compiling the applications.
(Note: the old PJ build system requires declaring the target processor
with PJ_M_XXX=1 macro, but this has been made obsolete. The target
processor will be detected from compiler's predefined macro by
pjlib/config.h file).
5. Link with the appropriate PJ libraries. The following libraries will
need to be included in the library link specifications:
pjlib
Base library used by all libraries.
pjlib-util
Auxiliary library containing scanner, XML, STUN, MD5, getopt,
etc, used by the SIP and media stack.
pjsip
SIP core stack library.
pjsip-ua
SIP user agent library containing INVITE session, call
transfer, client registration, etc.
pjsip-simple
SIP SIMPLE library for base event framework, presence, instant
messaging, etc.
pjsua
High level SIP UA library, combining SIP and media stack into
high-level easy to use API.
pjmedia
The media framework.
pjmedia-codec
Container library for various codecs such as GSM, Speex, and
iLBC.
Note: the actual library names will be appended with the target name and the
build configuration. For example:
For Visual Studio builds
The actual library names will look like
pjlib-i386-win32-vc6-debug.lib,
pjlib-i386-win32-vc6-release.lib, etc., depending on whether we
are building the Debug or Release version of the library.
An easier way to link with the libraries is to include PJ
project files in the workspace, and to configure project
dependencies so that the application depends on the PJ
libraries. This way, we don't need to manually add each PJ
libraries to the input library file specification, since VS
will automatically link the dependency libraries with the
application.
For Windows Mobile builds
Unfortunately the PJ libraries built for Windows Mobile will
not be placed in the usual lib directory, but rather under the
output directory under build/wince-evc4 project directory.
An easier way to link with the libraries is to include PJ
project files in the workspace, and to configure project
dependencies so that the application depends on the PJ
libraries. This way, we don't need to manually add each PJ
libraries to the input library file specification, since VS
will automatically link the dependency libraries with the
application.
For GNU builds
Application's Makefile can get the PJ library suffix by
including PJ's build.mak file from the root PJ directory (the
suffix is contained in TARGET_NAME variable). For example, to
link with PJLIB and PJMEDIA, we can use this syntax in the
LDFLAGS: "-lpj-$(TARGET_NAME) -lpjmedia-$(TARGET_NAME)"
6. Link with system spesific libraries:
Windows
Add (among other things): wsock32.lib, ws2_32.lib, ole32.lib,
dsound.lib
Linux, *nix, *BSD
Add (among other things): '-lpthread -lm' (at least).
MacOS X
Add (among other things): '-framework CoreAudio -lpthread -lm'.
Appendix I: Common Problems/Frequently Asked Question (FAQ)
_________________________________________________________________
I.1 fatal error C1083: Cannot open include file: 'pj/config_site.h': No such
file or directory
This error normally occurs when the config_site.h file has not been created.
This file needs to be created manually (an empty file is sufficient). Please
follow the Build Preparation instructions above to create this file.
_________________________________________________________________
Feedback:
Thanks for using PJ libraries and for reading this document. Please
send feedbacks or general comments to <bennylp at pjsip dot org>.

10583
pjproject-2.11.1/aconfigure Executable file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,44 @@
#
# This is a utility make file that is used to generate BB10 config settings
# from current build settings. The stdout output of this make file can be
# saved to a .pri file which then can be included in app's .pro file.
#
# This make file is invoked by configure-bb10 script to generate pjsip.pri
# file.
#
include build.mak
# Generate library list (the "-lxxx" options) from list of linked libraries.
PJ_BB_LIBS = $(filter-out -lm -lsocket, $(APP_LDLIBS))
# This used to generate the library path list (the "-Lxxx" options)
# We replace the path with "$$PJ_DIR"
PJ_BB_LDFLAGS = $(subst $(PJDIR),\$$\$$PJ_DIR,$(APP_LDFLAGS))
all:
@echo PJ_DIR = $(PJDIR)
@echo
@echo 'DEFINES += PJ_AUTOCONF'
@echo
@echo 'PJ_INCLUDEPATH += $$$$quote($$$$PJ_DIR/pjlib/include)'
@echo 'PJ_INCLUDEPATH += $$$$quote($$$$PJ_DIR/pjmedia/include)'
@echo 'PJ_INCLUDEPATH += $$$$quote($$$$PJ_DIR/pjnath/include)'
@echo 'PJ_INCLUDEPATH += $$$$quote($$$$PJ_DIR/pjlib-util/include)'
@echo 'PJ_INCLUDEPATH += $$$$quote($$$$PJ_DIR/pjsip/include)'
@echo
@for token in $(PJ_BB_LDFLAGS); do \
if echo $$token | grep -- '-L' >> /dev/null; then \
echo "PJ_LIBPATH += \$$\$$quote($$token)"; \
fi; \
done
@echo
@for token in $(PJ_BB_LIBS); do \
echo PJ_LIBS += $$token; \
done
@echo
@echo 'INCLUDEPATH += $$$$PJ_INCLUDEPATH'
@echo 'LIBS += $$$$PJ_LIBPATH'
@echo 'LIBS += $$$$PJ_LIBS'
@echo 'LIBS += -lOpenAL -lalut -laudio_manager -lsocket -lasound -lbbsystem -lm'

View file

@ -0,0 +1,339 @@
export PJDIR := @ac_pjdir@
include $(PJDIR)/version.mak
export PJ_DIR := $(PJDIR)
# @configure_input@
export MACHINE_NAME := auto
export OS_NAME := auto
export HOST_NAME := unix
export CC_NAME := gcc
export TARGET_ARCH := @ac_target_arch@
export TARGET_NAME := @target@
export CROSS_COMPILE := @ac_cross_compile@
export LINUX_POLL := @ac_linux_poll@
export SHLIB_SUFFIX := @ac_shlib_suffix@
export prefix := @prefix@
export exec_prefix := @exec_prefix@
export includedir := @includedir@
export libdir := @libdir@
LIB_SUFFIX := $(TARGET_NAME).a
ifeq (@ac_shared_libraries@,1)
export PJ_SHARED_LIBRARIES := 1
endif
ifeq (@ac_no_pjsua2@,1)
export PJ_EXCLUDE_PJSUA2 := 1
endif
ifndef EXCLUDE_APP
ifeq ($(findstring android,$(TARGET_NAME)),)
export EXCLUDE_APP := 0
else
export EXCLUDE_APP := 1
endif
endif
# Determine which party libraries to use
export APP_THIRD_PARTY_EXT :=
export APP_THIRD_PARTY_LIBS :=
export APP_THIRD_PARTY_LIB_FILES :=
ifneq (@ac_external_srtp@,0)
# External SRTP library
APP_THIRD_PARTY_EXT += -l@ac_external_srtp_lib@
else
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libsrtp-$(LIB_SUFFIX)
ifeq ($(PJ_SHARED_LIBRARIES),)
APP_THIRD_PARTY_LIBS += -lsrtp-$(TARGET_NAME)
else
APP_THIRD_PARTY_LIBS += -lsrtp
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libsrtp.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/third_party/lib/libsrtp.$(SHLIB_SUFFIX)
endif
endif
ifeq (@ac_pjmedia_resample@,libresample)
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libresample-$(LIB_SUFFIX)
ifeq ($(PJ_SHARED_LIBRARIES),)
ifeq (@ac_resample_dll@,1)
export PJ_RESAMPLE_DLL := 1
APP_THIRD_PARTY_LIBS += -lresample
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libresample.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/third_party/lib/libresample.$(SHLIB_SUFFIX)
else
APP_THIRD_PARTY_LIBS += -lresample-$(TARGET_NAME)
endif
else
APP_THIRD_PARTY_LIBS += -lresample
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libresample.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/third_party/lib/libresample.$(SHLIB_SUFFIX)
endif
endif
ifneq (@ac_no_gsm_codec@,1)
ifeq (@ac_external_gsm@,1)
# External GSM library
APP_THIRD_PARTY_EXT += -lgsm
else
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libgsmcodec-$(LIB_SUFFIX)
ifeq ($(PJ_SHARED_LIBRARIES),)
APP_THIRD_PARTY_LIBS += -lgsmcodec-$(TARGET_NAME)
else
APP_THIRD_PARTY_LIBS += -lgsmcodec
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libgsmcodec.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/third_party/lib/libgsmcodec.$(SHLIB_SUFFIX)
endif
endif
endif
ifneq (@ac_no_speex_codec@,1)
ifeq (@ac_external_speex@,1)
APP_THIRD_PARTY_EXT += -lspeex -lspeexdsp
else
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libspeex-$(LIB_SUFFIX)
ifeq ($(PJ_SHARED_LIBRARIES),)
APP_THIRD_PARTY_LIBS += -lspeex-$(TARGET_NAME)
else
APP_THIRD_PARTY_LIBS += -lspeex
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libspeex.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/third_party/lib/libspeex.$(SHLIB_SUFFIX)
endif
endif
endif
ifneq (@ac_no_ilbc_codec@,1)
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libilbccodec-$(LIB_SUFFIX)
ifeq ($(PJ_SHARED_LIBRARIES),)
APP_THIRD_PARTY_LIBS += -lilbccodec-$(TARGET_NAME)
else
APP_THIRD_PARTY_LIBS += -lilbccodec
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libilbccodec.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/third_party/lib/libilbccodec.$(SHLIB_SUFFIX)
endif
endif
ifneq (@ac_no_g7221_codec@,1)
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libg7221codec-$(LIB_SUFFIX)
ifeq ($(PJ_SHARED_LIBRARIES),)
APP_THIRD_PARTY_LIBS += -lg7221codec-$(TARGET_NAME)
else
APP_THIRD_PARTY_LIBS += -lg7221codec
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libg7221codec.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/third_party/lib/libg7221codec.$(SHLIB_SUFFIX)
endif
endif
ifeq (@ac_external_pa@,1)
# External PA
APP_THIRD_PARTY_EXT += -lportaudio
endif
ifneq (@ac_no_yuv@,1)
ifeq (@ac_external_yuv@,1)
APP_THIRD_PARTY_EXT += -lyuv
else
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libyuv-$(LIB_SUFFIX)
ifeq ($(PJ_SHARED_LIBRARIES),)
APP_THIRD_PARTY_LIBS += -lyuv-$(TARGET_NAME)
else
APP_THIRD_PARTY_LIBS += -lyuv
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libyuv.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/third_party/lib/libyuv.$(SHLIB_SUFFIX)
endif
endif
endif
ifneq (@ac_no_webrtc@,1)
ifeq (@ac_external_webrtc@,1)
APP_THIRD_PARTY_EXT += -lwebrtc
else
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libwebrtc-$(LIB_SUFFIX)
ifeq ($(PJ_SHARED_LIBRARIES),)
APP_THIRD_PARTY_LIBS += -lwebrtc-$(TARGET_NAME)
else
APP_THIRD_PARTY_LIBS += -lwebrtc
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libwebrtc.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/third_party/lib/libwebrtc.$(SHLIB_SUFFIX)
endif
endif
endif
# Additional flags
@ac_build_mak_vars@
#
# Video
# Note: there are duplicated macros in pjmedia/os-auto.mak.in (and that's not
# good!
# SDL flags
SDL_CFLAGS = @ac_sdl_cflags@
SDL_LDFLAGS = @ac_sdl_ldflags@
# FFMPEG flags
FFMPEG_CFLAGS = @ac_ffmpeg_cflags@
FFMPEG_LDFLAGS = @ac_ffmpeg_ldflags@
# Video4Linux2
V4L2_CFLAGS = @ac_v4l2_cflags@
V4L2_LDFLAGS = @ac_v4l2_ldflags@
# OPENH264 flags
OPENH264_CFLAGS = @ac_openh264_cflags@
OPENH264_LDFLAGS = @ac_openh264_ldflags@
# VPX flags
VPX_CFLAGS = @ac_vpx_cflags@
VPX_LDFLAGS = @ac_vpx_ldflags@
# QT
AC_PJMEDIA_VIDEO_HAS_QT = @ac_pjmedia_video_has_qt@
# QT_CFLAGS = @ac_qt_cflags@
# Darwin (Mac and iOS)
AC_PJMEDIA_VIDEO_HAS_DARWIN = @ac_pjmedia_video_has_darwin@
AC_PJMEDIA_VIDEO_HAS_VTOOLBOX = @ac_pjmedia_video_has_vtoolbox@
AC_PJMEDIA_VIDEO_HAS_IOS_OPENGL = @ac_pjmedia_video_has_ios_opengl@
DARWIN_CFLAGS = @ac_darwin_cflags@
# mingw
AC_PJMEDIA_VIDEO_DEV_HAS_DSHOW = @ac_pjmedia_video_dev_has_dshow@
ifeq (@ac_pjmedia_video_dev_has_dshow@,yes)
DSHOW_CFLAGS = @ac_dshow_cflags@
DSHOW_LDFLAGS = @ac_dshow_ldflags@
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libbaseclasses-$(LIB_SUFFIX)
APP_THIRD_PARTY_LIBS += -lbaseclasses-$(TARGET_NAME)
endif
# Android
ANDROID_CFLAGS = @ac_android_cflags@
# PJMEDIA features exclusion
PJ_VIDEO_CFLAGS += $(SDL_CFLAGS) $(FFMPEG_CFLAGS) $(V4L2_CFLAGS) $(DSHOW_CFLAGS) $(QT_CFLAGS) \
$(OPENH264_CFLAGS) $(VPX_CFLAGS) $(DARWIN_CFLAGS)
PJ_VIDEO_LDFLAGS += $(SDL_LDFLAGS) $(FFMPEG_LDFLAGS) $(V4L2_LDFLAGS) $(DSHOW_LDFLAGS) \
$(OPENH264_LDFLAGS) $(VPX_LDFLAGS)
# CFLAGS, LDFLAGS, and LIBS to be used by applications
export APP_CC := @CC@
export APP_CXX := @CXX@
export APP_CFLAGS := -DPJ_AUTOCONF=1\
@CFLAGS@\
$(PJ_VIDEO_CFLAGS) \
-I$(PJDIR)/pjlib/include\
-I$(PJDIR)/pjlib-util/include\
-I$(PJDIR)/pjnath/include\
-I$(PJDIR)/pjmedia/include\
-I$(PJDIR)/pjsip/include
export APP_CXXFLAGS := @CXXFLAGS@ $(APP_CFLAGS)
export APP_LDFLAGS := -L$(PJDIR)/pjlib/lib\
-L$(PJDIR)/pjlib-util/lib\
-L$(PJDIR)/pjnath/lib\
-L$(PJDIR)/pjmedia/lib\
-L$(PJDIR)/pjsip/lib\
-L$(PJDIR)/third_party/lib\
$(PJ_VIDEO_LDFLAGS) \
@LDFLAGS@
export APP_LDXXFLAGS := $(APP_LDFLAGS)
export APP_LIB_FILES := \
$(PJ_DIR)/pjsip/lib/libpjsua-$(LIB_SUFFIX) \
$(PJ_DIR)/pjsip/lib/libpjsip-ua-$(LIB_SUFFIX) \
$(PJ_DIR)/pjsip/lib/libpjsip-simple-$(LIB_SUFFIX) \
$(PJ_DIR)/pjsip/lib/libpjsip-$(LIB_SUFFIX) \
$(PJ_DIR)/pjmedia/lib/libpjmedia-codec-$(LIB_SUFFIX) \
$(PJ_DIR)/pjmedia/lib/libpjmedia-videodev-$(LIB_SUFFIX) \
$(PJ_DIR)/pjmedia/lib/libpjmedia-$(LIB_SUFFIX) \
$(PJ_DIR)/pjmedia/lib/libpjmedia-audiodev-$(LIB_SUFFIX) \
$(PJ_DIR)/pjnath/lib/libpjnath-$(LIB_SUFFIX) \
$(PJ_DIR)/pjlib-util/lib/libpjlib-util-$(LIB_SUFFIX) \
$(APP_THIRD_PARTY_LIB_FILES) \
$(PJ_DIR)/pjlib/lib/libpj-$(LIB_SUFFIX)
export APP_LIBXX_FILES := \
$(PJ_DIR)/pjsip/lib/libpjsua2-$(LIB_SUFFIX) \
$(APP_LIB_FILES)
ifeq ($(PJ_SHARED_LIBRARIES),)
export PJLIB_LDLIB := -lpj-$(TARGET_NAME)
export PJLIB_UTIL_LDLIB := -lpjlib-util-$(TARGET_NAME)
export PJNATH_LDLIB := -lpjnath-$(TARGET_NAME)
export PJMEDIA_AUDIODEV_LDLIB := -lpjmedia-audiodev-$(TARGET_NAME)
export PJMEDIA_VIDEODEV_LDLIB := -lpjmedia-videodev-$(TARGET_NAME)
export PJMEDIA_LDLIB := -lpjmedia-$(TARGET_NAME)
export PJMEDIA_CODEC_LDLIB := -lpjmedia-codec-$(TARGET_NAME)
export PJSIP_LDLIB := -lpjsip-$(TARGET_NAME)
export PJSIP_SIMPLE_LDLIB := -lpjsip-simple-$(TARGET_NAME)
export PJSIP_UA_LDLIB := -lpjsip-ua-$(TARGET_NAME)
export PJSUA_LIB_LDLIB := -lpjsua-$(TARGET_NAME)
export PJSUA2_LIB_LDLIB := -lpjsua2-$(TARGET_NAME)
else
export PJLIB_LDLIB := -lpj
export PJLIB_UTIL_LDLIB := -lpjlib-util
export PJNATH_LDLIB := -lpjnath
export PJMEDIA_AUDIODEV_LDLIB := -lpjmedia-audiodev
export PJMEDIA_VIDEODEV_LDLIB := -lpjmedia-videodev
export PJMEDIA_LDLIB := -lpjmedia
export PJMEDIA_CODEC_LDLIB := -lpjmedia-codec
export PJSIP_LDLIB := -lpjsip
export PJSIP_SIMPLE_LDLIB := -lpjsip-simple
export PJSIP_UA_LDLIB := -lpjsip-ua
export PJSUA_LIB_LDLIB := -lpjsua
export PJSUA2_LIB_LDLIB := -lpjsua2
export ADD_LIB_FILES := $(PJ_DIR)/pjsip/lib/libpjsua.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjsip/lib/libpjsua.$(SHLIB_SUFFIX) \
$(PJ_DIR)/pjsip/lib/libpjsip-ua.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjsip/lib/libpjsip-ua.$(SHLIB_SUFFIX) \
$(PJ_DIR)/pjsip/lib/libpjsip-simple.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjsip/lib/libpjsip-simple.$(SHLIB_SUFFIX) \
$(PJ_DIR)/pjsip/lib/libpjsip.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjsip/lib/libpjsip.$(SHLIB_SUFFIX) \
$(PJ_DIR)/pjmedia/lib/libpjmedia-codec.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjmedia/lib/libpjmedia-codec.$(SHLIB_SUFFIX) \
$(PJ_DIR)/pjmedia/lib/libpjmedia-videodev.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjmedia/lib/libpjmedia-videodev.$(SHLIB_SUFFIX) \
$(PJ_DIR)/pjmedia/lib/libpjmedia.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjmedia/lib/libpjmedia.$(SHLIB_SUFFIX) \
$(PJ_DIR)/pjmedia/lib/libpjmedia-audiodev.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjmedia/lib/libpjmedia-audiodev.$(SHLIB_SUFFIX) \
$(PJ_DIR)/pjnath/lib/libpjnath.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjnath/lib/libpjnath.$(SHLIB_SUFFIX) \
$(PJ_DIR)/pjlib-util/lib/libpjlib-util.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjlib-util/lib/libpjlib-util.$(SHLIB_SUFFIX) \
$(PJ_DIR)/pjlib/lib/libpj.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjlib/lib/libpj.$(SHLIB_SUFFIX)
APP_LIB_FILES += $(ADD_LIB_FILES)
APP_LIBXX_FILES += $(PJ_DIR)/pjsip/lib/libpjsua2.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR) $(PJ_DIR)/pjsip/lib/libpjsua2.$(SHLIB_SUFFIX) \
$(ADD_LIB_FILES)
endif
ifeq ($(PJ_EXCLUDE_PJSUA2),1)
export PJSUA2_LIB_LDLIB :=
endif
export APP_LDLIBS := $(PJSUA_LIB_LDLIB) \
$(PJSIP_UA_LDLIB) \
$(PJSIP_SIMPLE_LDLIB) \
$(PJSIP_LDLIB) \
$(PJMEDIA_CODEC_LDLIB) \
$(PJMEDIA_LDLIB) \
$(PJMEDIA_VIDEODEV_LDLIB) \
$(PJMEDIA_AUDIODEV_LDLIB) \
$(PJMEDIA_LDLIB) \
$(PJNATH_LDLIB) \
$(PJLIB_UTIL_LDLIB) \
$(APP_THIRD_PARTY_LIBS)\
$(APP_THIRD_PARTY_EXT)\
$(PJLIB_LDLIB) \
@LIBS@
export APP_LDXXLIBS := $(PJSUA2_LIB_LDLIB) \
-lstdc++ \
$(APP_LDLIBS)
# Here are the variables to use if application is using the library
# from within the source distribution
export PJ_CC := $(APP_CC)
export PJ_CXX := $(APP_CXX)
export PJ_CFLAGS := $(APP_CFLAGS)
export PJ_CXXFLAGS := $(APP_CXXFLAGS)
export PJ_LDFLAGS := $(APP_LDFLAGS)
export PJ_LDXXFLAGS := $(APP_LDXXFLAGS)
export PJ_LDLIBS := $(APP_LDLIBS)
export PJ_LDXXLIBS := $(APP_LDXXLIBS)
export PJ_LIB_FILES := $(APP_LIB_FILES)
export PJ_LIBXX_FILES := $(APP_LIBXX_FILES)
# And here are the variables to use if application is using the
# library from the install location (i.e. --prefix)
export PJ_INSTALL_DIR := @prefix@
export PJ_INSTALL_INC_DIR := @includedir@
export PJ_INSTALL_LIB_DIR := @libdir@
export PJ_INSTALL_CFLAGS := -I$(PJ_INSTALL_INC_DIR) -DPJ_AUTOCONF=1 @ac_cflags@
export PJ_INSTALL_LDFLAGS_PRIVATE := $(APP_THIRD_PARTY_LIBS) $(APP_THIRD_PARTY_EXT) @LIBS@
export PJ_INSTALL_LDFLAGS := -L$(PJ_INSTALL_LIB_DIR) $(filter-out $(PJ_INSTALL_LDFLAGS_PRIVATE),$(APP_LDXXLIBS))

View file

@ -0,0 +1,7 @@
@rem set MWSym2Libraries=1
@rem set EPOCROOT=\Symbian\9.1\S60_3rd\
@rem set EPOCROOT=\Symbian\9.1\S60_3rd_MR_2\
@rem set EPOCROOT=\Symbian\UIQ3SDK\
@rem set EPOCROOT=\symbian\UIQ3.1\
@rem set EPOCROOT=\symbian\9.2\S60_3rd_FP1\
bldmake bldfiles

View file

@ -0,0 +1,7 @@
@rem call abld build -v vs6 udeb
@rem call abld build -v gcce urel
@rem call abld build winscw udeb
call abld build %1 %2 %3 %4

View file

@ -0,0 +1,35 @@
prj_platforms
winscw
armv5
gcce
prj_mmpfiles
/* Libraries */
pjlib.mmp
pjlib_util.mmp
pjnath.mmp
pjsdp.mmp
pjmedia.mmp
pjsip.mmp
pjsip_simple.mmp
pjsip_ua.mmp
pjsua_lib.mmp
libsrtp.mmp
/* Codecs */
libgsmcodec.mmp
libspeexcodec.mmp
libg7221codec.mmp
libpassthroughcodec.mmp
/* Resample */
libresample.mmp
/* Audio device. */
pjmedia_audiodev.mmp
/* Applications */
//symsndtest.mmp
pjlib_test.mmp
../pjsip-apps/src/pjsua/symbian/group/pjsua.mmp

View file

@ -0,0 +1,56 @@
TARGET libg7221codec.lib
TARGETTYPE lib
//OPTION CW -lang c++
OPTION GCCE -O2 -fno-unit-at-a-time
OPTION ARMCC --gnu
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
//
// GSM codec third party source
//
SOURCEPATH ..\third_party\g7221\common
SOURCE basic_op.c
SOURCE common.c
SOURCE huff_tab.c
SOURCE tables.c
SOURCEPATH ..\third_party\g7221\decode
SOURCE coef2sam.c
SOURCE dct4_s.c
SOURCE decoder.c
SOURCEPATH ..\third_party\g7221\encode
SOURCE dct4_a.c
SOURCE encoder.c
SOURCE sam2coef.c
//
// GSM codec wrapper for pjmedia-codec
//
SOURCEPATH ..\pjmedia\src\pjmedia-codec
SOURCE g7221.c
//
// Header files
//
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\third_party
SYSTEMINCLUDE ..\third_party\g7221\common
SYSTEMINCLUDE ..\third_party\g7221\decode
SYSTEMINCLUDE ..\third_party\g7221\encode
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,72 @@
#if defined(PJ_BUILD_DLL)
TARGET libgsmcodec.dll
TARGETTYPE dll
UID 0x0 0xA000000F
CAPABILITY None
LIBRARY pjlib.lib euser.lib estlib.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\libgsmcodec.def
#else
TARGET libgsmcodec.lib
TARGETTYPE lib
#endif
//OPTION CW -lang c++
OPTION ARMCC --gnu
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
//
// GSM codec third party source
//
SOURCEPATH ..\third_party\gsm\src
SOURCE add.c
SOURCE code.c
SOURCE debug.c
SOURCE decode.c
SOURCE gsm_create.c
SOURCE gsm_decode.c
SOURCE gsm_destroy.c
SOURCE gsm_encode.c
SOURCE gsm_explode.c
SOURCE gsm_implode.c
SOURCE gsm_option.c
SOURCE gsm_print.c
SOURCE long_term.c
SOURCE lpc.c
SOURCE preprocess.c
SOURCE rpe.c
SOURCE short_term.c
SOURCE table.c
//
// GSM codec wrapper for pjmedia-codec
//
SOURCEPATH ..\pjmedia\src\pjmedia-codec
SOURCE gsm.c
//
// Header files
//
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\third_party\build\gsm
SYSTEMINCLUDE ..\third_party\gsm\inc
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,27 @@
TARGET libpassthroughcodec.lib
TARGETTYPE lib
MACRO HAVE_CONFIG_H
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
//
// GCCE optimization setting
//
OPTION GCCE -O2 -fno-unit-at-a-time
OPTION ARMCC --gnu
//
// Passthrough codecs wrapper for pjmedia-codec
//
SOURCEPATH ..\pjmedia\src\pjmedia-codec
SOURCE passthrough.c
//
// Header files
//
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,26 @@
TARGET libresample.lib
TARGETTYPE lib
SOURCEPATH ..\third_party\resample\src
//
// GCCE optimization setting
//
OPTION GCCE -O2 -fno-unit-at-a-time
OPTION ARMCC --gnu
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
MACRO RESAMPLE_HAS_SMALL_FILTER=1
MACRO RESAMPLE_HAS_LARGE_FILTER=0
SOURCE resamplesubs.c
SYSTEMINCLUDE ..\third_party\resample\include
SYSTEMINCLUDE ..\third_party\build\resample
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,74 @@
TARGET libspeexcodec.lib
TARGETTYPE lib
MACRO HAVE_CONFIG_H
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
//
// GCCE optimization setting
//
OPTION GCCE -O2 -fno-unit-at-a-time
OPTION ARMCC --gnu
//
// Speex files
//
SOURCEPATH ..\third_party\speex\libspeex
SOURCE bits.c
SOURCE cb_search.c
SOURCE exc_5_64_table.c
SOURCE exc_5_256_table.c
SOURCE exc_8_128_table.c
SOURCE exc_10_16_table.c
SOURCE exc_10_32_table.c
SOURCE exc_20_32_table.c
SOURCE fftwrap.c
SOURCE filterbank.c
SOURCE filters.c
SOURCE gain_table.c
SOURCE gain_table_lbr.c
SOURCE hexc_10_32_table.c
SOURCE hexc_table.c
SOURCE high_lsp_tables.c
SOURCE kiss_fft.c
SOURCE kiss_fftr.c
SOURCE lpc.c
SOURCE lsp.c
SOURCE lsp_tables_nb.c
SOURCE ltp.c
SOURCE mdf.c
SOURCE modes.c
SOURCE modes_wb.c
SOURCE nb_celp.c
SOURCE preprocess.c
SOURCE quant_lsp.c
SOURCE sb_celp.c
SOURCE smallft.c
SOURCE speex.c
SOURCE speex_callbacks.c
SOURCE speex_header.c
SOURCE stereo.c
SOURCE vbr.c
SOURCE vq.c
SOURCE window.c
//
// Speex codec wrapper for pjmedia-codec
//
SOURCEPATH ..\pjmedia\src\pjmedia-codec
SOURCE speex_codec.c
//
// Header files
//
SYSTEMINCLUDE ..\third_party\speex\include\speex
SYSTEMINCLUDE ..\third_party\speex\include
SYSTEMINCLUDE ..\third_party\speex\symbian
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,60 @@
TARGET libsrtp.lib
TARGETTYPE lib
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
//
// GCCE optimization setting
//
OPTION GCCE -O2 -fno-unit-at-a-time
OPTION ARMCC --gnu
//
// Speex files
//
SOURCEPATH ..\third_party\srtp
SOURCE crypto\ae_xfm\xfm.c
SOURCE crypto\cipher\aes.c
SOURCE crypto\cipher\aes_cbc.c
SOURCE crypto\cipher\aes_icm.c
SOURCE crypto\cipher\cipher.c
SOURCE crypto\cipher\null_cipher.c
SOURCE crypto\hash\auth.c
SOURCE crypto\hash\hmac.c
SOURCE crypto\hash\null_auth.c
SOURCE crypto\hash\sha1.c
SOURCE crypto\kernel\alloc.c
SOURCE crypto\kernel\crypto_kernel.c
//SOURCE crypto\kernel\err.c
SOURCE crypto\kernel\key.c
SOURCE crypto\math\datatypes.c
SOURCE crypto\math\gf2_8.c
//SOURCE crypto\math\math.c
SOURCE crypto\math\stat.c
SOURCE crypto\replay\rdb.c
SOURCE crypto\replay\rdbx.c
//SOURCE crypto\replay\ut_sim.c
SOURCE crypto\rng\ctr_prng.c
SOURCE crypto\rng\prng.c
//SOURCE crypto\rng\rand_linux_kernel.c
SOURCE crypto\rng\rand_source.c
SOURCE pjlib\srtp_err.c
SOURCE srtp\srtp.c
SOURCE tables\aes_tables.c
//SOURCEPATH ..\pjmedia\src\pjmedia
//SOURCE transport_srtp.c
//
// Header files
//
SYSTEMINCLUDE ..\third_party\srtp\include
SYSTEMINCLUDE ..\third_party\srtp\crypto\include
SYSTEMINCLUDE ..\third_party\build\srtp
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,80 @@
#!/bin/sh
MMP=$1
if test "$MMP" == ""; then
echo "Usage: makedef.sh FILE.MMP"
echo " or makedef.sh all"
exit 1
fi
if test "$MMP" == "all"; then
. $0 pjlib.mmp
. $0 pjlib_util.mmp
. $0 pjnath.mmp
. $0 pjmedia.mmp
. $0 pjsdp.mmp
. $0 pjsip.mmp
. $0 pjsip_simple.mmp
. $0 pjsip_ua.mmp
. $0 pjsua_lib.mmp
. $0 symbian_audio.mmp
. $0 null_audio.mmp
exit 0
fi
if test -f $MMP; then
true
else
echo "Unable to open $MMP"
exit 1
fi
TARGET=`grep -w '^TARGET' $MMP | awk '{print $2}' | awk -F '.' '{print $1}' | head -1`
DEFFILE="${TARGET}U.def"
SOURCES=`grep -w '^SOURCE' $MMP | awk '{print $2}' | tr '\\\\' '/'`
SOURCEPATH=`grep -w '^SOURCEPATH' $MMP | tr '\\\\' '/' | awk '{print $2}'`
INCPATH=`grep 'INCLUDE' $MMP | awk '{print $2}' | grep pj | tr '\\\\' '/'`
INCLUDE=""
for INC in $INCPATH; do
INCLUDE=`echo $INCLUDE -I$INC`
done
#-- debug --
#echo TARGET=$TARGET
#echo SOURCES=$SOURCES
#echo SOURCEPATH=$SOURCEPATH
#echo INCLUDE=$INCLUDE
#-- end --
echo > tmpnames.def
echo "${TARGET}:"
for file in $SOURCES; do
#SYMBOLS=`grep PJ_DEF ${SOURCEPATH}/$file | awk -F ')' '{print $2}' | awk -F '(' '{print $1}' | awk -F '=' '{print $1}' | tr -d '[:blank:]' | sort | uniq`
SYMBOLS=`
cpp -DPJ_SYMBIAN=1 -DPJ_DLL -DPJ_EXPORTING=1 $INCLUDE ${SOURCEPATH}/$file 2>&1 |
grep EXPORT_C |
sed 's/(/;/' |
sed 's/=/;/' |
awk -F ';' '{print $1}' |
awk '{print $NF}'`
echo Processing ${SOURCEPATH}/$file..
for SYM in $SYMBOLS; do
echo $SYM >> tmpnames.def
done
done
echo "Writing $DEFFILE"
echo EXPORTS > $DEFFILE
i=0
for SYM in `cat tmpnames.def | sort | uniq`; do
echo " $SYM"
i=`expr $i + 1`
printf "\\t%-40s @ $i NONAME\\n" $SYM >> $DEFFILE
done
echo
echo "Done. Total $i symbols exported in $DEFFILE."

View file

@ -0,0 +1,40 @@
#if defined(PJ_BUILD_DLL)
TARGET null_audio.dll
TARGETTYPE dll
UID 0x0 0xA0000000
CAPABILITY None
LIBRARY pjlib.lib charconv.lib euser.lib estlib.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\null_audio.def
#else
TARGET null_audio.lib
TARGETTYPE lib
#endif
SOURCEPATH ..\pjmedia\src\pjmedia
OPTION CW -lang c++
OPTION ARMCC --gnu
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
//
// Platform independent source
//
SOURCE nullsound.c
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,12 @@
EXPORTS
pjmedia_snd_deinit @ 1 NONAME
pjmedia_snd_get_dev_count @ 2 NONAME
pjmedia_snd_get_dev_info @ 3 NONAME
pjmedia_snd_init @ 4 NONAME
pjmedia_snd_open @ 5 NONAME
pjmedia_snd_open_player @ 6 NONAME
pjmedia_snd_open_rec @ 7 NONAME
pjmedia_snd_stream_close @ 8 NONAME
pjmedia_snd_stream_get_info @ 9 NONAME
pjmedia_snd_stream_start @ 10 NONAME
pjmedia_snd_stream_stop @ 11 NONAME

View file

@ -0,0 +1,122 @@
#if defined(PJ_BUILD_DLL)
TARGET pjlib.dll
TARGETTYPE dll
UID 0x0 0xA0000001
CAPABILITY NONE
LIBRARY esock.lib insock.lib charconv.lib euser.lib estlib.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\pjlib.def
#else
TARGET pjlib.lib
TARGETTYPE lib
#endif
SOURCEPATH ..\pjlib\src\pj
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
// Must compile as C++, otherwise exception would not work
OPTION CW -lang c++
OPTION ARMCC --cpp --gnu
OPTION GCC -x c++
OPTION GCCE -x c++
//
// Platform independent source
//
SOURCE activesock.c
SOURCE array.c
SOURCE config.c
SOURCE ctype.c
SOURCE errno.c
SOURCE fifobuf.c
SOURCE guid.c
SOURCE hash.c
SOURCE list.c
SOURCE lock.c
SOURCE string.c
SOURCE log.c
SOURCE os_info.c
SOURCE os_info_symbian.cpp
SOURCE os_time_common.c
SOURCE pool.c
SOURCE pool_buf.c
SOURCE pool_caching.c
SOURCE rand.c
SOURCE rbtree.c
SOURCE ssl_sock_common.c
SOURCE ssl_sock_dump.c
SOURCE sock_common.c
SOURCE sock_qos_common.c
SOURCE types.c
//
// Platform dependent source
//
SOURCE compat\string_compat.c
SOURCE addr_resolv_symbian.cpp
SOURCE exception_symbian.cpp
SOURCE file_access_unistd.c
SOURCE file_io_ansi.c
SOURCE guid_simple.c
SOURCE ioqueue_symbian.cpp
SOURCE ip_helper_symbian.cpp
SOURCE log_writer_symbian_console.cpp
SOURCE os_core_symbian.cpp
SOURCE os_error_symbian.cpp
SOURCE os_timestamp_common.c
SOURCE os_time_unix.c
SOURCE os_timestamp_posix.c
SOURCE pool_policy_new.cpp
SOURCE ssl_sock_symbian.cpp
SOURCE sock_symbian.cpp
SOURCE sock_select_symbian.cpp
SOURCE sock_qos_symbian.cpp
SOURCE timer_symbian.cpp
SOURCE unicode_symbian.cpp
//DOCUMENT os_symbian.h
//DOCUMENT pj\addr_resolv.h
//DOCUMENT pj\array.h
//DOCUMENT pj\assert.h
//DOCUMENT pj\config.h
//DOCUMENT pj\config_site.h
//DOCUMENT pj\config_site_sample.h
//DOCUMENT pj\ctype.h
//DOCUMENT pj\errno.h
//DOCUMENT pj\except.h
//DOCUMENT pj\file_access.h
//DOCUMENT pj\file_io.h
//DOCUMENT pj\guid.h
//DOCUMENT pj\hash.h
//DOCUMENT pj\ioqueue.h
//DOCUMENT pj\ip_helper.h
//DOCUMENT pj\list.h
//DOCUMENT pj\lock.h
//DOCUMENT pj\log.h
//DOCUMENT pj\os.h
//DOCUMENT pj\\pool.h
//DOCUMENT pj\\pool_buf.h
//DOCUMENT pj\rand.h
//DOCUMENT pj\rbtree.h
//DOCUMENT pj\sock.h
//DOCUMENT pj\sock_select.h
//DOCUMENT pj\string.h
//DOCUMENT pj\timer.h
//DOCUMENT pj\types.h
//DOCUMENT pj\unicode.h
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,326 @@
EXPORTS
PJ_FD_CLR @ 1 NONAME
PJ_FD_COUNT @ 2 NONAME
PJ_FD_ISSET @ 3 NONAME
PJ_FD_SET @ 4 NONAME
PJ_FD_ZERO @ 5 NONAME
PJ_GUID_STRING_LENGTH @ 6 NONAME
PJ_NO_MEMORY_EXCEPTION @ 7 NONAME
PJ_VERSION @ 8 NONAME
pj_AF_INET @ 9 NONAME
pj_AF_INET6 @ 10 NONAME
pj_AF_IRDA @ 11 NONAME
pj_AF_PACKET @ 12 NONAME
pj_AF_UNIX @ 13 NONAME
pj_AF_UNSPEC @ 14 NONAME
pj_GUID_STRING_LENGTH @ 15 NONAME
pj_IPTOS_LOWDELAY @ 16 NONAME
pj_IPTOS_MINCOST @ 17 NONAME
pj_IPTOS_RELIABILITY @ 18 NONAME
pj_IPTOS_THROUGHPUT @ 19 NONAME
pj_IP_TOS @ 20 NONAME
pj_MSG_DONTROUTE @ 21 NONAME
pj_MSG_OOB @ 22 NONAME
pj_MSG_PEEK @ 23 NONAME
pj_NO_MEMORY_EXCEPTION @ 24 NONAME
pj_SOCK_DGRAM @ 25 NONAME
pj_SOCK_RAW @ 26 NONAME
pj_SOCK_RDM @ 27 NONAME
pj_SOCK_STREAM @ 28 NONAME
pj_SOL_IP @ 29 NONAME
pj_SOL_IPV6 @ 30 NONAME
pj_SOL_SOCKET @ 31 NONAME
pj_SOL_TCP @ 32 NONAME
pj_SOL_UDP @ 33 NONAME
pj_SO_RCVBUF @ 34 NONAME
pj_SO_SNDBUF @ 35 NONAME
pj_SO_TYPE @ 36 NONAME
pj_ansi_to_unicode @ 37 NONAME
pj_array_erase @ 38 NONAME
pj_array_find @ 39 NONAME
pj_array_insert @ 40 NONAME
pj_atexit @ 41 NONAME
pj_atomic_add @ 42 NONAME
pj_atomic_add_and_get @ 43 NONAME
pj_atomic_create @ 44 NONAME
pj_atomic_dec @ 45 NONAME
pj_atomic_dec_and_get @ 46 NONAME
pj_atomic_destroy @ 47 NONAME
pj_atomic_get @ 48 NONAME
pj_atomic_inc @ 49 NONAME
pj_atomic_inc_and_get @ 50 NONAME
pj_atomic_set @ 51 NONAME
pj_caching_pool_destroy @ 52 NONAME
pj_caching_pool_init @ 53 NONAME
pj_create_random_string @ 54 NONAME
pj_create_unique_string @ 55 NONAME
pj_dump_config @ 56 NONAME
pj_elapsed_cycle @ 57 NONAME
pj_elapsed_msec @ 58 NONAME
pj_elapsed_nanosec @ 59 NONAME
pj_elapsed_time @ 60 NONAME
pj_elapsed_usec @ 61 NONAME
pj_enter_critical_section @ 62 NONAME
pj_enum_ip_interface @ 63 NONAME
pj_enum_ip_route @ 64 NONAME
pj_exception_id_alloc @ 65 NONAME
pj_exception_id_free @ 66 NONAME
pj_exception_id_name @ 67 NONAME
pj_fifobuf_alloc @ 68 NONAME
pj_fifobuf_free @ 69 NONAME
pj_fifobuf_init @ 70 NONAME
pj_fifobuf_max_size @ 71 NONAME
pj_fifobuf_unalloc @ 72 NONAME
pj_file_close @ 73 NONAME
pj_file_delete @ 74 NONAME
pj_file_exists @ 75 NONAME
pj_file_flush @ 76 NONAME
pj_file_getpos @ 77 NONAME
pj_file_getstat @ 78 NONAME
pj_file_move @ 79 NONAME
pj_file_open @ 80 NONAME
pj_file_read @ 81 NONAME
pj_file_setpos @ 82 NONAME
pj_file_size @ 83 NONAME
pj_file_write @ 84 NONAME
pj_generate_unique_string @ 85 NONAME
pj_get_netos_error @ 86 NONAME
pj_get_os_error @ 87 NONAME
pj_get_timestamp @ 88 NONAME
pj_get_timestamp_freq @ 89 NONAME
pj_get_version @ 90 NONAME
pj_getaddrinfo @ 91 NONAME
pj_getdefaultipinterface @ 92 NONAME
pj_gethostaddr @ 93 NONAME
pj_gethostbyname @ 94 NONAME
pj_gethostip @ 95 NONAME
pj_gethostname @ 96 NONAME
pj_getpid @ 97 NONAME
pj_gettimeofday @ 98 NONAME
pj_hash_calc @ 99 NONAME
pj_hash_calc_tolower @ 100 NONAME
pj_hash_count @ 101 NONAME
pj_hash_create @ 102 NONAME
pj_hash_first @ 103 NONAME
pj_hash_get @ 104 NONAME
pj_hash_next @ 105 NONAME
pj_hash_set @ 106 NONAME
pj_hash_set_np @ 107 NONAME
pj_hash_this @ 108 NONAME
pj_htonl @ 109 NONAME
pj_htons @ 110 NONAME
pj_inet_addr @ 111 NONAME
pj_inet_addr2 @ 112 NONAME
pj_inet_aton @ 113 NONAME
pj_inet_ntoa @ 114 NONAME
pj_inet_ntop @ 115 NONAME
pj_inet_ntop2 @ 116 NONAME
pj_inet_pton @ 117 NONAME
pj_init @ 118 NONAME
pj_ioqueue_accept @ 119 NONAME
pj_ioqueue_connect @ 120 NONAME
pj_ioqueue_create @ 121 NONAME
pj_ioqueue_destroy @ 122 NONAME
pj_ioqueue_get_user_data @ 123 NONAME
pj_ioqueue_is_pending @ 124 NONAME
pj_ioqueue_name @ 125 NONAME
pj_ioqueue_op_key_init @ 126 NONAME
pj_ioqueue_poll @ 127 NONAME
pj_ioqueue_post_completion @ 128 NONAME
pj_ioqueue_recv @ 129 NONAME
pj_ioqueue_recvfrom @ 130 NONAME
pj_ioqueue_register_sock @ 131 NONAME
pj_ioqueue_register_sock2 @ 132 NONAME
pj_ioqueue_send @ 133 NONAME
pj_ioqueue_sendto @ 134 NONAME
pj_ioqueue_set_lock @ 135 NONAME
pj_ioqueue_set_user_data @ 136 NONAME
pj_ioqueue_unregister @ 137 NONAME
pj_leave_critical_section @ 138 NONAME
pj_list_erase @ 139 NONAME
pj_list_find_node @ 140 NONAME
pj_list_insert_after @ 141 NONAME
pj_list_insert_before @ 142 NONAME
pj_list_insert_nodes_after @ 143 NONAME
pj_list_insert_nodes_before @ 144 NONAME
pj_list_merge_first @ 145 NONAME
pj_list_merge_last @ 146 NONAME
pj_list_search @ 147 NONAME
pj_list_size @ 148 NONAME
pj_lock_acquire @ 149 NONAME
pj_lock_create_null_mutex @ 150 NONAME
pj_lock_create_recursive_mutex @ 151 NONAME
pj_lock_create_semaphore @ 152 NONAME
pj_lock_create_simple_mutex @ 153 NONAME
pj_lock_destroy @ 154 NONAME
pj_lock_release @ 155 NONAME
pj_lock_tryacquire @ 156 NONAME
pj_log @ 157 NONAME
pj_log_1 @ 158 NONAME
pj_log_2 @ 159 NONAME
pj_log_3 @ 160 NONAME
pj_log_4 @ 161 NONAME
pj_log_5 @ 162 NONAME
pj_log_get_decor @ 163 NONAME
pj_log_get_level @ 164 NONAME
pj_log_get_log_func @ 165 NONAME
pj_log_set_decor @ 166 NONAME
pj_log_set_level @ 167 NONAME
pj_log_set_log_func @ 168 NONAME
pj_log_write @ 169 NONAME
pj_mutex_create @ 170 NONAME
pj_mutex_create_recursive @ 171 NONAME
pj_mutex_create_simple @ 172 NONAME
pj_mutex_destroy @ 173 NONAME
pj_mutex_lock @ 174 NONAME
pj_mutex_trylock @ 175 NONAME
pj_mutex_unlock @ 176 NONAME
pj_ntohl @ 177 NONAME
pj_ntohs @ 178 NONAME
pj_pool_alloc @ 179 NONAME
pj_pool_alloc_from_block @ 180 NONAME
pj_pool_allocate_find @ 181 NONAME
pj_pool_calloc @ 182 NONAME
pj_pool_create @ 183 NONAME
pj_pool_create_int @ 184 NONAME
pj_pool_create_on_buf @ 185 NONAME
pj_pool_destroy_int @ 186 NONAME
pj_pool_factory_default_policy @ 187 NONAME
pj_pool_factory_get_default_policy @ 188 NONAME
pj_pool_get_capacity @ 189 NONAME
pj_pool_get_used_size @ 190 NONAME
pj_pool_getobjname @ 191 NONAME
pj_pool_init_int @ 192 NONAME
pj_pool_release @ 193 NONAME
pj_pool_reset @ 194 NONAME
pj_rand @ 195 NONAME
pj_rbtree_erase @ 196 NONAME
pj_rbtree_find @ 197 NONAME
pj_rbtree_first @ 198 NONAME
pj_rbtree_init @ 199 NONAME
pj_rbtree_insert @ 200 NONAME
pj_rbtree_last @ 201 NONAME
pj_rbtree_max_height @ 202 NONAME
pj_rbtree_min_height @ 203 NONAME
pj_rbtree_next @ 204 NONAME
pj_rbtree_prev @ 205 NONAME
pj_register_strerror @ 206 NONAME
pj_rwmutex_create @ 207 NONAME
pj_rwmutex_destroy @ 208 NONAME
pj_rwmutex_lock_read @ 209 NONAME
pj_rwmutex_lock_write @ 210 NONAME
pj_rwmutex_unlock_read @ 211 NONAME
pj_rwmutex_unlock_write @ 212 NONAME
pj_sem_create @ 213 NONAME
pj_sem_destroy @ 214 NONAME
pj_sem_post @ 215 NONAME
pj_sem_trywait @ 216 NONAME
pj_sem_wait @ 217 NONAME
pj_set_netos_error @ 218 NONAME
pj_set_os_error @ 219 NONAME
pj_shutdown @ 220 NONAME
pj_sock_accept @ 221 NONAME
pj_sock_bind @ 222 NONAME
pj_sock_bind_in @ 223 NONAME
pj_sock_close @ 224 NONAME
pj_sock_connect @ 225 NONAME
pj_sock_getpeername @ 226 NONAME
pj_sock_getsockname @ 227 NONAME
pj_sock_getsockopt @ 228 NONAME
pj_sock_listen @ 229 NONAME
pj_sock_recv @ 230 NONAME
pj_sock_recvfrom @ 231 NONAME
pj_sock_select @ 232 NONAME
pj_sock_send @ 233 NONAME
pj_sock_sendto @ 234 NONAME
pj_sock_setsockopt @ 235 NONAME
pj_sock_shutdown @ 236 NONAME
pj_sock_socket @ 237 NONAME
pj_sockaddr_cmp @ 238 NONAME
pj_sockaddr_copy_addr @ 239 NONAME
pj_sockaddr_get_addr @ 240 NONAME
pj_sockaddr_get_addr_len @ 241 NONAME
pj_sockaddr_get_len @ 242 NONAME
pj_sockaddr_get_port @ 243 NONAME
pj_sockaddr_has_addr @ 244 NONAME
pj_sockaddr_in_get_addr @ 245 NONAME
pj_sockaddr_in_get_port @ 246 NONAME
pj_sockaddr_in_init @ 247 NONAME
pj_sockaddr_in_set_addr @ 248 NONAME
pj_sockaddr_in_set_port @ 249 NONAME
pj_sockaddr_in_set_str_addr @ 250 NONAME
pj_sockaddr_init @ 251 NONAME
pj_sockaddr_print @ 252 NONAME
pj_sockaddr_set_port @ 253 NONAME
pj_sockaddr_set_str_addr @ 254 NONAME
pj_srand @ 255 NONAME
pj_str @ 256 NONAME
pj_strassign @ 257 NONAME
pj_strcat @ 258 NONAME
pj_strcat2 @ 259 NONAME
pj_strcmp @ 260 NONAME
pj_strcmp2 @ 261 NONAME
pj_strcpy @ 262 NONAME
pj_strcpy2 @ 263 NONAME
pj_strdup @ 264 NONAME
pj_strdup2 @ 265 NONAME
pj_strdup2_with_null @ 266 NONAME
pj_strdup3 @ 267 NONAME
pj_strdup_with_null @ 268 NONAME
pj_strerror @ 269 NONAME
pj_stricmp @ 270 NONAME
pj_stricmp2 @ 271 NONAME
pj_strltrim @ 272 NONAME
pj_strncmp @ 273 NONAME
pj_strncmp2 @ 274 NONAME
pj_strncpy @ 275 NONAME
pj_strncpy_with_null @ 276 NONAME
pj_strnicmp @ 277 NONAME
pj_strnicmp2 @ 278 NONAME
pj_strrtrim @ 279 NONAME
pj_strtoul @ 280 NONAME
pj_strtoul2 @ 281 NONAME
pj_strtrim @ 282 NONAME
pj_symbianos_poll @ 283 NONAME
pj_symbianos_set_params @ 284 NONAME
pj_thread_check_stack @ 285 NONAME
pj_thread_create @ 286 NONAME
pj_thread_destroy @ 287 NONAME
pj_thread_get_name @ 288 NONAME
pj_thread_get_os_handle @ 289 NONAME
pj_thread_get_stack_info @ 290 NONAME
pj_thread_get_stack_max_usage @ 291 NONAME
pj_thread_is_registered @ 292 NONAME
pj_thread_join @ 293 NONAME
pj_thread_local_alloc @ 294 NONAME
pj_thread_local_free @ 295 NONAME
pj_thread_local_get @ 296 NONAME
pj_thread_local_set @ 297 NONAME
pj_thread_register @ 298 NONAME
pj_thread_resume @ 299 NONAME
pj_thread_sleep @ 300 NONAME
pj_thread_this @ 301 NONAME
pj_time_decode @ 302 NONAME
pj_time_encode @ 303 NONAME
pj_time_gmt_to_local @ 304 NONAME
pj_time_local_to_gmt @ 305 NONAME
pj_time_val_normalize @ 306 NONAME
pj_timer_entry_init @ 307 NONAME
pj_timer_heap_cancel @ 308 NONAME
pj_timer_heap_cancel_if_active @ 309 NONAME
pj_timer_heap_count @ 310 NONAME
pj_timer_heap_create @ 311 NONAME
pj_timer_heap_destroy @ 312 NONAME
pj_timer_heap_earliest_time @ 313 NONAME
pj_timer_heap_mem_size @ 314 NONAME
pj_timer_heap_poll @ 315 NONAME
pj_timer_heap_schedule @ 316 NONAME
pj_timer_heap_schedule_w_grp_lock @ 317 NONAME
pj_timer_heap_set_lock @ 318 NONAME
pj_timer_heap_set_max_timed_out_per_poll @ 319 NONAME
pj_unicode_to_ansi @ 320 NONAME
pj_utoa @ 321 NONAME
pj_utoa_pad @ 322 NONAME
platform_strerror @ 323 NONAME
snprintf @ 324 NONAME
vsnprintf @ 325 NONAME

View file

@ -0,0 +1,83 @@
TARGET pjlib_test.exe
TARGETTYPE exe
UID 0x0 0xA0000002
SOURCEPATH ..\pjlib\src\pjlib-test
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
// Must compile as C++, otherwise exception would not work
OPTION CW -lang c++
OPTION ARMCC --cpp --gnu
OPTION GCC -x c++
OPTION GCCE -x c++
#if defined(PJ_BUILD_DLL)
MACRO PJ_DLL
LIBRARY pjlib.lib
#else
STATICLIBRARY pjlib.lib
#endif
// Test files
SOURCE activesock.c
SOURCE atomic.c
SOURCE echo_clt.c
SOURCE errno.c
SOURCE exception_wrap.cpp
SOURCE fifobuf.c
SOURCE file.c
SOURCE hash_test.c
SOURCE ioq_perf.c
SOURCE ioq_tcp.c
SOURCE ioq_udp.c
SOURCE ioq_unreg.c
SOURCE list.c
SOURCE mutex.c
SOURCE os.c
SOURCE pool_wrap.cpp
SOURCE pool_perf.c
SOURCE rand.c
SOURCE rbtree.c
SOURCE select.c
SOURCE sleep.c
SOURCE sock.c
SOURCE sock_perf.c
SOURCE ssl_sock.c
SOURCE string.c
SOURCE test_wrap.cpp
SOURCE thread.c
SOURCE timer.c
SOURCE timestamp.c
SOURCE udp_echo_srv_ioqueue.c
SOURCE udp_echo_srv_sync.c
SOURCE util.c
SOURCE main_symbian.cpp
DOCUMENT test.h
START RESOURCE pjlib_test_reg.rss
TARGETPATH \private\10003a3f\apps
END
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc
LIBRARY esock.lib insock.lib charconv.lib euser.lib estlib.lib
LIBRARY securesocket.lib x509.lib crypto.lib x500.lib
LIBRARY hal.lib efsrv.lib
#ifdef WINSCW
STATICLIBRARY eexe.lib ecrt0.lib
#endif
// Need a bit of mem for logging in the app.
EPOCSTACKSIZE 32768
CAPABILITY NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment

View file

@ -0,0 +1,19 @@
; pjlib_test.pkg
; Languages
&EN
; Header
;#{"pjlib_test"},(0x200235D3), 0, 1, 1
#{"pjlib_test"},(0xA0000002), 0, 1, 1
; Platform compatibility
[0x101F7961], *, *, *,{"Series60ProductID"}
; vendor
%{"PJSIP"}
:"PJSIP"
; Target
"$(EPOCROOT)Epoc32\release\$(PLATFORM)\$(TARGET)\pjlib_test.exe"-"!:\sys\bin\pjlib_test.exe"
"$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\pjlib_test_reg.rSC"-"!:\private\10003a3f\import\apps\pjlib_test_reg.rSC"

View file

@ -0,0 +1,86 @@
#if defined(PJ_BUILD_DLL)
TARGET pjlib_util.dll
TARGETTYPE dll
UID 0x0 0xA0000003
CAPABILITY NONE
LIBRARY pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\pjlib_util.def
#else
TARGET pjlib_util.lib
TARGETTYPE lib
#endif
SOURCEPATH ..\pjlib-util\src\pjlib-util
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
// Must compile as C++, otherwise exception would not work
OPTION CW -lang c++
OPTION ARMCC --cpp --gnu
OPTION GCC -x c++
OPTION GCCE -x c++
//
// PJLIB-UTIL files
//
SOURCE base64.c
SOURCE cli.c
SOURCE cli_console.c
SOURCE cli_telnet.c
SOURCE crc32.c
SOURCE dns.c
SOURCE dns_dump.c
SOURCE dns_server.c
SOURCE errno.c
SOURCE getopt.c
SOURCE hmac_md5.c
SOURCE hmac_sha1.c
SOURCE http_client.c
SOURCE md5.c
SOURCE pcap.c
SOURCE resolver_wrap.cpp
SOURCE scanner.c
SOURCE sha1.c
SOURCE srv_resolver.c
SOURCE string.c
SOURCE stun_simple.c
SOURCE stun_simple_client.c
SOURCE xml_wrap.cpp
//
// Header files
//
//DOCUMENT pjlib-util\\config.h
//DOCUMENT pjlib-util\\crc32.h
//DOCUMENT pjlib-util\\dns.h
//DOCUMENT pjlib-util\\errno.h
//DOCUMENT pjlib-util\\getopt.h
//DOCUMENT pjlib-util\\hmac_md5.h
//DOCUMENT pjlib-util\hmac_sha1.h
//DOCUMENT pjlib-util\http_client.h
//DOCUMENT pjlib-util\md5.h
//DOCUMENT pjlib-util\resolver.h
//DOCUMENT pjlib-util\scanner.h
//DOCUMENT pjlib-util\sha1.h
//DOCUMENT pjlib-util\srv_resolver.h
//DOCUMENT pjlib-util\string.h
//DOCUMENT pjlib-util\stun_simple.h
//DOCUMENT pjlib-util\types.h
//DOCUMENT pjlib-util\xml.h
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjlib-util\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,92 @@
EXPORTS
pj_cis_add_alpha @ 1 NONAME
pj_cis_add_cis @ 2 NONAME
pj_cis_add_num @ 3 NONAME
pj_cis_add_range @ 4 NONAME
pj_cis_add_str @ 5 NONAME
pj_cis_buf_init @ 6 NONAME
pj_cis_del_range @ 7 NONAME
pj_cis_del_str @ 8 NONAME
pj_cis_dup @ 9 NONAME
pj_cis_init @ 10 NONAME
pj_cis_invert @ 11 NONAME
pj_crc32_calc @ 12 NONAME
pj_crc32_final @ 13 NONAME
pj_crc32_init @ 14 NONAME
pj_crc32_update @ 15 NONAME
pj_dns_dump_packet @ 16 NONAME
pj_dns_get_type_name @ 17 NONAME
pj_dns_make_query @ 18 NONAME
pj_dns_packet_dup @ 19 NONAME
pj_dns_parse_a_response @ 20 NONAME
pj_dns_parse_packet @ 21 NONAME
pj_dns_resolver_add_entry @ 22 NONAME
pj_dns_resolver_cancel_query @ 23 NONAME
pj_dns_resolver_create @ 24 NONAME
pj_dns_resolver_destroy @ 25 NONAME
pj_dns_resolver_dump @ 26 NONAME
pj_dns_resolver_get_cached_count @ 27 NONAME
pj_dns_resolver_get_settings @ 28 NONAME
pj_dns_resolver_handle_events @ 29 NONAME
pj_dns_resolver_set_ns @ 30 NONAME
pj_dns_resolver_set_settings @ 31 NONAME
pj_dns_resolver_start_query @ 32 NONAME
pj_dns_settings_default @ 33 NONAME
pj_dns_srv_resolve @ 34 NONAME
pj_hmac_md5 @ 35 NONAME
pj_hmac_md5_final @ 36 NONAME
pj_hmac_md5_init @ 37 NONAME
pj_hmac_md5_update @ 38 NONAME
pj_hmac_sha1 @ 39 NONAME
pj_hmac_sha1_final @ 40 NONAME
pj_hmac_sha1_init @ 41 NONAME
pj_hmac_sha1_update @ 42 NONAME
pj_md5_final @ 43 NONAME
pj_md5_init @ 44 NONAME
pj_md5_update @ 45 NONAME
pj_scan_advance_n @ 46 NONAME
pj_scan_fini @ 47 NONAME
pj_scan_get @ 48 NONAME
pj_scan_get_char @ 49 NONAME
pj_scan_get_n @ 50 NONAME
pj_scan_get_newline @ 51 NONAME
pj_scan_get_quote @ 52 NONAME
pj_scan_get_quotes @ 53 NONAME
pj_scan_get_unescape @ 54 NONAME
pj_scan_get_until @ 55 NONAME
pj_scan_get_until_ch @ 56 NONAME
pj_scan_get_until_chr @ 57 NONAME
pj_scan_init @ 58 NONAME
pj_scan_peek @ 59 NONAME
pj_scan_peek_n @ 60 NONAME
pj_scan_peek_until @ 61 NONAME
pj_scan_restore_state @ 62 NONAME
pj_scan_save_state @ 63 NONAME
pj_scan_skip_line @ 64 NONAME
pj_scan_skip_whitespace @ 65 NONAME
pj_scan_strcmp @ 66 NONAME
pj_scan_stricmp @ 67 NONAME
pj_scan_stricmp_alnum @ 68 NONAME
pj_sha1_final @ 69 NONAME
pj_sha1_init @ 70 NONAME
pj_sha1_update @ 71 NONAME
pj_str_unescape @ 72 NONAME
pj_strcpy_unescape @ 73 NONAME
pj_strncpy2_escape @ 74 NONAME
pj_strncpy_escape @ 75 NONAME
pj_xml_add_attr @ 76 NONAME
pj_xml_add_node @ 77 NONAME
pj_xml_attr_new @ 78 NONAME
pj_xml_clone @ 79 NONAME
pj_xml_find @ 80 NONAME
pj_xml_find_attr @ 81 NONAME
pj_xml_find_next_node @ 82 NONAME
pj_xml_find_node @ 83 NONAME
pj_xml_node_new @ 84 NONAME
pj_xml_parse @ 85 NONAME
pj_xml_print @ 86 NONAME
pjlib_util_init @ 87 NONAME
pjstun_create_bind_req @ 88 NONAME
pjstun_get_mapped_addr @ 89 NONAME
pjstun_msg_find_attr @ 90 NONAME
pjstun_parse_msg @ 91 NONAME

View file

@ -0,0 +1,136 @@
#if defined(PJ_BUILD_DLL)
TARGET pjmedia.dll
TARGETTYPE dll
UID 0x0 0xA0000004
CAPABILITY None
LIBRARY null_audio.lib pjsdp.lib pjnath.lib pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\pjmedia.def
#else
TARGET pjmedia.lib
TARGETTYPE lib
#endif
SOURCEPATH ..\pjmedia\src\pjmedia
//
// GCCE optimization setting
//
OPTION GCCE -O2 -fno-unit-at-a-time
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
// Must compile as C++, otherwise exception would not work
OPTION CW -lang c++
OPTION ARMCC --cpp --gnu
OPTION GCC -x c++
OPTION GCCE -x c++
//
// Platform independent source
//
SOURCE alaw_ulaw.c
SOURCE alaw_ulaw_table.c
SOURCE avi_player.c
SOURCE bidirectional.c
SOURCE clock_thread.c
SOURCE codec.c
SOURCE conf_switch.c
SOURCE conference.c
SOURCE converter.c
SOURCE converter_libswscale.c
SOURCE delaybuf.c
SOURCE echo_common.c
SOURCE echo_port.c
SOURCE echo_suppress.c
SOURCE endpoint.c
SOURCE errno.c
SOURCE event.c
SOURCE format.c
SOURCE g711.c
SOURCE jbuf.c
SOURCE master_port.c
SOURCE mem_capture.c
SOURCE mem_player.c
SOURCE null_port.c
SOURCE plc_common.c
SOURCE port.c
SOURCE resample_port.c
SOURCE resample_resample.c
SOURCE rtcp.c
SOURCE rtcp_xr.c
SOURCE rtp.c
//SDP files are in pjsdp.mmp: sdp.c, sdp_cmp.c, sdp_neg.c
//SOURCE session.c // deprecated
SOURCE silencedet.c
SOURCE sound_port.c
SOURCE splitcomb.c
SOURCE stereo_port.c
SOURCE stream.c
SOURCE stream_common.c
SOURCE stream_info.c
SOURCE tonegen.c
SOURCE transport_adapter_sample.c
SOURCE transport_ice.c
SOURCE transport_udp.c
SOURCE transport_srtp.c
SOURCE types.c
SOURCE vid_codec.c
SOURCE vid_codec_util.c
SOURCE vid_port.c
SOURCE vid_stream.c
SOURCE vid_stream_info.c
SOURCE vid_tee.c
SOURCE wav_player.c
SOURCE wav_playlist.c
SOURCE wav_writer.c
SOURCE wave.c
SOURCE wsola.c
//
// pjmedia-codec common files
//
SOURCEPATH ..\pjmedia\src\pjmedia-codec
SOURCE audio_codecs.c
SOURCE amr_sdp_match.c
SOURCE g7221_sdp_match.c
SOURCE h263_packetizer.c
SOURCE h264_packetizer.c
//
// Symbian specific
// These are on separate project
//
//SOURCE symbian_sound.cpp
//SOURCE null_sound.c
//
// Header files
//
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjlib-util\include
SYSTEMINCLUDE ..\pjnath\include
SYSTEMINCLUDE ..\third_party\srtp\include
SYSTEMINCLUDE ..\third_party\srtp\crypto\include
SYSTEMINCLUDE ..\third_party\build\srtp
SYSTEMINCLUDE ..
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc
//SYSTEMINCLUDE \epoc32\include\mmf\plugin

View file

@ -0,0 +1,193 @@
EXPORTS
echo_supp_cancel_echo @ 1 NONAME
echo_supp_capture @ 2 NONAME
echo_supp_create @ 3 NONAME
echo_supp_destroy @ 4 NONAME
echo_supp_playback @ 5 NONAME
pjmedia_bidirectional_port_create @ 6 NONAME
pjmedia_calc_avg_signal @ 7 NONAME
pjmedia_clock_create @ 8 NONAME
pjmedia_clock_destroy @ 9 NONAME
pjmedia_clock_start @ 10 NONAME
pjmedia_clock_stop @ 11 NONAME
pjmedia_clock_wait @ 12 NONAME
pjmedia_codec_g711_deinit @ 13 NONAME
pjmedia_codec_g711_init @ 14 NONAME
pjmedia_codec_info_to_id @ 15 NONAME
pjmedia_codec_mgr_alloc_codec @ 16 NONAME
pjmedia_codec_mgr_dealloc_codec @ 17 NONAME
pjmedia_codec_mgr_enum_codecs @ 18 NONAME
pjmedia_codec_mgr_find_codecs_by_id @ 19 NONAME
pjmedia_codec_mgr_get_codec_info @ 20 NONAME
pjmedia_codec_mgr_get_default_param @ 21 NONAME
pjmedia_codec_mgr_init @ 22 NONAME
pjmedia_codec_mgr_register_factory @ 23 NONAME
pjmedia_codec_mgr_set_codec_priority @ 24 NONAME
pjmedia_codec_mgr_unregister_factory @ 25 NONAME
pjmedia_conf_add_passive_port @ 26 NONAME
pjmedia_conf_add_port @ 27 NONAME
pjmedia_conf_adjust_rx_level @ 28 NONAME
pjmedia_conf_adjust_tx_level @ 29 NONAME
pjmedia_conf_configure_port @ 30 NONAME
pjmedia_conf_connect_port @ 31 NONAME
pjmedia_conf_create @ 32 NONAME
pjmedia_conf_destroy @ 33 NONAME
pjmedia_conf_disconnect_port @ 34 NONAME
pjmedia_conf_enum_ports @ 35 NONAME
pjmedia_conf_get_connect_count @ 36 NONAME
pjmedia_conf_get_master_port @ 37 NONAME
pjmedia_conf_get_port_count @ 38 NONAME
pjmedia_conf_get_port_info @ 39 NONAME
pjmedia_conf_get_ports_info @ 40 NONAME
pjmedia_conf_get_signal_level @ 41 NONAME
pjmedia_conf_remove_port @ 42 NONAME
pjmedia_conf_set_port0_name @ 43 NONAME
pjmedia_delay_buf_create @ 44 NONAME
pjmedia_delay_buf_get @ 45 NONAME
pjmedia_delay_buf_put @ 46 NONAME
pjmedia_echo_cancel @ 47 NONAME
pjmedia_echo_capture @ 48 NONAME
pjmedia_echo_create @ 49 NONAME
pjmedia_echo_destroy @ 50 NONAME
pjmedia_echo_playback @ 51 NONAME
pjmedia_echo_port_create @ 52 NONAME
pjmedia_endpt_create @ 53 NONAME
pjmedia_endpt_create_pool @ 54 NONAME
pjmedia_endpt_create_sdp @ 55 NONAME
pjmedia_endpt_destroy @ 56 NONAME
pjmedia_endpt_dump @ 57 NONAME
pjmedia_endpt_get_codec_mgr @ 58 NONAME
pjmedia_endpt_get_ioqueue @ 59 NONAME
pjmedia_endpt_get_thread @ 60 NONAME
pjmedia_endpt_get_thread_count @ 61 NONAME
pjmedia_ice_create @ 62 NONAME
pjmedia_ice_destroy @ 63 NONAME
pjmedia_ice_get_comp @ 64 NONAME
pjmedia_ice_get_init_status @ 65 NONAME
pjmedia_ice_init_ice @ 66 NONAME
pjmedia_ice_modify_sdp @ 67 NONAME
pjmedia_ice_simulate_lost @ 68 NONAME
pjmedia_ice_start_ice @ 69 NONAME
pjmedia_ice_start_init @ 70 NONAME
pjmedia_ice_stop_ice @ 71 NONAME
pjmedia_jbuf_create @ 72 NONAME
pjmedia_jbuf_destroy @ 73 NONAME
pjmedia_jbuf_get_frame @ 74 NONAME
pjmedia_jbuf_get_state @ 75 NONAME
pjmedia_jbuf_put_frame @ 76 NONAME
pjmedia_jbuf_reset @ 77 NONAME
pjmedia_jbuf_set_adaptive @ 78 NONAME
pjmedia_jbuf_set_fixed @ 79 NONAME
pjmedia_master_port_create @ 80 NONAME
pjmedia_master_port_destroy @ 81 NONAME
pjmedia_master_port_get_dport @ 82 NONAME
pjmedia_master_port_get_uport @ 83 NONAME
pjmedia_master_port_set_dport @ 84 NONAME
pjmedia_master_port_set_uport @ 85 NONAME
pjmedia_master_port_start @ 86 NONAME
pjmedia_master_port_stop @ 87 NONAME
pjmedia_mem_capture_create @ 88 NONAME
pjmedia_mem_capture_get_size @ 89 NONAME
pjmedia_mem_capture_set_eof_cb @ 90 NONAME
pjmedia_mem_player_create @ 91 NONAME
pjmedia_mem_player_set_eof_cb @ 92 NONAME
pjmedia_null_port_create @ 93 NONAME
pjmedia_plc_create @ 94 NONAME
pjmedia_plc_generate @ 95 NONAME
pjmedia_plc_save @ 96 NONAME
pjmedia_port_destroy @ 97 NONAME
pjmedia_port_get_frame @ 98 NONAME
pjmedia_port_info_init @ 99 NONAME
pjmedia_port_put_frame @ 100 NONAME
pjmedia_resample_create @ 101 NONAME
pjmedia_resample_destroy @ 102 NONAME
pjmedia_resample_get_input_size @ 103 NONAME
pjmedia_resample_port_create @ 104 NONAME
pjmedia_resample_run @ 105 NONAME
pjmedia_rtcp_build_rtcp @ 106 NONAME
pjmedia_rtcp_fini @ 107 NONAME
pjmedia_rtcp_get_ntp_time @ 108 NONAME
pjmedia_rtcp_init @ 109 NONAME
pjmedia_rtcp_rx_rtcp @ 110 NONAME
pjmedia_rtcp_rx_rtp @ 111 NONAME
pjmedia_rtcp_tx_rtp @ 112 NONAME
pjmedia_rtp_decode_rtp @ 113 NONAME
pjmedia_rtp_encode_rtp @ 114 NONAME
pjmedia_rtp_session_init @ 115 NONAME
pjmedia_rtp_session_update @ 116 NONAME
pjmedia_session_check_dtmf @ 117 NONAME
pjmedia_session_create @ 118 NONAME
pjmedia_session_destroy @ 119 NONAME
pjmedia_session_dial_dtmf @ 120 NONAME
pjmedia_session_enum_streams @ 121 NONAME
pjmedia_session_get_dtmf @ 122 NONAME
pjmedia_session_get_info @ 123 NONAME
pjmedia_session_get_port @ 124 NONAME
pjmedia_session_get_stream_stat @ 125 NONAME
pjmedia_session_info_from_sdp @ 126 NONAME
pjmedia_session_pause @ 127 NONAME
pjmedia_session_pause_stream @ 128 NONAME
pjmedia_session_resume @ 129 NONAME
pjmedia_session_resume_stream @ 130 NONAME
pjmedia_session_set_dtmf_callback @ 131 NONAME
pjmedia_silence_det_apply @ 132 NONAME
pjmedia_silence_det_create @ 133 NONAME
pjmedia_silence_det_detect @ 134 NONAME
pjmedia_silence_det_disable @ 135 NONAME
pjmedia_silence_det_set_adaptive @ 136 NONAME
pjmedia_silence_det_set_fixed @ 137 NONAME
pjmedia_silence_det_set_name @ 138 NONAME
pjmedia_silence_det_set_params @ 139 NONAME
pjmedia_snd_port_connect @ 140 NONAME
pjmedia_snd_port_create @ 141 NONAME
pjmedia_snd_port_create_player @ 142 NONAME
pjmedia_snd_port_create_rec @ 143 NONAME
pjmedia_snd_port_destroy @ 144 NONAME
pjmedia_snd_port_disconnect @ 145 NONAME
pjmedia_snd_port_get_ec_tail @ 146 NONAME
pjmedia_snd_port_get_port @ 147 NONAME
pjmedia_snd_port_get_snd_stream @ 148 NONAME
pjmedia_snd_port_set_ec @ 149 NONAME
pjmedia_splitcomb_create @ 150 NONAME
pjmedia_splitcomb_create_rev_channel @ 151 NONAME
pjmedia_splitcomb_set_channel @ 152 NONAME
pjmedia_stream_check_dtmf @ 153 NONAME
pjmedia_stream_create @ 154 NONAME
pjmedia_stream_destroy @ 155 NONAME
pjmedia_stream_dial_dtmf @ 156 NONAME
pjmedia_stream_get_dtmf @ 157 NONAME
pjmedia_stream_get_port @ 158 NONAME
pjmedia_stream_get_stat @ 159 NONAME
pjmedia_stream_get_transport @ 160 NONAME
pjmedia_stream_info_from_sdp @ 161 NONAME
pjmedia_stream_pause @ 162 NONAME
pjmedia_stream_resume @ 163 NONAME
pjmedia_stream_set_dtmf_callback @ 164 NONAME
pjmedia_stream_start @ 165 NONAME
pjmedia_strerror @ 166 NONAME
pjmedia_tonegen_create @ 167 NONAME
pjmedia_tonegen_create2 @ 168 NONAME
pjmedia_tonegen_get_digit_map @ 169 NONAME
pjmedia_tonegen_is_busy @ 170 NONAME
pjmedia_tonegen_play @ 171 NONAME
pjmedia_tonegen_play_digits @ 172 NONAME
pjmedia_tonegen_set_digit_map @ 173 NONAME
pjmedia_tonegen_stop @ 174 NONAME
pjmedia_transport_udp_attach @ 175 NONAME
pjmedia_transport_udp_close @ 176 NONAME
pjmedia_transport_udp_create @ 177 NONAME
pjmedia_transport_udp_create2 @ 178 NONAME
pjmedia_transport_udp_create3 @ 179 NONAME
pjmedia_transport_udp_get_info @ 180 NONAME
pjmedia_transport_udp_simulate_lost @ 181 NONAME
pjmedia_wav_player_port_create @ 182 NONAME
pjmedia_wav_player_port_get_pos @ 183 NONAME
pjmedia_wav_player_port_set_pos @ 184 NONAME
pjmedia_wav_player_set_eof_cb @ 185 NONAME
pjmedia_wav_playlist_create @ 186 NONAME
pjmedia_wav_playlist_set_eof_cb @ 187 NONAME
pjmedia_wav_writer_port_create @ 188 NONAME
pjmedia_wav_writer_port_get_pos @ 189 NONAME
pjmedia_wav_writer_port_set_cb @ 190 NONAME
pjmedia_wave_hdr_file_to_host @ 191 NONAME
pjmedia_wave_hdr_host_to_file @ 192 NONAME

View file

@ -0,0 +1,33 @@
TARGET pjmedia_audiodev.lib
TARGETTYPE lib
SOURCEPATH ..\pjmedia\src\pjmedia-audiodev
//
// GCCE optimization setting
//
//OPTION GCCE -O2 -fno-unit-at-a-time
OPTION ARMCC --gnu
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
SOURCE audiodev.c
SOURCE errno.c
SOURCE symb_aps_dev.cpp
SOURCE symb_mda_dev.cpp
SOURCE symb_vas_dev.cpp
SOURCE null_dev.c
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjlib-util\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc
SYSTEMINCLUDE \epoc32\include\mmf\server
SYSTEMINCLUDE \epoc32\include\mmf\common
SYSTEMINCLUDE \epoc32\include\mda\common
SYSTEMINCLUDE \epoc32\include\mmf\plugin

View file

@ -0,0 +1,65 @@
#if defined(PJ_BUILD_DLL)
TARGET pjnath.dll
TARGETTYPE dll
UID 0x0 0xA0000005
CAPABILITY None
LIBRARY pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\pjnath.def
#else
TARGET pjnath.lib
TARGETTYPE lib
#endif
OPTION ARMCC --gnu
SOURCEPATH ..\pjnath\src\pjnath
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
//
// PJNATH files
//
SOURCE errno.c
SOURCE ice_session.c
SOURCE ice_strans.c
SOURCE nat_detect.c
SOURCE stun_auth.c
SOURCE stun_msg.c
SOURCE stun_msg_dump.c
SOURCE stun_session.c
SOURCE stun_sock.c
SOURCE stun_transaction.c
SOURCE turn_session.c
SOURCE turn_sock.c
//
// Include files
//
//DOCUMENT pjnath\config.h
//DOCUMENT pjnath\\errno.h
//DOCUMENT pjnath\\ice_session.h
//DOCUMENT pjnath\\ice_strans.h
//DOCUMENT pjnath\\stun_auth.h
//DOCUMENT pjnath\\stun_config.h
//DOCUMENT pjnath\\stun_msg.h
//DOCUMENT pjnath\\stun_session.h
//DOCUMENT pjnath\\stun_transaction.h
//DOCUMENT pjnath\\types.h
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjlib-util\include
SYSTEMINCLUDE ..\pjnath\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,88 @@
EXPORTS
pj_ice_calc_foundation @ 1 NONAME
pj_ice_get_cand_type_name @ 2 NONAME
pj_ice_sess_add_cand @ 3 NONAME
pj_ice_sess_change_role @ 4 NONAME
pj_ice_sess_create @ 5 NONAME
pj_ice_sess_create_check_list @ 6 NONAME
pj_ice_sess_destroy @ 7 NONAME
pj_ice_sess_find_default_cand @ 8 NONAME
pj_ice_sess_on_rx_pkt @ 9 NONAME
pj_ice_sess_send_data @ 10 NONAME
pj_ice_sess_set_prefs @ 11 NONAME
pj_ice_sess_start_check @ 12 NONAME
pj_ice_strans_add_cand @ 13 NONAME
pj_ice_strans_create @ 14 NONAME
pj_ice_strans_create_comp @ 15 NONAME
pj_ice_strans_destroy @ 16 NONAME
pj_ice_strans_enum_cands @ 17 NONAME
pj_ice_strans_get_comps_status @ 18 NONAME
pj_ice_strans_init_ice @ 19 NONAME
pj_ice_strans_sendto @ 20 NONAME
pj_ice_strans_set_stun_domain @ 21 NONAME
pj_ice_strans_set_stun_srv @ 22 NONAME
pj_ice_strans_start_ice @ 23 NONAME
pj_ice_strans_stop_ice @ 24 NONAME
pj_stun_auth_cred_dup @ 25 NONAME
pj_stun_auth_valid_for_msg @ 26 NONAME
pj_stun_authenticate_request @ 27 NONAME
pj_stun_authenticate_response @ 28 NONAME
pj_stun_binary_attr_create @ 29 NONAME
pj_stun_client_tsx_create @ 30 NONAME
pj_stun_client_tsx_destroy @ 31 NONAME
pj_stun_client_tsx_get_data @ 32 NONAME
pj_stun_client_tsx_is_complete @ 33 NONAME
pj_stun_client_tsx_on_rx_msg @ 34 NONAME
pj_stun_client_tsx_retransmit @ 35 NONAME
pj_stun_client_tsx_schedule_destroy @ 36 NONAME
pj_stun_client_tsx_send_msg @ 37 NONAME
pj_stun_client_tsx_set_data @ 38 NONAME
pj_stun_create_key @ 39 NONAME
pj_stun_detect_nat_type @ 40 NONAME
pj_stun_empty_attr_create @ 41 NONAME
pj_stun_errcode_attr_create @ 42 NONAME
pj_stun_get_attr_name @ 43 NONAME
pj_stun_get_class_name @ 44 NONAME
pj_stun_get_err_reason @ 45 NONAME
pj_stun_get_method_name @ 46 NONAME
pj_stun_get_nat_name @ 47 NONAME
pj_stun_msg_add_attr @ 48 NONAME
pj_stun_msg_add_binary_attr @ 49 NONAME
pj_stun_msg_add_empty_attr @ 50 NONAME
pj_stun_msg_add_errcode_attr @ 51 NONAME
pj_stun_msg_add_msgint_attr @ 52 NONAME
pj_stun_msg_add_sockaddr_attr @ 53 NONAME
pj_stun_msg_add_string_attr @ 54 NONAME
pj_stun_msg_add_uint64_attr @ 55 NONAME
pj_stun_msg_add_uint_attr @ 56 NONAME
pj_stun_msg_add_unknown_attr @ 57 NONAME
pj_stun_msg_check @ 58 NONAME
pj_stun_msg_create @ 59 NONAME
pj_stun_msg_create_response @ 60 NONAME
pj_stun_msg_decode @ 61 NONAME
pj_stun_msg_destroy_tdata @ 62 NONAME
pj_stun_msg_dump @ 63 NONAME
pj_stun_msg_encode @ 64 NONAME
pj_stun_msg_find_attr @ 65 NONAME
pj_stun_msgint_attr_create @ 66 NONAME
pj_stun_session_cancel_req @ 67 NONAME
pj_stun_session_create @ 68 NONAME
pj_stun_session_create_ind @ 69 NONAME
pj_stun_session_create_req @ 70 NONAME
pj_stun_session_create_res @ 71 NONAME
pj_stun_session_destroy @ 72 NONAME
pj_stun_session_get_user_data @ 73 NONAME
pj_stun_session_on_rx_pkt @ 74 NONAME
pj_stun_session_retransmit_req @ 75 NONAME
pj_stun_session_send_msg @ 76 NONAME
pj_stun_session_set_credential @ 77 NONAME
pj_stun_session_set_server_name @ 78 NONAME
pj_stun_session_set_user_data @ 79 NONAME
pj_stun_set_padding_char @ 80 NONAME
pj_stun_sockaddr_attr_create @ 81 NONAME
pj_stun_string_attr_create @ 82 NONAME
pj_stun_uint64_attr_create @ 83 NONAME
pj_stun_uint_attr_create @ 84 NONAME
pj_stun_unknown_attr_create @ 85 NONAME
pjnath_init @ 86 NONAME
pjnath_perror @ 87 NONAME

View file

@ -0,0 +1,386 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<?codewarrior exportversion="1.0" ideversion="5.5" success="y" ?>
<!DOCTYPE MWIDEWORKSPACE [
<!ELEMENT MWIDEWORKSPACE (WINDOW*, COMWINDOW*)>
<!ELEMENT WINDOW (SESSION, EDOCTYPE, PATH, FRAMELOC, FRAMESIZE, DOCKINFO)>
<!ELEMENT COMWINDOW (SESSION, CLSID, OWNERPROJECT, DATA, FRAMELOC, FRAMESIZE, DOCKINFO)>
<!ELEMENT SESSION (#PCDATA)>
<!ELEMENT EDOCTYPE (#PCDATA)>
<!ELEMENT DEFAULT (#PCDATA)>
<!ELEMENT MAXIMIZED (#PCDATA)>
<!ELEMENT PATH (#PCDATA)>
<!ATTLIST PATH USERELATIVEPATHS (true | false) "true">
<!ELEMENT FRAMELOC (X, Y)>
<!ELEMENT X (#PCDATA)>
<!ELEMENT Y (#PCDATA)>
<!ELEMENT FRAMESIZE (W, H)>
<!ELEMENT W (#PCDATA)>
<!ELEMENT H (#PCDATA)>
<!ELEMENT DOCKINFO (STATUS, ROW, COLUMN, DOCKBARID, PCTWIDTH, HGT, GROUPID)>
<!ELEMENT STATUS (#PCDATA)>
<!ELEMENT ROW (#PCDATA)>
<!ELEMENT COLUMN (#PCDATA)>
<!ELEMENT DOCKBARID (#PCDATA)>
<!ELEMENT PCTWIDTH (#PCDATA)>
<!ELEMENT HGT (#PCDATA)>
<!ELEMENT GROUPID (GIDHIGHPART, GIDLOWPART)>
<!ELEMENT GIDHIGHPART (#PCDATA)>
<!ELEMENT GIDLOWPART (#PCDATA)>
<!ELEMENT CLSID (#PCDATA)>
<!ELEMENT OWNERPROJECT (#PCDATA)>
<!ATTLIST OWNERPROJECT USERELATIVEPATHS (true | false) "true">
<!ELEMENT DATA (#PCDATA)>
<!ATTLIST DATA BINARYFORMAT (true | false) "true">
]>
<MWIDEWORKSPACE>
<WINDOW>
<SESSION>-1</SESSION>
<EDOCTYPE>0</EDOCTYPE>
<DEFAULT>true</DEFAULT>
<PATH USERELATIVEPATHS = "true">pjlib.mcp</PATH>
<FRAMELOC>
<X>0</X>
<Y>0</Y>
</FRAMELOC>
<FRAMESIZE>
<W>347</W>
<H>128</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>1</STATUS>
<ROW>0</ROW>
<COLUMN>0</COLUMN>
<DOCKBARID>59420</DOCKBARID>
<PCTWIDTH>1.000000</PCTWIDTH>
<HGT>350</HGT>
<GROUPID>
<GIDHIGHPART>4294967294</GIDHIGHPART>
<GIDLOWPART>4294967294</GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-1</SESSION>
<EDOCTYPE>0</EDOCTYPE>
<PATH USERELATIVEPATHS = "true">pjlib_util.mcp</PATH>
<FRAMELOC>
<X>0</X>
<Y>0</Y>
</FRAMELOC>
<FRAMESIZE>
<W>347</W>
<H>128</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>1</STATUS>
<ROW>0</ROW>
<COLUMN>0</COLUMN>
<DOCKBARID>59420</DOCKBARID>
<PCTWIDTH>1.000000</PCTWIDTH>
<HGT>350</HGT>
<GROUPID>
<GIDHIGHPART>4294967294</GIDHIGHPART>
<GIDLOWPART>4294967294</GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-1</SESSION>
<EDOCTYPE>0</EDOCTYPE>
<PATH USERELATIVEPATHS = "true">pjnath.mcp</PATH>
<FRAMELOC>
<X>0</X>
<Y>0</Y>
</FRAMELOC>
<FRAMESIZE>
<W>347</W>
<H>128</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>1</STATUS>
<ROW>0</ROW>
<COLUMN>0</COLUMN>
<DOCKBARID>59420</DOCKBARID>
<PCTWIDTH>1.000000</PCTWIDTH>
<HGT>350</HGT>
<GROUPID>
<GIDHIGHPART>4294967294</GIDHIGHPART>
<GIDLOWPART>4294967294</GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-1</SESSION>
<EDOCTYPE>0</EDOCTYPE>
<PATH USERELATIVEPATHS = "true">null_audio.mcp</PATH>
<FRAMELOC>
<X>0</X>
<Y>0</Y>
</FRAMELOC>
<FRAMESIZE>
<W>347</W>
<H>128</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>1</STATUS>
<ROW>0</ROW>
<COLUMN>0</COLUMN>
<DOCKBARID>59420</DOCKBARID>
<PCTWIDTH>1.000000</PCTWIDTH>
<HGT>350</HGT>
<GROUPID>
<GIDHIGHPART>4294967294</GIDHIGHPART>
<GIDLOWPART>4294967294</GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-1</SESSION>
<EDOCTYPE>0</EDOCTYPE>
<PATH USERELATIVEPATHS = "true">pjsdp.mcp</PATH>
<FRAMELOC>
<X>0</X>
<Y>0</Y>
</FRAMELOC>
<FRAMESIZE>
<W>347</W>
<H>128</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>1</STATUS>
<ROW>0</ROW>
<COLUMN>0</COLUMN>
<DOCKBARID>59420</DOCKBARID>
<PCTWIDTH>1.000000</PCTWIDTH>
<HGT>350</HGT>
<GROUPID>
<GIDHIGHPART>4294967294</GIDHIGHPART>
<GIDLOWPART>4294967294</GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-1</SESSION>
<EDOCTYPE>0</EDOCTYPE>
<PATH USERELATIVEPATHS = "true">pjmedia.mcp</PATH>
<FRAMELOC>
<X>0</X>
<Y>0</Y>
</FRAMELOC>
<FRAMESIZE>
<W>347</W>
<H>128</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>1</STATUS>
<ROW>0</ROW>
<COLUMN>0</COLUMN>
<DOCKBARID>59420</DOCKBARID>
<PCTWIDTH>1.000000</PCTWIDTH>
<HGT>350</HGT>
<GROUPID>
<GIDHIGHPART>4294967294</GIDHIGHPART>
<GIDLOWPART>4294967294</GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-1</SESSION>
<EDOCTYPE>0</EDOCTYPE>
<PATH USERELATIVEPATHS = "true">pjsip.mcp</PATH>
<FRAMELOC>
<X>0</X>
<Y>0</Y>
</FRAMELOC>
<FRAMESIZE>
<W>347</W>
<H>128</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>1</STATUS>
<ROW>0</ROW>
<COLUMN>0</COLUMN>
<DOCKBARID>59420</DOCKBARID>
<PCTWIDTH>1.000000</PCTWIDTH>
<HGT>350</HGT>
<GROUPID>
<GIDHIGHPART>4294967294</GIDHIGHPART>
<GIDLOWPART>4294967294</GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-1</SESSION>
<EDOCTYPE>0</EDOCTYPE>
<PATH USERELATIVEPATHS = "true">pjsip_simple.mcp</PATH>
<FRAMELOC>
<X>0</X>
<Y>0</Y>
</FRAMELOC>
<FRAMESIZE>
<W>347</W>
<H>128</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>1</STATUS>
<ROW>0</ROW>
<COLUMN>0</COLUMN>
<DOCKBARID>59420</DOCKBARID>
<PCTWIDTH>1.000000</PCTWIDTH>
<HGT>350</HGT>
<GROUPID>
<GIDHIGHPART>4294967294</GIDHIGHPART>
<GIDLOWPART>4294967294</GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-1</SESSION>
<EDOCTYPE>0</EDOCTYPE>
<PATH USERELATIVEPATHS = "true">pjsip_ua.mcp</PATH>
<FRAMELOC>
<X>0</X>
<Y>0</Y>
</FRAMELOC>
<FRAMESIZE>
<W>347</W>
<H>128</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>1</STATUS>
<ROW>0</ROW>
<COLUMN>0</COLUMN>
<DOCKBARID>59420</DOCKBARID>
<PCTWIDTH>1.000000</PCTWIDTH>
<HGT>350</HGT>
<GROUPID>
<GIDHIGHPART>4294967294</GIDHIGHPART>
<GIDLOWPART>4294967294</GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-1</SESSION>
<EDOCTYPE>0</EDOCTYPE>
<PATH USERELATIVEPATHS = "true">pjsua_lib.mcp</PATH>
<FRAMELOC>
<X>0</X>
<Y>0</Y>
</FRAMELOC>
<FRAMESIZE>
<W>347</W>
<H>128</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>1</STATUS>
<ROW>0</ROW>
<COLUMN>0</COLUMN>
<DOCKBARID>59420</DOCKBARID>
<PCTWIDTH>1.000000</PCTWIDTH>
<HGT>350</HGT>
<GROUPID>
<GIDHIGHPART>4294967294</GIDHIGHPART>
<GIDLOWPART>4294967294</GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-1</SESSION>
<EDOCTYPE>0</EDOCTYPE>
<PATH USERELATIVEPATHS = "true">symbian_ua.mcp</PATH>
<FRAMELOC>
<X>0</X>
<Y>0</Y>
</FRAMELOC>
<FRAMESIZE>
<W>347</W>
<H>128</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>1</STATUS>
<ROW>0</ROW>
<COLUMN>0</COLUMN>
<DOCKBARID>59420</DOCKBARID>
<PCTWIDTH>1.000000</PCTWIDTH>
<HGT>350</HGT>
<GROUPID>
<GIDHIGHPART>4294967294</GIDHIGHPART>
<GIDLOWPART>4294967294</GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-2147483648</SESSION>
<EDOCTYPE>20</EDOCTYPE>
<FRAMELOC>
<X>4</X>
<Y>23</Y>
</FRAMELOC>
<FRAMESIZE>
<W>1464</W>
<H>3681</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>0</STATUS>
<ROW></ROW>
<COLUMN></COLUMN>
<DOCKBARID></DOCKBARID>
<PCTWIDTH></PCTWIDTH>
<HGT></HGT>
<GROUPID>
<GIDHIGHPART></GIDHIGHPART>
<GIDLOWPART></GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-2147483648</SESSION>
<EDOCTYPE>36</EDOCTYPE>
<FRAMELOC>
<X>4</X>
<Y>23</Y>
</FRAMELOC>
<FRAMESIZE>
<W>366</W>
<H>354</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>0</STATUS>
<ROW></ROW>
<COLUMN></COLUMN>
<DOCKBARID></DOCKBARID>
<PCTWIDTH></PCTWIDTH>
<HGT></HGT>
<GROUPID>
<GIDHIGHPART></GIDHIGHPART>
<GIDLOWPART></GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
<WINDOW>
<SESSION>-2147483648</SESSION>
<EDOCTYPE>23</EDOCTYPE>
<FRAMELOC>
<X>6</X>
<Y>81</Y>
</FRAMELOC>
<FRAMESIZE>
<W>566</W>
<H>477</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>0</STATUS>
<ROW></ROW>
<COLUMN></COLUMN>
<DOCKBARID></DOCKBARID>
<PCTWIDTH></PCTWIDTH>
<HGT></HGT>
<GROUPID>
<GIDHIGHPART></GIDHIGHPART>
<GIDLOWPART></GIDLOWPART>
</GROUPID>
</DOCKINFO>
</WINDOW>
</MWIDEWORKSPACE>

View file

@ -0,0 +1,46 @@
#if defined(PJ_BUILD_DLL)
TARGET pjsdp.dll
TARGETTYPE dll
UID 0x0 0xA0000006
CAPABILITY None
LIBRARY pjlib_util.lib pjlib.lib charconv.lib euser.lib estlib.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\pjsdp.def
#else
TARGET pjsdp.lib
TARGETTYPE lib
#endif
SOURCEPATH ..\pjmedia\src\pjmedia
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
// Must compile as C++, otherwise exception would not work
OPTION CW -lang c++
OPTION ARMCC --cpp --gnu
OPTION GCC -x c++
OPTION GCCE -x c++
//
// Platform independent source
//
SOURCE errno.c
SOURCE sdp_wrap.cpp
SOURCE sdp_cmp.c
SOURCE sdp_neg.c
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjlib-util\include
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,45 @@
EXPORTS
pjmedia_sdp_attr_add @ 1 NONAME
pjmedia_sdp_attr_clone @ 2 NONAME
pjmedia_sdp_attr_create @ 3 NONAME
pjmedia_sdp_attr_find @ 4 NONAME
pjmedia_sdp_attr_find2 @ 5 NONAME
pjmedia_sdp_attr_get_fmtp @ 6 NONAME
pjmedia_sdp_attr_get_rtcp @ 7 NONAME
pjmedia_sdp_attr_get_rtpmap @ 8 NONAME
pjmedia_sdp_attr_remove @ 9 NONAME
pjmedia_sdp_attr_remove_all @ 10 NONAME
pjmedia_sdp_attr_to_rtpmap @ 11 NONAME
pjmedia_sdp_conn_clone @ 12 NONAME
pjmedia_sdp_media_add_attr @ 13 NONAME
pjmedia_sdp_media_clone @ 14 NONAME
pjmedia_sdp_media_cmp @ 15 NONAME
pjmedia_sdp_media_find_attr @ 16 NONAME
pjmedia_sdp_media_find_attr2 @ 17 NONAME
pjmedia_sdp_media_remove_all_attr @ 18 NONAME
pjmedia_sdp_media_remove_attr @ 19 NONAME
pjmedia_sdp_neg_cancel_offer @ 20 NONAME
pjmedia_sdp_neg_create_w_local_offer @ 21 NONAME
pjmedia_sdp_neg_create_w_remote_offer @ 22 NONAME
pjmedia_sdp_neg_get_active_local @ 23 NONAME
pjmedia_sdp_neg_get_active_remote @ 24 NONAME
pjmedia_sdp_neg_get_neg_local @ 25 NONAME
pjmedia_sdp_neg_get_neg_remote @ 26 NONAME
pjmedia_sdp_neg_get_state @ 27 NONAME
pjmedia_sdp_neg_has_local_answer @ 28 NONAME
pjmedia_sdp_neg_modify_local_offer @ 29 NONAME
pjmedia_sdp_neg_negotiate @ 30 NONAME
pjmedia_sdp_neg_send_local_offer @ 31 NONAME
pjmedia_sdp_neg_set_local_answer @ 32 NONAME
pjmedia_sdp_neg_set_prefer_remote_codec_order @ 33 NONAME
pjmedia_sdp_neg_set_remote_answer @ 34 NONAME
pjmedia_sdp_neg_set_remote_offer @ 35 NONAME
pjmedia_sdp_neg_state_str @ 36 NONAME
pjmedia_sdp_neg_was_answer_remote @ 37 NONAME
pjmedia_sdp_parse @ 38 NONAME
pjmedia_sdp_print @ 39 NONAME
pjmedia_sdp_rtpmap_to_attr @ 40 NONAME
pjmedia_sdp_session_clone @ 41 NONAME
pjmedia_sdp_session_cmp @ 42 NONAME
pjmedia_sdp_validate @ 43 NONAME
pjmedia_strerror @ 44 NONAME

View file

@ -0,0 +1,69 @@
#if defined(PJ_BUILD_DLL)
TARGET pjsip.dll
TARGETTYPE dll
UID 0x0 0xA0000007
CAPABILITY None
LIBRARY pjsdp.lib pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\pjsip.def
#else
TARGET pjsip.lib
TARGETTYPE lib
#endif
SOURCEPATH ..\pjsip\src\pjsip
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
// Must compile as C++, otherwise exception would not work
OPTION CW -lang c++
OPTION ARMCC --cpp --gnu
OPTION GCC -x c++
OPTION GCCE -x c++
// PJSIP-CORE files
//SOURCE sip_auth_aka.c
SOURCE sip_auth_client.c
SOURCE sip_auth_msg.c
SOURCE sip_auth_parser_wrap.cpp
SOURCE sip_auth_server.c
SOURCE sip_config.c
SOURCE sip_dialog_wrap.cpp
SOURCE sip_endpoint_wrap.cpp
SOURCE sip_errno.c
SOURCE sip_msg.c
SOURCE sip_multipart.c
SOURCE sip_parser_wrap.cpp
SOURCE sip_resolve.c
SOURCE sip_tel_uri_wrap.cpp
SOURCE sip_transaction.c
SOURCE sip_transport_wrap.cpp
SOURCE sip_transport_loop.c
SOURCE sip_transport_tcp.c
SOURCE sip_transport_udp.c
SOURCE sip_transport_tls.c
SOURCE sip_ua_layer.c
SOURCE sip_uri.c
SOURCE sip_util_wrap.cpp
SOURCE sip_util_proxy_wrap.cpp
SOURCE sip_util_statefull.c
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjlib-util\include
SYSTEMINCLUDE ..\pjsip\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,280 @@
EXPORTS
pjsip_accept_hdr_create @ 1 NONAME
pjsip_accept_hdr_init @ 2 NONAME
pjsip_ack_method @ 3 NONAME
pjsip_allow_hdr_create @ 4 NONAME
pjsip_allow_hdr_init @ 5 NONAME
pjsip_auth_clt_clone @ 6 NONAME
pjsip_auth_clt_get_prefs @ 7 NONAME
pjsip_auth_clt_init @ 8 NONAME
pjsip_auth_clt_init_req @ 9 NONAME
pjsip_auth_clt_reinit_req @ 10 NONAME
pjsip_auth_clt_set_credentials @ 11 NONAME
pjsip_auth_clt_set_prefs @ 12 NONAME
pjsip_auth_create_digest @ 13 NONAME
pjsip_auth_deinit_parser @ 14 NONAME
pjsip_auth_init_parser @ 15 NONAME
pjsip_auth_srv_challenge @ 16 NONAME
pjsip_auth_srv_init @ 17 NONAME
pjsip_auth_srv_verify @ 18 NONAME
pjsip_authorization_hdr_create @ 19 NONAME
pjsip_bye_method @ 20 NONAME
pjsip_calculate_branch_id @ 21 NONAME
pjsip_cancel_method @ 22 NONAME
pjsip_cid_hdr_create @ 23 NONAME
pjsip_cid_hdr_init @ 24 NONAME
pjsip_clen_hdr_create @ 25 NONAME
pjsip_clen_hdr_init @ 26 NONAME
pjsip_clone_text_data @ 27 NONAME
pjsip_concat_param_imp @ 28 NONAME
pjsip_contact_hdr_create @ 29 NONAME
pjsip_contact_hdr_init @ 30 NONAME
pjsip_cred_info_dup @ 31 NONAME
pjsip_cseq_hdr_create @ 32 NONAME
pjsip_cseq_hdr_init @ 33 NONAME
pjsip_ctype_hdr_create @ 34 NONAME
pjsip_ctype_hdr_init @ 35 NONAME
pjsip_dlg_add_usage @ 36 NONAME
pjsip_dlg_create_request @ 37 NONAME
pjsip_dlg_create_response @ 38 NONAME
pjsip_dlg_create_uac @ 39 NONAME
pjsip_dlg_create_uas @ 40 NONAME
pjsip_dlg_dec_lock @ 41 NONAME
pjsip_dlg_dec_session @ 42 NONAME
pjsip_dlg_fork @ 43 NONAME
pjsip_dlg_get_mod_data @ 44 NONAME
pjsip_dlg_inc_lock @ 45 NONAME
pjsip_dlg_inc_session @ 46 NONAME
pjsip_dlg_modify_response @ 47 NONAME
pjsip_dlg_respond @ 48 NONAME
pjsip_dlg_send_request @ 49 NONAME
pjsip_dlg_send_response @ 50 NONAME
pjsip_dlg_set_mod_data @ 51 NONAME
pjsip_dlg_set_route_set @ 52 NONAME
pjsip_dlg_set_transport @ 53 NONAME
pjsip_dlg_terminate @ 54 NONAME
pjsip_dlg_try_inc_lock @ 55 NONAME
pjsip_endpt_acquire_transport @ 56 NONAME
pjsip_endpt_add_capability @ 57 NONAME
pjsip_endpt_cancel_timer @ 58 NONAME
pjsip_endpt_create @ 59 NONAME
pjsip_endpt_create_ack @ 60 NONAME
pjsip_endpt_create_cancel @ 61 NONAME
pjsip_endpt_create_pool @ 62 NONAME
pjsip_endpt_create_request @ 63 NONAME
pjsip_endpt_create_request_from_hdr @ 64 NONAME
pjsip_endpt_create_request_fwd @ 65 NONAME
pjsip_endpt_create_resolver @ 66 NONAME
pjsip_endpt_create_response @ 67 NONAME
pjsip_endpt_create_response_fwd @ 68 NONAME
pjsip_endpt_create_tdata @ 69 NONAME
pjsip_endpt_destroy @ 70 NONAME
pjsip_endpt_dump @ 71 NONAME
pjsip_endpt_get_capability @ 72 NONAME
pjsip_endpt_get_ioqueue @ 73 NONAME
pjsip_endpt_get_request_headers @ 74 NONAME
pjsip_endpt_get_resolver @ 75 NONAME
pjsip_endpt_get_timer_heap @ 76 NONAME
pjsip_endpt_get_tpmgr @ 77 NONAME
pjsip_endpt_handle_events @ 78 NONAME
pjsip_endpt_handle_events2 @ 79 NONAME
pjsip_endpt_has_capability @ 80 NONAME
pjsip_endpt_log_error @ 81 NONAME
pjsip_endpt_name @ 82 NONAME
pjsip_endpt_register_module @ 83 NONAME
pjsip_endpt_release_pool @ 84 NONAME
pjsip_endpt_resolve @ 85 NONAME
pjsip_endpt_respond @ 86 NONAME
pjsip_endpt_respond_stateless @ 87 NONAME
pjsip_endpt_schedule_timer @ 88 NONAME
pjsip_endpt_send_raw @ 89 NONAME
pjsip_endpt_send_raw_to_uri @ 90 NONAME
pjsip_endpt_send_request @ 91 NONAME
pjsip_endpt_send_request_stateless @ 92 NONAME
pjsip_endpt_send_response @ 93 NONAME
pjsip_endpt_send_response2 @ 94 NONAME
pjsip_endpt_set_resolver @ 95 NONAME
pjsip_endpt_unregister_module @ 96 NONAME
pjsip_event_str @ 97 NONAME
pjsip_expires_hdr_create @ 98 NONAME
pjsip_expires_hdr_init @ 99 NONAME
pjsip_find_msg @ 100 NONAME
pjsip_from_hdr_create @ 101 NONAME
pjsip_from_hdr_init @ 102 NONAME
pjsip_fromto_hdr_set_from @ 103 NONAME
pjsip_fromto_hdr_set_to @ 104 NONAME
pjsip_generic_array_hdr_create @ 105 NONAME
pjsip_generic_array_hdr_init @ 106 NONAME
pjsip_generic_int_hdr_create @ 107 NONAME
pjsip_generic_int_hdr_init @ 108 NONAME
pjsip_generic_string_hdr_create @ 109 NONAME
pjsip_generic_string_hdr_init @ 110 NONAME
pjsip_generic_string_hdr_init2 @ 111 NONAME
pjsip_get_ack_method @ 112 NONAME
pjsip_get_bye_method @ 113 NONAME
pjsip_get_cancel_method @ 114 NONAME
pjsip_get_invite_method @ 115 NONAME
pjsip_get_options_method @ 116 NONAME
pjsip_get_register_method @ 117 NONAME
pjsip_get_request_dest @ 118 NONAME
pjsip_get_response_addr @ 119 NONAME
pjsip_get_status_text @ 120 NONAME
pjsip_hdr_clone @ 121 NONAME
pjsip_hdr_print_on @ 122 NONAME
pjsip_hdr_shallow_clone @ 123 NONAME
pjsip_invite_method @ 124 NONAME
pjsip_loop_set_delay @ 125 NONAME
pjsip_loop_set_discard @ 126 NONAME
pjsip_loop_set_failure @ 127 NONAME
pjsip_loop_set_recv_delay @ 128 NONAME
pjsip_loop_set_send_callback_delay @ 129 NONAME
pjsip_loop_start @ 130 NONAME
pjsip_max_fwd_hdr_create @ 131 NONAME
pjsip_max_fwd_hdr_init @ 132 NONAME
pjsip_method_cmp @ 133 NONAME
pjsip_method_copy @ 134 NONAME
pjsip_method_creates_dialog @ 135 NONAME
pjsip_method_init @ 136 NONAME
pjsip_method_init_np @ 137 NONAME
pjsip_method_set @ 138 NONAME
pjsip_min_expires_hdr_create @ 139 NONAME
pjsip_min_expires_hdr_init @ 140 NONAME
pjsip_msg_body_clone @ 141 NONAME
pjsip_msg_body_copy @ 142 NONAME
pjsip_msg_body_create @ 143 NONAME
pjsip_msg_clone @ 144 NONAME
pjsip_msg_create @ 145 NONAME
pjsip_msg_find_hdr @ 146 NONAME
pjsip_msg_find_hdr_by_name @ 147 NONAME
pjsip_msg_find_remove_hdr @ 148 NONAME
pjsip_msg_print @ 149 NONAME
pjsip_name_addr_assign @ 150 NONAME
pjsip_name_addr_create @ 151 NONAME
pjsip_name_addr_init @ 152 NONAME
pjsip_options_method @ 153 NONAME
pjsip_param_cfind @ 154 NONAME
pjsip_param_clone @ 155 NONAME
pjsip_param_find @ 156 NONAME
pjsip_param_print_on @ 157 NONAME
pjsip_param_shallow_clone @ 158 NONAME
pjsip_parse_end_hdr_imp @ 159 NONAME
pjsip_parse_hdr @ 160 NONAME
pjsip_parse_msg @ 161 NONAME
pjsip_parse_param_imp @ 162 NONAME
pjsip_parse_rdata @ 163 NONAME
pjsip_parse_status_line @ 164 NONAME
pjsip_parse_uri @ 165 NONAME
pjsip_parse_uri_param_imp @ 166 NONAME
pjsip_parser_const @ 167 NONAME
pjsip_print_text_body @ 168 NONAME
pjsip_process_route_set @ 169 NONAME
pjsip_proxy_authenticate_hdr_create @ 170 NONAME
pjsip_proxy_authorization_hdr_create @ 171 NONAME
pjsip_rdata_get_dlg @ 172 NONAME
pjsip_rdata_get_tsx @ 173 NONAME
pjsip_register_hdr_parser @ 174 NONAME
pjsip_register_method @ 175 NONAME
pjsip_register_uri_parser @ 176 NONAME
pjsip_require_hdr_create @ 177 NONAME
pjsip_require_hdr_init @ 178 NONAME
pjsip_resolve @ 179 NONAME
pjsip_resolver_create @ 180 NONAME
pjsip_resolver_destroy @ 181 NONAME
pjsip_resolver_get_resolver @ 182 NONAME
pjsip_resolver_set_resolver @ 183 NONAME
pjsip_retry_after_hdr_create @ 184 NONAME
pjsip_retry_after_hdr_init @ 185 NONAME
pjsip_role_name @ 186 NONAME
pjsip_route_hdr_create @ 187 NONAME
pjsip_route_hdr_init @ 188 NONAME
pjsip_routing_hdr_set_route @ 189 NONAME
pjsip_routing_hdr_set_rr @ 190 NONAME
pjsip_rr_hdr_create @ 191 NONAME
pjsip_rr_hdr_init @ 192 NONAME
pjsip_rx_data_get_info @ 193 NONAME
pjsip_sip_uri_assign @ 194 NONAME
pjsip_sip_uri_create @ 195 NONAME
pjsip_sip_uri_init @ 196 NONAME
pjsip_sip_uri_set_secure @ 197 NONAME
pjsip_strerror @ 198 NONAME
pjsip_supported_hdr_create @ 199 NONAME
pjsip_supported_hdr_init @ 200 NONAME
pjsip_tcp_transport_start @ 201 NONAME
pjsip_tcp_transport_start2 @ 202 NONAME
pjsip_tel_nb_cmp @ 203 NONAME
pjsip_tel_uri_create @ 204 NONAME
pjsip_to_hdr_create @ 205 NONAME
pjsip_to_hdr_init @ 206 NONAME
pjsip_tpmgr_acquire_transport @ 207 NONAME
pjsip_tpmgr_create @ 208 NONAME
pjsip_tpmgr_destroy @ 209 NONAME
pjsip_tpmgr_dump_transports @ 210 NONAME
pjsip_tpmgr_find_local_addr @ 211 NONAME
pjsip_tpmgr_get_transport_count @ 212 NONAME
pjsip_tpmgr_receive_packet @ 213 NONAME
pjsip_tpmgr_register_tpfactory @ 214 NONAME
pjsip_tpmgr_send_raw @ 215 NONAME
pjsip_tpmgr_unregister_tpfactory @ 216 NONAME
pjsip_tpselector_add_ref @ 217 NONAME
pjsip_tpselector_dec_ref @ 218 NONAME
pjsip_transport_add_ref @ 219 NONAME
pjsip_transport_dec_ref @ 220 NONAME
pjsip_transport_destroy @ 221 NONAME
pjsip_transport_get_default_port_for_type @ 222 NONAME
pjsip_transport_get_flag_from_type @ 223 NONAME
pjsip_transport_get_type_desc @ 224 NONAME
pjsip_transport_get_type_from_flag @ 225 NONAME
pjsip_transport_get_type_from_name @ 226 NONAME
pjsip_transport_get_type_name @ 227 NONAME
pjsip_transport_register @ 228 NONAME
pjsip_transport_register_type @ 229 NONAME
pjsip_transport_send @ 230 NONAME
pjsip_transport_shutdown @ 231 NONAME
pjsip_transport_type_get_af @ 232 NONAME
pjsip_tsx_create_key @ 233 NONAME
pjsip_tsx_create_uac @ 234 NONAME
pjsip_tsx_create_uas @ 235 NONAME
pjsip_tsx_get_dlg @ 236 NONAME
pjsip_tsx_layer_destroy @ 237 NONAME
pjsip_tsx_layer_dump @ 238 NONAME
pjsip_tsx_layer_find_tsx @ 239 NONAME
pjsip_tsx_layer_get_tsx_count @ 240 NONAME
pjsip_tsx_layer_init_module @ 241 NONAME
pjsip_tsx_layer_instance @ 242 NONAME
pjsip_tsx_recv_msg @ 243 NONAME
pjsip_tsx_retransmit_no_state @ 244 NONAME
pjsip_tsx_send_msg @ 245 NONAME
pjsip_tsx_set_transport @ 246 NONAME
pjsip_tsx_state_str @ 247 NONAME
pjsip_tsx_stop_retransmit @ 248 NONAME
pjsip_tsx_terminate @ 249 NONAME
pjsip_tx_data_add_ref @ 250 NONAME
pjsip_tx_data_create @ 251 NONAME
pjsip_tx_data_dec_ref @ 252 NONAME
pjsip_tx_data_get_info @ 253 NONAME
pjsip_tx_data_invalidate_msg @ 254 NONAME
pjsip_tx_data_is_valid @ 255 NONAME
pjsip_tx_data_set_transport @ 256 NONAME
pjsip_ua_destroy @ 257 NONAME
pjsip_ua_dump @ 258 NONAME
pjsip_ua_find_dialog @ 259 NONAME
pjsip_ua_get_dlg_set_count @ 260 NONAME
pjsip_ua_get_endpt @ 261 NONAME
pjsip_ua_init_module @ 262 NONAME
pjsip_ua_instance @ 263 NONAME
pjsip_ua_register_dlg @ 264 NONAME
pjsip_ua_unregister_dlg @ 265 NONAME
pjsip_udp_transport_attach @ 266 NONAME
pjsip_udp_transport_attach2 @ 267 NONAME
pjsip_udp_transport_get_socket @ 268 NONAME
pjsip_udp_transport_pause @ 269 NONAME
pjsip_udp_transport_restart @ 270 NONAME
pjsip_udp_transport_start @ 271 NONAME
pjsip_udp_transport_start6 @ 272 NONAME
pjsip_unsupported_hdr_create @ 273 NONAME
pjsip_unsupported_hdr_init @ 274 NONAME
pjsip_via_hdr_create @ 275 NONAME
pjsip_via_hdr_init @ 276 NONAME
pjsip_warning_hdr_create @ 277 NONAME
pjsip_warning_hdr_create_from_status @ 278 NONAME
pjsip_www_authenticate_hdr_create @ 279 NONAME

View file

@ -0,0 +1,54 @@
#if defined(PJ_BUILD_DLL)
TARGET pjsip_simple.dll
TARGETTYPE dll
UID 0x0 0xA0000008
CAPABILITY None
LIBRARY pjsip.lib pjsdp.lib pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\pjsip_simple.def
#else
TARGET pjsip_simple.lib
TARGETTYPE lib
#endif
SOURCEPATH ..\pjsip\src\pjsip-simple
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
// Must compile as C++, otherwise exception would not work
OPTION CW -lang c++
OPTION ARMCC --cpp --gnu
OPTION GCC -x c++
OPTION GCCE -x c++
// PJSIP-SIMPLE files
SOURCE errno.c
SOURCE evsub.c
SOURCE evsub_msg.c
SOURCE iscomposing.c
SOURCE mwi.c
SOURCE pidf.c
SOURCE presence.c
SOURCE presence_body.c
SOURCE publishc.c
SOURCE rpid.c
SOURCE xpidf.c
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjlib-util\include
SYSTEMINCLUDE ..\pjsip\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,96 @@
EXPORTS
pjpidf_create @ 1 NONAME
pjpidf_parse @ 2 NONAME
pjpidf_pres_add_note @ 3 NONAME
pjpidf_pres_add_tuple @ 4 NONAME
pjpidf_pres_construct @ 5 NONAME
pjpidf_pres_find_tuple @ 6 NONAME
pjpidf_pres_get_first_note @ 7 NONAME
pjpidf_pres_get_first_tuple @ 8 NONAME
pjpidf_pres_get_next_note @ 9 NONAME
pjpidf_pres_get_next_tuple @ 10 NONAME
pjpidf_pres_remove_tuple @ 11 NONAME
pjpidf_print @ 12 NONAME
pjpidf_status_construct @ 13 NONAME
pjpidf_status_is_basic_open @ 14 NONAME
pjpidf_status_set_basic_open @ 15 NONAME
pjpidf_tuple_add_note @ 16 NONAME
pjpidf_tuple_construct @ 17 NONAME
pjpidf_tuple_get_contact @ 18 NONAME
pjpidf_tuple_get_contact_prio @ 19 NONAME
pjpidf_tuple_get_first_note @ 20 NONAME
pjpidf_tuple_get_id @ 21 NONAME
pjpidf_tuple_get_next_note @ 22 NONAME
pjpidf_tuple_get_status @ 23 NONAME
pjpidf_tuple_get_timestamp @ 24 NONAME
pjpidf_tuple_set_contact @ 25 NONAME
pjpidf_tuple_set_contact_prio @ 26 NONAME
pjpidf_tuple_set_id @ 27 NONAME
pjpidf_tuple_set_timestamp @ 28 NONAME
pjpidf_tuple_set_timestamp_np @ 29 NONAME
pjrpid_add_element @ 30 NONAME
pjrpid_element_dup @ 31 NONAME
pjrpid_get_element @ 32 NONAME
pjsip_allow_events_hdr_create @ 33 NONAME
pjsip_event_hdr_create @ 34 NONAME
pjsip_evsub_accept @ 35 NONAME
pjsip_evsub_create_uac @ 36 NONAME
pjsip_evsub_create_uas @ 37 NONAME
pjsip_evsub_current_notify @ 38 NONAME
pjsip_evsub_get_allow_events_hdr @ 39 NONAME
pjsip_evsub_get_mod_data @ 40 NONAME
pjsip_evsub_get_state @ 41 NONAME
pjsip_evsub_get_state_name @ 42 NONAME
pjsip_evsub_init_module @ 43 NONAME
pjsip_evsub_init_parser @ 44 NONAME
pjsip_evsub_initiate @ 45 NONAME
pjsip_evsub_instance @ 46 NONAME
pjsip_evsub_notify @ 47 NONAME
pjsip_evsub_register_pkg @ 48 NONAME
pjsip_evsub_send_request @ 49 NONAME
pjsip_evsub_set_mod_data @ 50 NONAME
pjsip_evsub_terminate @ 51 NONAME
pjsip_get_notify_method @ 52 NONAME
pjsip_get_subscribe_method @ 53 NONAME
pjsip_iscomposing_create_body @ 54 NONAME
pjsip_iscomposing_create_xml @ 55 NONAME
pjsip_iscomposing_parse @ 56 NONAME
pjsip_notify_method @ 57 NONAME
pjsip_pres_accept @ 58 NONAME
pjsip_pres_create_pidf @ 59 NONAME
pjsip_pres_create_uac @ 60 NONAME
pjsip_pres_create_uas @ 61 NONAME
pjsip_pres_create_xpidf @ 62 NONAME
pjsip_pres_current_notify @ 63 NONAME
pjsip_pres_get_status @ 64 NONAME
pjsip_pres_init_module @ 65 NONAME
pjsip_pres_initiate @ 66 NONAME
pjsip_pres_instance @ 67 NONAME
pjsip_pres_notify @ 68 NONAME
pjsip_pres_parse_pidf @ 69 NONAME
pjsip_pres_parse_xpidf @ 70 NONAME
pjsip_pres_send_request @ 71 NONAME
pjsip_pres_set_status @ 72 NONAME
pjsip_pres_terminate @ 73 NONAME
pjsip_publishc_create @ 74 NONAME
pjsip_publishc_destroy @ 75 NONAME
pjsip_publishc_get_pool @ 76 NONAME
pjsip_publishc_init @ 77 NONAME
pjsip_publishc_init_module @ 78 NONAME
pjsip_publishc_publish @ 79 NONAME
pjsip_publishc_send @ 80 NONAME
pjsip_publishc_set_credentials @ 81 NONAME
pjsip_publishc_set_route_set @ 82 NONAME
pjsip_publishc_unpublish @ 83 NONAME
pjsip_publishc_update_expires @ 84 NONAME
pjsip_sub_state_hdr_create @ 85 NONAME
pjsip_subscribe_method @ 86 NONAME
pjsip_tsx_get_evsub @ 87 NONAME
pjsipsimple_strerror @ 88 NONAME
pjxpidf_create @ 89 NONAME
pjxpidf_get_status @ 90 NONAME
pjxpidf_get_uri @ 91 NONAME
pjxpidf_parse @ 92 NONAME
pjxpidf_print @ 93 NONAME
pjxpidf_set_status @ 94 NONAME
pjxpidf_set_uri @ 95 NONAME

View file

@ -0,0 +1,52 @@
#if defined(PJ_BUILD_DLL)
TARGET pjsip_ua.dll
TARGETTYPE dll
UID 0x0 0xA0000009
CAPABILITY None
LIBRARY pjsip_simple.lib pjsip.lib pjsdp.lib pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\pjsip_ua.def
#else
TARGET pjsip_ua.lib
TARGETTYPE lib
#endif
SOURCEPATH ..\pjsip\src\pjsip-ua
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
// Must compile as C++, otherwise exception would not work
OPTION CW -lang c++
OPTION ARMCC --cpp --gnu
OPTION GCC -x c++
OPTION GCCE -x c++
// PJSIP-UA files
SOURCE sip_inv.c
SOURCE sip_reg.c
SOURCE sip_replaces.c
SOURCE sip_xfer.c
SOURCE sip_100rel.c
SOURCE sip_timer.c
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjlib-util\include
SYSTEMINCLUDE ..\pjsip\include
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,58 @@
EXPORTS
pjsip_100rel_attach @ 1 NONAME
pjsip_100rel_create_prack @ 2 NONAME
pjsip_100rel_end_session @ 3 NONAME
pjsip_100rel_init_module @ 4 NONAME
pjsip_100rel_is_reliable @ 5 NONAME
pjsip_100rel_on_rx_prack @ 6 NONAME
pjsip_100rel_send_prack @ 7 NONAME
pjsip_100rel_tx_response @ 8 NONAME
pjsip_create_sdp_body @ 9 NONAME
pjsip_dlg_get_inv_session @ 10 NONAME
pjsip_get_prack_method @ 11 NONAME
pjsip_get_refer_method @ 12 NONAME
pjsip_inv_answer @ 13 NONAME
pjsip_inv_create_ack @ 14 NONAME
pjsip_inv_create_uac @ 15 NONAME
pjsip_inv_create_uas @ 16 NONAME
pjsip_inv_end_session @ 17 NONAME
pjsip_inv_initial_answer @ 18 NONAME
pjsip_inv_invite @ 19 NONAME
pjsip_inv_reinvite @ 20 NONAME
pjsip_inv_send_msg @ 21 NONAME
pjsip_inv_set_sdp_answer @ 22 NONAME
pjsip_inv_state_name @ 23 NONAME
pjsip_inv_terminate @ 24 NONAME
pjsip_inv_update @ 25 NONAME
pjsip_inv_usage_init @ 26 NONAME
pjsip_inv_usage_instance @ 27 NONAME
pjsip_inv_verify_request @ 28 NONAME
pjsip_prack_method @ 29 NONAME
pjsip_refer_method @ 30 NONAME
pjsip_regc_add_headers @ 31 NONAME
pjsip_regc_create @ 32 NONAME
pjsip_regc_destroy @ 33 NONAME
pjsip_regc_get_info @ 34 NONAME
pjsip_regc_get_pool @ 35 NONAME
pjsip_regc_init @ 36 NONAME
pjsip_regc_register @ 37 NONAME
pjsip_regc_send @ 38 NONAME
pjsip_regc_set_credentials @ 39 NONAME
pjsip_regc_set_prefs @ 40 NONAME
pjsip_regc_set_route_set @ 41 NONAME
pjsip_regc_set_transport @ 42 NONAME
pjsip_regc_unregister @ 43 NONAME
pjsip_regc_unregister_all @ 44 NONAME
pjsip_regc_update_contact @ 45 NONAME
pjsip_regc_update_expires @ 46 NONAME
pjsip_replaces_hdr_create @ 47 NONAME
pjsip_replaces_init_module @ 48 NONAME
pjsip_replaces_verify_request @ 49 NONAME
pjsip_xfer_accept @ 50 NONAME
pjsip_xfer_create_uac @ 51 NONAME
pjsip_xfer_create_uas @ 52 NONAME
pjsip_xfer_current_notify @ 53 NONAME
pjsip_xfer_init_module @ 54 NONAME
pjsip_xfer_initiate @ 55 NONAME
pjsip_xfer_notify @ 56 NONAME
pjsip_xfer_send_request @ 57 NONAME

View file

@ -0,0 +1,41 @@
TARGET pjstun_client.exe
TARGETTYPE exe
UID 0x0 0xA000000A
OPTION ARMCC --gnu
SOURCEPATH ..\pjnath\src\pjstun-client
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
// PJSTUN-CLIENT files
SOURCE client_main.c
//SOURCE main_symbian.cpp
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjlib-util\include
SYSTEMINCLUDE ..\pjnath\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc
#if defined(PJ_BUILD_DLL)
MACRO PJ_DLL
LIBRARY pjnath.lib pjlib_util.lib pjlib.lib
#else
STATICLIBRARY pjnath.lib pjlib_util.lib pjlib.lib
#endif
LIBRARY esock.lib insock.lib charconv.lib euser.lib estlib.lib
#ifdef WINSCW
STATICLIBRARY eexe.lib ecrt0.lib
#endif
CAPABILITY None

View file

@ -0,0 +1,55 @@
#if defined(PJ_BUILD_DLL)
TARGET pjsua_lib.dll
TARGETTYPE dll
UID 0x0 0xA000000B
CAPABILITY None
LIBRARY pjsip_ua.lib pjsip_simple.lib pjsip.lib pjmedia.lib null_audio.lib pjsdp.lib pjnath.lib pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\pjsua_lib.def
#else
TARGET pjsua_lib.lib
TARGETTYPE lib
#endif
SOURCEPATH ..\pjsip\src\pjsua-lib
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
// Must compile as C++, otherwise exception would not work
OPTION CW -lang c++
OPTION ARMCC --cpp --gnu
OPTION GCC -x c++
OPTION GCCE -x c++
// PJLIB-UTIL files
SOURCE pjsua_acc.c
SOURCE pjsua_aud.c
SOURCE pjsua_call.c
SOURCE pjsua_core.c
SOURCE pjsua_dump.c
SOURCE pjsua_im.c
SOURCE pjsua_media.c
SOURCE pjsua_pres.c
SOURCE pjsua_vid.c
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjlib-util\include
SYSTEMINCLUDE ..\pjnath\include
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE ..\pjsip\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc

View file

@ -0,0 +1,122 @@
EXPORTS
pjsua_acc_add @ 1 NONAME
pjsua_acc_add_local @ 2 NONAME
pjsua_acc_config_default @ 3 NONAME
pjsua_acc_config_dup @ 4 NONAME
pjsua_acc_create_request @ 5 NONAME
pjsua_acc_create_uac_contact @ 6 NONAME
pjsua_acc_create_uas_contact @ 7 NONAME
pjsua_acc_del @ 8 NONAME
pjsua_acc_enum_info @ 9 NONAME
pjsua_acc_find_for_incoming @ 10 NONAME
pjsua_acc_find_for_outgoing @ 11 NONAME
pjsua_acc_get_count @ 12 NONAME
pjsua_acc_get_default @ 13 NONAME
pjsua_acc_get_info @ 14 NONAME
pjsua_acc_is_valid @ 15 NONAME
pjsua_acc_modify @ 16 NONAME
pjsua_acc_set_default @ 17 NONAME
pjsua_acc_set_online_status @ 18 NONAME
pjsua_acc_set_online_status2 @ 19 NONAME
pjsua_acc_set_registration @ 20 NONAME
pjsua_acc_set_transport @ 21 NONAME
pjsua_buddy_add @ 22 NONAME
pjsua_buddy_config_default @ 23 NONAME
pjsua_buddy_del @ 24 NONAME
pjsua_buddy_get_info @ 25 NONAME
pjsua_buddy_is_valid @ 26 NONAME
pjsua_buddy_subscribe_pres @ 27 NONAME
pjsua_buddy_update_pres @ 28 NONAME
pjsua_call_answer @ 29 NONAME
pjsua_call_dial_dtmf @ 30 NONAME
pjsua_call_dump @ 31 NONAME
pjsua_call_get_conf_port @ 32 NONAME
pjsua_call_get_count @ 33 NONAME
pjsua_call_get_info @ 34 NONAME
pjsua_call_get_max_count @ 35 NONAME
pjsua_call_get_rem_nat_type @ 36 NONAME
pjsua_call_get_user_data @ 37 NONAME
pjsua_call_hangup @ 38 NONAME
pjsua_call_hangup_all @ 39 NONAME
pjsua_call_has_media @ 40 NONAME
pjsua_call_is_active @ 41 NONAME
pjsua_call_make_call @ 42 NONAME
pjsua_call_reinvite @ 43 NONAME
pjsua_call_send_im @ 44 NONAME
pjsua_call_send_request @ 45 NONAME
pjsua_call_send_typing_ind @ 46 NONAME
pjsua_call_set_hold @ 47 NONAME
pjsua_call_set_user_data @ 48 NONAME
pjsua_call_update @ 49 NONAME
pjsua_call_xfer @ 50 NONAME
pjsua_call_xfer_replaces @ 51 NONAME
pjsua_codec_get_param @ 52 NONAME
pjsua_codec_set_param @ 53 NONAME
pjsua_codec_set_priority @ 54 NONAME
pjsua_conf_add_port @ 55 NONAME
pjsua_conf_adjust_rx_level @ 56 NONAME
pjsua_conf_adjust_tx_level @ 57 NONAME
pjsua_conf_connect @ 58 NONAME
pjsua_conf_disconnect @ 59 NONAME
pjsua_conf_get_active_ports @ 60 NONAME
pjsua_conf_get_max_ports @ 61 NONAME
pjsua_conf_get_port_info @ 62 NONAME
pjsua_conf_get_signal_level @ 63 NONAME
pjsua_conf_remove_port @ 64 NONAME
pjsua_config_default @ 65 NONAME
pjsua_config_dup @ 66 NONAME
pjsua_create @ 67 NONAME
pjsua_destroy @ 68 NONAME
pjsua_detect_nat_type @ 69 NONAME
pjsua_dump @ 70 NONAME
pjsua_enum_accs @ 71 NONAME
pjsua_enum_buddies @ 72 NONAME
pjsua_enum_calls @ 73 NONAME
pjsua_enum_codecs @ 74 NONAME
pjsua_enum_conf_ports @ 75 NONAME
pjsua_enum_snd_devs @ 76 NONAME
pjsua_enum_transports @ 77 NONAME
pjsua_get_buddy_count @ 78 NONAME
pjsua_get_ec_tail @ 79 NONAME
pjsua_get_nat_type @ 80 NONAME
pjsua_get_pjmedia_endpt @ 81 NONAME
pjsua_get_pjsip_endpt @ 82 NONAME
pjsua_get_pool_factory @ 83 NONAME
pjsua_get_snd_dev @ 84 NONAME
pjsua_get_var @ 85 NONAME
pjsua_handle_events @ 86 NONAME
pjsua_im_send @ 87 NONAME
pjsua_im_typing @ 88 NONAME
pjsua_init @ 89 NONAME
pjsua_logging_config_default @ 90 NONAME
pjsua_logging_config_dup @ 91 NONAME
pjsua_media_config_default @ 92 NONAME
pjsua_media_transports_create @ 93 NONAME
pjsua_msg_data_init @ 94 NONAME
pjsua_perror @ 95 NONAME
pjsua_player_create @ 96 NONAME
pjsua_player_destroy @ 97 NONAME
pjsua_player_get_conf_port @ 98 NONAME
pjsua_player_get_port @ 99 NONAME
pjsua_player_set_pos @ 100 NONAME
pjsua_playlist_create @ 101 NONAME
pjsua_pool_create @ 102 NONAME
pjsua_pres_dump @ 103 NONAME
pjsua_reconfigure_logging @ 104 NONAME
pjsua_recorder_create @ 105 NONAME
pjsua_recorder_destroy @ 106 NONAME
pjsua_recorder_get_conf_port @ 107 NONAME
pjsua_recorder_get_port @ 108 NONAME
pjsua_set_ec @ 109 NONAME
pjsua_set_no_snd_dev @ 110 NONAME
pjsua_set_null_snd_dev @ 111 NONAME
pjsua_set_snd_dev @ 112 NONAME
pjsua_start @ 113 NONAME
pjsua_transport_close @ 114 NONAME
pjsua_transport_config_default @ 115 NONAME
pjsua_transport_config_dup @ 116 NONAME
pjsua_transport_create @ 117 NONAME
pjsua_transport_get_info @ 118 NONAME
pjsua_transport_register @ 119 NONAME
pjsua_transport_set_enable @ 120 NONAME
pjsua_verify_sip_url @ 121 NONAME

View file

@ -0,0 +1,47 @@
#if defined(PJ_BUILD_DLL)
TARGET symbian_audio.dll
TARGETTYPE dll
UID 0x0 0xA000000C
CAPABILITY None
LIBRARY pjlib.lib charconv.lib euser.lib estlib.lib
LIBRARY mediaclientaudiostream.lib
LIBRARY mediaclientaudioinputstream.lib
MACRO PJ_DLL
MACRO PJ_EXPORTING
DEFFILE .\symbian_audio.def
#else
TARGET symbian_audio.lib
TARGETTYPE lib
#endif
SOURCEPATH ..\pjmedia\src\pjmedia
OPTION CW -lang c++
OPTION GCCE -O2 -fno-unit-at-a-time
OPTION ARMCC --gnu
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
SOURCE nullsound.c
SOURCE symbian_sound.cpp
SOURCE symbian_sound_aps.cpp
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc
SYSTEMINCLUDE \epoc32\include\mmf\server
SYSTEMINCLUDE \epoc32\include\mmf\common
SYSTEMINCLUDE \epoc32\include\mda\common
SYSTEMINCLUDE \epoc32\include\mmf\plugin

View file

@ -0,0 +1,12 @@
EXPORTS
pjmedia_snd_deinit @ 1 NONAME
pjmedia_snd_get_dev_count @ 2 NONAME
pjmedia_snd_get_dev_info @ 3 NONAME
pjmedia_snd_init @ 4 NONAME
pjmedia_snd_open @ 5 NONAME
pjmedia_snd_open_player @ 6 NONAME
pjmedia_snd_open_rec @ 7 NONAME
pjmedia_snd_stream_close @ 8 NONAME
pjmedia_snd_stream_get_info @ 9 NONAME
pjmedia_snd_stream_start @ 10 NONAME
pjmedia_snd_stream_stop @ 11 NONAME

View file

@ -0,0 +1,51 @@
#define SND_USE_APS 0
#define SND_USE_VAS 0
TARGET symsndtest.exe
TARGETTYPE exe
UID 0x0 0xA000000E
OPTION ARMCC --gnu
SOURCEPATH ..\pjsip-apps\src\symsndtest
MACRO PJ_M_I386=1
MACRO PJ_SYMBIAN=1
// Test files
SOURCE app_main.cpp
SOURCE main_symbian.cpp
START RESOURCE symsndtest_reg.rss
TARGETPATH \private\10003a3f\apps
END
SYSTEMINCLUDE ..\pjlib\include
SYSTEMINCLUDE ..\pjmedia\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\libc
LIBRARY charconv.lib euser.lib estlib.lib
LIBRARY esock.lib insock.lib
STATICLIBRARY pjmedia_audiodev.lib
STATICLIBRARY pjmedia.lib
STATICLIBRARY pjlib.lib
STATICLIBRARY libresample.lib
#if SND_USE_APS
LIBRARY APSSession2.lib
CAPABILITY NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment MultimediaDD
#elif SND_USE_VAS
LIBRARY VoIPAudioIntfc.lib
CAPABILITY NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment MultimediaDD
#else
LIBRARY mediaclientaudiostream.lib
LIBRARY mediaclientaudioinputstream.lib
CAPABILITY NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment
#endif
#ifdef WINSCW
STATICLIBRARY eexe.lib ecrt0.lib
#endif

View file

@ -0,0 +1,19 @@
; symsndtest.pkg
; Languages
&EN
; Header
#{"symsndtest"},(0xA000000E), 0, 1, 1
; Platform compatibility
[0x101F7961], *, *, *, {"Series60ProductID"}
; vendor
%{"PJSIP"}
:"PJSIP"
; Target
"$(EPOCROOT)Epoc32\release\$(PLATFORM)\$(TARGET)\symsndtest.exe"-"!:\sys\bin\symsndtest.exe"
"$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\symsndtest_reg.rSC"-"!:\private\10003a3f\import\apps\symsndtest_reg.rSC"

View file

@ -0,0 +1,22 @@
export CC = @CC@ -c
export CXX = @CXX@ -c
export AR = @AR@
export AR_FLAGS = @AR_FLAGS@
export LD = @LD@
export LDOUT = -o
export RANLIB = @RANLIB@
export OBJEXT := .@OBJEXT@
export LIBEXT := .@LIBEXT@
export LIBEXT2 := @LIBEXT2@
export CC_OUT := @CC_OUT@
export CC_INC := @CC_INC@
export CC_DEF := @CC_DEF@
export CC_OPTIMIZE := @CC_OPTIMIZE@
export CC_LIB := -l
export CC_SOURCES :=
export CC_CFLAGS := @CC_CFLAGS@
export CC_LDFLAGS :=

View file

@ -0,0 +1,22 @@
export CC = $(CROSS_COMPILE)gcc -c
export AR = $(CROSS_COMPILE)ar rv
export LD = $(CROSS_COMPILE)gcc
export LDOUT = -o
export RANLIB = $(CROSS_COMPILE)ranlib
export OBJEXT := .o
export LIBEXT := .a
export LIBEXT2 :=
export CC_OUT := -o
export CC_INC := -I
export CC_DEF := -D
export CC_OPTIMIZE := -O2
export CC_LIB := -l
export CC_SOURCES :=
export CC_CFLAGS := -Wall
#export CC_CFLAGS += -Wdeclaration-after-statement
#export CC_CXXFLAGS := -Wdeclaration-after-statement
export CC_LDFLAGS :=

View file

@ -0,0 +1,20 @@
export CC := cl /c /nologo
export AR := lib /NOLOGO /OUT:
export LD := cl /nologo
export LDOUT := /Fe
export RANLIB := echo ranlib
export OBJEXT := .obj
export LIBEXT := .lib
export LIBEXT2 := .LIB
export CC_OUT := /Fo
export CC_INC := /I
export CC_DEF := /D
export CC_OPTIMIZE := /Ox
export CC_LIB :=
export CC_SOURCES :=
export CC_CFLAGS := /W4 /MT
export CC_CXXFLAGS := /GX
export CC_LDFLAGS := /MT

View file

@ -0,0 +1,63 @@
#
# Include host/target/compiler selection.
# This will export CC_NAME, MACHINE_NAME, OS_NAME, and HOST_NAME variables.
#
include $(PJDIR)/build.mak
#
# Include global compiler specific definitions
#
include $(PJDIR)/build/cc-$(CC_NAME).mak
#
# (Optionally) Include compiler specific configuration that is
# specific to this project. This configuration file is
# located in this directory.
#
-include cc-$(CC_NAME).mak
#
# Include auto configured compiler specification.
# This will override the compiler settings above.
# Currently this is made OPTIONAL, to prevent people
# from getting errors because they don't re-run ./configure
# after downloading new PJSIP.
#
-include $(PJDIR)/build/cc-auto.mak
#
# Include global machine specific definitions
#
include $(PJDIR)/build/m-$(MACHINE_NAME).mak
-include m-$(MACHINE_NAME).mak
#
# Include target OS specific definitions
#
include $(PJDIR)/build/os-$(OS_NAME).mak
#
# (Optionally) Include target OS specific configuration that is
# specific to this project. This configuration file is
# located in this directory.
#
-include os-$(OS_NAME).mak
#
# Include host specific definitions
#
include $(PJDIR)/build/host-$(HOST_NAME).mak
#
# (Optionally) Include host specific configuration that is
# specific to this project. This configuration file is
# located in this directory.
#
-include host-$(HOST_NAME).mak
#
# Include global user configuration, if any
#
-include $(PJDIR)/user.mak

View file

@ -0,0 +1,13 @@
export HOST_MV := mv
export HOST_RM := rm -f @@
export HOST_RMR := rm -rf @@
export HOST_RMDIR := rm -rf @@
export HOST_MKDIR := mkdir @@
export HOST_EXE := .exe
export HOST_PSEP := /
export HOST_SOURCES :=
export HOST_CFLAGS :=
export HOST_CXXFLAGS :=
export HOST_LDFLAGS := $(CC_LIB)stdc++$(LIBEXT2)

View file

@ -0,0 +1,13 @@
export HOST_MV := mv
export HOST_RM := rm -f @@
export HOST_RMR := rm -rf @@
export HOST_RMDIR := rm -rf @@
export HOST_MKDIR := mkdir -p @@
export HOST_EXE := $(HOST_EXE)
export HOST_PSEP := /
export HOST_SOURCES :=
export HOST_CFLAGS :=
export HOST_CXXFLAGS :=
export HOST_LDFLAGS :=

View file

@ -0,0 +1,12 @@
export HOST_MV := ren
export HOST_RM := if exist @@; del /F /Q @@
export HOST_RMR := if exist @@; del /F /Q @@
export HOST_RMDIR := if exist @@; rmdir @@
export HOST_MKDIR := if not exist @@; mkdir @@
export HOST_EXE := .exe
export HOST_PSEP := \\
export HOST_SOURCES :=
export HOST_CFLAGS :=
export HOST_CXXFLAGS :=
export HOST_LDFLAGS :=

View file

@ -0,0 +1,4 @@
export M_CFLAGS := $(CC_DEF)PJ_M_ALPHA=1
export M_CXXFLAGS :=
export M_LDFLAGS :=
export M_SOURCES :=

View file

@ -0,0 +1,4 @@
export M_CFLAGS := $(CC_DEF)PJ_M_ARMV4=1
export M_CXXFLAGS :=
export M_LDFLAGS :=
export M_SOURCES :=

View file

@ -0,0 +1 @@
# Nothing needs to be defined here

View file

@ -0,0 +1,4 @@
export M_CFLAGS := $(CC_DEF)PJ_M_I386=1
export M_CXXFLAGS :=
export M_LDFLAGS :=
export M_SOURCES :=

View file

@ -0,0 +1,4 @@
export M_CFLAGS := $(CC_DEF)PJ_M_M68K=1
export M_CXXFLAGS :=
export M_LDFLAGS :=
export M_SOURCES :=

View file

@ -0,0 +1,9 @@
#
# PowerPC MPC860 specific.
# It's a PowerPC without floating point support.
#
export M_CFLAGS := $(CC_DEF)PJ_M_POWERPC=1 $(CC_DEF)PJ_HAS_FLOATING_POINT=0 -mcpu=860
export M_CXXFLAGS :=
export M_LDFLAGS := -mcpu=860
export M_SOURCES :=

View file

@ -0,0 +1,4 @@
export M_CFLAGS := $(CC_DEF)PJ_M_POWERPC=1
export M_CXXFLAGS :=
export M_LDFLAGS :=
export M_SOURCES :=

View file

@ -0,0 +1,4 @@
export M_CFLAGS := $(CC_DEF)PJ_M_SPARC=1
export M_CXXFLAGS :=
export M_LDFLAGS :=
export M_SOURCES :=

View file

@ -0,0 +1,4 @@
export M_CFLAGS := $(CC_DEF)PJ_M_X86_64=1
export M_CXXFLAGS :=
export M_LDFLAGS :=
export M_SOURCES :=

View file

@ -0,0 +1,11 @@
# @configure_input@
export OS_CFLAGS := $(CC_DEF)PJ_AUTOCONF=1 @CFLAGS@
export OS_CXXFLAGS := $(CC_DEF)PJ_AUTOCONF=1 @CXXFLAGS@
export OS_LDFLAGS := @LDFLAGS@ @LIBS@
export OS_SOURCES :=

View file

@ -0,0 +1,9 @@
export OS_CFLAGS := $(CC_DEF)PJ_DARWINOS=1
export OS_CXXFLAGS :=
export OS_LDFLAGS := $(CC_LIB)pthread$(LIBEXT2) -framework CoreAudio -lm
export OS_SOURCES :=

View file

@ -0,0 +1,9 @@
export OS_CFLAGS := $(CC_DEF)PJ_LINUX=1
export OS_CXXFLAGS :=
export OS_LDFLAGS := -lportaudio-$(TARGET_NAME) -lgsmcodec-$(TARGET_NAME) -lilbccodec-$(TARGET_NAME) -lspeex-$(TARGET_NAME) -lresample-$(TARGET_NAME) $(CC_LIB)pthread$(LIBEXT2) -lm
export OS_SOURCES :=

View file

@ -0,0 +1,32 @@
#
# make-mingw.inc: Mingw specific compilation switches.
#
PALM_OS_SDK_VER := 0x06000000
PALM_OS_TARGET_HOST := TARGET_HOST_PALMOS
PALM_OS_TARGET_PLATFORM := TARGET_PLATFORM_PALMSIM_WIN32
PALM_OS_BUILD_TYPE := BUILD_TYPE_DEBUG
PALM_OS_TRACE_OUTPUT := TRACE_OUTPUT_ON
PALM_OS_CPU_TYPE := CPU_ARM
export CROSS_COMPILE :=
ifeq ($(CC_NAME),gcc)
export CFLAGS += -mno-cygwin -fexceptions -frtti
endif
export OS_CFLAGS := $(CC_DEF)PJ_PALMOS=1 \
$(CC_DEF)__PALMOS_KERNEL__=1 \
$(CC_DEF)__PALMOS__=$(PALM_OS_SDK_VER) \
$(CC_DEF)BUILD_TYPE=$(PALM_OS_BUILD_TYPE) \
$(CC_DEF)TRACE_OUTPUT=$(PALM_OS_TRACE_OUTPUT) \
$(CC_DEF)_SUPPORTS_NAMESPACE=0 \
$(CC_DEF)_SUPPORTS_RTTI=0 \
$(CC_DEF)TARGET_HOST=$(PALM_OS_TRAGET_HOST) \
$(CC_DEF)TARGET_PLATFORM=$(PALM_OS_TARGET_PLATFORM)
export OS_CXXFLAGS :=
export OS_LDFLAGS :=
export OS_SOURCES :=

View file

@ -0,0 +1,17 @@
#
# Global OS specific configurations for RTEMS OS.
#
# Thanks Zetron, Inc and Phil Torre <ptorre@zetron.com> for donating PJLIB
# port to RTEMS.
#
export RTEMS_DEBUG := -ggdb3 -DRTEMS_DEBUG -DDEBUG -qrtems_debug
export OS_CFLAGS := $(CC_DEF)PJ_RTEMS=1 \
-B$(RTEMS_LIBRARY_PATH)/lib/ -specs bsp_specs -qrtems
export OS_CXXFLAGS :=
export OS_LDFLAGS := -B$(RTEMS_LIBRARY_PATH)/lib/ -specs bsp_specs -qrtems -lm
export OS_SOURCES :=

View file

@ -0,0 +1,13 @@
export OS_CFLAGS := $(CC_DEF)PJ_SUNOS=1
export OS_CXXFLAGS :=
export OS_LDFLAGS := $(CC_LIB)pthread$(LIBEXT2) \
$(CC_LIB)socket$(LIBEXT2) \
$(CC_LIB)rt$(LIBEXT2) \
$(CC_LIB)nsl$(LIBEXT2) \
$(CC_LIB)m$(LIBEXT2)
export OS_SOURCES :=

View file

@ -0,0 +1,12 @@
export OS_CFLAGS := $(CC_DEF)PJ_WIN32=1
export OS_CXXFLAGS :=
export OS_LDFLAGS := $(CC_LIB)wsock32$(LIBEXT2) \
$(CC_LIB)ws2_32$(LIBEXT2)\
$(CC_LIB)ole32$(LIBEXT2)\
$(CC_LIB)m$(LIBEXT2)
export OS_SOURCES :=

View file

@ -0,0 +1,249 @@
ifeq ($(LIBDIR),)
LIBDIR = ../lib
endif
ifeq ($(BINDIR),)
BINDIR = ../bin
endif
#
# The name(s) of output lib file(s) (e.g. libapp.a).
#
LIB := $($(APP)_LIB)
SHLIB = $($(APP)_SHLIB)
SONAME = $($(APP)_SONAME)
ifeq ($(SHLIB_SUFFIX),so)
SHLIB_OPT := -shared -Wl,-soname,$(SHLIB)
else ifeq ($(SHLIB_SUFFIX),dylib)
SHLIB_OPT := -dynamiclib -undefined dynamic_lookup -flat_namespace
else ifeq ($(SHLIB_SUFFIX),dll)
SHLIB_OPT := -shared -Wl,-soname,$(SHLIB)
else
SHLIB_OPT :=
endif
#
# The name of output executable file (e.g. app.exe).
#
EXE = $($(APP)_EXE)
#
# Source directory
#
SRCDIR = $($(APP)_SRCDIR)
#
# Output directory for object files (i.e. output/target)
#
OBJDIR = output/$(app)-$(TARGET_NAME)
ifeq ($(OS_NAME),linux-kernel)
export $(APP)_CFLAGS += -DKBUILD_MODNAME=$(app) -DKBUILD_BASENAME=$(app)
endif
#
# OBJS is ./output/target/file.o
#
OBJS = $(foreach file, $($(APP)_OBJS), $(OBJDIR)/$(file))
OBJDIRS := $(sort $(dir $(OBJS)))
#
# FULL_SRCS is ../src/app/file1.c ../src/app/file1.S
#
FULL_SRCS = $(foreach file, $($(APP)_OBJS), $(SRCDIR)/$(basename $(file)).m $(SRCDIR)/$(basename $(file)).c $(SRCDIR)/$(basename $(file)).cpp $(SRCDIR)/$(basename $(file)).cc $(SRCDIR)/$(basename $(file)).S)
#
# When generating dependency (gcc -MM), ideally we use only either
# CFLAGS or CXXFLAGS (not both). But I just couldn't make if/ifeq to work.
#
#DEPFLAGS = $($(APP)_CXXFLAGS) $($(APP)_CFLAGS)
DEPCFLAGS = $($(APP)_CFLAGS)
DEPCXXFLAGS = $($(APP)_CXXFLAGS)
# Dependency file
DEP_FILE := .$(app)-$(TARGET_NAME).depend
print_common:
@echo "###"
@echo "### DUMPING MAKE VARIABLES (I WON'T DO ANYTHING ELSE):"
@echo "###"
@echo APP=$(APP)
@echo OBJDIR=$(OBJDIR)
@echo OBJDIRS=$(OBJDIRS)
@echo OBJS=$(OBJS)
@echo SRCDIR=$(SRCDIR)
@echo FULL_SRCS=$(FULL_SRCS)
@echo $(APP)_CFLAGS=$($(APP)_CFLAGS)
@echo $(APP)_CXXFLAGS=$($(APP)_CXXFLAGS)
@echo $(APP)_LDFLAGS=$($(APP)_LDFLAGS)
# @echo DEPFLAGS=$(DEPFLAGS)
@echo CC=$(CC)
@echo AR=$(AR)
@echo AR_FLAGS=$(AR_FLAGS)
@echo RANLIB=$(RANLIB)
print_bin: print_common
@echo EXE=$(subst /,$(HOST_PSEP),$(BINDIR)/$(EXE))
@echo BINDIR=$(BINDIR)
print_lib: print_common
ifneq ($(LIB),)
@echo LIB=$(subst /,$(HOST_PSEP),$(LIBDIR)/$(LIB))
endif
ifneq ($(SHLIB),)
@echo SHLIB=$(subst /,$(HOST_PSEP),$(LIBDIR)/$(SHLIB))
endif
ifneq ($(SONAME),)
@echo SONAME=$(subst /,$(HOST_PSEP),$(LIBDIR)/$(SONAME))
endif
@echo LIBDIR=$(LIBDIR)
ifneq ($(LIB),)
$(subst /,$(HOST_PSEP),$(LIBDIR)/$(LIB)): $(OBJDIRS) $(OBJS) $($(APP)_EXTRA_DEP)
if test ! -d $(LIBDIR); then $(subst @@,$(subst /,$(HOST_PSEP),$(LIBDIR)),$(HOST_MKDIR)); fi
$(AR) $(AR_FLAGS) $@ $(OBJS)
$(RANLIB) $@
endif
ifneq ($(SHLIB),)
$(subst /,$(HOST_PSEP),$(LIBDIR)/$(SHLIB)): $(OBJDIRS) $(OBJS) $($(APP)_EXTRA_DEP)
if test ! -d $(LIBDIR); then $(subst @@,$(subst /,$(HOST_PSEP),$(LIBDIR)),$(HOST_MKDIR)); fi
$(LD) $(LDOUT)$(subst /,$(HOST_PSEP),$@) \
$(subst /,$(HOST_PSEP),$(OBJS)) $($(APP)_LDFLAGS) $(SHLIB_OPT)
endif
ifneq ($(SONAME),)
$(subst /,$(HOST_PSEP),$(LIBDIR)/$(SONAME)): $(subst /,$(HOST_PSEP),$(LIBDIR)/$(SHLIB))
ln -sf $(SHLIB) $@
endif
ifneq ($(EXE),)
$(subst /,$(HOST_PSEP),$(BINDIR)/$(EXE)): $(OBJDIRS) $(OBJS) $($(APP)_EXTRA_DEP)
if test ! -d $(BINDIR); then $(subst @@,$(subst /,$(HOST_PSEP),$(BINDIR)),$(HOST_MKDIR)); fi
$(LD) $(LDOUT)$(subst /,$(HOST_PSEP),$(BINDIR)/$(EXE)) \
$(subst /,$(HOST_PSEP),$(OBJS)) $($(APP)_LDFLAGS)
endif
$(OBJDIR)/$(app).o: $(OBJDIRS) $(OBJS)
$(CROSS_COMPILE)ld -r -o $@ $(OBJS)
$(OBJDIR)/$(app).ko: $(OBJDIR)/$(app).o | $(OBJDIRS)
@echo Creating kbuild Makefile...
@echo "# Our module name:" > $(OBJDIR)/Makefile
@echo 'obj-m += $(app).o' >> $(OBJDIR)/Makefile
@echo >> $(OBJDIR)/Makefile
@echo "# Object members:" >> $(OBJDIR)/Makefile
@echo -n '$(app)-objs += ' >> $(OBJDIR)/Makefile
@for file in $($(APP)_OBJS); do \
echo -n "$$file " >> $(OBJDIR)/Makefile; \
done
@echo >> $(OBJDIR)/Makefile
@echo >> $(OBJDIR)/Makefile
@echo "# Prevent .o files to be built by kbuild:" >> $(OBJDIR)/Makefile
@for file in $($(APP)_OBJS); do \
echo ".PHONY: `pwd`/$(OBJDIR)/$$file" >> $(OBJDIR)/Makefile; \
done
@echo >> $(OBJDIR)/Makefile
@echo all: >> $(OBJDIR)/Makefile
@echo -e "\tmake -C $(KERNEL_DIR) M=`pwd`/$(OBJDIR) modules $(KERNEL_ARCH)" >> $(OBJDIR)/Makefile
@echo Invoking kbuild...
make -C $(OBJDIR)
../lib/$(app).ko: $(LIB) $(OBJDIR)/$(app).ko
cp $(OBJDIR)/$(app).ko ../lib
$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.m | $(OBJDIRS)
$(CC) $($(APP)_CFLAGS) \
$(CC_OUT)$(subst /,$(HOST_PSEP),$@) \
$(subst /,$(HOST_PSEP),$<)
$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.c | $(OBJDIRS)
$(CC) $($(APP)_CFLAGS) \
$(CC_OUT)$(subst /,$(HOST_PSEP),$@) \
$(subst /,$(HOST_PSEP),$<)
$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.S | $(OBJDIRS)
$(CC) $($(APP)_CFLAGS) \
$(CC_OUT)$(subst /,$(HOST_PSEP),$@) \
$(subst /,$(HOST_PSEP),$<)
$(OBJDIR)/dshowclasses.o: $(SRCDIR)/dshowclasses.cpp | $(OBJDIRS)
$(CXX) $($(APP)_CXXFLAGS) -I$(SRCDIR)/../../../third_party/BaseClasses -fpermissive \
$(CC_OUT)$(subst /,$(HOST_PSEP),$@) \
$(subst /,$(HOST_PSEP),$<)
$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cpp | $(OBJDIRS)
$(CXX) $($(APP)_CXXFLAGS) \
$(CC_OUT)$(subst /,$(HOST_PSEP),$@) \
$(subst /,$(HOST_PSEP),$<)
$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cc | $(OBJDIRS)
$(CXX) $($(APP)_CXXFLAGS) \
$(CC_OUT)$(subst /,$(HOST_PSEP),$@) \
$(subst /,$(HOST_PSEP),$<)
$(OBJDIRS):
$(subst @@,$(subst /,$(HOST_PSEP),$@),$(HOST_MKDIR))
$(LIBDIR):
$(subst @@,$(subst /,$(HOST_PSEP),$@),$(HOST_MKDIR))
$(BINDIR):
$(subst @@,$(subst /,$(HOST_PSEP),$@),$(HOST_MKDIR))
clean:
$(subst @@,$(subst /,$(HOST_PSEP),$(OBJDIR)/*),$(HOST_RMR))
$(subst @@,$(subst /,$(HOST_PSEP),$(OBJDIR)),$(HOST_RMDIR))
ifeq ($(OS_NAME),linux-kernel)
rm -f ../lib/$(app).o
endif
gcov-report:
for file in $(FULL_SRCS); do \
gcov $$file -n -o $(OBJDIR); \
done
realclean: clean
ifneq ($(LIB),)
$(subst @@,$(subst /,$(HOST_PSEP),$(LIBDIR)/$(LIB)),$(HOST_RM))
endif
ifneq ($(SHLIB),)
$(subst @@,$(subst /,$(HOST_PSEP),$(LIBDIR)/$(SHLIB)),$(HOST_RM))
endif
ifneq ($(SONAME),)
$(subst @@,$(subst /,$(HOST_PSEP),$(LIBDIR)/$(SONAME)),$(HOST_RM))
endif
ifneq ($(EXE),)
$(subst @@,$(subst /,$(HOST_PSEP),$(BINDIR)/$(EXE)),$(HOST_RM))
endif
$(subst @@,$(DEP_FILE),$(HOST_RM))
ifeq ($(OS_NAME),linux-kernel)
rm -f ../lib/$(app).ko
endif
depend:
$(subst @@,$(DEP_FILE),$(HOST_RM))
for F in $(FULL_SRCS); do \
if test -f $$F; then \
echo "$(OBJDIR)/" | tr -d '\n' >> $(DEP_FILE); \
if echo $$F | grep -q .cpp$$; then \
dep="$(CC) -M $(DEPCXXFLAGS) $$F"; \
else \
dep="$(CC) -M $(DEPCFLAGS) $$F"; \
fi; \
if eval $$dep | sed '/^#/d' >> $(DEP_FILE); then \
true; \
else \
echo 'err:' >> $(DEP_FILE); \
rm -f $(DEP_FILE); \
exit 1; \
fi; \
fi; \
done;
dep: depend
-include $(DEP_FILE)

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
</ImportGroup>
<PropertyGroup>
<!--
- Set the API Family here:
* WinDesktop (Desktop)
* UWP (UWP)
* WinPhone8 (Windows Phone 8)
-->
<API_Family>WinDesktop</API_Family>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
</ImportGroup>
<PropertyGroup Label="UserMacros">
<TargetCPU>ARMv7</TargetCPU>
</PropertyGroup>
<PropertyGroup>
<_ProjectFileVersion>14.0.22823.1</_ProjectFileVersion>
</PropertyGroup>
<ItemDefinitionGroup>
<Link>
<SubSystem>Console</SubSystem>
<TargetMachine>MachineARM</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<BuildMacro Include="TargetCPU">
<Value>$(TargetCPU)</Value>
</BuildMacro>
</ItemGroup>
</Project>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="pjproject-vs14-arm-common-defaults.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>14.0.22823.1</_ProjectFileVersion>
</PropertyGroup>
<ItemDefinitionGroup />
<ItemGroup />
</Project>

View file

@ -0,0 +1,9 @@
<!--This will define targets to override the default ones useful to skipped the target of specific project-->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<Message Text="Skipped project build"></Message>
</Target>
<Target Name="Clean">
<Message Text="Skipped project clean"></Message>
</Target>
</Project>

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="pjproject-vs14-api-def.props" />
</ImportGroup>
<Choose>
<When Condition="'$(Platform)'=='ARM' ">
<PropertyGroup>
<API_Family Condition="'$(API_Family)'=='WinDesktop'">UWP</API_Family>
</PropertyGroup>
</When>
<When Condition="'$(Platform)'=='Win32' Or '$(Platform)'=='x64'">
<PropertyGroup>
<API_Family Condition="'$(API_Family)'=='WinPhone8'">UWP</API_Family>
</PropertyGroup>
</When>
</Choose>
<PropertyGroup>
<API_Family Condition="'$(API_Family)'==''">WinDesktop</API_Family>
<PreprocessorDef></PreprocessorDef>
<DefaultToolset>v140</DefaultToolset>
</PropertyGroup>
<Choose>
<When Condition="'$(API_Family)'=='WinDesktop'">
<PropertyGroup>
<BuildToolset>v140</BuildToolset>
<PreprocessorDef Condition="'$(Platform)'=='Win32'">WIN32;PJ_WIN32=1;PJ_M_I386=1;</PreprocessorDef>
<PreprocessorDef Condition="'$(Platform)'=='x64'">WIN64;PJ_WIN64=1;PJ_M_X86_64=1;</PreprocessorDef>
</PropertyGroup>
</When>
<When Condition="'$(API_Family)'=='UWP'">
<PropertyGroup>
<BuildToolset>v140</BuildToolset>
<PreprocessorDef>PJ_WIN32_UWP;UNICODE;_UNICODE;</PreprocessorDef>
<PreprocessorDef Condition="'$(Platform)'=='ARM'">$(PreprocessorDef);PJ_M_ARMV7=1;</PreprocessorDef>
<PlatformVersion>10.0.10586.0</PlatformVersion>
<MinPlatformVersion>10.0.10240.0</MinPlatformVersion>
<AppTypeRev>10.0</AppTypeRev>
<WindowsTargetPlatformVersion>$(PlatformVersion)</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>$(MinPlatformVersion)</WindowsTargetPlatformMinVersion>
<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
<ApplicationTypeRevision>$(AppTypeRev)</ApplicationTypeRevision>
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
<TargetPlatformVersion>$(PlatformVersion)</TargetPlatformVersion>
<TargetPlatformMinVersion>$(MinPlatformVersion)</TargetPlatformMinVersion>
</PropertyGroup>
</When>
<When Condition="'$(API_Family)'=='WinPhone8'">
<PropertyGroup>
<BuildToolset>v110_wp80</BuildToolset>
<PreprocessorDef>PJ_WIN32_WINPHONE8;PJ_M_ARMV7=1;UNICODE;_UNICODE;</PreprocessorDef>
</PropertyGroup>
</When>
</Choose>
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>$(PreprocessorDef);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild Condition="'$(API_Family)'=='UWP'">false</MinimalRebuild>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
</ImportGroup>
<PropertyGroup Label="UserMacros">
<VSVer>14</VSVer>
</PropertyGroup>
<PropertyGroup>
<_ProjectFileVersion>14.0.22823.1</_ProjectFileVersion>
<OutDir Condition="'$(TargetExt)'=='.lib'">..\lib\</OutDir>
<OutDir Condition="'$(TargetExt)'=='.exe'">..\bin\</OutDir>
<OutDir Condition="'$(TargetExt)'=='.dll'">..\lib\</OutDir>
<TargetName>$(ProjectName)-$(TargetCPU)-$(Platform)-vc$(VSVer)-$(Configuration)</TargetName>
<IntDir>.\output\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<BrowseInformation>true</BrowseInformation>
<WarningLevel>Level4</WarningLevel>
<CompileAs>Default</CompileAs>
<CompileAsWinRT>false</CompileAsWinRT>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<SDLCheck>false</SDLCheck>
</ClCompile>
<Lib>
<OutputFile>..\lib\$(ProjectName)-$(TargetCPU)-$(Platform)-vc$(VSVer)-$(Configuration).lib</OutputFile>
</Lib>
<Link>
<OutputFile Condition="'$(TargetExt)'=='.exe'">..\bin\$(ProjectName)-$(TargetCPU)-$(Platform)-vc$(VSVer)-$(Configuration).exe</OutputFile>
<GenerateWindowsMetadata Condition="'$(TargetExt)'=='.lib'">false</GenerateWindowsMetadata>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<BuildMacro Include="VSVer">
<Value>$(VSVer)</Value>
</BuildMacro>
</ItemGroup>
</Project>

View file

@ -0,0 +1,6 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CheckAPI">
<Message Condition="'$(API_Family)'!='$(PROJ_Target)'" Text="Skipped project build"></Message>
<CallTarget Condition="'$(API_Family)'=='$(PROJ_Target)'" Targets="Build"/>
</Target>
</Project>

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="pjproject-vs14-common-defaults.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>14.0.22823.1</_ProjectFileVersion>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="pjproject-vs14-debug-defaults.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>14.0.22823.1</_ProjectFileVersion>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="pjproject-vs14-debug-defaults.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>14.0.22823.1</_ProjectFileVersion>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="pjproject-vs14-common-defaults.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>14.0.22823.1</_ProjectFileVersion>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="pjproject-vs14-release-defaults.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>14.0.22823.1</_ProjectFileVersion>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="pjproject-vs14-release-defaults.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>14.0.22823.1</_ProjectFileVersion>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
</ImportGroup>
<PropertyGroup Label="UserMacros">
<TargetCPU>i386</TargetCPU>
</PropertyGroup>
<PropertyGroup>
<_ProjectFileVersion>14.0.22823.1</_ProjectFileVersion>
</PropertyGroup>
<ItemDefinitionGroup>
<Link>
<SubSystem>Console</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
</Link>
<Lib>
<AdditionalOptions>/ignore:4221</AdditionalOptions>
</Lib>
</ItemDefinitionGroup>
<ItemGroup>
<BuildMacro Include="TargetCPU">
<Value>$(TargetCPU)</Value>
</BuildMacro>
</ItemGroup>
</Project>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="pjproject-vs14-win32-common-defaults.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>14.0.22823.1</_ProjectFileVersion>
</PropertyGroup>
<ItemDefinitionGroup />
<ItemGroup />
</Project>

Some files were not shown because too many files have changed in this diff Show more