From 15388683a653b6da7221481f836e79ef9f440db3 Mon Sep 17 00:00:00 2001 From: WonYoung Choi Date: Tue, 28 Aug 2012 13:02:45 +0900 Subject: [PATCH] 2.0 beta open --- AUTHORS | 2 + CMakeLists.txt | 71 +++++++++ LICENSE | 206 ++++++++++++++++++++++++++ capi-messaging-push.pc.in | 15 ++ include/push.h | 290 +++++++++++++++++++++++++++++++++++++ packaging/capi-messaging-push.spec | 50 +++++++ 6 files changed, 634 insertions(+) create mode 100755 AUTHORS create mode 100755 CMakeLists.txt create mode 100755 LICENSE create mode 100755 capi-messaging-push.pc.in create mode 100644 include/push.h create mode 100644 packaging/capi-messaging-push.spec diff --git a/AUTHORS b/AUTHORS new file mode 100755 index 0000000..5f42911 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,2 @@ +WonYoung Choi , JooSeok Park + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..60adbd8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,71 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +SET(fw_name "capi-messaging-push") + +PROJECT(${fw_name}) + +SET(CMAKE_INSTALL_PREFIX /usr) +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) + +SET(INC_DIR include) +INCLUDE_DIRECTORIES(${INC_DIR}) + +SET(dependents "") +SET(pc_dependents "capi-base-common capi-appfw-application push ") + +INCLUDE(FindPkgConfig) +pkg_check_modules(${fw_name} REQUIRED ${dependents}) + +IF("${ARCH}" STREQUAL "arm") + ADD_DEFINITIONS("-DTARGET") +ENDIF("${ARCH}" STREQUAL "arm") + +INSTALL( + DIRECTORY ${INC_DIR}/ DESTINATION include/messaging + FILES_MATCHING + PATTERN "*_private.h" EXCLUDE + PATTERN "${INC_DIR}/*.h" + ) + +SET(PC_NAME ${fw_name}) +SET(PC_REQUIRED ${pc_dependents}) +SET(PC_LDFLAGS -lpush) +SET(PC_CFLAGS -I\${includedir}/messaging) + +CONFIGURE_FILE( + ${fw_name}.pc.in + ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc + @ONLY +) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc DESTINATION lib/pkgconfig) + +IF(UNIX) + +ADD_CUSTOM_TARGET (distclean @echo cleaning for source distribution) +ADD_CUSTOM_COMMAND( + DEPENDS clean + COMMENT "distribution clean" + COMMAND find + ARGS . + -not -name config.cmake -and \( + -name tester.c -or + -name Testing -or + -name CMakeFiles -or + -name cmake.depends -or + -name cmake.check_depends -or + -name CMakeCache.txt -or + -name cmake.check_cache -or + -name *.cmake -or + -name Makefile -or + -name core -or + -name core.* -or + -name gmon.out -or + -name install_manifest.txt -or + -name *.pc -or + -name *~ \) + | grep -v TC | xargs rm -rf + TARGET distclean + VERBATIM +) + +ENDIF(UNIX) + diff --git a/LICENSE b/LICENSE new file mode 100755 index 0000000..bbe9d02 --- /dev/null +++ b/LICENSE @@ -0,0 +1,206 @@ +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + diff --git a/capi-messaging-push.pc.in b/capi-messaging-push.pc.in new file mode 100755 index 0000000..9dc94c8 --- /dev/null +++ b/capi-messaging-push.pc.in @@ -0,0 +1,15 @@ + +# Package Information for pkg-config + +prefix=@PREFIX@ +exec_prefix=/usr +libdir=/usr/lib +includedir=/usr/include + +Name: @PC_NAME@ +Description: @PACKAGE_DESCRIPTION@ +Version: @VERSION@ +Requires: @PC_REQUIRED@ +Libs: -L${libdir} @PC_LDFLAGS@ +Cflags: -I${includedir} @PC_CFLAGS@ + diff --git a/include/push.h b/include/push.h new file mode 100644 index 0000000..d028b36 --- /dev/null +++ b/include/push.h @@ -0,0 +1,290 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apach e License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef __PUSH_LIB_H__ +#define __PUSH_LIB_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup CAPI_MESSAGING_PUSH_MODULE + * @{ + */ + +/** + * @file push.h + * @ingroup CAPI_MESSAGING_FRAMEWORK + * @brief Support to receive push notifications + */ + +/** + * @brief Enumerations of error codes for push API + */ +typedef enum { + PUSH_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */ + PUSH_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */ + PUSH_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */ + PUSH_ERROR_NOT_CONNECTED = TIZEN_ERROR_ENDPOINT_NOT_CONNECTED, /**< Not connected */ + PUSH_ERROR_NO_DATA = TIZEN_ERROR_NO_DATA, /**< No data available */ + PUSH_ERROR_OPERATION_FAILED = TIZEN_ERROR_MESSAGING_CLASS|0x300, /**< Internal operation failed */ +} push_error_e; + +/** + * @brief Enumerations of registration state + */ +typedef enum { + PUSH_STATE_REGISTERED, /**< Registred */ + PUSH_STATE_UNREGISTERED, /**< Unregistered */ + PUSH_STATE_ERROR, /**< Error */ +} push_state_e; + +/** + * @brief Enumerations of result + */ +typedef enum { + PUSH_RESULT_SUCCESS, /**< Successful */ + PUSH_RESULT_TIMEOUT, /**< Request timed out */ + PUSH_RESULT_SERVER_ERROR, /**< Push server error */ + PUSH_RESULT_SYSTEM_ERROR, /**< System error */ +} push_result_e; + +/** + * @brief Handle of a connection to the push service + */ +typedef struct push_connection_s *push_connection_h; + +/** + * @brief Handle of a notification delivered from the push server + */ +typedef struct push_notification_s *push_notification_h; + +/** + * @brief State callback + * @remarks This callback will be invoked when the regisration state is + * refreshed. If the registration or degistration has been succeeded, + * then this state callback must be called. In addition, the state + * can be changed if the push server deregisters the application. + * @param[in] state Registration state + * @param[in] err Error message + * @param[in] user_data User data passed to this callback + * @see push_connect() + */ +typedef void (*push_state_cb)( + push_state_e state, const char *err, void *user_data); + +/** + * @brief Notifcation callback + * @param[in] notification A handle of notification containing its payload. + * The handle is available inside this callback only. + * @param[in] user_data User data passed to this callback + * @see push_connect(), push_get_notification_data() + */ +typedef void (*push_notify_cb)( + push_notification_h noti, void *user_data); + +/** + * @brief Result callback + * @param[in] result Registration/deregistration result + * @param[in] msg Result message from the push server or NULL + * @param[in] user_data User data passed to this callback + * @see push_register(), push_deregister() + */ +typedef void (*push_result_cb)(push_result_e result, const char *msg, void *user_data); + +/** + * @brief Connects to the push service and sets callback functions + * @remarks If there is a connection between an application and the push service, + * the notify callback passes the notification upon its arrival. + * Otherwise, the push service posts a UI notification to alert users. + * Connection should be freed with @ref push_disconnect() by you. + * @param[in] app_id The application ID + * @param[in] state_cb State callback function + * @param[in] notify_cb Notify callback function + * @param[in] user_data User data to pass to state_cb and notify_cb + * @param[out] connection The connection handle to the push service + * @return 0 on success, otherwise a negative error value. + * @retval PUSH_ERROR_NONE Successful + * @retval PUSH_ERROR_INVALID_PARAMETER Invalid parameter + * @retval PUSH_ERROR_OUT_OF_MEMORY Out of memory + * @retval PUSH_ERROR_OPERATION_FAILED Operation failed + * @pre There is no connection for the app_id to the push service + * @post The state callback will be called to let you know the current + * registration state immediately. + * @see push_disconnect() + */ +int push_connect(const char *app_id, push_state_cb state_callback, + push_notify_cb notify_callback, void *user_data, + push_connection_h *connection); + +/** + * @brief Closes the connection and releases all its resources + * @remarks If you call this function in the push callback functions, + * it may cause your application crash. + * @param[in] connection Handle of a connection to the push service + * @see push_connect() + */ +void push_disconnect(push_connection_h connection); + +/** + * @brief Registers an application to the push server + * @param[in] connection The connection handle to the push service + * @param[in] service A @ref Service handle to launch an application by + * an posted UI notification + * @param[in] result_cb Result callback function + * @param[in] user_data User data to pass to result_cb + * @return 0 on success, otherwise a negative error value. + * @retval PUSH_ERROR_NONE Successful + * @retval PUSH_ERROR_INVALID_PARAMETER Invalid parameter + * @retval PUSH_ERROR_OUT_OF_MEMORY Out of memory + * @retval PUSH_ERROR_NOT_CONNECTED No connection to the push service + * @retval PUSH_ERROR_OPERATION_FAILED Operation failed + * @pre The application should be connected to the push service + * @post For successful result, the state callback should be invoked + * @see push_deregister() + */ +int push_register(push_connection_h connection, service_h service, + push_result_cb result_callback, void *user_data); + +/** + * @brief Deregisters an application from the Push server + * @param[in] connection The connection handle to the push service + * @param[in] result_cb Result callback function + * @param[in] user_data User data to pass to result_cb + * @return 0 on success, otherwise a negative error value. + * @retval PUSH_ERROR_NONE Successful + * @retval PUSH_ERROR_INVALID_PARAMETER Invalid parameter + * @retval PUSH_ERROR_OUT_OF_MEMORY Out of memory + * @retval PUSH_ERROR_NOT_CONNECTED No connection to the push service + * @retval PUSH_ERROR_OPERATION_FAILED Operation failed + * @pre The application should be connected to the push service + * @post In result, the state callback will be invoked + * @see push_register() + */ +int push_deregister(push_connection_h connection, push_result_cb callback, + void *user_data); + +/** + * @brief Gets notification data which its server sent + * @remark The data must be released with free() by you + * @param[in] notification The notification handle + * @param[out] data The notification data\n + * Set NULL if error but PUSH_ERROR_INVALID_PARAMETER + * @return 0 on success, otherwise a negative error value. + * @retval PUSH_ERROR_NONE Successful + * @retval PUSH_ERROR_INVALID_PARAMETER Invalid parameter + * @retval PUSH_ERROR_OUT_OF_MEMORY Out of memory + * @retval PUSH_ERROR_NO_DATA No data available + * @see push_notify_cb() + * @see push_get_unread_notification() + */ +int push_get_notification_data(push_notification_h notification, char **data); + + +/** + * @brief Gets the notification message which its server sent + * @remark The msg must be released with free() by you + * @param[in] notification The notification handle + * @param[out] data The notification message\n + * Set NULL if error but PUSH_ERROR_INVALID_PARAMETER + * @return 0 on success, otherwise a negative error value. + * @retval PUSH_ERROR_NONE Successful + * @retval PUSH_ERROR_INVALID_PARAMETER Invalid parameter + * @retval PUSH_ERROR_OUT_OF_MEMORY Out of memory + * @retval PUSH_ERROR_NO_DATA No data available + * @see push_notify_cb() + * @see push_get_unread_notification() + */ +int push_get_notification_message(push_notification_h notification, + char **msg); + +/** + * @brief Gets the received time of the notification message + * + * @param[in] notification The notification handle + * @param[out] received_time The received time of the notification message. \n + * The @a received_time is based on UTC. + * @return 0 on success, otherwise a negative error value. + * @retval PUSH_ERROR_NONE Successful + * @retval PUSH_ERROR_INVALID_PARAMETER Invalid parameter + * @retval PUSH_ERROR_NO_DATA No data available + * + * @see push_notify_cb() + * @see push_get_unread_notification() + */ +int push_get_notification_time(push_notification_h notification, long long int *received_time); + +/** + * @brief Gets an unread notification message from the push server + * + * @remark This method will be deprecated. + * @remark @a noti must be released with push_free_notification() by you + * + * @details If an application receives an unread message with this method, the message is removed from the system. \n + * This method can be called repeatedly until it returns PUSH_ERROR_NO_DATA \n + * But, this method does NOT guarantee order and reliability of notification messages. \n + * Some notification messages can be dropped when the system message queue is full. + * + * @param[in] connection The connection handle to the push service + * @param[out] noti The notification handle + * @return 0 on success, otherwise a negative error value. + * @retval PUSH_ERROR_NONE Successful + * @retval PUSH_ERROR_INVALID_PARAMETER Invalid parameter + * @retval PUSH_ERROR_OUT_OF_MEMORY Out of memory + * @retval PUSH_ERROR_NO_DATA No data available + * + * @see push_get_notification_message() + * @see push_get_notification_time() + * @see push_get_notification_data() + */ +int push_get_unread_notification(push_connection_h connection, + push_notification_h *noti); + + +/** + * @brief Gets the registration ID in PUSH_STATE_REGISTERED state + * @remark The reg_id must be released with free() by you + * @param[in] connection The connection handle to the push service + * @param[out] reg_id The registration ID\n + * Set NULL if error but PUSH_ERROR_INVALID_PARAMETER + * @return 0 on success, otherwise a negative error value + * @retval PUSH_ERROR_NONE Successful + * @retval PUSH_ERROR_INVALID_PARAMETER Invalid parameter + * @retval PUSH_ERROR_OUT_OF_MEMORY Out of memory + * @retval PUSH_ERROR_NO_DATA No registration ID available + */ +int push_get_registration_id(push_connection_h connection, char **reg_id); + + +/** + * @brief Frees the notification handle + * @param[in] noti The notification handle + */ +void push_free_notification(push_notification_h noti); +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __PUSH_LIB_H__ */ diff --git a/packaging/capi-messaging-push.spec b/packaging/capi-messaging-push.spec new file mode 100644 index 0000000..421f6d8 --- /dev/null +++ b/packaging/capi-messaging-push.spec @@ -0,0 +1,50 @@ +Name: capi-messaging-push +Summary: A Push Messaging Library in Tizen C API +Version: 0.1.0 +Release: 5 +Group: TO_BE/FILLED_IN +License: TO BE FILLED IN +Source0: %{name}-%{version}.tar.gz +BuildRequires: cmake +BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(glib-2.0) +Requires(post): /sbin/ldconfig +Requires(postun): /sbin/ldconfig + +%description + + +%package devel +Summary: A Push Messaging Library in Tizen C API (DEV) +Group: TO_BE/FILLED_IN +BuildRequires: pkgconfig(push) +BuildRequires: pkgconfig(capi-base-common) +BuildRequires: pkgconfig(capi-appfw-application) + +%description devel + + + +%prep +%setup -q + + +%build +MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` +cmake . -DCMAKE_INSTALL_PREFIX=/usr -DFULLVER=%{version} -DMAJORVER=${MAJORVER} + +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +%make_install + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + + +%files devel +%{_includedir}/messaging/*.h +%{_libdir}/pkgconfig/*.pc + -- 2.7.4