From: Jinkun Jang Date: Tue, 12 Mar 2013 16:52:09 +0000 (+0900) Subject: Tizen 2.1 base X-Git-Tag: 2.1b_release~5 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Ftelephony%2Ftelephony-daemon.git;a=commitdiff_plain;h=e217323f87410d0e96db844e217e216d19960d36 Tizen 2.1 base --- diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..0e9faa9 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,6 @@ +Jongman Park +Ja-young Gu +Kyeongchul Kim +DongHoo Park +Youngman Park +Inho Oh diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d377582 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,49 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(telephony-daemon C) + +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +SET(EXEC_PREFIX "\${prefix}") +SET(LIBDIR "\${prefix}/lib") +SET(INCLUDEDIR "\${prefix}/include") + +# Set required packages +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED glib-2.0 gobject-2.0 tcore dlog) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Werror -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wdeclaration-after-statement -Wmissing-declarations -Wredundant-decls -Wcast-align") + +ADD_DEFINITIONS("-DFEATURE_TLOG_DEBUG") +ADD_DEFINITIONS("-DTCORE_LOG_TAG=\"TELEPHONY_DAEMON\"") +ADD_DEFINITIONS("-DDAEMON_VERSION=\"${VERSION}\"") + +MESSAGE(${CMAKE_C_FLAGS}) +MESSAGE(${pkgs_LDFLAGS}) + +SET(SRCS + src/main.c + src/monitor.c +) + + +# binary build +ADD_EXECUTABLE(telephony-daemon ${SRCS}) +TARGET_LINK_LIBRARIES(telephony-daemon ${pkgs_LDFLAGS} "-ldl") + + +# install +INSTALL(TARGETS telephony-daemon + RUNTIME DESTINATION bin) + +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resource/etc/rc.d/init.d/telephony-daemon DESTINATION /etc/rc.d/init.d/ + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resource/etc/rc.d/rc3.d/S30telephony-daemon DESTINATION /etc/rc.d/rc3.d/ + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_WRITE WORLD_EXECUTE) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resource/etc/rc.d/rc5.d/S30telephony-daemon DESTINATION /etc/rc.d/rc5.d/ + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_WRITE WORLD_EXECUTE) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME telephony-daemon) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..bae7f54 --- /dev/null +++ b/LICENSE @@ -0,0 +1,204 @@ +Copyright (c) 2000 - 2012 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/debian/changelog b/debian/changelog new file mode 100644 index 0000000..2c7856a --- /dev/null +++ b/debian/changelog @@ -0,0 +1,39 @@ +telephony-daemon (0.1.4) unstable; urgency=low + + * version up for code sync with public binary + * Git: slp/pkgs/t/telephony-daemon + * Tag: telephony-daemon_0.1.4 + + -- Kyeongchul Kim Mon, 02 Apr 2012 14:27:25 +0900 + +telephony-daemon (0.1.3) unstable; urgency=low + + * Fix prefix (TAPI_ to TCORE_) + * Git: slp/pkgs/t/telephony-daemon + * Tag: telephony-daemon_0.1.3 + + -- Inho Oh Tue, 27 Mar 2012 22:25:04 +0900 + +telephony-daemon (0.1.2) unstable; urgency=low + + * Add debug feature (kill -USR1 ) + * Git: slp/pkgs/t/telephony-daemon + * Tag: telephony-daemon_0.1.2 + + -- Inho Oh Mon, 19 Mar 2012 21:08:42 +0900 + +telephony-daemon (0.1.1) unstable; urgency=low + + * Add autorun script (/etc/...) + * Git: slp/pkgs/t/telephony-daemon + * Tag: telephony-daemon_0.1.1 + + -- Inho Oh Fri, 16 Mar 2012 03:19:19 +0900 + +telephony-daemon (0.1.0) unstable; urgency=low + + * Initial + * Git: slp/pkgs/t/telephony-daemon + * Tag: telephony-daemon_0.1.0 + + -- Inho Oh Thu, 15 Mar 2012 23:40:55 +0900 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..abef159 --- /dev/null +++ b/debian/control @@ -0,0 +1,20 @@ +Source: telephony-daemon +Section: libs +Priority: extra +Maintainer: Jongman Park +Uploaders: Jayoung Gu , Kyeongchul Kim , Youngman Park , Inho Oh , DongHoo Park +Build-Depends: debhelper (>= 5), libglib2.0-dev, libtcore-dev, dlog-dev +Standards-Version: 0.0.0 + +Package: telephony-daemon +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, +Description: telephony client API library (Shared Object) + +Package: telephony-daemon-dbg +Section: debug +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, telephony-daemon (= ${Source-Version}) +Description: telephony client API library (dbg package) + diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..efd61ff --- /dev/null +++ b/debian/copyright @@ -0,0 +1,6 @@ +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +This program is free software; you can redistribute it and/or modify +it under the terms of the the Apache License, Version 2.0 (the "License"); +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0. diff --git a/debian/dirs b/debian/dirs new file mode 100644 index 0000000..ca882bb --- /dev/null +++ b/debian/dirs @@ -0,0 +1,2 @@ +usr/bin +usr/sbin diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..e69de29 diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..7b8a0c5 --- /dev/null +++ b/debian/rules @@ -0,0 +1,117 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +CFLAGS ?= -Wall -g +CXXFLAGS ?= -Wall -g +LDFLAGS ?= +PREFIX ?= /usr +DATADIR ?= /opt + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 + CXXFLAGS += -O0 +else + CFLAGS += -O2 + CXXFLAGS += -O2 +endif + +CFLAGS += -fvisibility=hidden -fPIC +LDFLAGS += -ldl -rdynamic -fPIC -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed +#LDFLAGS += -Wl,--unresolved-symbols=ignore-in-shared-libs,--as-needed + +CMAKE_TMP_DIR = $(CURDIR)/cmake_tmp + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + mkdir -p $(CMAKE_TMP_DIR); + cd $(CMAKE_TMP_DIR); CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX=$(PREFIX) + + touch configure-stamp + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + cd $(CMAKE_TMP_DIR) && $(MAKE) all + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + cat $$f > $${f%.in}; \ + sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \ + sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \ + done + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + rm -rf $(CMAKE_TMP_DIR) + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + rm -f $${f%.in}; \ + done + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/wavplayer. + cd $(CMAKE_TMP_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples + dh_install --sourcedir=debian/tmp +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip --dbg-package=telephony-daemon-dbg + dh_compress + dh_fixperms +# dh_perl + dh_makeshlibs + dh_installdeb + dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/debian/telephony-daemon.install.in b/debian/telephony-daemon.install.in new file mode 100644 index 0000000..d9e1d81 --- /dev/null +++ b/debian/telephony-daemon.install.in @@ -0,0 +1,2 @@ +@PREFIX@/bin/* +etc/* diff --git a/debian/telephony-daemon.postinst b/debian/telephony-daemon.postinst new file mode 100755 index 0000000..219048b --- /dev/null +++ b/debian/telephony-daemon.postinst @@ -0,0 +1,5 @@ +#!/bin/sh +if [ ${USER} == "root" ] +then + chown root:root /etc/rc.d/init.d/telephony-daemon +fi diff --git a/packaging/telephony-daemon.spec b/packaging/telephony-daemon.spec new file mode 100644 index 0000000..6ac495b --- /dev/null +++ b/packaging/telephony-daemon.spec @@ -0,0 +1,41 @@ +Name: telephony-daemon +Summary: Telephony daemon +Version: 0.1.12 +Release: 1 +Group: System/Telephony +License: Apache +Source0: %{name}-%{version}.tar.gz +Source1: telephony.service +BuildRequires: cmake +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(gobject-2.0) +BuildRequires: pkgconfig(tcore) +BuildRequires: pkgconfig(dlog) + +%description +Description: Telephony daemon + +%prep +%setup -q + +%build +cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DVERSION=%{version} +make %{?jobs:-j%jobs} + +%install +%make_install +mkdir -p %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants +install -m 0644 %{SOURCE1} %{buildroot}%{_libdir}/systemd/system/telephony.service +ln -s ../telephony.service %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants/telephony.service +mkdir -p %{buildroot}/usr/share/license + +%files +%manifest telephony-daemon.manifest +%defattr(-,root,root,-) +%{_bindir}/telephony-daemon +%{_initrddir}/telephony-daemon +%{_sysconfdir}/rc.d/rc3.d/S30telephony-daemon +%{_sysconfdir}/rc.d/rc5.d/S30telephony-daemon +%{_libdir}/systemd/system/telephony.service +%{_libdir}/systemd/system/multi-user.target.wants/telephony.service +/usr/share/license/telephony-daemon diff --git a/packaging/telephony.service b/packaging/telephony.service new file mode 100644 index 0000000..93d8c51 --- /dev/null +++ b/packaging/telephony.service @@ -0,0 +1,10 @@ +[Unit] +Description=Telephony daemon +After=modem.service + +[Service] +Type=simple +ExecStart=/usr/bin/telephony-daemon + +[Install] +WantedBy=multi-user.target diff --git a/resource/etc/rc.d/init.d/telephony-daemon b/resource/etc/rc.d/init.d/telephony-daemon new file mode 100755 index 0000000..494891b --- /dev/null +++ b/resource/etc/rc.d/init.d/telephony-daemon @@ -0,0 +1,8 @@ +#!/bin/sh + +dlogutil -b radio -v time -f /var/log/seq.radio.log -r 4000 -n 3 & + +if [ ! -e /opt/etc/.hib_capturing ]; then +/usr/bin/telephony-daemon & +fi + diff --git a/resource/etc/rc.d/rc3.d/S30telephony-daemon b/resource/etc/rc.d/rc3.d/S30telephony-daemon new file mode 120000 index 0000000..a441e0f --- /dev/null +++ b/resource/etc/rc.d/rc3.d/S30telephony-daemon @@ -0,0 +1 @@ +../init.d/telephony-daemon \ No newline at end of file diff --git a/resource/etc/rc.d/rc5.d/S30telephony-daemon b/resource/etc/rc.d/rc5.d/S30telephony-daemon new file mode 120000 index 0000000..a441e0f --- /dev/null +++ b/resource/etc/rc.d/rc5.d/S30telephony-daemon @@ -0,0 +1 @@ +../init.d/telephony-daemon \ No newline at end of file diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..bb905f9 --- /dev/null +++ b/src/main.c @@ -0,0 +1,287 @@ +/* + * telephony-daemon + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Ja-young Gu + * + * 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "monitor.h" + +#ifndef DAEMON_VERSION +#define DAEMON_VERSION "unknown" +#endif + +static Server *_server; + +void tcore_log(enum tcore_log_type type, enum tcore_log_priority priority, const char *tag, const char *fmt, ...) +{ + va_list ap; + char buf[1024]; + + va_start(ap, fmt); + vsnprintf(buf, 1023, fmt, ap); + va_end(ap); + + __dlog_print(type, priority, tag, buf); +} + +static gboolean load_plugins(Server *s, const char *path, int flag_test_load) +{ + const gchar *file; + char *filename; + GDir *dir; + void *handle; + GSList *list; + struct stat stat_buf; + char file_date[27]; + + TcorePlugin *p; + struct tcore_plugin_define_desc *desc; + + if (!path || !s) + return FALSE; + + dir = g_dir_open(path, 0, NULL); + if (!dir) + return FALSE; + + while ((file = g_dir_read_name(dir)) != NULL) { + if (g_str_has_prefix(file, "lib") == TRUE + || g_str_has_suffix(file, ".so") == FALSE) + continue; + + filename = g_build_filename(path, file, NULL); + + handle = dlopen(filename, RTLD_NOW); + if (handle == NULL) { + dbg("fail to load '%s': %s", filename, dlerror()); + g_free(filename); + continue; + } + + if (flag_test_load) { + dbg("success to load '%s'", filename); + dlclose(handle); + g_free(filename); + continue; + } + + desc = dlsym(handle, "plugin_define_desc"); + if (!desc) { + dbg("fail to load symbol: %s", dlerror()); + dlclose(handle); + g_free(filename); + continue; + } + + dbg("%s plugin", desc->name); + dbg(" - path = %s", filename); + dbg(" - version = %d", desc->version); + dbg(" - priority = %d", desc->priority); + + memset(&stat_buf, 0, sizeof(struct stat)); + if (stat(filename, &stat_buf) == 0) { + if (ctime_r(&stat_buf.st_mtime, file_date) != NULL) { + if (strlen(file_date) > 1) + file_date[strlen(file_date)-1] = '\0'; + + dbg(" - date = %s", file_date); + } + } + + if (desc->load) { + if (desc->load() == FALSE) { + dbg("false return from load(). skip this plugin"); + dlclose(handle); + g_free(filename); + continue; + } + } + + p = tcore_plugin_new(s, desc, filename, handle); + tcore_server_add_plugin(s, p); + + dbg("%s added", desc->name); + g_free(filename); + } + g_dir_close(dir); + + info("plugin load finished"); + + list = tcore_server_ref_plugins(s); + for (; list; list = list->next) { + p = list->data; + if (!p) + continue; + + desc = (struct tcore_plugin_define_desc *)tcore_plugin_get_description(p); + if (!desc) + continue; + + if (!desc->init) + continue; + + if (!desc->init(p)) { + dbg("plugin(%s) init failed.", tcore_plugin_get_filename(p)); + } + } + + info("plugin init finished"); + + return TRUE; +} + +static void usage(const char *name) +{ + printf("Usage: %s [OPTION]... [PLUGIN_PATH]\n", name); + printf("\n"); + printf(" -T, --testload\t run with plugin load test mode and exit\n"); + printf(" -h, --help\t\t display this help and exit\n"); + printf("\n"); +} + +static void on_signal_usr1(int signo) +{ + if (!_server) + return; + + monitor_server_state(_server); +} + +int main(int argc, char *argv[]) +{ + struct sigaction sigact_usr1; + Server *s; + int flag_test_load = 0; + int opt; + int opt_index; + struct option options[] = { + { "help", 0, 0, 0 }, + { "testload", 0, &flag_test_load, 1 }, + { 0, 0, 0, 0 } + }; + char *plugin_path = "/usr/lib/telephony/plugins/"; + char *tcore_ver; + struct sysinfo info; + + if (sysinfo(&info) == 0) { + info("uptime: %ld secs", info.uptime); + } + + info("daemon version: %s", DAEMON_VERSION); + + tcore_ver = tcore_util_get_version(); + info("libtcore version: %s", tcore_ver); + free(tcore_ver); + + sigact_usr1.sa_handler = on_signal_usr1; + sigemptyset(&sigact_usr1.sa_mask); + sigaddset(&sigact_usr1.sa_mask, SIGUSR1); + sigact_usr1.sa_flags = 0; + + if (sigaction(SIGUSR1, &sigact_usr1, NULL) < 0) { + warn("sigaction(SIGUSR1) failed."); + } + + while (1) { + opt = getopt_long(argc, argv, "hT", options, &opt_index); + + if (-1 == opt) + break; + + switch (opt) { + case 0: + switch (opt_index) { + case 0: // help + usage(argv[0]); + return 0; + break; + } + break; + + case 'h': + usage(argv[0]); + return 0; + break; + + case 'T': + flag_test_load = 1; + break; + } + } + + if (optind < argc) + plugin_path = argv[optind]; + + info("plugin_path: [%s]", plugin_path); + + g_type_init(); +#if !GLIB_CHECK_VERSION (2, 31, 0) + g_thread_init(NULL); +#endif + + s = tcore_server_new(); + if (!s) { + err("server_new failed."); + goto end; + } + _server = s; + + if (!load_plugins(s, plugin_path, flag_test_load)) + goto free_end; + + if (flag_test_load) + goto free_end; + + info("server mainloop start"); + + if (tcore_server_run(s) == FALSE) { + err("server_run failed."); + } + + /* + * RUNNING + */ + +free_end: + info("server end"); + tcore_server_free(s); + +end: + return EXIT_SUCCESS; +} diff --git a/src/monitor.c b/src/monitor.c new file mode 100644 index 0000000..9981143 --- /dev/null +++ b/src/monitor.c @@ -0,0 +1,195 @@ +/* + * telephony-daemon + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Ja-young Gu + * + * 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "monitor.h" + +/* hacking TcoreQueue */ +struct tcore_queue_type { + TcorePlugin *plugin; + GQueue *gq; +}; + +static void _monitor_plugin(Server *s) +{ + GSList *list; + TcorePlugin *p; + char *str; + + msg("-- Plugins --"); + + list = tcore_server_ref_plugins(s); + if (!list) + return; + + do { + p = list->data; + + msg("Name: [%s]", tcore_plugin_get_description(p)->name); + + str = tcore_plugin_get_filename(p); + msg(" - file: %s", str); + if (str) + free(str); + + msg(" - addr: %p", p); + msg(" - userdata: %p", tcore_plugin_ref_user_data(p)); + msg(""); + + + list = list->next; + } while(list); +} + +static void _monitor_storage(Server *s) +{ + GSList *list; + Storage *strg; + + msg("-- Storages --"); + + list = tcore_server_ref_storages(s); + if (!list) + return; + + do { + strg = list->data; + + msg("Name: [%s]", tcore_storage_ref_name(strg)); + msg(" - addr: %p", strg); + msg(""); + + list = list->next; + } while(list); +} + +static void _monitor_communicator(Server *s) +{ + GSList *list; + Communicator *comm; + + msg("-- Coomunicators --"); + + list = tcore_server_ref_communicators(s); + if (!list) + return; + + do { + comm = list->data; + + msg("Name: [%s]", tcore_communicator_ref_name(comm)); + msg(" - addr: %p", comm); + msg(" - parent_plugin: %p", tcore_communicator_ref_plugin(comm)); + msg(" - userdata: %p", tcore_communicator_ref_user_data(comm)); + msg(""); + + list = list->next; + } while(list); +} + +static void _monitor_hal(Server *s) +{ + GSList *list; + TcoreHal *h; + TcoreQueue *q; + TcorePending *pending; + UserRequest *ur; + char *str; + int qlen; + int i; + void *data; + unsigned int data_len; + + msg("-- Hals --"); + + list = tcore_server_ref_hals(s); + if (!list) + return; + + do { + h = list->data; + + str = tcore_hal_get_name(h); + msg("Name: [%s]", str); + msg(" - addr: %p", h); + msg(" - parent_plugin: %p", tcore_hal_ref_plugin(h)); + msg(" - userdata: %p", tcore_hal_ref_user_data(h)); + + q = tcore_hal_ref_queue(h); + if (!q) { + msg(""); + list = list->next; + continue; + } + + if (!(q->gq)) { + msg(""); + list = list->next; + continue; + } + + qlen = tcore_queue_get_length(q); + msg(" - queue: %p, length: %d", q, qlen); + msg(" queue_head: %p", g_queue_peek_head(q->gq)); + for (i = 0; i < qlen; i++) { + pending = g_queue_peek_nth(q->gq, i); + ur = tcore_pending_ref_user_request(pending); + msg(" [%02d] pending=%p, id=0x%x, ur=%p", i, pending, tcore_pending_get_id(pending), ur); + if (ur) { + msg(" ur request command = 0x%x", tcore_user_request_get_command(ur)); + } + data_len = 0; + data = tcore_pending_ref_request_data(pending, &data_len); + msg(" data=%p, data_len=%d", data, data_len); + } + msg(" queue_tail: %p", g_queue_peek_tail(q->gq)); + msg(""); + + list = list->next; + } while(list); +} + +void monitor_server_state(Server *s) +{ + _monitor_plugin(s); + _monitor_storage(s); + _monitor_communicator(s); + _monitor_hal(s); +} diff --git a/src/monitor.h b/src/monitor.h new file mode 100644 index 0000000..ac76bdf --- /dev/null +++ b/src/monitor.h @@ -0,0 +1,27 @@ +/* + * telephony-daemon + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Ja-young Gu + * + * 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. + */ + +#ifndef __MONITIR_H__ +#define __MONITOR_H__ + + +void monitor_server_state(Server *s); + +#endif diff --git a/telephony-daemon.manifest b/telephony-daemon.manifest new file mode 100644 index 0000000..3ca0c6a --- /dev/null +++ b/telephony-daemon.manifest @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + +