Update v2.x

This commit is contained in:
bossiel 2011-05-11 07:22:48 +00:00
parent 873f61b8ce
commit 885bef94c8
4 changed files with 71 additions and 42 deletions

View File

@ -23,25 +23,25 @@
SdpMessage::SdpMessage()
:sdpmessage(tsk_null)
:m_pSdpMessage(tsk_null)
{
}
SdpMessage::SdpMessage(tsdp_message_t *_sdpmessage)
{
this->sdpmessage = (tsdp_message_t *)tsk_object_ref(_sdpmessage);
m_pSdpMessage = (tsdp_message_t *)tsk_object_ref(_sdpmessage);
}
SdpMessage::~SdpMessage()
{
TSK_OBJECT_SAFE_FREE(this->sdpmessage);
TSK_OBJECT_SAFE_FREE(m_pSdpMessage);
}
char* SdpMessage::getSdpHeaderValue(const char* media, char name, unsigned index /*= 0*/)
{
const tsdp_header_M_t* M;
if((M = (const tsdp_header_M_t*)tsdp_message_get_header(this->sdpmessage, tsdp_htype_M))){
if((M = (const tsdp_header_M_t*)tsdp_message_get_header(m_pSdpMessage, tsdp_htype_M))){
tsdp_header_type_t type = tsdp_htype_Dummy;
const tsdp_header_t* header;
switch(name){
@ -64,7 +64,7 @@ char* SdpMessage::getSdpHeaderValue(const char* media, char name, unsigned index
case 'z': type = tsdp_htype_Z; break;
}
if((header = tsdp_message_get_headerAt(this->sdpmessage, type, index))){
if((header = tsdp_message_get_headerAt(m_pSdpMessage, type, index))){
return tsdp_header_tostring(header);
}
}
@ -77,7 +77,7 @@ char* SdpMessage::getSdpHeaderAValue(const char* media, const char* attributeNam
const tsdp_header_M_t* M;
tsk_size_t i;
for(i = 0; (M = (const tsdp_header_M_t*)tsdp_message_get_headerAt(this->sdpmessage, tsdp_htype_M, i)); i++){
for(i = 0; (M = (const tsdp_header_M_t*)tsdp_message_get_headerAt(m_pSdpMessage, tsdp_htype_M, i)); i++){
if(tsk_striequals(M->media, media)){
const tsdp_header_A_t* A;
if((A = tsdp_header_M_findA(M, attributeName))){
@ -91,21 +91,21 @@ char* SdpMessage::getSdpHeaderAValue(const char* media, const char* attributeNam
SipMessage::SipMessage()
:sipmessage(tsk_null), sdpmessage(tsk_null)
:m_pSipMessage(tsk_null), m_pSdpMessage(tsk_null)
{
}
SipMessage::SipMessage(tsip_message_t *_sipmessage)
: sdpmessage(tsk_null)
: m_pSdpMessage(tsk_null)
{
this->sipmessage = (tsip_message_t *)tsk_object_ref(_sipmessage);
m_pSipMessage = (tsip_message_t *)tsk_object_ref(_sipmessage);
}
SipMessage::~SipMessage()
{
TSK_OBJECT_SAFE_FREE(this->sipmessage);
if(this->sdpmessage){
delete this->sdpmessage;
TSK_OBJECT_SAFE_FREE(m_pSipMessage);
if(m_pSdpMessage){
delete m_pSdpMessage;
}
}
@ -118,58 +118,58 @@ const tsip_header_t* SipMessage::getSipHeader(const char* name, unsigned index /
tsk_size_t pos = 0;
const tsk_list_item_t *item;
const tsip_header_t* hdr = tsk_null;
if(!this->sipmessage || !name){
if(!m_pSipMessage || !name){
return tsk_null;
}
if(tsk_striequals(name, "v") || tsk_striequals(name, "via")){
if(index == 0){
hdr = (const tsip_header_t*)this->sipmessage->firstVia;
hdr = (const tsip_header_t*)m_pSipMessage->firstVia;
goto bail;
}else pos++; }
if(tsk_striequals(name, "f") || tsk_striequals(name, "from")){
if(index == 0){
hdr = (const tsip_header_t*)this->sipmessage->From;
hdr = (const tsip_header_t*)m_pSipMessage->From;
goto bail;
}else pos++; }
if(tsk_striequals(name, "t") || tsk_striequals(name, "to")){
if(index == 0){
hdr = (const tsip_header_t*)this->sipmessage->To;
hdr = (const tsip_header_t*)m_pSipMessage->To;
goto bail;
}else pos++; }
if(tsk_striequals(name, "m") || tsk_striequals(name, "contact")){
if(index == 0){
hdr = (const tsip_header_t*)this->sipmessage->Contact;
hdr = (const tsip_header_t*)m_pSipMessage->Contact;
goto bail;
}else pos++; }
if(tsk_striequals(name, "i") || tsk_striequals(name, "call-id")){
if(index == 0){
hdr = (const tsip_header_t*)this->sipmessage->Call_ID;
hdr = (const tsip_header_t*)m_pSipMessage->Call_ID;
goto bail;
}else pos++; }
if(tsk_striequals(name, "cseq")){
if(index == 0){
hdr = (const tsip_header_t*)this->sipmessage->CSeq;
hdr = (const tsip_header_t*)m_pSipMessage->CSeq;
goto bail;
}else pos++; }
if(tsk_striequals(name, "expires")){
if(index == 0){
hdr = (const tsip_header_t*)this->sipmessage->Expires;
hdr = (const tsip_header_t*)m_pSipMessage->Expires;
goto bail;
}else pos++; }
if(tsk_striequals(name, "c") || tsk_striequals(name, "content-type")){
if(index == 0){
hdr = (const tsip_header_t*)this->sipmessage->Content_Type;
hdr = (const tsip_header_t*)m_pSipMessage->Content_Type;
goto bail;
}else pos++; }
if(tsk_striequals(name, "l") || tsk_striequals(name, "content-length")){
if(index == 0){
hdr = (const tsip_header_t*)this->sipmessage->Content_Length;
hdr = (const tsip_header_t*)m_pSipMessage->Content_Length;
goto bail;
}else pos++; }
tsk_list_foreach(item, this->sipmessage->headers){
tsk_list_foreach(item, m_pSipMessage->headers){
if(tsk_striequals(tsip_header_get_name_2(TSIP_HEADER(item->data)), name)){
if(pos++ >= index){
hdr = (const tsip_header_t*)item->data;
@ -224,7 +224,7 @@ char* SipMessage::getSipHeaderParamValue(const char* name, const char* param, un
*/
unsigned SipMessage::getSipContentLength()
{
return TSIP_MESSAGE_CONTENT_DATA_LENGTH(this->sipmessage);
return TSIP_MESSAGE_CONTENT_DATA_LENGTH(m_pSipMessage);
}
/** Gets the message content
@ -237,22 +237,30 @@ unsigned SipMessage::getSipContentLength()
unsigned SipMessage::getSipContent(void* output, unsigned maxsize)
{
unsigned retsize = 0;
if(output && maxsize && TSIP_MESSAGE_HAS_CONTENT(this->sipmessage)){
retsize = (this->sipmessage->Content->size > maxsize) ? maxsize : this->sipmessage->Content->size;
memcpy(output, this->sipmessage->Content->data, retsize);
if(output && maxsize && TSIP_MESSAGE_HAS_CONTENT(m_pSipMessage)){
retsize = (m_pSipMessage->Content->size > maxsize) ? maxsize : m_pSipMessage->Content->size;
memcpy(output, m_pSipMessage->Content->data, retsize);
}
return retsize;
}
const void* SipMessage::getSipContentPtr()
{
if(m_pSipMessage && m_pSipMessage->Content){
return m_pSipMessage->Content->data;
}
return tsk_null;
}
const SdpMessage* SipMessage::getSdpMessage()
{
if(!this->sdpmessage && TSIP_MESSAGE_HAS_CONTENT(this->sipmessage)){
tsdp_message_t* sdp = tsdp_message_parse(this->sipmessage->Content->data, this->sipmessage->Content->size);
if(!m_pSdpMessage && TSIP_MESSAGE_HAS_CONTENT(m_pSipMessage)){
tsdp_message_t* sdp = tsdp_message_parse(m_pSipMessage->Content->data, m_pSipMessage->Content->size);
if(sdp){
this->sdpmessage = new SdpMessage(sdp);
m_pSdpMessage = new SdpMessage(sdp);
TSK_OBJECT_SAFE_FREE(sdp);
}
}
return this->sdpmessage;
return m_pSdpMessage;
}

View File

@ -37,7 +37,7 @@ public:
char* getSdpHeaderAValue(const char* media, const char* attributeName);
private:
tsdp_message_t *sdpmessage;
tsdp_message_t *m_pSdpMessage;
};
class SipMessage
@ -53,14 +53,17 @@ public:
char* getSipHeaderParamValue(const char* name, const char* param, unsigned index = 0);
unsigned getSipContentLength();
unsigned getSipContent(void* output, unsigned maxsize);
#if !defined(SWIG)
const void* getSipContentPtr();
#endif
const SdpMessage* getSdpMessage();
private:
const tsip_header_t* getSipHeader(const char* name, unsigned index = 0);
private:
tsip_message_t *sipmessage;
SdpMessage *sdpmessage;
tsip_message_t *m_pSipMessage;
SdpMessage *m_pSdpMessage;
};
#endif /* TINYWRAP_SIPMESSAGE_H */

View File

@ -287,10 +287,19 @@ int tsip_dialog_message_Sending_2_Terminated_X_2xx(va_list *app)
*/
int tsip_dialog_message_Sending_2_Sending_X_401_407_421_494(va_list *app)
{
/*tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *);*/
/*const tsip_response_t *response = va_arg(*app, const tsip_response_t *);*/
return 0;
tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *);
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
int ret;
if((ret = tsip_dialog_update(TSIP_DIALOG(self), response))){
/* Alert the user. */
TSIP_DIALOG_MESSAGE_SIGNAL(self, tsip_ao_message,
TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response);
return ret;
}
return send_MESSAGE(self);
}
/* Sending -> (300 to 699) -> Terminated

View File

@ -287,10 +287,19 @@ int tsip_dialog_options_Sending_2_Terminated_X_2xx(va_list *app)
*/
int tsip_dialog_options_Sending_2_Sending_X_401_407_421_494(va_list *app)
{
/*tsip_dialog_options_t *self = va_arg(*app, tsip_dialog_options_t *);*/
/*const tsip_response_t *response = va_arg(*app, const tsip_response_t *);*/
return 0;
tsip_dialog_options_t *self = va_arg(*app, tsip_dialog_options_t *);
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
int ret;
if((ret = tsip_dialog_update(TSIP_DIALOG(self), response))){
/* Alert the user. */
TSIP_DIALOG_OPTIONS_SIGNAL(self, tsip_ao_options,
TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response);
return ret;
}
return send_OPTIONS(self);
}
/* Sending -> (300 to 699) -> Terminated