Re: #1900:
- Add new property file (pjproject-vs14-api-def.props) to define the API used - Add ioqueue specific to uwp using winRT networking API - Add uwp GUI sample APP using Voip architecture - Add async activation for wasapi dev git-svn-id: https://svn.pjsip.org/repos/pjproject/branches/projects/uwp@5254 74dad513-b988-da41-8d7b-12977e46ad98
|
@ -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>UWP</API_Family>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,16 +1,8 @@
|
|||
<?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>UWP</API_Family>
|
||||
</PropertyGroup>
|
||||
<Import Project="pjproject-vs14-api-def.props" />
|
||||
</ImportGroup>
|
||||
<Choose>
|
||||
<When Condition="'$(Platform)'=='ARM' ">
|
||||
<PropertyGroup>
|
||||
|
|
|
@ -0,0 +1,448 @@
|
|||
/* $Id$ */
|
||||
/*
|
||||
* Copyright (C) 2016 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
/*
|
||||
#include <pj/ioqueue.h>
|
||||
#include <pj/assert.h>
|
||||
#include <pj/errno.h>
|
||||
#include <pj/list.h>
|
||||
#include <pj/lock.h>
|
||||
#include <pj/pool.h>
|
||||
#include <pj/string.h>
|
||||
|
||||
#include <pj/ioqueue.h>
|
||||
#include <pj/os.h>
|
||||
#include <pj/lock.h>
|
||||
#include <pj/log.h>
|
||||
#include <pj/list.h>
|
||||
#include <pj/pool.h>
|
||||
#include <pj/string.h>
|
||||
#include <pj/assert.h>
|
||||
#include <pj/sock.h>
|
||||
#include <pj/compat/socket.h>
|
||||
#include <pj/sock_select.h>
|
||||
#include <pj/sock_qos.h>
|
||||
#include <pj/errno.h>
|
||||
#include <pj/rand.h>
|
||||
*/
|
||||
|
||||
#include <pj/ioqueue.h>
|
||||
#include <pj/sock.h>
|
||||
#include <pj/addr_resolv.h>
|
||||
#include <pj/assert.h>
|
||||
#include <pj/errno.h>
|
||||
#include <pj/lock.h>
|
||||
#include <pj/math.h>
|
||||
#include <pj/os.h>
|
||||
#include <pj/pool.h>
|
||||
#include <pj/string.h>
|
||||
#include <pj/unicode.h>
|
||||
#include <pj/compat/socket.h>
|
||||
|
||||
#include <ppltasks.h>
|
||||
#include <string>
|
||||
|
||||
#include "sock_uwp.h"
|
||||
|
||||
|
||||
/*
|
||||
* IO Queue structure.
|
||||
*/
|
||||
struct pj_ioqueue_t
|
||||
{
|
||||
int dummy;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* IO Queue key structure.
|
||||
*/
|
||||
struct pj_ioqueue_key_t
|
||||
{
|
||||
pj_sock_t sock;
|
||||
void *user_data;
|
||||
pj_ioqueue_callback cb;
|
||||
};
|
||||
|
||||
|
||||
static void on_read(PjUwpSocket *s, int bytes_read)
|
||||
{
|
||||
pj_ioqueue_key_t *key = (pj_ioqueue_key_t*)s->user_data;
|
||||
if (key->cb.on_read_complete) {
|
||||
(*key->cb.on_read_complete)(key, (pj_ioqueue_op_key_t*)s->read_userdata, bytes_read);
|
||||
}
|
||||
s->read_userdata = NULL;
|
||||
}
|
||||
|
||||
static void on_write(PjUwpSocket *s, int bytes_sent)
|
||||
{
|
||||
pj_ioqueue_key_t *key = (pj_ioqueue_key_t*)s->user_data;
|
||||
if (key->cb.on_write_complete) {
|
||||
(*key->cb.on_write_complete)(key, (pj_ioqueue_op_key_t*)s->write_userdata, bytes_sent);
|
||||
}
|
||||
s->write_userdata = NULL;
|
||||
}
|
||||
|
||||
static void on_accept(PjUwpSocket *s, pj_status_t status)
|
||||
{
|
||||
pj_ioqueue_key_t *key = (pj_ioqueue_key_t*)s->user_data;
|
||||
if (key->cb.on_accept_complete) {
|
||||
if (status == PJ_SUCCESS) {
|
||||
pj_sock_t new_sock;
|
||||
pj_sockaddr addr;
|
||||
int addrlen;
|
||||
status = pj_sock_accept(key->sock, &new_sock, &addr, &addrlen);
|
||||
(*key->cb.on_accept_complete)(key, (pj_ioqueue_op_key_t*)s->accept_userdata, new_sock, status);
|
||||
} else {
|
||||
(*key->cb.on_accept_complete)(key, (pj_ioqueue_op_key_t*)s->accept_userdata, NULL, status);
|
||||
}
|
||||
}
|
||||
s->accept_userdata = NULL;
|
||||
}
|
||||
|
||||
static void on_connect(PjUwpSocket *s, pj_status_t status)
|
||||
{
|
||||
pj_ioqueue_key_t *key = (pj_ioqueue_key_t*)s->user_data;
|
||||
if (key->cb.on_connect_complete) {
|
||||
(*key->cb.on_connect_complete)(key, status);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Return the name of the ioqueue implementation.
|
||||
*/
|
||||
PJ_DEF(const char*) pj_ioqueue_name(void)
|
||||
{
|
||||
return "ioqueue-uwp";
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Create a new I/O Queue framework.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_create( pj_pool_t *pool,
|
||||
pj_size_t max_fd,
|
||||
pj_ioqueue_t **p_ioqueue)
|
||||
{
|
||||
pj_ioqueue_t *ioq;
|
||||
|
||||
PJ_UNUSED_ARG(max_fd);
|
||||
|
||||
ioq = PJ_POOL_ZALLOC_T(pool, pj_ioqueue_t);
|
||||
*p_ioqueue = ioq;
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Destroy the I/O queue.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_destroy( pj_ioqueue_t *ioq )
|
||||
{
|
||||
PJ_UNUSED_ARG(ioq);
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Set the lock object to be used by the I/O Queue.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_set_lock( pj_ioqueue_t *ioq,
|
||||
pj_lock_t *lock,
|
||||
pj_bool_t auto_delete )
|
||||
{
|
||||
/* Don't really need lock for now */
|
||||
PJ_UNUSED_ARG(ioq);
|
||||
|
||||
if (auto_delete) {
|
||||
pj_lock_destroy(lock);
|
||||
}
|
||||
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_set_default_concurrency(pj_ioqueue_t *ioqueue,
|
||||
pj_bool_t allow)
|
||||
{
|
||||
/* Not supported, just return PJ_SUCCESS silently */
|
||||
PJ_UNUSED_ARG(ioqueue);
|
||||
PJ_UNUSED_ARG(allow);
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Register a socket to the I/O queue framework.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_register_sock( pj_pool_t *pool,
|
||||
pj_ioqueue_t *ioq,
|
||||
pj_sock_t sock,
|
||||
void *user_data,
|
||||
const pj_ioqueue_callback *cb,
|
||||
pj_ioqueue_key_t **p_key )
|
||||
{
|
||||
PJ_UNUSED_ARG(ioq);
|
||||
|
||||
pj_ioqueue_key_t *key;
|
||||
|
||||
key = PJ_POOL_ZALLOC_T(pool, pj_ioqueue_key_t);
|
||||
key->sock = sock;
|
||||
key->user_data = user_data;
|
||||
pj_memcpy(&key->cb, cb, sizeof(pj_ioqueue_callback));
|
||||
|
||||
PjUwpSocket *s = (PjUwpSocket*)sock;
|
||||
s->is_blocking = PJ_FALSE;
|
||||
s->user_data = key;
|
||||
s->on_read = &on_read;
|
||||
s->on_write = &on_write;
|
||||
s->on_accept = &on_accept;
|
||||
s->on_connect = &on_connect;
|
||||
|
||||
*p_key = key;
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_register_sock2(pj_pool_t *pool,
|
||||
pj_ioqueue_t *ioqueue,
|
||||
pj_sock_t sock,
|
||||
pj_grp_lock_t *grp_lock,
|
||||
void *user_data,
|
||||
const pj_ioqueue_callback *cb,
|
||||
pj_ioqueue_key_t **p_key)
|
||||
{
|
||||
PJ_UNUSED_ARG(grp_lock);
|
||||
|
||||
return pj_ioqueue_register_sock(pool, ioqueue, sock, user_data, cb, p_key);
|
||||
}
|
||||
|
||||
/*
|
||||
* Unregister from the I/O Queue framework.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_unregister( pj_ioqueue_key_t *key )
|
||||
{
|
||||
if (key == NULL || key->sock == NULL)
|
||||
return PJ_SUCCESS;
|
||||
|
||||
if (key->sock)
|
||||
pj_sock_close(key->sock);
|
||||
key->sock = NULL;
|
||||
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Get user data associated with an ioqueue key.
|
||||
*/
|
||||
PJ_DEF(void*) pj_ioqueue_get_user_data( pj_ioqueue_key_t *key )
|
||||
{
|
||||
return key->user_data;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Set or change the user data to be associated with the file descriptor or
|
||||
* handle or socket descriptor.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_set_user_data( pj_ioqueue_key_t *key,
|
||||
void *user_data,
|
||||
void **old_data)
|
||||
{
|
||||
if (old_data)
|
||||
*old_data = key->user_data;
|
||||
key->user_data= user_data;
|
||||
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Initialize operation key.
|
||||
*/
|
||||
PJ_DEF(void) pj_ioqueue_op_key_init( pj_ioqueue_op_key_t *op_key,
|
||||
pj_size_t size )
|
||||
{
|
||||
pj_bzero(op_key, size);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Check if operation is pending on the specified operation key.
|
||||
*/
|
||||
PJ_DEF(pj_bool_t) pj_ioqueue_is_pending( pj_ioqueue_key_t *key,
|
||||
pj_ioqueue_op_key_t *op_key )
|
||||
{
|
||||
PJ_UNUSED_ARG(key);
|
||||
PJ_UNUSED_ARG(op_key);
|
||||
return PJ_FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Post completion status to the specified operation key and call the
|
||||
* appropriate callback.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_post_completion( pj_ioqueue_key_t *key,
|
||||
pj_ioqueue_op_key_t *op_key,
|
||||
pj_ssize_t bytes_status )
|
||||
{
|
||||
PJ_UNUSED_ARG(key);
|
||||
PJ_UNUSED_ARG(op_key);
|
||||
PJ_UNUSED_ARG(bytes_status);
|
||||
return PJ_ENOTSUP;
|
||||
}
|
||||
|
||||
|
||||
#if defined(PJ_HAS_TCP) && PJ_HAS_TCP != 0
|
||||
/**
|
||||
* Instruct I/O Queue to accept incoming connection on the specified
|
||||
* listening socket.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_accept( pj_ioqueue_key_t *key,
|
||||
pj_ioqueue_op_key_t *op_key,
|
||||
pj_sock_t *new_sock,
|
||||
pj_sockaddr_t *local,
|
||||
pj_sockaddr_t *remote,
|
||||
int *addrlen )
|
||||
{
|
||||
PJ_UNUSED_ARG(new_sock);
|
||||
PJ_UNUSED_ARG(local);
|
||||
PJ_UNUSED_ARG(remote);
|
||||
PJ_UNUSED_ARG(addrlen);
|
||||
|
||||
PjUwpSocket *s = (PjUwpSocket*)key->sock;
|
||||
s->accept_userdata = op_key;
|
||||
return pj_sock_listen(key->sock, 0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Initiate non-blocking socket connect.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_connect( pj_ioqueue_key_t *key,
|
||||
const pj_sockaddr_t *addr,
|
||||
int addrlen )
|
||||
{
|
||||
return pj_sock_connect(key->sock, addr, addrlen);
|
||||
}
|
||||
|
||||
|
||||
#endif /* PJ_HAS_TCP */
|
||||
|
||||
/*
|
||||
* Poll the I/O Queue for completed events.
|
||||
*/
|
||||
PJ_DEF(int) pj_ioqueue_poll( pj_ioqueue_t *ioq,
|
||||
const pj_time_val *timeout)
|
||||
{
|
||||
/* Polling is not necessary on uwp, since all async activities
|
||||
* are registered to active scheduler.
|
||||
*/
|
||||
PJ_UNUSED_ARG(ioq);
|
||||
PJ_UNUSED_ARG(timeout);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Instruct the I/O Queue to read from the specified handle.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_recv( pj_ioqueue_key_t *key,
|
||||
pj_ioqueue_op_key_t *op_key,
|
||||
void *buffer,
|
||||
pj_ssize_t *length,
|
||||
pj_uint32_t flags )
|
||||
{
|
||||
PjUwpSocket *s = (PjUwpSocket*)key->sock;
|
||||
s->read_userdata = op_key;
|
||||
return pj_sock_recv(key->sock, buffer, length, flags);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This function behaves similarly as #pj_ioqueue_recv(), except that it is
|
||||
* normally called for socket, and the remote address will also be returned
|
||||
* along with the data.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_recvfrom( pj_ioqueue_key_t *key,
|
||||
pj_ioqueue_op_key_t *op_key,
|
||||
void *buffer,
|
||||
pj_ssize_t *length,
|
||||
pj_uint32_t flags,
|
||||
pj_sockaddr_t *addr,
|
||||
int *addrlen)
|
||||
{
|
||||
PjUwpSocket *s = (PjUwpSocket*)key->sock;
|
||||
s->read_userdata = op_key;
|
||||
return pj_sock_recvfrom(key->sock, buffer, length, flags, addr, addrlen);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Instruct the I/O Queue to write to the handle.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_send( pj_ioqueue_key_t *key,
|
||||
pj_ioqueue_op_key_t *op_key,
|
||||
const void *data,
|
||||
pj_ssize_t *length,
|
||||
pj_uint32_t flags )
|
||||
{
|
||||
PjUwpSocket *s = (PjUwpSocket*)key->sock;
|
||||
s->write_userdata = op_key;
|
||||
return pj_sock_send(key->sock, data, length, flags);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Instruct the I/O Queue to write to the handle.
|
||||
*/
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_sendto( pj_ioqueue_key_t *key,
|
||||
pj_ioqueue_op_key_t *op_key,
|
||||
const void *data,
|
||||
pj_ssize_t *length,
|
||||
pj_uint32_t flags,
|
||||
const pj_sockaddr_t *addr,
|
||||
int addrlen)
|
||||
{
|
||||
PjUwpSocket *s = (PjUwpSocket*)key->sock;
|
||||
s->write_userdata = op_key;
|
||||
return pj_sock_sendto(key->sock, data, length, flags, addr, addrlen);
|
||||
}
|
||||
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_set_concurrency(pj_ioqueue_key_t *key,
|
||||
pj_bool_t allow)
|
||||
{
|
||||
/* Not supported, just return PJ_SUCCESS silently */
|
||||
PJ_UNUSED_ARG(key);
|
||||
PJ_UNUSED_ARG(allow);
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_lock_key(pj_ioqueue_key_t *key)
|
||||
{
|
||||
/* Not supported, just return PJ_SUCCESS silently */
|
||||
PJ_UNUSED_ARG(key);
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
PJ_DEF(pj_status_t) pj_ioqueue_unlock_key(pj_ioqueue_key_t *key)
|
||||
{
|
||||
/* Not supported, just return PJ_SUCCESS silently */
|
||||
PJ_UNUSED_ARG(key);
|
||||
return PJ_SUCCESS;
|
||||
}
|
|
@ -0,0 +1,238 @@
|
|||
/* $Id$ */
|
||||
/*
|
||||
* Copyright (C) 2016 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
enum {
|
||||
READ_TIMEOUT = 60 * 1000,
|
||||
WRITE_TIMEOUT = 60 * 1000,
|
||||
SEND_BUFFER_SIZE = 128 * 1024,
|
||||
};
|
||||
|
||||
enum PjUwpSocketType {
|
||||
SOCKTYPE_UNKNOWN, SOCKTYPE_LISTENER,
|
||||
SOCKTYPE_STREAM, SOCKTYPE_DATAGRAM
|
||||
};
|
||||
|
||||
enum PjUwpSocketState {
|
||||
SOCKSTATE_NULL, SOCKSTATE_INITIALIZED, SOCKSTATE_CONNECTING,
|
||||
SOCKSTATE_CONNECTED, SOCKSTATE_DISCONNECTED, SOCKSTATE_ERROR
|
||||
};
|
||||
|
||||
ref class PjUwpSocketDatagramRecvHelper;
|
||||
ref class PjUwpSocketListenerHelper;
|
||||
|
||||
/*
|
||||
* UWP Socket Wrapper.
|
||||
*/
|
||||
class PjUwpSocket
|
||||
{
|
||||
public:
|
||||
PjUwpSocket(int af_, int type_, int proto_);
|
||||
PjUwpSocket* CreateAcceptSocket(Windows::Networking::Sockets::StreamSocket^ stream_sock_);
|
||||
virtual ~PjUwpSocket();
|
||||
|
||||
pj_status_t InitSocket(enum PjUwpSocketType sock_type_);
|
||||
|
||||
public:
|
||||
int af;
|
||||
int type;
|
||||
int proto;
|
||||
pj_sockaddr local_addr;
|
||||
pj_sockaddr remote_addr;
|
||||
pj_bool_t is_blocking;
|
||||
void *user_data;
|
||||
|
||||
enum PjUwpSocketType sock_type;
|
||||
enum PjUwpSocketState sock_state;
|
||||
Windows::Networking::Sockets::DatagramSocket^ datagram_sock;
|
||||
Windows::Networking::Sockets::StreamSocket^ stream_sock;
|
||||
Windows::Networking::Sockets::StreamSocketListener^ listener_sock;
|
||||
|
||||
/* Helper objects */
|
||||
PjUwpSocketDatagramRecvHelper^ datagram_recv_helper;
|
||||
PjUwpSocketListenerHelper^ listener_helper;
|
||||
|
||||
Windows::Storage::Streams::DataReader^ socket_reader;
|
||||
Windows::Storage::Streams::DataWriter^ socket_writer;
|
||||
Windows::Storage::Streams::IBuffer^ send_buffer;
|
||||
pj_bool_t is_busy_sending;
|
||||
|
||||
void *read_userdata;
|
||||
void *write_userdata;
|
||||
void *accept_userdata;
|
||||
|
||||
void (*on_read)(PjUwpSocket *s, int bytes_read);
|
||||
void (*on_write)(PjUwpSocket *s, int bytes_sent);
|
||||
void (*on_accept)(PjUwpSocket *s, pj_status_t status);
|
||||
void (*on_connect)(PjUwpSocket *s, pj_status_t status);
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////
|
||||
// Misc
|
||||
|
||||
|
||||
inline pj_status_t wstr_addr_to_sockaddr(const wchar_t *waddr,
|
||||
const wchar_t *wport,
|
||||
pj_sockaddr_t *sockaddr)
|
||||
{
|
||||
char tmp_str_buf[PJ_INET6_ADDRSTRLEN+1];
|
||||
pj_assert(wcslen(waddr) < sizeof(tmp_str_buf));
|
||||
pj_unicode_to_ansi(waddr, wcslen(waddr), tmp_str_buf, sizeof(tmp_str_buf));
|
||||
pj_str_t remote_host;
|
||||
pj_strset(&remote_host, tmp_str_buf, pj_ansi_strlen(tmp_str_buf));
|
||||
pj_sockaddr_parse(pj_AF_UNSPEC(), 0, &remote_host, (pj_sockaddr*)sockaddr);
|
||||
pj_sockaddr_set_port((pj_sockaddr*)sockaddr, (pj_uint16_t)_wtoi(wport));
|
||||
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
inline pj_status_t sockaddr_to_hostname_port(const pj_sockaddr_t *sockaddr,
|
||||
Windows::Networking::HostName ^&hostname,
|
||||
int *port)
|
||||
{
|
||||
char tmp[PJ_INET6_ADDRSTRLEN];
|
||||
wchar_t wtmp[PJ_INET6_ADDRSTRLEN];
|
||||
pj_sockaddr_print(sockaddr, tmp, PJ_INET6_ADDRSTRLEN, 0);
|
||||
pj_ansi_to_unicode(tmp, pj_ansi_strlen(tmp), wtmp,
|
||||
PJ_INET6_ADDRSTRLEN);
|
||||
hostname = ref new Windows::Networking::HostName(ref new Platform::String(wtmp));
|
||||
*port = pj_sockaddr_get_port(sockaddr);
|
||||
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Buffer helper */
|
||||
|
||||
#include <Robuffer.h>
|
||||
#include <wrl/client.h>
|
||||
|
||||
inline Microsoft::WRL::ComPtr<Windows::Storage::Streams::IBufferByteAccess> GetBufferByteAccess(Windows::Storage::Streams::IBuffer^ buffer)
|
||||
{
|
||||
auto pUnk = reinterpret_cast<IUnknown*>(buffer);
|
||||
|
||||
Microsoft::WRL::ComPtr<Windows::Storage::Streams::IBufferByteAccess> comBuff;
|
||||
pUnk->QueryInterface(__uuidof(Windows::Storage::Streams::IBufferByteAccess), (void**)comBuff.ReleaseAndGetAddressOf());
|
||||
|
||||
return comBuff;
|
||||
}
|
||||
|
||||
|
||||
inline void GetRawBufferFromIBuffer(Windows::Storage::Streams::IBuffer^ buffer, unsigned char** pbuffer)
|
||||
{
|
||||
Platform::Object^ obj = buffer;
|
||||
Microsoft::WRL::ComPtr<IInspectable> insp(reinterpret_cast<IInspectable*>(obj));
|
||||
Microsoft::WRL::ComPtr<Windows::Storage::Streams::IBufferByteAccess> bufferByteAccess;
|
||||
insp.As(&bufferByteAccess);
|
||||
bufferByteAccess->Buffer(pbuffer);
|
||||
}
|
||||
|
||||
inline void CopyToIBuffer(unsigned char* buffSource, unsigned int copyByteCount, Windows::Storage::Streams::IBuffer^ buffer, unsigned int writeStartPos = 0)
|
||||
{
|
||||
auto bufferLen = buffer->Capacity;
|
||||
assert(copyByteCount <= bufferLen);
|
||||
|
||||
unsigned char* pBuffer;
|
||||
|
||||
GetRawBufferFromIBuffer(buffer, &pBuffer);
|
||||
|
||||
memcpy(pBuffer + writeStartPos, buffSource, copyByteCount);
|
||||
}
|
||||
|
||||
inline void CopyFromIBuffer(unsigned char* buffDestination, unsigned int copyByteCount, Windows::Storage::Streams::IBuffer^ buffer, unsigned int readStartPos = 0)
|
||||
{
|
||||
assert(copyByteCount <= buffer->Capacity);
|
||||
|
||||
unsigned char* pBuffer;
|
||||
|
||||
GetRawBufferFromIBuffer(buffer, &pBuffer);
|
||||
|
||||
memcpy(buffDestination, pBuffer + readStartPos, copyByteCount);
|
||||
}
|
||||
|
||||
|
||||
/* PPL helper */
|
||||
|
||||
#include <ppltasks.h>
|
||||
#include <agents.h>
|
||||
|
||||
// Creates a task that completes after the specified delay, in ms.
|
||||
inline concurrency::task<void> complete_after(unsigned int timeout)
|
||||
{
|
||||
// A task completion event that is set when a timer fires.
|
||||
concurrency::task_completion_event<void> tce;
|
||||
|
||||
// Create a non-repeating timer.
|
||||
auto fire_once = new concurrency::timer<int>(timeout, 0, nullptr, false);
|
||||
// Create a call object that sets the completion event after the timer fires.
|
||||
auto callback = new concurrency::call<int>([tce](int)
|
||||
{
|
||||
tce.set();
|
||||
});
|
||||
|
||||
// Connect the timer to the callback and start the timer.
|
||||
fire_once->link_target(callback);
|
||||
fire_once->start();
|
||||
|
||||
// Create a task that completes after the completion event is set.
|
||||
concurrency::task<void> event_set(tce);
|
||||
|
||||
// Create a continuation task that cleans up resources and
|
||||
// and return that continuation task.
|
||||
return event_set.then([callback, fire_once]()
|
||||
{
|
||||
delete callback;
|
||||
delete fire_once;
|
||||
});
|
||||
}
|
||||
|
||||
// Cancels the provided task after the specifed delay, if the task
|
||||
// did not complete.
|
||||
template<typename T>
|
||||
inline concurrency::task<T> cancel_after_timeout(concurrency::task<T> t, concurrency::cancellation_token_source cts, unsigned int timeout)
|
||||
{
|
||||
// Create a task that returns true after the specified task completes.
|
||||
concurrency::task<bool> success_task = t.then([](T)
|
||||
{
|
||||
return true;
|
||||
});
|
||||
// Create a task that returns false after the specified timeout.
|
||||
concurrency::task<bool> failure_task = complete_after(timeout).then([]
|
||||
{
|
||||
return false;
|
||||
});
|
||||
|
||||
// Create a continuation task that cancels the overall task
|
||||
// if the timeout task finishes first.
|
||||
return (failure_task || success_task).then([t, cts](bool success)
|
||||
{
|
||||
if (!success)
|
||||
{
|
||||
// Set the cancellation token. The task that is passed as the
|
||||
// t parameter should respond to the cancellation and stop
|
||||
// as soon as it can.
|
||||
cts.cancel();
|
||||
}
|
||||
|
||||
// Return the original task.
|
||||
return t;
|
||||
});
|
||||
}
|
|
@ -26,6 +26,7 @@
|
|||
#include <Avrt.h>
|
||||
#include <windows.h>
|
||||
#include <audioclient.h>
|
||||
#include <Processthreadsapi.h>
|
||||
|
||||
#if defined(PJ_WIN32_UWP) && PJ_WIN32_UWP
|
||||
#define USE_ASYNC_ACTIVATE 1;
|
||||
|
@ -37,7 +38,7 @@
|
|||
#include <ppltasks.h>
|
||||
using namespace Windows::Media::Devices;
|
||||
using namespace Microsoft::WRL;
|
||||
using namespace concurrency;
|
||||
using namespace concurrency;
|
||||
#else
|
||||
#include <phoneaudioclient.h>
|
||||
#using <Windows.winmd>
|
||||
|
@ -106,8 +107,7 @@ struct wasapi_stream
|
|||
pjmedia_format_id fmt_id; /* Frame format */
|
||||
unsigned bytes_per_sample;
|
||||
|
||||
/* Playback */
|
||||
LPCWSTR pb_id; /* playback Id */
|
||||
/* Playback */
|
||||
pjmedia_aud_play_cb pb_cb; /* Playback callback */
|
||||
IAudioClient2 *default_pb_dev; /* Default playback dev */
|
||||
IAudioRenderClient *pb_client; /* Playback client */
|
||||
|
@ -117,10 +117,12 @@ struct wasapi_stream
|
|||
pj_timestamp pb_timestamp;
|
||||
#if defined(USE_ASYNC_ACTIVATE)
|
||||
ComPtr<AudioActivator> pb_aud_act;
|
||||
Platform::String^ pb_id;
|
||||
#else
|
||||
LPCWSTR pb_id;
|
||||
#endif
|
||||
|
||||
/* Capture */
|
||||
LPCWSTR cap_id; /* Capture Id */
|
||||
/* Capture */
|
||||
pjmedia_aud_rec_cb cap_cb; /* Capture callback */
|
||||
IAudioClient2 *default_cap_dev; /* Default capture dev */
|
||||
IAudioCaptureClient *cap_client; /* Capture client */
|
||||
|
@ -132,6 +134,9 @@ struct wasapi_stream
|
|||
pj_timestamp cap_timestamp;
|
||||
#if defined(USE_ASYNC_ACTIVATE)
|
||||
ComPtr<AudioActivator> cap_aud_act;
|
||||
Platform::String^ cap_id;
|
||||
#else
|
||||
LPCWSTR cap_id;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -250,25 +255,6 @@ static int PJ_THREAD_FUNC wasapi_dev_thread(void *arg)
|
|||
if (strm->param.dir & PJMEDIA_DIR_CAPTURE)
|
||||
events[eventCount++] = strm->cap_event;
|
||||
|
||||
/* Raise self priority. We don't want the audio to be distorted by
|
||||
* system activity.
|
||||
*/
|
||||
#if defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE != 0
|
||||
if (strm->param.dir & PJMEDIA_DIR_PLAYBACK)
|
||||
CeSetThreadPriority(GetCurrentThread(), 153);
|
||||
else
|
||||
CeSetThreadPriority(GetCurrentThread(), 247);
|
||||
#else
|
||||
//SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
|
||||
#endif
|
||||
|
||||
/* Raise thread priority */
|
||||
// mmcs_handle = AvSetMmThreadCharacteristicsW(L"Audio",
|
||||
// &mmcss_task_index);
|
||||
// if (!mmcs_handle) {
|
||||
//PJ_LOG(4,(THIS_FILE, "Unable to enable MMCS on wasapi stream thread"));
|
||||
// }
|
||||
|
||||
/*
|
||||
* Loop while not signalled to quit, wait for event objects to be
|
||||
* signalled by Wasapi capture and play buffer.
|
||||
|
@ -335,6 +321,7 @@ static int PJ_THREAD_FUNC wasapi_dev_thread(void *arg)
|
|||
|
||||
hr = strm->pb_client->GetBuffer(frame_to_render, &cur_pb_buf);
|
||||
if (FAILED(hr)) {
|
||||
PJ_LOG(4, (THIS_FILE, "Error getting wasapi buffer"));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -352,6 +339,7 @@ static int PJ_THREAD_FUNC wasapi_dev_thread(void *arg)
|
|||
/* Write to the device. */
|
||||
hr = strm->pb_client->ReleaseBuffer(frame_to_render, 0);
|
||||
if (FAILED(hr)) {
|
||||
PJ_LOG(4, (THIS_FILE, "Error releasing wasapi buffer"));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -362,8 +350,10 @@ static int PJ_THREAD_FUNC wasapi_dev_thread(void *arg)
|
|||
pj_uint32_t packet_size = 0;
|
||||
|
||||
hr = strm->cap_client->GetNextPacketSize(&packet_size);
|
||||
if (FAILED(hr))
|
||||
if (FAILED(hr)) {
|
||||
PJ_LOG(4, (THIS_FILE, "Error getting next packet size"));
|
||||
continue;
|
||||
}
|
||||
|
||||
while (packet_size) {
|
||||
|
||||
|
@ -379,6 +369,8 @@ static int PJ_THREAD_FUNC wasapi_dev_thread(void *arg)
|
|||
NULL);
|
||||
|
||||
if (FAILED(hr) || (next_frame_size == 0)) {
|
||||
PJ_LOG(4, (THIS_FILE, "Error getting next buffer, \
|
||||
next frame size : %d", next_frame_size));
|
||||
packet_size = 0;
|
||||
continue;
|
||||
}
|
||||
|
@ -479,14 +471,14 @@ static int PJ_THREAD_FUNC wasapi_dev_thread(void *arg)
|
|||
hr = strm->cap_client->ReleaseBuffer(next_frame_size);
|
||||
|
||||
hr = strm->cap_client->GetNextPacketSize(&packet_size);
|
||||
if (FAILED(hr))
|
||||
if (FAILED(hr)) {
|
||||
PJ_LOG(4, (THIS_FILE, "Error getting next packet size"));
|
||||
packet_size = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//AvRevertMmThreadCharacteristics(mmcs_handle);
|
||||
|
||||
PJ_LOG(5,(THIS_FILE, "WASAPI: thread stopping.."));
|
||||
return 0;
|
||||
}
|
||||
|
@ -498,7 +490,7 @@ static pj_status_t activate_capture_dev(struct wasapi_stream *ws)
|
|||
#if defined(USE_ASYNC_ACTIVATE)
|
||||
ComPtr<IActivateAudioInterfaceAsyncOperation> async_op;
|
||||
ws->cap_id = MediaDevice::GetDefaultAudioCaptureId(
|
||||
AudioDeviceRole::Communications)->Data();
|
||||
AudioDeviceRole::Communications);
|
||||
#else
|
||||
ws->cap_id = GetDefaultAudioCaptureId(AudioDeviceRole::Communications);
|
||||
#endif
|
||||
|
@ -509,22 +501,33 @@ static pj_status_t activate_capture_dev(struct wasapi_stream *ws)
|
|||
}
|
||||
|
||||
#if defined(USE_ASYNC_ACTIVATE)
|
||||
|
||||
ws->cap_aud_act = Make<AudioActivator>();
|
||||
if (ws->cap_aud_act == NULL) {
|
||||
PJ_LOG(4, (THIS_FILE, "Error activating capture device"));
|
||||
return PJMEDIA_EAUD_SYSERR;
|
||||
}
|
||||
hr = ActivateAudioInterfaceAsync(ws->cap_id, __uuidof(IAudioClient2),
|
||||
hr = ActivateAudioInterfaceAsync(ws->cap_id->Data(),
|
||||
__uuidof(IAudioClient2),
|
||||
NULL, ws->cap_aud_act.Get(),
|
||||
&async_op);
|
||||
|
||||
//pj_thread_sleep(100);
|
||||
auto task_completed = create_task(ws->cap_aud_act->task_completed);
|
||||
task_completed.wait();
|
||||
task_completed.wait();
|
||||
ws->default_cap_dev = task_completed.get().Get();
|
||||
#else
|
||||
hr = ActivateAudioInterface(ws->cap_id, __uuidof(IAudioClient2),
|
||||
(void**)&ws->default_cap_dev);
|
||||
#endif
|
||||
AudioClientProperties properties = {};
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
properties.cbSize = sizeof AudioClientProperties;
|
||||
properties.eCategory = AudioCategory_Communications;
|
||||
hr = ws->default_cap_dev->SetClientProperties(&properties);
|
||||
}
|
||||
|
||||
return FAILED(hr) ? PJMEDIA_EAUD_SYSERR : PJ_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -633,7 +636,7 @@ static pj_status_t activate_playback_dev(struct wasapi_stream *ws)
|
|||
ComPtr<IActivateAudioInterfaceAsyncOperation> async_op;
|
||||
|
||||
ws->pb_id = MediaDevice::GetDefaultAudioRenderId(
|
||||
AudioDeviceRole::Communications)->Data();
|
||||
AudioDeviceRole::Communications);
|
||||
#else
|
||||
ws->pb_id = GetDefaultAudioRenderId(AudioDeviceRole::Communications);
|
||||
#endif
|
||||
|
@ -649,10 +652,12 @@ static pj_status_t activate_playback_dev(struct wasapi_stream *ws)
|
|||
PJ_LOG(4, (THIS_FILE, "Error activating playback device"));
|
||||
return PJMEDIA_EAUD_SYSERR;
|
||||
}
|
||||
hr = ActivateAudioInterfaceAsync(ws->pb_id, __uuidof(IAudioClient2),
|
||||
hr = ActivateAudioInterfaceAsync(ws->pb_id->Data(),
|
||||
__uuidof(IAudioClient2),
|
||||
NULL, ws->pb_aud_act.Get(),
|
||||
&async_op);
|
||||
|
||||
//pj_thread_sleep(100);
|
||||
auto task_completed = create_task(ws->pb_aud_act->task_completed);
|
||||
task_completed.wait();
|
||||
ws->default_pb_dev = task_completed.get().Get();
|
||||
|
@ -660,6 +665,14 @@ static pj_status_t activate_playback_dev(struct wasapi_stream *ws)
|
|||
hr = ActivateAudioInterface(ws->pb_id, __uuidof(IAudioClient2),
|
||||
(void**)&ws->default_pb_dev);
|
||||
#endif
|
||||
|
||||
AudioClientProperties properties = {};
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
properties.cbSize = sizeof AudioClientProperties;
|
||||
properties.eCategory = AudioCategory_Communications;
|
||||
hr = ws->default_pb_dev->SetClientProperties(&properties);
|
||||
}
|
||||
|
||||
return FAILED(hr) ? PJMEDIA_EAUD_SYSERR : PJ_SUCCESS;
|
||||
}
|
||||
|
@ -1024,31 +1037,6 @@ static pj_status_t wasapi_factory_create_stream(pjmedia_aud_dev_factory *f,
|
|||
}
|
||||
}
|
||||
|
||||
/* Apply the remaining settings */
|
||||
/* Set the output volume */
|
||||
// if (param->flags & PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING) {
|
||||
// status = wasapi_stream_set_cap(&strm->base,
|
||||
// PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
|
||||
// ¶m->output_vol);
|
||||
//if (status != PJ_SUCCESS) {
|
||||
// PJ_LOG(4, (THIS_FILE, "Error setting output volume:%d", status));
|
||||
//}
|
||||
// }
|
||||
|
||||
// /* Set the audio routing ONLY if app explicitly asks one */
|
||||
// if ((param->dir & PJMEDIA_DIR_PLAYBACK) &&
|
||||
//(param->flags & PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE))
|
||||
// {
|
||||
//PJ_TODO(CREATE_STREAM_WITH_AUDIO_ROUTE);
|
||||
////status = wasapi_stream_set_cap(&strm->base,
|
||||
//// PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE,
|
||||
//// ¶m->output_route);
|
||||
////if (status != PJ_SUCCESS) {
|
||||
//// PJ_LOG(4, (THIS_FILE, "Error setting output route,status: %d",
|
||||
//// status));
|
||||
////}
|
||||
// }
|
||||
|
||||
strm->quit_event = CreateEventEx(NULL, NULL, CREATE_EVENT_MANUAL_RESET,
|
||||
EVENT_ALL_ACCESS);
|
||||
if (!strm->quit_event)
|
||||
|
@ -1127,41 +1115,6 @@ static pj_status_t wasapi_stream_set_cap(pjmedia_aud_stream *s,
|
|||
|
||||
PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
|
||||
|
||||
|
||||
// if (cap==PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE &&
|
||||
// (strm->param.dir & PJMEDIA_DIR_PLAYBACK))
|
||||
// {
|
||||
//pjmedia_aud_dev_route route;
|
||||
//AudioRoutingEndpoint endpoint;
|
||||
//AudioRoutingManager ^routing_mgr = AudioRoutingManager::GetDefault();
|
||||
|
||||
//PJ_ASSERT_RETURN(pval, PJ_EINVAL);
|
||||
|
||||
// route = *((pjmedia_aud_dev_route*)pval);
|
||||
// /* Use the initialization function which lazy-inits the
|
||||
// * handle for routing
|
||||
// */
|
||||
//switch (route) {
|
||||
// case PJMEDIA_AUD_DEV_ROUTE_DEFAULT :
|
||||
// endpoint = AudioRoutingEndpoint::Default;
|
||||
// break;
|
||||
// case PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER :
|
||||
// endpoint = AudioRoutingEndpoint::Speakerphone;
|
||||
// break;
|
||||
// case PJMEDIA_AUD_DEV_ROUTE_EARPIECE :
|
||||
// endpoint = AudioRoutingEndpoint::Earpiece;
|
||||
// break;
|
||||
// case PJMEDIA_AUD_DEV_ROUTE_BLUETOOTH :
|
||||
// endpoint = AudioRoutingEndpoint::Bluetooth;
|
||||
// break;
|
||||
// default:
|
||||
// endpoint = AudioRoutingEndpoint::Default;
|
||||
//}
|
||||
//routing_mgr->SetAudioEndpoint(endpoint);
|
||||
//
|
||||
//return PJ_SUCCESS;
|
||||
// }
|
||||
|
||||
return PJMEDIA_EAUD_INVCAP;
|
||||
}
|
||||
|
||||
|
@ -1295,13 +1248,6 @@ static pj_status_t wasapi_stream_destroy(pjmedia_aud_stream *strm)
|
|||
ws->pb_volume = NULL;
|
||||
}
|
||||
|
||||
if (ws->cap_id) {
|
||||
CoTaskMemFree((LPVOID)ws->cap_id);
|
||||
}
|
||||
|
||||
if (ws->pb_id) {
|
||||
CoTaskMemFree((LPVOID)ws->pb_id);
|
||||
}
|
||||
|
||||
#if defined(USE_ASYNC_ACTIVATE)
|
||||
/* Release audio activator */
|
||||
|
@ -1312,6 +1258,22 @@ static pj_status_t wasapi_stream_destroy(pjmedia_aud_stream *strm)
|
|||
if (ws->pb_aud_act) {
|
||||
ws->pb_aud_act = nullptr;
|
||||
}
|
||||
|
||||
if (ws->cap_id) {
|
||||
ws->cap_id = nullptr;
|
||||
}
|
||||
|
||||
if (ws->pb_id) {
|
||||
ws->pb_id = nullptr;
|
||||
}
|
||||
#else
|
||||
if (ws->cap_id) {
|
||||
CoTaskMemFree((LPVOID)ws->cap_id);
|
||||
}
|
||||
|
||||
if (ws->pb_id) {
|
||||
CoTaskMemFree((LPVOID)ws->pb_id);
|
||||
}
|
||||
#endif
|
||||
|
||||
pj_pool_release(ws->pool);
|
||||
|
|
|
@ -5,6 +5,7 @@ VisualStudioVersion = 14.0.23107.0
|
|||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1DFF1CF3-DBD7-4DA4-A36D-663D695EB678}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
build\vs\pjproject-vs14-api-def.props = build\vs\pjproject-vs14-api-def.props
|
||||
build\vs\pjproject-vs14-arm-common-defaults.props = build\vs\pjproject-vs14-arm-common-defaults.props
|
||||
build\vs\pjproject-vs14-arm-release-defaults.props = build\vs\pjproject-vs14-arm-release-defaults.props
|
||||
build\vs\pjproject-vs14-common-config.props = build\vs\pjproject-vs14-common-config.props
|
||||
|
@ -97,6 +98,34 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pjsua_cli_wp8_comp", "pjsip
|
|||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pjsua_winrt", "pjsua_winrt", "{54F6163A-66C6-4F09-844D-CC61DE8EE376}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "winrt sample", "winrt sample", "{78DA8BE5-2D77-49D6-8CA4-7847B65DBE84}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "uwp foreground", "uwp foreground", "{452C38CE-6463-4963-A113-658B6BD91D15}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wp8", "wp8", "{DE5C2BE2-873A-4B85-8EBE-8AEA4C80212F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Agents", "pjsip-apps\src\pjsua\winrt\gui\wp8\Agents\Agents.csproj", "{820034C1-645D-4340-8813-D980C1EF77DE}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BackEnd", "pjsip-apps\src\pjsua\winrt\gui\wp8\BackEnd\BackEnd.vcxproj", "{C8D75245-FFCF-4932-A228-C9CC8BB60B03}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BackEndProxyStub", "pjsip-apps\src\pjsua\winrt\gui\wp8\BackEndProxyStub\BackEndProxyStub.vcxproj", "{BBABEEA1-494C-4618-96E3-399873A5558B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UI", "pjsip-apps\src\pjsua\winrt\gui\wp8\UI\UI.csproj", "{3085ACA0-00DA-45BF-9110-A3684B56EBBA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UI", "pjsip-apps\src\pjsua\winrt\gui\uwp foreground\UI\UI.csproj", "{D51DC5BE-5822-4B94-891C-E1B1B7892939}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BackEnd", "pjsip-apps\src\pjsua\winrt\gui\uwp foreground\BackEnd\BackEnd.vcxproj", "{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "uwp", "uwp", "{87D83489-039E-4123-BE01-CB62EE932A29}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Voip", "pjsip-apps\src\pjsua\winrt\gui\uwp\Voip\Voip.csproj", "{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VoipBackEnd", "pjsip-apps\src\pjsua\winrt\gui\uwp\VoipBackEnd\VoipBackEnd.vcxproj", "{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VoipHost", "pjsip-apps\src\pjsua\winrt\gui\uwp\VoipHost\VoipHost.vcxproj", "{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VoipTasks", "pjsip-apps\src\pjsua\winrt\gui\uwp\VoipTasks\VoipTasks.csproj", "{9FDF5E33-D15D-409F-876E-4E77727936B9}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
||||
pjsip-apps\src\pjsua\winrt\cli\comp\pjsua_cli_shared_comp.vcxitems*{207e7bd4-7b11-4a40-ba3a-cc627762a7b6}*SharedItemsImports = 4
|
||||
|
@ -1639,6 +1668,556 @@ Global
|
|||
{E75EFD41-C7F5-44C8-8FF1-A310D920989D}.Release-Static|Win32.Build.0 = Release|Win32
|
||||
{E75EFD41-C7F5-44C8-8FF1-A310D920989D}.Release-Static|x64.ActiveCfg = Release|ARM
|
||||
{E75EFD41-C7F5-44C8-8FF1-A310D920989D}.Release-Static|x64.Build.0 = Release|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug|x64.Build.0 = Debug|x64
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Dynamic|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Dynamic|Any CPU.Build.0 = Debug|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Dynamic|ARM.ActiveCfg = Debug|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Dynamic|ARM.Build.0 = Debug|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Dynamic|Win32.ActiveCfg = Debug|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Dynamic|Win32.Build.0 = Debug|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Dynamic|x64.ActiveCfg = Debug|x64
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Dynamic|x64.Build.0 = Debug|x64
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Static|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Static|Any CPU.Build.0 = Debug|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Static|ARM.ActiveCfg = Debug|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Static|ARM.Build.0 = Debug|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Static|Win32.ActiveCfg = Debug|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Static|Win32.Build.0 = Debug|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Static|x64.ActiveCfg = Debug|x64
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Debug-Static|x64.Build.0 = Debug|x64
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release|ARM.Build.0 = Release|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release|Win32.Build.0 = Release|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release|x64.ActiveCfg = Release|x64
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release|x64.Build.0 = Release|x64
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Dynamic|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Dynamic|Any CPU.Build.0 = Release|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Dynamic|ARM.ActiveCfg = Release|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Dynamic|ARM.Build.0 = Release|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Dynamic|Win32.ActiveCfg = Release|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Dynamic|Win32.Build.0 = Release|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Dynamic|x64.ActiveCfg = Release|x64
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Dynamic|x64.Build.0 = Release|x64
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Static|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Static|Any CPU.Build.0 = Release|Any CPU
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Static|ARM.ActiveCfg = Release|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Static|ARM.Build.0 = Release|ARM
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Static|Win32.ActiveCfg = Release|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Static|Win32.Build.0 = Release|Win32
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Static|x64.ActiveCfg = Release|x64
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE}.Release-Static|x64.Build.0 = Release|x64
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Dynamic|Any CPU.ActiveCfg = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Dynamic|Any CPU.Build.0 = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Dynamic|ARM.ActiveCfg = Debug|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Dynamic|ARM.Build.0 = Debug|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Dynamic|Win32.ActiveCfg = Debug|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Dynamic|Win32.Build.0 = Debug|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Dynamic|x64.ActiveCfg = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Dynamic|x64.Build.0 = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Static|Any CPU.ActiveCfg = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Static|Any CPU.Build.0 = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Static|ARM.ActiveCfg = Debug|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Static|ARM.Build.0 = Debug|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Static|Win32.ActiveCfg = Debug|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Static|Win32.Build.0 = Debug|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Static|x64.ActiveCfg = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Debug-Static|x64.Build.0 = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release|ARM.Build.0 = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release|Win32.Build.0 = Release|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release|x64.ActiveCfg = Release|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Dynamic|Any CPU.ActiveCfg = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Dynamic|Any CPU.Build.0 = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Dynamic|ARM.ActiveCfg = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Dynamic|ARM.Build.0 = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Dynamic|Win32.ActiveCfg = Release|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Dynamic|Win32.Build.0 = Release|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Dynamic|x64.ActiveCfg = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Dynamic|x64.Build.0 = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Static|Any CPU.ActiveCfg = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Static|Any CPU.Build.0 = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Static|ARM.ActiveCfg = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Static|ARM.Build.0 = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Static|Win32.ActiveCfg = Release|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Static|Win32.Build.0 = Release|Win32
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Static|x64.ActiveCfg = Release|ARM
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03}.Release-Static|x64.Build.0 = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Dynamic|Any CPU.ActiveCfg = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Dynamic|Any CPU.Build.0 = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Dynamic|ARM.ActiveCfg = Debug|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Dynamic|ARM.Build.0 = Debug|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Dynamic|Win32.ActiveCfg = Debug|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Dynamic|Win32.Build.0 = Debug|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Dynamic|x64.ActiveCfg = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Dynamic|x64.Build.0 = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Static|Any CPU.ActiveCfg = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Static|Any CPU.Build.0 = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Static|ARM.ActiveCfg = Debug|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Static|ARM.Build.0 = Debug|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Static|Win32.ActiveCfg = Debug|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Static|Win32.Build.0 = Debug|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Static|x64.ActiveCfg = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Debug-Static|x64.Build.0 = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release|ARM.Build.0 = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release|Win32.Build.0 = Release|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release|x64.ActiveCfg = Release|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Dynamic|Any CPU.ActiveCfg = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Dynamic|Any CPU.Build.0 = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Dynamic|ARM.ActiveCfg = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Dynamic|ARM.Build.0 = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Dynamic|Win32.ActiveCfg = Release|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Dynamic|Win32.Build.0 = Release|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Dynamic|x64.ActiveCfg = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Dynamic|x64.Build.0 = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Static|Any CPU.ActiveCfg = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Static|Any CPU.Build.0 = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Static|ARM.ActiveCfg = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Static|ARM.Build.0 = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Static|Win32.ActiveCfg = Release|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Static|Win32.Build.0 = Release|Win32
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Static|x64.ActiveCfg = Release|ARM
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B}.Release-Static|x64.Build.0 = Release|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|Win32.Deploy.0 = Debug|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|x64.Build.0 = Debug|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|ARM.ActiveCfg = Debug|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|ARM.Build.0 = Debug|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|ARM.Deploy.0 = Debug|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|Win32.ActiveCfg = Debug|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|Win32.Build.0 = Debug|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|Win32.Deploy.0 = Debug|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|x64.ActiveCfg = Debug|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|x64.Build.0 = Debug|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Dynamic|x64.Deploy.0 = Debug|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|ARM.ActiveCfg = Debug|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|ARM.Build.0 = Debug|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|ARM.Deploy.0 = Debug|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|Win32.ActiveCfg = Debug|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|Win32.Build.0 = Debug|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|Win32.Deploy.0 = Debug|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|x64.ActiveCfg = Debug|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|x64.Build.0 = Debug|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Debug-Static|x64.Deploy.0 = Debug|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|ARM.Build.0 = Release|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|Win32.Build.0 = Release|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|Win32.Deploy.0 = Release|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|x64.ActiveCfg = Release|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|x64.Build.0 = Release|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release|x64.Deploy.0 = Release|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|Any CPU.Build.0 = Release|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|Any CPU.Deploy.0 = Release|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|ARM.ActiveCfg = Release|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|ARM.Build.0 = Release|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|ARM.Deploy.0 = Release|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|Win32.ActiveCfg = Release|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|Win32.Build.0 = Release|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|Win32.Deploy.0 = Release|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|x64.ActiveCfg = Release|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|x64.Build.0 = Release|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Dynamic|x64.Deploy.0 = Release|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|Any CPU.Build.0 = Release|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|Any CPU.Deploy.0 = Release|Any CPU
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|ARM.ActiveCfg = Release|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|ARM.Build.0 = Release|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|ARM.Deploy.0 = Release|ARM
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|Win32.ActiveCfg = Release|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|Win32.Build.0 = Release|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|Win32.Deploy.0 = Release|Win32
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|x64.ActiveCfg = Release|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|x64.Build.0 = Release|x64
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA}.Release-Static|x64.Deploy.0 = Release|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug|Win32.ActiveCfg = Debug|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug|Win32.Build.0 = Debug|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug|Win32.Deploy.0 = Debug|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug|x64.Build.0 = Debug|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|Any CPU.ActiveCfg = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|Any CPU.Build.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|Any CPU.Deploy.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|ARM.ActiveCfg = Debug|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|ARM.Build.0 = Debug|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|ARM.Deploy.0 = Debug|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|Win32.ActiveCfg = Debug|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|Win32.Build.0 = Debug|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|Win32.Deploy.0 = Debug|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|x64.ActiveCfg = Debug|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|x64.Build.0 = Debug|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Dynamic|x64.Deploy.0 = Debug|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|Any CPU.ActiveCfg = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|Any CPU.Build.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|Any CPU.Deploy.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|ARM.ActiveCfg = Debug|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|ARM.Build.0 = Debug|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|ARM.Deploy.0 = Debug|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|Win32.ActiveCfg = Debug|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|Win32.Build.0 = Debug|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|Win32.Deploy.0 = Debug|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|x64.ActiveCfg = Debug|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|x64.Build.0 = Debug|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Debug-Static|x64.Deploy.0 = Debug|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release|Any CPU.ActiveCfg = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release|ARM.Build.0 = Release|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release|Win32.ActiveCfg = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release|Win32.Build.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release|Win32.Deploy.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release|x64.ActiveCfg = Release|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release|x64.Build.0 = Release|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release|x64.Deploy.0 = Release|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|Any CPU.ActiveCfg = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|Any CPU.Build.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|Any CPU.Deploy.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|ARM.ActiveCfg = Release|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|ARM.Build.0 = Release|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|ARM.Deploy.0 = Release|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|Win32.ActiveCfg = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|Win32.Build.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|Win32.Deploy.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|x64.ActiveCfg = Release|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|x64.Build.0 = Release|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Dynamic|x64.Deploy.0 = Release|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|Any CPU.ActiveCfg = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|Any CPU.Build.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|Any CPU.Deploy.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|ARM.ActiveCfg = Release|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|ARM.Build.0 = Release|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|ARM.Deploy.0 = Release|ARM
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|Win32.ActiveCfg = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|Win32.Build.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|Win32.Deploy.0 = Release|x86
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|x64.ActiveCfg = Release|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|x64.Build.0 = Release|x64
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939}.Release-Static|x64.Deploy.0 = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug|x64.Build.0 = Debug|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Dynamic|Any CPU.ActiveCfg = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Dynamic|Any CPU.Build.0 = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Dynamic|ARM.ActiveCfg = Debug|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Dynamic|ARM.Build.0 = Debug|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Dynamic|Win32.ActiveCfg = Debug|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Dynamic|Win32.Build.0 = Debug|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Dynamic|x64.ActiveCfg = Debug|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Dynamic|x64.Build.0 = Debug|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Static|Any CPU.ActiveCfg = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Static|Any CPU.Build.0 = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Static|ARM.ActiveCfg = Debug|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Static|ARM.Build.0 = Debug|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Static|Win32.ActiveCfg = Debug|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Static|Win32.Build.0 = Debug|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Static|x64.ActiveCfg = Debug|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Debug-Static|x64.Build.0 = Debug|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release|ARM.Build.0 = Release|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release|Win32.Build.0 = Release|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release|x64.ActiveCfg = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release|x64.Build.0 = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Dynamic|Any CPU.ActiveCfg = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Dynamic|Any CPU.Build.0 = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Dynamic|ARM.ActiveCfg = Release|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Dynamic|ARM.Build.0 = Release|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Dynamic|Win32.ActiveCfg = Release|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Dynamic|Win32.Build.0 = Release|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Dynamic|x64.ActiveCfg = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Dynamic|x64.Build.0 = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Static|Any CPU.ActiveCfg = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Static|Any CPU.Build.0 = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Static|ARM.ActiveCfg = Release|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Static|ARM.Build.0 = Release|ARM
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Static|Win32.ActiveCfg = Release|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Static|Win32.Build.0 = Release|Win32
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Static|x64.ActiveCfg = Release|x64
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A}.Release-Static|x64.Build.0 = Release|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug|Win32.ActiveCfg = Debug|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug|Win32.Build.0 = Debug|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug|Win32.Deploy.0 = Debug|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug|x64.Build.0 = Debug|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|Any CPU.ActiveCfg = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|Any CPU.Build.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|Any CPU.Deploy.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|ARM.ActiveCfg = Debug|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|ARM.Build.0 = Debug|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|ARM.Deploy.0 = Debug|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|Win32.ActiveCfg = Debug|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|Win32.Build.0 = Debug|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|Win32.Deploy.0 = Debug|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|x64.ActiveCfg = Debug|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|x64.Build.0 = Debug|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Dynamic|x64.Deploy.0 = Debug|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|Any CPU.ActiveCfg = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|Any CPU.Build.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|Any CPU.Deploy.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|ARM.ActiveCfg = Debug|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|ARM.Build.0 = Debug|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|ARM.Deploy.0 = Debug|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|Win32.ActiveCfg = Debug|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|Win32.Build.0 = Debug|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|Win32.Deploy.0 = Debug|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|x64.ActiveCfg = Debug|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|x64.Build.0 = Debug|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Debug-Static|x64.Deploy.0 = Debug|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release|Any CPU.ActiveCfg = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release|ARM.Build.0 = Release|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release|Win32.ActiveCfg = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release|Win32.Build.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release|Win32.Deploy.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release|x64.ActiveCfg = Release|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release|x64.Build.0 = Release|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release|x64.Deploy.0 = Release|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|Any CPU.ActiveCfg = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|Any CPU.Build.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|Any CPU.Deploy.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|ARM.ActiveCfg = Release|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|ARM.Build.0 = Release|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|ARM.Deploy.0 = Release|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|Win32.ActiveCfg = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|Win32.Build.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|Win32.Deploy.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|x64.ActiveCfg = Release|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|x64.Build.0 = Release|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Dynamic|x64.Deploy.0 = Release|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|Any CPU.ActiveCfg = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|Any CPU.Build.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|Any CPU.Deploy.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|ARM.ActiveCfg = Release|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|ARM.Build.0 = Release|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|ARM.Deploy.0 = Release|ARM
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|Win32.ActiveCfg = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|Win32.Build.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|Win32.Deploy.0 = Release|x86
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|x64.ActiveCfg = Release|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|x64.Build.0 = Release|x64
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}.Release-Static|x64.Deploy.0 = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|x64.Build.0 = Debug|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Dynamic|Any CPU.ActiveCfg = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Dynamic|Any CPU.Build.0 = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Dynamic|ARM.ActiveCfg = Debug|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Dynamic|ARM.Build.0 = Debug|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Dynamic|Win32.ActiveCfg = Debug|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Dynamic|Win32.Build.0 = Debug|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Dynamic|x64.ActiveCfg = Debug|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Dynamic|x64.Build.0 = Debug|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Static|Any CPU.ActiveCfg = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Static|Any CPU.Build.0 = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Static|ARM.ActiveCfg = Debug|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Static|ARM.Build.0 = Debug|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Static|Win32.ActiveCfg = Debug|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Static|Win32.Build.0 = Debug|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Static|x64.ActiveCfg = Debug|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug-Static|x64.Build.0 = Debug|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|ARM.Build.0 = Release|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|Win32.Build.0 = Release|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|x64.ActiveCfg = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|x64.Build.0 = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Dynamic|Any CPU.ActiveCfg = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Dynamic|Any CPU.Build.0 = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Dynamic|ARM.ActiveCfg = Release|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Dynamic|ARM.Build.0 = Release|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Dynamic|Win32.ActiveCfg = Release|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Dynamic|Win32.Build.0 = Release|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Dynamic|x64.ActiveCfg = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Dynamic|x64.Build.0 = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Static|Any CPU.ActiveCfg = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Static|Any CPU.Build.0 = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Static|ARM.ActiveCfg = Release|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Static|ARM.Build.0 = Release|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Static|Win32.ActiveCfg = Release|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Static|Win32.Build.0 = Release|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Static|x64.ActiveCfg = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release-Static|x64.Build.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|x64.Build.0 = Debug|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|Any CPU.ActiveCfg = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|Any CPU.Build.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|Any CPU.Deploy.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|ARM.ActiveCfg = Debug|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|ARM.Build.0 = Debug|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|ARM.Deploy.0 = Debug|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|Win32.ActiveCfg = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|Win32.Build.0 = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|Win32.Deploy.0 = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|x64.ActiveCfg = Debug|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|x64.Build.0 = Debug|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Dynamic|x64.Deploy.0 = Debug|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|Any CPU.ActiveCfg = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|Any CPU.Build.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|Any CPU.Deploy.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|ARM.ActiveCfg = Debug|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|ARM.Build.0 = Debug|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|ARM.Deploy.0 = Debug|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|Win32.ActiveCfg = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|Win32.Build.0 = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|Win32.Deploy.0 = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|x64.ActiveCfg = Debug|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|x64.Build.0 = Debug|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug-Static|x64.Deploy.0 = Debug|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|ARM.Build.0 = Release|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|Win32.Build.0 = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|Win32.Deploy.0 = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|x64.ActiveCfg = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|x64.Build.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|x64.Deploy.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|Any CPU.ActiveCfg = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|Any CPU.Build.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|Any CPU.Deploy.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|ARM.ActiveCfg = Release|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|ARM.Build.0 = Release|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|ARM.Deploy.0 = Release|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|Win32.ActiveCfg = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|Win32.Build.0 = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|Win32.Deploy.0 = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|x64.ActiveCfg = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|x64.Build.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Dynamic|x64.Deploy.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|Any CPU.ActiveCfg = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|Any CPU.Build.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|Any CPU.Deploy.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|ARM.ActiveCfg = Release|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|ARM.Build.0 = Release|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|ARM.Deploy.0 = Release|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|Win32.ActiveCfg = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|Win32.Build.0 = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|Win32.Deploy.0 = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|x64.ActiveCfg = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|x64.Build.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release-Static|x64.Deploy.0 = Release|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|Win32.ActiveCfg = Debug|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|Win32.Build.0 = Debug|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|x64.Build.0 = Debug|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Dynamic|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Dynamic|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Dynamic|ARM.ActiveCfg = Debug|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Dynamic|ARM.Build.0 = Debug|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Dynamic|Win32.ActiveCfg = Debug|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Dynamic|Win32.Build.0 = Debug|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Dynamic|x64.ActiveCfg = Debug|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Dynamic|x64.Build.0 = Debug|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Static|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Static|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Static|ARM.ActiveCfg = Debug|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Static|ARM.Build.0 = Debug|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Static|Win32.ActiveCfg = Debug|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Static|Win32.Build.0 = Debug|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Static|x64.ActiveCfg = Debug|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug-Static|x64.Build.0 = Debug|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|ARM.Build.0 = Release|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|Win32.ActiveCfg = Release|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|Win32.Build.0 = Release|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|x64.ActiveCfg = Release|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|x64.Build.0 = Release|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Dynamic|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Dynamic|Any CPU.Build.0 = Release|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Dynamic|ARM.ActiveCfg = Release|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Dynamic|ARM.Build.0 = Release|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Dynamic|Win32.ActiveCfg = Release|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Dynamic|Win32.Build.0 = Release|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Dynamic|x64.ActiveCfg = Release|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Dynamic|x64.Build.0 = Release|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Static|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Static|Any CPU.Build.0 = Release|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Static|ARM.ActiveCfg = Release|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Static|ARM.Build.0 = Release|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Static|Win32.ActiveCfg = Release|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Static|Win32.Build.0 = Release|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Static|x64.ActiveCfg = Release|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release-Static|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -1649,5 +2228,18 @@ Global
|
|||
{45D41ACC-2C3C-43D2-BC10-02AA73FFC7C7} = {54F6163A-66C6-4F09-844D-CC61DE8EE376}
|
||||
{207E7BD4-7B11-4A40-BA3A-CC627762A7B6} = {54F6163A-66C6-4F09-844D-CC61DE8EE376}
|
||||
{E75EFD41-C7F5-44C8-8FF1-A310D920989D} = {54F6163A-66C6-4F09-844D-CC61DE8EE376}
|
||||
{452C38CE-6463-4963-A113-658B6BD91D15} = {78DA8BE5-2D77-49D6-8CA4-7847B65DBE84}
|
||||
{DE5C2BE2-873A-4B85-8EBE-8AEA4C80212F} = {78DA8BE5-2D77-49D6-8CA4-7847B65DBE84}
|
||||
{820034C1-645D-4340-8813-D980C1EF77DE} = {DE5C2BE2-873A-4B85-8EBE-8AEA4C80212F}
|
||||
{C8D75245-FFCF-4932-A228-C9CC8BB60B03} = {DE5C2BE2-873A-4B85-8EBE-8AEA4C80212F}
|
||||
{BBABEEA1-494C-4618-96E3-399873A5558B} = {DE5C2BE2-873A-4B85-8EBE-8AEA4C80212F}
|
||||
{3085ACA0-00DA-45BF-9110-A3684B56EBBA} = {DE5C2BE2-873A-4B85-8EBE-8AEA4C80212F}
|
||||
{D51DC5BE-5822-4B94-891C-E1B1B7892939} = {452C38CE-6463-4963-A113-658B6BD91D15}
|
||||
{9C5609A2-32A2-483F-81EC-DAC2ED96BF6A} = {452C38CE-6463-4963-A113-658B6BD91D15}
|
||||
{87D83489-039E-4123-BE01-CB62EE932A29} = {78DA8BE5-2D77-49D6-8CA4-7847B65DBE84}
|
||||
{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9} = {87D83489-039E-4123-BE01-CB62EE932A29}
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65} = {87D83489-039E-4123-BE01-CB62EE932A29}
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6} = {87D83489-039E-4123-BE01-CB62EE932A29}
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9} = {87D83489-039E-4123-BE01-CB62EE932A29}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -78,7 +78,7 @@
|
|||
<Import Project="..\..\build\vs\pjproject-vs14-common-config.props" />
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{23D7679C-764C-4E02-8B29-BB882CEEEFE2}</ProjectGuid>
|
||||
<RootNamespace>libpjproject</RootNamespace>
|
||||
<RootNamespace>libpjproject</RootNamespace>
|
||||
<!-- Specific UWP property -->
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<AppContainerApplication Condition="'$(API_Family)'=='UWP'">true</AppContainerApplication>
|
||||
|
@ -199,7 +199,8 @@
|
|||
<!-- Override the PlatformToolset -->
|
||||
<PropertyGroup>
|
||||
<PlatformToolset>$(BuildToolset)</PlatformToolset>
|
||||
<CharacterSet Condition="'$(API_Family)'!='WinDesktop'"></CharacterSet>
|
||||
<CharacterSet Condition="'$(API_Family)'!='WinDesktop'">
|
||||
</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
@ -322,6 +323,7 @@
|
|||
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<ProjectReference>
|
||||
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||
|
|
|
@ -78,14 +78,14 @@
|
|||
<Import Project="..\..\build\vs\pjproject-vs14-common-config.props" />
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{8310649E-A25E-4AF0-91E8-9E3CC659BB89}</ProjectGuid>
|
||||
<RootNamespace>pjsua</RootNamespace>
|
||||
<RootNamespace>pjsua</RootNamespace>
|
||||
<!-- Specific UWP property -->
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<AppContainerApplication Condition="'$(API_Family)'=='UWP'">true</AppContainerApplication>
|
||||
<ApplicationType Condition="'$(API_Family)'=='UWP'">Windows Store</ApplicationType>
|
||||
<WindowsTargetPlatformVersion Condition="'$(API_Family)'=='UWP'">$(PlatformVersion)</WindowsTargetPlatformVersion>
|
||||
<WindowsTargetPlatformMinVersion Condition="'$(API_Family)'=='UWP'">$(PlatformVersion)</WindowsTargetPlatformMinVersion>
|
||||
<ApplicationTypeRevision Condition="'$(API_Family)'=='UWP'">$(AppTypeRev)</ApplicationTypeRevision>
|
||||
<ApplicationTypeRevision Condition="'$(API_Family)'=='UWP'">$(AppTypeRev)</ApplicationTypeRevision>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Static|Win32'" Label="Configuration">
|
||||
|
@ -199,7 +199,8 @@
|
|||
<!-- Override the PlatformToolset -->
|
||||
<PropertyGroup>
|
||||
<PlatformToolset>$(BuildToolset)</PlatformToolset>
|
||||
<CharacterSet Condition="'$(API_Family)'!='WinDesktop'"></CharacterSet>
|
||||
<CharacterSet Condition="'$(API_Family)'!='WinDesktop'">
|
||||
</CharacterSet>
|
||||
<ConfigurationType Condition="'$(API_Family)'=='WinDesktop'">Application</ConfigurationType>
|
||||
<ConfigurationType Condition="'$(API_Family)'=='UWP' Or '$(API_Family)'=='WinPhone8'">StaticLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
|
@ -303,9 +304,9 @@
|
|||
<!-- Compile and link option definition -->
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<RuntimeLibrary Condition="'$(API_Family)'=='UWP'">MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<RuntimeLibrary Condition="'$(API_Family)'=='UWP'">MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>../../pjsip/include;../../pjlib/include;../../pjlib-util/include;../../pjmedia/include;../../pjnath/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
|
@ -566,6 +567,7 @@
|
|||
<ItemGroup>
|
||||
<ClInclude Include="..\src\pjsua\pjsua_app.h" />
|
||||
<ClInclude Include="..\src\pjsua\pjsua_app_common.h" />
|
||||
<ClInclude Include="..\src\pjsua\pjsua_app_config.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="libpjproject.vcxproj">
|
||||
|
|
|
@ -44,5 +44,8 @@
|
|||
<ClInclude Include="..\src\pjsua\pjsua_app_common.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\pjsua\pjsua_app_config.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -80,6 +80,7 @@
|
|||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<!-- Import common config -->
|
||||
<Import Project="..\..\..\..\..\..\build\vs\pjproject-vs14-common-config.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
|
|
|
@ -1,157 +1,160 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="CheckAPI" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<!--Check for API_Family-->
|
||||
<PropertyGroup>
|
||||
<PROJ_Target>UWP</PROJ_Target>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\..\..\..\..\..\build\vs\pjproject-vs14-common-config.props" />
|
||||
<Import Project="..\..\..\..\..\..\build\vs\pjproject-vs14-common-targets.targets" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == 'Win32' ">x86</Platform>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProjectGuid>{D26DD1D3-C631-4A56-BBE5-D42F1ACFD53A}</ProjectGuid>
|
||||
<OutputType>AppContainerExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>PjsuaCLI.UI</RootNamespace>
|
||||
<AssemblyName>pjsua_cli_uwp</AssemblyName>
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
|
||||
<TargetPlatformVersion>10.0.10240.0</TargetPlatformVersion>
|
||||
<TargetPlatformMinVersion>10.0.10240.0</TargetPlatformMinVersion>
|
||||
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
|
||||
<EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<!--<PackageCertificateKeyFile>pjsua_cli_uwp_TemporaryKey.pfx</PackageCertificateKeyFile>-->
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\ARM\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>ARM</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
|
||||
<OutputPath>bin\ARM\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>ARM</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86' OR '$(Configuration)|$(Platform)' == 'Debug|Win32'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86' OR '$(Configuration)|$(Platform)' == 'Release|Win32'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
|
||||
<Content Include="ApplicationInsights.config">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<None Include="project.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="App.xaml.cs">
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="MainPage.xaml.cs">
|
||||
<DependentUpon>MainPage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AppxManifest Include="Package.appxmanifest">
|
||||
<SubType>Designer</SubType>
|
||||
</AppxManifest>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Assets\teluu-logo.png" />
|
||||
<Content Include="Properties\Default.rd.xml" />
|
||||
<Content Include="Assets\LockScreenLogo.scale-200.png" />
|
||||
<Content Include="Assets\SplashScreen.scale-200.png" />
|
||||
<Content Include="Assets\Square150x150Logo.scale-200.png" />
|
||||
<Content Include="Assets\Square44x44Logo.scale-200.png" />
|
||||
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
|
||||
<Content Include="Assets\StoreLogo.png" />
|
||||
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ApplicationDefinition Include="App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
<Page Include="MainPage.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\comp\pjsua_cli_uwp_comp.vcxproj">
|
||||
<Project>{207e7bd4-7b11-4a40-ba3a-cc627762a7b6}</Project>
|
||||
<Name>pjsua_cli_uwp_comp</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="CheckAPI" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<!--Check for API_Family-->
|
||||
<PropertyGroup>
|
||||
<PROJ_Target>UWP</PROJ_Target>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\..\..\..\..\..\build\vs\pjproject-vs14-common-config.props" />
|
||||
<Import Project="..\..\..\..\..\..\build\vs\pjproject-vs14-common-targets.targets" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == 'Win32' ">x86</Platform>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProjectGuid>{D26DD1D3-C631-4A56-BBE5-D42F1ACFD53A}</ProjectGuid>
|
||||
<OutputType>AppContainerExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>PjsuaCLI.UI</RootNamespace>
|
||||
<AssemblyName>pjsua_cli_uwp</AssemblyName>
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
|
||||
<TargetPlatformVersion>10.0.10240.0</TargetPlatformVersion>
|
||||
<TargetPlatformMinVersion>10.0.10240.0</TargetPlatformMinVersion>
|
||||
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
|
||||
<EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<!--<PackageCertificateKeyFile>pjsua_cli_uwp_TemporaryKey.pfx</PackageCertificateKeyFile>-->
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\ARM\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>ARM</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
|
||||
<OutputPath>bin\ARM\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>ARM</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86' OR '$(Configuration)|$(Platform)' == 'Debug|Win32'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86' OR '$(Configuration)|$(Platform)' == 'Release|Win32'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
|
||||
<Content Include="ApplicationInsights.config">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<None Include="project.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="App.xaml.cs">
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="MainPage.xaml.cs">
|
||||
<DependentUpon>MainPage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AppxManifest Include="Package.appxmanifest">
|
||||
<SubType>Designer</SubType>
|
||||
</AppxManifest>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Assets\teluu-logo.png" />
|
||||
<Content Include="Properties\Default.rd.xml" />
|
||||
<Content Include="Assets\LockScreenLogo.scale-200.png" />
|
||||
<Content Include="Assets\SplashScreen.scale-200.png" />
|
||||
<Content Include="Assets\Square150x150Logo.scale-200.png" />
|
||||
<Content Include="Assets\Square44x44Logo.scale-200.png" />
|
||||
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
|
||||
<Content Include="Assets\StoreLogo.png" />
|
||||
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ApplicationDefinition Include="App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
<Page Include="MainPage.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\comp\pjsua_cli_uwp_comp.vcxproj">
|
||||
<Project>{207e7bd4-7b11-4a40-ba3a-cc627762a7b6}</Project>
|
||||
<Name>pjsua_cli_uwp_comp</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<WCFMetadata Include="Service References\" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -0,0 +1,94 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 14
|
||||
VisualStudioVersion = 14.0.23107.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Voip", "Voip\Voip.csproj", "{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VoipHost", "VoipHost\VoipHost.vcxproj", "{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VoipTasks", "VoipTasks\VoipTasks.csproj", "{9FDF5E33-D15D-409F-876E-4E77727936B9}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VoipBackEnd", "VoipBackEnd\VoipBackEnd.vcxproj", "{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|ARM = Debug|ARM
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|ARM = Release|ARM
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Debug|x64.Build.0 = Debug|x64
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Debug|x86.Build.0 = Debug|x86
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Debug|x86.Deploy.0 = Debug|x86
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Release|Any CPU.ActiveCfg = Release|x86
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Release|ARM.Build.0 = Release|ARM
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Release|x64.ActiveCfg = Release|x64
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Release|x64.Build.0 = Release|x64
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Release|x64.Deploy.0 = Release|x64
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Release|x86.ActiveCfg = Release|x86
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Release|x86.Build.0 = Release|x86
|
||||
{DFD0DAC2-D55D-4CC2-AC95-DD36C6539585}.Release|x86.Deploy.0 = Release|x86
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|x64.Build.0 = Debug|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Debug|x86.Build.0 = Debug|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|ARM.Build.0 = Release|ARM
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|x64.ActiveCfg = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|x64.Build.0 = Release|x64
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|x86.ActiveCfg = Release|Win32
|
||||
{016D497F-0EE0-449E-89F5-BD63F7F9A8A6}.Release|x86.Build.0 = Release|Win32
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|x64.Build.0 = Debug|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Debug|x86.Build.0 = Debug|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|ARM.Build.0 = Release|ARM
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|x64.ActiveCfg = Release|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|x64.Build.0 = Release|x64
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|x86.ActiveCfg = Release|x86
|
||||
{9FDF5E33-D15D-409F-876E-4E77727936B9}.Release|x86.Build.0 = Release|x86
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|x64.Build.0 = Debug|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Debug|x86.Build.0 = Debug|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|ARM.Build.0 = Release|ARM
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|x64.ActiveCfg = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|x64.Build.0 = Release|x64
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|x86.ActiveCfg = Release|Win32
|
||||
{FC9CBB95-624C-4CE8-86A8-3AB5A415AA65}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,8 @@
|
|||
<Application
|
||||
x:Class="VoipUI.App"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="using:VoipUI"
|
||||
RequestedTheme="Light">
|
||||
|
||||
</Application>
|
|
@ -0,0 +1,139 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices.WindowsRuntime;
|
||||
using Windows.ApplicationModel;
|
||||
using Windows.ApplicationModel.Activation;
|
||||
using Windows.Foundation;
|
||||
using Windows.Foundation.Collections;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Controls.Primitives;
|
||||
using Windows.UI.Xaml.Data;
|
||||
using Windows.UI.Xaml.Input;
|
||||
using Windows.UI.Xaml.Media;
|
||||
using Windows.UI.Xaml.Navigation;
|
||||
using VoipTasks.BackgroundOperations;
|
||||
using VoipUI.Helpers;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace VoipUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides application-specific behavior to supplement the default Application class.
|
||||
/// </summary>
|
||||
sealed partial class App : Application
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes the singleton application object. This is the first line of authored code
|
||||
/// executed, and as such is the logical equivalent of main() or WinMain().
|
||||
/// </summary>
|
||||
public App()
|
||||
{
|
||||
Microsoft.ApplicationInsights.WindowsAppInitializer.InitializeAsync(
|
||||
Microsoft.ApplicationInsights.WindowsCollectors.Metadata |
|
||||
Microsoft.ApplicationInsights.WindowsCollectors.Session);
|
||||
this.InitializeComponent();
|
||||
this.Suspending += OnSuspending;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invoked when the application is launched normally by the end user. Other entry points
|
||||
/// will be used such as when the application is launched to open a specific file.
|
||||
/// </summary>
|
||||
/// <param name="e">Details about the launch request and process.</param>
|
||||
protected override void OnLaunched(LaunchActivatedEventArgs e)
|
||||
{
|
||||
|
||||
#if DEBUG
|
||||
if (System.Diagnostics.Debugger.IsAttached)
|
||||
{
|
||||
this.DebugSettings.EnableFrameRateCounter = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
Frame rootFrame = Window.Current.Content as Frame;
|
||||
|
||||
// Do not repeat app initialization when the Window already has content,
|
||||
// just ensure that the window is active
|
||||
if (rootFrame == null)
|
||||
{
|
||||
// Create a Frame to act as the navigation context and navigate to the first page
|
||||
rootFrame = new Frame();
|
||||
|
||||
rootFrame.NavigationFailed += OnNavigationFailed;
|
||||
|
||||
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
|
||||
{
|
||||
//TODO: Load state from previously suspended application
|
||||
}
|
||||
|
||||
// Place the frame in the current Window
|
||||
Window.Current.Content = rootFrame;
|
||||
}
|
||||
|
||||
if (rootFrame.Content == null)
|
||||
{
|
||||
// When the navigation stack isn't restored navigate to the first page,
|
||||
// configuring the new page by passing required information as a navigation
|
||||
// parameter
|
||||
rootFrame.Navigate(typeof(MainPage), e.Arguments);
|
||||
}
|
||||
|
||||
/* Start service. */
|
||||
StartServiceAsync();
|
||||
|
||||
// Ensure the current window is active
|
||||
Window.Current.Activate();
|
||||
}
|
||||
|
||||
private async void GetAccountInfoAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
OperationResult result = await EndpointHelper.GetAccountInfo();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private async void StartServiceAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
OperationResult result = await EndpointHelper.StartServiceAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invoked when Navigation to a certain page fails
|
||||
/// </summary>
|
||||
/// <param name="sender">The Frame which failed navigation</param>
|
||||
/// <param name="e">Details about the navigation failure</param>
|
||||
void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
|
||||
{
|
||||
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invoked when application execution is being suspended. Application state is saved
|
||||
/// without knowing whether the application will be terminated or resumed with the contents
|
||||
/// of memory still intact.
|
||||
/// </summary>
|
||||
/// <param name="sender">The source of the suspend request.</param>
|
||||
/// <param name="e">Details about the suspend request.</param>
|
||||
private void OnSuspending(object sender, SuspendingEventArgs e)
|
||||
{
|
||||
var deferral = e.SuspendingOperation.GetDeferral();
|
||||
//TODO: Save application state and stop any background activity
|
||||
deferral.Complete();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ApplicationInsights xmlns = "http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
|
||||
</ApplicationInsights>
|
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 3.1 KiB |
|
@ -0,0 +1,218 @@
|
|||
//*********************************************************
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
||||
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
||||
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
||||
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
||||
//
|
||||
//*********************************************************
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using VoipTasks.BackgroundOperations;
|
||||
using Windows.ApplicationModel.AppService;
|
||||
using Windows.Foundation.Collections;
|
||||
using Windows.ApplicationModel.Core;
|
||||
using Windows.UI.Core;
|
||||
|
||||
namespace VoipUI.Helpers
|
||||
{
|
||||
class AppServiceHelper
|
||||
{
|
||||
~AppServiceHelper()
|
||||
{
|
||||
if (_appConnection != null)
|
||||
{
|
||||
_appConnection.Dispose();
|
||||
_appConnection = null;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ValueSet> SendMessageAsync(ValueSet message)
|
||||
{
|
||||
ValueSet returnValue = null;
|
||||
AppServiceConnection appConnection = await GetAppConnectionAsync();
|
||||
|
||||
if (appConnection != null)
|
||||
{
|
||||
AppServiceResponse response = await appConnection.SendMessageAsync(message);
|
||||
|
||||
if (response.Status == AppServiceResponseStatus.Success)
|
||||
{
|
||||
if (response.Message.Keys.Contains(BackgroundOperation.Result))
|
||||
{
|
||||
returnValue = response.Message;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
public async void SendMessage(ValueSet message)
|
||||
{
|
||||
AppServiceConnection appConnection = await GetAppConnectionAsync();
|
||||
|
||||
if (appConnection != null)
|
||||
{
|
||||
await appConnection.SendMessageAsync(message);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<AppServiceConnection> GetAppConnectionAsync()
|
||||
{
|
||||
AppServiceConnection appConnection = _appConnection;
|
||||
|
||||
if (appConnection == null)
|
||||
{
|
||||
appConnection = new AppServiceConnection();
|
||||
|
||||
appConnection.ServiceClosed += AppConnection_ServiceClosed;
|
||||
|
||||
appConnection.AppServiceName = BackgroundOperation.AppServiceName;
|
||||
|
||||
appConnection.PackageFamilyName = Windows.ApplicationModel.Package.Current.Id.FamilyName;
|
||||
|
||||
AppServiceConnectionStatus status = await appConnection.OpenAsync();
|
||||
|
||||
if (status == AppServiceConnectionStatus.Success)
|
||||
{
|
||||
_appConnection = appConnection;
|
||||
_appConnection.RequestReceived += Connection_RequestReceived;
|
||||
}
|
||||
}
|
||||
|
||||
return appConnection;
|
||||
}
|
||||
|
||||
private void AppConnection_ServiceClosed(AppServiceConnection sender, AppServiceClosedEventArgs args)
|
||||
{
|
||||
_appConnection = null;
|
||||
}
|
||||
|
||||
private async void Connection_RequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
|
||||
{
|
||||
var deferral = args.GetDeferral();
|
||||
var response = new ValueSet();
|
||||
//bool stop = false;
|
||||
try
|
||||
{
|
||||
var request = args.Request;
|
||||
var message = request.Message;
|
||||
if (message.ContainsKey(ForegroundOperation.NewForegroundRequest))
|
||||
{
|
||||
switch ((ForegroundReguest)message[ForegroundOperation.NewForegroundRequest])
|
||||
{
|
||||
case ForegroundReguest.UpdateCallState:
|
||||
AppRequest = args.Request;
|
||||
Request = ForegroundReguest.UpdateCallState;
|
||||
AppRequestDeferal = deferral;
|
||||
|
||||
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
|
||||
|
||||
MainPage.Current.UpdateCallState(message[UpdateCallStateArguments.CallState.ToString()] as String);
|
||||
});
|
||||
|
||||
break;
|
||||
|
||||
case ForegroundReguest.UpdateRegState:
|
||||
AppRequest = args.Request;
|
||||
Request = ForegroundReguest.UpdateRegState;
|
||||
AppRequestDeferal = deferral;
|
||||
|
||||
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
|
||||
|
||||
MainPage.Current.UpdateRegState(message[UpdateRegStateArguments.RegState.ToString()] as String);
|
||||
});
|
||||
|
||||
break;
|
||||
|
||||
case ForegroundReguest.UpdateAcccountInfo:
|
||||
AppRequest = args.Request;
|
||||
Request = ForegroundReguest.UpdateAcccountInfo;
|
||||
AppRequestDeferal = deferral;
|
||||
|
||||
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
|
||||
|
||||
MainPage.Current.UpdateAccountInfo(message[UpdateAccountInfoArguments.id.ToString()] as String,
|
||||
message[UpdateAccountInfoArguments.registrar.ToString()] as String,
|
||||
message[UpdateAccountInfoArguments.proxy.ToString()] as String,
|
||||
message[UpdateAccountInfoArguments.username.ToString()] as String,
|
||||
message[UpdateAccountInfoArguments.password.ToString()] as String);
|
||||
});
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public static AppServiceRequest AppRequest
|
||||
{
|
||||
set
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_appRequest = value;
|
||||
}
|
||||
}
|
||||
get
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _appRequest;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static AppServiceDeferral AppRequestDeferal
|
||||
{
|
||||
set
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_appDeferral = value;
|
||||
}
|
||||
}
|
||||
get
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _appDeferral;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static ForegroundReguest Request
|
||||
{
|
||||
set
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_request = value;
|
||||
}
|
||||
}
|
||||
get
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _request;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private AppServiceConnection _appConnection = null;
|
||||
|
||||
private static AppServiceRequest _appRequest = null;
|
||||
private static AppServiceDeferral _appDeferral = null;
|
||||
private static ForegroundReguest _request = ForegroundReguest.InValid;
|
||||
private static Object _lock = new Object();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
/* $Id*/
|
||||
/*
|
||||
* Copyright (C) 2016 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using VoipTasks.BackgroundOperations;
|
||||
using Windows.Foundation.Collections;
|
||||
using Windows.Foundation.Metadata;
|
||||
using VoipBackEnd;
|
||||
|
||||
namespace VoipUI.Helpers
|
||||
{
|
||||
static class EndpointHelper
|
||||
{
|
||||
public static async Task<OperationResult> StartServiceAsync()
|
||||
{
|
||||
if (!ApiInformation.IsApiContractPresent("Windows.ApplicationModel.Calls.CallsVoipContract", 1))
|
||||
{
|
||||
return OperationResult.Failed;
|
||||
}
|
||||
|
||||
AppServiceHelper appServiceHelper = new AppServiceHelper();
|
||||
|
||||
ValueSet message = new ValueSet();
|
||||
message[BackgroundOperation.NewBackgroundRequest] = (int)BackgroundRequest.StartService;
|
||||
|
||||
ValueSet response = await appServiceHelper.SendMessageAsync(message);
|
||||
|
||||
if (response != null)
|
||||
{
|
||||
return ((OperationResult)(response[BackgroundOperation.Result]));
|
||||
}
|
||||
return OperationResult.Failed;
|
||||
}
|
||||
|
||||
public static async Task<OperationResult> GetAccountInfo()
|
||||
{
|
||||
if (!ApiInformation.IsApiContractPresent("Windows.ApplicationModel.Calls.CallsVoipContract", 1))
|
||||
{
|
||||
return OperationResult.Failed;
|
||||
}
|
||||
|
||||
AppServiceHelper appServiceHelper = new AppServiceHelper();
|
||||
|
||||
ValueSet message = new ValueSet();
|
||||
message[BackgroundOperation.NewBackgroundRequest] = (int)BackgroundRequest.GetAccountInfo;
|
||||
|
||||
ValueSet response = await appServiceHelper.SendMessageAsync(message);
|
||||
|
||||
if (response != null)
|
||||
{
|
||||
return ((OperationResult)(response[BackgroundOperation.Result]));
|
||||
}
|
||||
return OperationResult.Failed;
|
||||
}
|
||||
|
||||
public static async Task<OperationResult> ModifyAccount(String id, String registrar, String proxy, String username, String password)
|
||||
{
|
||||
if (!ApiInformation.IsApiContractPresent("Windows.ApplicationModel.Calls.CallsVoipContract", 1))
|
||||
{
|
||||
return OperationResult.Failed;
|
||||
}
|
||||
|
||||
AppServiceHelper appServiceHelper = new AppServiceHelper();
|
||||
|
||||
ValueSet message = new ValueSet();
|
||||
message[ModifyAccountArguments.id.ToString()] = id;
|
||||
message[ModifyAccountArguments.registrar.ToString()] = registrar;
|
||||
message[ModifyAccountArguments.proxy.ToString()] = proxy;
|
||||
message[ModifyAccountArguments.username.ToString()] = username;
|
||||
message[ModifyAccountArguments.password.ToString()] = password;
|
||||
message[BackgroundOperation.NewBackgroundRequest] = (int)BackgroundRequest.ModifyAccount;
|
||||
|
||||
ValueSet response = await appServiceHelper.SendMessageAsync(message);
|
||||
|
||||
if (response != null)
|
||||
{
|
||||
return ((OperationResult)(response[BackgroundOperation.Result]));
|
||||
}
|
||||
return OperationResult.Failed;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
//*********************************************************
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
||||
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
||||
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
||||
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
||||
//
|
||||
//*********************************************************
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using VoipTasks.BackgroundOperations;
|
||||
using Windows.Foundation.Collections;
|
||||
using Windows.Foundation.Metadata;
|
||||
|
||||
namespace VoipUI.Helpers
|
||||
{
|
||||
static class VoipCallHelper
|
||||
{
|
||||
public static async Task<OperationResult> NewOutgoingCallAsync(String dstURI)
|
||||
{
|
||||
if (!ApiInformation.IsApiContractPresent("Windows.ApplicationModel.Calls.CallsVoipContract", 1))
|
||||
{
|
||||
return OperationResult.Failed;
|
||||
}
|
||||
|
||||
AppServiceHelper appServiceHelper = new AppServiceHelper();
|
||||
|
||||
ValueSet message = new ValueSet();
|
||||
message[NewCallArguments.DstURI.ToString()] = dstURI;
|
||||
message[BackgroundOperation.NewBackgroundRequest] = (int)BackgroundRequest.NewOutgoingCall;
|
||||
|
||||
ValueSet response = await appServiceHelper.SendMessageAsync(message);
|
||||
|
||||
if (response != null)
|
||||
{
|
||||
return ((OperationResult)(response[BackgroundOperation.Result]));
|
||||
}
|
||||
|
||||
return OperationResult.Failed;
|
||||
}
|
||||
|
||||
public static OperationResult EndCallAsync()
|
||||
{
|
||||
AppServiceHelper appServiceHelper = new AppServiceHelper();
|
||||
|
||||
ValueSet message = new ValueSet();
|
||||
message[BackgroundOperation.NewBackgroundRequest] = (int)BackgroundRequest.EndCall;
|
||||
|
||||
appServiceHelper.SendMessage(message);
|
||||
|
||||
return OperationResult.Succeeded;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,136 @@
|
|||
<Page
|
||||
x:Class="VoipUI.MainPage"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="using:VoipUI"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d">
|
||||
|
||||
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
|
||||
Margin="5">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0">
|
||||
<TextBlock FontSize="12" Text="Pjsua Sample App" Margin="5"/>
|
||||
<TextBox x:Name="txt_CallerName" Text="Test Account" Margin="5"/>
|
||||
<TextBox x:Name="txt_CallerNumber" Text="sip:192.168.0.103:6000" Margin="5"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="1">
|
||||
<Grid HorizontalAlignment="Center">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="165"/>
|
||||
<ColumnDefinition Width="165"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Button x:Name="btn_NewOutgoingCall"
|
||||
Grid.Column="0" Grid.Row="0"
|
||||
Content="Make Call"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Top"
|
||||
Width="150" Height="40"
|
||||
Margin="5"
|
||||
Click="btn_NewOutgoingCall_Click"/>
|
||||
<Button x:Name="btn_EndCall" Grid.Column="1" Grid.Row="0" Content="End Call"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Top"
|
||||
Width="150" Height="40"
|
||||
Margin="5" Click="btn_EndCall_Click"/>
|
||||
|
||||
<TextBlock x:Name="label1" Grid.Column="0" Grid.Row="1"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
Width="150" Height="40"
|
||||
Text="User Id"
|
||||
Margin="10,5,5,5"/>
|
||||
|
||||
<TextBox x:Name="txt_UserId" Grid.Column="1" Grid.Row="1"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
Width="150" Height="40"
|
||||
Margin="5" IsEnabled="True"/>
|
||||
|
||||
<TextBlock x:Name="label2" Grid.Column="0" Grid.Row="2"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
Width="150" Height="40"
|
||||
Text="Registrar"
|
||||
Margin="10,5,5,5"/>
|
||||
|
||||
<TextBox x:Name="txt_Registrar" Grid.Column="1" Grid.Row="2"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
Width="150" Height="40"
|
||||
Margin="5" IsEnabled="True"/>
|
||||
|
||||
<TextBlock x:Name="label3" Grid.Column="0" Grid.Row="3"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
Width="150" Height="40"
|
||||
Text="Proxy"
|
||||
Margin="10,5,5,5"/>
|
||||
|
||||
<TextBox x:Name="txt_Proxy" Grid.Column="1" Grid.Row="3"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
Width="150" Height="40"
|
||||
Margin="5" IsEnabled="True"/>
|
||||
|
||||
<TextBlock x:Name="label4" Grid.Column="0" Grid.Row="4"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
Width="150" Height="40"
|
||||
Text="User Name"
|
||||
Margin="10,5,5,5"/>
|
||||
|
||||
<TextBox x:Name="txt_RegUserName" Grid.Column="1" Grid.Row="4"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
Width="150" Height="40"
|
||||
Margin="5" IsEnabled="True"/>
|
||||
|
||||
<TextBlock x:Name="label5" Grid.Column="0" Grid.Row="5"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
Width="150" Height="40"
|
||||
Text="Password"
|
||||
Margin="10,5,5,5"/>
|
||||
|
||||
<TextBox x:Name="txt_Password" Grid.Column="1" Grid.Row="5"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
Width="150" Height="40"
|
||||
Margin="5" IsEnabled="True"/>
|
||||
<Button x:Name="btn_GetAccountInfo" Grid.Column="0" Grid.Row="6" Content="Get Account Info"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Top"
|
||||
Width="150" Height="40"
|
||||
Margin="5" Click="btn_GetAccountInfo_Click"/>
|
||||
|
||||
<Button x:Name="btn_ModifyAccount" Grid.Column="1" Grid.Row="6" Content="Modify Account"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Top"
|
||||
Width="150" Height="40"
|
||||
Margin="5" Click="btn_ModifyAccount_Click"/>
|
||||
|
||||
<TextBlock x:Name="txt_RegState" Grid.Column="0" Grid.Row="7"
|
||||
Text="Reg: Not Registered"
|
||||
Margin="15,20,5,15"
|
||||
VerticalAlignment="Bottom"
|
||||
HorizontalAlignment="Center"
|
||||
TextWrapping="WrapWholeWords"/>
|
||||
|
||||
<TextBlock x:Name="txt_CallStatus" Grid.Column="1" Grid.Row="7"
|
||||
Text="Disconnected"
|
||||
Margin="15,20,5,15"
|
||||
VerticalAlignment="Bottom"
|
||||
HorizontalAlignment="Center"
|
||||
TextWrapping="WrapWholeWords"/>
|
||||
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
|
||||
</Grid>
|
||||
</Page>
|
|
@ -0,0 +1,136 @@
|
|||
//*********************************************************
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
||||
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
||||
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
||||
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
||||
//
|
||||
//*********************************************************
|
||||
|
||||
using System;
|
||||
using VoipUI.Helpers;
|
||||
using VoipTasks.BackgroundOperations;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using System.Diagnostics;
|
||||
using VoipBackEnd;
|
||||
using System.Threading;
|
||||
using Windows.ApplicationModel.AppService;
|
||||
using Windows.UI.Xaml.Navigation;
|
||||
|
||||
namespace VoipUI
|
||||
{
|
||||
public sealed partial class MainPage : Page
|
||||
{
|
||||
//App developer should include the logic to prevent the user from being
|
||||
//able to call the Start Call async method multiple times. This is out
|
||||
//of the scope of this sample.
|
||||
private int MethodCallUnexpectedTime = -2147483634;
|
||||
|
||||
public static string callerName, callerNumber;
|
||||
public static MainPage Current;
|
||||
|
||||
public MainPage()
|
||||
{
|
||||
this.InitializeComponent();
|
||||
Current = this;
|
||||
}
|
||||
|
||||
private async void GetAccountInfoAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
OperationResult result = await EndpointHelper.GetAccountInfo();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private async void ModifyAccountAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
OperationResult result = await EndpointHelper.ModifyAccount(
|
||||
txt_UserId.Text,
|
||||
txt_Registrar.Text,
|
||||
txt_Proxy.Text,
|
||||
txt_RegUserName.Text,
|
||||
txt_Password.Text);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private async void NewOutgoingCallAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
OperationResult result = await VoipCallHelper.NewOutgoingCallAsync(txt_CallerNumber.Text);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void EndCall()
|
||||
{
|
||||
try
|
||||
{
|
||||
OperationResult result = VoipCallHelper.EndCallAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
txt_CallStatus.Text = "Disconnected";
|
||||
}
|
||||
|
||||
public void UpdateAccountInfo(String id, String registrar, String proxy,
|
||||
String username, String password)
|
||||
{
|
||||
txt_UserId.Text = id;
|
||||
txt_Registrar.Text = registrar;
|
||||
txt_Proxy.Text = proxy;
|
||||
txt_RegUserName.Text = username;
|
||||
txt_Password.Text = password;
|
||||
}
|
||||
|
||||
private void btn_NewOutgoingCall_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
NewOutgoingCallAsync();
|
||||
}
|
||||
|
||||
|
||||
private void btn_EndCall_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
EndCall();
|
||||
}
|
||||
|
||||
public void UpdateCallState(String state)
|
||||
{
|
||||
txt_CallStatus.Text = state;
|
||||
}
|
||||
|
||||
public void UpdateRegState(String state)
|
||||
{
|
||||
txt_RegState.Text = "Reg:" + state;
|
||||
}
|
||||
|
||||
private void btn_GetAccountInfo_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
GetAccountInfoAsync();
|
||||
}
|
||||
|
||||
private void btn_ModifyAccount_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
ModifyAccountAsync();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Voip")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Voip")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2016")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
[assembly: ComVisible(false)]
|
|
@ -0,0 +1,31 @@
|
|||
<!--
|
||||
This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
|
||||
developers. However, you can modify these parameters to modify the behavior of the .NET Native
|
||||
optimizer.
|
||||
|
||||
Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919
|
||||
|
||||
To fully enable reflection for App1.MyClass and all of its public/private members
|
||||
<Type Name="App1.MyClass" Dynamic="Required All"/>
|
||||
|
||||
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
|
||||
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
|
||||
|
||||
Using the Namespace directive to apply reflection policy to all the types in a particular namespace
|
||||
<Namespace Name="DataClasses.ViewModels" Seralize="All" />
|
||||
-->
|
||||
|
||||
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
|
||||
<Application>
|
||||
<!--
|
||||
An Assembly element with Name="*Application*" applies to all assemblies in
|
||||
the application package. The asterisks are not wildcards.
|
||||
-->
|
||||
<Assembly Name="*Application*" Dynamic="Required All" />
|
||||
|
||||
|
||||
<!-- Add your application specific runtime directives here. -->
|
||||
|
||||
|
||||
</Application>
|
||||
</Directives>
|
|
@ -0,0 +1,161 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProjectGuid>{B11B5672-B1E8-4C77-BDA1-4E6620F96BF9}</ProjectGuid>
|
||||
<OutputType>AppContainerExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>VoipUI</RootNamespace>
|
||||
<AssemblyName>Voip</AssemblyName>
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
|
||||
<TargetPlatformVersion>10.0.10586.0</TargetPlatformVersion>
|
||||
<TargetPlatformMinVersion>10.0.10586.0</TargetPlatformMinVersion>
|
||||
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
|
||||
<EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<PackageCertificateKeyFile>Voip_TemporaryKey.pfx</PackageCertificateKeyFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\ARM\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>ARM</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
|
||||
<OutputPath>bin\ARM\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>ARM</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
|
||||
<Content Include="ApplicationInsights.config">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<None Include="project.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="App.xaml.cs">
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Helpers\AppServiceHelper.cs" />
|
||||
<Compile Include="Helpers\EndpointHelper.cs" />
|
||||
<Compile Include="Helpers\VoipCallHelper.cs" />
|
||||
<Compile Include="MainPage.xaml.cs">
|
||||
<DependentUpon>MainPage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AppxManifest Include="Package.appxmanifest">
|
||||
<SubType>Designer</SubType>
|
||||
</AppxManifest>
|
||||
<None Include="Voip_TemporaryKey.pfx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Properties\Default.rd.xml" />
|
||||
<Content Include="Assets\LockScreenLogo.scale-200.png" />
|
||||
<Content Include="Assets\SplashScreen.scale-200.png" />
|
||||
<Content Include="Assets\Square150x150Logo.scale-200.png" />
|
||||
<Content Include="Assets\Square44x44Logo.scale-200.png" />
|
||||
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
|
||||
<Content Include="Assets\StoreLogo.png" />
|
||||
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ApplicationDefinition Include="App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
<Page Include="MainPage.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\VoipBackEnd\VoipBackEnd.vcxproj">
|
||||
<Project>{fc9cbb95-624c-4ce8-86a8-3ab5a415aa65}</Project>
|
||||
<Name>VoipBackEnd</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\VoipHost\VoipHost.vcxproj">
|
||||
<Project>{016d497f-0ee0-449e-89f5-bd63f7f9a8a6}</Project>
|
||||
<Name>VoipHost</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\VoipTasks\VoipTasks.csproj">
|
||||
<Project>{9fdf5e33-d15d-409f-876e-4e77727936b9}</Project>
|
||||
<Name>VoipTasks</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -0,0 +1,53 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
|
||||
<Identity Name="43db1af2-7e7c-499d-8ca6-9f3695ed1ec9" Publisher="CN=Riza" Version="1.0.0.0" />
|
||||
<mp:PhoneIdentity PhoneProductId="43db1af2-7e7c-499d-8ca6-9f3695ed1ec9" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
|
||||
<Properties>
|
||||
<DisplayName>Voip</DisplayName>
|
||||
<PublisherDisplayName>Riza</PublisherDisplayName>
|
||||
<Logo>Assets\StoreLogo.png</Logo>
|
||||
</Properties>
|
||||
<Dependencies>
|
||||
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
|
||||
</Dependencies>
|
||||
<Resources>
|
||||
<Resource Language="x-generate" />
|
||||
</Resources>
|
||||
<Applications>
|
||||
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="VoipUI.App">
|
||||
<uap:VisualElements DisplayName="Voip" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="Voip" BackgroundColor="transparent">
|
||||
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png">
|
||||
</uap:DefaultTile>
|
||||
</uap:VisualElements>
|
||||
<Extensions>
|
||||
<Extension Category="windows.backgroundTasks" EntryPoint="VoipTasks.CallRtcTask">
|
||||
<BackgroundTasks ServerName="VoipHost">
|
||||
<Task Type="systemEvent" />
|
||||
</BackgroundTasks>
|
||||
</Extension>
|
||||
<uap:Extension Category="windows.appService" EntryPoint="VoipTasks.AppService">
|
||||
<uap:AppService Name="VoipTasks.AppService" ServerName="VoipHost" />
|
||||
</uap:Extension>
|
||||
<uap:Extension Category="windows.voipCall">
|
||||
</uap:Extension>
|
||||
</Extensions>
|
||||
</Application>
|
||||
</Applications>
|
||||
<Capabilities>
|
||||
<Capability Name="internetClientServer" />
|
||||
<Capability Name="privateNetworkClientServer" />
|
||||
<uap:Capability Name="voipCall" />
|
||||
<uap:Capability Name="phoneCall" />
|
||||
<DeviceCapability Name="microphone" />
|
||||
<DeviceCapability Name="webcam" />
|
||||
</Capabilities>
|
||||
<Extensions>
|
||||
<Extension Category="windows.activatableClass.outOfProcessServer">
|
||||
<OutOfProcessServer ServerName="VoipHost">
|
||||
<Path>VoipHost.exe</Path>
|
||||
<Instancing>singleInstance</Instancing>
|
||||
<ActivatableClass ActivatableClassId="VoipHost.Dummy" />
|
||||
</OutOfProcessServer>
|
||||
</Extension>
|
||||
</Extensions>
|
||||
</Package>
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"Microsoft.ApplicationInsights": "1.0.0",
|
||||
"Microsoft.ApplicationInsights.PersistenceChannel": "1.0.0",
|
||||
"Microsoft.ApplicationInsights.WindowsApps": "1.0.0",
|
||||
"Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0"
|
||||
},
|
||||
"frameworks": {
|
||||
"uap10.0": {}
|
||||
},
|
||||
"runtimes": {
|
||||
"win10-arm": {},
|
||||
"win10-arm-aot": {},
|
||||
"win10-x86": {},
|
||||
"win10-x86-aot": {},
|
||||
"win10-x64": {},
|
||||
"win10-x64-aot": {}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
Copyright (c) 2012 Microsoft Corporation. All rights reserved.
|
||||
Use of this sample source code is subject to the terms of the Microsoft license
|
||||
agreement under which you licensed this sample source code and is provided AS-IS.
|
||||
If you did not accept the terms of the license agreement, you are not authorized
|
||||
to use this sample source code. For the terms of the license, please see the
|
||||
license agreement between you and Microsoft.
|
||||
|
||||
*/
|
||||
#include "pch.h"
|
||||
#include "ApiLock.h"
|
||||
|
||||
namespace VoipBackEnd
|
||||
{
|
||||
// A mutex used to protect objects accessible from the API surface exposed by this DLL
|
||||
std::recursive_mutex g_apiLock;
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
Copyright (c) 2012 Microsoft Corporation. All rights reserved.
|
||||
Use of this sample source code is subject to the terms of the Microsoft license
|
||||
agreement under which you licensed this sample source code and is provided AS-IS.
|
||||
If you did not accept the terms of the license agreement, you are not authorized
|
||||
to use this sample source code. For the terms of the license, please see the
|
||||
license agreement between you and Microsoft.
|
||||
|
||||
To see all Code Samples for Windows Phone, visit http://go.microsoft.com/fwlink/?LinkID=219604
|
||||
|
||||
*/
|
||||
#pragma once
|
||||
#include <mutex>
|
||||
|
||||
|
||||
namespace VoipBackEnd
|
||||
{
|
||||
// A mutex used to protect objects accessible from the API surface exposed by this DLL
|
||||
extern std::recursive_mutex g_apiLock;
|
||||
}
|
||||
|
|
@ -0,0 +1,629 @@
|
|||
/* $Id$ */
|
||||
/*
|
||||
* Copyright (C) 2016 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "MyApp.h"
|
||||
#include <memory>
|
||||
#include <winerror.h>
|
||||
#include <pplawait.h>
|
||||
|
||||
using namespace VoipBackEnd;
|
||||
using namespace Windows::Storage;
|
||||
|
||||
const std::string CONFIG_NAME = "pjsua2.json";
|
||||
const int SIP_PORT = 5060;
|
||||
const int LOG_LEVEL = 5;
|
||||
const std::string THIS_FILE = "MyApp.cpp";
|
||||
|
||||
#define GenHresultFromITF(x) (MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, x))
|
||||
|
||||
MyAppRT^ MyAppRT::singleton = nullptr;
|
||||
|
||||
#define DEFAULT_DESTRUCTOR() \
|
||||
delete inPtr;
|
||||
|
||||
#define CHECK_EXCEPTION(expr) \
|
||||
do { \
|
||||
try { \
|
||||
(expr); \
|
||||
} catch (pj::Error e) { \
|
||||
Platform::Exception^ exp = ref new Platform::COMException( \
|
||||
GenHresultFromITF(e.status)); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
std::string make_string(const std::wstring& wstring)
|
||||
{
|
||||
auto wideData = wstring.c_str();
|
||||
int bufferSize = WideCharToMultiByte(CP_UTF8, 0, wideData,
|
||||
-1, nullptr, 0, NULL, NULL);
|
||||
|
||||
std::unique_ptr<char[]> utf8;
|
||||
utf8.reset(new char[bufferSize]);
|
||||
|
||||
if (WideCharToMultiByte(CP_UTF8, 0, wideData, -1,
|
||||
utf8.get(), bufferSize, NULL, NULL) == 0)
|
||||
{
|
||||
return std::string();
|
||||
}
|
||||
|
||||
return std::string(utf8.get());
|
||||
}
|
||||
|
||||
std::wstring make_wstring(const std::string& string)
|
||||
{
|
||||
auto utf8Data = string.c_str();
|
||||
int bufferSize = MultiByteToWideChar(CP_UTF8, 0, utf8Data, -1, nullptr, 0);
|
||||
|
||||
std::unique_ptr<wchar_t[]> wide;
|
||||
wide.reset(new wchar_t[bufferSize]);
|
||||
|
||||
if (MultiByteToWideChar(CP_UTF8, 0, utf8Data, -1,
|
||||
wide.get(), bufferSize) == 0)
|
||||
{
|
||||
return std::wstring();
|
||||
}
|
||||
|
||||
return std::wstring(wide.get());;
|
||||
}
|
||||
|
||||
std::string to_std_str(Platform::String ^in_str)
|
||||
{
|
||||
std::wstring wsstr(in_str->Data());
|
||||
return make_string(wsstr);
|
||||
}
|
||||
|
||||
Platform::String^ to_platform_str(const std::string& in_str)
|
||||
{
|
||||
std::wstring wsstr = make_wstring(in_str);
|
||||
return ref new Platform::String(wsstr.c_str(), wsstr.length());
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void ImpLogWriter::write(const pj::LogEntry &entry)
|
||||
{
|
||||
std::wstring msg = make_wstring(entry.msg) + L"\r\n";
|
||||
|
||||
::OutputDebugString(msg.c_str());
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
OnRegStateParamRT::OnRegStateParamRT(const pj::OnRegStateParam& param)
|
||||
|
||||
{
|
||||
inPtr = new pj::OnRegStateParam(param);
|
||||
}
|
||||
|
||||
OnRegStateParamRT::OnRegStateParamRT()
|
||||
{
|
||||
inPtr = new pj::OnRegStateParam();
|
||||
}
|
||||
|
||||
OnRegStateParamRT::~OnRegStateParamRT()
|
||||
{
|
||||
DEFAULT_DESTRUCTOR();
|
||||
}
|
||||
|
||||
pj_status_t OnRegStateParamRT::status::get()
|
||||
{
|
||||
return inPtr->status;
|
||||
}
|
||||
|
||||
unsigned OnRegStateParamRT::code::get()
|
||||
{
|
||||
return static_cast<unsigned>(inPtr->code);
|
||||
}
|
||||
|
||||
Platform::String^ OnRegStateParamRT::reason::get()
|
||||
{
|
||||
return to_platform_str(inPtr->reason);
|
||||
}
|
||||
|
||||
int OnRegStateParamRT::expiration::get()
|
||||
{
|
||||
return inPtr->expiration;
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void ImpAccount::setCallback(IntAccount^ callback)
|
||||
{
|
||||
cb = callback;
|
||||
}
|
||||
|
||||
void ImpAccount::onIncomingCall(pj::OnIncomingCallParam& prm)
|
||||
{
|
||||
if (cb) {
|
||||
if (MyAppRT::Instance->handleIncomingCall(prm.callId)) {
|
||||
CallInfoRT^ info = MyAppRT::Instance->getCallInfo();
|
||||
if (info != nullptr)
|
||||
cb->onIncomingCall(info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ImpAccount::onRegState(pj::OnRegStateParam& prm)
|
||||
{
|
||||
if (cb)
|
||||
cb->onRegState(ref new OnRegStateParamRT(prm));
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
CallInfoRT::CallInfoRT(const pj::CallInfo& info)
|
||||
{
|
||||
inPtr = new pj::CallInfo(info);
|
||||
}
|
||||
|
||||
Platform::String^ CallInfoRT::localUri::get()
|
||||
{
|
||||
return to_platform_str(inPtr->localUri);
|
||||
}
|
||||
|
||||
Platform::String^ CallInfoRT::localContact::get()
|
||||
{
|
||||
return to_platform_str(inPtr->localContact);
|
||||
}
|
||||
|
||||
Platform::String^ CallInfoRT::remoteUri::get()
|
||||
{
|
||||
return to_platform_str(inPtr->remoteUri);
|
||||
}
|
||||
|
||||
Platform::String^ CallInfoRT::remoteContact::get()
|
||||
{
|
||||
return to_platform_str(inPtr->remoteContact);
|
||||
}
|
||||
|
||||
INV_STATE CallInfoRT::state::get()
|
||||
{
|
||||
return static_cast<INV_STATE>(inPtr->state);
|
||||
}
|
||||
|
||||
CallInfoRT::~CallInfoRT()
|
||||
{
|
||||
DEFAULT_DESTRUCTOR();
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
CallOpParamRT::CallOpParamRT()
|
||||
{
|
||||
inPtr = new pj::CallOpParam(true);
|
||||
}
|
||||
|
||||
unsigned CallOpParamRT::statusCode::get()
|
||||
{
|
||||
return static_cast<unsigned>(inPtr->statusCode);
|
||||
}
|
||||
|
||||
void CallOpParamRT::statusCode::set(unsigned val)
|
||||
{
|
||||
inPtr->statusCode = static_cast<pjsip_status_code>(val);
|
||||
}
|
||||
|
||||
Platform::String^ CallOpParamRT::reason::get()
|
||||
{
|
||||
return to_platform_str(inPtr->reason);
|
||||
}
|
||||
|
||||
void CallOpParamRT::reason::set(Platform::String^ val)
|
||||
{
|
||||
inPtr->reason = to_std_str(val);
|
||||
}
|
||||
|
||||
pj::CallOpParam* CallOpParamRT::getPtr()
|
||||
{
|
||||
return inPtr;
|
||||
}
|
||||
|
||||
CallOpParamRT::~CallOpParamRT()
|
||||
{
|
||||
DEFAULT_DESTRUCTOR();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
ImpCall::ImpCall(pj::Account& account, int call_id) : pj::Call(account,call_id)
|
||||
{};
|
||||
|
||||
void ImpCall::setCallback(IntCall^ callback)
|
||||
{
|
||||
cb = callback;
|
||||
}
|
||||
|
||||
void ImpCall::onCallState(pj::OnCallStateParam& prm)
|
||||
{
|
||||
if (cb) {
|
||||
pj::CallInfo info = getInfo();
|
||||
cb->onCallState(ref new CallInfoRT(info));
|
||||
}
|
||||
};
|
||||
|
||||
void ImpCall::onCallMediaState(pj::OnCallMediaStateParam& prm)
|
||||
{
|
||||
pj::CallInfo info;
|
||||
try {
|
||||
info = getInfo();
|
||||
} catch (pj::Error& e) {
|
||||
MyAppRT::Instance->writeLog(2, to_platform_str(e.info()));
|
||||
return;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < info.media.size(); i++) {
|
||||
pj::CallMediaInfo med_info = info.media[i];
|
||||
if ((med_info.type == PJMEDIA_TYPE_AUDIO) &&
|
||||
((med_info.status == PJSUA_CALL_MEDIA_ACTIVE) ||
|
||||
(med_info.status == PJSUA_CALL_MEDIA_REMOTE_HOLD))
|
||||
)
|
||||
{
|
||||
pj::Media* m = getMedia(i);
|
||||
pj::AudioMedia *am = pj::AudioMedia::typecastFromMedia(m);
|
||||
pj::AudDevManager& aud_mgr =
|
||||
pj::Endpoint::instance().audDevManager();
|
||||
|
||||
try {
|
||||
aud_mgr.getCaptureDevMedia().startTransmit(*am);
|
||||
am->startTransmit(aud_mgr.getPlaybackDevMedia());
|
||||
|
||||
} catch (pj::Error& e) {
|
||||
MyAppRT::Instance->writeLog(2, to_platform_str(e.info()));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
AccountInfo::AccountInfo(pj::AccountConfig* accConfig) : cfg(accConfig)
|
||||
{}
|
||||
|
||||
Platform::String^ AccountInfo::id::get() {
|
||||
return to_platform_str(cfg->idUri);
|
||||
}
|
||||
|
||||
Platform::String^ AccountInfo::registrar::get() {
|
||||
return to_platform_str(cfg->regConfig.registrarUri);
|
||||
}
|
||||
|
||||
Platform::String^ AccountInfo::proxy::get() {
|
||||
if (!cfg->sipConfig.proxies.empty()) {
|
||||
return to_platform_str(cfg->sipConfig.proxies[0]);
|
||||
} else {
|
||||
return ref new Platform::String(L"");
|
||||
}
|
||||
}
|
||||
|
||||
Platform::String^ AccountInfo::username::get() {
|
||||
if (!cfg->sipConfig.authCreds.empty()) {
|
||||
pj::AuthCredInfo& info = cfg->sipConfig.authCreds[0];
|
||||
|
||||
return to_platform_str(info.username);
|
||||
} else {
|
||||
return ref new Platform::String(L"");
|
||||
}
|
||||
}
|
||||
|
||||
Platform::String^ AccountInfo::password::get() {
|
||||
if (!cfg->sipConfig.authCreds.empty()) {
|
||||
pj::AuthCredInfo& info = cfg->sipConfig.authCreds[0];
|
||||
|
||||
return to_platform_str(info.data);
|
||||
} else {
|
||||
return ref new Platform::String(L"");
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
MyAppRT::MyAppRT()
|
||||
{
|
||||
logWriter = new ImpLogWriter();
|
||||
|
||||
StorageFolder^ localFolder = ApplicationData::Current->LocalFolder;
|
||||
|
||||
appDir = to_std_str(localFolder->Path);
|
||||
}
|
||||
|
||||
MyAppRT::~MyAppRT()
|
||||
{
|
||||
delete logWriter;
|
||||
if (account)
|
||||
delete account;
|
||||
|
||||
if (epConfig)
|
||||
delete epConfig;
|
||||
|
||||
if (accConfig)
|
||||
delete accConfig;
|
||||
|
||||
if (sipTpConfig)
|
||||
delete sipTpConfig;
|
||||
}
|
||||
|
||||
void MyAppRT::loadConfig()
|
||||
{
|
||||
pj::JsonDocument* json = new pj::JsonDocument();
|
||||
|
||||
std::string configPath = appDir + "/" + CONFIG_NAME;
|
||||
|
||||
try {
|
||||
/* Load file */
|
||||
json->loadFile(configPath);
|
||||
pj::ContainerNode root = json->getRootContainer();
|
||||
|
||||
/* Read endpoint config */
|
||||
epConfig->readObject(root);
|
||||
|
||||
/* Read transport config */
|
||||
pj::ContainerNode tp_node = root.readContainer("SipTransport");
|
||||
sipTpConfig->readObject(tp_node);
|
||||
|
||||
/* Read account configs */
|
||||
pj::ContainerNode acc_node = root.readContainer("Account");
|
||||
accConfig->readObject(acc_node);
|
||||
} catch (pj::Error) {
|
||||
ep.utilLogWrite(2, "loadConfig", "Failed loading config");
|
||||
|
||||
sipTpConfig->port = SIP_PORT;
|
||||
}
|
||||
|
||||
delete json;
|
||||
}
|
||||
|
||||
void MyAppRT::saveConfig()
|
||||
{
|
||||
pj::JsonDocument* json = new pj::JsonDocument();
|
||||
|
||||
std::string configPath = appDir + "/" + CONFIG_NAME;
|
||||
|
||||
try {
|
||||
/* Write endpoint config */
|
||||
json->writeObject(*epConfig);
|
||||
|
||||
/* Write transport config */
|
||||
pj::ContainerNode tp_node = json->writeNewContainer("SipTransport");
|
||||
sipTpConfig->writeObject(tp_node);
|
||||
|
||||
/* Write account configs */
|
||||
pj::ContainerNode acc_node = json->writeNewContainer("Account");
|
||||
accConfig->writeObject(acc_node);
|
||||
|
||||
/* Save file */
|
||||
json->saveFile(configPath);
|
||||
} catch (pj::Error) {
|
||||
ep.utilLogWrite(2, "saveConfig", "Failed saving config");
|
||||
|
||||
sipTpConfig->port = SIP_PORT;
|
||||
}
|
||||
|
||||
delete json;
|
||||
}
|
||||
|
||||
MyAppRT^ MyAppRT::Instance::get()
|
||||
{
|
||||
if (MyAppRT::singleton == nullptr)
|
||||
{
|
||||
if (MyAppRT::singleton == nullptr)
|
||||
{
|
||||
MyAppRT::singleton = ref new MyAppRT();
|
||||
}
|
||||
}
|
||||
|
||||
return MyAppRT::singleton;
|
||||
}
|
||||
|
||||
void MyAppRT::init(IntAccount^ iAcc, IntCall^ iCall)
|
||||
{
|
||||
/* Create endpoint */
|
||||
try {
|
||||
ep.libCreate();
|
||||
} catch (pj::Error e) {
|
||||
return;
|
||||
}
|
||||
|
||||
intAcc = iAcc;
|
||||
intCall = iCall;
|
||||
|
||||
epConfig = new pj::EpConfig;
|
||||
accConfig = new pj::AccountConfig;
|
||||
sipTpConfig = new pj::TransportConfig;
|
||||
|
||||
/* Load config */
|
||||
loadConfig();
|
||||
|
||||
/* Override log level setting */
|
||||
epConfig->logConfig.level = LOG_LEVEL;
|
||||
epConfig->logConfig.consoleLevel = LOG_LEVEL;
|
||||
|
||||
/* Set log config. */
|
||||
pj::LogConfig *log_cfg = &epConfig->logConfig;
|
||||
log_cfg->writer = logWriter;
|
||||
log_cfg->decor = log_cfg->decor &
|
||||
~(::pj_log_decoration::PJ_LOG_HAS_CR |
|
||||
::pj_log_decoration::PJ_LOG_HAS_NEWLINE);
|
||||
|
||||
/* Set ua config. */
|
||||
pj::UaConfig* ua_cfg = &epConfig->uaConfig;
|
||||
ua_cfg->userAgent = "Pjsua2 WinRT " + ep.libVersion().full;
|
||||
ua_cfg->mainThreadOnly = false;
|
||||
|
||||
/* Init endpoint */
|
||||
try
|
||||
{
|
||||
ep.libInit(*epConfig);
|
||||
} catch (pj::Error& e)
|
||||
{
|
||||
ep.utilLogWrite(2,THIS_FILE,e.info());
|
||||
return;
|
||||
}
|
||||
|
||||
/* Create transports. */
|
||||
|
||||
try {
|
||||
ep.transportCreate(::pjsip_transport_type_e::PJSIP_TRANSPORT_TCP,
|
||||
*sipTpConfig);
|
||||
} catch (pj::Error& e) {
|
||||
ep.utilLogWrite(2,THIS_FILE,e.info());
|
||||
}
|
||||
|
||||
try {
|
||||
ep.transportCreate(::pjsip_transport_type_e::PJSIP_TRANSPORT_UDP,
|
||||
*sipTpConfig);
|
||||
} catch (pj::Error& e) {
|
||||
ep.utilLogWrite(2,THIS_FILE,e.info());
|
||||
}
|
||||
|
||||
/* Create accounts. */
|
||||
account = new ImpAccount();
|
||||
if (accConfig->idUri.length() == 0) {
|
||||
accConfig->idUri = "sip:localhost";
|
||||
} else {
|
||||
ua_cfg->stunServer.push_back("stun.pjsip.org");
|
||||
}
|
||||
//accConfig->natConfig.iceEnabled = true;
|
||||
account->create(*accConfig);
|
||||
account->setCallback(iAcc);
|
||||
|
||||
/* Start. */
|
||||
try {
|
||||
ep.libStart();
|
||||
} catch (pj::Error& e) {
|
||||
ep.utilLogWrite(2,THIS_FILE,e.info());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void MyAppRT::deInit()
|
||||
{
|
||||
saveConfig();
|
||||
|
||||
try {
|
||||
ep.libDestroy();
|
||||
} catch (pj::Error) {}
|
||||
|
||||
}
|
||||
|
||||
void MyAppRT::writeLog(int level, Platform::String^ message)
|
||||
{
|
||||
ep.utilLogWrite(level, "MyAppRT", to_std_str(message));
|
||||
}
|
||||
|
||||
void MyAppRT::hangupCall()
|
||||
{
|
||||
if (activeCall) {
|
||||
if (!isThreadRegistered())
|
||||
{
|
||||
registerThread("hangupCall");
|
||||
}
|
||||
|
||||
delete activeCall;
|
||||
activeCall = NULL;
|
||||
}
|
||||
};
|
||||
|
||||
void MyAppRT::answerCall(CallOpParamRT^ prm)
|
||||
{
|
||||
if (!isThreadRegistered())
|
||||
{
|
||||
registerThread("answerCall");
|
||||
}
|
||||
CHECK_EXCEPTION(activeCall->answer(*prm->getPtr()));
|
||||
};
|
||||
|
||||
void MyAppRT::makeCall(Platform::String^ dst_uri)
|
||||
{
|
||||
if (!isThreadRegistered())
|
||||
{
|
||||
registerThread("makeCall");
|
||||
}
|
||||
CallOpParamRT^ param = ref new CallOpParamRT;
|
||||
activeCall = new ImpCall(*account, -1);
|
||||
activeCall->setCallback(intCall);
|
||||
|
||||
CHECK_EXCEPTION(activeCall->makeCall(to_std_str(dst_uri),*param->getPtr()));
|
||||
};
|
||||
|
||||
CallInfoRT^ MyAppRT::getCallInfo()
|
||||
{
|
||||
if (activeCall) {
|
||||
pj::CallInfo info = activeCall->getInfo();
|
||||
return ref new CallInfoRT(info);
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
pj_bool_t MyAppRT::handleIncomingCall(int callId)
|
||||
{
|
||||
if (activeCall) {
|
||||
return PJ_FALSE;
|
||||
}
|
||||
|
||||
activeCall = new ImpCall(*account, callId);
|
||||
activeCall->setCallback(intCall);
|
||||
|
||||
return PJ_TRUE;
|
||||
}
|
||||
|
||||
void MyAppRT::registerThread(Platform::String^ name)
|
||||
{
|
||||
CHECK_EXCEPTION(ep.libRegisterThread(to_std_str(name)));
|
||||
}
|
||||
|
||||
bool MyAppRT::isThreadRegistered()
|
||||
{
|
||||
return ep.libIsThreadRegistered();
|
||||
}
|
||||
|
||||
AccountInfo^ MyAppRT::getAccountInfo()
|
||||
|
||||
{
|
||||
return ref new AccountInfo(accConfig);
|
||||
}
|
||||
|
||||
void MyAppRT::modifyAccount(Platform::String^ id,
|
||||
Platform::String^ registrar,
|
||||
Platform::String^ proxy,
|
||||
Platform::String^ username,
|
||||
Platform::String^ password)
|
||||
{
|
||||
if (id->IsEmpty()) {
|
||||
accConfig->idUri = "sip:localhost";
|
||||
accConfig->regConfig.registrarUri = "";
|
||||
accConfig->sipConfig.authCreds.clear();
|
||||
accConfig->sipConfig.proxies.clear();
|
||||
} else {
|
||||
pj::AuthCredInfo info = pj::AuthCredInfo("Digest", "*",
|
||||
to_std_str(username), 0,
|
||||
to_std_str(password));
|
||||
|
||||
accConfig->idUri = to_std_str(id);
|
||||
accConfig->regConfig.registrarUri = to_std_str(registrar);
|
||||
|
||||
accConfig->sipConfig.authCreds.clear();
|
||||
accConfig->sipConfig.authCreds.push_back(info);
|
||||
|
||||
accConfig->sipConfig.proxies.clear();
|
||||
accConfig->sipConfig.proxies.push_back(to_std_str(proxy));
|
||||
}
|
||||
|
||||
if (!isThreadRegistered())
|
||||
{
|
||||
registerThread("registerAccount");
|
||||
}
|
||||
|
||||
account->modify(*accConfig);
|
||||
|
||||
/* Save config. */
|
||||
saveConfig();
|
||||
}
|
|
@ -0,0 +1,271 @@
|
|||
/* $Id*/
|
||||
/*
|
||||
* Copyright (C) 2016 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <pjsua2.hpp>
|
||||
#include <collection.h>
|
||||
|
||||
namespace VoipBackEnd
|
||||
{
|
||||
typedef int TransportId;
|
||||
|
||||
typedef Platform::Collections::Vector<Platform::String^> StringVector;
|
||||
typedef Windows::Foundation::Collections::IVector<Platform::String^>
|
||||
IStringVector;
|
||||
|
||||
typedef public enum class INV_STATE
|
||||
{
|
||||
PJSIP_INV_STATE_NULL, /**< Before INVITE is sent or received */
|
||||
PJSIP_INV_STATE_CALLING, /**< After INVITE is sent */
|
||||
PJSIP_INV_STATE_INCOMING, /**< After INVITE is received. */
|
||||
PJSIP_INV_STATE_EARLY, /**< After response with To tag. */
|
||||
PJSIP_INV_STATE_CONNECTING, /**< After 2xx is sent/received. */
|
||||
PJSIP_INV_STATE_CONFIRMED, /**< After ACK is sent/received. */
|
||||
PJSIP_INV_STATE_DISCONNECTED, /**< Session is terminated. */
|
||||
} INV_STATE;
|
||||
|
||||
class ImpLogWriter : public pj::LogWriter
|
||||
{
|
||||
public:
|
||||
virtual void write(const pj::LogEntry &entry);
|
||||
};
|
||||
|
||||
/* Account related data type. */
|
||||
public ref struct OnRegStateParamRT sealed
|
||||
{
|
||||
OnRegStateParamRT();
|
||||
|
||||
property pj_status_t status
|
||||
{
|
||||
pj_status_t get();
|
||||
};
|
||||
|
||||
property unsigned code
|
||||
{
|
||||
unsigned get();
|
||||
};
|
||||
|
||||
property Platform::String^ reason
|
||||
{
|
||||
Platform::String^ get();
|
||||
};
|
||||
|
||||
property int expiration
|
||||
{
|
||||
int get();
|
||||
};
|
||||
|
||||
internal:
|
||||
OnRegStateParamRT(const pj::OnRegStateParam& param);
|
||||
|
||||
private:
|
||||
pj::OnRegStateParam* inPtr;
|
||||
|
||||
~OnRegStateParamRT();
|
||||
};
|
||||
|
||||
public ref struct CallInfoRT sealed
|
||||
{
|
||||
property Platform::String^ localUri
|
||||
{
|
||||
Platform::String^ get();
|
||||
}
|
||||
|
||||
property Platform::String^ localContact
|
||||
{
|
||||
Platform::String^ get();
|
||||
}
|
||||
|
||||
property Platform::String^ remoteUri
|
||||
{
|
||||
Platform::String^ get();
|
||||
}
|
||||
|
||||
property Platform::String^ remoteContact
|
||||
{
|
||||
Platform::String^ get();
|
||||
}
|
||||
|
||||
property INV_STATE state
|
||||
{
|
||||
INV_STATE get();
|
||||
};
|
||||
|
||||
internal:
|
||||
CallInfoRT(const pj::CallInfo& info);
|
||||
|
||||
private:
|
||||
pj::CallInfo* inPtr;
|
||||
|
||||
~CallInfoRT();
|
||||
|
||||
};
|
||||
|
||||
public interface class IntAccount
|
||||
{
|
||||
public:
|
||||
virtual void onRegState(OnRegStateParamRT^ prm);
|
||||
virtual void onIncomingCall(CallInfoRT^ info);
|
||||
};
|
||||
|
||||
class ImpAccount : public pj::Account
|
||||
{
|
||||
public:
|
||||
void setCallback(IntAccount^ callback);
|
||||
|
||||
virtual void onIncomingCall(pj::OnIncomingCallParam& prm);
|
||||
virtual void onRegState(pj::OnRegStateParam& prm);
|
||||
|
||||
~ImpAccount() {};
|
||||
|
||||
private:
|
||||
IntAccount^ cb;
|
||||
};
|
||||
|
||||
/* Call related data type. */
|
||||
public ref class CallOpParamRT sealed
|
||||
{
|
||||
public:
|
||||
CallOpParamRT();
|
||||
|
||||
property unsigned statusCode
|
||||
{
|
||||
unsigned get();
|
||||
void set(unsigned val);
|
||||
}
|
||||
|
||||
property Platform::String^ reason {
|
||||
Platform::String^ get();
|
||||
void set(Platform::String^ val);
|
||||
}
|
||||
|
||||
internal:
|
||||
pj::CallOpParam* getPtr();
|
||||
|
||||
private:
|
||||
pj::CallOpParam* inPtr;
|
||||
|
||||
~CallOpParamRT();
|
||||
};
|
||||
|
||||
public interface class IntCall
|
||||
{
|
||||
|
||||
public:
|
||||
virtual void onCallState(CallInfoRT^ info);
|
||||
};
|
||||
|
||||
class ImpCall : public pj::Call
|
||||
{
|
||||
public:
|
||||
ImpCall(pj::Account& account, int call_id);
|
||||
virtual ~ImpCall() {};
|
||||
|
||||
void setCallback(IntCall^ callback);
|
||||
|
||||
virtual void onCallState(pj::OnCallStateParam& prm);
|
||||
virtual void onCallMediaState(pj::OnCallMediaStateParam& prm);
|
||||
|
||||
private:
|
||||
IntCall^ cb;
|
||||
};
|
||||
|
||||
public ref class AccountInfo sealed
|
||||
{
|
||||
public:
|
||||
property Platform::String^ id {
|
||||
Platform::String^ get();
|
||||
}
|
||||
property Platform::String^ registrar {
|
||||
Platform::String^ get();
|
||||
}
|
||||
property Platform::String^ proxy {
|
||||
Platform::String^ get();
|
||||
}
|
||||
property Platform::String^ username {
|
||||
Platform::String^ get();
|
||||
}
|
||||
property Platform::String^ password {
|
||||
Platform::String^ get();
|
||||
}
|
||||
internal:
|
||||
AccountInfo(pj::AccountConfig* accConfig);
|
||||
private:
|
||||
pj::AccountConfig* cfg;
|
||||
};
|
||||
|
||||
/* App class. */
|
||||
public ref class MyAppRT sealed
|
||||
{
|
||||
public:
|
||||
static property MyAppRT^ Instance {
|
||||
MyAppRT^ get();
|
||||
}
|
||||
|
||||
void init(IntAccount^ iAcc, IntCall^ iCall);
|
||||
void deInit();
|
||||
|
||||
/* Util */
|
||||
void writeLog(int level, Platform::String^ message);
|
||||
|
||||
/* Call handling. */
|
||||
void hangupCall();
|
||||
void answerCall(CallOpParamRT^ prm);
|
||||
void makeCall(Platform::String^ dst_uri);
|
||||
CallInfoRT^ getCallInfo();
|
||||
|
||||
/* Thread handling. */
|
||||
void registerThread(Platform::String^ name);
|
||||
bool isThreadRegistered();
|
||||
|
||||
/* Account handling. */
|
||||
AccountInfo^ getAccountInfo();
|
||||
|
||||
void modifyAccount(Platform::String^ id, Platform::String^ registrar,
|
||||
Platform::String^ proxy, Platform::String^ username,
|
||||
Platform::String^ password);
|
||||
|
||||
internal:
|
||||
pj_bool_t handleIncomingCall(int callId);
|
||||
|
||||
private:
|
||||
MyAppRT();
|
||||
~MyAppRT();
|
||||
|
||||
void loadConfig();
|
||||
void saveConfig();
|
||||
|
||||
static MyAppRT^ singleton;
|
||||
|
||||
ImpLogWriter* logWriter;
|
||||
pj::Endpoint ep;
|
||||
|
||||
/* Configs */
|
||||
pj::EpConfig* epConfig;
|
||||
pj::AccountConfig* accConfig;
|
||||
pj::TransportConfig* sipTpConfig;
|
||||
|
||||
std::string appDir;
|
||||
ImpAccount* account;
|
||||
ImpCall* activeCall;
|
||||
|
||||
IntAccount^ intAcc;
|
||||
IntCall^ intCall;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,266 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|ARM">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(API_Family)'=='UWP'">
|
||||
<ProjectReference Include="..\..\..\..\..\..\build\libpjproject.vcxproj">
|
||||
<Project>{23d7679c-764c-4e02-8b29-bb882ceeefe2}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{fc9cbb95-624c-4ce8-86a8-3ab5a415aa65}</ProjectGuid>
|
||||
<Keyword>WindowsRuntimeComponent</Keyword>
|
||||
<ProjectName>VoipBackEnd</ProjectName>
|
||||
<RootNamespace>VoipBackEnd</RootNamespace>
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
|
||||
<AppContainerApplication>true</AppContainerApplication>
|
||||
<ApplicationType>Windows Store</ApplicationType>
|
||||
<WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
|
||||
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
|
||||
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<!-- Import common config -->
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-common-config.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-arm-common-defaults.props" />
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-debug-static-defaults.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-win32-common-defaults.props" />
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-debug-static-defaults.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-arm-common-defaults.props" />
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-release-dynamic-defaults.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-win32-common-defaults.props" />
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-release-dynamic-defaults.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<CompileAsWinRT>true</CompileAsWinRT>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\..\..\..\pjsip\include;..\..\..\..\..\..\..\pjlib\include;..\..\..\..\..\..\..\pjlib-util\include;..\..\..\..\..\..\..\pjmedia\include;..\..\..\..\..\..\..\pjnath\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\..\..\..\pjsip\include;..\..\..\..\..\..\..\pjlib\include;..\..\..\..\..\..\..\pjlib-util\include;..\..\..\..\..\..\..\pjmedia\include;..\..\..\..\..\..\..\pjnath\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<CompileAsWinRT>true</CompileAsWinRT>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\..\..\..\pjsip\include;..\..\..\..\..\..\..\pjlib\include;..\..\..\..\..\..\..\pjlib-util\include;..\..\..\..\..\..\..\pjmedia\include;..\..\..\..\..\..\..\pjnath\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\..\..\..\pjsip\include;..\..\..\..\..\..\..\pjlib\include;..\..\..\..\..\..\..\pjlib-util\include;..\..\..\..\..\..\..\pjmedia\include;..\..\..\..\..\..\..\pjnath\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\..\..\..\pjsip\include;..\..\..\..\..\..\..\pjlib\include;..\..\..\..\..\..\..\pjlib-util\include;..\..\..\..\..\..\..\pjmedia\include;..\..\..\..\..\..\..\pjnath\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\..\..\..\pjsip\include;..\..\..\..\..\..\..\pjlib\include;..\..\..\..\..\..\..\pjlib-util\include;..\..\..\..\..\..\..\pjmedia\include;..\..\..\..\..\..\..\pjnath\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup Condition="'$(API_Family)'=='UWP'">
|
||||
<ClInclude Include="ApiLock.h" />
|
||||
<ClInclude Include="pch.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(API_Family)'=='UWP'">
|
||||
<ClCompile Include="ApiLock.cpp" />
|
||||
<ClCompile Include="pch.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="MyApp.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="MyApp.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Resources">
|
||||
<UniqueIdentifier>d25e3c8e-e29b-40f8-88c6-2cb35dbe70d2</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="pch.cpp" />
|
||||
<ClCompile Include="ApiLock.cpp" />
|
||||
<ClCompile Include="MyApp.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="pch.h" />
|
||||
<ClInclude Include="ApiLock.h" />
|
||||
<ClInclude Include="MyApp.h" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,11 @@
|
|||
//*********************************************************
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
||||
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
||||
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
||||
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
||||
//
|
||||
//*********************************************************
|
||||
#include "pch.h"
|
|
@ -0,0 +1,14 @@
|
|||
//*********************************************************
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
||||
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
||||
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
||||
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
||||
//
|
||||
//*********************************************************
|
||||
#pragma once
|
||||
|
||||
#include <collection.h>
|
||||
#include <ppltasks.h>
|
|
@ -0,0 +1,55 @@
|
|||
//*********************************************************
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
||||
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
||||
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
||||
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
||||
//
|
||||
//*********************************************************
|
||||
|
||||
#include <wrl\module.h>
|
||||
#include <roapi.h>
|
||||
#include <Windows.ApplicationModel.Core.h>
|
||||
|
||||
using namespace ABI::Windows::ApplicationModel::Core;
|
||||
using namespace Microsoft::WRL;
|
||||
|
||||
class ExeServerGetActivationFactory : public RuntimeClass<
|
||||
ABI::Windows::Foundation::IGetActivationFactory,
|
||||
FtmBase>
|
||||
{
|
||||
public:
|
||||
IFACEMETHODIMP GetActivationFactory(_In_ HSTRING activatableClassId, _COM_Outptr_ IInspectable **factory)
|
||||
{
|
||||
*factory = nullptr;
|
||||
ComPtr<IActivationFactory> activationFactory;
|
||||
auto &module = Microsoft::WRL::Module<Microsoft::WRL::InProc>::GetModule();
|
||||
HRESULT hr = module.GetActivationFactory(activatableClassId, &activationFactory);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
*factory = activationFactory.Detach();
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
};
|
||||
|
||||
int CALLBACK WinMain(_In_ HINSTANCE, _In_ HINSTANCE, _In_ LPSTR, _In_ int)
|
||||
{
|
||||
HRESULT hr = Windows::Foundation::Initialize(RO_INIT_MULTITHREADED);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// Scoping for smart pointers
|
||||
{
|
||||
ComPtr<ICoreApplication> spApplicationFactory;
|
||||
hr = Windows::Foundation::GetActivationFactory(Wrappers::HStringReference(RuntimeClass_Windows_ApplicationModel_Core_CoreApplication).Get(), &spApplicationFactory);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
ComPtr<ABI::Windows::Foundation::IGetActivationFactory> spGetActivationFactory = Make<ExeServerGetActivationFactory>();
|
||||
spApplicationFactory->RunWithActivationFactories(spGetActivationFactory.Get());
|
||||
}
|
||||
}
|
||||
Windows::Foundation::Uninitialize();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,245 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|ARM">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(API_Family)'=='UWP'">
|
||||
<ClCompile Include="VoipHost.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AppxManifest Include="..\voip\package.appxmanifest">
|
||||
<SubType>Designer</SubType>
|
||||
</AppxManifest>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{016d497f-0ee0-449e-89f5-bd63f7f9a8a6}</ProjectGuid>
|
||||
<Keyword>WindowsRuntimeComponent</Keyword>
|
||||
<ProjectName>VoipHost</ProjectName>
|
||||
<RootNamespace>VoipHost</RootNamespace>
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
|
||||
<AppContainerApplication>true</AppContainerApplication>
|
||||
<ApplicationType>Windows Store</ApplicationType>
|
||||
<WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
|
||||
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
|
||||
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<!-- Import common config -->
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-common-config.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-arm-common-defaults.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-win32-common-defaults.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-arm-common-defaults.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="..\..\..\..\..\..\..\build\vs\pjproject-vs14-win32-common-defaults.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup>
|
||||
<TargetName>$(ProjectName)</TargetName>
|
||||
<IntDir>.\output\$(ProjectName)\</IntDir>
|
||||
<OutDir>..\bin\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<CompileAsWinRT>true</CompileAsWinRT>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
<OutputFile>..\bin\$(ProjectName)$(TargetExt)</OutputFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<CompileAsWinRT>true</CompileAsWinRT>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
<OutputFile>..\bin\$(ProjectName)$(TargetExt)</OutputFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Resources">
|
||||
<UniqueIdentifier>bfd33be3-f275-42ab-98e7-d1430685d099</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="VoipHost.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AppxManifest Include="..\voip\package.appxmanifest" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,152 @@
|
|||
//*********************************************************
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
||||
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
||||
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
||||
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
||||
//
|
||||
//*********************************************************
|
||||
using System;
|
||||
using VoipTasks.BackgroundOperations;
|
||||
using VoipTasks.Helpers;
|
||||
using Windows.ApplicationModel.AppService;
|
||||
using Windows.ApplicationModel.Background;
|
||||
using Windows.ApplicationModel.Calls;
|
||||
using Windows.Foundation.Collections;
|
||||
using VoipBackEnd;
|
||||
|
||||
namespace VoipTasks
|
||||
{
|
||||
public sealed class AppService : IBackgroundTask
|
||||
{
|
||||
AppServiceConnection _connection;
|
||||
BackgroundTaskDeferral _deferral;
|
||||
|
||||
public void Run(IBackgroundTaskInstance taskInstance)
|
||||
{
|
||||
AppServiceTriggerDetails triggerDetail = taskInstance.TriggerDetails as AppServiceTriggerDetails;
|
||||
_deferral = taskInstance.GetDeferral();
|
||||
|
||||
// Register for Task Cancel callback
|
||||
taskInstance.Canceled += TaskInstance_Canceled;
|
||||
|
||||
AppServiceConnection connection = triggerDetail.AppServiceConnection;
|
||||
_connection = connection;
|
||||
|
||||
connection.RequestReceived += Connection_RequestReceived;
|
||||
Current.AppConnection = connection;
|
||||
}
|
||||
|
||||
private async void Connection_RequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
|
||||
{
|
||||
var deferral = args.GetDeferral();
|
||||
var response = new ValueSet();
|
||||
bool stop = false;
|
||||
try
|
||||
{
|
||||
var request = args.Request;
|
||||
var message = request.Message;
|
||||
if (message.ContainsKey(BackgroundOperation.NewBackgroundRequest))
|
||||
{
|
||||
switch ((BackgroundRequest)message[BackgroundOperation.NewBackgroundRequest])
|
||||
{
|
||||
case BackgroundRequest.NewOutgoingCall:
|
||||
Current.AppRequest = args.Request;
|
||||
Current.Request = BackgroundRequest.NewOutgoingCall;
|
||||
Current.AppRequestDeferal = deferral;
|
||||
await Current.RequestNewCallAsync(message[NewCallArguments.DstURI.ToString()] as String);
|
||||
break;
|
||||
|
||||
case BackgroundRequest.EndCall:
|
||||
Current.AppRequest = args.Request;
|
||||
Current.Request = BackgroundRequest.EndCall;
|
||||
Current.AppRequestDeferal = deferral;
|
||||
Current.EndCallAsync();
|
||||
break;
|
||||
|
||||
case BackgroundRequest.StartService:
|
||||
Current.AppRequest = args.Request;
|
||||
Current.Request = BackgroundRequest.StartService;
|
||||
Current.AppRequestDeferal = deferral;
|
||||
Current.StartService();
|
||||
|
||||
break;
|
||||
case BackgroundRequest.StopService:
|
||||
Current.AppRequest = args.Request;
|
||||
Current.Request = BackgroundRequest.StopService;
|
||||
Current.AppRequestDeferal = deferral;
|
||||
Current.StopService();
|
||||
break;
|
||||
|
||||
case BackgroundRequest.GetAccountInfo:
|
||||
Current.AppRequest = args.Request;
|
||||
Current.Request = BackgroundRequest.GetAccountInfo;
|
||||
Current.AppRequestDeferal = deferral;
|
||||
|
||||
Current.GetAccountInfo();
|
||||
break;
|
||||
|
||||
case BackgroundRequest.ModifyAccount:
|
||||
Current.AppRequest = args.Request;
|
||||
Current.Request = BackgroundRequest.ModifyAccount;
|
||||
Current.AppRequestDeferal = deferral;
|
||||
Current.ModifyAccount(message[ModifyAccountArguments.id.ToString()] as String,
|
||||
message[ModifyAccountArguments.registrar.ToString()] as String,
|
||||
message[ModifyAccountArguments.proxy.ToString()] as String,
|
||||
message[ModifyAccountArguments.username.ToString()] as String,
|
||||
message[ModifyAccountArguments.password.ToString()] as String);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
stop = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
if (stop)
|
||||
{
|
||||
_deferral.Complete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void TaskInstance_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
|
||||
{
|
||||
if (_deferral != null)
|
||||
{
|
||||
_deferral.Complete();
|
||||
}
|
||||
}
|
||||
|
||||
private static void Call_ResumeRequested(VoipPhoneCall sender, CallStateChangeEventArgs args)
|
||||
{
|
||||
sender.NotifyCallActive();
|
||||
}
|
||||
|
||||
private static void Call_RejectRequested(VoipPhoneCall sender, CallRejectEventArgs args)
|
||||
{
|
||||
sender.NotifyCallEnded();
|
||||
}
|
||||
|
||||
private static void Call_HoldRequested(VoipPhoneCall sender, CallStateChangeEventArgs args)
|
||||
{
|
||||
sender.NotifyCallHeld();
|
||||
}
|
||||
|
||||
private static void Call_EndRequested(VoipPhoneCall sender, CallStateChangeEventArgs args)
|
||||
{
|
||||
sender.NotifyCallEnded();
|
||||
}
|
||||
|
||||
private static void Call_AnswerRequested(VoipPhoneCall sender, CallAnswerEventArgs args)
|
||||
{
|
||||
sender.NotifyCallActive();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,112 @@
|
|||
//*********************************************************
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
||||
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
||||
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
||||
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
||||
//
|
||||
//*********************************************************
|
||||
using System;
|
||||
|
||||
namespace VoipTasks.BackgroundOperations
|
||||
{
|
||||
public enum BackgroundRequest
|
||||
{
|
||||
NewOutgoingCall,
|
||||
EndCall,
|
||||
GetCallDuration,
|
||||
StartVideo,
|
||||
EndVideo,
|
||||
|
||||
//Account request
|
||||
GetAccountInfo,
|
||||
ModifyAccount,
|
||||
|
||||
//Endpoint request
|
||||
StartService,
|
||||
StopService,
|
||||
|
||||
// Always keep this as the last option
|
||||
InValid
|
||||
}
|
||||
|
||||
public enum ForegroundReguest
|
||||
{
|
||||
UpdateCallState,
|
||||
UpdateAcccountInfo,
|
||||
UpdateRegState,
|
||||
InValid
|
||||
}
|
||||
|
||||
public enum NewCallArguments
|
||||
{
|
||||
DstURI
|
||||
}
|
||||
|
||||
public enum ModifyAccountArguments
|
||||
{
|
||||
id,
|
||||
registrar,
|
||||
proxy,
|
||||
username,
|
||||
password
|
||||
}
|
||||
|
||||
public enum UpdateCallStateArguments
|
||||
{
|
||||
CallState
|
||||
}
|
||||
|
||||
public enum UpdateRegStateArguments
|
||||
{
|
||||
RegState
|
||||
}
|
||||
|
||||
public enum UpdateAccountInfoArguments
|
||||
{
|
||||
id,
|
||||
registrar,
|
||||
proxy,
|
||||
username,
|
||||
password
|
||||
}
|
||||
|
||||
public enum OperationResult
|
||||
{
|
||||
Succeeded,
|
||||
Failed
|
||||
}
|
||||
|
||||
public static class BackgroundOperation
|
||||
{
|
||||
public static String AppServiceName
|
||||
{
|
||||
get { return _appServiceName; }
|
||||
}
|
||||
|
||||
public static String NewBackgroundRequest
|
||||
{
|
||||
get { return _newBackgroundRequest; }
|
||||
}
|
||||
|
||||
public static String Result
|
||||
{
|
||||
get { return _result; }
|
||||
}
|
||||
|
||||
const String _appServiceName = "VoipTasks.AppService";
|
||||
const String _newBackgroundRequest = "NewBackgroundRequest";
|
||||
const String _result = "Result";
|
||||
}
|
||||
|
||||
public static class ForegroundOperation
|
||||
{
|
||||
public static String NewForegroundRequest
|
||||
{
|
||||
get { return _newForegroundRequest; }
|
||||
}
|
||||
const String _newForegroundRequest = "NewForegroundRequest";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
//*********************************************************
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
||||
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
||||
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
||||
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
||||
//
|
||||
//*********************************************************
|
||||
using VoipTasks.Helpers;
|
||||
using Windows.ApplicationModel.Background;
|
||||
|
||||
namespace VoipTasks
|
||||
{
|
||||
public sealed class CallRtcTask : IBackgroundTask
|
||||
{
|
||||
BackgroundTaskDeferral _deferral;
|
||||
|
||||
public void Run(IBackgroundTaskInstance taskInstance)
|
||||
{
|
||||
_deferral = taskInstance.GetDeferral();
|
||||
|
||||
Current.RTCTaskDeferral = _deferral;
|
||||
// Register for Task Cancel callback
|
||||
taskInstance.Canceled += TaskInstance_Canceled;
|
||||
}
|
||||
|
||||
private void TaskInstance_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
|
||||
{
|
||||
if (_deferral != null)
|
||||
{
|
||||
_deferral.Complete();
|
||||
}
|
||||
|
||||
Current.RTCTaskDeferral = null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,377 @@
|
|||
//*********************************************************
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
||||
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
||||
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
||||
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
||||
//
|
||||
//*********************************************************
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.Diagnostics;
|
||||
using VoipTasks.BackgroundOperations;
|
||||
using Windows.ApplicationModel.AppService;
|
||||
using Windows.ApplicationModel.Background;
|
||||
using Windows.ApplicationModel.Calls;
|
||||
using Windows.Foundation.Collections;
|
||||
using VoipBackEnd;
|
||||
|
||||
namespace VoipTasks.Helpers
|
||||
{
|
||||
static class Current
|
||||
{
|
||||
public static String RtcCallTaskName
|
||||
{
|
||||
get { return _rtcCallTaskName; }
|
||||
}
|
||||
|
||||
public static AppServiceRequest AppRequest
|
||||
{
|
||||
set
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_appRequest = value;
|
||||
}
|
||||
}
|
||||
get
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _appRequest;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static AppServiceDeferral AppRequestDeferal
|
||||
{
|
||||
set
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_appDeferral = value;
|
||||
}
|
||||
}
|
||||
get
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _appDeferral;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static BackgroundTaskDeferral RTCTaskDeferral
|
||||
{
|
||||
set
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_rtcTaskDeferral = value;
|
||||
}
|
||||
}
|
||||
get
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _rtcTaskDeferral;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static VoipPhoneCall VoipCall
|
||||
{
|
||||
set
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_voipCall = value;
|
||||
}
|
||||
}
|
||||
get
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _voipCall;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static BackgroundRequest Request
|
||||
{
|
||||
set
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_request = value;
|
||||
}
|
||||
}
|
||||
get
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _request;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static AppServiceConnection AppConnection
|
||||
{
|
||||
set
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_connection = value;
|
||||
}
|
||||
}
|
||||
get
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _connection;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static MyAppRT MyApp
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _myApp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static async void SendResponse(ValueSet response)
|
||||
{
|
||||
AppServiceRequest request = AppRequest;
|
||||
AppServiceDeferral deferal = AppRequestDeferal;
|
||||
|
||||
try
|
||||
{
|
||||
if (request != null)
|
||||
{
|
||||
await request.SendResponseAsync(response);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (deferal != null)
|
||||
{
|
||||
deferal.Complete();
|
||||
deferal = null;
|
||||
}
|
||||
|
||||
AppRequest = null;
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task<ValueSet> SendMessageAsync(ValueSet message)
|
||||
{
|
||||
ValueSet returnValue = null;
|
||||
|
||||
if (_connection != null)
|
||||
{
|
||||
AppServiceResponse response = await _connection.SendMessageAsync(message);
|
||||
|
||||
if (response.Status == AppServiceResponseStatus.Success)
|
||||
{
|
||||
if (response.Message.Keys.Contains(BackgroundOperation.Result))
|
||||
{
|
||||
returnValue = response.Message;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
public static async void EndCallAsync()
|
||||
{
|
||||
AppServiceRequest request = AppRequest;
|
||||
AppServiceDeferral deferal = AppRequestDeferal;
|
||||
|
||||
try
|
||||
{
|
||||
EndCall();
|
||||
|
||||
if (request != null)
|
||||
{
|
||||
ValueSet response = new ValueSet();
|
||||
response[BackgroundOperation.Result] = (int)OperationResult.Succeeded;
|
||||
await request.SendResponseAsync(response);
|
||||
}
|
||||
|
||||
if (deferal != null)
|
||||
{
|
||||
deferal.Complete();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
AppRequest = null;
|
||||
AppRequestDeferal = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void EndCall()
|
||||
{
|
||||
VoipPhoneCall call = VoipCall;
|
||||
BackgroundTaskDeferral deferral = RTCTaskDeferral;
|
||||
|
||||
if (_voipCall == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
_myApp.hangupCall();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_myApp.writeLog(2, e.Message);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (call != null)
|
||||
{
|
||||
call.NotifyCallEnded();
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (deferral != null)
|
||||
{
|
||||
deferral.Complete();
|
||||
}
|
||||
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
finally
|
||||
{
|
||||
VoipCall = null;
|
||||
RTCTaskDeferral = null;
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task<VoipPhoneCallResourceReservationStatus> RequestNewCallAsync(string dstURI)
|
||||
{
|
||||
VccCallHelper vccCallHelper;
|
||||
VoipPhoneCallResourceReservationStatus status = VoipPhoneCallResourceReservationStatus.ResourcesNotAvailable;
|
||||
|
||||
lock (_lock)
|
||||
{
|
||||
vccCallHelper = _vccCallHelper;
|
||||
}
|
||||
|
||||
if (vccCallHelper != null)
|
||||
{
|
||||
status = await vccCallHelper.RequestNewCallAsync(dstURI);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
public static void RequestNewIncomingCall(string context, string contactName, string serviceName)
|
||||
{
|
||||
VccCallHelper vccCallHelper;
|
||||
|
||||
|
||||
lock (_lock)
|
||||
{
|
||||
vccCallHelper = _vccCallHelper;
|
||||
}
|
||||
|
||||
if (vccCallHelper != null)
|
||||
{
|
||||
vccCallHelper.NewIncomingCall(context, contactName, serviceName);
|
||||
}
|
||||
}
|
||||
|
||||
public static void StartService()
|
||||
{
|
||||
if (_started)
|
||||
return;
|
||||
|
||||
_myApp.init(_epHelper, _epHelper);
|
||||
|
||||
_started = true;
|
||||
}
|
||||
|
||||
|
||||
public static void StopService()
|
||||
{
|
||||
if (!_started)
|
||||
return;
|
||||
|
||||
_myApp.deInit();
|
||||
|
||||
_started = false;
|
||||
}
|
||||
|
||||
public static void ModifyAccount(String id, String registrar,
|
||||
String proxy, String username,
|
||||
String password)
|
||||
{
|
||||
try
|
||||
{
|
||||
MyAppRT.Instance.modifyAccount(id, registrar, proxy, username, password);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MyAppRT.Instance.writeLog(2, e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
async public static void GetAccountInfo()
|
||||
{
|
||||
if (!_started)
|
||||
return;
|
||||
|
||||
AccountInfo accInfo = MyAppRT.Instance.getAccountInfo();
|
||||
|
||||
ValueSet message = new ValueSet();
|
||||
|
||||
message[UpdateAccountInfoArguments.id.ToString()] = accInfo.id;
|
||||
message[UpdateAccountInfoArguments.registrar.ToString()] = accInfo.registrar;
|
||||
message[UpdateAccountInfoArguments.proxy.ToString()] = accInfo.proxy;
|
||||
message[UpdateAccountInfoArguments.username.ToString()] = accInfo.username;
|
||||
message[UpdateAccountInfoArguments.password.ToString()] = accInfo.password;
|
||||
|
||||
message[ForegroundOperation.NewForegroundRequest] = (int)ForegroundReguest.UpdateAcccountInfo;
|
||||
|
||||
ValueSet response = await Current.SendMessageAsync(message);
|
||||
|
||||
}
|
||||
|
||||
private const String _rtcCallTaskName = "VoipTasks.CallRtcTask";
|
||||
private static BackgroundRequest _request = BackgroundRequest.InValid;
|
||||
private static Object _lock = new Object();
|
||||
private static AppServiceRequest _appRequest = null;
|
||||
private static AppServiceDeferral _appDeferral = null;
|
||||
private static VoipPhoneCall _voipCall = null;
|
||||
private static VccCallHelper _vccCallHelper = new VccCallHelper();
|
||||
private static BackgroundTaskDeferral _rtcTaskDeferral = null;
|
||||
|
||||
/* Pjsua data */
|
||||
private static MyAppRT _myApp = MyAppRT.Instance;
|
||||
private static bool _started = false;
|
||||
|
||||
private static EndpointHelper _epHelper = new EndpointHelper();
|
||||
private static AppServiceConnection _connection = null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
/* $Id*/
|
||||
/*
|
||||
* Copyright (C) 2016 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using VoipTasks.BackgroundOperations;
|
||||
using Windows.ApplicationModel.Calls;
|
||||
using Windows.Foundation.Collections;
|
||||
using VoipBackEnd;
|
||||
|
||||
namespace VoipTasks.Helpers
|
||||
{
|
||||
class EndpointHelper : IntAccount, IntCall
|
||||
{
|
||||
private async void sendCallState(String state)
|
||||
{
|
||||
ValueSet message = new ValueSet();
|
||||
|
||||
message[UpdateCallStateArguments.CallState.ToString()] = state;
|
||||
message[ForegroundOperation.NewForegroundRequest] = (int)ForegroundReguest.UpdateCallState;
|
||||
|
||||
ValueSet response = await Current.SendMessageAsync(message);
|
||||
}
|
||||
|
||||
private async void sendRegState(String state)
|
||||
{
|
||||
ValueSet message = new ValueSet();
|
||||
|
||||
message[UpdateRegStateArguments.RegState.ToString()] = state;
|
||||
message[ForegroundOperation.NewForegroundRequest] = (int)ForegroundReguest.UpdateRegState;
|
||||
|
||||
ValueSet response = await Current.SendMessageAsync(message);
|
||||
}
|
||||
|
||||
/* Implement IntAccount. */
|
||||
public void onIncomingCall(CallInfoRT info)
|
||||
{
|
||||
if (Current.VoipCall != null)
|
||||
{
|
||||
/* Only one active call */
|
||||
return;
|
||||
}
|
||||
|
||||
Current.RequestNewIncomingCall(info.remoteContact,
|
||||
info.remoteUri,
|
||||
"Pjsua");
|
||||
}
|
||||
|
||||
public void onRegState(OnRegStateParamRT prm)
|
||||
{
|
||||
sendRegState(prm.reason);
|
||||
}
|
||||
|
||||
/* Implement IntCall. */
|
||||
public void onCallState(CallInfoRT info)
|
||||
{
|
||||
switch (info.state) {
|
||||
case INV_STATE.PJSIP_INV_STATE_CALLING:
|
||||
sendCallState("Calling");
|
||||
break;
|
||||
case INV_STATE.PJSIP_INV_STATE_INCOMING:
|
||||
sendCallState("Incoming");
|
||||
break;
|
||||
case INV_STATE.PJSIP_INV_STATE_CONNECTING:
|
||||
sendCallState("Connecting");
|
||||
break;
|
||||
case INV_STATE.PJSIP_INV_STATE_CONFIRMED:
|
||||
sendCallState("Connected");
|
||||
break;
|
||||
case INV_STATE.PJSIP_INV_STATE_DISCONNECTED:
|
||||
sendCallState("Disconnected");
|
||||
Current.EndCall();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,164 @@
|
|||
//*********************************************************
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
||||
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
||||
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
||||
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
||||
//
|
||||
//*********************************************************
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using VoipTasks.BackgroundOperations;
|
||||
using Windows.ApplicationModel.Calls;
|
||||
using Windows.Foundation.Collections;
|
||||
using Windows.Foundation.Metadata;
|
||||
using VoipBackEnd;
|
||||
|
||||
namespace VoipTasks.Helpers
|
||||
{
|
||||
class VccCallHelper
|
||||
{
|
||||
private int RTcTaskAlreadyRuningErrorCode = -2147024713;
|
||||
public async Task<VoipPhoneCallResourceReservationStatus> RequestNewCallAsync(string dstURI)
|
||||
{
|
||||
VoipPhoneCallResourceReservationStatus status = VoipPhoneCallResourceReservationStatus.ResourcesNotAvailable;
|
||||
|
||||
status = await LaunchRTCTaskAsync();
|
||||
if (status == VoipPhoneCallResourceReservationStatus.Success)
|
||||
{
|
||||
NewOutgoingCall(dstURI);
|
||||
}
|
||||
|
||||
Current.Request = BackgroundRequest.InValid;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
private async Task<VoipPhoneCallResourceReservationStatus> LaunchRTCTaskAsync()
|
||||
{
|
||||
// End current call before starting another call, there should be only one RTC task active at a time.
|
||||
// Duplicate calls to launch RTC task will result in HR ERROR_ALREADY_EXSIST
|
||||
// <TODO> For multiple calls against single rtc task add logic to verify that the rtc is not completed,
|
||||
// and then Skip launching new rtc task
|
||||
Current.EndCall();
|
||||
|
||||
VoipCallCoordinator vCC = VoipCallCoordinator.GetDefault();
|
||||
VoipPhoneCallResourceReservationStatus status = VoipPhoneCallResourceReservationStatus.ResourcesNotAvailable;
|
||||
|
||||
try
|
||||
{
|
||||
status = await vCC.ReserveCallResourcesAsync(Current.RtcCallTaskName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (ex.HResult == RTcTaskAlreadyRuningErrorCode )
|
||||
{
|
||||
Debug.WriteLine("RTC Task Already running");
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
internal void NewOutgoingCall(string dstURI)
|
||||
{
|
||||
bool status = false;
|
||||
try
|
||||
{
|
||||
VoipCallCoordinator vCC = VoipCallCoordinator.GetDefault();
|
||||
VoipPhoneCall call = vCC.RequestNewOutgoingCall( "Pjsua Test Call ", dstURI, "", VoipPhoneCallMedia.Audio);
|
||||
if (call != null)
|
||||
{
|
||||
call.EndRequested += Call_EndRequested;
|
||||
call.RejectRequested += Call_RejectRequested;
|
||||
|
||||
call.NotifyCallActive();
|
||||
|
||||
Current.VoipCall = call;
|
||||
|
||||
MyAppRT.Instance.makeCall(dstURI);
|
||||
|
||||
status = true;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.WriteLine(e.ToString());
|
||||
}
|
||||
|
||||
ValueSet response = new ValueSet();
|
||||
response[BackgroundOperation.Result] = status ? (int)OperationResult.Succeeded : (int)OperationResult.Failed;
|
||||
|
||||
Current.SendResponse(response);
|
||||
}
|
||||
|
||||
internal void NewIncomingCall(string context, string contactName, string serviceName)
|
||||
{
|
||||
try
|
||||
{
|
||||
VoipCallCoordinator vCC = VoipCallCoordinator.GetDefault();
|
||||
VoipPhoneCall call = vCC.RequestNewIncomingCall(
|
||||
"Hello",
|
||||
contactName,
|
||||
context,
|
||||
new Uri("file://c:/data/test/bin/FakeVoipAppLight.png"),
|
||||
serviceName,
|
||||
new Uri("file://c:/data/test/bin/FakeVoipAppLight.png"),
|
||||
"",
|
||||
new Uri("file://c:/data/test/bin/FakeVoipAppRingtone.wma"),
|
||||
VoipPhoneCallMedia.Audio,
|
||||
new TimeSpan(0, 1, 20));
|
||||
if (call != null)
|
||||
{
|
||||
call.AnswerRequested += Call_AnswerRequested;
|
||||
call.EndRequested += Call_EndRequested;
|
||||
call.RejectRequested += Call_RejectRequested;
|
||||
|
||||
Current.VoipCall = call;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.WriteLine(e.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private void Call_RejectRequested(VoipPhoneCall sender, CallRejectEventArgs args)
|
||||
{
|
||||
Current.EndCall();
|
||||
}
|
||||
|
||||
private void Call_EndRequested(VoipPhoneCall sender, CallStateChangeEventArgs args)
|
||||
{
|
||||
Current.EndCall();
|
||||
}
|
||||
|
||||
private void Call_AnswerRequested(VoipPhoneCall sender, CallAnswerEventArgs args)
|
||||
{
|
||||
CallOpParamRT param = new CallOpParamRT();
|
||||
param.statusCode = 200;
|
||||
param.reason = "OK";
|
||||
|
||||
try
|
||||
{
|
||||
Current.MyApp.answerCall(param);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Current.MyApp.writeLog(2, ex.Message);
|
||||
}
|
||||
Current.VoipCall = sender;
|
||||
try
|
||||
{
|
||||
Current.VoipCall.NotifyCallActive();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Current.MyApp.writeLog(2, ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("VoIPTasks")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Microsoft Corporation")]
|
||||
[assembly: AssemblyProduct("VoIPTasks")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
[assembly: ComVisible(false)]
|
|
@ -0,0 +1,147 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{9FDF5E33-D15D-409F-876E-4E77727936B9}</ProjectGuid>
|
||||
<OutputType>winmdobj</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>VoipTasks</RootNamespace>
|
||||
<AssemblyName>VoipTasks</AssemblyName>
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
|
||||
<TargetPlatformVersion>10.0.10586.0</TargetPlatformVersion>
|
||||
<TargetPlatformMinVersion>10.0.10240.0</TargetPlatformMinVersion>
|
||||
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<AllowCrossPlatformRetargeting>false</AllowCrossPlatformRetargeting>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UAP</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UAP</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
|
||||
<PlatformTarget>ARM</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\ARM\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UAP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>ARM</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
|
||||
<PlatformTarget>ARM</PlatformTarget>
|
||||
<OutputPath>bin\ARM\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UAP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>ARM</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UAP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UAP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UAP</DefineConstants>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UAP</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<NoWarn>;2008</NoWarn>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
|
||||
<None Include="project.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AppService.cs" />
|
||||
<Compile Include="BackgroundOperations\BackgroundOperations.cs" />
|
||||
<Compile Include="CallRtcTask.cs" />
|
||||
<Compile Include="Helpers\Current.cs" />
|
||||
<Compile Include="Helpers\VccCallHelper.cs" />
|
||||
<Compile Include="Helpers\EndpointHelper.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<SDKReference Include="WindowsMobile, Version=10.0.10240.0">
|
||||
<Name>Windows Mobile Extensions for the UWP</Name>
|
||||
</SDKReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\VoipBackEnd\VoipBackEnd.vcxproj">
|
||||
<Project>{fc9cbb95-624c-4ce8-86a8-3ab5a415aa65}</Project>
|
||||
<Name>VoipBackEnd</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0"
|
||||
},
|
||||
"frameworks": {
|
||||
"uap10.0": {}
|
||||
},
|
||||
"runtimes": {
|
||||
"win10-arm": {},
|
||||
"win10-arm-aot": {},
|
||||
"win10-x86": {},
|
||||
"win10-x86-aot": {},
|
||||
"win10-x64": {},
|
||||
"win10-x64-aot": {}
|
||||
}
|
||||
}
|
|
@ -78,14 +78,14 @@
|
|||
<Import Project="..\..\build\vs\pjproject-vs14-common-config.props" />
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{B82CDD25-6903-430E-BD38-D8129A2015C1}</ProjectGuid>
|
||||
<RootNamespace>pjsua2_lib</RootNamespace>
|
||||
<RootNamespace>pjsua2_lib</RootNamespace>
|
||||
<!-- Specific UWP property -->
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<AppContainerApplication Condition="'$(API_Family)'=='UWP'">true</AppContainerApplication>
|
||||
<ApplicationType Condition="'$(API_Family)'=='UWP'">Windows Store</ApplicationType>
|
||||
<WindowsTargetPlatformVersion Condition="'$(API_Family)'=='UWP'">$(PlatformVersion)</WindowsTargetPlatformVersion>
|
||||
<WindowsTargetPlatformMinVersion Condition="'$(API_Family)'=='UWP'">$(PlatformVersion)</WindowsTargetPlatformMinVersion>
|
||||
<ApplicationTypeRevision Condition="'$(API_Family)'=='UWP'">$(AppTypeRev)</ApplicationTypeRevision>
|
||||
<ApplicationTypeRevision Condition="'$(API_Family)'=='UWP'">$(AppTypeRev)</ApplicationTypeRevision>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Static|Win32'" Label="Configuration">
|
||||
|
@ -199,7 +199,8 @@
|
|||
<!-- Override the PlatformToolset -->
|
||||
<PropertyGroup>
|
||||
<PlatformToolset>$(BuildToolset)</PlatformToolset>
|
||||
<CharacterSet Condition="'$(API_Family)'!='WinDesktop'"></CharacterSet>
|
||||
<CharacterSet Condition="'$(API_Family)'!='WinDesktop'">
|
||||
</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
@ -321,6 +322,7 @@
|
|||
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Lib>
|
||||
<OutputFile>..\lib\pjsua2-lib-$(TargetCPU)-$(Platform)-vc$(VSVer)-$(Configuration).lib</OutputFile>
|
||||
|
|
|
@ -2191,7 +2191,7 @@ static void on_tsx_state_uas( pjsip_evsub *sub, pjsip_transaction *tsx,
|
|||
should_terminate_sub = PJ_TRUE;
|
||||
} else {
|
||||
pjsip_retry_after_hdr *retry_after;
|
||||
pjsip_rx_data *rdata = event->body.tsx_state.src.rdata;;
|
||||
pjsip_rx_data *rdata = event->body.tsx_state.src.rdata;
|
||||
pjsip_msg *msg = rdata->msg_info.msg;
|
||||
|
||||
retry_after = (pjsip_retry_after_hdr*)
|
||||
|
|