eXosip协议栈主动发送notify数据包的问题

一般认为,通讯设备A通过发送subscribe数据包订阅通讯设备B的状态信息。如果有状态更新,B会给A回复notify数据包。在eXosip协议栈中,notify数据包的发送都是对于Subscribe请求的应答。那么eXosip协议栈是否支持直接发送notify数据包呢?答案是肯定的。

eXosip协议栈中提供int eXosip_message_build_request (osip_message_t **message, const char *method, const char *to, const char *from, const char *route)函数主动上报消息。其中method可以指定消息类型为"notify"或者"message"。

消息组装完后,通过int eXosip_message_send_request (osip_message_t *message)函数主动发出。代码举例如下:

//发送Notify消息
int SendNotify(const char *source_call, char *dest_call, const char* eventvalue, const char* msg, const char* msgtype)
{
	int i =0;

	//初始化
	i = eXosip_init();
	if (i != 0)
	{
		printf("Can not initialize eXosip!\n");
		return -1;
	}

	 i = eXosip_listen_addr(IPPROTO_UDP, NULL, 15060, AF_INET, 0);
     if (i != 0)
     {
		 eXosip_quit ();
		 return -1;
	 }
	
	
	osip_message_t *message=NULL;
	char tmp[1024];
	
	i = eXosip_message_build_request(&message, "notify", dest_call, source_call, NULL);
	                                 //内容,  方法,   to   ,   from  ,  route
	if (i != 0)
	{
		return -1;
	}
	else
	{
		osip_message_set_header(message, "Event", eventvalue);
		if (msg != NULL)
		{
			_snprintf(tmp,1024,msg);
			osip_message_set_body(message,tmp,strlen(tmp));
			osip_message_set_content_type(message, msgtype);
		}
		i = eXosip_message_send_request(message);
		if (i != 0)
		{
			return -1;
		}
	}
	
	return 0;
}


猜你喜欢

转载自blog.csdn.net/candy1232009/article/details/38945287