comparison mcabber/mcabber/xmpp_iq.c @ 2066:69699ba3010f

Add 'iq_version_hide', 'iq_version_hide_version'
author Mikael Berthe <mikael@lilotux.net>
date Sun, 28 Apr 2013 11:25:13 +0200
parents c09fc3834c69
children 79659eb4f66f
comparison
equal deleted inserted replaced
2065:c09fc3834c69 2066:69699ba3010f
700 LmHandlerResult handle_iq_version(LmMessageHandler *h, LmConnection *c, 700 LmHandlerResult handle_iq_version(LmMessageHandler *h, LmConnection *c,
701 LmMessage *m, gpointer ud) 701 LmMessage *m, gpointer ud)
702 { 702 {
703 LmMessage *r; 703 LmMessage *r;
704 LmMessageNode *query; 704 LmMessageNode *query;
705 char *os = NULL;
706 char *ver = mcabber_version();
707 705
708 if (!settings_opt_get_int("iq_hide_requests")) { 706 if (!settings_opt_get_int("iq_hide_requests")) {
709 scr_LogPrint(LPRINT_LOGNORM, "Received an IQ version request from <%s>", 707 scr_LogPrint(LPRINT_LOGNORM, "Received an IQ version request from <%s>",
710 lm_message_get_from(m)); 708 lm_message_get_from(m));
711 } 709 }
710
711 if (settings_opt_get_int("iq_version_hide")) {
712 send_iq_error(c, m, XMPP_ERROR_SERVICE_UNAVAILABLE);
713 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
714 }
715
716 r = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_RESULT);
717
718 query = lm_message_node_add_child(r->node, "query", NULL);
719 lm_message_node_set_attribute(query, "xmlns", NS_VERSION);
720
721 lm_message_node_add_child(query, "name", PACKAGE_NAME);
722
723 // MCabber version
724 if (!settings_opt_get_int("iq_version_hide_version")) {
725 char *ver = mcabber_version();
726 lm_message_node_add_child(query, "version", ver);
727 g_free(ver);
728 }
729
730 // OS details
712 if (!settings_opt_get_int("iq_version_hide_os")) { 731 if (!settings_opt_get_int("iq_version_hide_os")) {
732 char *os;
713 struct utsname osinfo; 733 struct utsname osinfo;
714 uname(&osinfo); 734 uname(&osinfo);
715 os = g_strdup_printf("%s %s %s", osinfo.sysname, osinfo.release, 735 os = g_strdup_printf("%s %s %s", osinfo.sysname, osinfo.release,
716 osinfo.machine); 736 osinfo.machine);
717 }
718
719 r = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_RESULT);
720
721 query = lm_message_node_add_child(r->node, "query", NULL);
722 lm_message_node_set_attribute(query, "xmlns", NS_VERSION);
723
724 lm_message_node_add_child(query, "name", PACKAGE_NAME);
725 lm_message_node_add_child(query, "version", ver);
726 if (os) {
727 lm_message_node_add_child(query, "os", os); 737 lm_message_node_add_child(query, "os", os);
728 g_free(os); 738 g_free(os);
729 } 739 }
730 740
731 g_free(ver);
732 lm_connection_send(c, r, NULL); 741 lm_connection_send(c, r, NULL);
733 lm_message_unref(r); 742 lm_message_unref(r);
734 return LM_HANDLER_RESULT_REMOVE_MESSAGE; 743 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
735 } 744 }
736 745