有非常淺薄的應用場景,去簡單地使用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的前置聲明
先使用起來爲先,應該也不影響啥了......