有非常浅薄的应用场景,去简单地使用SIP消息,而OSIP2 SIP协议栈,其开源证书相对友好,又同时支持了解析、构造消息,但无事务层、对话层状态机涉入的可能。
简单地使用osip2消息子层sublayer模式如此:
/ / allocation/release of memory.
xxxx_init(osip_xxx_t **el);
xxxx_free(osip_xxx_t *el);
xxxx_parse(osip_xxx_t *el, char *source); xxxx_to_str(osip_xxx_t *el, char **dest);
消息buffer自己利用套接字进行收发。但,首要地是要完成在QT下的编译。
最开始觉得这件事情,可能是件非常困难的事情,但是后来想想,其实自己忽略了OSIP2自己提供的configure脚本以及自带vs平台工程文件的指导价值。
简单参考了下上述信息,考虑了多线程的编译设置问题,在QT选择库工程顺利地完成了编译!!!
# 共享pro文件设置
TEMPLATE = lib
CONFIG -= qt
CONFIG += staticlib
CONFIG += c++11
TARGET = osip2
INCLUDEPATH += include/
QMAKE_CFLAGS += -lpthread
#QMAKE_CXXFLAGS += -finput-charset
DEFINES+=HAVE_STRUCT_TIMEVAL HAVE_PTHREAD HAVE_SYS_SEM_H HAVE_FCNTL_H HAVE_SYS_TYPES_H
SOURCES += \
...省略
HEADERS += \
...省略
后来写一个小测试程序,就疑惑于在测试程序,链接osio2库的当前路径,使用$$PWD代表了工程所在的目录,解决了此问题。也了解到了,QT的pro文件中的相对路径,在编译和链接阶段具有二义性,用环境变量就可以顺利规避此问题。
LIBS+=-L$$PWD/lib/ -losip2
# 两个不太完美的小尾巴
+ 为了让编译通过,自己从网上代码段,添加了联合结构semun的代码生命
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO (Linux specific) */
};
+ osip_mutex_t的前置声明
先使用起来为先,应该也不影响啥了......