[doubango Programmer's Guide] 4.3.2 tinySigComp -->SigComp UDP compression 翻译

 原文:http://doubango.org/API/tinySigComp/tcomp_udp_compression_page.html

SigComp之UDP压缩

-------------------

对于压缩一个SIP消息体并以UDP的方式发送出去是很就简单的。由于tinySigComp是线程安全的,所以压缩过程能够在多线程程序中很安全的完成。为了能编译你的代码,你需要做以下与tinySigComp相关的操作。

头文件包含:

 #include "tsk_debug.h" // tinySAK 调试函数
 #include "tcomp_manager.h" // tinySigComp API 接口函数.


分割标识符:用在SIP消息体内(sigomp-id) 并且tinySigComp分配和释放内存与此标识符有关。

 #define COMPARTMENT_ID         "urn:uuid:2e5fdc76-00be-4314-8202-1116fa82a475"


准备:

 #define MAX_BUFFER_SIZE 0xFFFF
 
 int i = 0;
 tsk_size_t outLen = 0;
 tcomp_result_t *result = 0;
 char outputBuffer[MAX_BUFFER_SIZE]; 
 
 tcomp_manager_handle_t *manager = 0;

 // Create SigComp manager
 manager = TCOMP_MANAGER_CREATE();

 // Add SIP/Presence dictionnaries (not mandatory)
 tcomp_manager_addSipSdpDictionary(manager);
 tcomp_manager_addPresenceDictionary(manager);

 // Create result object and set compartment id --> It is recomanded to use one result object per manager.
 result = TCOMP_RESULT_CREATE();
 tcomp_result_setCompartmentId(result, COMPARTMENT_ID, strlen(COMPARTMENT_ID));

 // Set user parameters (not mandatory)
 tcomp_manager_setDecompression_Memory_Size(manager, 8192);
 tcomp_manager_setCycles_Per_Bit(manager, 64);
 tcomp_manager_setState_Memory_Size(manager, 8192);

利用如下方式压缩一个或者多个消息体:

// Compress the SIP message
 outLen = tcomp_manager_compress(manager, 
 COMPARTMENT_ID, strlen(COMPARTMENT_ID), // Compartment
 "REGISTER ...", strlen("REGISTER ..."), // Sip message to compress and it's size
 outputBuffer, sizeof(outputBuffer), // The ouptut buffer and it's size
 FALSE // Indicates whether to compress as stream (SCTP, TCP...) message or not
 );
 
 if(outLen){
                // send SigComp message over UDP connection
                sendto(sock, outputBuffer, outLen , 0, (SOCKADDR *)address, sizeof(address));
        }
        else{
                // MUST never happen.
 }


安全的释放所有资源:

 // Close the compartment
 tcomp_manager_closeCompartment(manager, COMPARTMENT_ID, strlen(COMPARTMENT_ID));
 // Delete the result object
 TSK_OBJECT_SAFE_FREE(result);
 // Delete the manager
 TSK_OBJECT_SAFE_FREE(manager);

--------------------------------------------------------------------------------



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值