From 82e96b9b408afc6113272203dd8e00ead338bb5b Mon Sep 17 00:00:00 2001 From: Jinkun Jang Date: Wed, 13 Mar 2013 01:52:14 +0900 Subject: [PATCH] Tizen 2.1 base --- AUTHORS | 6 + CMakeLists.txt | 40 ++++ LICENSE | 204 ++++++++++++++++++ debian/changelog | 39 ++++ debian/compat | 1 + debian/control | 21 ++ debian/copyright | 6 + debian/dirs | 2 + debian/docs | 0 debian/rules | 123 +++++++++++ debian/tel-plugin-indicator.install.in | 1 + packaging/tel-plugin-indicator.spec | 41 ++++ src/desc-indicator.c | 376 +++++++++++++++++++++++++++++++++ tel-plugin-indicator.manifest | 5 + 14 files changed, 865 insertions(+) create mode 100644 AUTHORS create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/dirs create mode 100644 debian/docs create mode 100755 debian/rules create mode 100644 debian/tel-plugin-indicator.install.in create mode 100644 packaging/tel-plugin-indicator.spec create mode 100644 src/desc-indicator.c create mode 100644 tel-plugin-indicator.manifest 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..6869650 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,40 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(indicator-plugin C) + +#INCLUDE(FindPkgConfig) + +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 dlog tcore) + +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_DLOG_DEBUG") +ADD_DEFINITIONS("-DTCORE_LOG_TAG=\"TEL_PLUGIN_INDICATOR\"") + +MESSAGE(${CMAKE_C_FLAGS}) +MESSAGE(${CMAKE_EXE_LINKER_FLAGS}) + +SET(SRCS + src/desc-indicator.c +) + +# library build +ADD_LIBRARY(indicator-plugin SHARED ${SRCS}) +TARGET_LINK_LIBRARIES(indicator-plugin ${pkgs_LDFLAGS}) +SET_TARGET_PROPERTIES(indicator-plugin PROPERTIES PREFIX "" OUTPUT_NAME indicator-plugin) + +# install +INSTALL(TARGETS indicator-plugin LIBRARY DESTINATION lib/telephony/plugins) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME tel-plugin-indicator) 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..2f8d3bf --- /dev/null +++ b/debian/changelog @@ -0,0 +1,39 @@ +tel-plugin-indicator (0.1.4) unstable; urgency=low + + * Add context reset logic after modem crash + * Git: slp/pkgs/t/tel-plugin-indicator + * Tag: tel-plugin-indicator_0.1.4 + + -- DongHoo Park Wed, 23 May 2012 17:37:50 +0900 + +tel-plugin-indicator (0.1.3) unstable; urgency=low + + * package version sync with public + * Git: slp/pkgs/t/tel-plugin-indicator + * Tag: tel-plugin-indicator_0.1.3 + + -- Inho Oh Mon, 02 Apr 2012 14:49:46 +0900 + +tel-plugin-indicator (0.1.2) unstable; urgency=low + + * Fix prefix (TAPI_ to TCORE_) + * Git: slp/pkgs/t/tel-plugin-indicator + * Tag: tel-plugin-indicator_0.1.2 + + -- Inho Oh Tue, 27 Mar 2012 22:17:37 +0900 + +tel-plugin-indicator (0.1.1) unstable; urgency=low + + * Add .spec for OBS + * Git: slp/pkgs/t/tel-plugin-indicator + * Tag: tel-plugin-indicator_0.1.1 + + -- DongHoo Park Fri, 16 Mar 2012 21:31:53 +0900 + +tel-plugin-indicator (0.1.0) unstable; urgency=low + + * Initial + * Git: slp/pkgs/t/tel-plugin-indicator + * Tag: tel-plugin-indicator_0.1.0 + + -- Inho Oh Thu, 15 Mar 2012 22:37:29 +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..7249bde --- /dev/null +++ b/debian/control @@ -0,0 +1,21 @@ +Source: tel-plugin-indicator +Section: libs +Priority: extra +Maintainer: DongHoo Park +Uploaders: DongHoo Park +Build-Depends: debhelper (>= 5), + libtcore-dev, libglib2.0-dev, dlog-dev, +Standards-Version: 0.0.0 + +Package: tel-plugin-indicator +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, +Description: telephony client API library (Shared Object) + +Package: tel-plugin-indicator-dbg +Section: debug +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, tel-plugin-indicator (= ${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..2f46e33 --- /dev/null +++ b/debian/rules @@ -0,0 +1,123 @@ +#!/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 +CFLAGS += -fvisibility=default -fPIC +LDFLAGS += -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 + +rmpkg: + rm ../tel-plugin-indicator*.deb + rm ../tel-plugin-indicator*.changes + +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=tel-plugin-indicator-dbg + dh_compress + dh_fixperms +# dh_perl + dh_makeshlibs + dh_installdeb + dh_shlibdeps +# 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/tel-plugin-indicator.install.in b/debian/tel-plugin-indicator.install.in new file mode 100644 index 0000000..9b75a8a --- /dev/null +++ b/debian/tel-plugin-indicator.install.in @@ -0,0 +1 @@ +@PREFIX@/lib/* \ No newline at end of file diff --git a/packaging/tel-plugin-indicator.spec b/packaging/tel-plugin-indicator.spec new file mode 100644 index 0000000..d023dc2 --- /dev/null +++ b/packaging/tel-plugin-indicator.spec @@ -0,0 +1,41 @@ +#sbs-git:slp/pkgs/t/tel-plugin-indicator +Name: tel-plugin-indicator +Summary: Telephony Indicator plugin +Version: 0.1.7 +Release: 2 +Group: System/Libraries +License: Apache +Source0: tel-plugin-indicator-%{version}.tar.gz +Requires(post): /sbin/ldconfig +Requires(postun): /sbin/ldconfig +BuildRequires: cmake +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(tcore) +BuildRequires: pkgconfig(dlog) + +%description +Telephony Indicator plugin + +%prep +%setup -q + +%build +cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} +make %{?jobs:-j%jobs} + +%post +/sbin/ldconfig + +%postun -p /sbin/ldconfig + +%install +rm -rf %{buildroot} +%make_install +mkdir -p %{buildroot}/usr/share/license + +%files +%manifest tel-plugin-indicator.manifest +%defattr(-,root,root,-) +#%doc COPYING +%{_libdir}/telephony/plugins/indicator-plugin* +/usr/share/license/tel-plugin-indicator diff --git a/src/desc-indicator.c b/src/desc-indicator.c new file mode 100644 index 0000000..4dfa790 --- /dev/null +++ b/src/desc-indicator.c @@ -0,0 +1,376 @@ +/* + * tel-plugin-indicator + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: DongHoo Park + * + * 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 + +#define INDICATOR_UPDATE_INTERVAL 1 +#define INDICATOR_PROCFILE "/proc/net/dev" +#define INDICATOR_BUFF_SIZE 4096 +#define DATABASE_PATH "/opt/dbspace/.dnet.db" +#define NO_RX_PKT_TIMEOUT 30 +//enum +typedef enum _indicator_state { + INDICATOR_OFF = 0x00, + INDICATOR_ON = 0x01, + INDICATOR_ONLINE = 0x03, +} indicator_state; + +typedef enum _ps_call_state { + PS_CALL_STATE_RESULT_OK = 0x00, + PS_CALL_STATE_RESULT_CONNECT = 0x01, + PS_CALL_STATE_RESULT_NO_CARRIER = 0x03, +} ps_call_state; + +struct indicator_device_state { + gchar *devname; + gboolean active; + guint64 prev_rx; + guint64 prev_tx; + guint64 curr_rx; + guint64 curr_tx; +}; + +//global variable +static struct indicator_device_state indicator_info = { + NULL,FALSE,0,0,0,0 +}; + +static GSource* src; +static gboolean _indicator_update_callback(gpointer user_data); + +static void _indicator_initialize(Server *s) +{ + indicator_info.prev_rx = 0; + indicator_info.prev_tx = 0; + indicator_info.curr_rx = 0; + indicator_info.curr_tx = 0; +} + +static gboolean _indicator_start_updater(Server *s) +{ + Storage *strg_vconf; + gpointer vconf_handle; + + dbg("indicator is started"); + + strg_vconf = tcore_server_find_storage(s, "vconf"); + vconf_handle = tcore_storage_create_handle(strg_vconf, "vconf"); + if (!vconf_handle) + err("fail to create vconf db_handle"); + + tcore_storage_set_int(strg_vconf, STORAGE_KEY_PACKET_SERVICE_STATE, INDICATOR_ON); + + if(src != 0) + return FALSE; + + _indicator_initialize(s); + + src = g_timeout_source_new_seconds(INDICATOR_UPDATE_INTERVAL); + g_source_set_callback(src, _indicator_update_callback, s, NULL); + g_source_set_priority(src, G_PRIORITY_HIGH); + g_source_attach(src, NULL); + g_source_unref(src); + + return TRUE; +} + +static gboolean _indicator_stop_updater(Server *s) +{ + Storage *strg_vconf; + gpointer vconf_handle; + int t_rx = 0, t_tx = 0; + + dbg("indicator is stopped"); + strg_vconf = tcore_server_find_storage(s, "vconf"); + vconf_handle = tcore_storage_create_handle(strg_vconf, "vconf"); + if (!vconf_handle) + err("fail to create vconf db_handle"); + + tcore_storage_set_int(strg_vconf, STORAGE_KEY_PACKET_SERVICE_STATE, INDICATOR_OFF); + + t_rx = tcore_storage_get_int(strg_vconf, STORAGE_KEY_CELLULAR_PKT_TOTAL_RCV); + t_tx = tcore_storage_get_int(strg_vconf, STORAGE_KEY_CELLULAR_PKT_TOTAL_SNT); + t_rx += (int)indicator_info.curr_rx; + t_tx += (int)indicator_info.curr_tx; + + tcore_storage_set_int(strg_vconf, STORAGE_KEY_CELLULAR_PKT_TOTAL_RCV, t_rx); + tcore_storage_set_int(strg_vconf, STORAGE_KEY_CELLULAR_PKT_TOTAL_SNT, t_tx); + tcore_storage_set_int(strg_vconf, STORAGE_KEY_CELLULAR_PKT_LAST_RCV, (int)indicator_info.curr_rx); + tcore_storage_set_int(strg_vconf, STORAGE_KEY_CELLULAR_PKT_LAST_SNT, (int)indicator_info.curr_tx); + + if(src == 0) + return TRUE; + + g_source_destroy(src); + src = 0; + + return TRUE; +} + +static gint _indicator_get_proc_ver(gchar *buff) +{ + if (strstr(buff, "compressed")) return 3; + if (strstr(buff, "bytes")) return 2; + return 1; +} + +static gint _indicator_get_pkt(gchar *buff, gint proc_ver, guint64 *rx_pkt, guint64 *tx_pkt) +{ + gint result = -1; + gchar s_rx[100]; + gchar s_tx[100]; + + memset(s_rx, 0 , 100); + memset(s_tx, 0 , 100); + + if (buff == NULL) + return result; + + switch (proc_ver) { + case 3: + result = sscanf(buff, + "%s %*s %*s %*s %*s %*s %*s %*s %s %*s %*s %*s %*s %*s %*s %*s", + s_rx, s_tx); + break; + case 2: + result = sscanf(buff, + "%s %*s %*s %*s %*s %*s %*s %*s %s %*s %*s %*s %*s %*s %*s %*s", + s_rx, s_tx); + break; + case 1: + result = sscanf(buff, + "%s %*s %*s %*s %*s %*s %*s %*s %s %*s %*s %*s %*s %*s %*s %*s", + s_rx, s_tx); + break; + default: + dbg("stats unknown version"); + break; + } + + *rx_pkt = g_ascii_strtoull(s_rx, NULL, 10); + *tx_pkt = g_ascii_strtoull(s_tx, NULL, 10); + + return result; +} + +static gboolean _indicator_get_pktcnt(gpointer user_data) +{ + FILE *pf = NULL; + gint proc_ver = 0; + gchar buff[INDICATOR_BUFF_SIZE]; + gchar *rv = NULL; + + pf = fopen(INDICATOR_PROCFILE, "r"); + if (pf == NULL) { + err("indicator fail to open file(%s), errno(%d)", INDICATOR_PROCFILE, errno); + return FALSE; + } + + rv = fgets(buff, sizeof(buff), pf); + rv = fgets(buff, sizeof(buff), pf); + proc_ver = _indicator_get_proc_ver(buff); + + while (fgets(buff, sizeof(buff), pf)) { + gint result = 0; + guint64 rx_pkt = 0; + guint64 tx_pkt = 0; + gchar *ifname, *entry; + + ifname = buff; + while (*ifname == ' ') + ifname++; + entry = strrchr(ifname, ':'); + *entry++ = 0; + + result = _indicator_get_pkt(entry, proc_ver, &rx_pkt, &tx_pkt); + if (result <= 0) { + err("stats fail to get proc field"); + fclose(pf); + return FALSE; + } + + if ( g_strcmp0(ifname, indicator_info.devname) == 0 ){ + indicator_info.prev_rx = indicator_info.curr_rx; + indicator_info.prev_tx = indicator_info.curr_tx; + indicator_info.curr_rx = rx_pkt; + indicator_info.curr_tx = tx_pkt; + break; + } + } + + fclose(pf); + return TRUE; +} + +static gboolean _indicator_update(Server *s) +{ + gint pkt_state = 0; + Storage *strg_vconf; + gpointer vconf_handle; + + strg_vconf = tcore_server_find_storage(s, "vconf"); + vconf_handle = tcore_storage_create_handle(strg_vconf, "vconf"); + if (!vconf_handle) + err("fail to create vconf db_handle"); + + pkt_state = tcore_storage_get_int(strg_vconf, STORAGE_KEY_PACKET_SERVICE_STATE); + + if(!indicator_info.active) return FALSE; + + if ((indicator_info.curr_rx > indicator_info.prev_rx) + || (indicator_info.curr_tx > indicator_info.prev_tx)) { + if(pkt_state != INDICATOR_ONLINE) + tcore_storage_set_int(strg_vconf, STORAGE_KEY_PACKET_SERVICE_STATE, INDICATOR_ONLINE); + } + else{ //rx, tx are the same as before + if(pkt_state != INDICATOR_ON) + tcore_storage_set_int(strg_vconf, STORAGE_KEY_PACKET_SERVICE_STATE, INDICATOR_ON); + } + + return TRUE; +} + +static gboolean _indicator_update_callback(gpointer user_data) +{ + gboolean rv = FALSE; + Server *s = NULL; + + s = (Server *)user_data; + + rv = _indicator_get_pktcnt(NULL); + if(!rv){ + src = 0; + return FALSE; + } + + rv = _indicator_update(s); + if(!rv){ + src = 0; + return FALSE; + } + + return TRUE; +} + +static enum tcore_hook_return __on_hook_powered(Server *s, CoreObject *source, + enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data) +{ + struct tnoti_modem_power *modem_power = NULL; + + dbg("powered event called"); + g_return_val_if_fail(data != NULL, TCORE_HOOK_RETURN_STOP_PROPAGATION); + + modem_power = (struct tnoti_modem_power *)data; + if ( modem_power->state == MODEM_STATE_ERROR ){ + indicator_info.active = FALSE; + g_free(indicator_info.devname); + indicator_info.devname = NULL; + _indicator_stop_updater(s); + } + + return TCORE_HOOK_RETURN_CONTINUE; +} + +static enum tcore_hook_return __on_hook_callstatus(Server *s, CoreObject *source, + enum tcore_notification_command command, unsigned int data_len, void *data, + void *user_data) +{ + int con_id = 0; + CoreObject *co_ps = NULL, *co_context = NULL; + struct tnoti_ps_call_status *cstatus = NULL; + + dbg("call status event"); + g_return_val_if_fail(data != NULL, TCORE_HOOK_RETURN_STOP_PROPAGATION); + + co_ps = source; + dbg("ps object(%p)", co_ps); + co_context = tcore_ps_ref_context_by_role(co_ps, CONTEXT_ROLE_INTERNET); + con_id = tcore_context_get_id(co_context); + dbg("context(%p) con_id(%d)", co_context, con_id); + + cstatus = (struct tnoti_ps_call_status *) data; + dbg("call status event cid(%d) state(%d) reason(%d)", cstatus->context_id, cstatus->state, cstatus->result); + + if(con_id != cstatus->context_id) + return TCORE_HOOK_RETURN_CONTINUE; + + if (cstatus->state == PS_CALL_STATE_RESULT_OK) { + /* do nothing. */ + dbg("Just noti for PDP define complete, do nothing."); + return TCORE_HOOK_RETURN_CONTINUE; + } + else if (cstatus->state == PS_CALL_STATE_RESULT_CONNECT) { + indicator_info.active = TRUE; + indicator_info.devname = tcore_context_get_ipv4_devname(co_context); + _indicator_start_updater(s); + return TCORE_HOOK_RETURN_CONTINUE; + } + + indicator_info.active = FALSE; + g_free(indicator_info.devname); + indicator_info.devname = NULL; + _indicator_stop_updater(s); + + return TCORE_HOOK_RETURN_CONTINUE; +} + +static gboolean on_load() +{ + dbg("Indicator plugin load!"); + return TRUE; +} + +static gboolean on_init(TcorePlugin *p) +{ + Server *s = NULL; + s = tcore_plugin_ref_server(p); + tcore_server_add_notification_hook(s, TNOTI_MODEM_POWER, __on_hook_powered, NULL); + tcore_server_add_notification_hook(s, TNOTI_PS_CALL_STATUS, __on_hook_callstatus, NULL); + dbg("initialized Indicator plugin!"); + return TRUE; +} + +static void on_unload(TcorePlugin *p) +{ + dbg("i'm unload!"); + return; +} + +struct tcore_plugin_define_desc plugin_define_desc = +{ + .name = "INDICATOR", + .priority = TCORE_PLUGIN_PRIORITY_MID + 2, + .version = 1, + .load = on_load, + .init = on_init, + .unload = on_unload +}; diff --git a/tel-plugin-indicator.manifest b/tel-plugin-indicator.manifest new file mode 100644 index 0000000..573257c --- /dev/null +++ b/tel-plugin-indicator.manifest @@ -0,0 +1,5 @@ + + + + + -- 2.7.4