Пример #1
0
/**
 * Process notification routine.
 */
static void
process_notify_cb(fetion_account *ac, const gchar *sipmsg)
{
    gint notify_type;
    gint event_type;

    sip_parse_notify(sipmsg, &notify_type, &event_type);

    if (notify_type == NOTIFICATION_TYPE_UNKNOWN ||
            event_type == NOTIFICATION_EVENT_UNKNOWN) {

        hybrid_debug_info("fetion", "recv unknown notification:\n%s", sipmsg);
        return;
    }

    switch (notify_type) {

        case NOTIFICATION_TYPE_PRESENCE:
            if (event_type == NOTIFICATION_EVENT_PRESENCECHANGED) {
                process_presence(ac, sipmsg);
            }
            break;

        case NOTIFICATION_TYPE_CONVERSATION :
            if (event_type == NOTIFICATION_EVENT_USERLEFT) {
                process_left_cb(ac, sipmsg);
                break;

            } else     if (event_type == NOTIFICATION_EVENT_USERENTER) {
                process_enter_cb(ac, sipmsg);
                break;
            }
            break;

        case NOTIFICATION_TYPE_REGISTRATION :
            if (event_type == NOTIFICATION_EVENT_DEREGISTRATION) {
                process_dereg_cb(ac, sipmsg);
            }
            break;

        case NOTIFICATION_TYPE_SYNCUSERINFO :
            if (event_type == NOTIFICATION_EVENT_SYNCUSERINFO) {
                process_sync_info(ac, sipmsg);
            }
            break;

        case NOTIFICATION_TYPE_CONTACT :
            if (event_type == NOTIFICATION_EVENT_ADDBUDDYAPPLICATION) {
                process_add_buddy(ac, sipmsg);
            }
            break;
#if 0
        case NOTIFICATION_TYPE_PGGROUP :
            break;
#endif
        default:
            break;
    }
}
Пример #2
0
static void process_notify_cb(fetion_account *ac, const gchar *sipmsg)
{
	gint   event;
	gint   notification_type;
	gchar  *xml;

	fetion_sip_parse_notification(sipmsg , &notification_type , &event , &xml);

	switch(notification_type) {
		case NOTIFICATION_TYPE_PRESENCE:
			if(event == NOTIFICATION_EVENT_PRESENCECHANGED)	process_presence(ac , xml);
			break;
		case NOTIFICATION_TYPE_CONVERSATION :
			if(event == NOTIFICATION_EVENT_USERLEFT) {
				process_left_cb(ac, sipmsg);
				break;
			} else 	if(event == NOTIFICATION_EVENT_USERENTER) {
				process_enter_cb(ac, sipmsg);
				break;
			}
			break;
		case NOTIFICATION_TYPE_REGISTRATION :
			if(event == NOTIFICATION_EVENT_DEREGISTRATION)	process_dereg_cb(ac, sipmsg);
			break;
		case NOTIFICATION_TYPE_SYNCUSERINFO :
			if(event == NOTIFICATION_EVENT_SYNCUSERINFO)	process_sync_info(ac, sipmsg);
			break;
		case NOTIFICATION_TYPE_CONTACT :
			if(event == NOTIFICATION_EVENT_ADDBUDDYAPPLICATION)	process_add_buddy(ac, sipmsg);
			break;
#if 0
		case NOTIFICATION_TYPE_PGGROUP :
			break;
#endif
		default:
			break;
	}
	g_free(xml);
}