Update website information

Begin adding wrappers for Binary SMS
Integrate STUN at Audio and Video layers
Resolve bugs about memory misalignment on ARM platforms
Expose SipUri parser for Java and C# applications
This commit is contained in:
bossiel 2010-07-24 06:06:21 +00:00
parent 0229ac9b15
commit dbd1533c3e
120 changed files with 7965 additions and 3535 deletions

View File

@ -0,0 +1,7 @@
%{
#include "SMSEncoder.h"
%}
%nodefaultctor;
%include "SMSEncoder.h"
%clearnodefaultctor;

View File

@ -21,35 +21,110 @@
*/
#include "SMSEncoder.h"
#include "tinysip.h" /* SIP/IMS */
#include "tinysms.h" /* Binary SMS API*/
// Short description: http://betelco.blogspot.com/2009/10/sms-over-3gpp-ims-network.html
tsk_bool_t is_valid_telnum(const tsip_uri_t* uri);
SMSData* SMSEncoder::encode(const char *smsc, const char *destination, const char *asscii)
RPData::RPData(twrap_rpdata_type_t _type, tsms_rpdu_data_t* _rp_data)
{
SMSData* encodedData = tsk_null;
this->rp_data = (tsms_rpdu_data_t*)tsk_object_ref(_rp_data);
this->type = _type;
this->tmpBuffer = tsk_null;
}
RPData::RPData() :
rp_data(tsk_null),
type(twrap_rpdata_type_sms_none),
tmpBuffer(tsk_null)
{
}
return encodedData;
twrap_rpdata_type_t RPData::getType()
{
return this->type;
}
unsigned RPData::getPayloadLength()
{
if(!this->tmpBuffer){
if((this->tmpBuffer = tsk_buffer_create_null())){
tsms_rpdu_data_serialize(this->rp_data, this->tmpBuffer);
}
}
return this->tmpBuffer ? this->tmpBuffer->size : 0;
}
unsigned RPData::getPayload(void* output, unsigned maxsize)
{
unsigned retsize = 0;
if(!this->tmpBuffer){
if((this->tmpBuffer = tsk_buffer_create_null())){
tsms_rpdu_data_serialize(this->rp_data, this->tmpBuffer);
}
}
if(output && maxsize && this->tmpBuffer && this->tmpBuffer->data){
retsize = (this->tmpBuffer->size > maxsize) ? maxsize : this->tmpBuffer->size;
memcpy(output, this->tmpBuffer->data, retsize);
}
return retsize;
}
RPData::~RPData()
{
TSK_OBJECT_SAFE_FREE(this->rp_data);
TSK_OBJECT_SAFE_FREE(this->tmpBuffer);
}
tsk_bool_t is_valid_telnum(const tsip_uri_t* uri)
{
tsk_size_t i;
tsk_size_t len;
if(!uri || tsk_strnullORempty(uri->user_name)){
return tsk_false;
}
for(i = 0, len = tsk_strlen(uri->user_name); i<len; i++){
if(uri->user_name[i] != '+' && !isdigit(uri->user_name[i])){
return tsk_false;
}
}
return tsk_true;
}
// More information about RP-DATA: http://www.doubango.org/API/tinySMS/group__tsms__rpdu__group.html#tsms_rpdu_group_DATA
RPData* SMSEncoder::encodeSubmit(int mr, const char *smsc, const char *destination, const char *ascii)
{
int ret;
tsk_buffer_t* buffer = tsk_null;
tsms_tpdu_submit_t* sms_submit = tsk_null;
tsms_rpdu_data_t* rp_data = tsk_null;
RPData* encodedData = tsk_null;
if(!smsc || ! destination || !ascii){
TSK_DEBUG_ERROR("Invalid parameter");
return tsk_null;
}
if(mr<0 || mr>0xFF){
TSK_DEBUG_WARN("Invalid Message Reference");
mr &= 0xFF;
}
// create SMS-SUBMIT message
if(!(sms_submit = tsms_tpdu_submit_create(mr, (const uint8_t*)smsc, (const uint8_t*)destination))){
TSK_DEBUG_ERROR("Failed to create the TPDU SMS-SUBMIT message");
goto bail;
}
// Set content for SMS-SUBMIT
if((buffer = tsms_pack_to_7bit(ascii))){
ret = tsms_tpdu_submit_set_userdata(sms_submit, buffer, tsms_alpha_7bit);
TSK_OBJECT_SAFE_FREE(buffer);
}
else{
TSK_DEBUG_ERROR("Failed to encode the TPDU SMS-SUBMIT message");
goto bail;
}
// create RP-DATA(SMS-SUBMIT)
if((rp_data = tsms_rpdu_data_create_mo(mr, (const uint8_t*)smsc, TSMS_TPDU_MESSAGE(sms_submit)))){
encodedData = new RPData(twrap_rpdata_type_sms_submit, rp_data);
}
else{
TSK_DEBUG_ERROR("Failed to create the RP-DATA(SMS-SUBMIT) message");
goto bail;
}
bail:
TSK_OBJECT_SAFE_FREE(buffer);
TSK_OBJECT_SAFE_FREE(sms_submit);
TSK_OBJECT_SAFE_FREE(rp_data);
return encodedData;
}

View File

@ -24,16 +24,46 @@
#include "tinyWRAP_config.h"
class SMSData
#include "tinysip.h" /* SIP/IMS */
#include "tinysms.h" /* Binary SMS API*/
typedef enum twrap_rpdata_type_e
{
twrap_rpdata_type_sms_none,
twrap_rpdata_type_sms_submit,
twrap_rpdata_type_sms_deliver,
twrap_rpdata_type_sms_status_report,
twrap_rpdata_type_sms_command,
}
twrap_rpdata_type_t;
class RPData
{
public:
SMSData();
#if !defined(SWIG)
RPData(twrap_rpdata_type_t type, tsms_rpdu_data_t* rp_data);
#endif
RPData();
virtual ~RPData();
public:
/* Public API functions */
twrap_rpdata_type_t getType();
unsigned getPayloadLength();
unsigned getPayload(void* output, unsigned maxsize);
private:
twrap_rpdata_type_t type;
tsms_rpdu_data_t* rp_data;
tsk_buffer_t* tmpBuffer;
};
class SMSEncoder
{
public:
static SMSData* encode(const char* smsc, const char* destination, const char* asscii);
static RPData* encodeSubmit(int mr, const char* smsc, const char* destination, const char* ascii);
};
#endif /* TINYWRAP_SMSENCODER_H */

View File

@ -81,8 +81,7 @@ SipStack::~SipStack()
bool SipStack::start()
{
int ret = tsip_stack_start(this->handle);
return (ret == 0);
return (tsip_stack_start(this->handle) == 0);
}
bool SipStack::setDebugCallback(DDebugCallback* callback)
@ -109,89 +108,110 @@ bool SipStack::setRealm(const char* realm_uri)
bool SipStack::setIMPI(const char* impi)
{
int ret = tsip_stack_set(this->handle,
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_IMPI(impi),
TSIP_STACK_SET_NULL());
return (ret == 0);
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setIMPU(const char* impu_uri)
{
int ret = tsip_stack_set(this->handle,
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_IMPU(impu_uri),
TSIP_STACK_SET_NULL());
return (ret == 0);
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setPassword(const char* password)
{
int ret = tsip_stack_set(this->handle,
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_PASSWORD(password),
TSIP_STACK_SET_NULL());
return (ret == 0);
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setProxyCSCF(const char* fqdn, unsigned port, const char* transport, const char* ipversion)
bool SipStack::setAMF(const char* amf)
{
int ret = tsip_stack_set(this->handle,
TSIP_STACK_SET_PROXY_CSCF(fqdn, port, transport, ipversion),
TSIP_STACK_SET_NULL());
return (ret == 0);
uint16_t _amf = (uint16_t)tsk_atox(amf);
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_IMS_AKA_AMF(_amf),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setOperatorId(const char* opid)
{
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_IMS_AKA_OPERATOR_ID(opid),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setProxyCSCF(const char* fqdn, unsigned short port, const char* transport, const char* ipversion)
{
unsigned _port = port;//promote
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_PROXY_CSCF(fqdn, _port, transport, ipversion),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setLocalIP(const char* ip)
{
int ret = tsip_stack_set(this->handle,
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_LOCAL_IP(ip),
TSIP_STACK_SET_NULL());
return (ret == 0);
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setLocalPort(unsigned port)
bool SipStack::setLocalPort(unsigned short port)
{
int ret = tsip_stack_set(this->handle,
TSIP_STACK_SET_LOCAL_PORT(port),
TSIP_STACK_SET_NULL());
return (ret == 0);
unsigned _port = port;//promote
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_LOCAL_PORT(_port),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setEarlyIMS(bool enabled){
int ret = tsip_stack_set(this->handle,
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_EARLY_IMS(enabled? tsk_true : tsk_false),
TSIP_STACK_SET_NULL());
return (ret == 0);
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::addHeader(const char* name, const char* value)
{
int ret = tsip_stack_set(this->handle,
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_HEADER(name, value),
TSIP_STACK_SET_NULL());
return (ret == 0);
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::removeHeader(const char* name)
{
int ret = tsip_stack_set(this->handle,
return (tsip_stack_set(this->handle,
TSIP_STACK_UNSET_HEADER(name),
TSIP_STACK_SET_NULL());
return (ret == 0);
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::addDnsServer(const char* ip)
{
int ret = tsip_stack_set(this->handle,
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_DNS_SERVER(ip),
TSIP_STACK_SET_NULL());
return (ret == 0);
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setAoR(const char* ip, int port)
{
int ret = tsip_stack_set(this->handle,
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_AOR(ip, port),
TSIP_STACK_SET_NULL());
return (ret == 0);
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setSTUNServer(const char* ip, unsigned short port)
{
unsigned _port = port;//promote
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_STUN_SERVER(ip, _port),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setSTUNCred(const char* login, const char* password)
{
return (tsip_stack_set(this->handle,
TSIP_STACK_SET_STUN_CRED(login, password),
TSIP_STACK_SET_NULL()) == 0);
}
char* SipStack::dnsENUM(const char* service, const char* e164num, const char* domain)
@ -212,7 +232,7 @@ char* SipStack::dnsENUM(const char* service, const char* e164num, const char* do
}
}
char* SipStack::dnsNaptrSrv(const char* domain, const char* service, short *OUTPUT)
char* SipStack::dnsNaptrSrv(const char* domain, const char* service, unsigned short *OUTPUT)
{
tnet_dns_ctx_t* dnsctx = tsip_stack_get_dnsctx(this->handle);
char* ip = tsk_null;
@ -233,6 +253,26 @@ char* SipStack::dnsNaptrSrv(const char* domain, const char* service, short *OUTP
}
}
char* SipStack::dnsSrv(const char* service, unsigned short* OUTPUT)
{
tnet_dns_ctx_t* dnsctx = tsip_stack_get_dnsctx(this->handle);
char* ip = tsk_null;
tnet_port_t port = 0;
*OUTPUT = 0;
if(dnsctx){
if(!tnet_dns_query_srv(dnsctx, service, &ip, &port)){
*OUTPUT = port;
}
tsk_object_unref(dnsctx);
return ip;
}
else{
TSK_DEBUG_ERROR("No DNS Context could be found");
return tsk_null;
}
}
bool SipStack::isValid()
{
return (this->handle != tsk_null);

View File

@ -43,17 +43,23 @@ public: /* API functions */
bool setIMPI(const char* impi);
bool setIMPU(const char* impu_uri);
bool setPassword(const char* password);
bool setProxyCSCF(const char* fqdn, unsigned port, const char* transport, const char* ipversion);
bool setAMF(const char* amf);
bool setOperatorId(const char* opid);
bool setProxyCSCF(const char* fqdn, unsigned short port, const char* transport, const char* ipversion);
bool setLocalIP(const char* ip);
bool setLocalPort(unsigned port);
bool setLocalPort(unsigned short port);
bool setEarlyIMS(bool enabled);
bool addHeader(const char* name, const char* value);
bool removeHeader(const char* name);
bool addDnsServer(const char* ip);
bool setAoR(const char* ip, int port);
bool setSTUNServer(const char* ip, unsigned short port);
bool setSTUNCred(const char* login, const char* password);
char* dnsENUM(const char* service, const char* e164num, const char* domain);
char* dnsNaptrSrv(const char* domain, const char* service, short *OUTPUT);
char* dnsNaptrSrv(const char* domain, const char* service, unsigned short *OUTPUT);
char* dnsSrv(const char* service, unsigned short* OUTPUT);
bool isValid();
bool stop();

View File

@ -147,6 +147,8 @@ typedef enum tsip_invite_event_type_e
// Media Events
//
tsip_m_early_media,
/* 3GPP TS 24.610: Communication Hold */
tsip_m_local_hold_ok,
tsip_m_local_hold_nok,

View File

@ -48,3 +48,46 @@ bool SipUri::isValid()
{
return (this->uri != tsk_null);
}
const char* SipUri::getScheme()
{
if(this->uri){
return this->uri->scheme;
}
return tsk_null;
}
const char* SipUri::getHost()
{
return this->uri ? this->uri->host : tsk_null;
}
unsigned short SipUri::getPort()
{
return this->uri ? this->uri->port : 0;
}
const char* SipUri::getUserName()
{
return this->uri ? this->uri->user_name : tsk_null;
}
const char* SipUri::getPassword()
{
return this->uri ? this->uri->password : tsk_null;
}
const char* SipUri::getDisplayName()
{
return this->uri ? this->uri->display_name : tsk_null;
}
const char* SipUri::getParamValue(const char* pname)
{
if(this->uri && this->uri->params){
const char* pvalue = tsk_params_get_param_value(this->uri->params, pname);
return pvalue;
}
return tsk_null;
}

View File

@ -32,7 +32,15 @@ public:
public:
static bool isValid(const char*);
bool isValid();
const char* getScheme();
const char* getHost();
unsigned short getPort();
const char* getUserName();
const char* getPassword();
const char* getDisplayName();
const char* getParamValue(const char* pname);
private:
tsip_uri_t* uri;

View File

@ -19,6 +19,7 @@
%newobject getSipHeaderParamValue;
%newobject SipStack::dnsENUM;
%newobject SipStack::dnsNaptrSrv;
%newobject SipStack::dnsSrv;
%newobject MessagingEvent::takeSessionOwnership;
%newobject CallEvent::takeSessionOwnership;
@ -32,4 +33,10 @@
%newobject getXcapHeaderValue;
%newobject getXcapHeaderParamValue;
%include Xcap.i
%include Xcap.i
/* ========== SMS ========== */
%newobject SMSEncoder::encodeSubmit;
%include SMS.i

View File

@ -0,0 +1,59 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 1.3.39
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
using System;
using System.Runtime.InteropServices;
public class RPData : IDisposable {
private HandleRef swigCPtr;
protected bool swigCMemOwn;
internal RPData(IntPtr cPtr, bool cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = new HandleRef(this, cPtr);
}
internal static HandleRef getCPtr(RPData obj) {
return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
}
~RPData() {
Dispose();
}
public virtual void Dispose() {
lock(this) {
if(swigCPtr.Handle != IntPtr.Zero && swigCMemOwn) {
swigCMemOwn = false;
tinyWRAPPINVOKE.delete_RPData(swigCPtr);
}
swigCPtr = new HandleRef(null, IntPtr.Zero);
GC.SuppressFinalize(this);
}
}
public RPData() : this(tinyWRAPPINVOKE.new_RPData(), true) {
}
public twrap_rpdata_type_t getType() {
twrap_rpdata_type_t ret = (twrap_rpdata_type_t)tinyWRAPPINVOKE.RPData_getType(swigCPtr);
return ret;
}
public uint getPayloadLength() {
uint ret = tinyWRAPPINVOKE.RPData_getPayloadLength(swigCPtr);
return ret;
}
public uint getPayload(byte[] output, uint maxsize) {
uint ret = tinyWRAPPINVOKE.RPData_getPayload(swigCPtr, output, maxsize);
return ret;
}
}

View File

@ -0,0 +1,47 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 1.3.39
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
using System;
using System.Runtime.InteropServices;
public class SMSEncoder : IDisposable {
private HandleRef swigCPtr;
protected bool swigCMemOwn;
internal SMSEncoder(IntPtr cPtr, bool cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = new HandleRef(this, cPtr);
}
internal static HandleRef getCPtr(SMSEncoder obj) {
return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
}
~SMSEncoder() {
Dispose();
}
public virtual void Dispose() {
lock(this) {
if(swigCPtr.Handle != IntPtr.Zero && swigCMemOwn) {
swigCMemOwn = false;
tinyWRAPPINVOKE.delete_SMSEncoder(swigCPtr);
}
swigCPtr = new HandleRef(null, IntPtr.Zero);
GC.SuppressFinalize(this);
}
}
public static RPData encodeSubmit(int mr, string smsc, string destination, string ascii) {
IntPtr cPtr = tinyWRAPPINVOKE.SMSEncoder_encodeSubmit(mr, smsc, destination, ascii);
RPData ret = (cPtr == IntPtr.Zero) ? null : new RPData(cPtr, true);
return ret;
}
}

View File

@ -70,7 +70,17 @@ public class SipStack : SafeObject {
return ret;
}
public bool setProxyCSCF(string fqdn, uint port, string transport, string ipversion) {
public bool setAMF(string amf) {
bool ret = tinyWRAPPINVOKE.SipStack_setAMF(swigCPtr, amf);
return ret;
}
public bool setOperatorId(string opid) {
bool ret = tinyWRAPPINVOKE.SipStack_setOperatorId(swigCPtr, opid);
return ret;
}
public bool setProxyCSCF(string fqdn, ushort port, string transport, string ipversion) {
bool ret = tinyWRAPPINVOKE.SipStack_setProxyCSCF(swigCPtr, fqdn, port, transport, ipversion);
return ret;
}
@ -80,7 +90,7 @@ public class SipStack : SafeObject {
return ret;
}
public bool setLocalPort(uint port) {
public bool setLocalPort(ushort port) {
bool ret = tinyWRAPPINVOKE.SipStack_setLocalPort(swigCPtr, port);
return ret;
}
@ -110,16 +120,31 @@ public class SipStack : SafeObject {
return ret;
}
public bool setSTUNServer(string ip, ushort port) {
bool ret = tinyWRAPPINVOKE.SipStack_setSTUNServer(swigCPtr, ip, port);
return ret;
}
public bool setSTUNCred(string login, string password) {
bool ret = tinyWRAPPINVOKE.SipStack_setSTUNCred(swigCPtr, login, password);
return ret;
}
public string dnsENUM(string service, string e164num, string domain) {
string ret = tinyWRAPPINVOKE.SipStack_dnsENUM(swigCPtr, service, e164num, domain);
return ret;
}
public string dnsNaptrSrv(string domain, string service, out short OUTPUT) {
public string dnsNaptrSrv(string domain, string service, out ushort OUTPUT) {
string ret = tinyWRAPPINVOKE.SipStack_dnsNaptrSrv(swigCPtr, domain, service, out OUTPUT);
return ret;
}
public string dnsSrv(string service, out ushort OUTPUT) {
string ret = tinyWRAPPINVOKE.SipStack_dnsSrv(swigCPtr, service, out OUTPUT);
return ret;
}
public bool isValid() {
bool ret = tinyWRAPPINVOKE.SipStack_isValid(swigCPtr);
return ret;

View File

@ -51,4 +51,39 @@ public class SipUri : IDisposable {
return ret;
}
public string getScheme() {
string ret = tinyWRAPPINVOKE.SipUri_getScheme(swigCPtr);
return ret;
}
public string getHost() {
string ret = tinyWRAPPINVOKE.SipUri_getHost(swigCPtr);
return ret;
}
public ushort getPort() {
ushort ret = tinyWRAPPINVOKE.SipUri_getPort(swigCPtr);
return ret;
}
public string getUserName() {
string ret = tinyWRAPPINVOKE.SipUri_getUserName(swigCPtr);
return ret;
}
public string getPassword() {
string ret = tinyWRAPPINVOKE.SipUri_getPassword(swigCPtr);
return ret;
}
public string getDisplayName() {
string ret = tinyWRAPPINVOKE.SipUri_getDisplayName(swigCPtr);
return ret;
}
public string getParamValue(string pname) {
string ret = tinyWRAPPINVOKE.SipUri_getParamValue(swigCPtr, pname);
return ret;
}
}

View File

@ -19,6 +19,9 @@ public enum tdav_codec_id_t {
tdav_codec_id_speex_nb = 0x00000001 << 8,
tdav_codec_id_speex_wb = 0x00000001 << 9,
tdav_codec_id_speex_uwb = 0x00000001 << 10,
tdav_codec_id_bv16 = 0x00000001 << 11,
tdav_codec_id_bv32 = 0x00000001 << 12,
tdav_codec_id_evrc = 0x00000001 << 13,
tdav_codec_id_h261 = 0x00010000 << 0,
tdav_codec_id_h263 = 0x00010000 << 1,
tdav_codec_id_h263p = 0x00010000 << 2,

View File

@ -11,7 +11,7 @@ namespace test
const String REALM = "micromethod.com";
const String USER = "mamadou";
const String PROXY_CSCF_IP = "192.168.0.10";
const uint PROXY_CSCF_PORT = 5060;
const ushort PROXY_CSCF_PORT = 5060;
const String PASSWORD = "";
/*
@ -57,6 +57,9 @@ namespace test
/* Sets Proxy-CSCF */
success = sipStack.setProxyCSCF(PROXY_CSCF_IP, PROXY_CSCF_PORT, "udp", "ipv4");
// STUN
sipStack.setSTUNServer("numb.viagenie.ca", 3478);
sipStack.setSTUNCred("login", "password");
/* Starts the stack */
success = sipStack.start();
@ -65,14 +68,18 @@ namespace test
/* Early IMS */
sipStack.setEarlyIMS(true);
/* AMF and Operator Id */
sipStack.setAMF("0x00FF");
sipStack.setOperatorId("0xFF0000000000000000000000000000FF");
//sipStack.setAoR("127.0.0.1", 1234);
//sipStack.setAoR("127.0.0.1", 1234);
audioConsumer.setActivate(true);
audioProducer.setActivate(true);
videoProducer.setActivate(true);
videoConsumer.setActivate(true);
/* Send REGISTER */
regSession = new RegistrationSession(sipStack);
regSession.addCaps("+g.oma.sip-im");
@ -83,9 +90,11 @@ namespace test
Console.ReadLine();
//String sipUri = sipStack.dnsENUM("E2U+SIP", "+1-800-555-5555", "e164.org");
// short port = 0;
String sipUri = sipStack.dnsENUM("E2U+SIP", "+1-800-555-5555", "e164.org");
//ushort port = 0;
//String ipAddress = sipStack.dnsNaptrSrv("sip2sip.info", "SIP+D2U", out port);
//String ipAddress = sipStack.dnsSrv("_sip._udp.sip2sip.info", out port);
callSession = new CallSession(sipStack);
callSession.set100rel(true);
@ -114,6 +123,28 @@ namespace test
////Thread.Sleep(2000);
/*RPData rpdata = SMSEncoder.encodeSubmit(25, "+33160188661", "+33660188661", "salut");
if (rpdata != null)
{
uint pay_len = rpdata.getPayloadLength();
if (pay_len > 0)
{
byte[] pay = new byte[pay_len];
rpdata.getPayload(pay, (uint)pay.Length);
MessagingSession m = new MessagingSession(sipStack);
m.setToUri(String.Format("sip:+33160188661@{0}", REALM));
m.addHeader("Content-Type", "application/vnd.3gpp.sms");
m.addHeader("Transfer-Encoding", "binary");
m.send(pay, (uint)pay.Length);
m.Dispose();
}
rpdata.Dispose();
}
Console.ReadLine();*/
///* Send SUBSCRIBE(reg) */
//subSession = new SubscriptionSession(sipStack);
//subSession.addHeader("Event", "reg");

View File

@ -96,6 +96,9 @@
<Compile Include="..\RegistrationSession.cs">
<Link>RegistrationSession.cs</Link>
</Compile>
<Compile Include="..\RPData.cs">
<Link>RPData.cs</Link>
</Compile>
<Compile Include="..\SafeObject.cs">
<Link>SafeObject.cs</Link>
</Compile>
@ -114,6 +117,12 @@
<Compile Include="..\SipStack.cs">
<Link>SipStack.cs</Link>
</Compile>
<Compile Include="..\SipUri.cs">
<Link>SipUri.cs</Link>
</Compile>
<Compile Include="..\SMSEncoder.cs">
<Link>SMSEncoder.cs</Link>
</Compile>
<Compile Include="..\StackEvent.cs">
<Link>StackEvent.cs</Link>
</Compile>
@ -165,6 +174,9 @@
<Compile Include="..\tsip_subscribe_event_type_t.cs">
<Link>tsip_subscribe_event_type_t.cs</Link>
</Compile>
<Compile Include="..\twrap_rpdata_type_t.cs">
<Link>twrap_rpdata_type_t.cs</Link>
</Compile>
<Compile Include="..\XcapCallback.cs">
<Link>XcapCallback.cs</Link>
</Compile>

View File

@ -31,6 +31,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "test_xcap", "test_xcap\test
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyXCAP", "..\..\tinyXCAP\tinyXCAP.vcproj", "{570CF33D-E65F-448F-8AC2-F9AE2F23152F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinySMS", "..\..\tinySMS\tinySMS.vcproj", "{9A3A5AF3-2333-4477-B880-7F901F9D8972}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -471,6 +473,30 @@ Global
{570CF33D-E65F-448F-8AC2-F9AE2F23152F}.Static_Release|Win32.ActiveCfg = Release|Win32
{570CF33D-E65F-448F-8AC2-F9AE2F23152F}.Static_Release|Win32.Build.0 = Release|Win32
{570CF33D-E65F-448F-8AC2-F9AE2F23152F}.Static_Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Debug|Any CPU.ActiveCfg = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Debug|Win32.ActiveCfg = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Debug|Win32.Build.0 = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Release|Any CPU.ActiveCfg = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Release|Mixed Platforms.Build.0 = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Release|Win32.ActiveCfg = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Release|Win32.Build.0 = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Debug|Any CPU.ActiveCfg = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Debug|Mixed Platforms.Build.0 = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Debug|Win32.ActiveCfg = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Debug|Win32.Build.0 = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Release|Any CPU.ActiveCfg = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Release|Mixed Platforms.ActiveCfg = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Release|Mixed Platforms.Build.0 = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Release|Win32.ActiveCfg = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Release|Win32.Build.0 = Release|Win32
{9A3A5AF3-2333-4477-B880-7F901F9D8972}.Static_Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\_common;..\.;..\..\thirdparties\win32\include;..\..\tinySAK\src;..\..\tinyNET\src;..\..\tinyHTTP\include;..\..\tinySIP\include;..\..\tinyDAV\include;..\..\tinySDP\include;..\..\tinyMEDIA\include;..\..\tinyXCAP\include"
AdditionalIncludeDirectories="..\_common;..\.;..\..\thirdparties\win32\include;..\..\tinySAK\src;..\..\tinyNET\src;..\..\tinyHTTP\include;..\..\tinySIP\include;..\..\tinyDAV\include;..\..\tinySDP\include;..\..\tinyMEDIA\include;..\..\tinyXCAP\include;..\..\tinySMS\include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;TINYWRAP_EXPORTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@ -62,7 +62,7 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="$(OutDir)\tinySAK.lib $(OutDir)\tinySIP.lib $(OutDir)\tinyNET.lib $(OutDir)\tinyDAV.lib $(OutDir)\tinyMEDIA.lib $(OutDir)\tinyHTTP.lib $(OutDir)\tinyXCAP.lib"
AdditionalDependencies="$(OutDir)\tinySAK.lib $(OutDir)\tinySIP.lib $(OutDir)\tinyNET.lib $(OutDir)\tinyDAV.lib $(OutDir)\tinyMEDIA.lib $(OutDir)\tinyHTTP.lib $(OutDir)\tinyXCAP.lib $(OutDir)\tinySMS.lib"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
@ -213,6 +213,10 @@
RelativePath="..\_common\SipUri.cxx"
>
</File>
<File
RelativePath="..\_common\SMSEncoder.cxx"
>
</File>
<File
RelativePath=".\tinyWRAP_wrap.cxx"
>
@ -271,6 +275,10 @@
RelativePath="..\_common\SipUri.h"
>
</File>
<File
RelativePath="..\_common\SMSEncoder.h"
>
</File>
<File
RelativePath="..\_common\tinyWRAP_config.h"
>
@ -296,6 +304,10 @@
RelativePath="..\_common\SipStack.i"
>
</File>
<File
RelativePath="..\_common\SMS.i"
>
</File>
<File
RelativePath="..\_common\tinyWRAP.i"
>

View File

@ -214,6 +214,27 @@ class tinyWRAPPINVOKE {
[DllImport("tinyWRAP", EntryPoint="CSharp_SipUri_isValid__SWIG_1")]
public static extern bool SipUri_isValid__SWIG_1(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipUri_getScheme")]
public static extern string SipUri_getScheme(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipUri_getHost")]
public static extern string SipUri_getHost(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipUri_getPort")]
public static extern ushort SipUri_getPort(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipUri_getUserName")]
public static extern string SipUri_getUserName(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipUri_getPassword")]
public static extern string SipUri_getPassword(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipUri_getDisplayName")]
public static extern string SipUri_getDisplayName(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipUri_getParamValue")]
public static extern string SipUri_getParamValue(HandleRef jarg1, string jarg2);
[DllImport("tinyWRAP", EntryPoint="CSharp_new_SipMessage")]
public static extern IntPtr new_SipMessage();
@ -733,14 +754,20 @@ class tinyWRAPPINVOKE {
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setPassword")]
public static extern bool SipStack_setPassword(HandleRef jarg1, string jarg2);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setAMF")]
public static extern bool SipStack_setAMF(HandleRef jarg1, string jarg2);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setOperatorId")]
public static extern bool SipStack_setOperatorId(HandleRef jarg1, string jarg2);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setProxyCSCF")]
public static extern bool SipStack_setProxyCSCF(HandleRef jarg1, string jarg2, uint jarg3, string jarg4, string jarg5);
public static extern bool SipStack_setProxyCSCF(HandleRef jarg1, string jarg2, ushort jarg3, string jarg4, string jarg5);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setLocalIP")]
public static extern bool SipStack_setLocalIP(HandleRef jarg1, string jarg2);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setLocalPort")]
public static extern bool SipStack_setLocalPort(HandleRef jarg1, uint jarg2);
public static extern bool SipStack_setLocalPort(HandleRef jarg1, ushort jarg2);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setEarlyIMS")]
public static extern bool SipStack_setEarlyIMS(HandleRef jarg1, bool jarg2);
@ -757,11 +784,20 @@ class tinyWRAPPINVOKE {
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setAoR")]
public static extern bool SipStack_setAoR(HandleRef jarg1, string jarg2, int jarg3);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setSTUNServer")]
public static extern bool SipStack_setSTUNServer(HandleRef jarg1, string jarg2, ushort jarg3);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setSTUNCred")]
public static extern bool SipStack_setSTUNCred(HandleRef jarg1, string jarg2, string jarg3);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_dnsENUM")]
public static extern string SipStack_dnsENUM(HandleRef jarg1, string jarg2, string jarg3, string jarg4);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_dnsNaptrSrv")]
public static extern string SipStack_dnsNaptrSrv(HandleRef jarg1, string jarg2, string jarg3, out short jarg4);
public static extern string SipStack_dnsNaptrSrv(HandleRef jarg1, string jarg2, string jarg3, out ushort jarg4);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_dnsSrv")]
public static extern string SipStack_dnsSrv(HandleRef jarg1, string jarg2, out ushort jarg3);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_isValid")]
public static extern bool SipStack_isValid(HandleRef jarg1);
@ -937,6 +973,27 @@ class tinyWRAPPINVOKE {
[DllImport("tinyWRAP", EntryPoint="CSharp_XcapStack_stop")]
public static extern bool XcapStack_stop(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_new_RPData")]
public static extern IntPtr new_RPData();
[DllImport("tinyWRAP", EntryPoint="CSharp_delete_RPData")]
public static extern void delete_RPData(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_RPData_getType")]
public static extern int RPData_getType(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_RPData_getPayloadLength")]
public static extern uint RPData_getPayloadLength(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_RPData_getPayload")]
public static extern uint RPData_getPayload(HandleRef jarg1, byte[] jarg2, uint jarg3);
[DllImport("tinyWRAP", EntryPoint="CSharp_SMSEncoder_encodeSubmit")]
public static extern IntPtr SMSEncoder_encodeSubmit(int jarg1, string jarg2, string jarg3, string jarg4);
[DllImport("tinyWRAP", EntryPoint="CSharp_delete_SMSEncoder")]
public static extern void delete_SMSEncoder(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_DialogEventUpcast")]
public static extern IntPtr DialogEventUpcast(IntPtr objectRef);

View File

@ -350,6 +350,9 @@ namespace Swig {
#include "Xcap.h"
#include "SMSEncoder.h"
/* ---------------------------------------------------
* C++ director class methods
@ -1004,6 +1007,92 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipUri_isValid__SWIG_1(void * jarg1)
}
SWIGEXPORT char * SWIGSTDCALL CSharp_SipUri_getScheme(void * jarg1) {
char * jresult ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
arg1 = (SipUri *)jarg1;
result = (char *)(arg1)->getScheme();
jresult = SWIG_csharp_string_callback((const char *)result);
return jresult;
}
SWIGEXPORT char * SWIGSTDCALL CSharp_SipUri_getHost(void * jarg1) {
char * jresult ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
arg1 = (SipUri *)jarg1;
result = (char *)(arg1)->getHost();
jresult = SWIG_csharp_string_callback((const char *)result);
return jresult;
}
SWIGEXPORT unsigned short SWIGSTDCALL CSharp_SipUri_getPort(void * jarg1) {
unsigned short jresult ;
SipUri *arg1 = (SipUri *) 0 ;
unsigned short result;
arg1 = (SipUri *)jarg1;
result = (unsigned short)(arg1)->getPort();
jresult = result;
return jresult;
}
SWIGEXPORT char * SWIGSTDCALL CSharp_SipUri_getUserName(void * jarg1) {
char * jresult ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
arg1 = (SipUri *)jarg1;
result = (char *)(arg1)->getUserName();
jresult = SWIG_csharp_string_callback((const char *)result);
return jresult;
}
SWIGEXPORT char * SWIGSTDCALL CSharp_SipUri_getPassword(void * jarg1) {
char * jresult ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
arg1 = (SipUri *)jarg1;
result = (char *)(arg1)->getPassword();
jresult = SWIG_csharp_string_callback((const char *)result);
return jresult;
}
SWIGEXPORT char * SWIGSTDCALL CSharp_SipUri_getDisplayName(void * jarg1) {
char * jresult ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
arg1 = (SipUri *)jarg1;
result = (char *)(arg1)->getDisplayName();
jresult = SWIG_csharp_string_callback((const char *)result);
return jresult;
}
SWIGEXPORT char * SWIGSTDCALL CSharp_SipUri_getParamValue(void * jarg1, char * jarg2) {
char * jresult ;
SipUri *arg1 = (SipUri *) 0 ;
char *arg2 = (char *) 0 ;
char *result = 0 ;
arg1 = (SipUri *)jarg1;
arg2 = (char *)jarg2;
result = (char *)(arg1)->getParamValue((char const *)arg2);
jresult = SWIG_csharp_string_callback((const char *)result);
return jresult;
}
SWIGEXPORT void * SWIGSTDCALL CSharp_new_SipMessage() {
void * jresult ;
SipMessage *result = 0 ;
@ -3131,18 +3220,46 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setPassword(void * jarg1, ch
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setProxyCSCF(void * jarg1, char * jarg2, unsigned int jarg3, char * jarg4, char * jarg5) {
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setAMF(void * jarg1, char * jarg2) {
unsigned int jresult ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned int arg3 ;
bool result;
arg1 = (SipStack *)jarg1;
arg2 = (char *)jarg2;
result = (bool)(arg1)->setAMF((char const *)arg2);
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setOperatorId(void * jarg1, char * jarg2) {
unsigned int jresult ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
bool result;
arg1 = (SipStack *)jarg1;
arg2 = (char *)jarg2;
result = (bool)(arg1)->setOperatorId((char const *)arg2);
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setProxyCSCF(void * jarg1, char * jarg2, unsigned short jarg3, char * jarg4, char * jarg5) {
unsigned int jresult ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned short arg3 ;
char *arg4 = (char *) 0 ;
char *arg5 = (char *) 0 ;
bool result;
arg1 = (SipStack *)jarg1;
arg2 = (char *)jarg2;
arg3 = (unsigned int)jarg3;
arg3 = (unsigned short)jarg3;
arg4 = (char *)jarg4;
arg5 = (char *)jarg5;
result = (bool)(arg1)->setProxyCSCF((char const *)arg2,arg3,(char const *)arg4,(char const *)arg5);
@ -3165,14 +3282,14 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setLocalIP(void * jarg1, cha
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setLocalPort(void * jarg1, unsigned int jarg2) {
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setLocalPort(void * jarg1, unsigned short jarg2) {
unsigned int jresult ;
SipStack *arg1 = (SipStack *) 0 ;
unsigned int arg2 ;
unsigned short arg2 ;
bool result;
arg1 = (SipStack *)jarg1;
arg2 = (unsigned int)jarg2;
arg2 = (unsigned short)jarg2;
result = (bool)(arg1)->setLocalPort(arg2);
jresult = result;
return jresult;
@ -3253,6 +3370,38 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setAoR(void * jarg1, char *
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setSTUNServer(void * jarg1, char * jarg2, unsigned short jarg3) {
unsigned int jresult ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned short arg3 ;
bool result;
arg1 = (SipStack *)jarg1;
arg2 = (char *)jarg2;
arg3 = (unsigned short)jarg3;
result = (bool)(arg1)->setSTUNServer((char const *)arg2,arg3);
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setSTUNCred(void * jarg1, char * jarg2, char * jarg3) {
unsigned int jresult ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
bool result;
arg1 = (SipStack *)jarg1;
arg2 = (char *)jarg2;
arg3 = (char *)jarg3;
result = (bool)(arg1)->setSTUNCred((char const *)arg2,(char const *)arg3);
jresult = result;
return jresult;
}
SWIGEXPORT char * SWIGSTDCALL CSharp_SipStack_dnsENUM(void * jarg1, char * jarg2, char * jarg3, char * jarg4) {
char * jresult ;
SipStack *arg1 = (SipStack *) 0 ;
@ -3272,18 +3421,18 @@ SWIGEXPORT char * SWIGSTDCALL CSharp_SipStack_dnsENUM(void * jarg1, char * jarg2
}
SWIGEXPORT char * SWIGSTDCALL CSharp_SipStack_dnsNaptrSrv(void * jarg1, char * jarg2, char * jarg3, short * jarg4) {
SWIGEXPORT char * SWIGSTDCALL CSharp_SipStack_dnsNaptrSrv(void * jarg1, char * jarg2, char * jarg3, unsigned short * jarg4) {
char * jresult ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
short *arg4 = (short *) 0 ;
unsigned short *arg4 = (unsigned short *) 0 ;
char *result = 0 ;
arg1 = (SipStack *)jarg1;
arg2 = (char *)jarg2;
arg3 = (char *)jarg3;
arg4 = (short *)jarg4;
arg4 = (unsigned short *)jarg4;
result = (char *)(arg1)->dnsNaptrSrv((char const *)arg2,(char const *)arg3,arg4);
jresult = SWIG_csharp_string_callback((const char *)result);
delete [] result;
@ -3291,6 +3440,23 @@ SWIGEXPORT char * SWIGSTDCALL CSharp_SipStack_dnsNaptrSrv(void * jarg1, char * j
}
SWIGEXPORT char * SWIGSTDCALL CSharp_SipStack_dnsSrv(void * jarg1, char * jarg2, unsigned short * jarg3) {
char * jresult ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned short *arg3 = (unsigned short *) 0 ;
char *result = 0 ;
arg1 = (SipStack *)jarg1;
arg2 = (char *)jarg2;
arg3 = (unsigned short *)jarg3;
result = (char *)(arg1)->dnsSrv((char const *)arg2,arg3);
jresult = SWIG_csharp_string_callback((const char *)result);
delete [] result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_isValid(void * jarg1) {
unsigned int jresult ;
SipStack *arg1 = (SipStack *) 0 ;
@ -4001,6 +4167,90 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_XcapStack_stop(void * jarg1) {
}
SWIGEXPORT void * SWIGSTDCALL CSharp_new_RPData() {
void * jresult ;
RPData *result = 0 ;
result = (RPData *)new RPData();
jresult = (void *)result;
return jresult;
}
SWIGEXPORT void SWIGSTDCALL CSharp_delete_RPData(void * jarg1) {
RPData *arg1 = (RPData *) 0 ;
arg1 = (RPData *)jarg1;
delete arg1;
}
SWIGEXPORT int SWIGSTDCALL CSharp_RPData_getType(void * jarg1) {
int jresult ;
RPData *arg1 = (RPData *) 0 ;
twrap_rpdata_type_t result;
arg1 = (RPData *)jarg1;
result = (twrap_rpdata_type_t)(arg1)->getType();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_RPData_getPayloadLength(void * jarg1) {
unsigned int jresult ;
RPData *arg1 = (RPData *) 0 ;
unsigned int result;
arg1 = (RPData *)jarg1;
result = (unsigned int)(arg1)->getPayloadLength();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_RPData_getPayload(void * jarg1, void * jarg2, unsigned int jarg3) {
unsigned int jresult ;
RPData *arg1 = (RPData *) 0 ;
void *arg2 = (void *) 0 ;
unsigned int arg3 ;
unsigned int result;
arg1 = (RPData *)jarg1;
arg2 = jarg2;
arg3 = (unsigned int)jarg3;
result = (unsigned int)(arg1)->getPayload(arg2,arg3);
jresult = result;
return jresult;
}
SWIGEXPORT void * SWIGSTDCALL CSharp_SMSEncoder_encodeSubmit(int jarg1, char * jarg2, char * jarg3, char * jarg4) {
void * jresult ;
int arg1 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
char *arg4 = (char *) 0 ;
RPData *result = 0 ;
arg1 = (int)jarg1;
arg2 = (char *)jarg2;
arg3 = (char *)jarg3;
arg4 = (char *)jarg4;
result = (RPData *)SMSEncoder::encodeSubmit(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4);
jresult = (void *)result;
return jresult;
}
SWIGEXPORT void SWIGSTDCALL CSharp_delete_SMSEncoder(void * jarg1) {
SMSEncoder *arg1 = (SMSEncoder *) 0 ;
arg1 = (SMSEncoder *)jarg1;
delete arg1;
}
SWIGEXPORT SipEvent * SWIGSTDCALL CSharp_DialogEventUpcast(DialogEvent *objectRef) {
return (SipEvent *)objectRef;
}

View File

@ -14,6 +14,7 @@ public enum tsip_invite_event_type_t {
tsip_o_ect_ok,
tsip_o_ect_nok,
tsip_i_ect,
tsip_m_early_media,
tsip_m_local_hold_ok,
tsip_m_local_hold_nok,
tsip_m_local_resume_ok,

View File

@ -0,0 +1,16 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 1.3.39
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
public enum twrap_rpdata_type_t {
twrap_rpdata_type_sms_none,
twrap_rpdata_type_sms_submit,
twrap_rpdata_type_sms_deliver,
twrap_rpdata_type_sms_status_report,
twrap_rpdata_type_sms_command
}

View File

@ -0,0 +1,52 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 1.3.39
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
package org.doubango.tinyWRAP;
public class RPData {
private long swigCPtr;
protected boolean swigCMemOwn;
protected RPData(long cPtr, boolean cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = cPtr;
}
protected static long getCPtr(RPData obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
protected void finalize() {
delete();
}
public synchronized void delete() {
if(swigCPtr != 0 && swigCMemOwn) {
swigCMemOwn = false;
tinyWRAPJNI.delete_RPData(swigCPtr);
}
swigCPtr = 0;
}
public RPData() {
this(tinyWRAPJNI.new_RPData(), true);
}
public twrap_rpdata_type_t getType() {
return twrap_rpdata_type_t.swigToEnum(tinyWRAPJNI.RPData_getType(swigCPtr, this));
}
public long getPayloadLength() {
return tinyWRAPJNI.RPData_getPayloadLength(swigCPtr, this);
}
public long getPayload(java.nio.ByteBuffer output, long maxsize) {
return tinyWRAPJNI.RPData_getPayload(swigCPtr, this, output, maxsize);
}
}

View File

@ -0,0 +1,41 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 1.3.39
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
package org.doubango.tinyWRAP;
public class SMSEncoder {
private long swigCPtr;
protected boolean swigCMemOwn;
protected SMSEncoder(long cPtr, boolean cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = cPtr;
}
protected static long getCPtr(SMSEncoder obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
protected void finalize() {
delete();
}
public synchronized void delete() {
if(swigCPtr != 0 && swigCMemOwn) {
swigCMemOwn = false;
tinyWRAPJNI.delete_SMSEncoder(swigCPtr);
}
swigCPtr = 0;
}
public static RPData encodeSubmit(int mr, String smsc, String destination, String ascii) {
long cPtr = tinyWRAPJNI.SMSEncoder_encodeSubmit(mr, smsc, destination, ascii);
return (cPtr == 0) ? null : new RPData(cPtr, true);
}
}

View File

@ -61,7 +61,15 @@ public class SipStack extends SafeObject {
return tinyWRAPJNI.SipStack_setPassword(swigCPtr, this, password);
}
public boolean setProxyCSCF(String fqdn, long port, String transport, String ipversion) {
public boolean setAMF(String amf) {
return tinyWRAPJNI.SipStack_setAMF(swigCPtr, this, amf);
}
public boolean setOperatorId(String opid) {
return tinyWRAPJNI.SipStack_setOperatorId(swigCPtr, this, opid);
}
public boolean setProxyCSCF(String fqdn, int port, String transport, String ipversion) {
return tinyWRAPJNI.SipStack_setProxyCSCF(swigCPtr, this, fqdn, port, transport, ipversion);
}
@ -69,7 +77,7 @@ public class SipStack extends SafeObject {
return tinyWRAPJNI.SipStack_setLocalIP(swigCPtr, this, ip);
}
public boolean setLocalPort(long port) {
public boolean setLocalPort(int port) {
return tinyWRAPJNI.SipStack_setLocalPort(swigCPtr, this, port);
}
@ -93,14 +101,26 @@ public class SipStack extends SafeObject {
return tinyWRAPJNI.SipStack_setAoR(swigCPtr, this, ip, port);
}
public boolean setSTUNServer(String ip, int port) {
return tinyWRAPJNI.SipStack_setSTUNServer(swigCPtr, this, ip, port);
}
public boolean setSTUNCred(String login, String password) {
return tinyWRAPJNI.SipStack_setSTUNCred(swigCPtr, this, login, password);
}
public String dnsENUM(String service, String e164num, String domain) {
return tinyWRAPJNI.SipStack_dnsENUM(swigCPtr, this, service, e164num, domain);
}
public String dnsNaptrSrv(String domain, String service, short[] OUTPUT) {
public String dnsNaptrSrv(String domain, String service, int[] OUTPUT) {
return tinyWRAPJNI.SipStack_dnsNaptrSrv(swigCPtr, this, domain, service, OUTPUT);
}
public String dnsSrv(String service, int[] OUTPUT) {
return tinyWRAPJNI.SipStack_dnsSrv(swigCPtr, this, service, OUTPUT);
}
public boolean isValid() {
return tinyWRAPJNI.SipStack_isValid(swigCPtr, this);
}

View File

@ -45,4 +45,32 @@ public class SipUri {
return tinyWRAPJNI.SipUri_isValid__SWIG_1(swigCPtr, this);
}
public String getScheme() {
return tinyWRAPJNI.SipUri_getScheme(swigCPtr, this);
}
public String getHost() {
return tinyWRAPJNI.SipUri_getHost(swigCPtr, this);
}
public int getPort() {
return tinyWRAPJNI.SipUri_getPort(swigCPtr, this);
}
public String getUserName() {
return tinyWRAPJNI.SipUri_getUserName(swigCPtr, this);
}
public String getPassword() {
return tinyWRAPJNI.SipUri_getPassword(swigCPtr, this);
}
public String getDisplayName() {
return tinyWRAPJNI.SipUri_getDisplayName(swigCPtr, this);
}
public String getParamValue(String pname) {
return tinyWRAPJNI.SipUri_getParamValue(swigCPtr, this, pname);
}
}

View File

@ -0,0 +1,52 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 1.3.39
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
package org.doubango.tinyWRAP;
public class RPData {
private long swigCPtr;
protected boolean swigCMemOwn;
protected RPData(long cPtr, boolean cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = cPtr;
}
protected static long getCPtr(RPData obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
protected void finalize() {
delete();
}
public synchronized void delete() {
if(swigCPtr != 0 && swigCMemOwn) {
swigCMemOwn = false;
tinyWRAPJNI.delete_RPData(swigCPtr);
}
swigCPtr = 0;
}
public RPData() {
this(tinyWRAPJNI.new_RPData(), true);
}
public twrap_rpdata_type_t getType() {
return twrap_rpdata_type_t.swigToEnum(tinyWRAPJNI.RPData_getType(swigCPtr, this));
}
public long getPayloadLength() {
return tinyWRAPJNI.RPData_getPayloadLength(swigCPtr, this);
}
public long getPayload(java.nio.ByteBuffer output, long maxsize) {
return tinyWRAPJNI.RPData_getPayload(swigCPtr, this, output, maxsize);
}
}

View File

@ -0,0 +1,41 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 1.3.39
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
package org.doubango.tinyWRAP;
public class SMSEncoder {
private long swigCPtr;
protected boolean swigCMemOwn;
protected SMSEncoder(long cPtr, boolean cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = cPtr;
}
protected static long getCPtr(SMSEncoder obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
protected void finalize() {
delete();
}
public synchronized void delete() {
if(swigCPtr != 0 && swigCMemOwn) {
swigCMemOwn = false;
tinyWRAPJNI.delete_SMSEncoder(swigCPtr);
}
swigCPtr = 0;
}
public static RPData encodeSubmit(int mr, String smsc, String destination, String ascii) {
long cPtr = tinyWRAPJNI.SMSEncoder_encodeSubmit(mr, smsc, destination, ascii);
return (cPtr == 0) ? null : new RPData(cPtr, true);
}
}

View File

@ -61,7 +61,15 @@ public class SipStack extends SafeObject {
return tinyWRAPJNI.SipStack_setPassword(swigCPtr, this, password);
}
public boolean setProxyCSCF(String fqdn, long port, String transport, String ipversion) {
public boolean setAMF(String amf) {
return tinyWRAPJNI.SipStack_setAMF(swigCPtr, this, amf);
}
public boolean setOperatorId(String opid) {
return tinyWRAPJNI.SipStack_setOperatorId(swigCPtr, this, opid);
}
public boolean setProxyCSCF(String fqdn, int port, String transport, String ipversion) {
return tinyWRAPJNI.SipStack_setProxyCSCF(swigCPtr, this, fqdn, port, transport, ipversion);
}
@ -69,7 +77,7 @@ public class SipStack extends SafeObject {
return tinyWRAPJNI.SipStack_setLocalIP(swigCPtr, this, ip);
}
public boolean setLocalPort(long port) {
public boolean setLocalPort(int port) {
return tinyWRAPJNI.SipStack_setLocalPort(swigCPtr, this, port);
}
@ -93,14 +101,26 @@ public class SipStack extends SafeObject {
return tinyWRAPJNI.SipStack_setAoR(swigCPtr, this, ip, port);
}
public boolean setSTUNServer(String ip, int port) {
return tinyWRAPJNI.SipStack_setSTUNServer(swigCPtr, this, ip, port);
}
public boolean setSTUNCred(String login, String password) {
return tinyWRAPJNI.SipStack_setSTUNCred(swigCPtr, this, login, password);
}
public String dnsENUM(String service, String e164num, String domain) {
return tinyWRAPJNI.SipStack_dnsENUM(swigCPtr, this, service, e164num, domain);
}
public String dnsNaptrSrv(String domain, String service, short[] OUTPUT) {
public String dnsNaptrSrv(String domain, String service, int[] OUTPUT) {
return tinyWRAPJNI.SipStack_dnsNaptrSrv(swigCPtr, this, domain, service, OUTPUT);
}
public String dnsSrv(String service, int[] OUTPUT) {
return tinyWRAPJNI.SipStack_dnsSrv(swigCPtr, this, service, OUTPUT);
}
public boolean isValid() {
return tinyWRAPJNI.SipStack_isValid(swigCPtr, this);
}

View File

@ -45,4 +45,32 @@ public class SipUri {
return tinyWRAPJNI.SipUri_isValid__SWIG_1(swigCPtr, this);
}
public String getScheme() {
return tinyWRAPJNI.SipUri_getScheme(swigCPtr, this);
}
public String getHost() {
return tinyWRAPJNI.SipUri_getHost(swigCPtr, this);
}
public int getPort() {
return tinyWRAPJNI.SipUri_getPort(swigCPtr, this);
}
public String getUserName() {
return tinyWRAPJNI.SipUri_getUserName(swigCPtr, this);
}
public String getPassword() {
return tinyWRAPJNI.SipUri_getPassword(swigCPtr, this);
}
public String getDisplayName() {
return tinyWRAPJNI.SipUri_getDisplayName(swigCPtr, this);
}
public String getParamValue(String pname) {
return tinyWRAPJNI.SipUri_getParamValue(swigCPtr, this, pname);
}
}

View File

@ -1,8 +1,8 @@
#!/bin/bash
# Build tinyWRAP for Google Android Systems
#for project in tinySAK tinyNET tinyHTTP tinyXCAP tinyIPSec tinySMS tinySIGCOMP tinySDP tinyRTP tinyMEDIA tinyDAV tinySIP
for project in tinyMEDIA tinyDAV
for project in tinySAK tinyNET tinyHTTP tinyXCAP tinyIPSec tinySMS tinySIGCOMP tinySDP tinyRTP tinyMEDIA tinyDAV tinySIP
#for project in tinyNET
do
echo -e building "$project....\n"
make PROJECT=$project clean

View File

@ -1,7 +1,7 @@
APP := lib$(PROJECT).$(EXT)
CFLAGS := $(CFLAGS_LIB) -fno-rtti -fno-exceptions -I../../_common -I../../. -I../../../tinySAK/src -I../../../tinyNET/src -I../../../tinyHTTP/include -I../../../tinyXCAP/include \
-I../../../tinySDP/include -I../../../tinyMEDIA/include -I../../../tinyDAV/include -I../../../tinySIP/include
-I../../../tinySMS/include -I../../../tinySDP/include -I../../../tinyMEDIA/include -I../../../tinyDAV/include -I../../../tinySIP/include
# Because of the static build, you need all librarires
THIRDPARTIES_LIB := ../../../thirdparties/android/lib
@ -13,7 +13,7 @@ ILBC_LDFLAGS := -liLBC
LIBGSM_LDFLAGS := -lgsm
LDFLAGS := $(LDFLAGS_LIB) -L$(THIRDPARTIES_LIB) $(FFMPEG_LDFLAGS) $(SPEEX_LDFLAGS) $(OPENCORE_ARM_LDFLAGS) $(ILBC_LDFLAGS) $(LIBGSM_LDFLAGS)\
-ltinySAK -ltinyHTTP -ltinyXCAP -ltinyIPSec -ltinySIGCOMP -ltinyNET -ltinySDP -ltinyRTP -ltinyMEDIA -ltinyDAV -ltinySIP \
-ltinySAK -ltinyHTTP -ltinyXCAP -ltinyIPSec -ltinySIGCOMP -ltinySMS -ltinyNET -ltinySDP -ltinyRTP -ltinyMEDIA -ltinyDAV -ltinySIP \
-lm -lstdc++ -llog -lgcc
@ -31,6 +31,7 @@ OBJS = tinyWRAP_wrap.o\
../../_common/SipSession.o \
../../_common/SipStack.o \
../../_common/SipUri.o \
../../_common/SMSEncoder.o \
../../_common/Xcap.o

View File

@ -20,6 +20,9 @@ public enum tdav_codec_id_t {
tdav_codec_id_speex_nb(0x00000001 << 8),
tdav_codec_id_speex_wb(0x00000001 << 9),
tdav_codec_id_speex_uwb(0x00000001 << 10),
tdav_codec_id_bv16(0x00000001 << 11),
tdav_codec_id_bv32(0x00000001 << 12),
tdav_codec_id_evrc(0x00000001 << 13),
tdav_codec_id_h261(0x00010000 << 0),
tdav_codec_id_h263(0x00010000 << 1),
tdav_codec_id_h263p(0x00010000 << 2),

View File

@ -19,6 +19,13 @@ class tinyWRAPJNI {
public final static native void delete_SipUri(long jarg1);
public final static native boolean SipUri_isValid__SWIG_0(String jarg1);
public final static native boolean SipUri_isValid__SWIG_1(long jarg1, SipUri jarg1_);
public final static native String SipUri_getScheme(long jarg1, SipUri jarg1_);
public final static native String SipUri_getHost(long jarg1, SipUri jarg1_);
public final static native int SipUri_getPort(long jarg1, SipUri jarg1_);
public final static native String SipUri_getUserName(long jarg1, SipUri jarg1_);
public final static native String SipUri_getPassword(long jarg1, SipUri jarg1_);
public final static native String SipUri_getDisplayName(long jarg1, SipUri jarg1_);
public final static native String SipUri_getParamValue(long jarg1, SipUri jarg1_, String jarg2);
public final static native long new_SipMessage();
public final static native void delete_SipMessage(long jarg1);
public final static native String SipMessage_getSipHeaderValue__SWIG_0(long jarg1, SipMessage jarg1_, String jarg2, long jarg3);
@ -197,16 +204,21 @@ class tinyWRAPJNI {
public final static native boolean SipStack_setIMPI(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setIMPU(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setPassword(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setProxyCSCF(long jarg1, SipStack jarg1_, String jarg2, long jarg3, String jarg4, String jarg5);
public final static native boolean SipStack_setAMF(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setOperatorId(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setProxyCSCF(long jarg1, SipStack jarg1_, String jarg2, int jarg3, String jarg4, String jarg5);
public final static native boolean SipStack_setLocalIP(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setLocalPort(long jarg1, SipStack jarg1_, long jarg2);
public final static native boolean SipStack_setLocalPort(long jarg1, SipStack jarg1_, int jarg2);
public final static native boolean SipStack_setEarlyIMS(long jarg1, SipStack jarg1_, boolean jarg2);
public final static native boolean SipStack_addHeader(long jarg1, SipStack jarg1_, String jarg2, String jarg3);
public final static native boolean SipStack_removeHeader(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_addDnsServer(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setAoR(long jarg1, SipStack jarg1_, String jarg2, int jarg3);
public final static native boolean SipStack_setSTUNServer(long jarg1, SipStack jarg1_, String jarg2, int jarg3);
public final static native boolean SipStack_setSTUNCred(long jarg1, SipStack jarg1_, String jarg2, String jarg3);
public final static native String SipStack_dnsENUM(long jarg1, SipStack jarg1_, String jarg2, String jarg3, String jarg4);
public final static native String SipStack_dnsNaptrSrv(long jarg1, SipStack jarg1_, String jarg2, String jarg3, short[] jarg4);
public final static native String SipStack_dnsNaptrSrv(long jarg1, SipStack jarg1_, String jarg2, String jarg3, int[] jarg4);
public final static native String SipStack_dnsSrv(long jarg1, SipStack jarg1_, String jarg2, int[] jarg3);
public final static native boolean SipStack_isValid(long jarg1, SipStack jarg1_);
public final static native boolean SipStack_stop(long jarg1, SipStack jarg1_);
public final static native void SipStack_setCodecs(int jarg1);
@ -252,6 +264,13 @@ class tinyWRAPJNI {
public final static native boolean XcapStack_setTimeout(long jarg1, XcapStack jarg1_, long jarg2);
public final static native boolean XcapStack_getDocument(long jarg1, XcapStack jarg1_, String jarg2);
public final static native boolean XcapStack_stop(long jarg1, XcapStack jarg1_);
public final static native long new_RPData();
public final static native void delete_RPData(long jarg1);
public final static native int RPData_getType(long jarg1, RPData jarg1_);
public final static native long RPData_getPayloadLength(long jarg1, RPData jarg1_);
public final static native long RPData_getPayload(long jarg1, RPData jarg1_, java.nio.ByteBuffer jarg2, long jarg3);
public final static native long SMSEncoder_encodeSubmit(int jarg1, String jarg2, String jarg3, String jarg4);
public final static native void delete_SMSEncoder(long jarg1);
public final static native long SWIGDialogEventUpcast(long jarg1);
public final static native long SWIGStackEventUpcast(long jarg1);
public final static native long SWIGCallEventUpcast(long jarg1);

View File

@ -425,6 +425,9 @@ namespace Swig {
#include "Xcap.h"
#include "SMSEncoder.h"
/* ---------------------------------------------------
* C++ director class methods
@ -1550,6 +1553,118 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1isVal
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getScheme(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (char *)(arg1)->getScheme();
if(result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getHost(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (char *)(arg1)->getHost();
if(result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jint JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getPort(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jint jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
unsigned short result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (unsigned short)(arg1)->getPort();
jresult = (jint)result;
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getUserName(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (char *)(arg1)->getUserName();
if(result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getPassword(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (char *)(arg1)->getPassword();
if(result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getDisplayName(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (char *)(arg1)->getDisplayName();
if(result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getParamValue(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *arg2 = (char *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
result = (char *)(arg1)->getParamValue((char const *)arg2);
if(result) jresult = jenv->NewStringUTF((const char *)result);
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_new_1SipMessage(JNIEnv *jenv, jclass jcls) {
jlong jresult = 0 ;
SipMessage *result = 0 ;
@ -4363,11 +4478,55 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1set
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setProxyCSCF(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jlong jarg3, jstring jarg4, jstring jarg5) {
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setAMF(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned int arg3 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
result = (bool)(arg1)->setAMF((char const *)arg2);
jresult = (jboolean)result;
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setOperatorId(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
result = (bool)(arg1)->setOperatorId((char const *)arg2);
jresult = (jboolean)result;
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setProxyCSCF(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jint jarg3, jstring jarg4, jstring jarg5) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned short arg3 ;
char *arg4 = (char *) 0 ;
char *arg5 = (char *) 0 ;
bool result;
@ -4381,7 +4540,7 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1set
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
arg3 = (unsigned int)jarg3;
arg3 = (unsigned short)jarg3;
arg4 = 0;
if (jarg4) {
arg4 = (char *)jenv->GetStringUTFChars(jarg4, 0);
@ -4423,17 +4582,17 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1set
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setLocalPort(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) {
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setLocalPort(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
unsigned int arg2 ;
unsigned short arg2 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = (unsigned int)jarg2;
arg2 = (unsigned short)jarg2;
result = (bool)(arg1)->setLocalPort(arg2);
jresult = (jboolean)result;
return jresult;
@ -4554,6 +4713,59 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1set
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setSTUNServer(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jint jarg3) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned short arg3 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
arg3 = (unsigned short)jarg3;
result = (bool)(arg1)->setSTUNServer((char const *)arg2,arg3);
jresult = (jboolean)result;
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setSTUNCred(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
arg3 = 0;
if (jarg3) {
arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
if (!arg3) return 0;
}
result = (bool)(arg1)->setSTUNCred((char const *)arg2,(char const *)arg3);
jresult = (jboolean)result;
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsENUM(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jstring jarg4) {
jstring jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
@ -4591,13 +4803,13 @@ SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsE
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsNaptrSrv(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jshortArray jarg4) {
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsNaptrSrv(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jintArray jarg4) {
jstring jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
short *arg4 = (short *) 0 ;
short temp4 ;
unsigned short *arg4 = (unsigned short *) 0 ;
unsigned short temp4 ;
char *result = 0 ;
(void)jenv;
@ -4628,8 +4840,8 @@ SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsN
result = (char *)(arg1)->dnsNaptrSrv((char const *)arg2,(char const *)arg3,arg4);
if(result) jresult = jenv->NewStringUTF((const char *)result);
{
jshort jvalue = (jshort)temp4;
jenv->SetShortArrayRegion(jarg4, 0, 1, &jvalue);
jint jvalue = (jint)temp4;
jenv->SetIntArrayRegion(jarg4, 0, 1, &jvalue);
}
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
@ -4639,6 +4851,47 @@ SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsN
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsSrv(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jintArray jarg3) {
jstring jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned short *arg3 = (unsigned short *) 0 ;
unsigned short temp3 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
{
if (!jarg3) {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null");
return 0;
}
if (jenv->GetArrayLength(jarg3) == 0) {
SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element");
return 0;
}
arg3 = &temp3;
}
result = (char *)(arg1)->dnsSrv((char const *)arg2,arg3);
if(result) jresult = jenv->NewStringUTF((const char *)result);
{
jint jvalue = (jint)temp3;
jenv->SetIntArrayRegion(jarg3, 0, 1, &jvalue);
}
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
delete [] result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1isValid(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
@ -5484,6 +5737,124 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_XcapStack_1st
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_new_1RPData(JNIEnv *jenv, jclass jcls) {
jlong jresult = 0 ;
RPData *result = 0 ;
(void)jenv;
(void)jcls;
result = (RPData *)new RPData();
*(RPData **)&jresult = result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_delete_1RPData(JNIEnv *jenv, jclass jcls, jlong jarg1) {
RPData *arg1 = (RPData *) 0 ;
(void)jenv;
(void)jcls;
arg1 = *(RPData **)&jarg1;
delete arg1;
}
SWIGEXPORT jint JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_RPData_1getType(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jint jresult = 0 ;
RPData *arg1 = (RPData *) 0 ;
twrap_rpdata_type_t result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(RPData **)&jarg1;
result = (twrap_rpdata_type_t)(arg1)->getType();
jresult = (jint)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_RPData_1getPayloadLength(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
RPData *arg1 = (RPData *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(RPData **)&jarg1;
result = (unsigned int)(arg1)->getPayloadLength();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_RPData_1getPayload(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jbyteArray jarg2, jlong jarg3) {
jlong jresult = 0 ;
RPData *arg1 = (RPData *) 0 ;
void *arg2 = (void *) 0 ;
unsigned int arg3 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(RPData **)&jarg1;
arg2 = jenv->GetDirectBufferAddress(jarg2);
arg3 = (unsigned int)jarg3;
result = (unsigned int)(arg1)->getPayload(arg2,arg3);
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SMSEncoder_1encodeSubmit(JNIEnv *jenv, jclass jcls, jint jarg1, jstring jarg2, jstring jarg3, jstring jarg4) {
jlong jresult = 0 ;
int arg1 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
char *arg4 = (char *) 0 ;
RPData *result = 0 ;
(void)jenv;
(void)jcls;
arg1 = (int)jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
arg3 = 0;
if (jarg3) {
arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
if (!arg3) return 0;
}
arg4 = 0;
if (jarg4) {
arg4 = (char *)jenv->GetStringUTFChars(jarg4, 0);
if (!arg4) return 0;
}
result = (RPData *)SMSEncoder::encodeSubmit(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4);
*(RPData **)&jresult = result;
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
if (arg4) jenv->ReleaseStringUTFChars(jarg4, (const char *)arg4);
return jresult;
}
SWIGEXPORT void JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_delete_1SMSEncoder(JNIEnv *jenv, jclass jcls, jlong jarg1) {
SMSEncoder *arg1 = (SMSEncoder *) 0 ;
(void)jenv;
(void)jcls;
arg1 = *(SMSEncoder **)&jarg1;
delete arg1;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SWIGDialogEventUpcast(JNIEnv *jenv, jclass jcls, jlong jarg1) {
jlong baseptr = 0;
(void)jenv;

View File

@ -15,6 +15,7 @@ public enum tsip_invite_event_type_t {
tsip_o_ect_ok,
tsip_o_ect_nok,
tsip_i_ect,
tsip_m_early_media,
tsip_m_local_hold_ok,
tsip_m_local_hold_nok,
tsip_m_local_resume_ok,

View File

@ -0,0 +1,55 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 1.3.39
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
package org.doubango.tinyWRAP;
public enum twrap_rpdata_type_t {
twrap_rpdata_type_sms_none,
twrap_rpdata_type_sms_submit,
twrap_rpdata_type_sms_deliver,
twrap_rpdata_type_sms_status_report,
twrap_rpdata_type_sms_command;
public final int swigValue() {
return swigValue;
}
public static twrap_rpdata_type_t swigToEnum(int swigValue) {
twrap_rpdata_type_t[] swigValues = twrap_rpdata_type_t.class.getEnumConstants();
if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue)
return swigValues[swigValue];
for (twrap_rpdata_type_t swigEnum : swigValues)
if (swigEnum.swigValue == swigValue)
return swigEnum;
throw new IllegalArgumentException("No enum " + twrap_rpdata_type_t.class + " with value " + swigValue);
}
@SuppressWarnings("unused")
private twrap_rpdata_type_t() {
this.swigValue = SwigNext.next++;
}
@SuppressWarnings("unused")
private twrap_rpdata_type_t(int swigValue) {
this.swigValue = swigValue;
SwigNext.next = swigValue+1;
}
@SuppressWarnings("unused")
private twrap_rpdata_type_t(twrap_rpdata_type_t swigEnum) {
this.swigValue = swigEnum.swigValue;
SwigNext.next = this.swigValue+1;
}
private final int swigValue;
private static class SwigNext {
private static int next = 0;
}
}

View File

@ -20,6 +20,9 @@ public enum tdav_codec_id_t {
tdav_codec_id_speex_nb(0x00000001 << 8),
tdav_codec_id_speex_wb(0x00000001 << 9),
tdav_codec_id_speex_uwb(0x00000001 << 10),
tdav_codec_id_bv16(0x00000001 << 11),
tdav_codec_id_bv32(0x00000001 << 12),
tdav_codec_id_evrc(0x00000001 << 13),
tdav_codec_id_h261(0x00010000 << 0),
tdav_codec_id_h263(0x00010000 << 1),
tdav_codec_id_h263p(0x00010000 << 2),

View File

@ -19,6 +19,13 @@ class tinyWRAPJNI {
public final static native void delete_SipUri(long jarg1);
public final static native boolean SipUri_isValid__SWIG_0(String jarg1);
public final static native boolean SipUri_isValid__SWIG_1(long jarg1, SipUri jarg1_);
public final static native String SipUri_getScheme(long jarg1, SipUri jarg1_);
public final static native String SipUri_getHost(long jarg1, SipUri jarg1_);
public final static native int SipUri_getPort(long jarg1, SipUri jarg1_);
public final static native String SipUri_getUserName(long jarg1, SipUri jarg1_);
public final static native String SipUri_getPassword(long jarg1, SipUri jarg1_);
public final static native String SipUri_getDisplayName(long jarg1, SipUri jarg1_);
public final static native String SipUri_getParamValue(long jarg1, SipUri jarg1_, String jarg2);
public final static native long new_SipMessage();
public final static native void delete_SipMessage(long jarg1);
public final static native String SipMessage_getSipHeaderValue__SWIG_0(long jarg1, SipMessage jarg1_, String jarg2, long jarg3);
@ -197,16 +204,21 @@ class tinyWRAPJNI {
public final static native boolean SipStack_setIMPI(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setIMPU(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setPassword(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setProxyCSCF(long jarg1, SipStack jarg1_, String jarg2, long jarg3, String jarg4, String jarg5);
public final static native boolean SipStack_setAMF(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setOperatorId(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setProxyCSCF(long jarg1, SipStack jarg1_, String jarg2, int jarg3, String jarg4, String jarg5);
public final static native boolean SipStack_setLocalIP(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setLocalPort(long jarg1, SipStack jarg1_, long jarg2);
public final static native boolean SipStack_setLocalPort(long jarg1, SipStack jarg1_, int jarg2);
public final static native boolean SipStack_setEarlyIMS(long jarg1, SipStack jarg1_, boolean jarg2);
public final static native boolean SipStack_addHeader(long jarg1, SipStack jarg1_, String jarg2, String jarg3);
public final static native boolean SipStack_removeHeader(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_addDnsServer(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setAoR(long jarg1, SipStack jarg1_, String jarg2, int jarg3);
public final static native boolean SipStack_setSTUNServer(long jarg1, SipStack jarg1_, String jarg2, int jarg3);
public final static native boolean SipStack_setSTUNCred(long jarg1, SipStack jarg1_, String jarg2, String jarg3);
public final static native String SipStack_dnsENUM(long jarg1, SipStack jarg1_, String jarg2, String jarg3, String jarg4);
public final static native String SipStack_dnsNaptrSrv(long jarg1, SipStack jarg1_, String jarg2, String jarg3, short[] jarg4);
public final static native String SipStack_dnsNaptrSrv(long jarg1, SipStack jarg1_, String jarg2, String jarg3, int[] jarg4);
public final static native String SipStack_dnsSrv(long jarg1, SipStack jarg1_, String jarg2, int[] jarg3);
public final static native boolean SipStack_isValid(long jarg1, SipStack jarg1_);
public final static native boolean SipStack_stop(long jarg1, SipStack jarg1_);
public final static native void SipStack_setCodecs(int jarg1);
@ -252,6 +264,13 @@ class tinyWRAPJNI {
public final static native boolean XcapStack_setTimeout(long jarg1, XcapStack jarg1_, long jarg2);
public final static native boolean XcapStack_getDocument(long jarg1, XcapStack jarg1_, String jarg2);
public final static native boolean XcapStack_stop(long jarg1, XcapStack jarg1_);
public final static native long new_RPData();
public final static native void delete_RPData(long jarg1);
public final static native int RPData_getType(long jarg1, RPData jarg1_);
public final static native long RPData_getPayloadLength(long jarg1, RPData jarg1_);
public final static native long RPData_getPayload(long jarg1, RPData jarg1_, java.nio.ByteBuffer jarg2, long jarg3);
public final static native long SMSEncoder_encodeSubmit(int jarg1, String jarg2, String jarg3, String jarg4);
public final static native void delete_SMSEncoder(long jarg1);
public final static native long SWIGDialogEventUpcast(long jarg1);
public final static native long SWIGStackEventUpcast(long jarg1);
public final static native long SWIGCallEventUpcast(long jarg1);

View File

@ -425,6 +425,9 @@ namespace Swig {
#include "Xcap.h"
#include "SMSEncoder.h"
/* ---------------------------------------------------
* C++ director class methods
@ -1550,6 +1553,118 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1isVal
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getScheme(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (char *)(arg1)->getScheme();
if(result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getHost(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (char *)(arg1)->getHost();
if(result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jint JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getPort(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jint jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
unsigned short result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (unsigned short)(arg1)->getPort();
jresult = (jint)result;
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getUserName(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (char *)(arg1)->getUserName();
if(result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getPassword(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (char *)(arg1)->getPassword();
if(result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getDisplayName(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
result = (char *)(arg1)->getDisplayName();
if(result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipUri_1getParamValue(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
jstring jresult = 0 ;
SipUri *arg1 = (SipUri *) 0 ;
char *arg2 = (char *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipUri **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
result = (char *)(arg1)->getParamValue((char const *)arg2);
if(result) jresult = jenv->NewStringUTF((const char *)result);
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_new_1SipMessage(JNIEnv *jenv, jclass jcls) {
jlong jresult = 0 ;
SipMessage *result = 0 ;
@ -4363,11 +4478,55 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1set
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setProxyCSCF(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jlong jarg3, jstring jarg4, jstring jarg5) {
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setAMF(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned int arg3 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
result = (bool)(arg1)->setAMF((char const *)arg2);
jresult = (jboolean)result;
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setOperatorId(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
result = (bool)(arg1)->setOperatorId((char const *)arg2);
jresult = (jboolean)result;
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setProxyCSCF(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jint jarg3, jstring jarg4, jstring jarg5) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned short arg3 ;
char *arg4 = (char *) 0 ;
char *arg5 = (char *) 0 ;
bool result;
@ -4381,7 +4540,7 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1set
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
arg3 = (unsigned int)jarg3;
arg3 = (unsigned short)jarg3;
arg4 = 0;
if (jarg4) {
arg4 = (char *)jenv->GetStringUTFChars(jarg4, 0);
@ -4423,17 +4582,17 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1set
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setLocalPort(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) {
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setLocalPort(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
unsigned int arg2 ;
unsigned short arg2 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = (unsigned int)jarg2;
arg2 = (unsigned short)jarg2;
result = (bool)(arg1)->setLocalPort(arg2);
jresult = (jboolean)result;
return jresult;
@ -4554,6 +4713,59 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1set
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setSTUNServer(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jint jarg3) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned short arg3 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
arg3 = (unsigned short)jarg3;
result = (bool)(arg1)->setSTUNServer((char const *)arg2,arg3);
jresult = (jboolean)result;
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setSTUNCred(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
arg3 = 0;
if (jarg3) {
arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
if (!arg3) return 0;
}
result = (bool)(arg1)->setSTUNCred((char const *)arg2,(char const *)arg3);
jresult = (jboolean)result;
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsENUM(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jstring jarg4) {
jstring jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
@ -4591,13 +4803,13 @@ SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsE
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsNaptrSrv(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jshortArray jarg4) {
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsNaptrSrv(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jintArray jarg4) {
jstring jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
short *arg4 = (short *) 0 ;
short temp4 ;
unsigned short *arg4 = (unsigned short *) 0 ;
unsigned short temp4 ;
char *result = 0 ;
(void)jenv;
@ -4628,8 +4840,8 @@ SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsN
result = (char *)(arg1)->dnsNaptrSrv((char const *)arg2,(char const *)arg3,arg4);
if(result) jresult = jenv->NewStringUTF((const char *)result);
{
jshort jvalue = (jshort)temp4;
jenv->SetShortArrayRegion(jarg4, 0, 1, &jvalue);
jint jvalue = (jint)temp4;
jenv->SetIntArrayRegion(jarg4, 0, 1, &jvalue);
}
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
@ -4639,6 +4851,47 @@ SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsN
}
SWIGEXPORT jstring JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1dnsSrv(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jintArray jarg3) {
jstring jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
char *arg2 = (char *) 0 ;
unsigned short *arg3 = (unsigned short *) 0 ;
unsigned short temp3 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
{
if (!jarg3) {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null");
return 0;
}
if (jenv->GetArrayLength(jarg3) == 0) {
SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element");
return 0;
}
arg3 = &temp3;
}
result = (char *)(arg1)->dnsSrv((char const *)arg2,arg3);
if(result) jresult = jenv->NewStringUTF((const char *)result);
{
jint jvalue = (jint)temp3;
jenv->SetIntArrayRegion(jarg3, 0, 1, &jvalue);
}
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
delete [] result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1isValid(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
@ -5484,6 +5737,124 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_XcapStack_1st
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_new_1RPData(JNIEnv *jenv, jclass jcls) {
jlong jresult = 0 ;
RPData *result = 0 ;
(void)jenv;
(void)jcls;
result = (RPData *)new RPData();
*(RPData **)&jresult = result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_delete_1RPData(JNIEnv *jenv, jclass jcls, jlong jarg1) {
RPData *arg1 = (RPData *) 0 ;
(void)jenv;
(void)jcls;
arg1 = *(RPData **)&jarg1;
delete arg1;
}
SWIGEXPORT jint JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_RPData_1getType(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jint jresult = 0 ;
RPData *arg1 = (RPData *) 0 ;
twrap_rpdata_type_t result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(RPData **)&jarg1;
result = (twrap_rpdata_type_t)(arg1)->getType();
jresult = (jint)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_RPData_1getPayloadLength(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
RPData *arg1 = (RPData *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(RPData **)&jarg1;
result = (unsigned int)(arg1)->getPayloadLength();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_RPData_1getPayload(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jbyteArray jarg2, jlong jarg3) {
jlong jresult = 0 ;
RPData *arg1 = (RPData *) 0 ;
void *arg2 = (void *) 0 ;
unsigned int arg3 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(RPData **)&jarg1;
arg2 = jenv->GetDirectBufferAddress(jarg2);
arg3 = (unsigned int)jarg3;
result = (unsigned int)(arg1)->getPayload(arg2,arg3);
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SMSEncoder_1encodeSubmit(JNIEnv *jenv, jclass jcls, jint jarg1, jstring jarg2, jstring jarg3, jstring jarg4) {
jlong jresult = 0 ;
int arg1 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
char *arg4 = (char *) 0 ;
RPData *result = 0 ;
(void)jenv;
(void)jcls;
arg1 = (int)jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
if (!arg2) return 0;
}
arg3 = 0;
if (jarg3) {
arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
if (!arg3) return 0;
}
arg4 = 0;
if (jarg4) {
arg4 = (char *)jenv->GetStringUTFChars(jarg4, 0);
if (!arg4) return 0;
}
result = (RPData *)SMSEncoder::encodeSubmit(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4);
*(RPData **)&jresult = result;
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
if (arg4) jenv->ReleaseStringUTFChars(jarg4, (const char *)arg4);
return jresult;
}
SWIGEXPORT void JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_delete_1SMSEncoder(JNIEnv *jenv, jclass jcls, jlong jarg1) {
SMSEncoder *arg1 = (SMSEncoder *) 0 ;
(void)jenv;
(void)jcls;
arg1 = *(SMSEncoder **)&jarg1;
delete arg1;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SWIGDialogEventUpcast(JNIEnv *jenv, jclass jcls, jlong jarg1) {
jlong baseptr = 0;
(void)jenv;

View File

@ -15,6 +15,7 @@ public enum tsip_invite_event_type_t {
tsip_o_ect_ok,
tsip_o_ect_nok,
tsip_i_ect,
tsip_m_early_media,
tsip_m_local_hold_ok,
tsip_m_local_hold_nok,
tsip_m_local_resume_ok,

View File

@ -0,0 +1,55 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 1.3.39
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
package org.doubango.tinyWRAP;
public enum twrap_rpdata_type_t {
twrap_rpdata_type_sms_none,
twrap_rpdata_type_sms_submit,
twrap_rpdata_type_sms_deliver,
twrap_rpdata_type_sms_status_report,
twrap_rpdata_type_sms_command;
public final int swigValue() {
return swigValue;
}
public static twrap_rpdata_type_t swigToEnum(int swigValue) {
twrap_rpdata_type_t[] swigValues = twrap_rpdata_type_t.class.getEnumConstants();
if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue)
return swigValues[swigValue];
for (twrap_rpdata_type_t swigEnum : swigValues)
if (swigEnum.swigValue == swigValue)
return swigEnum;
throw new IllegalArgumentException("No enum " + twrap_rpdata_type_t.class + " with value " + swigValue);
}
@SuppressWarnings("unused")
private twrap_rpdata_type_t() {
this.swigValue = SwigNext.next++;
}
@SuppressWarnings("unused")
private twrap_rpdata_type_t(int swigValue) {
this.swigValue = swigValue;
SwigNext.next = swigValue+1;
}
@SuppressWarnings("unused")
private twrap_rpdata_type_t(twrap_rpdata_type_t swigEnum) {
this.swigValue = swigEnum.swigValue;
SwigNext.next = this.swigValue+1;
}
private final int swigValue;
private static class SwigNext {
private static int next = 0;
}
}

View File

@ -116,6 +116,13 @@ sub DESTROY {
}
*isValid = *tinyWRAPc::SipUri_isValid;
*getScheme = *tinyWRAPc::SipUri_getScheme;
*getHost = *tinyWRAPc::SipUri_getHost;
*getPort = *tinyWRAPc::SipUri_getPort;
*getUserName = *tinyWRAPc::SipUri_getUserName;
*getPassword = *tinyWRAPc::SipUri_getPassword;
*getDisplayName = *tinyWRAPc::SipUri_getDisplayName;
*getParamValue = *tinyWRAPc::SipUri_getParamValue;
sub DISOWN {
my $self = shift;
my $ptr = tied(%$self);
@ -1081,6 +1088,8 @@ sub DESTROY {
*setIMPI = *tinyWRAPc::SipStack_setIMPI;
*setIMPU = *tinyWRAPc::SipStack_setIMPU;
*setPassword = *tinyWRAPc::SipStack_setPassword;
*setAMF = *tinyWRAPc::SipStack_setAMF;
*setOperatorId = *tinyWRAPc::SipStack_setOperatorId;
*setProxyCSCF = *tinyWRAPc::SipStack_setProxyCSCF;
*setLocalIP = *tinyWRAPc::SipStack_setLocalIP;
*setLocalPort = *tinyWRAPc::SipStack_setLocalPort;
@ -1089,8 +1098,11 @@ sub DESTROY {
*removeHeader = *tinyWRAPc::SipStack_removeHeader;
*addDnsServer = *tinyWRAPc::SipStack_addDnsServer;
*setAoR = *tinyWRAPc::SipStack_setAoR;
*setSTUNServer = *tinyWRAPc::SipStack_setSTUNServer;
*setSTUNCred = *tinyWRAPc::SipStack_setSTUNCred;
*dnsENUM = *tinyWRAPc::SipStack_dnsENUM;
*dnsNaptrSrv = *tinyWRAPc::SipStack_dnsNaptrSrv;
*dnsSrv = *tinyWRAPc::SipStack_dnsSrv;
*isValid = *tinyWRAPc::SipStack_isValid;
*stop = *tinyWRAPc::SipStack_stop;
*setCodecs = *tinyWRAPc::SipStack_setCodecs;
@ -1314,6 +1326,78 @@ sub ACQUIRE {
}
############# Class : tinyWRAP::RPData ##############
package tinyWRAP::RPData;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( tinyWRAP );
%OWNER = ();
%ITERATORS = ();
sub new {
my $pkg = shift;
my $self = tinyWRAPc::new_RPData(@_);
bless $self, $pkg if defined($self);
}
sub DESTROY {
return unless $_[0]->isa('HASH');
my $self = tied(%{$_[0]});
return unless defined $self;
delete $ITERATORS{$self};
if (exists $OWNER{$self}) {
tinyWRAPc::delete_RPData($self);
delete $OWNER{$self};
}
}
*getType = *tinyWRAPc::RPData_getType;
*getPayloadLength = *tinyWRAPc::RPData_getPayloadLength;
*getPayload = *tinyWRAPc::RPData_getPayload;
sub DISOWN {
my $self = shift;
my $ptr = tied(%$self);
delete $OWNER{$ptr};
}
sub ACQUIRE {
my $self = shift;
my $ptr = tied(%$self);
$OWNER{$ptr} = 1;
}
############# Class : tinyWRAP::SMSEncoder ##############
package tinyWRAP::SMSEncoder;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( tinyWRAP );
%OWNER = ();
%ITERATORS = ();
*encodeSubmit = *tinyWRAPc::SMSEncoder_encodeSubmit;
sub DESTROY {
return unless $_[0]->isa('HASH');
my $self = tied(%{$_[0]});
return unless defined $self;
delete $ITERATORS{$self};
if (exists $OWNER{$self}) {
tinyWRAPc::delete_SMSEncoder($self);
delete $OWNER{$self};
}
}
sub DISOWN {
my $self = shift;
my $ptr = tied(%$self);
delete $OWNER{$ptr};
}
sub ACQUIRE {
my $self = shift;
my $ptr = tied(%$self);
$OWNER{$ptr} = 1;
}
# ------- VARIABLE STUBS --------
package tinyWRAP;
@ -1363,6 +1447,7 @@ package tinyWRAP;
*tsip_o_ect_ok = *tinyWRAPc::tsip_o_ect_ok;
*tsip_o_ect_nok = *tinyWRAPc::tsip_o_ect_nok;
*tsip_i_ect = *tinyWRAPc::tsip_i_ect;
*tsip_m_early_media = *tinyWRAPc::tsip_m_early_media;
*tsip_m_local_hold_ok = *tinyWRAPc::tsip_m_local_hold_ok;
*tsip_m_local_hold_nok = *tinyWRAPc::tsip_m_local_hold_nok;
*tsip_m_local_resume_ok = *tinyWRAPc::tsip_m_local_resume_ok;
@ -1393,6 +1478,9 @@ package tinyWRAP;
*tdav_codec_id_speex_nb = *tinyWRAPc::tdav_codec_id_speex_nb;
*tdav_codec_id_speex_wb = *tinyWRAPc::tdav_codec_id_speex_wb;
*tdav_codec_id_speex_uwb = *tinyWRAPc::tdav_codec_id_speex_uwb;
*tdav_codec_id_bv16 = *tinyWRAPc::tdav_codec_id_bv16;
*tdav_codec_id_bv32 = *tinyWRAPc::tdav_codec_id_bv32;
*tdav_codec_id_evrc = *tinyWRAPc::tdav_codec_id_evrc;
*tdav_codec_id_h261 = *tinyWRAPc::tdav_codec_id_h261;
*tdav_codec_id_h263 = *tinyWRAPc::tdav_codec_id_h263;
*tdav_codec_id_h263p = *tinyWRAPc::tdav_codec_id_h263p;
@ -1405,4 +1493,9 @@ package tinyWRAP;
*thttp_event_auth_failed = *tinyWRAPc::thttp_event_auth_failed;
*thttp_event_closed = *tinyWRAPc::thttp_event_closed;
*thttp_event_transport_error = *tinyWRAPc::thttp_event_transport_error;
*twrap_rpdata_type_sms_none = *tinyWRAPc::twrap_rpdata_type_sms_none;
*twrap_rpdata_type_sms_submit = *tinyWRAPc::twrap_rpdata_type_sms_submit;
*twrap_rpdata_type_sms_deliver = *tinyWRAPc::twrap_rpdata_type_sms_deliver;
*twrap_rpdata_type_sms_status_report = *tinyWRAPc::twrap_rpdata_type_sms_status_report;
*twrap_rpdata_type_sms_command = *tinyWRAPc::twrap_rpdata_type_sms_command;
1;

File diff suppressed because it is too large Load Diff

View File

@ -99,6 +99,13 @@ class SipUri(_object):
__swig_destroy__ = _tinyWRAP.delete_SipUri
__del__ = lambda self : None;
def isValid(self, *args): return _tinyWRAP.SipUri_isValid(self, *args)
def getScheme(self): return _tinyWRAP.SipUri_getScheme(self)
def getHost(self): return _tinyWRAP.SipUri_getHost(self)
def getPort(self): return _tinyWRAP.SipUri_getPort(self)
def getUserName(self): return _tinyWRAP.SipUri_getUserName(self)
def getPassword(self): return _tinyWRAP.SipUri_getPassword(self)
def getDisplayName(self): return _tinyWRAP.SipUri_getDisplayName(self)
def getParamValue(self, *args): return _tinyWRAP.SipUri_getParamValue(self, *args)
SipUri_swigregister = _tinyWRAP.SipUri_swigregister
SipUri_swigregister(SipUri)
@ -634,6 +641,8 @@ class SipStack(SafeObject):
def setIMPI(self, *args): return _tinyWRAP.SipStack_setIMPI(self, *args)
def setIMPU(self, *args): return _tinyWRAP.SipStack_setIMPU(self, *args)
def setPassword(self, *args): return _tinyWRAP.SipStack_setPassword(self, *args)
def setAMF(self, *args): return _tinyWRAP.SipStack_setAMF(self, *args)
def setOperatorId(self, *args): return _tinyWRAP.SipStack_setOperatorId(self, *args)
def setProxyCSCF(self, *args): return _tinyWRAP.SipStack_setProxyCSCF(self, *args)
def setLocalIP(self, *args): return _tinyWRAP.SipStack_setLocalIP(self, *args)
def setLocalPort(self, *args): return _tinyWRAP.SipStack_setLocalPort(self, *args)
@ -642,8 +651,11 @@ class SipStack(SafeObject):
def removeHeader(self, *args): return _tinyWRAP.SipStack_removeHeader(self, *args)
def addDnsServer(self, *args): return _tinyWRAP.SipStack_addDnsServer(self, *args)
def setAoR(self, *args): return _tinyWRAP.SipStack_setAoR(self, *args)
def setSTUNServer(self, *args): return _tinyWRAP.SipStack_setSTUNServer(self, *args)
def setSTUNCred(self, *args): return _tinyWRAP.SipStack_setSTUNCred(self, *args)
def dnsENUM(self, *args): return _tinyWRAP.SipStack_dnsENUM(self, *args)
def dnsNaptrSrv(self, *args): return _tinyWRAP.SipStack_dnsNaptrSrv(self, *args)
def dnsSrv(self, *args): return _tinyWRAP.SipStack_dnsSrv(self, *args)
def isValid(self): return _tinyWRAP.SipStack_isValid(self)
def stop(self): return _tinyWRAP.SipStack_stop(self)
__swig_getmethods__["setCodecs"] = lambda x: _tinyWRAP.SipStack_setCodecs
@ -706,6 +718,7 @@ tsip_ao_request = _tinyWRAP.tsip_ao_request
tsip_o_ect_ok = _tinyWRAP.tsip_o_ect_ok
tsip_o_ect_nok = _tinyWRAP.tsip_o_ect_nok
tsip_i_ect = _tinyWRAP.tsip_i_ect
tsip_m_early_media = _tinyWRAP.tsip_m_early_media
tsip_m_local_hold_ok = _tinyWRAP.tsip_m_local_hold_ok
tsip_m_local_hold_nok = _tinyWRAP.tsip_m_local_hold_nok
tsip_m_local_resume_ok = _tinyWRAP.tsip_m_local_resume_ok
@ -736,6 +749,9 @@ tdav_codec_id_ilbc = _tinyWRAP.tdav_codec_id_ilbc
tdav_codec_id_speex_nb = _tinyWRAP.tdav_codec_id_speex_nb
tdav_codec_id_speex_wb = _tinyWRAP.tdav_codec_id_speex_wb
tdav_codec_id_speex_uwb = _tinyWRAP.tdav_codec_id_speex_uwb
tdav_codec_id_bv16 = _tinyWRAP.tdav_codec_id_bv16
tdav_codec_id_bv32 = _tinyWRAP.tdav_codec_id_bv32
tdav_codec_id_evrc = _tinyWRAP.tdav_codec_id_evrc
tdav_codec_id_h261 = _tinyWRAP.tdav_codec_id_h261
tdav_codec_id_h263 = _tinyWRAP.tdav_codec_id_h263
tdav_codec_id_h263p = _tinyWRAP.tdav_codec_id_h263p
@ -855,5 +871,46 @@ thttp_event_message = _tinyWRAP.thttp_event_message
thttp_event_auth_failed = _tinyWRAP.thttp_event_auth_failed
thttp_event_closed = _tinyWRAP.thttp_event_closed
thttp_event_transport_error = _tinyWRAP.thttp_event_transport_error
twrap_rpdata_type_sms_none = _tinyWRAP.twrap_rpdata_type_sms_none
twrap_rpdata_type_sms_submit = _tinyWRAP.twrap_rpdata_type_sms_submit
twrap_rpdata_type_sms_deliver = _tinyWRAP.twrap_rpdata_type_sms_deliver
twrap_rpdata_type_sms_status_report = _tinyWRAP.twrap_rpdata_type_sms_status_report
twrap_rpdata_type_sms_command = _tinyWRAP.twrap_rpdata_type_sms_command
class RPData(_object):
__swig_setmethods__ = {}
__setattr__ = lambda self, name, value: _swig_setattr(self, RPData, name, value)
__swig_getmethods__ = {}
__getattr__ = lambda self, name: _swig_getattr(self, RPData, name)
__repr__ = _swig_repr
def __init__(self):
this = _tinyWRAP.new_RPData()
try: self.this.append(this)
except: self.this = this
__swig_destroy__ = _tinyWRAP.delete_RPData
__del__ = lambda self : None;
def getType(self): return _tinyWRAP.RPData_getType(self)
def getPayloadLength(self): return _tinyWRAP.RPData_getPayloadLength(self)
def getPayload(self, *args): return _tinyWRAP.RPData_getPayload(self, *args)
RPData_swigregister = _tinyWRAP.RPData_swigregister
RPData_swigregister(RPData)
class SMSEncoder(_object):
__swig_setmethods__ = {}
__setattr__ = lambda self, name, value: _swig_setattr(self, SMSEncoder, name, value)
__swig_getmethods__ = {}
__getattr__ = lambda self, name: _swig_getattr(self, SMSEncoder, name)
def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
__repr__ = _swig_repr
__swig_getmethods__["encodeSubmit"] = lambda x: _tinyWRAP.SMSEncoder_encodeSubmit
if _newclass:encodeSubmit = staticmethod(_tinyWRAP.SMSEncoder_encodeSubmit)
__swig_destroy__ = _tinyWRAP.delete_SMSEncoder
__del__ = lambda self : None;
SMSEncoder_swigregister = _tinyWRAP.SMSEncoder_swigregister
SMSEncoder_swigregister(SMSEncoder)
def SMSEncoder_encodeSubmit(*args):
return _tinyWRAP.SMSEncoder_encodeSubmit(*args)
SMSEncoder_encodeSubmit = _tinyWRAP.SMSEncoder_encodeSubmit

File diff suppressed because it is too large Load Diff

View File

@ -12,18 +12,19 @@ SPEEX_LDFLAGS := -lspeexdsp -lspeex
OPENCORE_ARM_CFLAGS := -DHAVE_OPENCORE_AMR=1
OPENCORE_ARM_LDFLAGS := -lopencore-amrnb
ILBC_CFLAGS := -DHAVE_ILBC=1
ILBC_CFLAGS := -DHAVE_ILBC=0
ILBC_LDFLAGS := -liLBC
LIBGSM_CFLAGS := -DHAVE_LIBGSM=1
LIBGSM_LDFLAGS := -lgsm
BV16_CFLAGS := -DHAVE_BV16=1 -I$(THIRDPARTIES_INC)/BroadVoice16/bv16 -I$(THIRDPARTIES_INC)/BroadVoice16/bvcommon
BV16_CFLAGS := -DHAVE_BV16=0 -I$(THIRDPARTIES_INC)/BroadVoice16/bv16 -I$(THIRDPARTIES_INC)/BroadVoice16/bvcommon
BV16_LDFLAGS := -lbv16
CFLAGS := $(CFLAGS_LIB) -I$(THIRDPARTIES_INC) $(ILBC_CFLAGS) $(LIBGSM_CFLAGS) \
$(FFMPEG_CFLAGS) $(SPEEX_CFLAGS) $(OPENCORE_ARM_CFLAGS) $(BV16_CFLAGS) \
-I../tinySAK/src -I../tinyNET/src -I../tinySDP/include -I../tinyRTP/include -I../tinyMEDIA/include -I./include
-I../tinySAK/src -I../tinyNET/src -I../tinySDP/include -I../tinyRTP/include -I../tinyMEDIA/include -I./include \
-DJB_HISTORY_SIZE=300
LDFLAGS := $(LDFLAGS_LIB) -L$(THIRDPARTIES_LIB)\
$(FFMPEG_LDFLAGS) $(SPEEX_LDFLAGS) $(OPENCORE_ARM_LDFLAGS) $(ILBC_LDFLAGS) $(LIBGSM_LDFLAGS) $(BV16_LDFLAGS)\

View File

@ -54,11 +54,10 @@ TDAV_BEGIN_DECLS
// configuration constants
/* Number of historical timestamps to use in calculating jitter and jitterbuffer size */
#if defined(_WIN32_WCE) || ANDROID
# define JB_HISTORY_SIZE 200
#else
#ifndef JB_HISTORY_SIZE
# define JB_HISTORY_SIZE 500
#endif
/* minimum jitterbuffer size, disabled if 0 */
#define JB_MIN_SIZE 0
/* maximum jitterbuffer size, disabled if 0 */

View File

@ -69,6 +69,9 @@ typedef struct tdav_session_audio_s
char* local_ip;
//uint16_t local_port;
/* NAT Traversal context */
tnet_nat_context_handle_t* natt_ctx;
char* remote_ip;
uint16_t remote_port;

View File

@ -47,11 +47,13 @@ typedef struct tdav_codec_bv16_s
struct {
void *state;
void *bs;
void *x;
} encoder;
struct {
void *state;
void *bs;
void *x;
} decoder;
}
tdav_codec_bv16_t;

View File

@ -56,6 +56,9 @@ typedef struct tdav_session_video_s
char* remote_ip;
uint16_t remote_port;
/* NAT Traversal context */
tnet_nat_context_handle_t* natt_ctx;
tsk_bool_t rtcp_enabled;
struct trtp_manager_s* rtp_manager;

View File

@ -211,6 +211,12 @@ int tmedia_session_audio_set(tmedia_session_t* self, const tmedia_param_t* param
audio->useIPv6 = tsk_striequals(param->value, "ipv6");
}
}
else if(param->value_type == tmedia_pvt_pobject){
if(tsk_striequals(param->key, "natt-ctx")){
TSK_OBJECT_SAFE_FREE(audio->natt_ctx);
audio->natt_ctx = tsk_object_ref(param->value);
}
}
return ret;
}
@ -230,6 +236,9 @@ int tdav_session_audio_prepare(tmedia_session_t* self)
ret = trtp_manager_set_rtp_callback(audio->rtp_manager, tdav_session_audio_rtp_cb, audio);
ret = trtp_manager_prepare(audio->rtp_manager);
if(audio->natt_ctx){
ret = trtp_manager_set_natt_ctx(audio->rtp_manager, audio->natt_ctx);
}
}
}
@ -511,7 +520,13 @@ const tsdp_header_M_t* tdav_session_audio_get_lo(tmedia_session_t* self)
changed = (self->ro_changed || !self->M.lo);
if(!self->M.lo){
if((self->M.lo = tsdp_header_M_create(self->plugin->media, audio->rtp_manager->transport->master->port, "RTP/AVP"))){
if((self->M.lo = tsdp_header_M_create(self->plugin->media, audio->rtp_manager->rtp.public_port, "RTP/AVP"))){
/* If NATT is active, do not rely on the global IP address Connection line */
if(audio->natt_ctx){
tsdp_header_M_add_headers(self->M.lo,
TSDP_HEADER_C_VA_ARGS("IN", audio->useIPv6 ? "IP6" : "IP4", audio->rtp_manager->rtp.public_ip),
tsk_null);
}
/* 3GPP TS 24.229 - 6.1.1 General
In order to support accurate bandwidth calculations, the UE may include the "a=ptime" attribute for all "audio" media
lines as described in RFC 4566 [39]. If a UE receives an "audio" media line with "a=ptime" specified, the UE should
@ -755,6 +770,9 @@ static tsk_object_t* tdav_session_audio_dtor(tsk_object_t * self)
TSK_FREE(session->encoder.buffer);
TSK_FREE(session->decoder.buffer);
/* NAT Traversal context */
TSK_OBJECT_SAFE_FREE(session->natt_ctx);
tsk_safeobj_deinit(session);
/* deinit base */

View File

@ -49,25 +49,41 @@
/* RFC 4298 - 3.1. BroadVoice16 Bit Stream Definition */
#define TDAV_BV16_FRAME_SIZE 10
#define FRSZ_IN_U8 (FRSZ*2)
/* ============ BV16 Plugin interface ================= */
#define tdav_codec_bv16_fmtp_get tsk_null
#define tdav_codec_bv16_fmtp_set tsk_null
static int sizestate = sizeof(struct BV16_Encoder_State);
static int sizebitstream = sizeof(struct BV16_Bit_Stream);
int tdav_codec_bv16_open(tmedia_codec_t* self)
{
tdav_codec_bv16_t* bv16 = (tdav_codec_bv16_t*)self;
if(!bv16->encoder.state){
bv16->encoder.state = allocWord16(0, sizeof(struct BV16_Encoder_State)/2-1);
bv16->encoder.state = allocWord16(0, sizestate/2-1);
Reset_BV16_Encoder((struct BV16_Encoder_State*)bv16->encoder.state);
}
if(!bv16->encoder.bs){
bv16->encoder.bs = allocWord16(0, sizebitstream/2-1);
}
if(!bv16->encoder.x){
bv16->encoder.x = allocWord16(0, FRSZ-1);
}
if(!bv16->decoder.state){
bv16->decoder.state = allocWord16(0, sizeof(struct BV16_Decoder_State)/2-1);
bv16->decoder.state = allocWord16(0, sizestate/2-1);
Reset_BV16_Decoder((struct BV16_Decoder_State*)bv16->decoder.state);
}
if(!bv16->decoder.bs){
bv16->decoder.bs = allocWord16(0, sizebitstream/2-1);
}
if(!bv16->decoder.x){
bv16->decoder.x = allocWord16(0, FRSZ-1);
}
return 0;
}
@ -76,6 +92,33 @@ int tdav_codec_bv16_close(tmedia_codec_t* self)
{
tdav_codec_bv16_t* bv16 = (tdav_codec_bv16_t*)self;
if(bv16->encoder.state){
deallocWord16(bv16->encoder.state, 0, sizestate/2-1);
bv16->encoder.state = tsk_null;
}
if(bv16->encoder.bs){
deallocWord16(bv16->encoder.bs, 0, sizebitstream/2-1);
bv16->encoder.bs = tsk_null;
}
if(bv16->encoder.x){
deallocWord16(bv16->encoder.x, 0, FRSZ-1);
bv16->encoder.x = tsk_null;
}
if(bv16->decoder.state){
deallocWord16(bv16->decoder.state, 0, sizestate/2-1);
bv16->decoder.state = tsk_null;
}
if(bv16->encoder.bs){
deallocWord16(bv16->decoder.bs, 0, sizebitstream/2-1);
bv16->decoder.bs = tsk_null;
}
if(bv16->decoder.x){
deallocWord16(bv16->decoder.x, 0, FRSZ-1);
bv16->decoder.x = tsk_null;
}
return 0;
}
@ -95,16 +138,36 @@ tsk_size_t tdav_codec_bv16_encode(tmedia_codec_t* self, const void* in_data, tsk
tsk_size_t tdav_codec_bv16_decode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size, const tsk_object_t* proto_hdr)
{
//tsk_size_t out_size;
//int ret;
tsk_size_t out_size = 0;
int i;
tdav_codec_bv16_t* bv16 = (tdav_codec_bv16_t*)self;
uint8_t mama[600];
if(!self || !in_data || !in_size || !out_data || (in_size % TDAV_BV16_FRAME_SIZE)){
TSK_DEBUG_ERROR("Invalid parameter");
return 0;
}
return 0;
for(i=0; i<(int)in_size; i+=TDAV_BV16_FRAME_SIZE){
BV16_BitUnPack(mama, (struct BV16_Bit_Stream*)bv16->decoder.bs);
//BV16_BitUnPack(&((UWord8 *)in_data)[i], (struct BV16_Bit_Stream*)bv16->decoder.bs);
BV16_Decode((struct BV16_Bit_Stream*)bv16->decoder.bs, (struct BV16_Decoder_State*)bv16->decoder.state, bv16->decoder.x);
if(*out_max_size<(out_size + FRSZ_IN_U8)){
if(!(*out_data = tsk_realloc(*out_data, (out_size + FRSZ_IN_U8)))){
TSK_DEBUG_ERROR("Failed to allocate new buffer");
*out_max_size = 0;
return 0;
}
*out_max_size = (out_size + FRSZ_IN_U8);
}
memcpy(&((uint8_t*)* out_data)[out_size], bv16->decoder.x, FRSZ_IN_U8);
out_size += FRSZ_IN_U8;
}
return out_size;
}
tsk_bool_t tdav_codec_bv16_fmtp_match(const tmedia_codec_t* codec, const char* fmtp)

View File

@ -854,7 +854,6 @@ last:
//
////#define START_CODE_PREFIX 16777216 /* 0x10000000 */
// for(i = size_of_scp; i<(size - size_of_scp); i++){
// //if( *( ((uint32_t*) &pdata[i])-0 ) == START_CODE_PREFIX ){
// if(pdata[i] == H264_START_CODE_PREFIX[0] && pdata[i+1] == H264_START_CODE_PREFIX[1] && pdata[i+2] == H264_START_CODE_PREFIX[2] && pdata[i+3] == H264_START_CODE_PREFIX[3]){ /* Found Start Code Prefix */
// prev_scp = last_scp;
// if((i - last_scp) >= H264_RTP_PAYLOAD_SIZE || 1){

View File

@ -281,10 +281,6 @@ void tdav_codec_h264_rtp_callback(struct tdav_codec_h264_s *self, const void *da
{
uint8_t* pdata = (uint8_t*)data;
//#define START_CODE_PREFIX 16777216 /* 0x10000000 */
//while(size && *( ((uint32_t*) &pdata[0])-0 ) == START_CODE_PREFIX ){
while(pdata[0] == H264_START_CODE_PREFIX[0] && pdata[1] == H264_START_CODE_PREFIX[1] && pdata[2] == H264_START_CODE_PREFIX[2] && pdata[3] == H264_START_CODE_PREFIX[3]){
pdata += 4;
size -= 4;

View File

@ -44,6 +44,7 @@ int tdav_codec_speex_deinit(tdav_codec_speex_t* self);
int tdav_codec_speex_open(tmedia_codec_t* self)
{
static int quality = 6;
tdav_codec_speex_t* speex = (tdav_codec_speex_t*)self;
tsk_size_t size = 0;
@ -60,6 +61,7 @@ int tdav_codec_speex_open(tmedia_codec_t* self)
return -3;
}
speex_encoder_ctl(speex->encoder.state, SPEEX_SET_QUALITY, &quality);
speex_encoder_ctl(speex->encoder.state, SPEEX_GET_FRAME_SIZE, &speex->encoder.size);
if(!speex->encoder.size){
speex->encoder.size = 20;

View File

@ -246,6 +246,12 @@ int tmedia_session_video_set(tmedia_session_t* self, const tmedia_param_t* param
video->useIPv6 = tsk_striequals(param->value, "ipv6");
}
}
else if(param->value_type == tmedia_pvt_pobject){
if(tsk_striequals(param->key, "natt-ctx")){
TSK_OBJECT_SAFE_FREE(video->natt_ctx);
video->natt_ctx = tsk_object_ref(param->value);
}
}
return ret;
}
@ -265,6 +271,9 @@ int tdav_session_video_prepare(tmedia_session_t* self)
ret = trtp_manager_set_rtp_callback(video->rtp_manager, tdav_session_video_rtp_cb, video);
ret = trtp_manager_prepare(video->rtp_manager);
if(video->natt_ctx){
ret = trtp_manager_set_natt_ctx(video->rtp_manager, video->natt_ctx);
}
}
}
@ -410,8 +419,13 @@ const tsdp_header_M_t* tdav_session_video_get_lo(tmedia_session_t* self)
changed = (self->ro_changed || !self->M.lo);
if(!self->M.lo){
if((self->M.lo = tsdp_header_M_create(self->plugin->media, video->rtp_manager->transport->master->port, "RTP/AVP"))){
/* Add common attributes */
if((self->M.lo = tsdp_header_M_create(self->plugin->media, video->rtp_manager->rtp.public_port, "RTP/AVP"))){
/* If NATT is active, do not rely on the global IP address Connection line */
if(video->natt_ctx){
tsdp_header_M_add_headers(self->M.lo,
TSDP_HEADER_C_VA_ARGS("IN", video->useIPv6 ? "IP6" : "IP4", video->rtp_manager->rtp.public_ip),
tsk_null);
}
}
else{
TSK_DEBUG_ERROR("Failed to create lo");
@ -556,6 +570,9 @@ static tsk_object_t* tdav_session_video_dtor(tsk_object_t * self)
TSK_FREE(session->decoder.buffer);
TSK_FREE(session->decoder.conv_buffer);
/* NAT Traversal context */
TSK_OBJECT_SAFE_FREE(session->natt_ctx);
tsk_safeobj_deinit(session);
/* deinit base */

View File

@ -42,7 +42,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="&quot;$(PSDK_DIR)include&quot;;&quot;$(DXSDK_DIR)include&quot;;..\thirdparties\win32\include;include;..\tinyRTP\include;..\tinyMEDIA\include;..\tinySDP\include;..\tinyNET\src;..\tinyDSHOW\include;..\tinySAK\src;..\thirdparties\win32\include\BroadVoice16\bvcommon;..\thirdparties\win32\include\BroadVoice16\bv16"
PreprocessorDefinitions="HAVE_BV16=1;HAVE_OPENCORE_AMR=1;HAVE_ILBC=1;HAVE_LIBGSM=1;HAVE_TINYDSHOW=1;HAVE_DSOUND_H=1;HAVE_FFMPEG=1;HAVE_SPEEX_DSP=1;HAVE_LIB_SPEEX=1;FLIP_DECODED_PICT=1;DEBUG_LEVEL=DEBUG_LEVEL_INFO;WIN32;_DEBUG;_WINDOWS;_USRDLL;_WIN32_WINNT=0x0501;TINYDAV_EXPORTS"
PreprocessorDefinitions="HAVE_BV16=0;HAVE_OPENCORE_AMR=1;HAVE_ILBC=1;HAVE_LIBGSM=1;HAVE_TINYDSHOW=1;HAVE_DSOUND_H=1;HAVE_FFMPEG=1;HAVE_SPEEX_DSP=1;HAVE_LIB_SPEEX=1;FLIP_DECODED_PICT=1;G192BITSTREAM=0;DEBUG_LEVEL=DEBUG_LEVEL_INFO;WIN32;_DEBUG;_WINDOWS;_USRDLL;_WIN32_WINNT=0x0501;TINYDAV_EXPORTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"

View File

@ -92,6 +92,10 @@ typedef enum opt_type_e
opt_sigcomp_id, /* --sigcomp-id urn:uuid:2e5fdc76-00be-4314-8202-1116fa82a473 */
opt_silent, /* --silent */
opt_smsc, /* --smsc +3315245856 */
opt_stun_ip, /* --stun-ip numb.viagenie.ca */
opt_stun_pwd, /* --stun-pwd mysecret */
opt_stun_port, /* --stun-port 3478 */
opt_stun_usr, /* --stun-usr bob@open-ims.test */
opt_to, /* --to sip:alice@open-ims.test */
}
opt_type_t;

View File

@ -28,6 +28,7 @@
#include "register.h"
#include "subscribe.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@ -62,7 +63,9 @@ int stack_callback(const tsip_event_t *_event)
return -1;
}
#if 0
tsk_safeobj_lock(ctx);
#endif
switch(_event->type){
case tsip_event_register:
@ -128,8 +131,9 @@ int stack_callback(const tsip_event_t *_event)
break;
}
}
#if 0
tsk_safeobj_unlock(ctx);
#endif
return ret;
}
@ -235,6 +239,7 @@ int stack_config(const opts_L_t* opts)
int ret = 0;
tsk_param_t* param;
tsk_bool_t pcscf_changed = tsk_false;
tsk_bool_t stun_done = tsk_false;
if(!opts){
return -1;
@ -364,6 +369,45 @@ int stack_config(const opts_L_t* opts)
break;
}
case opt_stun_ip:
case opt_stun_pwd:
case opt_stun_port:
case opt_stun_usr:
{
if(!stun_done){
const opt_t* _opt;
const char* ip = tsk_null, *usr = tsk_null, *pwd = tsk_null;
unsigned port = 0;
if((_opt = opt_get_by_type(opts, opt_stun_ip))){
ip = _opt->value;
}
if((_opt = opt_get_by_type(opts, opt_stun_port))){
port = atoi(_opt->value);
}
if((_opt = opt_get_by_type(opts, opt_stun_usr))){
usr = _opt->value;
}
if((_opt = opt_get_by_type(opts, opt_stun_pwd))){
pwd = _opt->value;
}
if(ip && port){
tsip_stack_set(ctx->stack,
TSIP_STACK_SET_STUN_SERVER(ip, port),
TSIP_STACK_SET_NULL());
}
if(usr){
tsip_stack_set(ctx->stack,
TSIP_STACK_SET_STUN_CRED(usr, pwd),
TSIP_STACK_SET_NULL());
}
stun_done = tsk_true;
}
break;
}
}/* switch */
} /* foreach */
@ -423,9 +467,9 @@ session_t* session_create(session_type_t type, tsip_ssession_handle_t* handle)
// 100rel
TSIP_MSESSION_SET_100rel(),
// Session timers
TSIP_MSESSION_SET_TIMERS(90, "uac"),
TSIP_MSESSION_SET_TIMERS(3600, "uac"),
// QoS
TSIP_MSESSION_SET_QOS(tmedia_qos_stype_segmented, tmedia_qos_strength_optional),
TSIP_MSESSION_SET_QOS(tmedia_qos_stype_none, tmedia_qos_strength_none),
// close media params
TSIP_MSESSION_SET_NULL()

View File

@ -2,11 +2,11 @@
# user's parameters (like ANSI-C #define)
%%domain micromethod.com
%%user bob
%%pwd bob
%%user mamdou
%%pwd mamadou
%%proxy_ip 192.168.0.10 # IP address or FQDN
%%proxy_port 5060
%%proxy_trans udp # udp, tcp, tls or sctp
%%proxy_trans tcp # udp, tcp, tls or sctp
%%expires 30 # expires used by all dialogs
%%sleep-sec 1.0 # number of seconds to wait before sending next sip message
@ -19,6 +19,7 @@
# Configure the stack
# Realm, IMPI and IMPU are mandatory
++cst --realm $$(domain) --impi $$(user)@$$(domain) --impu sip:$$(user)@$$(domain) --pwd $$(pwd) \
--stun-ip numb.viagenie.ca --stun-port 3478 --stun-usr $$(user)@$$(domain) --stun-pwd $$(pwd) \
--pcscf-ip $$(proxy_ip) --pcscf-port $$(proxy_port) --pcscf-trans $$(proxy_trans) \
--header Privacy=none --header Allow=INVITE, ACK, CANCEL, BYE, MESSAGE, OPTIONS, NOTIFY, PRACK, UPDATE, REFER \
--header P-Access-Network-Info=ADSL;utran-cell-id-3gpp=00000000 \
@ -27,7 +28,6 @@
# Run the engine
++r
# OPTIONS to hack AOR
#++opt
#++sleep --sec $$(sleep-sec)
@ -41,8 +41,8 @@
++sleep --sec $$(sleep-sec)
# SUBSCRIBE to reg event package (silent hangup)
#++sub --to sip:$$(user)@$$(domain) --xp $$(expires) --silent --header Event=reg --header Accept=application/reginfo+xml \
# --header Allow-Events=refer, presence, presence.winfo, xcap-diff, conference >>(sub-reg-sid)
++sub --to sip:$$(user)@$$(domain) --xp $$(expires) --silent --header Event=reg --header Accept=application/reginfo+xml \
--header Allow-Events=refer, presence, presence.winfo, xcap-diff, conference >>(sub-reg-sid)
#SUBSCRIBE to presence event package (alice)
#++sub --to sip:alice@$$(domain) --xp $$(expires) --header Event=presence --header Supported=eventlist\
@ -68,9 +68,10 @@
# --pay hello world
#send INVITE
#++a --to sip:bob@$$(domain) \
# --header Action-Header=Myheader-value @@action \
# >>(inv_audio_sid)
++av --to sip:bob@$$(domain) \
--header Action-Header=Myheader-value @@action \
>>(inv_audio_sid)
#++sleep --sec -1
#++ho --sid $$(inv_audio_sid)
#++sleep --sec -1

File diff suppressed because it is too large Load Diff

View File

@ -280,6 +280,10 @@ replace:
"sigcomp-id"i % { opt->type = opt_sigcomp_id; } |
"silent"i % { opt->type = opt_silent; } |
"smsc"i % { opt->type = opt_smsc; } |
"stun-ip"i % { opt->type = opt_stun_ip; } |
"stun-pwd"i % { opt->type = opt_stun_pwd; } |
"stun-port"i % { opt->type = opt_stun_port; } |
"stun-usr"i % { opt->type = opt_stun_usr; } |
"to"i % { opt->type = opt_to; }
)** >10 |
(any*) >tag >0 %option_error;

View File

@ -96,6 +96,11 @@ int invite_handle_event(const tsip_event_t *_event)
// ============================
// Media Events
//
/* Early Media started */
case tsip_m_early_media:
TSK_DEBUG_INFO("invite_handle_event(tsip_m_early_media)");
break;
/* 3GPP TS 24.610: Communication Hold */
case tsip_m_local_hold_ok:

View File

@ -99,8 +99,7 @@ TMEDIA_BEGIN_DECLS
#define TMEDIA_CODEC_FORMAT_AMR_WB_BE "113"
#define TMEDIA_CODEC_FORMAT_AMR_WB_OA "114"
//#define TMEDIA_CODEC_FORMAT_BV16 "115" //FIXME
#define TMEDIA_CODEC_FORMAT_BV16 "106"
#define TMEDIA_CODEC_FORMAT_BV16 "115"
#define TMEDIA_CODEC_FORMAT_RAW "121"
#define TMEDIA_CODEC_FORMAT_FFV1 "122"

View File

@ -57,15 +57,14 @@ tmedia_param_plugin_type_t;
typedef enum tmedia_param_value_type_e
{
// It's very important to distinguish pvoid (opaque) to pchar (can be duplicated)
tmedia_pvt_int32,
tmedia_pvt_pvoid, /* SHOULD be removed ==> many problems */
tmedia_pvt_pobject,
tmedia_pvt_pchar,
tmedia_pvt_int64,
}
tmedia_param_value_type_t;
#define TMEDIA_PARAM_VALUE_TYPE_IS_PTR(self) ((self) == tmedia_pvt_pvoid || (self) == tmedia_pvt_pchar)
#define TMEDIA_PARAM_VALUE_TYPE_IS_PTR(self) ((self) == tmedia_pvt_pobject || (self) == tmedia_pvt_pchar)
typedef struct tmedia_param_s
{

View File

@ -38,6 +38,8 @@
#include "tinysdp/tsdp_message.h"
#include "tinynet.h"
#include "tsk_list.h"
TMEDIA_BEGIN_DECLS
@ -161,6 +163,8 @@ typedef struct tmedia_session_mgr_s
tsk_bool_t offerer;
//! local IP address or FQDN
char* addr;
//! public IP address or FQDN
char* public_addr;
//! whether the @a addr is IPv6 or not (useful when @addr is a FQDN)
tsk_bool_t ipv6;
@ -184,6 +188,9 @@ typedef struct tmedia_session_mgr_s
tmedia_qos_strength_t strength;
} qos;
/* NAT Traversal context */
tnet_nat_context_handle_t* natt_ctx;
//! List of all sessions
tmedia_sessions_L_t* sessions;
@ -209,25 +216,25 @@ tmedia_session_param_type_t;
// (const char*)KEY_STR, (void**)&VALUE_PTR
/* Manager */
#define TMEDIA_SESSION_MANAGER_SET_INT32(KEY_STR, VALUE_INT32) TMEDIA_SESSION_SET_PARAM(tmedia_none, tmedia_ppt_manager, tmedia_pvt_int32, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_MANAGER_SET_PVOID(KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_PARAM(tmedia_none, tmedia_ppt_manager, tmedia_pvt_pvoid, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_MANAGER_SET_POBJECT(KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_PARAM(tmedia_none, tmedia_ppt_manager, tmedia_pvt_pobject, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_MANAGER_SET_STR(KEY_STR, VALUE_STR) TMEDIA_SESSION_SET_PARAM(tmedia_none, tmedia_ppt_manager, tmedia_pvt_pchar, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_MANAGER_SET_INT64(KEY_STR, VALUE_INT64) TMEDIA_SESSION_SET_PARAM(tmedia_none, tmedia_ppt_manager, tmedia_pvt_int64, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_MANAGER_GET_INT32(KEY_STR, VALUE_PINT32) TMEDIA_SESSION_GET_PARAM(tmedia_none, tmedia_ppt_manager, tmedia_pvt_int32, KEY_STR, VALUE_PINT32)
//#define TMEDIA_SESSION_MANAGER_GET_PVOID(KEY_STR, VALUE_PPTR) TMEDIA_SESSION_GET_PARAM(tmedia_none, tmedia_ppt_manager, tmedia_pvt_pvoid, KEY_STR, VALUE_PPTR)
//#define TMEDIA_SESSION_MANAGER_GET_PVOID(KEY_STR, VALUE_PPTR) TMEDIA_SESSION_GET_PARAM(tmedia_none, tmedia_ppt_manager, tmedia_pvt_pobject, KEY_STR, VALUE_PPTR)
//#define TMEDIA_SESSION_MANAGER_GET_STR(KEY_STR, VALUE_PSTR) TMEDIA_SESSION_GET_PARAM(tmedia_none, tmedia_ppt_manager, tmedia_pvt_pchar, KEY_STR, VALUE_PSTR)
//#define TMEDIA_SESSION_MANAGER_GET_INT64(KEY_STR, VALUE_PINT64) TMEDIA_SESSION_GET_PARAM(tmedia_none, tmedia_ppt_manager, tmedia_pvt_int64, KEY_STR, VALUE_PINT64)
/* Any Session */
#define TMEDIA_SESSION_SET_INT32(MEDIA_TYPE_ENUM, KEY_STR, VALUE_INT32) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_session, tmedia_pvt_int32, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_SET_PVOID(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_session, tmedia_pvt_pvoid, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_SET_POBJECT(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_session, tmedia_pvt_pobject, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_SET_STR(MEDIA_TYPE_ENUM, KEY_STR, VALUE_STR) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_session, tmedia_pvt_pchar, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_SET_INT64(MEDIA_TYPE_ENUM, KEY_STR, VALUE_INT64) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_session, tmedia_pvt_int64, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_GET_INT32(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PINT32) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_session, tmedia_pvt_int32, KEY_STR, VALUE_PINT32)
//#define TMEDIA_SESSION_GET_PVOID(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PPTR) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_session, tmedia_pvt_pvoid, KEY_STR, VALUE_PPTR)
//#define TMEDIA_SESSION_GET_PVOID(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PPTR) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_session, tmedia_pvt_pobject, KEY_STR, VALUE_PPTR)
//#define TMEDIA_SESSION_GET_STR(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PSTR) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_session, tmedia_pvt_pchar, KEY_STR, VALUE_PSTR)
//#define TMEDIA_SESSION_GET_INT64(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PINT64) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_session, tmedia_pvt_int64, KEY_STR, VALUE_PINT64)
/* Audio Session */
#define TMEDIA_SESSION_AUDIO_SET_INT32(KEY_STR, VALUE_INT32) TMEDIA_SESSION_SET_INT32(tmedia_audio, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_AUDIO_SET_PVOID(KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_PVOID(tmedia_audio, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_AUDIO_SET_POBJECT(KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_POBJECT(tmedia_audio, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_AUDIO_SET_STR(KEY_STR, VALUE_STR) TMEDIA_SESSION_SET_STR(tmedia_audio, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_AUDIO_SET_INT64(KEY_STR, VALUE_INT64) TMEDIA_SESSION_SET_INT64(tmedia_audio, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_AUDIO_GET_INT32(KEY_STR, VALUE_PINT32) TMEDIA_SESSION_GET_INT32(tmedia_audio, KEY_STR, VALUE_PINT32)
@ -236,7 +243,7 @@ tmedia_session_param_type_t;
//#define TMEDIA_SESSION_AUDIO_GET_INT64(KEY_STR, VALUE_PINT64) TMEDIA_SESSION_GET_INT64(tmedia_audio, KEY_STR, VALUE_PINT64)
/* Video Session */
#define TMEDIA_SESSION_VIDEO_SET_INT32(KEY_STR, VALUE_INT32) TMEDIA_SESSION_SET_INT32(tmedia_video, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_VIDEO_SET_PVOID(KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_PVOID(tmedia_video, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_VIDEO_SET_POBJECT(KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_POBJECT(tmedia_video, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_VIDEO_SET_STR(KEY_STR, VALUE_STR) TMEDIA_SESSION_SET_STR(tmedia_video, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_VIDEO_SET_INT64(KEY_STR, VALUE_INT64) TMEDIA_SESSION_SET_INT64(tmedia_video, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_VIDEO_GET_INT32(KEY_STR, VALUE_PINT32) TMEDIA_SESSION_GET_INT32(tmedia_video, KEY_STR, VALUE_PINT32)
@ -245,7 +252,7 @@ tmedia_session_param_type_t;
//#define TMEDIA_SESSION_VIDEO_GET_INT64(KEY_STR, VALUE_PINT64) TMEDIA_SESSION_GET_INT64(tmedia_video, KEY_STR, VALUE_PINT64)
/* Msrp Session */
#define TMEDIA_SESSION_MSRP_SET_INT32(KEY_STR, VALUE_INT32) TMEDIA_SESSION_SET_INT32(tmedia_msrp, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_MSRP_SET_PVOID(KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_PVOID(tmedia_msrp, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_MSRP_SET_POBJECT(KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_POBJECT(tmedia_msrp, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_MSRP_SET_STR(KEY_STR, VALUE_STR) TMEDIA_SESSION_SET_STR(tmedia_msrp, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_MSRP_SET_INT64(KEY_STR, VALUE_INT64) TMEDIA_SESSION_SET_INT64(tmedia_msrp, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_MSRP_GET_INT32(KEY_STR, VALUE_PINT32) TMEDIA_SESSION_GET_INT32(tmedia_msrp, KEY_STR, VALUE_PINT32)
@ -254,16 +261,16 @@ tmedia_session_param_type_t;
//#define TMEDIA_SESSION_MSRP_GET_INT64(KEY_STR, VALUE_PINT64) TMEDIA_SESSION_GET_INT64(tmedia_msrp, KEY_STR, VALUE_PINT64)
/* Any Consumer */
#define TMEDIA_SESSION_CONSUMER_SET_INT32(MEDIA_TYPE_ENUM, KEY_STR, VALUE_INT32) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_consumer, tmedia_pvt_int32, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_CONSUMER_SET_PVOID(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_consumer, tmedia_pvt_pvoid, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_CONSUMER_SET_POBJECT(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_consumer, tmedia_pvt_pobject, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_CONSUMER_SET_STR(MEDIA_TYPE_ENUM, KEY_STR, VALUE_STR) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_consumer, tmedia_pvt_pchar, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_CONSUMER_SET_INT64(MEDIA_TYPE_ENUM, KEY_STR, VALUE_INT64) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_consumer, tmedia_pvt_int64, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_CONSUMER_GET_INT32(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PINT32) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_consumer, tmedia_pvt_int32, KEY_STR, VALUE_PINT32)
//#define TMEDIA_SESSION_CONSUMER_GET_PVOID(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PPTR) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_consumer, tmedia_pvt_pvoid, KEY_STR, VALUE_PPTR)
//#define TMEDIA_SESSION_CONSUMER_GET_PVOID(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PPTR) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_consumer, tmedia_pvt_pobject, KEY_STR, VALUE_PPTR)
//#define TMEDIA_SESSION_CONSUMER_GET_STR(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PSTR) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_consumer, tmedia_pvt_pchar, KEY_STR, VALUE_PSTR)
//#define TMEDIA_SESSION_CONSUMER_GET_INT64(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PINT64) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_consumer, tmedia_pvt_int64, KEY_STR, VALUE_PINT64)
/* Audio Consumer */
#define TMEDIA_SESSION_AUDIO_CONSUMER_SET_INT32(KEY_STR, VALUE_INT32) TMEDIA_SESSION_CONSUMER_SET_INT32(tmedia_audio, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_AUDIO_CONSUMER_SET_PVOID(KEY_STR, VALUE_PTR) TMEDIA_SESSION_CONSUMER_SET_PVOID(tmedia_audio, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_AUDIO_CONSUMER_SET_POBJECT(KEY_STR, VALUE_PTR) TMEDIA_SESSION_CONSUMER_SET_POBJECT(tmedia_audio, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_AUDIO_CONSUMER_SET_STR(KEY_STR, VALUE_STR) TMEDIA_SESSION_CONSUMER_SET_STR(tmedia_audio, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_AUDIO_CONSUMER_SET_INT64(KEY_STR, VALUE_INT64) TMEDIA_SESSION_CONSUMER_SET_INT64(tmedia_audio, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_AUDIO_CONSUMER_GET_INT32(KEY_STR, VALUE_PINT32) TMEDIA_SESSION_CONSUMER_GET_INT32(tmedia_audio, KEY_STR, VALUE_PINT32)
@ -272,7 +279,7 @@ tmedia_session_param_type_t;
//#define TMEDIA_SESSION_AUDIO_CONSUMER_GET_INT64(KEY_STR, VALUE_PINT64) TMEDIA_SESSION_CONSUMER_GET_INT64(tmedia_audio, KEY_STR, VALUE_PINT64)
/* Video Consumer */
#define TMEDIA_SESSION_VIDEO_CONSUMER_SET_INT32(KEY_STR, VALUE_INT32) TMEDIA_SESSION_CONSUMER_SET_INT32(tmedia_video, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_VIDEO_CONSUMER_SET_PVOID(KEY_STR, VALUE_PTR) TMEDIA_SESSION_CONSUMER_SET_PVOID(tmedia_video, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_VIDEO_CONSUMER_SET_POBJECT(KEY_STR, VALUE_PTR) TMEDIA_SESSION_CONSUMER_SET_POBJECT(tmedia_video, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_VIDEO_CONSUMER_SET_STR(KEY_STR, VALUE_STR) TMEDIA_SESSION_CONSUMER_SET_STR(tmedia_video, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_VIDEO_CONSUMER_SET_INT64(KEY_STR, VALUE_INT64) TMEDIA_SESSION_CONSUMER_SET_INT64(tmedia_video, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_VIDEO_CONSUMER_GET_INT32(KEY_STR, VALUE_PINT32) TMEDIA_SESSION_CONSUMER_GET_INT32(tmedia_video, KEY_STR, VALUE_PINT32)
@ -281,7 +288,7 @@ tmedia_session_param_type_t;
//#define TMEDIA_SESSION_VIDEO_CONSUMER_GET_INT64(KEY_STR, VALUE_PINT64) TMEDIA_SESSION_CONSUMER_GET_INT64(tmedia_video, KEY_STR, VALUE_PINT64)
/* Msrp Consumer */
#define TMEDIA_SESSION_MSRP_CONSUMER_SET_INT32(KEY_STR, VALUE_INT32) TMEDIA_SESSION_CONSUMER_SET_INT32(tmedia_msrp, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_MSRP_CONSUMER_SET_PVOID(KEY_STR, VALUE_PTR) TMEDIA_SESSION_CONSUMER_SET_PVOID(tmedia_msrp, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_MSRP_CONSUMER_SET_POBJECT(KEY_STR, VALUE_PTR) TMEDIA_SESSION_CONSUMER_SET_POBJECT(tmedia_msrp, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_MSRP_CONSUMER_SET_STR(KEY_STR, VALUE_STR) TMEDIA_SESSION_CONSUMER_SET_STR(tmedia_msrp, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_MSRP_CONSUMER_SET_INT64(KEY_STR, VALUE_INT64) TMEDIA_SESSION_CONSUMER_SET_INT64(tmedia_msrp, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_MSRP_CONSUMER_GET_INT32(KEY_STR, VALUE_PINT32) TMEDIA_SESSION_CONSUMER_GET_INT32(tmedia_msrp, KEY_STR, VALUE_PINT32)
@ -290,16 +297,16 @@ tmedia_session_param_type_t;
//#define TMEDIA_SESSION_MSRP_CONSUMER_GET_INT64(KEY_STR, VALUE_PINT64) TMEDIA_SESSION_CONSUMER_GET_INT64(tmedia_msrp, KEY_STR, VALUE_PINT64)
/* Any Producer */
#define TMEDIA_SESSION_PRODUCER_SET_INT32(MEDIA_TYPE_ENUM, KEY_STR, VALUE_INT32) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_producer, tmedia_pvt_int32, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_PRODUCER_SET_PVOID(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_producer, tmedia_pvt_pvoid, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_PRODUCER_SET_POBJECT(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PTR) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_producer, tmedia_pvt_pobject, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_PRODUCER_SET_STR(MEDIA_TYPE_ENUM, KEY_STR, VALUE_STR) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_producer, tmedia_pvt_pchar, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_PRODUCER_SET_INT64(MEDIA_TYPE_ENUM, KEY_STR, VALUE_INT64) TMEDIA_SESSION_SET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_producer, tmedia_pvt_int64, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_PRODUCER_GET_INT32(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PINT32) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_producer, tmedia_pvt_int32, KEY_STR, VALUE_PINT32)
//#define TMEDIA_SESSION_PRODUCER_GET_PVOID(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PPTR) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_producer, tmedia_pvt_pvoid, KEY_STR, VALUE_PPTR)
//#define TMEDIA_SESSION_PRODUCER_GET_PVOID(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PPTR) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_producer, tmedia_pvt_pobject, KEY_STR, VALUE_PPTR)
//#define TMEDIA_SESSION_PRODUCER_GET_STR(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PSTR) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_producer, tmedia_pvt_pchar, KEY_STR, VALUE_PSTR)
//#define TMEDIA_SESSION_PRODUCER_GET_INT64(MEDIA_TYPE_ENUM, KEY_STR, VALUE_PINT64) TMEDIA_SESSION_GET_PARAM(MEDIA_TYPE_ENUM, tmedia_ppt_producer, tmedia_pvt_int64, KEY_STR, VALUE_PINT64)
/* Audio Producer */
#define TMEDIA_SESSION_AUDIO_PRODUCER_SET_INT32(KEY_STR, VALUE_INT32) TMEDIA_SESSION_PRODUCER_SET_INT32(tmedia_audio, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_AUDIO_PRODUCER_SET_PVOID(KEY_STR, VALUE_PTR) TMEDIA_SESSION_PRODUCER_SET_PVOID(tmedia_audio, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_AUDIO_PRODUCER_SET_POBJECT(KEY_STR, VALUE_PTR) TMEDIA_SESSION_PRODUCER_SET_POBJECT(tmedia_audio, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_AUDIO_PRODUCER_SET_STR(KEY_STR, VALUE_STR) TMEDIA_SESSION_AUDIO_PRODUCER_SET_STR(tmedia_audio, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_AUDIO_PRODUCER_SET_INT64(KEY_STR, VALUE_INT64) TMEDIA_SESSION_PRODUCER_SET_INT64(tmedia_audio, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_AUDIO_PRODUCER_GET_INT32(KEY_STR, VALUE_PINT32) TMEDIA_SESSION_PRODUCER_GET_INT32(tmedia_audio, KEY_STR, VALUE_PINT32)
@ -308,7 +315,7 @@ tmedia_session_param_type_t;
//#define TMEDIA_SESSION_AUDIO_PRODUCER_GET_INT64(KEY_STR, VALUE_PINT64) TMEDIA_SESSION_PRODUCER_GET_INT64(tmedia_audio, KEY_STR, VALUE_PINT64)
/* Video Producer */
#define TMEDIA_SESSION_VIDEO_PRODUCER_SET_INT32(KEY_STR, VALUE_INT32) TMEDIA_SESSION_PRODUCER_SET_INT32(tmedia_video, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_VIDEO_PRODUCER_SET_PVOID(KEY_STR, VALUE_PTR) TMEDIA_SESSION_PRODUCER_SET_PVOID(tmedia_video, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_VIDEO_PRODUCER_SET_POBJECT(KEY_STR, VALUE_PTR) TMEDIA_SESSION_PRODUCER_SET_POBJECT(tmedia_video, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_VIDEO_PRODUCER_SET_STR(KEY_STR, VALUE_STR) TMEDIA_SESSION_AUDIO_PRODUCER_SET_STR(tmedia_video, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_VIDEO_PRODUCER_SET_INT64(KEY_STR, VALUE_INT64) TMEDIA_SESSION_PRODUCER_SET_INT64(tmedia_video, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_VIDEO_PRODUCER_GET_INT32(KEY_STR, VALUE_PINT32) TMEDIA_SESSION_PRODUCER_GET_INT32(tmedia_video, KEY_STR, VALUE_PINT32)
@ -317,7 +324,7 @@ tmedia_session_param_type_t;
//#define TMEDIA_SESSION_VIDEO_PRODUCER_GET_INT64(KEY_STR, VALUE_PINT64) TMEDIA_SESSION_PRODUCER_GET_INT64(tmedia_video, KEY_STR, VALUE_PINT64)
/* Msrp Producer */
#define TMEDIA_SESSION_MSRP_PRODUCER_SET_INT32(KEY_STR, VALUE_INT32) TMEDIA_SESSION_PRODUCER_SET_INT32(tmedia_msrp, KEY_STR, VALUE_INT32)
#define TMEDIA_SESSION_MSRP_PRODUCER_SET_PVOID(KEY_STR, VALUE_PTR) TMEDIA_SESSION_PRODUCER_SET_PVOID(tmedia_msrp, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_MSRP_PRODUCER_SET_POBJECT(KEY_STR, VALUE_PTR) TMEDIA_SESSION_PRODUCER_SET_POBJECT(tmedia_msrp, KEY_STR, VALUE_PTR)
#define TMEDIA_SESSION_MSRP_PRODUCER_SET_STR(KEY_STR, VALUE_STR) TMEDIA_SESSION_AUDIO_PRODUCER_SET_STR(tmedia_msrp, KEY_STR, VALUE_STR)
#define TMEDIA_SESSION_MSRP_PRODUCER_SET_INT64(KEY_STR, VALUE_INT64) TMEDIA_SESSION_PRODUCER_SET_INT64(tmedia_msrp, KEY_STR, VALUE_INT64)
//#define TMEDIA_SESSION_MSRP_PRODUCER_GET_INT32(KEY_STR, VALUE_PINT32) TMEDIA_SESSION_PRODUCER_GET_INT32(tmedia_msrp, KEY_STR, VALUE_PINT32)
@ -336,6 +343,7 @@ tmedia_session_param_type_t;
TINYMEDIA_API tmedia_session_mgr_t* tmedia_session_mgr_create(tmedia_type_t type, const char* addr, tsk_bool_t ipv6, tsk_bool_t offerer);
TINYMEDIA_API int tmedia_session_mgr_set_natt_ctx(tmedia_session_mgr_t* self, tnet_nat_context_handle_t* natt_ctx, const char* public_addr);
TINYMEDIA_API int tmedia_session_mgr_start(tmedia_session_mgr_t* self);
TINYMEDIA_API int tmedia_session_mgr_set(tmedia_session_mgr_t* self, ...);
TINYMEDIA_API int tmedia_session_mgr_set_2(tmedia_session_mgr_t* self, va_list *app);

View File

@ -55,19 +55,20 @@ tmedia_param_t* tmedia_param_create(tmedia_param_access_type_t access_type,
switch(value_type){
case tmedia_pvt_int32:
if(param->value = tsk_calloc(1, sizeof(int32_t))){
*((int32_t*)param->value) = *((int32_t*)value);
memcpy(param->value, value, sizeof(int32_t));
//*((int32_t*)param->value) = *((int32_t*)value);
}
break;
case tmedia_pvt_pvoid:
/* FIXME */
param->value = value;
case tmedia_pvt_pobject:
param->value = tsk_object_ref(value);
break;
case tmedia_pvt_pchar:
param->value = tsk_strdup(value);
break;
case tmedia_pvt_int64:
if(param->value = tsk_calloc(1, sizeof(int64_t))){
*((int64_t*)param->value) = *((int64_t*)value);
memcpy(param->value, value, sizeof(int64_t));
//*((int64_t*)param->value) = *((int64_t*)value);
}
break;
}
@ -123,10 +124,9 @@ static tsk_object_t* tmedia_param_dtor(tsk_object_t* self)
tmedia_param_t *param = self;
if(param){
TSK_FREE(param->key);
switch(param->access_type){
case tmedia_pvt_pvoid:
/* FIXME */
param->value = tsk_null;
switch(param->value_type){
case tmedia_pvt_pobject:
TSK_OBJECT_SAFE_FREE(param->value);
break;
case tmedia_pvt_pchar:
case tmedia_pvt_int64:

View File

@ -485,6 +485,24 @@ tmedia_session_mgr_t* tmedia_session_mgr_create(tmedia_type_t type, const char*
return mgr;
}
/**@ingroup tmedia_session_group
*/
int tmedia_session_mgr_set_natt_ctx(tmedia_session_mgr_t* self, tnet_nat_context_handle_t* natt_ctx, const char* public_addr)
{
if(!self || !natt_ctx){
TSK_DEBUG_ERROR("Invalid parameter");
return -1;
}
TSK_OBJECT_SAFE_FREE(self->natt_ctx);
self->natt_ctx = tsk_object_ref(natt_ctx);
tsk_strupdate(&self->public_addr, public_addr);
tmedia_session_mgr_set(self,
TMEDIA_SESSION_SET_POBJECT(self->type, "natt-ctx", self->natt_ctx),
TMEDIA_SESSION_SET_NULL());
return 0;
}
/**@ingroup tmedia_session_group
* Starts the session manager by starting all underlying sessions.
* You should set both remote and local offers before calling this function.
@ -695,10 +713,10 @@ const tsdp_message_t* tmedia_session_mgr_get_lo(tmedia_session_mgr_t* self)
if(self->sdp.lo){
return self->sdp.lo;
}
else if((self->sdp.lo = tsdp_message_create_empty(self->addr, self->ipv6, self->sdp.lo_ver++))){
else if((self->sdp.lo = tsdp_message_create_empty(self->public_addr ? self->public_addr : self->addr, self->ipv6, self->sdp.lo_ver++))){
/* Set connection "c=" */
tsdp_message_add_headers(self->sdp.lo,
TSDP_HEADER_C_VA_ARGS("IN", self->ipv6 ? "IP6" : "IP4", self->addr),
TSDP_HEADER_C_VA_ARGS("IN", self->ipv6 ? "IP6" : "IP4", self->public_addr ? self->public_addr : self->addr),
tsk_null);
}else{
self->sdp.lo_ver--;
@ -1090,11 +1108,11 @@ int _tmedia_session_mgr_load_sessions(tmedia_session_mgr_t* self)
}
}
}
/* set ldefault values */
/* set default values */
tmedia_session_mgr_set(self,
TMEDIA_SESSION_SET_STR(self->type, "local-ip", self->addr),
TMEDIA_SESSION_SET_STR(self->type, "local-ipver", self->ipv6 ? "ipv6" : "ipv4"),
TMEDIA_SESSION_SET_NULL());
TMEDIA_SESSION_SET_STR(self->type, "local-ip", self->addr),
TMEDIA_SESSION_SET_STR(self->type, "local-ipver", self->ipv6 ? "ipv6" : "ipv4"),
TMEDIA_SESSION_SET_NULL());
/* load params */
_tmedia_session_mgr_apply_params(self);
@ -1175,6 +1193,9 @@ static tsk_object_t* tmedia_session_mgr_dtor(tsk_object_t * self)
TSK_OBJECT_SAFE_FREE(mgr->params);
TSK_OBJECT_SAFE_FREE(mgr->natt_ctx);
TSK_FREE(mgr->public_addr);
TSK_FREE(mgr->addr);
}

View File

@ -136,7 +136,7 @@ tnet_dhcp_reply_t* tnet_dhcp_send_request(tnet_dhcp_ctx_t* ctx, tnet_dhcp_reques
if(request->type == dhcp_type_inform){
struct sockaddr_storage ss;
if(!tnet_get_sockaddr(localsocket4->fd, &ss)){
uint32_t addr = tnet_htonl((*((uint32_t*)&((struct sockaddr_in*)&ss)->sin_addr)));
uint32_t addr = tnet_htonl_2(&((struct sockaddr_in*)&ss)->sin_addr);
memcpy(&request->ciaddr, &addr, 4);
}
}

View File

@ -211,25 +211,25 @@ tnet_dhcp_message_t* tnet_dhcp_message_deserialize(const struct tnet_dhcp_ctx_s
/*== htype (1) */
message->hops = *(dataPtr++);
/*== xid (4) */
message->xid= tnet_ntohl(*((uint32_t*)dataPtr));
message->xid= tnet_htonl_2(dataPtr);
dataPtr += 4;
/*== secs (2) */
message->secs = tnet_ntohs(*((uint16_t*)dataPtr));
message->secs = tnet_ntohs_2(dataPtr);
dataPtr += 2;
/*== flags (2) */
message->flags = tnet_ntohs(*((uint16_t*)dataPtr));
message->flags = tnet_ntohs_2(dataPtr);
dataPtr += 2;
/*== ciaddr (4) */
message->ciaddr= tnet_ntohl(*((uint32_t*)dataPtr));
message->ciaddr= tnet_htonl_2(dataPtr);
dataPtr += 4;
/*== yiaddr (4) */
message->yiaddr= tnet_ntohl(*((uint32_t*)dataPtr));
message->yiaddr= tnet_htonl_2(dataPtr);
dataPtr += 4;
/*== siaddr (4) */
message->siaddr= tnet_ntohl(*((uint32_t*)dataPtr));
message->siaddr= tnet_htonl_2(dataPtr);
dataPtr += 4;
/*== giaddr (4) */
message->giaddr= tnet_ntohl(*((uint32_t*)dataPtr));
message->giaddr= tnet_htonl_2(dataPtr);
dataPtr += 4;
/*== chaddr (16[max]) */
memcpy(message->chaddr, dataPtr, message->hlen>16 ? 16 : message->hlen);
@ -241,7 +241,7 @@ tnet_dhcp_message_t* tnet_dhcp_message_deserialize(const struct tnet_dhcp_ctx_s
memcpy(message->file, dataPtr, 128);
dataPtr += 128;
/*== Magic Cookie (4) */
if(tnet_ntohl(*((uint32_t*)dataPtr)) != TNET_DHCP_MAGIC_COOKIE){
if(tnet_htonl_2(dataPtr) != TNET_DHCP_MAGIC_COOKIE){
TSK_DEBUG_ERROR("Invalid DHCP magic cookie.");
// Do not exit ==> continue parsing.
}

View File

@ -290,7 +290,7 @@ static tsk_object_t* tnet_dhcp_option_dns_ctor(tsk_object_t * self, va_list * ap
| 6 | n | a1 | a2 | a3 | a4 | a1 | a2 | ...
+-----+-----+-----+-----+-----+-----+-----+-----+--
*/
address = tnet_ntohl(*((uint32_t*)payloadPtr));
address = tnet_htonl_2(payloadPtr);
tsk_sprintf(&ip4, "%u.%u.%u.%u", (address>>24)&0xFF, (address>>16)&0xFF, (address>>8)&0xFF, (address>>0)&0xFF);
addrstring = tsk_string_create(ip4);

View File

@ -92,7 +92,8 @@ static tsk_object_t* tnet_dhcp_option_sip_ctor(tsk_object_t * self, va_list * ap
char* ip4 = 0;
while(payloadPtr < payloadEnd){
address = tnet_ntohl(*((uint32_t*)++payloadPtr));
++payloadPtr;
address = tnet_htonl_2(payloadPtr);
tsk_sprintf(&ip4, "%u.%u.%u.%u", (address>>24)&0xFF, (address>>16)&0xFF, (address>>8)&0xFF, (address>>0)&0xFF);

View File

@ -107,7 +107,7 @@ tnet_dhcp6_reply_t* tnet_dhcp6_send_request(const tnet_dhcp6_ctx_t* ctx, tnet_dh
//if(request->type == dhcp_type_inform){
// struct sockaddr_storage ss;
// if(!tnet_get_sockaddr(localsocket4->fd, &ss)){
// uint32_t addr = tnet_htonl((*((uint32_t*)&((struct sockaddr_in*)&ss)->sin_addr)));
// uint32_t addr = tnet_htonl_2(&((struct sockaddr_in*)&ss)->sin_addr);
// memcpy(&request->ciaddr, &addr, 4);
// }
//}

View File

@ -90,7 +90,7 @@ tnet_dhcp6_duid_t* tnet_dhcp6_duid_deserialize(const void* data, tsk_size_t size
goto bail;
}
type = (tnet_dhcp6_duid_type_t) tnet_ntohs(*((uint16_t*)dataPtr));
type = (tnet_dhcp6_duid_type_t) tnet_ntohs_2(dataPtr);
dataPtr += 2;
bail:

View File

@ -89,10 +89,10 @@ tnet_dhcp6_option_t* tnet_dhcp6_option_deserialize(const void* data, tsk_size_t
goto bail;
}
code = (tnet_dhcp6_option_code_t) tnet_ntohs(*((uint16_t*)dataPtr));
code = (tnet_dhcp6_option_code_t) tnet_ntohs_2(dataPtr);
dataPtr += 2;
len = tnet_ntohs(*((uint16_t*)dataPtr));
len = tnet_ntohs_2(dataPtr);
dataPtr += 2;
switch(code){

View File

@ -669,7 +669,7 @@ int tnet_dns_query_srv(tnet_dns_ctx_t *ctx, const char* service, char** hostname
TSK_OBJECT_SAFE_FREE(response);
return (hostname && !tsk_strempty(*hostname)) ? 0 : -2;
return (hostname && !tsk_strnullORempty(*hostname)) ? 0 : -2;
}
/**@ingroup tnet_dns_group

View File

@ -73,7 +73,7 @@ static tsk_object_t* tnet_dns_a_ctor(tsk_object_t * self, va_list * app)
if(rddata && rdlength && (rdlength == 4/* 32bits */)){
// ==> DESERIALIZATION
/* ADDRESS */
uint32_t address = tnet_ntohl(*((uint32_t*)rddata));
uint32_t address = tnet_htonl_2(rddata);
tsk_sprintf(&(a->address), "%u.%u.%u.%u", (address>>24)&0xFF, (address>>16)&0xFF, (address>>8)&0xFF, (address>>0)&0xFF);
}
else{

View File

@ -75,8 +75,8 @@ static tsk_object_t* tnet_dns_aaaa_ctor(tsk_object_t * self, va_list * app)
// ==> DESERIALIZATION
/* ADDRESS */
tsk_sprintf(&(aaaa->address), "%x:%x:%x:%x:%x:%x:%x:%x",
tnet_ntohs(*((uint16_t*)&rddata[0])), tnet_ntohs(*((uint16_t*)&rddata[2])), tnet_ntohs(*((uint16_t*)&rddata[4])), tnet_ntohs(*((uint16_t*)&rddata[6])),
tnet_ntohs(*((uint16_t*)&rddata[8])), tnet_ntohs(*((uint16_t*)&rddata[10])), tnet_ntohs(*((uint16_t*)&rddata[12])), tnet_ntohs(*((uint16_t*)&rddata[14])));
tnet_ntohs_2(&rddata[0]), tnet_ntohs_2(&rddata[2]), tnet_ntohs_2(&rddata[4]), tnet_ntohs_2(&rddata[6]),
tnet_ntohs_2(&rddata[8]), tnet_ntohs_2(&rddata[10]), tnet_ntohs_2(&rddata[12]), tnet_ntohs_2(&rddata[14]));
}
else{
TSK_DEBUG_ERROR("Invalid IPv6 address.");

View File

@ -216,11 +216,11 @@ tnet_dns_message_t* tnet_dns_message_deserialize(const uint8_t *data, tsk_size_t
/* === HEADER ===*/
/* ID */
message->Header.ID = tnet_ntohs(*((uint16_t*)dataPtr));
message->Header.ID = tnet_ntohs_2(dataPtr);
dataPtr += 2;
/* |QR| Opcode |AA|TC|RD|RA| Z | RCODE | */
{
uint16_t flags = tnet_ntohs(*((uint16_t*)dataPtr));
uint16_t flags = tnet_ntohs_2(dataPtr);
message->Header.QR = (flags >> 15);
message->Header.OPCODE = ((flags >> 11) & 0x000F);
@ -234,16 +234,16 @@ tnet_dns_message_t* tnet_dns_message_deserialize(const uint8_t *data, tsk_size_t
dataPtr += 2;
}
/* QDCOUNT */
message->Header.QDCOUNT = tnet_ntohs(*((uint16_t*)dataPtr));
message->Header.QDCOUNT = tnet_ntohs_2(dataPtr);
dataPtr += 2;
/* ANCOUNT */
message->Header.ANCOUNT = tnet_ntohs(*((uint16_t*)dataPtr));
message->Header.ANCOUNT = tnet_ntohs_2(dataPtr);
dataPtr += 2;
/* NSCOUNT */
message->Header.NSCOUNT = tnet_ntohs(*((uint16_t*)dataPtr));
message->Header.NSCOUNT = tnet_ntohs_2(dataPtr);
dataPtr += 2;
/* ARCOUNT */
message->Header.ARCOUNT = tnet_ntohs(*((uint16_t*)dataPtr));
message->Header.ARCOUNT = tnet_ntohs_2(dataPtr);
dataPtr += 2;
/* === Queries ===*/

View File

@ -68,7 +68,7 @@ static tsk_object_t* tnet_dns_mx_ctor(tsk_object_t * self, va_list * app)
if(rdlength){
// ==> DESERIALIZATION
/* PREFERENCE */
mx->preference = tnet_ntohs(*((uint16_t*)(((uint8_t*)data) + offset)));
mx->preference = tnet_ntohs_2(((uint8_t*)data) + offset);
offset += 2;
/* EXCHANGE */
tnet_dns_rr_qname_deserialize(data, &(mx->exchange), &offset);

View File

@ -71,10 +71,10 @@ static tsk_object_t* tnet_dns_naptr_ctor(tsk_object_t * self, va_list * app)
if(rdlength){
// ==> DESERIALIZATION
/* ORDER */
naptr->order = tnet_ntohs(*((uint16_t*)(((uint8_t*)data) + offset)));
naptr->order = tnet_ntohs_2(((uint8_t*)data) + offset);
offset += 2;
/* PREFERENCE */
naptr->preference = tnet_ntohs(*((uint16_t*)(((uint8_t*)data) + offset)));
naptr->preference = tnet_ntohs_2(((uint8_t*)data) + offset);
offset += 2;
/* FLAGS */
tnet_dns_rr_charstring_deserialize(data, &(naptr->flags), &offset);

View File

@ -260,16 +260,16 @@ tnet_dns_rr_t* tnet_dns_rr_deserialize(const void* data, tsk_size_t size, tsk_si
tnet_dns_rr_qname_deserialize(dataStart, &qname, offset);
dataPtr = (dataStart + *offset);
/* == Parse QTYPE == */
qtype = (tnet_dns_qtype_t)tnet_ntohs(*((uint16_t*)dataPtr));
qtype = (tnet_dns_qtype_t)tnet_ntohs_2(dataPtr);
dataPtr += 2, *offset += 2;
/* == Parse QCLASS == */
qclass = (tnet_dns_qclass_t)tnet_ntohs(*((uint16_t*)dataPtr));
qclass = (tnet_dns_qclass_t)tnet_ntohs_2(dataPtr);
dataPtr += 2, *offset += 2;
/* == Parse TTL == */
ttl = tnet_ntohl(*((uint32_t*)dataPtr));
ttl = tnet_htonl_2(dataPtr);
dataPtr += 4, *offset += 4;
/* == Parse RDLENGTH == */
rdlength = tnet_ntohs(*((uint16_t*)dataPtr));
rdlength = tnet_ntohs_2(dataPtr);
dataPtr += 2, *offset += 2;
switch(qtype){

View File

@ -70,19 +70,19 @@ static tsk_object_t* tnet_dns_soa_ctor(tsk_object_t * self, va_list * app)
/* RNAME */
tnet_dns_rr_qname_deserialize(data, &(soa->rname), &offset);
/* SERIAL */
soa->serial = tnet_ntohl(*((uint32_t*)(((uint8_t*)data) + offset))),
soa->serial = tnet_htonl_2(((uint8_t*)data) + offset),
offset += 2;
/* REFRESH */
soa->refresh = tnet_ntohl(*((uint32_t*)(((uint8_t*)data) + offset))),
soa->refresh = tnet_htonl_2(((uint8_t*)data) + offset),
offset += 2;
/* RETRY */
soa->retry = tnet_ntohl(*((uint32_t*)(((uint8_t*)data) + offset))),
soa->retry = tnet_htonl_2(((uint8_t*)data) + offset),
offset += 2;
/* EXPIRE */
soa->expire = tnet_ntohl(*((uint32_t*)(((uint8_t*)data) + offset))),
soa->expire = tnet_htonl_2(((uint8_t*)data) + offset),
offset += 2;
/* MINIMUM */
soa->minimum = tnet_ntohl(*((uint32_t*)(((uint8_t*)data) + offset))),
soa->minimum = tnet_htonl_2(((uint8_t*)data) + offset),
offset += 2;
}
}

View File

@ -68,13 +68,13 @@ static tsk_object_t* tnet_dns_srv_ctor(tsk_object_t * self, va_list * app)
if(rdlength){
// ==> DESERIALIZATION
/* Priority */
srv->priority = tnet_ntohs(*((uint16_t*)(((uint8_t*)data) + offset))),
srv->priority = tnet_ntohs_2(((uint8_t*)data) + offset),
offset += 2;
/* Weight */
srv->weight = tnet_ntohs(*((uint16_t*)(((uint8_t*)data) + offset))),
srv->weight = tnet_ntohs_2(((uint8_t*)data) + offset),
offset += 2;
/* Port */
srv->port = tnet_ntohs(*((uint16_t*)(((uint8_t*)data) + offset))),
srv->port = tnet_ntohs_2(((uint8_t*)data) + offset),
offset += 2;
/* Target */
tnet_dns_rr_qname_deserialize(data, &(srv->target), &offset);

View File

@ -164,17 +164,17 @@ tnet_stun_response_t* tnet_stun_send_unreliably(tnet_fd_t localFD, uint16_t RTO,
tv.tv_sec += rto/1000;
tv.tv_usec += (rto% 1000) * 1000;
ret = tnet_sockfd_sendto(localFD, server, buffer->data, buffer->size);
FD_ZERO(&set);
FD_SET(localFD, &set);
ret = tnet_sockfd_sendto(localFD, server, buffer->data, buffer->size);
if((ret = select(localFD+1, &set, NULL, NULL, &tv))<0){
goto bail;
}
else if(ret == 0){
/* timeout */
TSK_DEBUG_INFO("STUN request timedout at %d", i);
rto *= 2;
continue;
}
@ -184,11 +184,18 @@ tnet_stun_response_t* tnet_stun_send_unreliably(tnet_fd_t localFD, uint16_t RTO,
tsk_size_t len = 0;
void* data = 0;
TSK_DEBUG_INFO("STUN request got response");
/* Check how how many bytes are pending */
if((ret = tnet_ioctlt(localFD, FIONREAD, &len))<0){
goto bail;
}
if(len==0){
TSK_DEBUG_INFO("tnet_ioctlt() returent zero bytes");
continue;
}
/* Receive pending data */
data = tsk_calloc(len, sizeof(uint8_t));
if((ret = tnet_sockfd_recvfrom(localFD, data, len, 0, server))<0){

View File

@ -162,8 +162,8 @@ tnet_stun_attribute_t* tnet_stun_attribute_deserialize(const void* data, tsk_siz
tnet_stun_attribute_t *attribute = 0;
const uint8_t* dataPtr = data;
tnet_stun_attribute_type_t type = (tnet_stun_attribute_type_t)tnet_ntohs(*((uint16_t*)dataPtr));
uint16_t length = tnet_ntohs(*(((uint16_t*)dataPtr)+1));
tnet_stun_attribute_type_t type = (tnet_stun_attribute_type_t)tnet_ntohs_2(dataPtr);
uint16_t length = tnet_ntohs_2(&dataPtr[2]);
/* Check validity */
if(!data || size<=4/* Type(2-bytes) plus Length (2-bytes) */)
@ -212,7 +212,7 @@ tnet_stun_attribute_t* tnet_stun_attribute_deserialize(const void* data, tsk_siz
/* RFC 5389 - 15.5. FINGERPRINT*/
case stun_fingerprint:
{
uint32_t fingerprint = tnet_ntohl(*((uint32_t*)dataPtr));
uint32_t fingerprint = tnet_htonl_2(dataPtr);
attribute = (tnet_stun_attribute_t *)tnet_stun_attribute_fingerprint_create(fingerprint);
break;
}
@ -278,7 +278,7 @@ tnet_stun_attribute_t* tnet_stun_attribute_deserialize(const void* data, tsk_siz
}
default:
TSK_DEBUG_ERROR("==> NOT IMPLEMENTED");
//TSK_DEBUG_WARN("==> NOT IMPLEMENTED");
break;
}
@ -491,11 +491,11 @@ static tsk_object_t* tnet_stun_attribute_mapped_addr_ctor(tsk_object_t * self, v
TNET_STUN_ATTRIBUTE(attribute)->length = payload_size;
attribute->family = (tnet_stun_addr_family_t) (*(payloadPtr++));
attribute->port = tnet_ntohs(*((uint16_t*)payloadPtr));
attribute->port = tnet_ntohs_2(payloadPtr);
payloadPtr+=2;
if(attribute->family == stun_ipv4){
uint32_t addr = tnet_ntohl(*((uint32_t*)payloadPtr));
uint32_t addr = tnet_htonl_2(payloadPtr);
memcpy(attribute->address, &addr, 4);
payloadPtr+=4;
}
@ -507,7 +507,7 @@ static tsk_object_t* tnet_stun_attribute_mapped_addr_ctor(tsk_object_t * self, v
uint32_t addr;
for(i=0; i<addr_size; i+=4){
addr = tnet_ntohl(*((uint32_t*)payloadPtr));
addr = tnet_htonl_2(payloadPtr);
memcpy(&attribute->address[i], &addr, 4);
payloadPtr+=4;
}
@ -562,7 +562,7 @@ static tsk_object_t* tnet_stun_attribute_xmapped_addr_ctor(tsk_object_t * self,
XOR'ing it with the most significant 16 bits of the magic cookie, and
then the converting the result to network byte order.
*/
attribute->xport = tnet_ntohs(*((uint16_t*)payloadPtr));
attribute->xport = tnet_ntohs_2(payloadPtr);
attribute->xport ^= 0x2112;
payloadPtr+=2;
@ -580,8 +580,7 @@ static tsk_object_t* tnet_stun_attribute_xmapped_addr_ctor(tsk_object_t * self,
uint32_t addr;
for(i=0; i<addr_size; i+=4){
addr = tnet_ntohl(*((uint32_t*)payloadPtr));
addr ^= TNET_STUN_MAGIC_COOKIE;
addr = tnet_ntohl(tnet_ntohl_2(payloadPtr) ^ TNET_STUN_MAGIC_COOKIE);
memcpy(&attribute->xaddress[i], &addr, 4);
payloadPtr+=4;
}
@ -734,7 +733,7 @@ static tsk_object_t* tnet_stun_attribute_errorcode_ctor(tsk_object_t * self, va_
tsk_size_t payload_size = va_arg(*app, tsk_size_t);
if(payload_size >4){
uint32_t code = tnet_ntohl(*((uint32_t*)payload));
uint32_t code = tnet_htonl_2(payload);
payload += 4;
attribute->_class = code >>8;
@ -928,11 +927,11 @@ static tsk_object_t* tnet_stun_attribute_altserver_ctor(tsk_object_t * self, va_
TNET_STUN_ATTRIBUTE(attribute)->length = payload_size;
attribute->family = (tnet_stun_addr_family_t) (*(payloadPtr++));
attribute->port = tnet_ntohs(*((uint16_t*)payloadPtr));
attribute->port = tnet_ntohs_2(payloadPtr);
payloadPtr+=2;
if(attribute->family == stun_ipv4){
uint32_t addr = tnet_ntohl(*((uint32_t*)payloadPtr));
uint32_t addr = tnet_htonl_2(payloadPtr);
memcpy(attribute->server, &addr, 4);
payloadPtr+=4;
}

View File

@ -241,12 +241,12 @@ tnet_stun_message_t* tnet_stun_message_deserialize(const uint8_t *data, tsk_size
/* Message Type
*/
message->type = (tnet_stun_message_type_t)tnet_ntohs(*((uint16_t*)dataPtr));
message->type = (tnet_stun_message_type_t)tnet_ntohs_2(dataPtr);
dataPtr += 2;
/* Message Length
*/
message->length = tnet_ntohs(*((uint16_t*)dataPtr));
message->length = tnet_ntohs_2(dataPtr);
dataPtr += 2;
/* Check message validity

View File

@ -48,6 +48,13 @@ unsigned short tnet_htons(unsigned short x)
}
}
/* Memory alignment hack */
unsigned short tnet_htons_2(const void* px)
{
unsigned short y = TSK_TO_UINT16((const uint8_t*)px);
return tnet_htons(y);
}
/** Converts a 32-bit value from host to TCP/IP network byte order (big-endian).
* @param x The 32-bit (in host byte order) value to convert.
* @retval @a x in TCP/IP network byte order.
@ -65,6 +72,13 @@ unsigned long tnet_htonl(unsigned long x)
}
}
/* Memory alignment hack */
unsigned long tnet_htonl_2(const void* px)
{
unsigned long y = TSK_TO_UINT32((const uint8_t*)px);
return tnet_htonl(y);
}
/** Indicates whether we are on a Big Endian host or not.<br>
* <b>IMPORTANT</b>: Before calling this function, you should initialize the network stack by using
* @ref tnet_startup().

View File

@ -37,11 +37,15 @@
TNET_BEGIN_DECLS
TINYNET_API TNET_INLINE unsigned short tnet_htons(unsigned short x);
TINYNET_API TNET_INLINE unsigned short tnet_htons_2(const void* px);
TINYNET_API TNET_INLINE unsigned long tnet_htonl(unsigned long x);
TINYNET_API TNET_INLINE unsigned long tnet_htonl_2(const void* px);
TINYNET_API TNET_INLINE tsk_bool_t tnet_is_BE();
#define tnet_ntohs(x) tnet_htons(x)
#define tnet_ntohs_2(px) tnet_htons_2(px)
#define tnet_ntohl(x) tnet_htonl(x)
#define tnet_ntohl_2(px) tnet_htonl_2(px)
TNET_BEGIN_DECLS

View File

@ -115,7 +115,7 @@ int __pred_find_turn_channel_binding(const tsk_list_item_t* item, const void* id
/**
* Formats binary IP address as string.
*
* @param in_ip The binary IP address to format.
* @param in_ip The binary IP address to format (in Host byte order).
* @param family The address family.
* @param [in,out] out_ip The output string
*
@ -123,18 +123,29 @@ int __pred_find_turn_channel_binding(const tsk_list_item_t* item, const void* id
**/
int tnet_stun_address_tostring(const uint8_t in_ip[16], tnet_stun_addr_family_t family, char** out_ip)
{
if(family == stun_ipv6){
/*if(family == stun_ipv6){
tsk_sprintf(out_ip, "%x:%x:%x:%x:%x:%x:%x:%x",
tnet_ntohs(*((uint16_t*)&in_ip[0])), tnet_ntohs(*((uint16_t*)&in_ip[2])), tnet_ntohs(*((uint16_t*)&in_ip[4])), tnet_ntohs(*((uint16_t*)&in_ip[6])),
tnet_ntohs(*((uint16_t*)&in_ip[8])), tnet_ntohs(*((uint16_t*)&in_ip[10])), tnet_ntohs(*((uint16_t*)&in_ip[12])), tnet_ntohs(*((uint16_t*)&in_ip[14])));
tnet_ntohs_2(&in_ip[0]), tnet_ntohs_2(&in_ip[2]), tnet_ntohs_2(&in_ip[4]), tnet_ntohs_2(&in_ip[6]),
tnet_ntohs_2(&in_ip[8]), tnet_ntohs_2(&in_ip[10]), tnet_ntohs_2(&in_ip[12]), tnet_ntohs_2(&in_ip[14]));
}
else if(family == stun_ipv4){
uint32_t address = *((uint32_t*)in_ip);
address = /*tnet_ntohl*/(address);
tsk_sprintf(out_ip, "%u.%u.%u.%u", (address>>24)&0xFF, (address>>16)&0xFF, (address>>8)&0xFF, (address>>0)&0xFF);
return 0;
}
else{
TSK_DEBUG_ERROR("Unsupported address family: %u.", family);
}*/
if(family == stun_ipv6){
tsk_sprintf(out_ip, "%x:%x:%x:%x:%x:%x:%x:%x",
TSK_TO_UINT16(&in_ip[0]), TSK_TO_UINT16(&in_ip[2]), TSK_TO_UINT16(&in_ip[4]), TSK_TO_UINT16(&in_ip[6]),
TSK_TO_UINT16(&in_ip[8]), TSK_TO_UINT16(&in_ip[10]), TSK_TO_UINT16(&in_ip[12]), TSK_TO_UINT16(&in_ip[14]));
}
else if(family == stun_ipv4){
tsk_sprintf(out_ip, "%u.%u.%u.%u", in_ip[0], in_ip[1], in_ip[2], in_ip[3]);
return 0;
}
else{
TSK_DEBUG_ERROR("Unsupported address family: %u.", family);
}
@ -228,15 +239,25 @@ int tnet_nat_stun_get_reflexive_address(const tnet_nat_context_handle_t* self, t
tnet_stun_binding_t *binding = item->data;
/*STUN2: XOR-MAPPED-ADDRESS */
if(binding->xmaddr){
int ret = tnet_stun_address_tostring(binding->xmaddr->xaddress, binding->xmaddr->family, ipaddress);
*port = /*tnet_ntohs*/(binding->xmaddr->xport);
int ret = 0;
if(ipaddress){
ret = tnet_stun_address_tostring(binding->xmaddr->xaddress, binding->xmaddr->family, ipaddress);
}
if(port){
*port = /*tnet_ntohs*/(binding->xmaddr->xport);
}
return ret;
}
/*STUN1: MAPPED-ADDRESS*/
if(binding->maddr){
int ret = tnet_stun_address_tostring(binding->maddr->address, binding->maddr->family, ipaddress);
*port = /*tnet_ntohs*/(binding->maddr->port);
int ret = 0;
if(ipaddress){
ret = tnet_stun_address_tostring(binding->maddr->address, binding->maddr->family, ipaddress);
}
if(port){
*port = /*tnet_ntohs*/(binding->maddr->port);
}
return ret;
}
}

View File

@ -49,8 +49,10 @@ TNET_BEGIN_DECLS
#define TNET_NAT_DEFAULT_RTO 500
/**@ingroup tnet_nat_group
* Number of retransmission for UDP retransmission in millisecond.
/* 7.2.1. Sending over UDP
Rc SHOULD be configurable and SHOULD have a default of 7.
*/
#define TNET_NAT_DEFAULT_RC 7
#define TNET_NAT_DEFAULT_RC /*7*/3/* 7 is too hight */
/**@ingroup tnet_nat_group
*/
#define TNET_NAT_TCP_UDP_DEFAULT_PORT 3478

View File

@ -109,7 +109,7 @@ const char* tnet_transport_get_description(const tnet_transport_handle_t *handle
}
else{
TSK_DEBUG_ERROR("NULL transport object.");
return 0;
return tsk_null;
}
}
@ -128,18 +128,85 @@ int tnet_transport_get_ip_n_port_2(const tnet_transport_handle_t *handle, tnet_i
{
const tnet_transport_t *transport = handle;
if(transport){
// do not check the master, let the apllication die if "null"
// do not check the master, let the application die if "null"
if(ip){
memcpy(*ip, transport->master->ip, sizeof(transport->master->ip));
}
if(port){
*port = transport->master->port;
}
return 0;
}
else{
TSK_DEBUG_ERROR("NULL transport object.");
return -1;
}
return -1;
}
int tnet_transport_set_natt_ctx(tnet_transport_handle_t *handle, tnet_nat_context_handle_t* natt_ctx)
{
tnet_transport_t *transport = handle;
if(transport && natt_ctx){
TSK_OBJECT_SAFE_FREE(transport->natt_ctx); // delete old
transport->natt_ctx = tsk_object_ref(natt_ctx);
return 0;
}
else{
TSK_DEBUG_ERROR("Invalid parameter");
return -1;
}
}
int tnet_transport_get_public_ip_n_port(const tnet_transport_handle_t *handle, tnet_fd_t fd, tnet_ip_t *ip, tnet_port_t *port)
{
tsk_bool_t stun_ok = tsk_false;
tnet_nat_context_handle_t* natt_ctx;
const tnet_transport_t *transport = handle;
if(!transport){
TSK_DEBUG_ERROR("Invalid parameter");
return -1;
}
if(TNET_SOCKET_TYPE_IS_DGRAM(transport->type) && (natt_ctx = tsk_object_ref(transport->natt_ctx))){
tnet_stun_binding_id_t bind_id = TNET_STUN_INVALID_BINDING_ID;
// if the socket is already monitored by the transport we should pause beacuse both the transport and
// NAT binder will try to read from it
tsk_bool_t pause_socket = (TSK_RUNNABLE(transport)->running || TSK_RUNNABLE(transport)->started);
// FIXME: change when ICE will be fully implemented
TSK_DEBUG_INFO("Getting public address");
// Pause the soket
if(pause_socket){
tnet_transport_pause_socket(transport, fd, tsk_true);
}
// Performs STUN binding
bind_id = tnet_nat_stun_bind(transport->natt_ctx, fd);
// Resume the socket
if(pause_socket){
tnet_transport_pause_socket(transport, fd, tsk_false);
}
if(TNET_STUN_IS_VALID_BINDING_ID(bind_id)){
char* public_ip = tsk_null;
if(tnet_nat_stun_get_reflexive_address(transport->natt_ctx, bind_id, &public_ip, port) == 0){
if(ip && public_ip){
tsk_size_t ip_len = tsk_strlen(public_ip);
memcpy(ip, public_ip, ip_len> sizeof(*ip)?sizeof(*ip):ip_len);
}
stun_ok = tsk_true;
}
TSK_FREE(public_ip);
tnet_nat_stun_unbind(transport->natt_ctx, bind_id);
}
tsk_object_unref(natt_ctx);
}
if(!stun_ok){
return tnet_transport_get_ip_n_port(handle, fd, ip, port);
}
return 0;
}
tnet_socket_type_t tnet_transport_get_type(const tnet_transport_handle_t *handle)
@ -154,6 +221,18 @@ tnet_socket_type_t tnet_transport_get_type(const tnet_transport_handle_t *handle
return tnet_socket_type_invalid;
}
tnet_fd_t tnet_transport_get_master_fd(const tnet_transport_handle_t *handle)
{
if(handle){
const tnet_transport_t *transport = handle;
return transport->master->fd;
}
else{
TSK_DEBUG_ERROR("NULL transport object.");
}
return TNET_INVALID_FD;
}
/**
* Connects a socket.
* @param handle The transport to use to connect() the socket. The new socket will be managed by this transport.
@ -282,7 +361,7 @@ static void *run(void* self)
tsk_list_item_t *curr;
tnet_transport_t *transport = self;
TSK_RUNNABLE(transport)->running = tsk_true; // VERY IMPORTANT --> needed by the main thread
TSK_DEBUG_INFO("Transport::run() - enter");
/* create main thread */
if((ret = tsk_thread_create(transport->mainThreadId, tnet_transport_mainthread, transport))){ /* More important than "tsk_runnable_start" ==> start it first. */
@ -293,8 +372,7 @@ static void *run(void* self)
TSK_RUNNABLE_RUN_BEGIN(transport);
if((curr = TSK_RUNNABLE_POP_FIRST(transport)))
{
if((curr = TSK_RUNNABLE_POP_FIRST(transport))){
const tnet_transport_event_t *e = (const tnet_transport_event_t*)curr->data;
if(transport->callback){
@ -305,6 +383,8 @@ static void *run(void* self)
TSK_RUNNABLE_RUN_END(transport);
TSK_DEBUG_INFO("Transport::run() - exit");
return tsk_null;
}
@ -355,6 +435,7 @@ static tsk_object_t* tnet_transport_dtor(tsk_object_t * self)
tnet_transport_shutdown(transport);
TSK_OBJECT_SAFE_FREE(transport->master);
TSK_OBJECT_SAFE_FREE(transport->context);
TSK_OBJECT_SAFE_FREE(transport->natt_ctx);
TSK_FREE(transport->description);
TSK_FREE(transport->local_ip);

View File

@ -34,6 +34,8 @@
#include "tnet_socket.h"
#include "tnet_utils.h"
#include "tnet_nat.h"
#include "tsk_runnable.h"
TNET_BEGIN_DECLS
@ -75,11 +77,14 @@ TINYNET_API int tnet_transport_issecure(const tnet_transport_handle_t *handle);
TINYNET_API const char* tnet_transport_get_description(const tnet_transport_handle_t *handle);
TINYNET_API int tnet_transport_get_ip_n_port(const tnet_transport_handle_t *handle, tnet_fd_t fd, tnet_ip_t *ip, tnet_port_t *port);
TINYNET_API int tnet_transport_get_ip_n_port_2(const tnet_transport_handle_t *handle, tnet_ip_t *ip, tnet_port_t *port);
TINYNET_API int tnet_transport_set_natt_ctx(tnet_transport_handle_t *handle, tnet_nat_context_handle_t* natt_ctx);
TINYNET_API int tnet_transport_get_public_ip_n_port(const tnet_transport_handle_t *handle, tnet_fd_t fd, tnet_ip_t *ip, tnet_port_t *port);
TINYNET_API int tnet_transport_isconnected(const tnet_transport_handle_t *handle, tnet_fd_t fd);
TINYNET_API int tnet_transport_have_socket(const tnet_transport_handle_t *handle, tnet_fd_t fd);
TINYNET_API const tnet_tls_socket_handle_t* tnet_transport_get_tlshandle(const tnet_transport_handle_t *handle, tnet_fd_t fd);
TINYNET_API int tnet_transport_add_socket(const tnet_transport_handle_t *handle, tnet_fd_t fd, tnet_socket_type_t type, tsk_bool_t take_ownership, tsk_bool_t isClient);
TINYNET_API int tnet_transport_pause_socket(const tnet_transport_handle_t *handle, tnet_fd_t fd, tsk_bool_t pause);
TINYNET_API int tnet_transport_remove_socket(const tnet_transport_handle_t *handle, tnet_fd_t* fd);
TINYNET_API tnet_fd_t tnet_transport_connectto(const tnet_transport_handle_t *handle, const char* host, tnet_port_t port, tnet_socket_type_t type);
#define tnet_transport_connectto_2(handle, host, port) tnet_transport_connectto(handle, host, port, tnet_transport_get_type(handle))
@ -89,6 +94,7 @@ TINYNET_API tsk_size_t tnet_transport_sendto(const tnet_transport_handle_t *hand
TINYNET_API int tnet_transport_set_callback(const tnet_transport_handle_t *handle, tnet_transport_cb_f callback, const void* callback_data);
TINYNET_API tnet_socket_type_t tnet_transport_get_type(const tnet_transport_handle_t *handle);
TINYNET_API tnet_fd_t tnet_transport_get_master_fd(const tnet_transport_handle_t *handle);
TINYNET_API int tnet_transport_shutdown(tnet_transport_handle_t* handle);
typedef struct tnet_transport_s
@ -97,6 +103,7 @@ typedef struct tnet_transport_s
tnet_socket_type_t type;
char* local_ip;
tnet_nat_context_handle_t* natt_ctx;
tnet_socket_t *master;
tsk_object_t *context;

View File

@ -47,6 +47,7 @@ typedef struct transport_socket_s
tnet_fd_t fd;
tsk_bool_t owner;
tsk_bool_t connected;
tsk_bool_t paused;
tnet_socket_type_t type;
tnet_tls_socket_handle_t* tlshandle;
@ -103,7 +104,7 @@ int tnet_transport_add_socket(const tnet_transport_handle_t *handle, tnet_fd_t f
// signal
if(context->pipeW){
if((ret = write(context->pipeW, &c, 1)) > 0){
TSK_DEBUG_INFO("Socket added.");
TSK_DEBUG_INFO("Socket added (external call) %d", fd);
return 0;
}
else{
@ -116,8 +117,27 @@ int tnet_transport_add_socket(const tnet_transport_handle_t *handle, tnet_fd_t f
}
}
/* Remove socket
*/
int tnet_transport_pause_socket(const tnet_transport_handle_t *handle, tnet_fd_t fd, tsk_bool_t pause)
{
tnet_transport_t *transport = (tnet_transport_t*)handle;
transport_context_t *context;
transport_socket_t* socket;
if(!transport || !(context = (transport_context_t*)transport->context)){
TSK_DEBUG_ERROR("Invalid parameter");
return -1;
}
if((socket = getSocket(context, fd))){
socket->paused = pause;
}
else{
TSK_DEBUG_WARN("Socket does not exist in this context");
}
return 0;
}
/* Remove socket */
int tnet_transport_remove_socket(const tnet_transport_handle_t *handle, tnet_fd_t *fd)
{
tnet_transport_t *transport = (tnet_transport_t*)handle;
@ -126,6 +146,8 @@ int tnet_transport_remove_socket(const tnet_transport_handle_t *handle, tnet_fd_
tsk_size_t i;
tsk_bool_t found = tsk_false;
TSK_DEBUG_INFO("Removing socket %d", *fd);
if(!transport){
TSK_DEBUG_ERROR("Invalid server handle.");
return ret;
@ -226,6 +248,7 @@ int tnet_transport_have_socket(const tnet_transport_handle_t *handle, tnet_fd_t
return (getSocket((transport_context_t*)transport->context, fd) != 0);
}
const tnet_tls_socket_handle_t* tnet_transport_get_tlshandle(const tnet_transport_handle_t *handle, tnet_fd_t fd)
{
tnet_transport_t *transport = (tnet_transport_t*)handle;
@ -280,7 +303,7 @@ int addSocket(tnet_fd_t fd, tnet_socket_type_t type, tnet_transport_t *transport
tsk_safeobj_lock(context);
context->ufds[context->count].fd = fd;
context->ufds[context->count].events = context->events;
context->ufds[context->count].events = (fd == context->pipeR) ? TNET_POLLIN : context->events;
context->ufds[context->count].revents = 0;
context->sockets[context->count] = sock;
@ -288,7 +311,7 @@ int addSocket(tnet_fd_t fd, tnet_socket_type_t type, tnet_transport_t *transport
tsk_safeobj_unlock(context);
TSK_DEBUG_INFO("Socket added");
TSK_DEBUG_INFO("Socket added %d", fd);
return 0;
}
@ -362,7 +385,7 @@ int tnet_transport_stop(tnet_transport_t *transport)
}
context = transport->context;
if((ret = tsk_runnable_stop(TSK_RUNNABLE(transport)))){
return ret;
}
@ -371,7 +394,9 @@ int tnet_transport_stop(tnet_transport_t *transport)
static char c = '\0';
// signal
tsk_safeobj_lock(context); // =>MUST
write(context->pipeW, &c, 1);
tsk_safeobj_unlock(context);
}
if(transport->mainThreadId[0]){
@ -405,11 +430,11 @@ int tnet_transport_prepare(tnet_transport_t *transport)
/* set events */
context->events = TNET_POLLIN | TNET_POLLNVAL | TNET_POLLERR;
if(TNET_SOCKET_TYPE_IS_STREAM(transport->master->type)){
context->events |= TNET_POLLPRI
#if !defined(ANDROID)
| TNET_POLLHUP
#endif
;
// context->events |= TNET_POLLPRI
//#if !defined(ANDROID)
// | TNET_POLLHUP /* FIXME: always present */
//#endif
// ;
}
/* Start listening */
@ -431,11 +456,13 @@ int tnet_transport_prepare(tnet_transport_t *transport)
context->pipeW = pipes[1];
/* add R side */
TSK_DEBUG_INFO("pipeR fd=%d", context->pipeR);
if((ret = addSocket(context->pipeR, transport->master->type, transport, tsk_true, tsk_false))){
goto bail;
}
/* Add the master socket to the context. */
TSK_DEBUG_INFO("master fd=%d", transport->master->fd);
if((ret = addSocket(transport->master->fd, transport->master->type, transport, tsk_true, tsk_false))){
TSK_DEBUG_ERROR("Failed to add master socket");
goto bail;
@ -461,8 +488,7 @@ int tnet_transport_unprepare(tnet_transport_t *transport)
}
if(!transport->prepared){
TSK_DEBUG_ERROR("Transport not prepared.");
return -2;
return 0;
}
transport->prepared = tsk_false;
@ -492,14 +518,13 @@ void *tnet_transport_mainthread(void *param)
TSK_DEBUG_INFO("Starting [%s] server with IP {%s} on port {%d}...", transport->description, transport->master->ip, transport->master->port);
while(TSK_RUNNABLE(transport)->running)
{
while(TSK_RUNNABLE(transport)->running || TSK_RUNNABLE(transport)->started){
if((ret = tnet_poll(context->ufds, context->count, -1)) < 0){
TNET_PRINT_LAST_ERROR("poll have failed.");
goto bail;
}
if(!TSK_RUNNABLE(transport)->running){
if(!TSK_RUNNABLE(transport)->running && !TSK_RUNNABLE(transport)->started){
goto bail;
}
@ -509,7 +534,19 @@ void *tnet_transport_mainthread(void *param)
/* == == */
for(i=0; i<context->count; i++)
{
if(!context->ufds[i].revents || context->ufds[i].fd == context->pipeR){
if(!context->ufds[i].revents){
continue;
}
if(context->ufds[i].fd == context->pipeR){
if(context->ufds[i].revents & TNET_POLLIN){
static char __buffer[64];
if(read(context->pipeR, __buffer, sizeof(__buffer))<0){
TNET_PRINT_LAST_ERROR("Failed to read from the Pipe");
}
}
TSK_DEBUG_INFO("PipeR event %d", context->ufds[i].revents);
context->ufds[i].revents = 0;
continue;
}
@ -520,11 +557,22 @@ void *tnet_transport_mainthread(void *param)
if(context->ufds[i].revents & TNET_POLLIN)
{
tsk_size_t len = 0;
void* buffer = 0;
void* buffer = tsk_null;
tnet_transport_event_t* e;
/* TSK_DEBUG_INFO("NETWORK EVENT FOR SERVER [%s] -- TNET_POLLIN", transport->description); */
//
// FIXME: check if accept() is needed or not
//
/* check whether the socket is paused or not */
if(active_socket->paused){
TSK_DEBUG_INFO("Socket is paused");
break;
}
/* Retrieve the amount of pending data.
* IMPORTANT: If you are using Symbian please update your SDK to the latest build (August 2009) to have 'FIONREAD'.
* This apply whatever you are using the 3rd or 5th edition.

View File

@ -43,6 +43,7 @@ typedef struct transport_socket_s
tnet_fd_t fd;
unsigned owner:1;
unsigned connected:1;
unsigned paused:1;
tnet_socket_type_t type;
tnet_tls_socket_handle_t* tlshandle;
@ -160,6 +161,26 @@ int tnet_transport_add_socket(const tnet_transport_handle_t *handle, tnet_fd_t f
return -1;
}
int tnet_transport_pause_socket(const tnet_transport_handle_t *handle, tnet_fd_t fd, tsk_bool_t pause)
{
tnet_transport_t *transport = (tnet_transport_t*)handle;
transport_context_t *context;
transport_socket_t* socket;
if(!transport || !(context = (transport_context_t*)transport->context)){
TSK_DEBUG_ERROR("Invalid parameter");
return -1;
}
if((socket = getSocket(context, fd))){
socket->paused = pause;
}
else{
TSK_DEBUG_WARN("Socket does not exist in this context");
}
return 0;
}
/* Remove socket
*/
int tnet_transport_remove_socket(const tnet_transport_handle_t *handle, tnet_fd_t* fd)
@ -170,14 +191,9 @@ int tnet_transport_remove_socket(const tnet_transport_handle_t *handle, tnet_fd_
tsk_size_t i;
tsk_bool_t found = tsk_false;
if(!transport){
TSK_DEBUG_ERROR("Invalid server handle.");
return ret;
}
if(!(context = (transport_context_t*)transport->context)){
TSK_DEBUG_ERROR("Invalid context.");
return -2;
if(!transport || !(context = (transport_context_t*)transport->context)){
TSK_DEBUG_ERROR("Invalid parameter");
return -1;
}
for(i=0; i<context->count; i++){
@ -362,8 +378,7 @@ static int removeSocket(int index, transport_context_t *context)
tsk_safeobj_lock(context);
if(index < (int)context->count)
{
if(index < (int)context->count){
/* Close the socket if we are the owner. */
if(context->sockets[index]->owner){
@ -474,8 +489,7 @@ int tnet_transport_unprepare(tnet_transport_t *transport)
}
if(!transport->prepared){
TSK_DEBUG_ERROR("Transport not prepared.");
return -2;
return 0;
}
transport->prepared = tsk_false;
@ -503,7 +517,7 @@ void *tnet_transport_mainthread(void *param)
TSK_DEBUG_INFO("Starting [%s] server with IP {%s} on port {%d}...", transport->description, transport->master->ip, transport->master->port);
while(TSK_RUNNABLE(transport)->running)
while(TSK_RUNNABLE(transport)->running || TSK_RUNNABLE(transport)->started)
{
/* Wait for multiple events */
if((evt = WSAWaitForMultipleEvents(context->count, context->events, FALSE, WSA_INFINITE, FALSE)) == WSA_WAIT_FAILED){
@ -511,7 +525,7 @@ void *tnet_transport_mainthread(void *param)
goto bail;
}
if(!TSK_RUNNABLE(transport)->running){
if(!TSK_RUNNABLE(transport)->running && !TSK_RUNNABLE(transport)->started){
goto bail;
}
@ -594,6 +608,12 @@ void *tnet_transport_mainthread(void *param)
/* TSK_DEBUG_INFO("NETWORK EVENT FOR SERVER [%s] -- FD_READ", transport->description); */
/* check whether the socket is paused or not */
if(active_socket->paused){
TSK_DEBUG_INFO("Socket is paused");
break;
}
if(networkEvents.iErrorCode[FD_READ_BIT]){
TSK_RUNNABLE_ENQUEUE(transport, event_error, transport->callback_data, active_socket->fd);
TNET_PRINT_LAST_ERROR("READ FAILED.");

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