diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..912f056 --- /dev/null +++ b/.clang-format @@ -0,0 +1,547 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# clang-format configuration file. Intended for clang-format >= 4. +# +# For more information, see: +# +# Documentation/process/clang-format.rst +# https://clang.llvm.org/docs/ClangFormat.html +# https://clang.llvm.org/docs/ClangFormatStyleOptions.html +# +--- +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +#AlignEscapedNewlines: Left # Unknown to clang-format-4.0 +AlignOperands: true +AlignTrailingComments: false +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: true + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + #AfterExternBlock: false # Unknown to clang-format-5.0 + BeforeCatch: false + BeforeElse: false + IndentBraces: false + #SplitEmptyFunction: true # Unknown to clang-format-4.0 + #SplitEmptyRecord: true # Unknown to clang-format-4.0 + #SplitEmptyNamespace: true # Unknown to clang-format-4.0 +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +#BreakBeforeInheritanceComma: false # Unknown to clang-format-4.0 +BreakBeforeTernaryOperators: false +BreakConstructorInitializersBeforeComma: false +#BreakConstructorInitializers: BeforeComma # Unknown to clang-format-4.0 +#BreakAfterJavaFieldAnnotations: false +#BreakStringLiterals: false +ColumnLimit: 300 +CommentPragmas: '^ IWYU pragma:' +#CompactNamespaces: false # Unknown to clang-format-4.0 +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 8 +ContinuationIndentWidth: 8 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +#FixNamespaceComments: false # Unknown to clang-format-4.0 + +# Taken from: +# git grep -h '^#define [^[:space:]]*for_each[^[:space:]]*(' include/ \ +# | sed "s,^#define \([^[:space:]]*for_each[^[:space:]]*\)(.*$, - '\1'," \ +# | sort | uniq +ForEachMacros: + - 'apei_estatus_for_each_section' + - 'ata_for_each_dev' + - 'ata_for_each_link' + - '__ata_qc_for_each' + - 'ata_qc_for_each' + - 'ata_qc_for_each_raw' + - 'ata_qc_for_each_with_internal' + - 'ax25_for_each' + - 'ax25_uid_for_each' + - '__bio_for_each_bvec' + - 'bio_for_each_bvec' + - 'bio_for_each_bvec_all' + - 'bio_for_each_integrity_vec' + - '__bio_for_each_segment' + - 'bio_for_each_segment' + - 'bio_for_each_segment_all' + - 'bio_list_for_each' + - 'bip_for_each_vec' + - 'bitmap_for_each_clear_region' + - 'bitmap_for_each_set_region' + - 'blkg_for_each_descendant_post' + - 'blkg_for_each_descendant_pre' + - 'blk_queue_for_each_rl' + - 'bond_for_each_slave' + - 'bond_for_each_slave_rcu' + - 'bpf_for_each_spilled_reg' + - 'btree_for_each_safe128' + - 'btree_for_each_safe32' + - 'btree_for_each_safe64' + - 'btree_for_each_safel' + - 'card_for_each_dev' + - 'cgroup_taskset_for_each' + - 'cgroup_taskset_for_each_leader' + - 'cpufreq_for_each_entry' + - 'cpufreq_for_each_entry_idx' + - 'cpufreq_for_each_valid_entry' + - 'cpufreq_for_each_valid_entry_idx' + - 'css_for_each_child' + - 'css_for_each_descendant_post' + - 'css_for_each_descendant_pre' + - 'device_for_each_child_node' + - 'dma_fence_chain_for_each' + - 'do_for_each_ftrace_op' + - 'drm_atomic_crtc_for_each_plane' + - 'drm_atomic_crtc_state_for_each_plane' + - 'drm_atomic_crtc_state_for_each_plane_state' + - 'drm_atomic_for_each_plane_damage' + - 'drm_client_for_each_connector_iter' + - 'drm_client_for_each_modeset' + - 'drm_connector_for_each_possible_encoder' + - 'drm_for_each_bridge_in_chain' + - 'drm_for_each_connector_iter' + - 'drm_for_each_crtc' + - 'drm_for_each_encoder' + - 'drm_for_each_encoder_mask' + - 'drm_for_each_fb' + - 'drm_for_each_legacy_plane' + - 'drm_for_each_plane' + - 'drm_for_each_plane_mask' + - 'drm_for_each_privobj' + - 'drm_mm_for_each_hole' + - 'drm_mm_for_each_node' + - 'drm_mm_for_each_node_in_range' + - 'drm_mm_for_each_node_safe' + - 'flow_action_for_each' + - 'for_each_active_dev_scope' + - 'for_each_active_drhd_unit' + - 'for_each_active_iommu' + - 'for_each_aggr_pgid' + - 'for_each_available_child_of_node' + - 'for_each_bio' + - 'for_each_board_func_rsrc' + - 'for_each_bvec' + - 'for_each_card_auxs' + - 'for_each_card_auxs_safe' + - 'for_each_card_components' + - 'for_each_card_dapms' + - 'for_each_card_pre_auxs' + - 'for_each_card_prelinks' + - 'for_each_card_rtds' + - 'for_each_card_rtds_safe' + - 'for_each_card_widgets' + - 'for_each_card_widgets_safe' + - 'for_each_cgroup_storage_type' + - 'for_each_child_of_node' + - 'for_each_clear_bit' + - 'for_each_clear_bit_from' + - 'for_each_cmsghdr' + - 'for_each_compatible_node' + - 'for_each_component_dais' + - 'for_each_component_dais_safe' + - 'for_each_comp_order' + - 'for_each_console' + - 'for_each_cpu' + - 'for_each_cpu_and' + - 'for_each_cpu_not' + - 'for_each_cpu_wrap' + - 'for_each_dapm_widgets' + - 'for_each_dev_addr' + - 'for_each_dev_scope' + - 'for_each_displayid_db' + - 'for_each_dma_cap_mask' + - 'for_each_dpcm_be' + - 'for_each_dpcm_be_rollback' + - 'for_each_dpcm_be_safe' + - 'for_each_dpcm_fe' + - 'for_each_drhd_unit' + - 'for_each_dss_dev' + - 'for_each_efi_memory_desc' + - 'for_each_efi_memory_desc_in_map' + - 'for_each_element' + - 'for_each_element_extid' + - 'for_each_element_id' + - 'for_each_endpoint_of_node' + - 'for_each_evictable_lru' + - 'for_each_fib6_node_rt_rcu' + - 'for_each_fib6_walker_rt' + - 'for_each_free_mem_pfn_range_in_zone' + - 'for_each_free_mem_pfn_range_in_zone_from' + - 'for_each_free_mem_range' + - 'for_each_free_mem_range_reverse' + - 'for_each_func_rsrc' + - 'for_each_hstate' + - 'for_each_if' + - 'for_each_iommu' + - 'for_each_ip_tunnel_rcu' + - 'for_each_irq_nr' + - 'for_each_link_codecs' + - 'for_each_link_cpus' + - 'for_each_link_platforms' + - 'for_each_lru' + - 'for_each_matching_node' + - 'for_each_matching_node_and_match' + - 'for_each_member' + - 'for_each_mem_region' + - 'for_each_memblock_type' + - 'for_each_memcg_cache_index' + - 'for_each_mem_pfn_range' + - '__for_each_mem_range' + - 'for_each_mem_range' + - '__for_each_mem_range_rev' + - 'for_each_mem_range_rev' + - 'for_each_migratetype_order' + - 'for_each_msi_entry' + - 'for_each_msi_entry_safe' + - 'for_each_net' + - 'for_each_net_continue_reverse' + - 'for_each_netdev' + - 'for_each_netdev_continue' + - 'for_each_netdev_continue_rcu' + - 'for_each_netdev_continue_reverse' + - 'for_each_netdev_feature' + - 'for_each_netdev_in_bond_rcu' + - 'for_each_netdev_rcu' + - 'for_each_netdev_reverse' + - 'for_each_netdev_safe' + - 'for_each_net_rcu' + - 'for_each_new_connector_in_state' + - 'for_each_new_crtc_in_state' + - 'for_each_new_mst_mgr_in_state' + - 'for_each_new_plane_in_state' + - 'for_each_new_private_obj_in_state' + - 'for_each_node' + - 'for_each_node_by_name' + - 'for_each_node_by_type' + - 'for_each_node_mask' + - 'for_each_node_state' + - 'for_each_node_with_cpus' + - 'for_each_node_with_property' + - 'for_each_nonreserved_multicast_dest_pgid' + - 'for_each_of_allnodes' + - 'for_each_of_allnodes_from' + - 'for_each_of_cpu_node' + - 'for_each_of_pci_range' + - 'for_each_old_connector_in_state' + - 'for_each_old_crtc_in_state' + - 'for_each_old_mst_mgr_in_state' + - 'for_each_oldnew_connector_in_state' + - 'for_each_oldnew_crtc_in_state' + - 'for_each_oldnew_mst_mgr_in_state' + - 'for_each_oldnew_plane_in_state' + - 'for_each_oldnew_plane_in_state_reverse' + - 'for_each_oldnew_private_obj_in_state' + - 'for_each_old_plane_in_state' + - 'for_each_old_private_obj_in_state' + - 'for_each_online_cpu' + - 'for_each_online_node' + - 'for_each_online_pgdat' + - 'for_each_pci_bridge' + - 'for_each_pci_dev' + - 'for_each_pci_msi_entry' + - 'for_each_pcm_streams' + - 'for_each_physmem_range' + - 'for_each_populated_zone' + - 'for_each_possible_cpu' + - 'for_each_present_cpu' + - 'for_each_prime_number' + - 'for_each_prime_number_from' + - 'for_each_process' + - 'for_each_process_thread' + - 'for_each_property_of_node' + - 'for_each_registered_fb' + - 'for_each_requested_gpio' + - 'for_each_requested_gpio_in_range' + - 'for_each_reserved_mem_range' + - 'for_each_reserved_mem_region' + - 'for_each_rtd_codec_dais' + - 'for_each_rtd_codec_dais_rollback' + - 'for_each_rtd_components' + - 'for_each_rtd_cpu_dais' + - 'for_each_rtd_cpu_dais_rollback' + - 'for_each_rtd_dais' + - 'for_each_set_bit' + - 'for_each_set_bit_from' + - 'for_each_set_clump8' + - 'for_each_sg' + - 'for_each_sg_dma_page' + - 'for_each_sg_page' + - 'for_each_sgtable_dma_page' + - 'for_each_sgtable_dma_sg' + - 'for_each_sgtable_page' + - 'for_each_sgtable_sg' + - 'for_each_sibling_event' + - 'for_each_subelement' + - 'for_each_subelement_extid' + - 'for_each_subelement_id' + - '__for_each_thread' + - 'for_each_thread' + - 'for_each_unicast_dest_pgid' + - 'for_each_wakeup_source' + - 'for_each_zone' + - 'for_each_zone_zonelist' + - 'for_each_zone_zonelist_nodemask' + - 'fwnode_for_each_available_child_node' + - 'fwnode_for_each_child_node' + - 'fwnode_graph_for_each_endpoint' + - 'gadget_for_each_ep' + - 'genradix_for_each' + - 'genradix_for_each_from' + - 'hash_for_each' + - 'hash_for_each_possible' + - 'hash_for_each_possible_rcu' + - 'hash_for_each_possible_rcu_notrace' + - 'hash_for_each_possible_safe' + - 'hash_for_each_rcu' + - 'hash_for_each_safe' + - 'hctx_for_each_ctx' + - 'hlist_bl_for_each_entry' + - 'hlist_bl_for_each_entry_rcu' + - 'hlist_bl_for_each_entry_safe' + - 'hlist_for_each' + - 'hlist_for_each_entry' + - 'hlist_for_each_entry_continue' + - 'hlist_for_each_entry_continue_rcu' + - 'hlist_for_each_entry_continue_rcu_bh' + - 'hlist_for_each_entry_from' + - 'hlist_for_each_entry_from_rcu' + - 'hlist_for_each_entry_rcu' + - 'hlist_for_each_entry_rcu_bh' + - 'hlist_for_each_entry_rcu_notrace' + - 'hlist_for_each_entry_safe' + - '__hlist_for_each_rcu' + - 'hlist_for_each_safe' + - 'hlist_nulls_for_each_entry' + - 'hlist_nulls_for_each_entry_from' + - 'hlist_nulls_for_each_entry_rcu' + - 'hlist_nulls_for_each_entry_safe' + - 'i3c_bus_for_each_i2cdev' + - 'i3c_bus_for_each_i3cdev' + - 'ide_host_for_each_port' + - 'ide_port_for_each_dev' + - 'ide_port_for_each_present_dev' + - 'idr_for_each_entry' + - 'idr_for_each_entry_continue' + - 'idr_for_each_entry_continue_ul' + - 'idr_for_each_entry_ul' + - 'in_dev_for_each_ifa_rcu' + - 'in_dev_for_each_ifa_rtnl' + - 'inet_bind_bucket_for_each' + - 'inet_lhash2_for_each_icsk_rcu' + - 'key_for_each' + - 'key_for_each_safe' + - 'klp_for_each_func' + - 'klp_for_each_func_safe' + - 'klp_for_each_func_static' + - 'klp_for_each_object' + - 'klp_for_each_object_safe' + - 'klp_for_each_object_static' + - 'kunit_suite_for_each_test_case' + - 'kvm_for_each_memslot' + - 'kvm_for_each_vcpu' + - 'list_for_each' + - 'list_for_each_codec' + - 'list_for_each_codec_safe' + - 'list_for_each_continue' + - 'list_for_each_entry' + - 'list_for_each_entry_continue' + - 'list_for_each_entry_continue_rcu' + - 'list_for_each_entry_continue_reverse' + - 'list_for_each_entry_from' + - 'list_for_each_entry_from_rcu' + - 'list_for_each_entry_from_reverse' + - 'list_for_each_entry_lockless' + - 'list_for_each_entry_rcu' + - 'list_for_each_entry_reverse' + - 'list_for_each_entry_safe' + - 'list_for_each_entry_safe_continue' + - 'list_for_each_entry_safe_from' + - 'list_for_each_entry_safe_reverse' + - 'list_for_each_prev' + - 'list_for_each_prev_safe' + - 'list_for_each_safe' + - 'llist_for_each' + - 'llist_for_each_entry' + - 'llist_for_each_entry_safe' + - 'llist_for_each_safe' + - 'mci_for_each_dimm' + - 'media_device_for_each_entity' + - 'media_device_for_each_intf' + - 'media_device_for_each_link' + - 'media_device_for_each_pad' + - 'nanddev_io_for_each_page' + - 'netdev_for_each_lower_dev' + - 'netdev_for_each_lower_private' + - 'netdev_for_each_lower_private_rcu' + - 'netdev_for_each_mc_addr' + - 'netdev_for_each_uc_addr' + - 'netdev_for_each_upper_dev_rcu' + - 'netdev_hw_addr_list_for_each' + - 'nft_rule_for_each_expr' + - 'nla_for_each_attr' + - 'nla_for_each_nested' + - 'nlmsg_for_each_attr' + - 'nlmsg_for_each_msg' + - 'nr_neigh_for_each' + - 'nr_neigh_for_each_safe' + - 'nr_node_for_each' + - 'nr_node_for_each_safe' + - 'of_for_each_phandle' + - 'of_property_for_each_string' + - 'of_property_for_each_u32' + - 'pci_bus_for_each_resource' + - 'pcm_for_each_format' + - 'ping_portaddr_for_each_entry' + - 'plist_for_each' + - 'plist_for_each_continue' + - 'plist_for_each_entry' + - 'plist_for_each_entry_continue' + - 'plist_for_each_entry_safe' + - 'plist_for_each_safe' + - 'pnp_for_each_card' + - 'pnp_for_each_dev' + - 'protocol_for_each_card' + - 'protocol_for_each_dev' + - 'queue_for_each_hw_ctx' + - 'radix_tree_for_each_slot' + - 'radix_tree_for_each_tagged' + - 'rbtree_postorder_for_each_entry_safe' + - 'rdma_for_each_block' + - 'rdma_for_each_port' + - 'rdma_umem_for_each_dma_block' + - 'resource_list_for_each_entry' + - 'resource_list_for_each_entry_safe' + - 'rhl_for_each_entry_rcu' + - 'rhl_for_each_rcu' + - 'rht_for_each' + - 'rht_for_each_entry' + - 'rht_for_each_entry_from' + - 'rht_for_each_entry_rcu' + - 'rht_for_each_entry_rcu_from' + - 'rht_for_each_entry_safe' + - 'rht_for_each_from' + - 'rht_for_each_rcu' + - 'rht_for_each_rcu_from' + - '__rq_for_each_bio' + - 'rq_for_each_bvec' + - 'rq_for_each_segment' + - 'scsi_for_each_prot_sg' + - 'scsi_for_each_sg' + - 'sctp_for_each_hentry' + - 'sctp_skb_for_each' + - 'shdma_for_each_chan' + - '__shost_for_each_device' + - 'shost_for_each_device' + - 'sk_for_each' + - 'sk_for_each_bound' + - 'sk_for_each_entry_offset_rcu' + - 'sk_for_each_from' + - 'sk_for_each_rcu' + - 'sk_for_each_safe' + - 'sk_nulls_for_each' + - 'sk_nulls_for_each_from' + - 'sk_nulls_for_each_rcu' + - 'snd_array_for_each' + - 'snd_pcm_group_for_each_entry' + - 'snd_soc_dapm_widget_for_each_path' + - 'snd_soc_dapm_widget_for_each_path_safe' + - 'snd_soc_dapm_widget_for_each_sink_path' + - 'snd_soc_dapm_widget_for_each_source_path' + - 'tb_property_for_each' + - 'tcf_exts_for_each_action' + - 'udp_portaddr_for_each_entry' + - 'udp_portaddr_for_each_entry_rcu' + - 'usb_hub_for_each_child' + - 'v4l2_device_for_each_subdev' + - 'v4l2_m2m_for_each_dst_buf' + - 'v4l2_m2m_for_each_dst_buf_safe' + - 'v4l2_m2m_for_each_src_buf' + - 'v4l2_m2m_for_each_src_buf_safe' + - 'virtio_device_for_each_vq' + - 'while_for_each_ftrace_op' + - 'xa_for_each' + - 'xa_for_each_marked' + - 'xa_for_each_range' + - 'xa_for_each_start' + - 'xas_for_each' + - 'xas_for_each_conflict' + - 'xas_for_each_marked' + - 'xbc_array_for_each_value' + - 'xbc_for_each_key_value' + - 'xbc_node_for_each_array_value' + - 'xbc_node_for_each_child' + - 'xbc_node_for_each_key_value' + - 'zorro_for_each_dev' + +#IncludeBlocks: Preserve # Unknown to clang-format-5.0 +IncludeCategories: + - Regex: '.*' + Priority: 1 +#IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: false +#IndentPPDirectives: None # Unknown to clang-format-5.0 +IndentWidth: 8 +IndentWrappedFunctionNames: false +#JavaScriptQuotes: Leave +#JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +#ObjCBinPackProtocolList: Auto # Unknown to clang-format-5.0 +ObjCBlockIndentWidth: 8 +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true + +# Taken from git's rules +#PenaltyBreakAssignment: 10 # Unknown to clang-format-4.0 +PenaltyBreakBeforeFirstCallParameter: 30 +PenaltyBreakComment: 10 +PenaltyBreakFirstLessLess: 0 +PenaltyBreakString: 10 +PenaltyExcessCharacter: 100 +PenaltyReturnTypeOnItsOwnLine: 60 + +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +#SortUsingDeclarations: false # Unknown to clang-format-4.0 +SpaceAfterCStyleCast: false +#SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +#SpaceBeforeCtorInitializerColon: true # Unknown to clang-format-5.0 +#SpaceBeforeInheritanceColon: true # Unknown to clang-format-5.0 +SpaceBeforeParens: ControlStatements +#SpaceBeforeRangeBasedForLoopColon: true # Unknown to clang-format-5.0 +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp03 +TabWidth: 8 +UseTab: Always diff --git a/backupSession.c b/backupSession.c index 754c2eb..8663e55 100644 --- a/backupSession.c +++ b/backupSession.c @@ -18,11 +18,12 @@ #include "notifications.h" #include "event.h" -static mxml_node_t *bkp_tree = NULL; -pthread_mutex_t mutex_backup_session = PTHREAD_MUTEX_INITIALIZER; +static mxml_node_t *bkp_tree = NULL; +pthread_mutex_t mutex_backup_session = PTHREAD_MUTEX_INITIALIZER; -void bkp_tree_clean(void) { - if(bkp_tree != NULL) +void bkp_tree_clean(void) +{ + if (bkp_tree != NULL) MXML_DELETE(bkp_tree); return; } @@ -31,12 +32,12 @@ void bkp_session_save() { FILE *fp; - pthread_mutex_lock (&mutex_backup_session); + pthread_mutex_lock(&mutex_backup_session); fp = fopen(CWMP_BKP_FILE, "w"); mxmlSaveFile(bkp_tree, fp, MXML_NO_CALLBACK); fclose(fp); sync(); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } mxml_node_t *bkp_session_insert(mxml_node_t *tree, char *name, char *value) @@ -45,8 +46,7 @@ mxml_node_t *bkp_session_insert(mxml_node_t *tree, char *name, char *value) b = mxmlNewElement(tree, name); - if(value != NULL) - { + if (value != NULL) { mxmlNewOpaque(b, value); } return b; @@ -61,26 +61,21 @@ mxml_node_t *bkp_session_node_found(mxml_node_t *tree, char *name, struct search int i = 0; b = mxmlFindElement(b, b, name, NULL, NULL, MXML_DESCEND_FIRST); - while (b) - { - if(b && b->child) - { + while (b) { + if (b && b->child) { c = b->child; i = 0; - while(c && i < size) - { - if(c->type == MXML_ELEMENT && strcmp(keys[i].name, c->value.element.name) == 0) - { + while (c && i < size) { + if (c->type == MXML_ELEMENT && strcmp(keys[i].name, c->value.element.name) == 0) { d = c; d = mxmlWalkNext(d, c, MXML_DESCEND); - if((keys[i].value == NULL)||(d && d->type == MXML_OPAQUE && keys[i].value != NULL && strcmp(keys[i].value, d->value.opaque) == 0)) + if ((keys[i].value == NULL) || (d && d->type == MXML_OPAQUE && keys[i].value != NULL && strcmp(keys[i].value, d->value.opaque) == 0)) i++; } c = mxmlWalkNext(c, b, MXML_NO_DESCEND); } } - if(i == size) - { + if (i == size) { break; } b = mxmlWalkNext(b, tree, MXML_NO_DESCEND); @@ -90,169 +85,161 @@ mxml_node_t *bkp_session_node_found(mxml_node_t *tree, char *name, struct search mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id, char *status) { - struct search_keywords keys[1]; - char parent_name[32]; - char event_id[32]; - char event_idx[32]; - mxml_node_t *b; + struct search_keywords keys[1]; + char parent_name[32]; + char event_id[32]; + char event_idx[32]; + mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(parent_name,"%s_event",status); - sprintf(event_id,"%d",id); - sprintf(event_idx,"%d",index); + pthread_mutex_lock(&mutex_backup_session); + sprintf(parent_name, "%s_event", status); + sprintf(event_id, "%d", id); + sprintf(event_idx, "%d", index); keys[0].name = "id"; keys[0].value = event_id; b = bkp_session_node_found(bkp_tree, parent_name, keys, 1); - if(!b) - { - b = bkp_session_insert(bkp_tree,parent_name,NULL); - bkp_session_insert(b,"index",event_idx); - bkp_session_insert(b,"id",event_id); - bkp_session_insert(b,"command_key",command_key); + if (!b) { + b = bkp_session_insert(bkp_tree, parent_name, NULL); + bkp_session_insert(b, "index", event_idx); + bkp_session_insert(b, "id", event_id); + bkp_session_insert(b, "command_key", command_key); } - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); return b; } void bkp_session_delete_event(int id, char *status) { - struct search_keywords keys[1]; - char parent_name[32]; - char event_id[32]; - mxml_node_t *b; + struct search_keywords keys[1]; + char parent_name[32]; + char event_id[32]; + mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(parent_name,"%s_event",status); - sprintf(event_id,"%d",id); + pthread_mutex_lock(&mutex_backup_session); + sprintf(parent_name, "%s_event", status); + sprintf(event_id, "%d", id); keys[0].name = "id"; keys[0].value = event_id; b = bkp_session_node_found(bkp_tree, parent_name, keys, 1); - if(b) + if (b) mxmlDelete(b); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_insert_parameter(mxml_node_t *b, char *name) { - pthread_mutex_lock (&mutex_backup_session); - bkp_session_insert(b,"parameter",name); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_lock(&mutex_backup_session); + bkp_session_insert(b, "parameter", name); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_simple_insert(char *parent, char *child, char *value) { mxml_node_t *b = bkp_tree; - pthread_mutex_lock (&mutex_backup_session); + pthread_mutex_lock(&mutex_backup_session); b = mxmlFindElement(b, b, parent, NULL, NULL, MXML_DESCEND); - if(b) + if (b) mxmlDelete(b); - b = bkp_session_insert(bkp_tree, parent,NULL); - bkp_session_insert(b,child,value); - pthread_mutex_unlock (&mutex_backup_session); + b = bkp_session_insert(bkp_tree, parent, NULL); + bkp_session_insert(b, child, value); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_simple_insert_in_parent(char *parent, char *child, char *value) { mxml_node_t *n, *b = bkp_tree; - pthread_mutex_lock (&mutex_backup_session); + pthread_mutex_lock(&mutex_backup_session); n = mxmlFindElement(b, b, parent, NULL, NULL, MXML_DESCEND); - if(!n) - n = bkp_session_insert(bkp_tree, parent,NULL); + if (!n) + n = bkp_session_insert(bkp_tree, parent, NULL); b = mxmlFindElement(n, n, child, NULL, NULL, MXML_DESCEND); - if(b) + if (b) mxmlDelete(b); - bkp_session_insert(n,child,value); - pthread_mutex_unlock (&mutex_backup_session); + bkp_session_insert(n, child, value); + pthread_mutex_unlock(&mutex_backup_session); } -void bkp_session_move_inform_to_inform_send () +void bkp_session_move_inform_to_inform_send() { mxml_node_t *b = bkp_tree; - pthread_mutex_lock (&mutex_backup_session); + pthread_mutex_lock(&mutex_backup_session); while (b) { - if (b && b->type == MXML_ELEMENT && - !strcmp(b->value.element.name, "queue_event") && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "cwmp")) { + if (b && b->type == MXML_ELEMENT && !strcmp(b->value.element.name, "queue_event") && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "cwmp")) { FREE(b->value.element.name); b->value.element.name = strdup("send_event"); } b = mxmlWalkNext(b, bkp_tree, MXML_DESCEND); } - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } -void bkp_session_move_inform_to_inform_queue () +void bkp_session_move_inform_to_inform_queue() { mxml_node_t *b = bkp_tree; - pthread_mutex_lock (&mutex_backup_session); + pthread_mutex_lock(&mutex_backup_session); while (b) { - if (b && b->type == MXML_ELEMENT && - !strcmp(b->value.element.name, "send_event") && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "cwmp")) { + if (b && b->type == MXML_ELEMENT && !strcmp(b->value.element.name, "send_event") && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "cwmp")) { FREE(b->value.element.name); b->value.element.name = strdup("queue_event"); } b = mxmlWalkNext(b, bkp_tree, MXML_DESCEND); } - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } -void bkp_session_insert_schedule_inform(time_t time,char *command_key) +void bkp_session_insert_schedule_inform(time_t time, char *command_key) { struct search_keywords keys[2]; char schedule_time[128]; mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(schedule_time,"%ld",time); + pthread_mutex_lock(&mutex_backup_session); + sprintf(schedule_time, "%ld", time); keys[0].name = "command_key"; keys[0].value = command_key; keys[1].name = "time"; keys[1].value = schedule_time; b = bkp_session_node_found(bkp_tree, "schedule_inform", keys, 2); - if(!b) - { - b = bkp_session_insert(bkp_tree,"schedule_inform",NULL); - bkp_session_insert(b,"command_key",command_key); - bkp_session_insert(b,"time",schedule_time); + if (!b) { + b = bkp_session_insert(bkp_tree, "schedule_inform", NULL); + bkp_session_insert(b, "command_key", command_key); + bkp_session_insert(b, "time", schedule_time); } - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } -void bkp_session_delete_schedule_inform(time_t time,char *command_key) +void bkp_session_delete_schedule_inform(time_t time, char *command_key) { struct search_keywords keys[2]; char schedule_time[128]; mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(schedule_time,"%ld",time); + pthread_mutex_lock(&mutex_backup_session); + sprintf(schedule_time, "%ld", time); keys[0].name = "command_key"; keys[0].value = command_key; keys[1].name = "time"; keys[1].value = schedule_time; b = bkp_session_node_found(bkp_tree, "schedule_inform", keys, 2); - if(b) + if (b) mxmlDelete(b); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_insert_download(struct download *pdownload) { - struct search_keywords keys[7]; - char schedule_time[128]; - char file_size[128]; - mxml_node_t *b; + struct search_keywords keys[7]; + char schedule_time[128]; + char file_size[128]; + mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(schedule_time,"%ld",pdownload->scheduled_time); - sprintf(file_size,"%d",pdownload->file_size); + pthread_mutex_lock(&mutex_backup_session); + sprintf(schedule_time, "%ld", pdownload->scheduled_time); + sprintf(file_size, "%d", pdownload->file_size); keys[0].name = "url"; keys[0].value = pdownload->url; keys[1].name = "command_key"; @@ -268,36 +255,34 @@ void bkp_session_insert_download(struct download *pdownload) keys[6].name = "time"; keys[6].value = schedule_time; b = bkp_session_node_found(bkp_tree, "download", keys, 7); - if(!b) - { - b = bkp_session_insert(bkp_tree,"download",NULL); - bkp_session_insert(b,"url",pdownload->url); - bkp_session_insert(b,"command_key",pdownload->command_key); - bkp_session_insert(b,"file_type",pdownload->file_type); - bkp_session_insert(b,"username",pdownload->username); - bkp_session_insert(b,"password",pdownload->password); - bkp_session_insert(b,"file_size",file_size); - bkp_session_insert(b,"time",schedule_time); + if (!b) { + b = bkp_session_insert(bkp_tree, "download", NULL); + bkp_session_insert(b, "url", pdownload->url); + bkp_session_insert(b, "command_key", pdownload->command_key); + bkp_session_insert(b, "file_type", pdownload->file_type); + bkp_session_insert(b, "username", pdownload->username); + bkp_session_insert(b, "password", pdownload->password); + bkp_session_insert(b, "file_size", file_size); + bkp_session_insert(b, "time", schedule_time); } - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_insert_schedule_download(struct schedule_download *pschedule_download) { - struct search_keywords keys[16]; - char delay[4][128]; - int i; - char file_size[128]; - char maxretrie[2][128]; - mxml_node_t *b; + struct search_keywords keys[16]; + char delay[4][128]; + int i; + char file_size[128]; + char maxretrie[2][128]; + mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(file_size,"%d",pschedule_download->file_size); - for (i = 0; i<2; i++) - { - sprintf(delay[2*i],"%ld",pschedule_download->timewindowstruct[i].windowstart); - sprintf(delay[2*i+1],"%ld",pschedule_download->timewindowstruct[i].windowend); - sprintf(maxretrie[i],"%d",pschedule_download->timewindowstruct[i].maxretries); + pthread_mutex_lock(&mutex_backup_session); + sprintf(file_size, "%d", pschedule_download->file_size); + for (i = 0; i < 2; i++) { + sprintf(delay[2 * i], "%ld", pschedule_download->timewindowstruct[i].windowstart); + sprintf(delay[2 * i + 1], "%ld", pschedule_download->timewindowstruct[i].windowend); + sprintf(maxretrie[i], "%d", pschedule_download->timewindowstruct[i].maxretries); } keys[0].name = "url"; keys[0].value = pschedule_download->url; @@ -332,44 +317,42 @@ void bkp_session_insert_schedule_download(struct schedule_download *pschedule_do keys[15].name = "maxretrie2"; keys[15].value = maxretrie[1]; b = bkp_session_node_found(bkp_tree, "schedule_download", keys, 16); - if(!b) - { - b = bkp_session_insert(bkp_tree,"schedule_download",NULL); - bkp_session_insert(b,"url",pschedule_download->url); - bkp_session_insert(b,"command_key",pschedule_download->command_key); - bkp_session_insert(b,"file_type",pschedule_download->file_type); - bkp_session_insert(b,"username",pschedule_download->username); - bkp_session_insert(b,"password",pschedule_download->password); - bkp_session_insert(b,"file_size",file_size); - bkp_session_insert(b,"windowstart1",delay[0]); - bkp_session_insert(b,"windowend1",delay[1]); - bkp_session_insert(b,"windowmode1",pschedule_download->timewindowstruct[0].windowmode); - bkp_session_insert(b,"usermessage1",pschedule_download->timewindowstruct[0].usermessage); - bkp_session_insert(b,"maxretrie1",maxretrie[0]); - bkp_session_insert(b,"windowstart2",delay[2]); - bkp_session_insert(b,"windowend2",delay[3]); - bkp_session_insert(b,"windowmode2",pschedule_download->timewindowstruct[1].windowmode); - bkp_session_insert(b,"usermessage2",pschedule_download->timewindowstruct[1].usermessage); - bkp_session_insert(b,"maxretrie2",maxretrie[1]); + if (!b) { + b = bkp_session_insert(bkp_tree, "schedule_download", NULL); + bkp_session_insert(b, "url", pschedule_download->url); + bkp_session_insert(b, "command_key", pschedule_download->command_key); + bkp_session_insert(b, "file_type", pschedule_download->file_type); + bkp_session_insert(b, "username", pschedule_download->username); + bkp_session_insert(b, "password", pschedule_download->password); + bkp_session_insert(b, "file_size", file_size); + bkp_session_insert(b, "windowstart1", delay[0]); + bkp_session_insert(b, "windowend1", delay[1]); + bkp_session_insert(b, "windowmode1", pschedule_download->timewindowstruct[0].windowmode); + bkp_session_insert(b, "usermessage1", pschedule_download->timewindowstruct[0].usermessage); + bkp_session_insert(b, "maxretrie1", maxretrie[0]); + bkp_session_insert(b, "windowstart2", delay[2]); + bkp_session_insert(b, "windowend2", delay[3]); + bkp_session_insert(b, "windowmode2", pschedule_download->timewindowstruct[1].windowmode); + bkp_session_insert(b, "usermessage2", pschedule_download->timewindowstruct[1].usermessage); + bkp_session_insert(b, "maxretrie2", maxretrie[1]); } - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_insert_apply_schedule_download(struct apply_schedule_download *papply_schedule_download) { - struct search_keywords keys[9]; - char delay[4][128]; - int i; - char maxretrie[2][128]; - mxml_node_t *b; + struct search_keywords keys[9]; + char delay[4][128]; + int i; + char maxretrie[2][128]; + mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - - for (i = 0; i<2; i++) - { - sprintf(delay[2*i],"%ld",papply_schedule_download->timeintervals[i].windowstart); - sprintf(delay[2*i+1],"%ld",papply_schedule_download->timeintervals[i].windowend); - sprintf(maxretrie[i],"%d",papply_schedule_download->timeintervals[i].maxretries); + pthread_mutex_lock(&mutex_backup_session); + + for (i = 0; i < 2; i++) { + sprintf(delay[2 * i], "%ld", papply_schedule_download->timeintervals[i].windowstart); + sprintf(delay[2 * i + 1], "%ld", papply_schedule_download->timeintervals[i].windowend); + sprintf(maxretrie[i], "%d", papply_schedule_download->timeintervals[i].maxretries); } keys[0].name = "command_key"; keys[0].value = papply_schedule_download->command_key; @@ -390,40 +373,38 @@ void bkp_session_insert_apply_schedule_download(struct apply_schedule_download * keys[8].name = "maxretrie2"; keys[8].value = maxretrie[1]; b = bkp_session_node_found(bkp_tree, "apply_schedule_download", keys, 9); - if(!b) - { - CWMP_LOG(INFO,"New schedule download key %s file",papply_schedule_download->command_key); - b = bkp_session_insert(bkp_tree,"apply_schedule_download",NULL); - bkp_session_insert(b,"start_time",papply_schedule_download->start_time); - bkp_session_insert(b,"command_key",papply_schedule_download->command_key); - bkp_session_insert(b,"file_type",papply_schedule_download->file_type); - bkp_session_insert(b,"windowstart1",delay[0]); - bkp_session_insert(b,"windowend1",delay[1]); - bkp_session_insert(b,"maxretrie1",maxretrie[0]); - - bkp_session_insert(b,"windowstart2",delay[2]); - bkp_session_insert(b,"windowend2",delay[3]); - bkp_session_insert(b,"maxretrie2",maxretrie[1]); + if (!b) { + CWMP_LOG(INFO, "New schedule download key %s file", papply_schedule_download->command_key); + b = bkp_session_insert(bkp_tree, "apply_schedule_download", NULL); + bkp_session_insert(b, "start_time", papply_schedule_download->start_time); + bkp_session_insert(b, "command_key", papply_schedule_download->command_key); + bkp_session_insert(b, "file_type", papply_schedule_download->file_type); + bkp_session_insert(b, "windowstart1", delay[0]); + bkp_session_insert(b, "windowend1", delay[1]); + bkp_session_insert(b, "maxretrie1", maxretrie[0]); + + bkp_session_insert(b, "windowstart2", delay[2]); + bkp_session_insert(b, "windowend2", delay[3]); + bkp_session_insert(b, "maxretrie2", maxretrie[1]); } - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_delete_apply_schedule_download(struct apply_schedule_download *papply_schedule_download) //TODO { - struct search_keywords keys[9]; - char delay[4][128]; - char maxretrie[2][128]; + struct search_keywords keys[9]; + char delay[4][128]; + char maxretrie[2][128]; int i; mxml_node_t *b; - - pthread_mutex_lock (&mutex_backup_session); - for (i = 0; i<2; i++) - { - sprintf(delay[2*i],"%ld",papply_schedule_download->timeintervals[i].windowstart); - sprintf(delay[2*i+1],"%ld",papply_schedule_download->timeintervals[i].windowend); - sprintf(maxretrie[i],"%d",papply_schedule_download->timeintervals[i].maxretries); + + pthread_mutex_lock(&mutex_backup_session); + for (i = 0; i < 2; i++) { + sprintf(delay[2 * i], "%ld", papply_schedule_download->timeintervals[i].windowstart); + sprintf(delay[2 * i + 1], "%ld", papply_schedule_download->timeintervals[i].windowend); + sprintf(maxretrie[i], "%d", papply_schedule_download->timeintervals[i].maxretries); } - + keys[0].name = "start_time"; keys[0].value = papply_schedule_download->start_time; keys[1].name = "command_key"; @@ -443,10 +424,10 @@ void bkp_session_delete_apply_schedule_download(struct apply_schedule_download * keys[8].name = "maxretrie2"; keys[8].value = maxretrie[1]; b = bkp_session_node_found(bkp_tree, "apply_schedule_download", keys, 9); - - if(b) + + if (b) mxmlDelete(b); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_insert_change_du_state(struct change_du_state *pchange_du_state) @@ -455,14 +436,14 @@ void bkp_session_insert_change_du_state(struct change_du_state *pchange_du_state char schedule_time[128]; mxml_node_t *b, *n; - pthread_mutex_lock (&mutex_backup_session); + pthread_mutex_lock(&mutex_backup_session); sprintf(schedule_time, "%ld", pchange_du_state->timeout); b = bkp_session_insert(bkp_tree, "change_du_state", NULL); bkp_session_insert(b, "command_key", pchange_du_state->command_key); bkp_session_insert(b, "time", schedule_time); - list_for_each_entry(p, &(pchange_du_state->list_operation), list) { - if (p->type == DU_INSTALL ) { + list_for_each_entry (p, &(pchange_du_state->list_operation), list) { + if (p->type == DU_INSTALL) { n = bkp_session_insert(b, "install", NULL); bkp_session_insert(n, "url", p->url); bkp_session_insert(n, "uuid", p->uuid); @@ -483,35 +464,35 @@ void bkp_session_insert_change_du_state(struct change_du_state *pchange_du_state bkp_session_insert(n, "executionenvref", p->executionenvref); } } - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } -void bkp_session_delete_change_du_state(struct change_du_state *pchange_du_state) +void bkp_session_delete_change_du_state(struct change_du_state *pchange_du_state) { struct search_keywords keys[2]; char schedule_time[128]; mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); + pthread_mutex_lock(&mutex_backup_session); keys[0].name = "command_key"; keys[0].value = pchange_du_state->command_key; keys[1].name = "time"; - sprintf(schedule_time,"%ld",pchange_du_state->timeout); + sprintf(schedule_time, "%ld", pchange_du_state->timeout); keys[1].value = schedule_time; b = bkp_session_node_found(bkp_tree, "change_du_state", keys, 2); - if(b) + if (b) mxmlDelete(b); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_insert_upload(struct upload *pupload) { - struct search_keywords keys[6]; - char schedule_time[128]; - mxml_node_t *b; + struct search_keywords keys[6]; + char schedule_time[128]; + mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(schedule_time,"%ld",pupload->scheduled_time); + pthread_mutex_lock(&mutex_backup_session); + sprintf(schedule_time, "%ld", pupload->scheduled_time); keys[0].name = "url"; keys[0].value = pupload->url; keys[1].name = "command_key"; @@ -525,17 +506,16 @@ void bkp_session_insert_upload(struct upload *pupload) keys[5].name = "time"; keys[5].value = schedule_time; b = bkp_session_node_found(bkp_tree, "upload", keys, 6); - if(!b) - { - b = bkp_session_insert(bkp_tree,"upload",NULL); - bkp_session_insert(b,"url",pupload->url); - bkp_session_insert(b,"command_key",pupload->command_key); - bkp_session_insert(b,"file_type",pupload->file_type); - bkp_session_insert(b,"username",pupload->username); - bkp_session_insert(b,"password",pupload->password); - bkp_session_insert(b,"time",schedule_time); + if (!b) { + b = bkp_session_insert(bkp_tree, "upload", NULL); + bkp_session_insert(b, "url", pupload->url); + bkp_session_insert(b, "command_key", pupload->command_key); + bkp_session_insert(b, "file_type", pupload->file_type); + bkp_session_insert(b, "username", pupload->username); + bkp_session_insert(b, "password", pupload->password); + bkp_session_insert(b, "time", schedule_time); } - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_delete_download(struct download *pdownload) { @@ -544,9 +524,9 @@ void bkp_session_delete_download(struct download *pdownload) char file_size[128]; mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(schedule_time,"%ld",pdownload->scheduled_time); - sprintf(file_size,"%d",pdownload->file_size); + pthread_mutex_lock(&mutex_backup_session); + sprintf(schedule_time, "%ld", pdownload->scheduled_time); + sprintf(file_size, "%d", pdownload->file_size); keys[0].name = "url"; keys[0].value = pdownload->url; keys[1].name = "command_key"; @@ -562,27 +542,26 @@ void bkp_session_delete_download(struct download *pdownload) keys[6].name = "time"; keys[6].value = schedule_time; b = bkp_session_node_found(bkp_tree, "download", keys, 7); - if(b) + if (b) mxmlDelete(b); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_delete_schedule_download(struct schedule_download *pschedule_download) //TODO { - struct search_keywords keys[16]; - char delay[4][128]; + struct search_keywords keys[16]; + char delay[4][128]; char file_size[128]; - char maxretrie[2][128]; + char maxretrie[2][128]; int i; mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(file_size,"%d",pschedule_download->file_size); - for (i = 0; i<2; i++) - { - sprintf(delay[2*i],"%ld",pschedule_download->timewindowstruct[i].windowstart); - sprintf(delay[2*i+1],"%ld",pschedule_download->timewindowstruct[i].windowend); - sprintf(maxretrie[i],"%d",pschedule_download->timewindowstruct[i].maxretries); + pthread_mutex_lock(&mutex_backup_session); + sprintf(file_size, "%d", pschedule_download->file_size); + for (i = 0; i < 2; i++) { + sprintf(delay[2 * i], "%ld", pschedule_download->timewindowstruct[i].windowstart); + sprintf(delay[2 * i + 1], "%ld", pschedule_download->timewindowstruct[i].windowend); + sprintf(maxretrie[i], "%d", pschedule_download->timewindowstruct[i].maxretries); } keys[0].name = "url"; keys[0].value = pschedule_download->url; @@ -617,10 +596,10 @@ void bkp_session_delete_schedule_download(struct schedule_download *pschedule_do keys[15].name = "maxretrie2"; keys[15].value = maxretrie[1]; b = bkp_session_node_found(bkp_tree, "schedule_download", keys, 16); - - if(b) + + if (b) mxmlDelete(b); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_delete_upload(struct upload *pupload) { @@ -628,8 +607,8 @@ void bkp_session_delete_upload(struct upload *pupload) char schedule_time[128]; mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(schedule_time,"%ld",pupload->scheduled_time); + pthread_mutex_lock(&mutex_backup_session); + sprintf(schedule_time, "%ld", pupload->scheduled_time); keys[0].name = "url"; keys[0].value = pupload->url; keys[1].name = "command_key"; @@ -643,9 +622,9 @@ void bkp_session_delete_upload(struct upload *pupload) keys[5].name = "time"; keys[5].value = schedule_time; b = bkp_session_node_found(bkp_tree, "upload", keys, 6); - if(b) + if (b) mxmlDelete(b); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_insert_du_state_change_complete(struct du_state_change_complete *pdu_state_change_complete) @@ -654,13 +633,13 @@ void bkp_session_insert_du_state_change_complete(struct du_state_change_complete struct opresult *p; mxml_node_t *b, *n; - pthread_mutex_lock (&mutex_backup_session); + pthread_mutex_lock(&mutex_backup_session); sprintf(schedule_time, "%ld", pdu_state_change_complete->timeout); b = bkp_session_insert(bkp_tree, "du_state_change_complete", NULL); bkp_session_insert(b, "command_key", pdu_state_change_complete->command_key); bkp_session_insert(b, "time", schedule_time); - list_for_each_entry(p, &(pdu_state_change_complete->list_opresult), list) { - n = bkp_session_insert(b, "opresult", NULL); + list_for_each_entry (p, &(pdu_state_change_complete->list_opresult), list) { + n = bkp_session_insert(b, "opresult", NULL); sprintf(resolved, "%d", p->resolved); sprintf(fault_code, "%d", p->fault); bkp_session_insert(n, "uuid", p->uuid); @@ -672,8 +651,8 @@ void bkp_session_insert_du_state_change_complete(struct du_state_change_complete bkp_session_insert(n, "start_time", p->start_time); bkp_session_insert(n, "complete_time", p->complete_time); bkp_session_insert(n, "fault", fault_code); - } - pthread_mutex_unlock (&mutex_backup_session); + } + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_delete_du_state_change_complete(struct du_state_change_complete *pdu_state_change_complete) @@ -681,27 +660,27 @@ void bkp_session_delete_du_state_change_complete(struct du_state_change_complete struct search_keywords keys[2]; mxml_node_t *b; char schedule_time[128]; - - pthread_mutex_lock (&mutex_backup_session); + + pthread_mutex_lock(&mutex_backup_session); keys[0].name = "command_key"; keys[0].value = pdu_state_change_complete->command_key; - sprintf(schedule_time,"%ld",pdu_state_change_complete->timeout); + sprintf(schedule_time, "%ld", pdu_state_change_complete->timeout); keys[1].name = "time"; keys[1].value = schedule_time; b = bkp_session_node_found(bkp_tree, "du_state_change_complete", keys, 2); - if(b) + if (b) mxmlDelete(b); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_insert_transfer_complete(struct transfer_complete *ptransfer_complete) { - struct search_keywords keys[5]; - char fault_code[16]; - char type[16]; - mxml_node_t *b; + struct search_keywords keys[5]; + char fault_code[16]; + char type[16]; + mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(fault_code,"%d",ptransfer_complete->fault_code); + pthread_mutex_lock(&mutex_backup_session); + sprintf(fault_code, "%d", ptransfer_complete->fault_code); keys[0].name = "command_key"; keys[0].value = ptransfer_complete->command_key; keys[1].name = "start_time"; @@ -711,32 +690,31 @@ void bkp_session_insert_transfer_complete(struct transfer_complete *ptransfer_co keys[3].name = "fault_code"; keys[3].value = fault_code; keys[4].name = "type"; - sprintf(type,"%d",ptransfer_complete->type); + sprintf(type, "%d", ptransfer_complete->type); keys[4].value = type; b = bkp_session_node_found(bkp_tree, "transfer_complete", keys, 5); - if(!b) - { - b = bkp_session_insert(bkp_tree,"transfer_complete",NULL); - bkp_session_insert(b,"command_key",ptransfer_complete->command_key); - bkp_session_insert(b,"start_time",ptransfer_complete->start_time); - bkp_session_insert(b,"complete_time",ptransfer_complete->complete_time); - bkp_session_insert(b,"old_software_version",ptransfer_complete->old_software_version); - bkp_session_insert(b,"fault_code",fault_code); - bkp_session_insert(b,"type",type); + if (!b) { + b = bkp_session_insert(bkp_tree, "transfer_complete", NULL); + bkp_session_insert(b, "command_key", ptransfer_complete->command_key); + bkp_session_insert(b, "start_time", ptransfer_complete->start_time); + bkp_session_insert(b, "complete_time", ptransfer_complete->complete_time); + bkp_session_insert(b, "old_software_version", ptransfer_complete->old_software_version); + bkp_session_insert(b, "fault_code", fault_code); + bkp_session_insert(b, "type", type); } - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } void bkp_session_delete_transfer_complete(struct transfer_complete *ptransfer_complete) { - struct search_keywords keys[5]; - char fault_code[16]; - char type[16]; - mxml_node_t *b; + struct search_keywords keys[5]; + char fault_code[16]; + char type[16]; + mxml_node_t *b; - pthread_mutex_lock (&mutex_backup_session); - sprintf(fault_code,"%d",ptransfer_complete->fault_code); - sprintf(type,"%d",ptransfer_complete->type); + pthread_mutex_lock(&mutex_backup_session); + sprintf(fault_code, "%d", ptransfer_complete->fault_code); + sprintf(type, "%d", ptransfer_complete->type); keys[0].name = "command_key"; keys[0].value = ptransfer_complete->command_key; keys[1].name = "start_time"; @@ -748,19 +726,19 @@ void bkp_session_delete_transfer_complete(struct transfer_complete *ptransfer_co keys[4].name = "type"; keys[4].value = type; b = bkp_session_node_found(bkp_tree, "transfer_complete", keys, 5); - if(b) + if (b) mxmlDelete(b); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } int save_acs_bkp_config(struct cwmp *cwmp) { - struct config *conf; + struct config *conf; - conf = &(cwmp->conf); + conf = &(cwmp->conf); bkp_session_simple_insert("acs", "url", conf->acsurl); bkp_session_save(); - return CWMP_OK; + return CWMP_OK; } /* @@ -768,17 +746,15 @@ int save_acs_bkp_config(struct cwmp *cwmp) */ char *load_child_value(mxml_node_t *tree, char *sub_name) { - char *value = NULL; - mxml_node_t *b = tree; + char *value = NULL; + mxml_node_t *b = tree; if (b) { b = mxmlFindElement(b, b, sub_name, NULL, NULL, MXML_DESCEND); if (b) { b = mxmlWalkNext(b, tree, MXML_DESCEND); - if (b && b->type == MXML_OPAQUE) - { - if(b->value.opaque != NULL) - { + if (b && b->type == MXML_OPAQUE) { + if (b->value.opaque != NULL) { value = strdup(b->value.opaque); } } @@ -787,73 +763,53 @@ char *load_child_value(mxml_node_t *tree, char *sub_name) return value; } -void load_queue_event(mxml_node_t *tree,struct cwmp *cwmp) +void load_queue_event(mxml_node_t *tree, struct cwmp *cwmp) { - char *command_key = NULL; - mxml_node_t *b = tree, *c; - int idx = -1, id = -1; - struct event_container *event_container_save = NULL; + char *command_key = NULL; + mxml_node_t *b = tree, *c; + int idx = -1, id = -1; + struct event_container *event_container_save = NULL; b = mxmlWalkNext(b, tree, MXML_DESCEND); while (b) { if (b && b->type == MXML_ELEMENT) { - if(strcmp(b->value.element.name, "index") == 0) - { + if (strcmp(b->value.element.name, "index") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { idx = atoi(c->value.opaque); } } - } - else if(strcmp(b->value.element.name, "id") == 0) - { + } else if (strcmp(b->value.element.name, "id") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { id = atoi(c->value.opaque); } } - } - else if(strcmp(b->value.element.name, "command_key") == 0) - { + } else if (strcmp(b->value.element.name, "command_key") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { command_key = strdup(c->value.opaque); } } - if(idx != -1) - { - if (EVENT_CONST[idx].RETRY & EVENT_RETRY_AFTER_REBOOT) - { - event_container_save = cwmp_add_event_container (cwmp, idx, ((command_key!=NULL)?command_key:"")); - if(event_container_save != NULL) - { + if (idx != -1) { + if (EVENT_CONST[idx].RETRY & EVENT_RETRY_AFTER_REBOOT) { + event_container_save = cwmp_add_event_container(cwmp, idx, ((command_key != NULL) ? command_key : "")); + if (event_container_save != NULL) { event_container_save->id = id; } } } FREE(command_key); - } - else if(strcmp(b->value.element.name, "parameter") == 0) - { + } else if (strcmp(b->value.element.name, "parameter") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { - if(event_container_save != NULL) - { - add_dm_parameter_tolist(&(event_container_save->head_dm_parameter), - c->value.opaque, NULL, NULL); + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { + if (event_container_save != NULL) { + add_dm_parameter_tolist(&(event_container_save->head_dm_parameter), c->value.opaque, NULL, NULL); } } } @@ -865,34 +821,27 @@ void load_queue_event(mxml_node_t *tree,struct cwmp *cwmp) void load_schedule_inform(mxml_node_t *tree) { - char *command_key = NULL; - mxml_node_t *b = tree, *c; - time_t scheduled_time = 0; - struct schedule_inform *schedule_inform = NULL; - struct list_head *ilist = NULL; + char *command_key = NULL; + mxml_node_t *b = tree, *c; + time_t scheduled_time = 0; + struct schedule_inform *schedule_inform = NULL; + struct list_head *ilist = NULL; b = mxmlWalkNext(b, tree, MXML_DESCEND); while (b) { if (b && b->type == MXML_ELEMENT) { - if (strcmp(b->value.element.name, "command_key") == 0) - { + if (strcmp(b->value.element.name, "command_key") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { command_key = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "time") == 0) - { + } else if (strcmp(b->value.element.name, "time") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { scheduled_time = atol(c->value.opaque); } } @@ -900,109 +849,79 @@ void load_schedule_inform(mxml_node_t *tree) } b = mxmlWalkNext(b, tree, MXML_NO_DESCEND); } - list_for_each(ilist,&(list_schedule_inform)) - { - schedule_inform = list_entry(ilist,struct schedule_inform, list); - if (schedule_inform->scheduled_time > scheduled_time) - { + list_for_each (ilist, &(list_schedule_inform)) { + schedule_inform = list_entry(ilist, struct schedule_inform, list); + if (schedule_inform->scheduled_time > scheduled_time) { break; } } - schedule_inform = calloc (1,sizeof(struct schedule_inform)); - if (schedule_inform != NULL) - { - schedule_inform->commandKey = command_key; + schedule_inform = calloc(1, sizeof(struct schedule_inform)); + if (schedule_inform != NULL) { + schedule_inform->commandKey = command_key; schedule_inform->scheduled_time = scheduled_time; - list_add (&(schedule_inform->list), ilist->prev); + list_add(&(schedule_inform->list), ilist->prev); } } void load_download(mxml_node_t *tree) { - mxml_node_t *b = tree, *c; - struct download *download_request = NULL; - struct list_head *ilist = NULL; - struct download *idownload_request = NULL; + mxml_node_t *b = tree, *c; + struct download *download_request = NULL; + struct list_head *ilist = NULL; + struct download *idownload_request = NULL; - download_request = calloc(1,sizeof(struct download)); + download_request = calloc(1, sizeof(struct download)); b = mxmlWalkNext(b, tree, MXML_DESCEND); while (b) { if (b && b->type == MXML_ELEMENT) { - if (strcmp(b->value.element.name, "url") == 0) - { + if (strcmp(b->value.element.name, "url") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->url = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "command_key") == 0) - { + } else if (strcmp(b->value.element.name, "command_key") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->command_key = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "file_type") == 0) - { + } else if (strcmp(b->value.element.name, "file_type") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->file_type = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "username") == 0) - { + } else if (strcmp(b->value.element.name, "username") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->username = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "password") == 0) - { + } else if (strcmp(b->value.element.name, "password") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->password = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "file_size") == 0) - { + } else if (strcmp(b->value.element.name, "file_size") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->file_size = atoi(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "time") == 0) - { + } else if (strcmp(b->value.element.name, "time") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->scheduled_time = atol(c->value.opaque); } } @@ -1010,204 +929,139 @@ void load_download(mxml_node_t *tree) } b = mxmlWalkNext(b, tree, MXML_NO_DESCEND); } - list_for_each(ilist,&(list_download)) - { - idownload_request = list_entry(ilist,struct download,list); - if (idownload_request->scheduled_time > download_request->scheduled_time) - { + list_for_each (ilist, &(list_download)) { + idownload_request = list_entry(ilist, struct download, list); + if (idownload_request->scheduled_time > download_request->scheduled_time) { break; } } - list_add (&(download_request->list), ilist->prev); - if(download_request->scheduled_time != 0) + list_add(&(download_request->list), ilist->prev); + if (download_request->scheduled_time != 0) count_download_queue++; } void load_schedule_download(mxml_node_t *tree) { - mxml_node_t *b = tree, *c; - struct schedule_download *download_request = NULL; - struct list_head *ilist = NULL; - struct schedule_download *idownload_request = NULL; + mxml_node_t *b = tree, *c; + struct schedule_download *download_request = NULL; + struct list_head *ilist = NULL; + struct schedule_download *idownload_request = NULL; - download_request = calloc(1,sizeof(struct schedule_download)); + download_request = calloc(1, sizeof(struct schedule_download)); b = mxmlWalkNext(b, tree, MXML_DESCEND); while (b) { if (b && b->type == MXML_ELEMENT) { - if (strcmp(b->value.element.name, "url") == 0) - { + if (strcmp(b->value.element.name, "url") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->url = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "command_key") == 0) - { + } else if (strcmp(b->value.element.name, "command_key") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->command_key = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "file_type") == 0) - { + } else if (strcmp(b->value.element.name, "file_type") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->file_type = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "username") == 0) - { + } else if (strcmp(b->value.element.name, "username") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->username = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "password") == 0) - { + } else if (strcmp(b->value.element.name, "password") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->password = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "file_size") == 0) - { + } else if (strcmp(b->value.element.name, "file_size") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->file_size = atoi(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "windowstart1") == 0) - { + } else if (strcmp(b->value.element.name, "windowstart1") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timewindowstruct[0].windowstart = atol(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "windowend1") == 0) - { + } else if (strcmp(b->value.element.name, "windowend1") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timewindowstruct[0].windowend = atol(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "windowmode1") == 0) - { + } else if (strcmp(b->value.element.name, "windowmode1") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timewindowstruct[0].windowmode = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "usermessage1") == 0) - { + } else if (strcmp(b->value.element.name, "usermessage1") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timewindowstruct[0].usermessage = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "maxretrie1") == 0) - { + } else if (strcmp(b->value.element.name, "maxretrie1") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timewindowstruct[0].maxretries = atoi(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "windowstart2") == 0) - { + } else if (strcmp(b->value.element.name, "windowstart2") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timewindowstruct[1].windowstart = atol(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "windowend2") == 0) - { + } else if (strcmp(b->value.element.name, "windowend2") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timewindowstruct[1].windowend = atol(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "windowmode2") == 0) - { + } else if (strcmp(b->value.element.name, "windowmode2") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timewindowstruct[1].windowmode = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "usermessage2") == 0) - { + } else if (strcmp(b->value.element.name, "usermessage2") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timewindowstruct[1].usermessage = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "maxretrie2") == 0) - { + } else if (strcmp(b->value.element.name, "maxretrie2") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timewindowstruct[1].maxretries = atoi(c->value.opaque); } } @@ -1215,126 +1069,88 @@ void load_schedule_download(mxml_node_t *tree) } b = mxmlWalkNext(b, tree, MXML_NO_DESCEND); } - list_for_each(ilist,&(list_schedule_download)) - { - idownload_request = list_entry(ilist,struct schedule_download,list); - if (idownload_request->timewindowstruct[0].windowstart > download_request->timewindowstruct[0].windowstart) - { + list_for_each (ilist, &(list_schedule_download)) { + idownload_request = list_entry(ilist, struct schedule_download, list); + if (idownload_request->timewindowstruct[0].windowstart > download_request->timewindowstruct[0].windowstart) { break; } } - list_add (&(download_request->list), ilist->prev); - if(download_request->timewindowstruct[0].windowstart != 0) + list_add(&(download_request->list), ilist->prev); + if (download_request->timewindowstruct[0].windowstart != 0) count_download_queue++; } - void load_apply_schedule_download(mxml_node_t *tree) { - mxml_node_t *b = tree, *c; - struct apply_schedule_download *download_request = NULL; + mxml_node_t *b = tree, *c; + struct apply_schedule_download *download_request = NULL; - download_request = calloc(1,sizeof(struct apply_schedule_download)); + download_request = calloc(1, sizeof(struct apply_schedule_download)); b = mxmlWalkNext(b, tree, MXML_DESCEND); while (b) { if (b && b->type == MXML_ELEMENT) { - if (strcmp(b->value.element.name, "command_key") == 0) - { + if (strcmp(b->value.element.name, "command_key") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->command_key = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "file_type") == 0) - { + } else if (strcmp(b->value.element.name, "file_type") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->file_type = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "start_time") == 0) - { + } else if (strcmp(b->value.element.name, "start_time") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->start_time = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "windowstart1") == 0) - { + } else if (strcmp(b->value.element.name, "windowstart1") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timeintervals[0].windowstart = atol(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "windowend1") == 0) - { + } else if (strcmp(b->value.element.name, "windowend1") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timeintervals[0].windowend = atol(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "maxretrie1") == 0) - { + } else if (strcmp(b->value.element.name, "maxretrie1") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timeintervals[0].maxretries = atoi(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "windowstart2") == 0) - { + } else if (strcmp(b->value.element.name, "windowstart2") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timeintervals[1].windowstart = atol(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "windowend2") == 0) - { + } else if (strcmp(b->value.element.name, "windowend2") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timeintervals[1].windowend = atol(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "maxretrie2") == 0) - { + } else if (strcmp(b->value.element.name, "maxretrie2") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { download_request->timeintervals[1].maxretries = atoi(c->value.opaque); } } @@ -1345,89 +1161,65 @@ void load_apply_schedule_download(mxml_node_t *tree) bkp_session_insert(b,"windowmode1",pschedule_download->timewindowstruct[0].windowmode); bkp_session_insert(b,"usermessage1",pschedule_download->timewindowstruct[0].usermessage); bkp_session_insert(b,"maxretrie1*/ - } b = mxmlWalkNext(b, tree, MXML_NO_DESCEND); } - list_add_tail (&(download_request->list), &(list_apply_schedule_download)); - if(download_request->timeintervals[0].windowstart != 0) + list_add_tail(&(download_request->list), &(list_apply_schedule_download)); + if (download_request->timeintervals[0].windowstart != 0) count_download_queue++; } void load_upload(mxml_node_t *tree) { - mxml_node_t *b = tree, *c; - struct upload *upload_request = NULL; - struct list_head *ilist = NULL; - struct upload *iupload_request = NULL; + mxml_node_t *b = tree, *c; + struct upload *upload_request = NULL; + struct list_head *ilist = NULL; + struct upload *iupload_request = NULL; - upload_request = calloc(1,sizeof(struct upload)); + upload_request = calloc(1, sizeof(struct upload)); b = mxmlWalkNext(b, tree, MXML_DESCEND); while (b) { if (b && b->type == MXML_ELEMENT) { - if (strcmp(b->value.element.name, "url") == 0) - { + if (strcmp(b->value.element.name, "url") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { upload_request->url = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "command_key") == 0) - { + } else if (strcmp(b->value.element.name, "command_key") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { upload_request->command_key = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "file_type") == 0) - { + } else if (strcmp(b->value.element.name, "file_type") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { upload_request->file_type = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "username") == 0) - { + } else if (strcmp(b->value.element.name, "username") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { upload_request->username = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "password") == 0) - { + } else if (strcmp(b->value.element.name, "password") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { upload_request->password = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "time") == 0) - { + } else if (strcmp(b->value.element.name, "time") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { upload_request->scheduled_time = atol(c->value.opaque); } } @@ -1435,196 +1227,153 @@ void load_upload(mxml_node_t *tree) } b = mxmlWalkNext(b, tree, MXML_NO_DESCEND); } - list_for_each(ilist,&(list_upload)) - { - iupload_request = list_entry(ilist,struct upload,list); - if (iupload_request->scheduled_time > upload_request->scheduled_time) - { + list_for_each (ilist, &(list_upload)) { + iupload_request = list_entry(ilist, struct upload, list); + if (iupload_request->scheduled_time > upload_request->scheduled_time) { break; } } - list_add (&(upload_request->list), ilist->prev); - if(upload_request->scheduled_time != 0) + list_add(&(upload_request->list), ilist->prev); + if (upload_request->scheduled_time != 0) count_download_queue++; } void load_change_du_state(mxml_node_t *tree) { - mxml_node_t *b = tree, *c, *d; - struct change_du_state *change_du_state_request = NULL; - struct operations *elem; + mxml_node_t *b = tree, *c, *d; + struct change_du_state *change_du_state_request = NULL; + struct operations *elem; - change_du_state_request = calloc(1,sizeof(struct change_du_state)); + change_du_state_request = calloc(1, sizeof(struct change_du_state)); INIT_LIST_HEAD(&(change_du_state_request->list_operation)); b = mxmlWalkNext(b, tree, MXML_DESCEND); while (b) { if (b && b->type == MXML_ELEMENT) { - if (strcmp(b->value.element.name, "command_key") == 0) - { + if (strcmp(b->value.element.name, "command_key") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { change_du_state_request->command_key = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "time") == 0) - { + } else if (strcmp(b->value.element.name, "time") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { change_du_state_request->timeout = atol(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "update") == 0) - { - elem = (operations*)calloc(1, sizeof(operations)); + } else if (strcmp(b->value.element.name, "update") == 0) { + elem = (operations *)calloc(1, sizeof(operations)); elem->type = DU_UPDATE; list_add_tail(&(elem->list), &(change_du_state_request->list_operation)); c = mxmlWalkNext(b, b, MXML_DESCEND); - while(c) { + while (c) { // if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "uuid") == 0) - { + if (strcmp(c->value.element.name, "uuid") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->uuid = strdup(d->value.opaque); } } } - } + } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "version") == 0) - { + if (strcmp(c->value.element.name, "version") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->version = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "url") == 0) - { + if (strcmp(c->value.element.name, "url") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->url = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "username") == 0) - { + if (strcmp(c->value.element.name, "username") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->username = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "password") == 0) - { + if (strcmp(c->value.element.name, "password") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->password = strdup(d->value.opaque); } } } } c = mxmlWalkNext(c, b, MXML_NO_DESCEND); - } - } - else if (strcmp(b->value.element.name, "install") == 0) - { - elem = (operations*)calloc(1, sizeof(operations)); + } + } else if (strcmp(b->value.element.name, "install") == 0) { + elem = (operations *)calloc(1, sizeof(operations)); elem->type = DU_INSTALL; list_add_tail(&(elem->list), &(change_du_state_request->list_operation)); c = mxmlWalkNext(b, b, MXML_DESCEND); - while(c) { + while (c) { if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "uuid") == 0) - { + if (strcmp(c->value.element.name, "uuid") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->uuid = strdup(d->value.opaque); } } } - } + } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "executionenvref") == 0) - { + if (strcmp(c->value.element.name, "executionenvref") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->executionenvref = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "url") == 0) - { + if (strcmp(c->value.element.name, "url") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->url = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "username") == 0) - { + if (strcmp(c->value.element.name, "username") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->username = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "password") == 0) - { + if (strcmp(c->value.element.name, "password") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->password = strdup(d->value.opaque); } } @@ -1632,48 +1381,37 @@ void load_change_du_state(mxml_node_t *tree) } c = mxmlWalkNext(c, b, MXML_NO_DESCEND); } - } - else if (strcmp(b->value.element.name, "uninstall") == 0) - { - elem = (operations*)calloc(1, sizeof(operations)); + } else if (strcmp(b->value.element.name, "uninstall") == 0) { + elem = (operations *)calloc(1, sizeof(operations)); elem->type = DU_UNINSTALL; list_add_tail(&(elem->list), &(change_du_state_request->list_operation)); c = mxmlWalkNext(b, b, MXML_DESCEND); - while(c) { + while (c) { if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "uuid") == 0) - { + if (strcmp(c->value.element.name, "uuid") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->uuid = strdup(d->value.opaque); } } } - } + } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "executionenvref") == 0) - { + if (strcmp(c->value.element.name, "executionenvref") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->executionenvref = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "version") == 0) - { + if (strcmp(c->value.element.name, "version") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->version = strdup(d->value.opaque); } } @@ -1681,251 +1419,192 @@ void load_change_du_state(mxml_node_t *tree) } c = mxmlWalkNext(c, b, MXML_NO_DESCEND); } - } + } } b = mxmlWalkNext(b, tree, MXML_NO_DESCEND); } - list_add_tail (&(change_du_state_request->list_operation), &(list_change_du_state)); + list_add_tail(&(change_du_state_request->list_operation), &(list_change_du_state)); } -void load_du_state_change_complete (mxml_node_t *tree,struct cwmp *cwmp) +void load_du_state_change_complete(mxml_node_t *tree, struct cwmp *cwmp) { - mxml_node_t *b = tree, *c, *d; - struct du_state_change_complete *du_state_change_complete_request = NULL; - struct opresult *elem; + mxml_node_t *b = tree, *c, *d; + struct du_state_change_complete *du_state_change_complete_request = NULL; + struct opresult *elem; - du_state_change_complete_request = calloc(1,sizeof(struct du_state_change_complete)); + du_state_change_complete_request = calloc(1, sizeof(struct du_state_change_complete)); INIT_LIST_HEAD(&(du_state_change_complete_request->list_opresult)); b = mxmlWalkNext(b, tree, MXML_DESCEND); while (b) { if (b && b->type == MXML_ELEMENT) { - if (strcmp(b->value.element.name, "command_key") == 0) - { + if (strcmp(b->value.element.name, "command_key") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { du_state_change_complete_request->command_key = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "time") == 0) - { + } else if (strcmp(b->value.element.name, "time") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { du_state_change_complete_request->timeout = atol(c->value.opaque); } } - } - else if (strcmp(b->value.element.name, "opresult") == 0) - { - elem = (opresult*)calloc(1, sizeof(opresult)); + } else if (strcmp(b->value.element.name, "opresult") == 0) { + elem = (opresult *)calloc(1, sizeof(opresult)); list_add_tail(&(elem->list), &(du_state_change_complete_request->list_opresult)); c = mxmlWalkNext(b, b, MXML_DESCEND); - while(c) { + while (c) { if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "uuid") == 0) - { + if (strcmp(c->value.element.name, "uuid") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->uuid = strdup(d->value.opaque); } } } - } + } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "version") == 0) - { + if (strcmp(c->value.element.name, "version") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->version = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "du_ref") == 0) - { + if (strcmp(c->value.element.name, "du_ref") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->du_ref = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "current_state") == 0) - { + if (strcmp(c->value.element.name, "current_state") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->current_state = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "resolved") == 0) - { + if (strcmp(c->value.element.name, "resolved") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->resolved = d->value.opaque; } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "start_time") == 0) - { + if (strcmp(c->value.element.name, "start_time") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->start_time = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "complete_time") == 0) - { + if (strcmp(c->value.element.name, "complete_time") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->complete_time = strdup(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "fault") == 0) - { + if (strcmp(c->value.element.name, "fault") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->fault = atoi(d->value.opaque); } } } } if (c && c->type == MXML_ELEMENT) { - if (strcmp(c->value.element.name, "execution_unit_ref") == 0) - { + if (strcmp(c->value.element.name, "execution_unit_ref") == 0) { d = mxmlWalkNext(c, c, MXML_DESCEND); - if (d && d->type == MXML_OPAQUE) - { - if(d->value.opaque != NULL) - { + if (d && d->type == MXML_OPAQUE) { + if (d->value.opaque != NULL) { elem->execution_unit_ref = strdup(d->value.opaque); } } } } c = mxmlWalkNext(c, b, MXML_NO_DESCEND); - } - } + } + } } b = mxmlWalkNext(b, tree, MXML_NO_DESCEND); } - cwmp_root_cause_dustatechangeComplete (cwmp, du_state_change_complete_request); + cwmp_root_cause_dustatechangeComplete(cwmp, du_state_change_complete_request); } -void load_transfer_complete(mxml_node_t *tree,struct cwmp *cwmp) +void load_transfer_complete(mxml_node_t *tree, struct cwmp *cwmp) { - mxml_node_t *b = tree, *c; - struct transfer_complete *ptransfer_complete; + mxml_node_t *b = tree, *c; + struct transfer_complete *ptransfer_complete; b = mxmlWalkNext(b, tree, MXML_DESCEND); - ptransfer_complete = calloc (1,sizeof(struct transfer_complete)); + ptransfer_complete = calloc(1, sizeof(struct transfer_complete)); while (b) { if (b && b->type == MXML_ELEMENT) { - if (strcmp(b->value.element.name,"command_key") == 0) - { + if (strcmp(b->value.element.name, "command_key") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { ptransfer_complete->command_key = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name,"start_time") == 0) - { + } else if (strcmp(b->value.element.name, "start_time") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { ptransfer_complete->start_time = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name,"complete_time") == 0) - { + } else if (strcmp(b->value.element.name, "complete_time") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { ptransfer_complete->complete_time = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name,"old_software_version") == 0) - { + } else if (strcmp(b->value.element.name, "old_software_version") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { ptransfer_complete->old_software_version = strdup(c->value.opaque); } } - } - else if (strcmp(b->value.element.name,"fault_code") == 0) - { + } else if (strcmp(b->value.element.name, "fault_code") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { ptransfer_complete->fault_code = atoi(c->value.opaque); } } - } - else if (strcmp(b->value.element.name,"type") == 0) - { + } else if (strcmp(b->value.element.name, "type") == 0) { c = mxmlWalkNext(b, b, MXML_DESCEND); - if (c && c->type == MXML_OPAQUE) - { - if(c->value.opaque != NULL) - { + if (c && c->type == MXML_OPAQUE) { + if (c->value.opaque != NULL) { ptransfer_complete->type = atoi(c->value.opaque); } } @@ -1933,53 +1612,49 @@ void load_transfer_complete(mxml_node_t *tree,struct cwmp *cwmp) } b = mxmlWalkNext(b, tree, MXML_NO_DESCEND); } - cwmp_root_cause_TransferComplete (cwmp, ptransfer_complete); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); sotfware_version_value_change(cwmp, ptransfer_complete); } void bkp_session_create_file() { - FILE *pFile; + FILE *pFile; - pthread_mutex_lock (&mutex_backup_session); - pFile = fopen(CWMP_BKP_FILE,"w"); - if(pFile == NULL) - { - CWMP_LOG(ERROR,"Unable to create %s file",CWMP_BKP_FILE); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_lock(&mutex_backup_session); + pFile = fopen(CWMP_BKP_FILE, "w"); + if (pFile == NULL) { + CWMP_LOG(ERROR, "Unable to create %s file", CWMP_BKP_FILE); + pthread_mutex_unlock(&mutex_backup_session); return; } - fprintf(pFile,"%s",CWMP_BACKUP_SESSION); - if(bkp_tree != NULL) + fprintf(pFile, "%s", CWMP_BACKUP_SESSION); + if (bkp_tree != NULL) MXML_DELETE(bkp_tree); bkp_tree = mxmlLoadString(NULL, CWMP_BACKUP_SESSION, MXML_OPAQUE_CALLBACK); fclose(pFile); - pthread_mutex_unlock (&mutex_backup_session); + pthread_mutex_unlock(&mutex_backup_session); } int bkp_session_check_file() { - FILE *pFile; + FILE *pFile; - if(access(CWMP_BKP_FILE, F_OK) == -1) - { + if (access(CWMP_BKP_FILE, F_OK) == -1) { bkp_session_create_file(); return -1; } - if(bkp_tree == NULL) - { + if (bkp_tree == NULL) { pFile = fopen(CWMP_BKP_FILE, "r"); bkp_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK); fclose(pFile); } - if(bkp_tree == NULL) - { + if (bkp_tree == NULL) { bkp_session_create_file(); return -1; } - bkp_session_move_inform_to_inform_queue (); + bkp_session_move_inform_to_inform_queue(); bkp_session_save(); return 0; } @@ -1988,7 +1663,7 @@ int cwmp_init_backup_session(struct cwmp *cwmp, char **ret, enum backup_loading { int error; - if(bkp_session_check_file()) + if (bkp_session_check_file()) return 0; error = cwmp_load_saved_session(cwmp, ret, load); @@ -2001,76 +1676,49 @@ int cwmp_load_saved_session(struct cwmp *cwmp, char **ret, enum backup_loading l b = bkp_tree; b = mxmlWalkNext(b, bkp_tree, MXML_DESCEND); - while(b) - { - if(load == ACS) - { - if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "acs") == 0) - { + while (b) { + if (load == ACS) { + if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "acs") == 0) { *ret = load_child_value(b, "url"); break; } } - if(load == CR_IP) - { - if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "connection_request") == 0) - { + if (load == CR_IP) { + if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "connection_request") == 0) { *ret = load_child_value(b, "ip"); break; } } - if(load == CR_IPv6) - { - if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "connection_request") == 0) - { + if (load == CR_IPv6) { + if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "connection_request") == 0) { *ret = load_child_value(b, "ipv6"); break; } } - if(load == CR_PORT) - { - if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "connection_request") == 0) - { + if (load == CR_PORT) { + if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "connection_request") == 0) { *ret = load_child_value(b, "port"); break; } } - if(load == ALL) - { - if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "queue_event") == 0) - { - load_queue_event(b,cwmp); - } - else if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "download") == 0) - { + if (load == ALL) { + if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "queue_event") == 0) { + load_queue_event(b, cwmp); + } else if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "download") == 0) { load_download(b); - } - else if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "upload") == 0) - { + } else if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "upload") == 0) { load_upload(b); - } - else if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "transfer_complete") == 0) - { - load_transfer_complete(b,cwmp); - } - else if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "schedule_inform") == 0) - { + } else if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "transfer_complete") == 0) { + load_transfer_complete(b, cwmp); + } else if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "schedule_inform") == 0) { load_schedule_inform(b); - } - else if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "change_du_state") == 0) - { + } else if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "change_du_state") == 0) { load_change_du_state(b); - } - else if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "du_state_change_complete") == 0) - { - load_du_state_change_complete(b,cwmp); - } - else if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "schedule_download") == 0) - { + } else if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "du_state_change_complete") == 0) { + load_du_state_change_complete(b, cwmp); + } else if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "schedule_download") == 0) { load_schedule_download(b); - } - else if(b->type == MXML_ELEMENT && strcmp(b->value.element.name, "apply_schedule_download") == 0) - { + } else if (b->type == MXML_ELEMENT && strcmp(b->value.element.name, "apply_schedule_download") == 0) { load_apply_schedule_download(b); } } diff --git a/common.c b/common.c index 9259dd1..c0caa60 100644 --- a/common.c +++ b/common.c @@ -14,25 +14,23 @@ char *commandKey = NULL; -struct option cwmp_long_options[] = { - {"boot-event", no_argument, NULL, 'b'}, - {"get-rpc-methods", no_argument, NULL, 'g'}, - {"command-input", no_argument, NULL, 'c'}, - {"shell-cli", required_argument, NULL, 'm'}, - {"alias-based-addressing", no_argument, NULL, 'a'}, - {"instance-mode-number", no_argument, NULL, 'N'}, - {"instance-mode-alias", no_argument, NULL, 'A'}, - {"upnp", no_argument, NULL, 'U'}, - {"user-acl", required_argument, NULL, 'u'}, - {"amendment", required_argument, NULL, 'M'}, - {"time-tracking", no_argument, NULL, 't'}, - {"evaluating-test", no_argument, NULL, 'E'}, - {"file", required_argument, NULL, 'f'}, - {"wep", required_argument, NULL, 'w'}, - {"help", no_argument, NULL, 'h'}, - {"version", no_argument, NULL, 'v'}, - {NULL, 0, NULL, 0} -}; +struct option cwmp_long_options[] = { { "boot-event", no_argument, NULL, 'b' }, + { "get-rpc-methods", no_argument, NULL, 'g' }, + { "command-input", no_argument, NULL, 'c' }, + { "shell-cli", required_argument, NULL, 'm' }, + { "alias-based-addressing", no_argument, NULL, 'a' }, + { "instance-mode-number", no_argument, NULL, 'N' }, + { "instance-mode-alias", no_argument, NULL, 'A' }, + { "upnp", no_argument, NULL, 'U' }, + { "user-acl", required_argument, NULL, 'u' }, + { "amendment", required_argument, NULL, 'M' }, + { "time-tracking", no_argument, NULL, 't' }, + { "evaluating-test", no_argument, NULL, 'E' }, + { "file", required_argument, NULL, 'f' }, + { "wep", required_argument, NULL, 'w' }, + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, 'v' }, + { NULL, 0, NULL, 0 } }; static void show_help(void) { @@ -46,21 +44,18 @@ static void show_help(void) static void show_version() { #ifndef CWMP_REVISION - fprintf(stdout, "\nVersion: %s\n\n",CWMP_VERSION); + fprintf(stdout, "\nVersion: %s\n\n", CWMP_VERSION); #else - fprintf(stdout, "\nVersion: %s revision %s\n\n",CWMP_VERSION,CWMP_REVISION); + fprintf(stdout, "\nVersion: %s revision %s\n\n", CWMP_VERSION, CWMP_REVISION); #endif } -int global_env_init (int argc, char** argv, struct env *env) +int global_env_init(int argc, char **argv, struct env *env) { - int c, option_index = 0; while ((c = getopt_long(argc, argv, "bghv", cwmp_long_options, &option_index)) != -1) { - - switch (c) - { + switch (c) { case 'b': env->boot = CWMP_START_BOOT; break; @@ -90,8 +85,7 @@ void add_dm_parameter_tolist(struct list_head *head, char *param_name, char *par dm_parameter = list_entry(ilist, struct cwmp_dm_parameter, list); cmp = strcmp(dm_parameter->name, param_name); if (cmp == 0) { - if (param_data && strcmp(dm_parameter->data, param_data) != 0) - { + if (param_data && strcmp(dm_parameter->data, param_data) != 0) { free(dm_parameter->data); dm_parameter->data = strdup(param_data); } @@ -102,9 +96,12 @@ void add_dm_parameter_tolist(struct list_head *head, char *param_name, char *par } dm_parameter = calloc(1, sizeof(struct cwmp_dm_parameter)); _list_add(&dm_parameter->list, ilist->prev, ilist); - if (param_name) dm_parameter->name = strdup(param_name); - if (param_data) dm_parameter->data = strdup(param_data); - if (param_type) dm_parameter->type = strdup(param_type ? param_type : "xsd:string"); + if (param_name) + dm_parameter->name = strdup(param_name); + if (param_data) + dm_parameter->data = strdup(param_data); + if (param_type) + dm_parameter->type = strdup(param_type ? param_type : "xsd:string"); } void delete_dm_parameter_fromlist(struct cwmp_dm_parameter *dm_parameter) @@ -119,7 +116,7 @@ void delete_dm_parameter_fromlist(struct cwmp_dm_parameter *dm_parameter) void free_dm_parameter_all_fromlist(struct list_head *list) { struct cwmp_dm_parameter *dm_parameter; - while (list->next!=list) { + while (list->next != list) { dm_parameter = list_entry(list->next, struct cwmp_dm_parameter, list); delete_dm_parameter_fromlist(dm_parameter); } @@ -144,7 +141,7 @@ void cwmp_del_list_fault_param(struct cwmp_param_fault *param_fault) free(param_fault); } -void cwmp_add_list_param_value(char *param, char* value, struct list_head *list_param_value) +void cwmp_add_list_param_value(char *param, char *value, struct list_head *list_param_value) { struct cwmp_param_value *param_value = NULL; if (param == NULL) @@ -153,7 +150,7 @@ void cwmp_add_list_param_value(char *param, char* value, struct list_head *list_ param_value = calloc(1, sizeof(struct cwmp_param_value)); list_add_tail(¶m_value->list, list_param_value); param_value->param = strdup(param); - param_value->value = strdup(value?value:""); + param_value->value = strdup(value ? value : ""); } void cwmp_del_list_param_value(struct cwmp_param_value *param_value) diff --git a/config.c b/config.c index b6eee37..82bfb01 100644 --- a/config.c +++ b/config.c @@ -14,668 +14,502 @@ #include "cwmp_uci.h" #include "log.h" -pthread_mutex_t mutex_config_load = PTHREAD_MUTEX_INITIALIZER; +pthread_mutex_t mutex_config_load = PTHREAD_MUTEX_INITIALIZER; - -int check_global_config (struct config *conf) +int check_global_config(struct config *conf) { - if (conf->acsurl==NULL) - { - conf->acsurl = strdup(DEFAULT_ACSURL); - } - return CWMP_OK; + if (conf->acsurl == NULL) { + conf->acsurl = strdup(DEFAULT_ACSURL); + } + return CWMP_OK; } int get_global_config(struct config *conf) { - int error, error2, error3; - char *value = NULL, *value2 = NULL, *value3 = NULL; + int error, error2, error3; + char *value = NULL, *value2 = NULL, *value3 = NULL; - if((error = uci_get_value(UCI_CPE_LOG_FILE_NAME,&value)) == CWMP_OK) - { - if(value != NULL) - { - log_set_log_file_name (value); - free(value); - value = NULL; - } - } + if ((error = uci_get_value(UCI_CPE_LOG_FILE_NAME, &value)) == CWMP_OK) { + if (value != NULL) { + log_set_log_file_name(value); + free(value); + value = NULL; + } + } - if((error = uci_get_value(UCI_CPE_LOG_MAX_SIZE,&value)) == CWMP_OK) - { - if(value != NULL) - { - log_set_file_max_size(value); - free(value); - value = NULL; - } - } + if ((error = uci_get_value(UCI_CPE_LOG_MAX_SIZE, &value)) == CWMP_OK) { + if (value != NULL) { + log_set_file_max_size(value); + free(value); + value = NULL; + } + } - if((error = uci_get_value(UCI_CPE_ENABLE_STDOUT_LOG,&value)) == CWMP_OK) - { - if(value != NULL) - { - log_set_on_console(value); - free(value); - value = NULL; - } - } + if ((error = uci_get_value(UCI_CPE_ENABLE_STDOUT_LOG, &value)) == CWMP_OK) { + if (value != NULL) { + log_set_on_console(value); + free(value); + value = NULL; + } + } - if((error = uci_get_value(UCI_CPE_ENABLE_FILE_LOG,&value)) == CWMP_OK) - { - if(value != NULL) - { - log_set_on_file(value); - free(value); - value = NULL; - } - } + if ((error = uci_get_value(UCI_CPE_ENABLE_FILE_LOG, &value)) == CWMP_OK) { + if (value != NULL) { + log_set_on_file(value); + free(value); + value = NULL; + } + } - error = uci_get_value(UCI_DHCP_DISCOVERY_PATH,&value); - error2 = uci_get_value(UCI_ACS_URL_PATH,&value2); - error3 = uci_get_state_value(UCI_DHCP_ACS_URL,&value3); + error = uci_get_value(UCI_DHCP_DISCOVERY_PATH, &value); + error2 = uci_get_value(UCI_ACS_URL_PATH, &value2); + error3 = uci_get_state_value(UCI_DHCP_ACS_URL, &value3); - if ((((error == CWMP_OK) && (value != NULL) && (strcmp(value,"enable") == 0)) || - ((error2 == CWMP_OK) && ((value2 == NULL) || (value2[0] == 0)))) && - ((error3 == CWMP_OK) && (value3 != NULL) && (value3[0] != 0))) - { - if (conf->acsurl!=NULL) - { + if ((((error == CWMP_OK) && (value != NULL) && (strcmp(value, "enable") == 0)) || ((error2 == CWMP_OK) && ((value2 == NULL) || (value2[0] == 0)))) && ((error3 == CWMP_OK) && (value3 != NULL) && (value3[0] != 0))) { + if (conf->acsurl != NULL) { free(conf->acsurl); } conf->acsurl = value3; value3 = NULL; - } - else if ((error2 == CWMP_OK) && (value2 != NULL) && (value2[0] != 0)) - { - if (conf->acsurl!=NULL) - { + } else if ((error2 == CWMP_OK) && (value2 != NULL) && (value2[0] != 0)) { + if (conf->acsurl != NULL) { free(conf->acsurl); } conf->acsurl = value2; value2 = NULL; - } - if (value!=NULL) - { - free(value); - value = NULL; - } - if (value2!=NULL) - { + } + if (value != NULL) { + free(value); + value = NULL; + } + if (value2 != NULL) { free(value2); value2 = NULL; } - if (value3!=NULL) - { + if (value3 != NULL) { free(value3); value3 = NULL; } - if((error = uci_get_value(UCI_ACS_USERID_PATH,&value)) == CWMP_OK) - { - if(value != NULL) - { - if (conf->acs_userid!=NULL) - { - free(conf->acs_userid); - } - conf->acs_userid = value; - value = NULL; - } - } - else - { - return error; - } - if((error = uci_get_value(UCI_ACS_PASSWD_PATH,&value)) == CWMP_OK) - { - if(value != NULL) - { - if (conf->acs_passwd!=NULL) - { - free(conf->acs_passwd); - } - conf->acs_passwd = value; - value = NULL; - } - } - else - { - return error; - } - if((error = get_amd_version_config())!= CWMP_OK) - { - return error; - } - if((error = uci_get_value(UCI_ACS_COMPRESSION ,&value)) == CWMP_OK) - { - conf->compression = COMP_NONE; - if(conf->amd_version >= AMD_5 && value != NULL) - { - if (0 == strcasecmp(value, "gzip")) { - conf->compression = COMP_GZIP; - } else if (0 == strcasecmp(value, "deflate")) { - conf->compression = COMP_DEFLATE; - } else { - conf->compression = COMP_NONE; - } - } - free(value); - value = NULL; - } - else - { - return error; - } - if((error = uci_get_value(UCI_ACS_RETRY_MIN_WAIT_INTERVAL ,&value)) == CWMP_OK) - { - conf->retry_min_wait_interval = DEFAULT_RETRY_MINIMUM_WAIT_INTERVAL; - if(conf->amd_version >= AMD_3 && value != NULL) - { - int a = atoi(value) ; - if ( a <= 65535 || a >=1) { - conf->retry_min_wait_interval = a; - } - } - free(value); - value = NULL; - - } - else - { - return error; - } - if((error = uci_get_value(UCI_ACS_RETRY_INTERVAL_MULTIPLIER ,&value)) == CWMP_OK) - { - conf->retry_interval_multiplier = DEFAULT_RETRY_INTERVAL_MULTIPLIER; - if(conf->amd_version >= AMD_3 && value != NULL) - { - int a = atoi(value) ; - if ( a <= 65535 || a >=1000) { - conf->retry_interval_multiplier = a; - } - } - free(value); - value = NULL; - } - else - { - return error; - } - if((error = uci_get_value(UCI_ACS_SSL_CAPATH,&value)) == CWMP_OK) - { - if(value != NULL) - { - if (conf->acs_ssl_capath != NULL) - { - free(conf->acs_ssl_capath); - } - conf->acs_ssl_capath = value; - value = NULL; - } - } - else - { - FREE(conf->acs_ssl_capath); - } - if((error = uci_get_value(UCI_HTTPS_SSL_CAPATH,&value)) == CWMP_OK) - { - if(value != NULL) - { - if (conf->https_ssl_capath != NULL) - { - free(conf->https_ssl_capath); - } - conf->https_ssl_capath = value; - value = NULL; - } - } - else - { - FREE(conf->https_ssl_capath); - } - if((error = uci_get_value(HTTP_DISABLE_100CONTINUE,&value)) == CWMP_OK) - { - if(value != NULL) - { - if ((strcasecmp(value,"true")==0) || (strcmp(value,"1")==0)) + if ((error = uci_get_value(UCI_ACS_USERID_PATH, &value)) == CWMP_OK) { + if (value != NULL) { + if (conf->acs_userid != NULL) { + free(conf->acs_userid); + } + conf->acs_userid = value; + value = NULL; + } + } else { + return error; + } + if ((error = uci_get_value(UCI_ACS_PASSWD_PATH, &value)) == CWMP_OK) { + if (value != NULL) { + if (conf->acs_passwd != NULL) { + free(conf->acs_passwd); + } + conf->acs_passwd = value; + value = NULL; + } + } else { + return error; + } + if ((error = get_amd_version_config()) != CWMP_OK) { + return error; + } + if ((error = uci_get_value(UCI_ACS_COMPRESSION, &value)) == CWMP_OK) { + conf->compression = COMP_NONE; + if (conf->amd_version >= AMD_5 && value != NULL) { + if (0 == strcasecmp(value, "gzip")) { + conf->compression = COMP_GZIP; + } else if (0 == strcasecmp(value, "deflate")) { + conf->compression = COMP_DEFLATE; + } else { + conf->compression = COMP_NONE; + } + } + free(value); + value = NULL; + } else { + return error; + } + if ((error = uci_get_value(UCI_ACS_RETRY_MIN_WAIT_INTERVAL, &value)) == CWMP_OK) { + conf->retry_min_wait_interval = DEFAULT_RETRY_MINIMUM_WAIT_INTERVAL; + if (conf->amd_version >= AMD_3 && value != NULL) { + int a = atoi(value); + if (a <= 65535 || a >= 1) { + conf->retry_min_wait_interval = a; + } + } + free(value); + value = NULL; + + } else { + return error; + } + if ((error = uci_get_value(UCI_ACS_RETRY_INTERVAL_MULTIPLIER, &value)) == CWMP_OK) { + conf->retry_interval_multiplier = DEFAULT_RETRY_INTERVAL_MULTIPLIER; + if (conf->amd_version >= AMD_3 && value != NULL) { + int a = atoi(value); + if (a <= 65535 || a >= 1000) { + conf->retry_interval_multiplier = a; + } + } + free(value); + value = NULL; + } else { + return error; + } + if ((error = uci_get_value(UCI_ACS_SSL_CAPATH, &value)) == CWMP_OK) { + if (value != NULL) { + if (conf->acs_ssl_capath != NULL) { + free(conf->acs_ssl_capath); + } + conf->acs_ssl_capath = value; + value = NULL; + } + } else { + FREE(conf->acs_ssl_capath); + } + if ((error = uci_get_value(UCI_HTTPS_SSL_CAPATH, &value)) == CWMP_OK) { + if (value != NULL) { + if (conf->https_ssl_capath != NULL) { + free(conf->https_ssl_capath); + } + conf->https_ssl_capath = value; + value = NULL; + } + } else { + FREE(conf->https_ssl_capath); + } + if ((error = uci_get_value(HTTP_DISABLE_100CONTINUE, &value)) == CWMP_OK) { + if (value != NULL) { + if ((strcasecmp(value, "true") == 0) || (strcmp(value, "1") == 0)) conf->http_disable_100continue = true; - free(value); + free(value); value = NULL; } } - if((error = uci_get_value(UCI_ACS_INSECURE_ENABLE,&value)) == CWMP_OK) - { - if(value != NULL) - { - if ((strcasecmp(value,"true")==0) || (strcmp(value,"1")==0)) - { - conf->insecure_enable = true; - } - free(value); - value = NULL; - } - } - if((error = uci_get_value(UCI_ACS_IPV6_ENABLE,&value)) == CWMP_OK) - { - if(value != NULL) - { - if ((strcasecmp(value,"true")==0) || (strcmp(value,"1")==0)) - { + if ((error = uci_get_value(UCI_ACS_INSECURE_ENABLE, &value)) == CWMP_OK) { + if (value != NULL) { + if ((strcasecmp(value, "true") == 0) || (strcmp(value, "1") == 0)) { + conf->insecure_enable = true; + } + free(value); + value = NULL; + } + } + if ((error = uci_get_value(UCI_ACS_IPV6_ENABLE, &value)) == CWMP_OK) { + if (value != NULL) { + if ((strcasecmp(value, "true") == 0) || (strcmp(value, "1") == 0)) { conf->ipv6_enable = true; } - free(value); + free(value); value = NULL; } } - if((error = uci_get_value(UCI_ACS_SSL_VERSION,&value)) == CWMP_OK) - { - if(value != NULL) - { - if (conf->acs_ssl_version != NULL) - { - free(conf->acs_ssl_version); - } - conf->acs_ssl_version = value; - value = NULL; - } - } - else - { - FREE(conf->acs_ssl_version); - } - if((error = uci_get_value(UCI_CPE_INTERFACE_PATH,&value)) == CWMP_OK) - { - if(value != NULL) - { - if (conf->interface!=NULL) - { - free(conf->interface); - } - conf->interface = value; - value = NULL; - } - } - else - { - return error; - } - if((error = uci_get_value(UCI_CPE_USERID_PATH,&value)) == CWMP_OK) - { - if(value != NULL) - { - if (conf->cpe_userid!=NULL) - { - free(conf->cpe_userid); - } - conf->cpe_userid = value; - value = NULL; - } - else - { - if (conf->cpe_userid!=NULL) - { - free(conf->cpe_userid); - } - conf->cpe_userid = strdup(""); - } - } - else - { - return error; - } - if((error = uci_get_value(UCI_CPE_PASSWD_PATH,&value)) == CWMP_OK) - { - if(value != NULL) - { - if (conf->cpe_passwd!=NULL) - { - free(conf->cpe_passwd); - } - conf->cpe_passwd = value; - value = NULL; - } - else - { - if (conf->cpe_passwd!=NULL) - { - free(conf->cpe_passwd); - } - conf->cpe_passwd = strdup(""); - } - } - else - { - return error; - } + if ((error = uci_get_value(UCI_ACS_SSL_VERSION, &value)) == CWMP_OK) { + if (value != NULL) { + if (conf->acs_ssl_version != NULL) { + free(conf->acs_ssl_version); + } + conf->acs_ssl_version = value; + value = NULL; + } + } else { + FREE(conf->acs_ssl_version); + } + if ((error = uci_get_value(UCI_CPE_INTERFACE_PATH, &value)) == CWMP_OK) { + if (value != NULL) { + if (conf->interface != NULL) { + free(conf->interface); + } + conf->interface = value; + value = NULL; + } + } else { + return error; + } + if ((error = uci_get_value(UCI_CPE_USERID_PATH, &value)) == CWMP_OK) { + if (value != NULL) { + if (conf->cpe_userid != NULL) { + free(conf->cpe_userid); + } + conf->cpe_userid = value; + value = NULL; + } else { + if (conf->cpe_userid != NULL) { + free(conf->cpe_userid); + } + conf->cpe_userid = strdup(""); + } + } else { + return error; + } + if ((error = uci_get_value(UCI_CPE_PASSWD_PATH, &value)) == CWMP_OK) { + if (value != NULL) { + if (conf->cpe_passwd != NULL) { + free(conf->cpe_passwd); + } + conf->cpe_passwd = value; + value = NULL; + } else { + if (conf->cpe_passwd != NULL) { + free(conf->cpe_passwd); + } + conf->cpe_passwd = strdup(""); + } + } else { + return error; + } - if((error = uci_get_value(UCI_CPE_UBUS_SOCKET_PATH,&value)) == CWMP_OK) - { - if(value != NULL) - { - if (conf->ubus_socket!=NULL) - { + if ((error = uci_get_value(UCI_CPE_UBUS_SOCKET_PATH, &value)) == CWMP_OK) { + if (value != NULL) { + if (conf->ubus_socket != NULL) { free(conf->ubus_socket); } conf->ubus_socket = value; value = NULL; } - } - else - { + } else { return error; } - if((error = uci_get_value(UCI_LOG_SEVERITY_PATH,&value)) == CWMP_OK) - { - if(value != NULL) - { - log_set_severity_idx (value); - free(value); - value = NULL; - } - } - else - { - return error; - } - if((error = uci_get_value(UCI_CPE_PORT_PATH,&value)) == CWMP_OK) - { - int a = 0; + if ((error = uci_get_value(UCI_LOG_SEVERITY_PATH, &value)) == CWMP_OK) { + if (value != NULL) { + log_set_severity_idx(value); + free(value); + value = NULL; + } + } else { + return error; + } + if ((error = uci_get_value(UCI_CPE_PORT_PATH, &value)) == CWMP_OK) { + int a = 0; - if(value != NULL) - { - a = atoi(value); - free(value); - value = NULL; - } - if(a==0) - { - CWMP_LOG(INFO,"Set the connection request port to the default value: %d",DEFAULT_CONNECTION_REQUEST_PORT); - conf->connection_request_port = DEFAULT_CONNECTION_REQUEST_PORT; - } - else - { - conf->connection_request_port = a; - } - } - else - { - return error; - } - if((error = uci_get_value(UCI_CPE_NOTIFY_PERIODIC_ENABLE,&value)) == CWMP_OK) - { - bool a = true; - if(value != NULL) - { - if ((strcasecmp(value,"FALSE")==0) || (strcmp(value,"0")==0)) - { - a = false; - } - else - { - a = true; - } - free(value); - value = NULL; - } - conf->periodic_notify_enable = a; - } - else - { - return error; - } - if((error = uci_get_value(UCI_CPE_NOTIFY_PERIOD,&value)) == CWMP_OK) - { - int a = 0; - - if(value != NULL) - { - a = atoi(value); - free(value); - value = NULL; - } - if(a==0) - { - CWMP_LOG(INFO,"Set notify period to the default value: %d",DEFAULT_NOTIFY_PERIOD); - conf->periodic_notify_interval = DEFAULT_NOTIFY_PERIOD; - } - else - { - conf->periodic_notify_interval = a; - } - } - else - { - return error; - } - if((error = uci_get_value(UCI_PERIODIC_INFORM_TIME_PATH,&value)) == CWMP_OK) - { - int a = 0; - - if(value != NULL) - { - a = atol(value); - free(value); - value = NULL; - } - conf->time = a; - } - else - { - return error; - } - if((error = uci_get_value(UCI_PERIODIC_INFORM_INTERVAL_PATH,&value)) == CWMP_OK) - { - int a = 0; - - if(value != NULL) - { - a = atoi(value); - free(value); - value = NULL; - } - if(a>=PERIOD_INFORM_MIN) - { - conf->period = a; - } - else - { - CWMP_LOG(ERROR,"Period interval of periodic inform should be > %ds. Set to default: %ds",PERIOD_INFORM_MIN,PERIOD_INFORM_DEFAULT); - conf->period = PERIOD_INFORM_DEFAULT; - } - } - else - { - return error; - } - if((error = uci_get_value(UCI_PERIODIC_INFORM_ENABLE_PATH,&value)) == CWMP_OK) - { - if(value != NULL) - { - if ((strcasecmp(value,"TRUE")==0) || (strcmp(value,"1")==0)) - { - conf->periodic_enable = true; - } - else - { - conf->periodic_enable = false; + if (value != NULL) { + a = atoi(value); + free(value); + value = NULL; + } + if (a == 0) { + CWMP_LOG(INFO, "Set the connection request port to the default value: %d", DEFAULT_CONNECTION_REQUEST_PORT); + conf->connection_request_port = DEFAULT_CONNECTION_REQUEST_PORT; + } else { + conf->connection_request_port = a; + } + } else { + return error; + } + if ((error = uci_get_value(UCI_CPE_NOTIFY_PERIODIC_ENABLE, &value)) == CWMP_OK) { + bool a = true; + if (value != NULL) { + if ((strcasecmp(value, "FALSE") == 0) || (strcmp(value, "0") == 0)) { + a = false; + } else { + a = true; } free(value); value = NULL; } - else - { - conf->periodic_enable = false; - } - } - else - { + conf->periodic_notify_enable = a; + } else { + return error; + } + if ((error = uci_get_value(UCI_CPE_NOTIFY_PERIOD, &value)) == CWMP_OK) { + int a = 0; + + if (value != NULL) { + a = atoi(value); + free(value); + value = NULL; + } + if (a == 0) { + CWMP_LOG(INFO, "Set notify period to the default value: %d", DEFAULT_NOTIFY_PERIOD); + conf->periodic_notify_interval = DEFAULT_NOTIFY_PERIOD; + } else { + conf->periodic_notify_interval = a; + } + } else { + return error; + } + if ((error = uci_get_value(UCI_PERIODIC_INFORM_TIME_PATH, &value)) == CWMP_OK) { + int a = 0; + + if (value != NULL) { + a = atol(value); + free(value); + value = NULL; + } + conf->time = a; + } else { + return error; + } + if ((error = uci_get_value(UCI_PERIODIC_INFORM_INTERVAL_PATH, &value)) == CWMP_OK) { + int a = 0; + + if (value != NULL) { + a = atoi(value); + free(value); + value = NULL; + } + if (a >= PERIOD_INFORM_MIN) { + conf->period = a; + } else { + CWMP_LOG(ERROR, "Period interval of periodic inform should be > %ds. Set to default: %ds", PERIOD_INFORM_MIN, PERIOD_INFORM_DEFAULT); + conf->period = PERIOD_INFORM_DEFAULT; + } + } else { + return error; + } + if ((error = uci_get_value(UCI_PERIODIC_INFORM_ENABLE_PATH, &value)) == CWMP_OK) { + if (value != NULL) { + if ((strcasecmp(value, "TRUE") == 0) || (strcmp(value, "1") == 0)) { + conf->periodic_enable = true; + } else { + conf->periodic_enable = false; + } + free(value); + value = NULL; + } else { + conf->periodic_enable = false; + } + } else { + return error; + } + if ((error = get_instance_mode_config()) != CWMP_OK) { + return error; + } + if ((error = get_session_timeout_config()) != CWMP_OK) { return error; } - if((error = get_instance_mode_config())!= CWMP_OK) - { - return error; - } - if((error = get_session_timeout_config())!= CWMP_OK) - { - return error; - } return CWMP_OK; } int get_amd_version_config() { - int error; - int a = 0; - char *value = NULL; - struct cwmp *cwmp = &cwmp_main; - if((error = uci_get_value(UCI_CPE_AMD_VERSION ,&value)) == CWMP_OK) - { - cwmp->conf.amd_version = DEFAULT_AMD_VERSION; - if(value != NULL) - { - a = atoi(value) ; - if ( a >= 1 ) { - cwmp->conf.amd_version = a; - } - free(value); - value = NULL; - } - cwmp->conf.supported_amd_version = cwmp->conf.amd_version; - } - else - { - return error; - } - return CWMP_OK; + int error; + int a = 0; + char *value = NULL; + struct cwmp *cwmp = &cwmp_main; + if ((error = uci_get_value(UCI_CPE_AMD_VERSION, &value)) == CWMP_OK) { + cwmp->conf.amd_version = DEFAULT_AMD_VERSION; + if (value != NULL) { + a = atoi(value); + if (a >= 1) { + cwmp->conf.amd_version = a; + } + free(value); + value = NULL; + } + cwmp->conf.supported_amd_version = cwmp->conf.amd_version; + } else { + return error; + } + return CWMP_OK; } int get_session_timeout_config() { - int error; - int a = 0; - char *value = NULL; - struct cwmp *cwmp = &cwmp_main; - if((error = uci_get_value(UCI_CPE_SESSION_TIMEOUT ,&value)) == CWMP_OK) - { - cwmp->conf.session_timeout = DEFAULT_SESSION_TIMEOUT; - if(value != NULL) - { - a = atoi(value) ; - if ( a >= 1 ) { - cwmp->conf.session_timeout = a; - } - free(value); - value = NULL; - } - } - else - { - return error; - } - return CWMP_OK; + int error; + int a = 0; + char *value = NULL; + struct cwmp *cwmp = &cwmp_main; + if ((error = uci_get_value(UCI_CPE_SESSION_TIMEOUT, &value)) == CWMP_OK) { + cwmp->conf.session_timeout = DEFAULT_SESSION_TIMEOUT; + if (value != NULL) { + a = atoi(value); + if (a >= 1) { + cwmp->conf.session_timeout = a; + } + free(value); + value = NULL; + } + } else { + return error; + } + return CWMP_OK; } int get_instance_mode_config() { - int error; - char *value = NULL; - struct cwmp *cwmp = &cwmp_main; - if((error = uci_get_value(UCI_CPE_INSTANCE_MODE ,&value)) == CWMP_OK) - { - cwmp->conf.instance_mode = DEFAULT_INSTANCE_MODE; - if(value != NULL) - { - if ( 0 == strcmp(value, "InstanceNumber") ) { - cwmp->conf.instance_mode = INSTANCE_MODE_NUMBER; - } else { - cwmp->conf.instance_mode = INSTANCE_MODE_ALIAS; - } - free(value); - value = NULL; - } - } - else - { - return error; - } - return CWMP_OK; + int error; + char *value = NULL; + struct cwmp *cwmp = &cwmp_main; + if ((error = uci_get_value(UCI_CPE_INSTANCE_MODE, &value)) == CWMP_OK) { + cwmp->conf.instance_mode = DEFAULT_INSTANCE_MODE; + if (value != NULL) { + if (0 == strcmp(value, "InstanceNumber")) { + cwmp->conf.instance_mode = INSTANCE_MODE_NUMBER; + } else { + cwmp->conf.instance_mode = INSTANCE_MODE_ALIAS; + } + free(value); + value = NULL; + } + } else { + return error; + } + return CWMP_OK; } int get_lwn_config(struct config *conf) { - int error; - int a = 0; - char *value = NULL; - if((error = uci_get_value(LW_NOTIFICATION_ENABLE,&value)) == CWMP_OK) - { - if(value != NULL) - { - if ((strcasecmp(value,"TRUE")==0) || (strcmp(value,"1")==0)) - { - conf->lw_notification_enable = true; - } - else - { - conf->lw_notification_enable = false; - } - free(value); - value = NULL; - } - } - if((error = uci_get_value(LW_NOTIFICATION_HOSTNAME,&value)) == CWMP_OK) - { - if(value != NULL) - { - conf->lw_notification_hostname = strdup(value); - free(value); - value = NULL; - } - else - { - conf->lw_notification_hostname = strdup(conf->acsurl); - } - - } - if((error = uci_get_value(LW_NOTIFICATION_PORT,&value)) == CWMP_OK) - { - if(value != NULL) - { - a = atoi(value); - conf->lw_notification_port = a; - free(value); - value = NULL; - } - else - { - conf->lw_notification_port = DEFAULT_LWN_PORT; - } + int error; + int a = 0; + char *value = NULL; + if ((error = uci_get_value(LW_NOTIFICATION_ENABLE, &value)) == CWMP_OK) { + if (value != NULL) { + if ((strcasecmp(value, "TRUE") == 0) || (strcmp(value, "1") == 0)) { + conf->lw_notification_enable = true; + } else { + conf->lw_notification_enable = false; + } + free(value); + value = NULL; + } } - return CWMP_OK; + if ((error = uci_get_value(LW_NOTIFICATION_HOSTNAME, &value)) == CWMP_OK) { + if (value != NULL) { + conf->lw_notification_hostname = strdup(value); + free(value); + value = NULL; + } else { + conf->lw_notification_hostname = strdup(conf->acsurl); + } + } + if ((error = uci_get_value(LW_NOTIFICATION_PORT, &value)) == CWMP_OK) { + if (value != NULL) { + a = atoi(value); + conf->lw_notification_port = a; + free(value); + value = NULL; + } else { + conf->lw_notification_port = DEFAULT_LWN_PORT; + } + } + return CWMP_OK; } -int global_conf_init (struct config *conf) +int global_conf_init(struct config *conf) { - int error; + int error; - pthread_mutex_lock (&mutex_config_load); - if ((error = get_global_config(conf))) - { - pthread_mutex_unlock (&mutex_config_load); - return error; - } - if ((error = check_global_config(conf))) - { - pthread_mutex_unlock (&mutex_config_load); - return error; - } - get_lwn_config(conf); - pthread_mutex_unlock (&mutex_config_load); - return CWMP_OK; + pthread_mutex_lock(&mutex_config_load); + if ((error = get_global_config(conf))) { + pthread_mutex_unlock(&mutex_config_load); + return error; + } + if ((error = check_global_config(conf))) { + pthread_mutex_unlock(&mutex_config_load); + return error; + } + get_lwn_config(conf); + pthread_mutex_unlock(&mutex_config_load); + return CWMP_OK; } -int cwmp_get_deviceid(struct cwmp *cwmp) { +int cwmp_get_deviceid(struct cwmp *cwmp) +{ cwmp->deviceid.manufacturer = strdup(cwmp_db_get_value_string("device", "deviceinfo", "Manufacturer")); //TODO free cwmp->deviceid.serialnumber = strdup(cwmp_db_get_value_string("device", "deviceinfo", "SerialNumber")); cwmp->deviceid.productclass = strdup(cwmp_db_get_value_string("device", "deviceinfo", "ProductClass")); @@ -686,13 +520,13 @@ int cwmp_get_deviceid(struct cwmp *cwmp) { int cwmp_config_reload(struct cwmp *cwmp) { - int error; + int error; - memset(&cwmp->env, 0, sizeof(struct env)); - memset(&cwmp->conf, 0, sizeof(struct config)); + memset(&cwmp->env, 0, sizeof(struct env)); + memset(&cwmp->conf, 0, sizeof(struct config)); - if ((error = global_conf_init(&(cwmp->conf)))) - return error; + if ((error = global_conf_init(&(cwmp->conf)))) + return error; - return CWMP_OK; + return CWMP_OK; } diff --git a/cwmp.c b/cwmp.c index 2a1194a..c50380a 100644 --- a/cwmp.c +++ b/cwmp.c @@ -10,234 +10,211 @@ * Author Omar Kallel */ - #include "cwmp.h" -struct cwmp cwmp_main = {0}; +struct cwmp cwmp_main = { 0 }; - -int cwmp_session_rpc_destructor (struct rpc *rpc) +int cwmp_session_rpc_destructor(struct rpc *rpc) { - list_del(&(rpc->list)); - free (rpc); - return CWMP_OK; + list_del(&(rpc->list)); + free(rpc); + return CWMP_OK; } -int cwmp_get_retry_interval (struct cwmp *cwmp) +int cwmp_get_retry_interval(struct cwmp *cwmp) { int retry_count = 0; - double min = 0; - double max = 0; - int m = cwmp->conf.retry_min_wait_interval; - int k = cwmp->conf.retry_interval_multiplier; - int exp = cwmp->retry_count_session; - if (exp == 0) return MAX_INT32; - if (exp > 10) exp = 10; - min = pow(((double)k/1000), (double)(exp-1)) * m; - max = pow(((double)k/1000), (double)exp) * m; - srand (time(NULL)); - retry_count = rand() % ((int)max + 1 - (int)min) + (int)min; - return (retry_count); + double min = 0; + double max = 0; + int m = cwmp->conf.retry_min_wait_interval; + int k = cwmp->conf.retry_interval_multiplier; + int exp = cwmp->retry_count_session; + if (exp == 0) + return MAX_INT32; + if (exp > 10) + exp = 10; + min = pow(((double)k / 1000), (double)(exp - 1)) * m; + max = pow(((double)k / 1000), (double)exp) * m; + srand(time(NULL)); + retry_count = rand() % ((int)max + 1 - (int)min) + (int)min; + return (retry_count); } -static void cwmp_prepare_value_change (struct cwmp *cwmp) +static void cwmp_prepare_value_change(struct cwmp *cwmp) { struct event_container *event_container; if (list_value_change.next == &(list_value_change)) return; pthread_mutex_lock(&(cwmp->mutex_session_queue)); - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_4VALUE_CHANGE, ""); - if (!event_container) goto end; + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_4VALUE_CHANGE, ""); + if (!event_container) + goto end; pthread_mutex_lock(&(mutex_value_change)); list_splice_init(&(list_value_change), &(event_container->head_dm_parameter)); pthread_mutex_unlock(&(mutex_value_change)); - cwmp_save_event_container (event_container); + cwmp_save_event_container(event_container); end: pthread_mutex_unlock(&(cwmp->mutex_session_queue)); } -int cwmp_session_destructor (struct session *session) +int cwmp_session_destructor(struct session *session) { struct rpc *rpc; - while (session->head_rpc_acs.next != &(session->head_rpc_acs)) { - rpc = list_entry(session->head_rpc_acs.next, struct rpc, list); + while (session->head_rpc_acs.next != &(session->head_rpc_acs)) { + rpc = list_entry(session->head_rpc_acs.next, struct rpc, list); if (rpc_acs_methods[rpc->type].extra_clean != NULL) - rpc_acs_methods[rpc->type].extra_clean(session,rpc); - cwmp_session_rpc_destructor(rpc); - } + rpc_acs_methods[rpc->type].extra_clean(session, rpc); + cwmp_session_rpc_destructor(rpc); + } - while (session->head_rpc_cpe.next != &(session->head_rpc_cpe)) { - rpc = list_entry(session->head_rpc_cpe.next, struct rpc, list); - cwmp_session_rpc_destructor(rpc); - } + while (session->head_rpc_cpe.next != &(session->head_rpc_cpe)) { + rpc = list_entry(session->head_rpc_cpe.next, struct rpc, list); + cwmp_session_rpc_destructor(rpc); + } - if (session->list.next != NULL && session->list.prev != NULL) - list_del (&(session->list)); + if (session->list.next != NULL && session->list.prev != NULL) + list_del(&(session->list)); - free (session); + free(session); - return CWMP_OK; + return CWMP_OK; } -int cwmp_move_session_to_session_queue (struct cwmp *cwmp, struct session *session) +int cwmp_move_session_to_session_queue(struct cwmp *cwmp, struct session *session) { - struct list_head *ilist, *jlist; - struct rpc *rpc_acs, *queue_rpc_acs, *rpc_cpe; - struct event_container *event_container_old, *event_container_new; - struct session *session_queue; - bool dup; + struct list_head *ilist, *jlist; + struct rpc *rpc_acs, *queue_rpc_acs, *rpc_cpe; + struct event_container *event_container_old, *event_container_new; + struct session *session_queue; + bool dup; - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - cwmp->retry_count_session ++; - cwmp->session_send = NULL; - if (cwmp->head_session_queue.next == &(cwmp->head_session_queue)) - { - list_add_tail (&(session->list), &(cwmp->head_session_queue)); - session->hold_request = 0; - session->digest_auth = 0; - cwmp->head_event_container = &(session->head_event_container); - if (session->head_rpc_acs.next != &(session->head_rpc_acs)) - { - rpc_acs = list_entry(session->head_rpc_acs.next, struct rpc, list); - if (rpc_acs->type != RPC_ACS_INFORM) - { - if ((rpc_acs = cwmp_add_session_rpc_acs_head(session, RPC_ACS_INFORM)) == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - } - } - else - { - if ((rpc_acs = cwmp_add_session_rpc_acs_head(session, RPC_ACS_INFORM)) == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + cwmp->retry_count_session++; + cwmp->session_send = NULL; + if (cwmp->head_session_queue.next == &(cwmp->head_session_queue)) { + list_add_tail(&(session->list), &(cwmp->head_session_queue)); + session->hold_request = 0; + session->digest_auth = 0; + cwmp->head_event_container = &(session->head_event_container); + if (session->head_rpc_acs.next != &(session->head_rpc_acs)) { + rpc_acs = list_entry(session->head_rpc_acs.next, struct rpc, list); + if (rpc_acs->type != RPC_ACS_INFORM) { + if ((rpc_acs = cwmp_add_session_rpc_acs_head(session, RPC_ACS_INFORM)) == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + } + } else { + if ((rpc_acs = cwmp_add_session_rpc_acs_head(session, RPC_ACS_INFORM)) == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); return CWMP_MEM_ERR; } - } - while (session->head_rpc_cpe.next != &(session->head_rpc_cpe)) - { - rpc_cpe = list_entry(session->head_rpc_cpe.next, struct rpc, list); + } + while (session->head_rpc_cpe.next != &(session->head_rpc_cpe)) { + rpc_cpe = list_entry(session->head_rpc_cpe.next, struct rpc, list); cwmp_session_rpc_destructor(rpc_cpe); } - bkp_session_move_inform_to_inform_queue (); - bkp_session_save(); - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_OK; - } - list_for_each(ilist, &(session->head_event_container)) - { - event_container_old = list_entry (ilist, struct event_container, list); - event_container_new = cwmp_add_event_container (cwmp, event_container_old->code, event_container_old->command_key); - if (event_container_new == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - list_splice_init(&(event_container_old->head_dm_parameter), - &(event_container_new->head_dm_parameter)); - cwmp_save_event_container (event_container_new); - } - session_queue = list_entry(cwmp->head_event_container,struct session, head_event_container); - list_for_each(ilist, &(session->head_rpc_acs)) - { - rpc_acs = list_entry(ilist, struct rpc, list); - dup = false; - list_for_each(jlist, &(session_queue->head_rpc_acs)) - { - queue_rpc_acs = list_entry(jlist, struct rpc, list); - if (queue_rpc_acs->type == rpc_acs->type && - (rpc_acs->type == RPC_ACS_INFORM || - rpc_acs->type == RPC_ACS_GET_RPC_METHODS)) - { - dup = true; - break; - } - } - if (dup) - { - continue; - } - ilist = ilist->prev; - list_del(&(rpc_acs->list)); - list_add_tail (&(rpc_acs->list), &(session_queue->head_rpc_acs)); - } - cwmp_session_destructor (session); - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_OK; + bkp_session_move_inform_to_inform_queue(); + bkp_session_save(); + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_OK; + } + list_for_each (ilist, &(session->head_event_container)) { + event_container_old = list_entry(ilist, struct event_container, list); + event_container_new = cwmp_add_event_container(cwmp, event_container_old->code, event_container_old->command_key); + if (event_container_new == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + list_splice_init(&(event_container_old->head_dm_parameter), &(event_container_new->head_dm_parameter)); + cwmp_save_event_container(event_container_new); + } + session_queue = list_entry(cwmp->head_event_container, struct session, head_event_container); + list_for_each (ilist, &(session->head_rpc_acs)) { + rpc_acs = list_entry(ilist, struct rpc, list); + dup = false; + list_for_each (jlist, &(session_queue->head_rpc_acs)) { + queue_rpc_acs = list_entry(jlist, struct rpc, list); + if (queue_rpc_acs->type == rpc_acs->type && (rpc_acs->type == RPC_ACS_INFORM || rpc_acs->type == RPC_ACS_GET_RPC_METHODS)) { + dup = true; + break; + } + } + if (dup) { + continue; + } + ilist = ilist->prev; + list_del(&(rpc_acs->list)); + list_add_tail(&(rpc_acs->list), &(session_queue->head_rpc_acs)); + } + cwmp_session_destructor(session); + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_OK; } -int cwmp_schedule_rpc (struct cwmp *cwmp, struct session *session) +int cwmp_schedule_rpc(struct cwmp *cwmp, struct session *session) { - struct list_head *ilist; - struct rpc *rpc_acs, *rpc_cpe; + struct list_head *ilist; + struct rpc *rpc_acs, *rpc_cpe; - if (http_client_init(cwmp)) { + if (http_client_init(cwmp)) { CWMP_LOG(INFO, "Initializing http client failed"); goto retry; } - while (1) { - list_for_each(ilist, &(session->head_rpc_acs)) { - rpc_acs = list_entry (ilist, struct rpc, list); - if (!rpc_acs->type) - goto retry; + while (1) { + list_for_each (ilist, &(session->head_rpc_acs)) { + rpc_acs = list_entry(ilist, struct rpc, list); + if (!rpc_acs->type) + goto retry; - CWMP_LOG (INFO,"Preparing the %s RPC message to send to the ACS", - rpc_acs_methods[rpc_acs->type].name); - if (rpc_acs_methods[rpc_acs->type].prepare_message(cwmp, session, rpc_acs)) - goto retry; + CWMP_LOG(INFO, "Preparing the %s RPC message to send to the ACS", rpc_acs_methods[rpc_acs->type].name); + if (rpc_acs_methods[rpc_acs->type].prepare_message(cwmp, session, rpc_acs)) + goto retry; - if (xml_set_cwmp_id(session)) - goto retry; + if (xml_set_cwmp_id(session)) + goto retry; - CWMP_LOG (INFO,"Send the %s RPC message to the ACS", - rpc_acs_methods[rpc_acs->type].name); - if (xml_send_message(cwmp, session, rpc_acs)) - goto retry; + CWMP_LOG(INFO, "Send the %s RPC message to the ACS", rpc_acs_methods[rpc_acs->type].name); + if (xml_send_message(cwmp, session, rpc_acs)) + goto retry; - CWMP_LOG (INFO,"Get the %sResponse message from the ACS", - rpc_acs_methods[rpc_acs->type].name); - if (rpc_acs_methods[rpc_acs->type].parse_response) - if (rpc_acs_methods[rpc_acs->type].parse_response(cwmp, session, rpc_acs)) - goto retry; + CWMP_LOG(INFO, "Get the %sResponse message from the ACS", rpc_acs_methods[rpc_acs->type].name); + if (rpc_acs_methods[rpc_acs->type].parse_response) + if (rpc_acs_methods[rpc_acs->type].parse_response(cwmp, session, rpc_acs)) + goto retry; - ilist = ilist->prev; - if (rpc_acs_methods[rpc_acs->type].extra_clean != NULL) - rpc_acs_methods[rpc_acs->type].extra_clean(session,rpc_acs); - cwmp_session_rpc_destructor(rpc_acs); - MXML_DELETE(session->tree_in); - MXML_DELETE(session->tree_out); - if (session->hold_request) - break; - } - CWMP_LOG (INFO,"Send empty message to the ACS"); - if (xml_send_message(cwmp, session, NULL)) + ilist = ilist->prev; + if (rpc_acs_methods[rpc_acs->type].extra_clean != NULL) + rpc_acs_methods[rpc_acs->type].extra_clean(session, rpc_acs); + cwmp_session_rpc_destructor(rpc_acs); + MXML_DELETE(session->tree_in); + MXML_DELETE(session->tree_out); + if (session->hold_request) + break; + } + CWMP_LOG(INFO, "Send empty message to the ACS"); + if (xml_send_message(cwmp, session, NULL)) goto retry; if (!session->tree_in) goto next; - CWMP_LOG (INFO,"Receive request from the ACS"); + CWMP_LOG(INFO, "Receive request from the ACS"); if (xml_handle_message(session)) goto retry; while (session->head_rpc_cpe.next != &(session->head_rpc_cpe)) { - rpc_cpe = list_entry (session->head_rpc_cpe.next, struct rpc, list); + rpc_cpe = list_entry(session->head_rpc_cpe.next, struct rpc, list); if (!rpc_cpe->type) goto retry; - CWMP_LOG (INFO,"Preparing the %s%s message", - rpc_cpe_methods[rpc_cpe->type].name, - (rpc_cpe->type != RPC_CPE_FAULT) ? "Response" : ""); + CWMP_LOG(INFO, "Preparing the %s%s message", rpc_cpe_methods[rpc_cpe->type].name, (rpc_cpe->type != RPC_CPE_FAULT) ? "Response" : ""); if (cwmp_rpc_cpe_handle_message(session, rpc_cpe)) goto retry; MXML_DELETE(session->tree_in); - CWMP_LOG (INFO,"Send the %s%s message to the ACS", - rpc_cpe_methods[rpc_cpe->type].name, - (rpc_cpe->type != RPC_CPE_FAULT) ? "Response" : ""); + CWMP_LOG(INFO, "Send the %s%s message to the ACS", rpc_cpe_methods[rpc_cpe->type].name, (rpc_cpe->type != RPC_CPE_FAULT) ? "Response" : ""); if (xml_send_message(cwmp, session, rpc_cpe)) goto retry; MXML_DELETE(session->tree_out); @@ -246,23 +223,23 @@ int cwmp_schedule_rpc (struct cwmp *cwmp, struct session *session) if (!session->tree_in) break; - CWMP_LOG (INFO,"Receive request from the ACS"); + CWMP_LOG(INFO, "Receive request from the ACS"); if (xml_handle_message(session)) goto retry; } -next: - if (session->head_rpc_acs.next==&(session->head_rpc_acs)) - break; - MXML_DELETE(session->tree_in); - MXML_DELETE(session->tree_out); - } + next: + if (session->head_rpc_acs.next == &(session->head_rpc_acs)) + break; + MXML_DELETE(session->tree_in); + MXML_DELETE(session->tree_out); + } session->error = CWMP_OK; goto end; retry: - CWMP_LOG (INFO,"Failed"); + CWMP_LOG(INFO, "Failed"); session->error = CWMP_RETRY_SESSION; event_remove_noretry_event_container(session, cwmp); @@ -271,26 +248,25 @@ end: MXML_DELETE(session->tree_out); http_client_exit(); xml_exit(); - return session->error; + return session->error; } -int run_session_end_func () +int run_session_end_func() { - if (end_session_flag & END_SESSION_EXTERNAL_ACTION) { - CWMP_LOG (INFO,"Executing external commands: end session request"); + CWMP_LOG(INFO, "Executing external commands: end session request"); external_init(); external_simple("end_session", NULL, 0); external_exit(); } if (end_session_flag & END_SESSION_RELOAD) { - CWMP_LOG (INFO,"Config reload: end session request"); + CWMP_LOG(INFO, "Config reload: end session request"); cwmp_apply_acs_changes(); } if (end_session_flag & END_SESSION_SET_NOTIFICATION_UPDATE) { - CWMP_LOG (INFO,"SetParameterAttributes end session: update enabled notify file"); + CWMP_LOG(INFO, "SetParameterAttributes end session: update enabled notify file"); cwmp_update_enabled_notify_file(); } if (end_session_flag & END_SESSION_TRANSACTION_COMMIT) { @@ -299,42 +275,42 @@ int run_session_end_func () } if (end_session_flag & END_SESSION_NSLOOKUP_DIAGNOSTIC) { - CWMP_LOG (INFO,"Executing nslookupdiagnostic: end session request"); + CWMP_LOG(INFO, "Executing nslookupdiagnostic: end session request"); cwmp_nslookup_diagnostics(); } if (end_session_flag & END_SESSION_TRACEROUTE_DIAGNOSTIC) { - CWMP_LOG (INFO,"Executing traceroutediagnostic: end session request"); + CWMP_LOG(INFO, "Executing traceroutediagnostic: end session request"); cwmp_traceroute_diagnostics(); } if (end_session_flag & END_SESSION_UDPECHO_DIAGNOSTIC) { - CWMP_LOG (INFO,"Executing udpechodiagnostic: end session request"); + CWMP_LOG(INFO, "Executing udpechodiagnostic: end session request"); cwmp_udp_echo_diagnostics(); } if (end_session_flag & END_SESSION_SERVERSELECTION_DIAGNOSTIC) { - CWMP_LOG (INFO,"Executing serverselectiondiagnostic: end session request"); + CWMP_LOG(INFO, "Executing serverselectiondiagnostic: end session request"); cwmp_serverselection_diagnostics(); } if (end_session_flag & END_SESSION_IPPING_DIAGNOSTIC) { - CWMP_LOG (INFO,"Executing ippingdiagnostic: end session request"); + CWMP_LOG(INFO, "Executing ippingdiagnostic: end session request"); cwmp_ip_ping_diagnostics(); } if (end_session_flag & END_SESSION_DOWNLOAD_DIAGNOSTIC) { - CWMP_LOG (INFO,"Executing download diagnostic: end session request"); + CWMP_LOG(INFO, "Executing download diagnostic: end session request"); cwmp_download_diagnostics(); } if (end_session_flag & END_SESSION_UPLOAD_DIAGNOSTIC) { - CWMP_LOG (INFO,"Executing upload diagnostic: end session request"); + CWMP_LOG(INFO, "Executing upload diagnostic: end session request"); cwmp_upload_diagnostics(); } if (end_session_flag & END_SESSION_REBOOT) { - CWMP_LOG (INFO,"Executing Reboot: end session request"); + CWMP_LOG(INFO, "Executing Reboot: end session request"); external_init(); external_simple("reboot", commandKey, 0); FREE(commandKey); @@ -343,7 +319,7 @@ int run_session_end_func () } if (end_session_flag & END_SESSION_X_FACTORY_RESET_SOFT) { - CWMP_LOG (INFO,"Executing factory reset soft: end session request"); + CWMP_LOG(INFO, "Executing factory reset soft: end session request"); external_init(); external_simple("factory_reset_soft", NULL, 0); external_exit(); @@ -351,7 +327,7 @@ int run_session_end_func () } if (end_session_flag & END_SESSION_FACTORY_RESET) { - CWMP_LOG (INFO,"Executing factory reset: end session request"); + CWMP_LOG(INFO, "Executing factory reset: end session request"); external_init(); external_simple("factory_reset", NULL, 0); external_exit(); @@ -362,87 +338,84 @@ int run_session_end_func () return CWMP_OK; } -void cwmp_schedule_session (struct cwmp *cwmp) +void cwmp_schedule_session(struct cwmp *cwmp) { - struct list_head *ilist; - struct session *session; - int t,error = CWMP_OK; - static struct timespec time_to_wait = {0, 0}; - bool retry = false; - char *exec_download= NULL; - int is_notify = 0; + struct list_head *ilist; + struct session *session; + int t, error = CWMP_OK; + static struct timespec time_to_wait = { 0, 0 }; + bool retry = false; + char *exec_download = NULL; + int is_notify = 0; - cwmp->cwmp_cr_event = 0; - while (1) - { - pthread_mutex_lock (&(cwmp->mutex_session_send)); - ilist = (&(cwmp->head_session_queue))->next; - while ((ilist == &(cwmp->head_session_queue)) || retry) - { - t = cwmp_get_retry_interval(cwmp); - time_to_wait.tv_sec = time(NULL) + t; - CWMP_LOG(INFO,"Waiting the next session"); - pthread_cond_timedwait(&(cwmp->threshold_session_send), &(cwmp->mutex_session_send), &time_to_wait); - ilist = (&(cwmp->head_session_queue))->next; - retry = false; - } - session = list_entry(ilist, struct session, list); - if( access( DM_ENABLED_NOTIFY, F_OK ) != -1 ) { - if(!event_exist_in_list(cwmp, EVENT_IDX_4VALUE_CHANGE)) - is_notify = check_value_change(); - } - if(is_notify>0 || access(DM_ENABLED_NOTIFY, F_OK ) < 0) - cwmp_update_enabled_notify_file(); - cwmp_prepare_value_change(cwmp); - free_dm_parameter_all_fromlist(&list_value_change); - if ((error = cwmp_move_session_to_session_send (cwmp, session))) { - CWMP_LOG(EMERG,"FATAL error in the mutex process in the session scheduler!"); - exit(EXIT_FAILURE); - } + cwmp->cwmp_cr_event = 0; + while (1) { + pthread_mutex_lock(&(cwmp->mutex_session_send)); + ilist = (&(cwmp->head_session_queue))->next; + while ((ilist == &(cwmp->head_session_queue)) || retry) { + t = cwmp_get_retry_interval(cwmp); + time_to_wait.tv_sec = time(NULL) + t; + CWMP_LOG(INFO, "Waiting the next session"); + pthread_cond_timedwait(&(cwmp->threshold_session_send), &(cwmp->mutex_session_send), &time_to_wait); + ilist = (&(cwmp->head_session_queue))->next; + retry = false; + } + session = list_entry(ilist, struct session, list); + if (access(DM_ENABLED_NOTIFY, F_OK) != -1) { + if (!event_exist_in_list(cwmp, EVENT_IDX_4VALUE_CHANGE)) + is_notify = check_value_change(); + } + if (is_notify > 0 || access(DM_ENABLED_NOTIFY, F_OK) < 0) + cwmp_update_enabled_notify_file(); + cwmp_prepare_value_change(cwmp); + free_dm_parameter_all_fromlist(&list_value_change); + if ((error = cwmp_move_session_to_session_send(cwmp, session))) { + CWMP_LOG(EMERG, "FATAL error in the mutex process in the session scheduler!"); + exit(EXIT_FAILURE); + } - cwmp->session_status.last_end_time = 0; - cwmp->session_status.last_start_time = time(NULL); - cwmp->session_status.last_status = SESSION_RUNNING; - cwmp->session_status.next_retry = 0; + cwmp->session_status.last_end_time = 0; + cwmp->session_status.last_start_time = time(NULL); + cwmp->session_status.last_status = SESSION_RUNNING; + cwmp->session_status.next_retry = 0; - if (access(fc_cookies, F_OK) != -1) - remove(fc_cookies); - CWMP_LOG (INFO,"Start session"); + if (access(fc_cookies, F_OK) != -1) + remove(fc_cookies); + CWMP_LOG(INFO, "Start session"); - uci_get_value(UCI_CPE_EXEC_DOWNLOAD, &exec_download); - if (strcmp(exec_download, "1") == 0) { - CWMP_LOG(INFO, "Firmware downloaded and applied successfully"); - uci_set_value("cwmp.cpe.exec_download=0"); - } - error = cwmp_schedule_rpc (cwmp,session); - CWMP_LOG (INFO,"End session"); - if (session->error == CWMP_RETRY_SESSION && (!list_empty(&(session->head_event_container)) || (list_empty(&(session->head_event_container)) && cwmp->cwmp_cr_event == 0)) ) - { - run_session_end_func(); - error = cwmp_move_session_to_session_queue (cwmp, session); - CWMP_LOG(INFO,"Retry session, retry count = %d, retry in %ds",cwmp->retry_count_session,cwmp_get_retry_interval(cwmp)); - retry = true; - cwmp->session_status.last_end_time = time(NULL); - cwmp->session_status.last_status = SESSION_FAILURE; - cwmp->session_status.next_retry = time(NULL) + cwmp_get_retry_interval(cwmp); - cwmp->session_status.failure_session++; - pthread_mutex_unlock (&(cwmp->mutex_session_send)); - continue; - } - event_remove_all_event_container(session,RPC_SEND); - run_session_end_func(); - cwmp_session_destructor (session); - cwmp->session_send = NULL; - cwmp->retry_count_session = 0; - cwmp->session_status.last_end_time = time(NULL); - cwmp->session_status.last_status = SESSION_SUCCESS; - cwmp->session_status.next_retry = 0; - cwmp->session_status.success_session++; - pthread_mutex_unlock (&(cwmp->mutex_session_send)); - } + uci_get_value(UCI_CPE_EXEC_DOWNLOAD, &exec_download); + if (strcmp(exec_download, "1") == 0) { + CWMP_LOG(INFO, "Firmware downloaded and applied successfully"); + uci_set_value("cwmp.cpe.exec_download=0"); + } + error = cwmp_schedule_rpc(cwmp, session); + CWMP_LOG(INFO, "End session"); + if (session->error == CWMP_RETRY_SESSION && (!list_empty(&(session->head_event_container)) || (list_empty(&(session->head_event_container)) && cwmp->cwmp_cr_event == 0))) { + run_session_end_func(); + error = cwmp_move_session_to_session_queue(cwmp, session); + CWMP_LOG(INFO, "Retry session, retry count = %d, retry in %ds", cwmp->retry_count_session, cwmp_get_retry_interval(cwmp)); + retry = true; + cwmp->session_status.last_end_time = time(NULL); + cwmp->session_status.last_status = SESSION_FAILURE; + cwmp->session_status.next_retry = time(NULL) + cwmp_get_retry_interval(cwmp); + cwmp->session_status.failure_session++; + pthread_mutex_unlock(&(cwmp->mutex_session_send)); + continue; + } + event_remove_all_event_container(session, RPC_SEND); + run_session_end_func(); + cwmp_session_destructor(session); + cwmp->session_send = NULL; + cwmp->retry_count_session = 0; + cwmp->session_status.last_end_time = time(NULL); + cwmp->session_status.last_status = SESSION_SUCCESS; + cwmp->session_status.next_retry = 0; + cwmp->session_status.success_session++; + pthread_mutex_unlock(&(cwmp->mutex_session_send)); + } } -int cwmp_rpc_cpe_handle_message (struct session *session, struct rpc *rpc_cpe) +int cwmp_rpc_cpe_handle_message(struct session *session, struct rpc *rpc_cpe) { if (xml_prepare_msg_out(session)) return -1; @@ -456,173 +429,172 @@ int cwmp_rpc_cpe_handle_message (struct session *session, struct rpc *rpc_cpe) return 0; } -void *thread_uloop_run (void *v __attribute__((unused))) +void *thread_uloop_run(void *v __attribute__((unused))) { ubus_init(&cwmp_main); return NULL; } -void *thread_http_cr_server_listen (void *v __attribute__((unused))) +void *thread_http_cr_server_listen(void *v __attribute__((unused))) { - http_server_listen(); - return NULL; + http_server_listen(); + return NULL; } void signal_handler(int signal_num __attribute__((unused))) { - close(cwmp_main.cr_socket_desc); - _exit(EXIT_SUCCESS); + close(cwmp_main.cr_socket_desc); + _exit(EXIT_SUCCESS); } -int cwmp_init(int argc, char** argv,struct cwmp *cwmp) +int cwmp_init(int argc, char **argv, struct cwmp *cwmp) { - int error; - struct env env; + int error; + struct env env; - memset(&env,0,sizeof(struct env)); - if ((error = global_env_init (argc, argv, &env))) - return error; + memset(&env, 0, sizeof(struct env)); + if ((error = global_env_init(argc, argv, &env))) + return error; - /* Only One instance should run*/ - cwmp->pid_file = open("/var/run/icwmpd.pid", O_CREAT | O_RDWR, 0666); - fcntl(cwmp->pid_file, F_SETFD, fcntl(cwmp->pid_file, F_GETFD) | FD_CLOEXEC); - int rc = flock(cwmp->pid_file, LOCK_EX | LOCK_NB); - if(rc) { - if(EWOULDBLOCK != errno) - { - char *piderr = "PID file creation failed: Quit the daemon!"; - fprintf(stderr, "%s\n", piderr); - CWMP_LOG(ERROR, "%s",piderr); - exit(EXIT_FAILURE); - } - else exit(EXIT_SUCCESS); - } + /* Only One instance should run*/ + cwmp->pid_file = open("/var/run/icwmpd.pid", O_CREAT | O_RDWR, 0666); + fcntl(cwmp->pid_file, F_SETFD, fcntl(cwmp->pid_file, F_GETFD) | FD_CLOEXEC); + int rc = flock(cwmp->pid_file, LOCK_EX | LOCK_NB); + if (rc) { + if (EWOULDBLOCK != errno) { + char *piderr = "PID file creation failed: Quit the daemon!"; + fprintf(stderr, "%s\n", piderr); + CWMP_LOG(ERROR, "%s", piderr); + exit(EXIT_FAILURE); + } else + exit(EXIT_SUCCESS); + } - pthread_mutex_init(&cwmp->mutex_periodic, NULL); - pthread_mutex_init(&cwmp->mutex_session_queue, NULL); - pthread_mutex_init(&cwmp->mutex_session_send, NULL); - memcpy(&(cwmp->env),&env,sizeof(struct env)); - INIT_LIST_HEAD(&(cwmp->head_session_queue)); + pthread_mutex_init(&cwmp->mutex_periodic, NULL); + pthread_mutex_init(&cwmp->mutex_session_queue, NULL); + pthread_mutex_init(&cwmp->mutex_session_send, NULL); + memcpy(&(cwmp->env), &env, sizeof(struct env)); + INIT_LIST_HEAD(&(cwmp->head_session_queue)); - if ((error = global_conf_init(&(cwmp->conf)))) - return error; + if ((error = global_conf_init(&(cwmp->conf)))) + return error; - cwmp_get_deviceid(cwmp); - return CWMP_OK; + cwmp_get_deviceid(cwmp); + return CWMP_OK; } int cwmp_exit(void) { - struct cwmp *cwmp = &cwmp_main; + struct cwmp *cwmp = &cwmp_main; - FREE(cwmp->deviceid.manufacturer); - FREE(cwmp->deviceid.serialnumber); - FREE(cwmp->deviceid.productclass); - FREE(cwmp->deviceid.oui); - FREE(cwmp->deviceid.softwareversion); - FREE(cwmp->conf.lw_notification_hostname); - FREE(cwmp->conf.ip); - FREE(cwmp->conf.ipv6); - FREE(cwmp->conf.acsurl); - FREE(cwmp->conf.acs_userid); - FREE(cwmp->conf.acs_passwd); - FREE(cwmp->conf.interface); - FREE(cwmp->conf.cpe_userid); - FREE(cwmp->conf.cpe_passwd); - FREE(cwmp->conf.ubus_socket); - bkp_tree_clean(); - ubus_exit(); - uloop_done(); - return 0; + FREE(cwmp->deviceid.manufacturer); + FREE(cwmp->deviceid.serialnumber); + FREE(cwmp->deviceid.productclass); + FREE(cwmp->deviceid.oui); + FREE(cwmp->deviceid.softwareversion); + FREE(cwmp->conf.lw_notification_hostname); + FREE(cwmp->conf.ip); + FREE(cwmp->conf.ipv6); + FREE(cwmp->conf.acsurl); + FREE(cwmp->conf.acs_userid); + FREE(cwmp->conf.acs_passwd); + FREE(cwmp->conf.interface); + FREE(cwmp->conf.cpe_userid); + FREE(cwmp->conf.cpe_passwd); + FREE(cwmp->conf.ubus_socket); + bkp_tree_clean(); + ubus_exit(); + uloop_done(); + return 0; } int main(int argc, char **argv) { - struct cwmp *cwmp = &cwmp_main; - int error; - pthread_t periodic_event_thread; - pthread_t scheduleInform_thread; - pthread_t change_du_state_thread; - pthread_t download_thread; - pthread_t schedule_download_thread; + struct cwmp *cwmp = &cwmp_main; + int error; + pthread_t periodic_event_thread; + pthread_t scheduleInform_thread; + pthread_t change_du_state_thread; + pthread_t download_thread; + pthread_t schedule_download_thread; pthread_t apply_schedule_download_thread; - pthread_t upload_thread; - pthread_t ubus_thread; - pthread_t http_cr_server_thread; - pthread_t periodic_check_notify; + pthread_t upload_thread; + pthread_t ubus_thread; + pthread_t http_cr_server_thread; + pthread_t periodic_check_notify; - struct sigaction act = {0}; + struct sigaction act = { 0 }; - if ((error = cwmp_init(argc, argv, cwmp))) - return error; + if ((error = cwmp_init(argc, argv, cwmp))) + return error; - CWMP_LOG(INFO,"STARTING ICWMP with PID :%d", getpid()); - cwmp->start_time = time(NULL); + CWMP_LOG(INFO, "STARTING ICWMP with PID :%d", getpid()); + cwmp->start_time = time(NULL); - if ((error = cwmp_init_backup_session(cwmp, NULL, ALL))) - return error; + if ((error = cwmp_init_backup_session(cwmp, NULL, ALL))) + return error; - if ((error = cwmp_root_cause_events(cwmp))) - return error; + if ((error = cwmp_root_cause_events(cwmp))) + return error; - http_server_init(); + http_server_init(); - act.sa_handler = signal_handler; - sigaction(SIGINT, &act, 0); - sigaction(SIGTERM, &act, 0); - - error = pthread_create(&http_cr_server_thread, NULL, &thread_http_cr_server_listen, NULL); - if (error < 0) - CWMP_LOG(ERROR,"Error when creating the http connection request server thread!"); + act.sa_handler = signal_handler; + sigaction(SIGINT, &act, 0); + sigaction(SIGTERM, &act, 0); - error = pthread_create(&ubus_thread, NULL, &thread_uloop_run, NULL); - if (error < 0) - CWMP_LOG(ERROR,"Error when creating the ubus thread!"); + error = pthread_create(&http_cr_server_thread, NULL, &thread_http_cr_server_listen, NULL); + if (error < 0) + CWMP_LOG(ERROR, "Error when creating the http connection request server thread!"); - error = pthread_create(&periodic_event_thread, NULL, &thread_event_periodic, (void *)cwmp); - if (error < 0) - CWMP_LOG(ERROR,"Error when creating the periodic event thread!"); + error = pthread_create(&ubus_thread, NULL, &thread_uloop_run, NULL); + if (error < 0) + CWMP_LOG(ERROR, "Error when creating the ubus thread!"); - error = pthread_create(&periodic_check_notify, NULL, &thread_periodic_check_notify, (void *)cwmp); - if (error < 0) - CWMP_LOG(ERROR,"Error when creating the download thread!"); - error = pthread_create(&scheduleInform_thread, NULL, &thread_cwmp_rpc_cpe_scheduleInform, (void *)cwmp); - if (error < 0) - CWMP_LOG(ERROR,"Error when creating the scheduled inform thread!"); + error = pthread_create(&periodic_event_thread, NULL, &thread_event_periodic, (void *)cwmp); + if (error < 0) + CWMP_LOG(ERROR, "Error when creating the periodic event thread!"); - error = pthread_create(&download_thread, NULL, &thread_cwmp_rpc_cpe_download, (void *)cwmp); - if (error < 0) - CWMP_LOG(ERROR,"Error when creating the download thread!"); + error = pthread_create(&periodic_check_notify, NULL, &thread_periodic_check_notify, (void *)cwmp); + if (error < 0) + CWMP_LOG(ERROR, "Error when creating the download thread!"); + error = pthread_create(&scheduleInform_thread, NULL, &thread_cwmp_rpc_cpe_scheduleInform, (void *)cwmp); + if (error < 0) + CWMP_LOG(ERROR, "Error when creating the scheduled inform thread!"); - error = pthread_create(&change_du_state_thread, NULL, &thread_cwmp_rpc_cpe_change_du_state, (void *)cwmp); - if (error < 0) - CWMP_LOG(ERROR,"Error when creating the state change thread!"); + error = pthread_create(&download_thread, NULL, &thread_cwmp_rpc_cpe_download, (void *)cwmp); + if (error < 0) + CWMP_LOG(ERROR, "Error when creating the download thread!"); + + error = pthread_create(&change_du_state_thread, NULL, &thread_cwmp_rpc_cpe_change_du_state, (void *)cwmp); + if (error < 0) + CWMP_LOG(ERROR, "Error when creating the state change thread!"); error = pthread_create(&schedule_download_thread, NULL, &thread_cwmp_rpc_cpe_schedule_download, (void *)cwmp); - if (error < 0) - CWMP_LOG(ERROR,"Error when creating the schedule download thread!"); + if (error < 0) + CWMP_LOG(ERROR, "Error when creating the schedule download thread!"); error = pthread_create(&apply_schedule_download_thread, NULL, &thread_cwmp_rpc_cpe_apply_schedule_download, (void *)cwmp); - if (error < 0) - CWMP_LOG(ERROR,"Error when creating the schedule download thread!"); + if (error < 0) + CWMP_LOG(ERROR, "Error when creating the schedule download thread!"); - error = pthread_create(&upload_thread, NULL, &thread_cwmp_rpc_cpe_upload, (void *)cwmp); - if (error < 0) - CWMP_LOG(ERROR,"Error when creating the download thread!"); + error = pthread_create(&upload_thread, NULL, &thread_cwmp_rpc_cpe_upload, (void *)cwmp); + if (error < 0) + CWMP_LOG(ERROR, "Error when creating the download thread!"); - cwmp_schedule_session(cwmp); + cwmp_schedule_session(cwmp); - pthread_join(ubus_thread, NULL); - pthread_join(periodic_event_thread, NULL); - pthread_join(scheduleInform_thread, NULL); - pthread_join(download_thread, NULL); - pthread_join(upload_thread, NULL); - pthread_join(schedule_download_thread, NULL); + pthread_join(ubus_thread, NULL); + pthread_join(periodic_event_thread, NULL); + pthread_join(scheduleInform_thread, NULL); + pthread_join(download_thread, NULL); + pthread_join(upload_thread, NULL); + pthread_join(schedule_download_thread, NULL); pthread_join(apply_schedule_download_thread, NULL); - pthread_join(change_du_state_thread, NULL); - pthread_join(http_cr_server_thread, NULL); + pthread_join(change_du_state_thread, NULL); + pthread_join(http_cr_server_thread, NULL); - CWMP_LOG(INFO,"EXIT ICWMP"); - cwmp_exit(); - return CWMP_OK; + CWMP_LOG(INFO, "EXIT ICWMP"); + cwmp_exit(); + return CWMP_OK; } diff --git a/cwmp_json.c b/cwmp_json.c index 8efe69e..0e571e3 100644 --- a/cwmp_json.c +++ b/cwmp_json.c @@ -27,13 +27,11 @@ static int cwmp_json_message_parse(char **policy, int size, char **tb, char *msg json_object *obj; jshn_obj = json_tokener_parse(msg); - if (jshn_obj == NULL || json_object_get_type(jshn_obj) != json_type_object) - { + if (jshn_obj == NULL || json_object_get_type(jshn_obj) != json_type_object) { jshn_obj = NULL; return -1; } - for (i=0; i -char local_time[32] = {0}; +char local_time[32] = { 0 }; -char * mix_get_time_of(time_t t_time) +char *mix_get_time_of(time_t t_time) { struct tm *t_tm; @@ -19,9 +19,9 @@ char * mix_get_time_of(time_t t_time) if (t_tm == NULL) return NULL; - if(strftime(local_time, sizeof(local_time), "%FT%T%z", t_tm) == 0) + if (strftime(local_time, sizeof(local_time), "%FT%T%z", t_tm) == 0) return NULL; - + local_time[25] = local_time[24]; local_time[24] = local_time[23]; local_time[22] = ':'; @@ -30,10 +30,10 @@ char * mix_get_time_of(time_t t_time) return local_time; } -char * mix_get_time(void) +char *mix_get_time(void) { - time_t t_time; - t_time = time(NULL); - mix_get_time_of(t_time); - return local_time; + time_t t_time; + t_time = time(NULL); + mix_get_time_of(t_time); + return local_time; } diff --git a/cwmp_uci.c b/cwmp_uci.c index 2f1b280..0624530 100644 --- a/cwmp_uci.c +++ b/cwmp_uci.c @@ -13,11 +13,11 @@ #include "cwmp_uci.h" struct uci_paths uci_save_conf_paths[] = { - [UCI_STANDARD_CONFIG] ={"/etc/config","/tmp/.uci"}, - [UCI_DB_CONFIG] = {"/lib/db/config", NULL}, - [UCI_BOARD_DB_CONFIG] = {"/etc/board-db/config", NULL}, - [UCI_VARSTATE_CONFIG] = {NULL, "/var/state"}, - [UCI_BBFDM_CONFIG] = {"/etc/bbfdm", "/tmp/.bbfdm"} + [UCI_STANDARD_CONFIG] = { "/etc/config", "/tmp/.uci" }, + [UCI_DB_CONFIG] = { "/lib/db/config", NULL }, + [UCI_BOARD_DB_CONFIG] = { "/etc/board-db/config", NULL }, + [UCI_VARSTATE_CONFIG] = { NULL, "/var/state" }, + [UCI_BBFDM_CONFIG] = { "/etc/bbfdm", "/tmp/.bbfdm" } }; struct uci_context *cwmp_uci_ctx = ((void *)0); @@ -77,7 +77,7 @@ int cwmp_uci_lookup_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *pack goto lookup; } ptr->section = section; - if (ptr->section && !cwmp_check_section_name(ptr->section , true)) + if (ptr->section && !cwmp_check_section_name(ptr->section, true)) ptr->flags |= UCI_LOOKUP_EXTENDED; /*option*/ @@ -98,11 +98,12 @@ lookup: char *cwmp_uci_list_to_string(struct uci_list *list, char *delimitor) { struct uci_element *e = NULL; - char val[512] = {0}; + char val[512] = { 0 }; int del_len = strlen(delimitor); if (list) { - uci_foreach_element(list, e) { + uci_foreach_element(list, e) + { int len = strlen(val); if (len != 0) { memcpy(val + len, delimitor, del_len); @@ -118,10 +119,9 @@ char *cwmp_uci_list_to_string(struct uci_list *list, char *delimitor) int cwmp_uci_get_option_value_string(char *package, char *section, char *option, int uci_type, char **value) { - struct uci_ptr ptr = {0}; + struct uci_ptr ptr = { 0 }; cwmp_uci_init(uci_type); - if (cwmp_uci_lookup_ptr(cwmp_uci_ctx, &ptr, package, section, option, NULL) != UCI_OK) { *value = ""; cwmp_uci_ctx = NULL; @@ -140,14 +140,13 @@ int cwmp_uci_get_option_value_string(char *package, char *section, char *option, return 0; } - -char* cwmp_db_get_value_string(char *package, char *section, char *option) +char *cwmp_db_get_value_string(char *package, char *section, char *option) { cwmp_uci_ctx = uci_alloc_context(); struct uci_option *o = NULL; struct uci_element *e; - struct uci_ptr ptr = {0}; + struct uci_ptr ptr = { 0 }; cwmp_uci_ctx->confdir = LIB_DB_CONFIG; @@ -155,15 +154,14 @@ char* cwmp_db_get_value_string(char *package, char *section, char *option) return ""; e = ptr.last; - switch(e->type) { - case UCI_TYPE_OPTION: - o = ptr.o; - break; - default: - break; + switch (e->type) { + case UCI_TYPE_OPTION: + o = ptr.o; + break; + default: + break; } - if (o) return o->v.string ? o->v.string : ""; else { @@ -174,9 +172,9 @@ char* cwmp_db_get_value_string(char *package, char *section, char *option) int cwmp_uci_get_option_value_list(char *package, char *section, char *option, struct list_head *list) { struct uci_element *e; - struct uci_ptr ptr = {0}; + struct uci_ptr ptr = { 0 }; cwmp_uci_ctx = uci_alloc_context(); - struct config_uci_list *uci_list_elem; + struct config_uci_list *uci_list_elem; int size = 0; //*value = NULL; @@ -190,234 +188,210 @@ int cwmp_uci_get_option_value_list(char *package, char *section, char *option, s return -1; } - if (ptr.o->type == UCI_TYPE_LIST) { - uci_foreach_element(&ptr.o->v.list, e) - { - if((e != NULL)&&(e->name)) - { - uci_list_elem = calloc(1,sizeof(struct config_uci_list)); - if(uci_list_elem == NULL) - { - uci_free_context(cwmp_uci_ctx); - return -1; - } - uci_list_elem->value = strdup(e->name); - list_add_tail (&(uci_list_elem->list), list); - size++; - } - else - { - uci_free_context(cwmp_uci_ctx); - return size; - } - } + if (ptr.o->type == UCI_TYPE_LIST) { + uci_foreach_element(&ptr.o->v.list, e) + { + if ((e != NULL) && (e->name)) { + uci_list_elem = calloc(1, sizeof(struct config_uci_list)); + if (uci_list_elem == NULL) { + uci_free_context(cwmp_uci_ctx); + return -1; + } + uci_list_elem->value = strdup(e->name); + list_add_tail(&(uci_list_elem->list), list); + size++; + } else { + uci_free_context(cwmp_uci_ctx); + return size; + } + } } - uci_free_context(cwmp_uci_ctx); + uci_free_context(cwmp_uci_ctx); return size; } int uci_get_list_value(char *cmd, struct list_head *list) { - struct uci_ptr ptr; - struct uci_context *c = uci_alloc_context(); - struct uci_element *e; - struct config_uci_list *uci_list_elem; - char *s,*t; - int size = 0; + struct uci_ptr ptr; + struct uci_context *c = uci_alloc_context(); + struct uci_element *e; + struct config_uci_list *uci_list_elem; + char *s, *t; + int size = 0; - if (!c) - { - CWMP_LOG(ERROR, "Out of memory"); - return size; - } + if (!c) { + CWMP_LOG(ERROR, "Out of memory"); + return size; + } - s = strdup(cmd); - t = s; - if (uci_lookup_ptr(c, &ptr, s, true) != UCI_OK) - { - CWMP_LOG(ERROR, "Invalid uci command path: %s",cmd); - free(t); - uci_free_context(c); - return size; - } + s = strdup(cmd); + t = s; + if (uci_lookup_ptr(c, &ptr, s, true) != UCI_OK) { + CWMP_LOG(ERROR, "Invalid uci command path: %s", cmd); + free(t); + uci_free_context(c); + return size; + } - if(ptr.o == NULL) - { - free(t); - uci_free_context(c); - return size; - } + if (ptr.o == NULL) { + free(t); + uci_free_context(c); + return size; + } - if(ptr.o->type == UCI_TYPE_LIST) - { - uci_foreach_element(&ptr.o->v.list, e) - { - if((e != NULL)&&(e->name)) - { - uci_list_elem = calloc(1,sizeof(struct config_uci_list)); - if(uci_list_elem == NULL) - { - free(t); - uci_free_context(c); - return CWMP_GEN_ERR; - } - uci_list_elem->value = strdup(e->name); - list_add_tail (&(uci_list_elem->list), list); - size++; - } - else - { - free(t); - uci_free_context(c); - return size; - } - } - } - free(t); - uci_free_context(c); - return size; + if (ptr.o->type == UCI_TYPE_LIST) { + uci_foreach_element(&ptr.o->v.list, e) + { + if ((e != NULL) && (e->name)) { + uci_list_elem = calloc(1, sizeof(struct config_uci_list)); + if (uci_list_elem == NULL) { + free(t); + uci_free_context(c); + return CWMP_GEN_ERR; + } + uci_list_elem->value = strdup(e->name); + list_add_tail(&(uci_list_elem->list), list); + size++; + } else { + free(t); + uci_free_context(c); + return size; + } + } + } + free(t); + uci_free_context(c); + return size; } -int uci_get_value_common(char *cmd,char **value,bool state) +int uci_get_value_common(char *cmd, char **value, bool state) { - struct uci_ptr ptr; - struct uci_context *c = uci_alloc_context(); - char *s,*t; - char state_path[32]; + struct uci_ptr ptr; + struct uci_context *c = uci_alloc_context(); + char *s, *t; + char state_path[32]; - *value = NULL; - if (!c) - { - CWMP_LOG(ERROR, "Out of memory"); - return CWMP_GEN_ERR; - } - if (state) - { - strcpy(state_path,VARSTATE_CONFIG); - uci_add_delta_path(c, c->savedir); - uci_set_savedir(c, state_path); - } - s = strdup(cmd); - t = s; - if (uci_lookup_ptr(c, &ptr, s, true) != UCI_OK) - { - CWMP_LOG(ERROR, "Error occurred in uci %s get %s",state?"state":"config",cmd); - free(t); - uci_free_context(c); - return CWMP_GEN_ERR; - } - free(t); - if(ptr.flags & UCI_LOOKUP_COMPLETE) - { - if (ptr.o==NULL || ptr.o->v.string==NULL) - { - CWMP_LOG(INFO, "%s not found or empty value",cmd); - uci_free_context(c); - return CWMP_OK; - } - *value = strdup(ptr.o->v.string); - } - uci_free_context(c); - return CWMP_OK; + *value = NULL; + if (!c) { + CWMP_LOG(ERROR, "Out of memory"); + return CWMP_GEN_ERR; + } + if (state) { + strcpy(state_path, VARSTATE_CONFIG); + uci_add_delta_path(c, c->savedir); + uci_set_savedir(c, state_path); + } + s = strdup(cmd); + t = s; + if (uci_lookup_ptr(c, &ptr, s, true) != UCI_OK) { + CWMP_LOG(ERROR, "Error occurred in uci %s get %s", state ? "state" : "config", cmd); + free(t); + uci_free_context(c); + return CWMP_GEN_ERR; + } + free(t); + if (ptr.flags & UCI_LOOKUP_COMPLETE) { + if (ptr.o == NULL || ptr.o->v.string == NULL) { + CWMP_LOG(INFO, "%s not found or empty value", cmd); + uci_free_context(c); + return CWMP_OK; + } + *value = strdup(ptr.o->v.string); + } + uci_free_context(c); + return CWMP_OK; } -int uci_get_state_value(char *cmd,char **value) +int uci_get_state_value(char *cmd, char **value) { - int error; - error = uci_get_value_common (cmd,value,true); - return error; + int error; + error = uci_get_value_common(cmd, value, true); + return error; } -int uci_get_value(char *cmd,char **value) +int uci_get_value(char *cmd, char **value) { - int error; - error = uci_get_value_common (cmd,value,false); - return error; + int error; + error = uci_get_value_common(cmd, value, false); + return error; } static int uci_action_value_common(char *cmd, uci_config_action action) { - int ret = UCI_OK; - char *s,*t; - struct uci_context *c = uci_alloc_context(); - struct uci_ptr ptr; - char state_path[32]; + int ret = UCI_OK; + char *s, *t; + struct uci_context *c = uci_alloc_context(); + struct uci_ptr ptr; + char state_path[32]; - if (!c) - { - CWMP_LOG(ERROR, "Out of memory"); - return CWMP_GEN_ERR; - } + if (!c) { + CWMP_LOG(ERROR, "Out of memory"); + return CWMP_GEN_ERR; + } - if (action == CWMP_CMD_SET_STATE) - { - strcpy(state_path,VARSTATE_CONFIG); - uci_add_delta_path(c, c->savedir); - uci_set_savedir(c, state_path); - } + if (action == CWMP_CMD_SET_STATE) { + strcpy(state_path, VARSTATE_CONFIG); + uci_add_delta_path(c, c->savedir); + uci_set_savedir(c, state_path); + } - s = strdup(cmd); - t = s; + s = strdup(cmd); + t = s; - if (uci_lookup_ptr(c, &ptr, s, true) != UCI_OK) - { - free(t); - uci_free_context(c); - return CWMP_GEN_ERR; - } - switch (action) - { - case CWMP_CMD_SET: - case CWMP_CMD_SET_STATE: - ret = uci_set(c, &ptr); - break; - case CWMP_CMD_DEL: - ret = uci_delete(c, &ptr); - break; - case CWMP_CMD_ADD_LIST: - ret = uci_add_list(c, &ptr); - break; - } - if (ret == UCI_OK) - { - ret = uci_save(c, ptr.p); - } - else - { - CWMP_LOG(ERROR, "UCI %s %s not succeed %s",action==CWMP_CMD_SET_STATE?"state":"config",action==CWMP_CMD_DEL?"delete":"set",cmd); - } - free(t); - uci_free_context(c); - return CWMP_OK; + if (uci_lookup_ptr(c, &ptr, s, true) != UCI_OK) { + free(t); + uci_free_context(c); + return CWMP_GEN_ERR; + } + switch (action) { + case CWMP_CMD_SET: + case CWMP_CMD_SET_STATE: + ret = uci_set(c, &ptr); + break; + case CWMP_CMD_DEL: + ret = uci_delete(c, &ptr); + break; + case CWMP_CMD_ADD_LIST: + ret = uci_add_list(c, &ptr); + break; + } + if (ret == UCI_OK) { + ret = uci_save(c, ptr.p); + } else { + CWMP_LOG(ERROR, "UCI %s %s not succeed %s", action == CWMP_CMD_SET_STATE ? "state" : "config", action == CWMP_CMD_DEL ? "delete" : "set", cmd); + } + free(t); + uci_free_context(c); + return CWMP_OK; } int uci_delete_value(char *cmd) { - int error; - error = uci_action_value_common (cmd,CWMP_CMD_DEL); - return error; + int error; + error = uci_action_value_common(cmd, CWMP_CMD_DEL); + return error; } int uci_set_value(char *cmd) { - int error; - error = uci_action_value_common (cmd,CWMP_CMD_SET); - return error; + int error; + error = uci_action_value_common(cmd, CWMP_CMD_SET); + return error; } int uci_set_state_value(char *cmd) { - int error; - error = uci_action_value_common (cmd,CWMP_CMD_SET_STATE); - return error; + int error; + error = uci_action_value_common(cmd, CWMP_CMD_SET_STATE); + return error; } int uci_add_list_value(char *cmd) { - int error; - error = uci_action_value_common (cmd,CWMP_CMD_ADD_LIST); - return error; + int error; + error = uci_action_value_common(cmd, CWMP_CMD_ADD_LIST); + return error; } static inline void cwmp_uci_list_insert(struct uci_list *list, struct uci_list *ptr) @@ -428,11 +402,7 @@ static inline void cwmp_uci_list_insert(struct uci_list *list, struct uci_list * list->next = ptr; } -static inline void cwmp_uci_list_add(struct uci_list *head, struct uci_list *ptr) -{ - cwmp_uci_list_insert(head->prev, ptr); -} - +static inline void cwmp_uci_list_add(struct uci_list *head, struct uci_list *ptr) { cwmp_uci_list_insert(head->prev, ptr); } int cwmp_uci_get_value_by_section_string(struct uci_section *s, char *option, char **value) { struct uci_element *e; @@ -441,7 +411,8 @@ int cwmp_uci_get_value_by_section_string(struct uci_section *s, char *option, ch if (s == NULL || option == NULL) goto not_found; - uci_foreach_element(&s->options, e) { + uci_foreach_element(&s->options, e) + { o = (uci_to_option(e)); if (!strcmp(o->e.name, option)) { if (o->type == UCI_TYPE_LIST) { @@ -453,9 +424,9 @@ int cwmp_uci_get_value_by_section_string(struct uci_section *s, char *option, ch } } - not_found: - *value = ""; - return -1; +not_found: + *value = ""; + return -1; } static inline void cwmp_uci_list_init(struct uci_list *ptr) @@ -476,42 +447,43 @@ int cwmp_uci_get_value_by_section_list(struct uci_section *s, char *option, stru if (s == NULL || option == NULL) return -1; - uci_foreach_element(&s->options, e) { + uci_foreach_element(&s->options, e) + { o = (uci_to_option(e)); if (strcmp(o->e.name, option) == 0) { - switch(o->type) { - case UCI_TYPE_LIST: - *value = &o->v.list; + switch (o->type) { + case UCI_TYPE_LIST: + *value = &o->v.list; + return 0; + case UCI_TYPE_STRING: + if (!o->v.string || (o->v.string)[0] == '\0') return 0; - case UCI_TYPE_STRING: - if (!o->v.string || (o->v.string)[0] == '\0') - return 0; - list = calloc(1, sizeof(struct uci_list)); - cwmp_uci_list_init(list); - dup = strdup(o->v.string); - pch = strtok_r(dup, " ", &spch); - while (pch != NULL) { - e = calloc(1, sizeof(struct uci_element)); - e->name = pch; - cwmp_uci_list_add(list, &e->list); - pch = strtok_r(NULL, " ", &spch); - } - *value = list; - return 0; - default: - return -1; + list = calloc(1, sizeof(struct uci_list)); + cwmp_uci_list_init(list); + dup = strdup(o->v.string); + pch = strtok_r(dup, " ", &spch); + while (pch != NULL) { + e = calloc(1, sizeof(struct uci_element)); + e->name = pch; + cwmp_uci_list_add(list, &e->list); + pch = strtok_r(NULL, " ", &spch); + } + *value = list; + return 0; + default: + return -1; } } } return -1; } -struct uci_section *cwmp_uci_walk_section (char *package, char *stype, void *arg1, void *arg2, int cmp , int (*filter)(struct uci_section *s, void *value), struct uci_section *prev_section, int walk) +struct uci_section *cwmp_uci_walk_section(char *package, char *stype, void *arg1, void *arg2, int cmp, int (*filter)(struct uci_section *s, void *value), struct uci_section *prev_section, int walk) { struct uci_section *s = NULL; struct uci_element *e, *m; char *value, *dup, *pch, *spch; struct uci_list *list_value, *list_section; - struct uci_ptr ptr = {0}; + struct uci_ptr ptr = { 0 }; if (walk == CWMP_GET_FIRST_SECTION) { if (cwmp_uci_lookup_ptr(cwmp_uci_ctx, &ptr, package, NULL, NULL, NULL) != UCI_OK) @@ -524,50 +496,51 @@ struct uci_section *cwmp_uci_walk_section (char *package, char *stype, void *arg e = list_to_element(prev_section->e.list.next); } - while(&e->list != list_section) { + while (&e->list != list_section) { s = uci_to_section(e); if (strcmp(s->type, stype) == 0) { - switch(cmp) { - case CWMP_CMP_SECTION: + switch (cmp) { + case CWMP_CMP_SECTION: + goto end; + case CWMP_CMP_OPTION_EQUAL: + cwmp_uci_get_value_by_section_string(s, (char *)arg1, &value); + if (strcmp(value, (char *)arg2) == 0) goto end; - case CWMP_CMP_OPTION_EQUAL: - cwmp_uci_get_value_by_section_string(s, (char *)arg1, &value); - if (strcmp(value, (char *)arg2) == 0) + break; + case CWMP_CMP_OPTION_CONTAINING: + cwmp_uci_get_value_by_section_string(s, (char *)arg1, &value); + if (strstr(value, (char *)arg2)) + goto end; + break; + case CWMP_CMP_OPTION_CONT_WORD: + cwmp_uci_get_value_by_section_string(s, (char *)arg1, &value); + dup = strdup(value); + pch = strtok_r(dup, " ", &spch); + while (pch != NULL) { + if (strcmp((char *)arg2, pch) == 0) { + FREE(dup); goto end; - break; - case CWMP_CMP_OPTION_CONTAINING: - cwmp_uci_get_value_by_section_string(s, (char *)arg1, &value); - if (strstr(value, (char *)arg2)) - goto end; - break; - case CWMP_CMP_OPTION_CONT_WORD: - cwmp_uci_get_value_by_section_string(s, (char *)arg1, &value); - dup = strdup(value); - pch = strtok_r(dup, " ", &spch); - while (pch != NULL) { - if (strcmp((char *)arg2, pch) == 0) { - FREE(dup); + } + pch = strtok_r(NULL, " ", &spch); + } + FREE(dup); + break; + case CWMP_CMP_LIST_CONTAINING: + cwmp_uci_get_value_by_section_list(s, (char *)arg1, &list_value); + if (list_value != NULL) { + uci_foreach_element(list_value, m) + { + if (strcmp(m->name, (char *)arg2) == 0) goto end; - } - pch = strtok_r(NULL, " ", &spch); } - FREE(dup); - break; - case CWMP_CMP_LIST_CONTAINING: - cwmp_uci_get_value_by_section_list(s, (char *)arg1, &list_value); - if (list_value != NULL) { - uci_foreach_element(list_value, m) { - if (strcmp(m->name, (char *)arg2) == 0) - goto end; - } - } - break; - case CWMP_CMP_FILTER_FUNC: - if (filter(s, arg1) == 0) - goto end; - break; - default: - break; + } + break; + case CWMP_CMP_FILTER_FUNC: + if (filter(s, arg1) == 0) + goto end; + break; + default: + break; } } e = list_to_element(e->list.next); diff --git a/cwmp_zlib.c b/cwmp_zlib.c index 73915dc..d6b9072 100644 --- a/cwmp_zlib.c +++ b/cwmp_zlib.c @@ -22,31 +22,29 @@ #define windowBits 15 #define GZIP_ENCODING 16 -static int strm_init (z_stream * strm, int type) +static int strm_init(z_stream *strm, int type) { - int error = 0; - strm->zalloc = Z_NULL; - strm->zfree = Z_NULL; - strm->opaque = Z_NULL; - switch (type) { - case COMP_GZIP: - error = deflateInit2(strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, - windowBits | GZIP_ENCODING, 8, - Z_DEFAULT_STRATEGY); - break; - case COMP_DEFLATE: - error = deflateInit(strm, Z_DEFAULT_COMPRESSION); - break; - } - if (error < 0) { - CWMP_LOG(ERROR, "error in zlib compress in deflateInit2"); - return -1; - } - return 0; + int error = 0; + strm->zalloc = Z_NULL; + strm->zfree = Z_NULL; + strm->opaque = Z_NULL; + switch (type) { + case COMP_GZIP: + error = deflateInit2(strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, windowBits | GZIP_ENCODING, 8, Z_DEFAULT_STRATEGY); + break; + case COMP_DEFLATE: + error = deflateInit(strm, Z_DEFAULT_COMPRESSION); + break; + } + if (error < 0) { + CWMP_LOG(ERROR, "error in zlib compress in deflateInit2"); + return -1; + } + return 0; } /* Example text to print out. */ -int zlib_compress (char *message, unsigned char **zmsg, int *zlen, int type) +int zlib_compress(char *message, unsigned char **zmsg, int *zlen, int type) { #if 0 /*test*/ static int testi = 1; @@ -54,45 +52,43 @@ int zlib_compress (char *message, unsigned char **zmsg, int *zlen, int type) sprintf(tests, "/tmp/test%d", testi++); FILE *fp = fopen (tests, "wb"); #endif /*test*/ - unsigned char out[CHUNK]; - z_stream strm={0}; - unsigned char *rzmsg = NULL; - *zmsg = NULL; - *zlen=0; - if (strm_init(&strm, type)) - return -1; - strm.next_in = (unsigned char *) message; - strm.avail_in = strlen(message); - do { - int have; - strm.avail_out = CHUNK; - strm.next_out = out; - int error = deflate(&strm, Z_FINISH); - if (error < 0) { - CWMP_LOG(ERROR, "error in zlib compress in deflate"); - return -1; - } + unsigned char out[CHUNK]; + z_stream strm = { 0 }; + unsigned char *rzmsg = NULL; + *zmsg = NULL; + *zlen = 0; + if (strm_init(&strm, type)) + return -1; + strm.next_in = (unsigned char *)message; + strm.avail_in = strlen(message); + do { + int have; + strm.avail_out = CHUNK; + strm.next_out = out; + int error = deflate(&strm, Z_FINISH); + if (error < 0) { + CWMP_LOG(ERROR, "error in zlib compress in deflate"); + return -1; + } - have = CHUNK - strm.avail_out; - int ozlen = *zlen; - *zlen += have; - rzmsg = realloc(*zmsg, *zlen * sizeof(unsigned char)); - if (rzmsg!=NULL) { - *zmsg = rzmsg; - } - else { - free(*zmsg); - CWMP_LOG(ERROR, "Error (re)allocating memory"); - return -1; - } - memcpy(*zmsg + ozlen, out, have); - } - while (strm.avail_out == 0); - deflateEnd(&strm); + have = CHUNK - strm.avail_out; + int ozlen = *zlen; + *zlen += have; + rzmsg = realloc(*zmsg, *zlen * sizeof(unsigned char)); + if (rzmsg != NULL) { + *zmsg = rzmsg; + } else { + free(*zmsg); + CWMP_LOG(ERROR, "Error (re)allocating memory"); + return -1; + } + memcpy(*zmsg + ozlen, out, have); + } while (strm.avail_out == 0); + deflateEnd(&strm); #if 0 /*test*/ fwrite(*zmsg, sizeof (char), *zlen, fp); fclose(fp); #endif /*test*/ - return 0; + return 0; } diff --git a/datamodel_interface.c b/datamodel_interface.c index 676e120..cb0d616 100644 --- a/datamodel_interface.c +++ b/datamodel_interface.c @@ -25,21 +25,21 @@ json_object *actual_list_notify = NULL; */ int cwmp_transaction_start(char *app) { - CWMP_LOG (INFO,"Starting transaction ..."); + CWMP_LOG(INFO, "Starting transaction ..."); json_object *transaction_ret = NULL, *status_obj = NULL, *transaction_id_obj = NULL; - int e = cwmp_ubus_call("usp.raw", "transaction_start", CWMP_UBUS_ARGS{{"app", {.str_val=app}, UBUS_String}}, 1, &transaction_ret); - if (e!=0) { - CWMP_LOG (INFO,"Transaction start failed: Ubus err code: %d", e); + int e = cwmp_ubus_call("usp.raw", "transaction_start", CWMP_UBUS_ARGS{ { "app", {.str_val = app }, UBUS_String } }, 1, &transaction_ret); + if (e != 0) { + CWMP_LOG(INFO, "Transaction start failed: Ubus err code: %d", e); return 0; } json_object_object_get_ex(transaction_ret, "status", &status_obj); - if (strcmp((char*)json_object_get_string(status_obj), "true") != 0) { + if (strcmp((char *)json_object_get_string(status_obj), "true") != 0) { json_object *error = NULL; json_object_object_get_ex(transaction_ret, "error", &error); FREE_JSON(status_obj) FREE_JSON(error) FREE_JSON(transaction_ret) - CWMP_LOG (INFO,"Transaction start failed: %s\n",(char*)json_object_get_string(error)); + CWMP_LOG(INFO, "Transaction start failed: %s\n", (char *)json_object_get_string(error)); return 0; } FREE_JSON(status_obj) @@ -48,7 +48,7 @@ int cwmp_transaction_start(char *app) FREE_JSON(transaction_ret) return 0; } - transaction_id = atoi((char*)json_object_get_string(transaction_id_obj)); + transaction_id = atoi((char *)json_object_get_string(transaction_id_obj)); FREE_JSON(transaction_id_obj) FREE_JSON(transaction_ret) return 1; @@ -56,18 +56,18 @@ int cwmp_transaction_start(char *app) int cwmp_transaction_commit() { - CWMP_LOG (INFO,"Transaction Commit ..."); + CWMP_LOG(INFO, "Transaction Commit ..."); json_object *transaction_ret = NULL, *status_obj = NULL; - int e = cwmp_ubus_call("usp.raw", "transaction_commit", CWMP_UBUS_ARGS{{"transaction_id", {.int_val=transaction_id}, UBUS_Integer}}, 1, &transaction_ret); - if (e!=0) { - CWMP_LOG (INFO,"Transaction commit failed: Ubus err code: %d", e) + int e = cwmp_ubus_call("usp.raw", "transaction_commit", CWMP_UBUS_ARGS{ { "transaction_id", {.int_val = transaction_id }, UBUS_Integer } }, 1, &transaction_ret); + if (e != 0) { + CWMP_LOG(INFO, "Transaction commit failed: Ubus err code: %d", e) return 0; } json_object_object_get_ex(transaction_ret, "status", &status_obj); - if (strcmp((char*)json_object_get_string(status_obj), "true") != 0) { + if (strcmp((char *)json_object_get_string(status_obj), "true") != 0) { json_object *error = NULL; json_object_object_get_ex(transaction_ret, "error", &error); - CWMP_LOG (INFO,"Transaction commit failed: %s\n",(char*)json_object_get_string(error)); + CWMP_LOG(INFO, "Transaction commit failed: %s\n", (char *)json_object_get_string(error)); transaction_id = 0; FREE_JSON(status_obj) FREE_JSON(error) @@ -82,18 +82,18 @@ int cwmp_transaction_commit() int cwmp_transaction_abort() { - CWMP_LOG (INFO,"Transaction Abort ..."); + CWMP_LOG(INFO, "Transaction Abort ..."); json_object *transaction_ret = NULL, *status_obj = NULL; - int e = cwmp_ubus_call("usp.raw", "transaction_abort", CWMP_UBUS_ARGS{{"transaction_id", {.int_val=transaction_id}, UBUS_Integer}}, 1, &transaction_ret); - if (e!=0) { - CWMP_LOG (INFO,"Transaction abort failed: Ubus err code: %d", e); + int e = cwmp_ubus_call("usp.raw", "transaction_abort", CWMP_UBUS_ARGS{ { "transaction_id", {.int_val = transaction_id }, UBUS_Integer } }, 1, &transaction_ret); + if (e != 0) { + CWMP_LOG(INFO, "Transaction abort failed: Ubus err code: %d", e); return 0; } json_object_object_get_ex(transaction_ret, "status", &status_obj); - if (strcmp((char*)json_object_get_string(status_obj), "true") != 0) { + if (strcmp((char *)json_object_get_string(status_obj), "true") != 0) { json_object *error = NULL; json_object_object_get_ex(transaction_ret, "error", &error); - CWMP_LOG (INFO,"Transaction abort failed: %s\n",(char*)json_object_get_string(error)); + CWMP_LOG(INFO, "Transaction abort failed: %s\n", (char *)json_object_get_string(error)); FREE_JSON(status_obj) FREE_JSON(error) FREE_JSON(transaction_ret) @@ -107,14 +107,14 @@ int cwmp_transaction_abort() int cwmp_transaction_status() { json_object *status_obj = NULL, *transaction_ret = NULL; - int e = cwmp_ubus_call("usp.raw", "transaction_status", CWMP_UBUS_ARGS{{"transaction_id", {.int_val=transaction_id}, UBUS_Integer}}, 1, &transaction_ret); - if (e!=0) { - CWMP_LOG (INFO,"Transaction status failed: Ubus err code: %d", e); + int e = cwmp_ubus_call("usp.raw", "transaction_status", CWMP_UBUS_ARGS{ { "transaction_id", {.int_val = transaction_id }, UBUS_Integer } }, 1, &transaction_ret); + if (e != 0) { + CWMP_LOG(INFO, "Transaction status failed: Ubus err code: %d", e); return 0; } json_object_object_get_ex(transaction_ret, "status", &status_obj); - if (!status_obj || strcmp((char*)json_object_get_string(status_obj), "on-going") != 0) { - CWMP_LOG (INFO,"Transaction with id: %d is not available anymore\n",transaction_id); + if (!status_obj || strcmp((char *)json_object_get_string(status_obj), "on-going") != 0) { + CWMP_LOG(INFO, "Transaction with id: %d is not available anymore\n", transaction_id); FREE_JSON(status_obj) FREE_JSON(transaction_ret) return 0; @@ -126,11 +126,11 @@ int cwmp_transaction_status() /* * RPC Methods Functions */ -char* cwmp_get_parameter_values(char *parameter_name, json_object **parameters) +char *cwmp_get_parameter_values(char *parameter_name, json_object **parameters) { json_object *params_obj = NULL; char *fault = NULL; - int e = cwmp_ubus_call("usp.raw", "get", CWMP_UBUS_ARGS{{"path", {.str_val=!parameter_name||parameter_name[0]=='\0'?DM_ROOT_OBJ:parameter_name}, UBUS_String}}, 1, ¶ms_obj); + int e = cwmp_ubus_call("usp.raw", "get", CWMP_UBUS_ARGS{ { "path", {.str_val = !parameter_name || parameter_name[0] == '\0' ? DM_ROOT_OBJ : parameter_name }, UBUS_String } }, 1, ¶ms_obj); if (e < 0 || params_obj == NULL) { *parameters = NULL; return "9002"; @@ -139,7 +139,7 @@ char* cwmp_get_parameter_values(char *parameter_name, json_object **parameters) json_object_object_get_ex(params_obj, "fault", &fault_code); if (fault_code != NULL) { *parameters = NULL; - fault = strdup((char*)json_object_get_string(fault_code)); + fault = strdup((char *)json_object_get_string(fault_code)); FREE_JSON(fault_code) FREE_JSON(params_obj) return fault; @@ -148,11 +148,12 @@ char* cwmp_get_parameter_values(char *parameter_name, json_object **parameters) return NULL; } -char* cwmp_set_parameter_value(char* parameter_name, char* value, char* parameter_key, int* flag) +char *cwmp_set_parameter_value(char *parameter_name, char *value, char *parameter_key, int *flag) { json_object *set_res; char *fault = NULL; - int e = cwmp_ubus_call("usp.raw", "set", CWMP_UBUS_ARGS{{"path", {.str_val=parameter_name}, UBUS_String},{"value", {.str_val=value}, UBUS_String}, {"key", {.str_val=parameter_key}, UBUS_String},{"transaction_id", {.int_val=transaction_id}, UBUS_Integer}}, 3, &set_res); + int e = cwmp_ubus_call("usp.raw", "set", CWMP_UBUS_ARGS{ { "path", {.str_val = parameter_name }, UBUS_String }, { "value", {.str_val = value }, UBUS_String }, { "key", {.str_val = parameter_key }, UBUS_String }, { "transaction_id", {.int_val = transaction_id }, UBUS_Integer } }, 3, + &set_res); if (e < 0 || set_res == NULL) return "9002"; @@ -160,7 +161,7 @@ char* cwmp_set_parameter_value(char* parameter_name, char* value, char* paramete json_object *fault_code = NULL; json_object_object_get_ex(set_res, "fault", &fault_code); if (fault_code != NULL) { - fault = strdup((char*)json_object_get_string(fault_code)); + fault = strdup((char *)json_object_get_string(fault_code)); FREE_JSON(fault_code) FREE_JSON(set_res) return fault; @@ -169,11 +170,11 @@ char* cwmp_set_parameter_value(char* parameter_name, char* value, char* paramete json_object_object_get_ex(set_res, "status", &status); char *status_str = NULL; if (status) { - status_str = (char*)json_object_get_string(status); - if (status_str && strcmp(status_str,"true") == 0) { + status_str = (char *)json_object_get_string(status); + if (status_str && strcmp(status_str, "true") == 0) { json_object *flag_obj = NULL; json_object_object_get_ex(set_res, "flag", &flag_obj); - *flag = flag_obj?atoi((char*)json_object_get_string(flag_obj)):0; + *flag = flag_obj ? atoi((char *)json_object_get_string(flag_obj)) : 0; FREE_JSON(flag_obj) FREE_JSON(status) FREE_JSON(set_res) @@ -188,19 +189,19 @@ char* cwmp_set_parameter_value(char* parameter_name, char* value, char* paramete json_object *param_obj = json_object_array_get_idx(parameters, 0); json_object_object_get_ex(param_obj, "status", &status); - status_str = (char*)json_object_get_string(status); - if (status_str && strcmp(status_str,"false") == 0) { + status_str = (char *)json_object_get_string(status); + if (status_str && strcmp(status_str, "false") == 0) { json_object *fault = NULL; json_object_object_get_ex(param_obj, "fault", &fault); - return (char*)json_object_get_string(fault); + return (char *)json_object_get_string(fault); } return NULL; } -char* cwmp_set_multiple_parameters_values(struct list_head parameters_values_list, char* parameter_key, int* flag, json_object **faults_array) +char *cwmp_set_multiple_parameters_values(struct list_head parameters_values_list, char *parameter_key, int *flag, json_object **faults_array) { json_object *set_res; - int e = cwmp_ubus_call("usp.raw", "setm_values", CWMP_UBUS_ARGS{{"pv_tuple", {.param_value_list=¶meters_values_list}, UBUS_List_Param}, {"key", {.str_val=parameter_key}, UBUS_String},{"transaction_id", {.int_val=transaction_id}, UBUS_Integer}}, 3, &set_res); + int e = cwmp_ubus_call("usp.raw", "setm_values", CWMP_UBUS_ARGS{ { "pv_tuple", {.param_value_list = ¶meters_values_list }, UBUS_List_Param }, { "key", {.str_val = parameter_key }, UBUS_String }, { "transaction_id", {.int_val = transaction_id }, UBUS_Integer } }, 3, &set_res); if (e < 0 || set_res == NULL) return "9002"; @@ -208,16 +209,16 @@ char* cwmp_set_multiple_parameters_values(struct list_head parameters_values_lis json_object_object_get_ex(set_res, "status", &status); char *status_str = NULL; if (status) { - status_str = (char*)json_object_get_string(status); - if (status_str && strcmp(status_str,"true") == 0) { + status_str = (char *)json_object_get_string(status); + if (status_str && strcmp(status_str, "true") == 0) { json_object *flag_obj = NULL; json_object_object_get_ex(set_res, "flag", &flag_obj); - *flag = flag_obj?atoi((char*)json_object_get_string(flag_obj)):0; + *flag = flag_obj ? atoi((char *)json_object_get_string(flag_obj)) : 0; free(status_str); status_str = NULL; return NULL; } - if(status_str) { + if (status_str) { free(status_str); status_str = NULL; } @@ -226,18 +227,18 @@ char* cwmp_set_multiple_parameters_values(struct list_head parameters_values_lis return "Fault"; } -char* cwmp_add_object(char* object_name, char* key, char **instance) +char *cwmp_add_object(char *object_name, char *key, char **instance) { json_object *add_res; char *err = NULL; - int e = cwmp_ubus_call("usp.raw", "add_object", CWMP_UBUS_ARGS{{"path", {.str_val=object_name}, UBUS_String},{"key", {.str_val=key}, UBUS_String},{"transaction_id", {.int_val=transaction_id}, UBUS_Integer}}, 3, &add_res); + int e = cwmp_ubus_call("usp.raw", "add_object", CWMP_UBUS_ARGS{ { "path", {.str_val = object_name }, UBUS_String }, { "key", {.str_val = key }, UBUS_String }, { "transaction_id", {.int_val = transaction_id }, UBUS_Integer } }, 3, &add_res); if (e < 0 || add_res == NULL) return "9002"; json_object *fault_code = NULL; json_object_object_get_ex(add_res, "fault", &fault_code); if (fault_code != NULL) { - err = strdup((char*)json_object_get_string(fault_code)); + err = strdup((char *)json_object_get_string(fault_code)); FREE_JSON(fault_code) FREE_JSON(add_res) return err; @@ -253,7 +254,7 @@ char* cwmp_add_object(char* object_name, char* key, char **instance) json_object *fault = NULL; json_object_object_get_ex(param_obj, "fault", &fault); if (fault) { - err = strdup((char*)json_object_get_string(fault)); + err = strdup((char *)json_object_get_string(fault)); FREE_JSON(parameters) FREE_JSON(fault) FREE_JSON(add_res) @@ -267,18 +268,18 @@ char* cwmp_add_object(char* object_name, char* key, char **instance) return NULL; } -char* cwmp_delete_object(char* object_name, char* key) +char *cwmp_delete_object(char *object_name, char *key) { json_object *del_res; char *err = NULL; - int e = cwmp_ubus_call("usp.raw", "del_object", CWMP_UBUS_ARGS{{"path", {.str_val=object_name}, UBUS_String},{"key", {.str_val=key}, UBUS_String},{"transaction_id", {.int_val=transaction_id}, UBUS_Integer}}, 3, &del_res); + int e = cwmp_ubus_call("usp.raw", "del_object", CWMP_UBUS_ARGS{ { "path", {.str_val = object_name }, UBUS_String }, { "key", {.str_val = key }, UBUS_String }, { "transaction_id", {.int_val = transaction_id }, UBUS_Integer } }, 3, &del_res); if (e < 0 || del_res == NULL) return "9002"; json_object *fault_code = NULL; json_object_object_get_ex(del_res, "fault", &fault_code); if (fault_code != NULL) { - err = strdup((char*)json_object_get_string(fault_code)); + err = strdup((char *)json_object_get_string(fault_code)); FREE_JSON(fault_code) FREE_JSON(del_res) return err; @@ -288,11 +289,11 @@ char* cwmp_delete_object(char* object_name, char* key) json_object *param_obj = json_object_array_get_idx(parameters, 0); json_object *status = NULL; json_object_object_get_ex(param_obj, "status", &status); - char *status_str = (char*)json_object_get_string(status); - if (status_str && strcmp(status_str,"false") == 0) { + char *status_str = (char *)json_object_get_string(status); + if (status_str && strcmp(status_str, "false") == 0) { json_object *fault = NULL; json_object_object_get_ex(param_obj, "fault", &fault); - err = strdup((char*)json_object_get_string(fault)); + err = strdup((char *)json_object_get_string(fault)); FREE_JSON(fault) FREE_JSON(status) FREE_JSON(del_res) @@ -303,19 +304,19 @@ char* cwmp_delete_object(char* object_name, char* key) return NULL; } -char* cwmp_get_parameter_names(char* object_name, bool next_level, json_object **parameters) +char *cwmp_get_parameter_names(char *object_name, bool next_level, json_object **parameters) { json_object *get_name_res; char *err = NULL; - int e = cwmp_ubus_call("usp.raw", "object_names", CWMP_UBUS_ARGS{{"path", {.str_val=object_name}, UBUS_String},{"next-level", {.bool_val=next_level}, UBUS_Bool}}, 2, &get_name_res); + int e = cwmp_ubus_call("usp.raw", "object_names", CWMP_UBUS_ARGS{ { "path", {.str_val = object_name }, UBUS_String }, { "next-level", {.bool_val = next_level }, UBUS_Bool } }, 2, &get_name_res); if (e < 0 || get_name_res == NULL) return "9002"; json_object *fault_code = NULL; json_object_object_get_ex(get_name_res, "fault", &fault_code); if (fault_code != NULL) { *parameters = NULL; - err = strdup((char*)json_object_get_string(fault_code)); + err = strdup((char *)json_object_get_string(fault_code)); FREE_JSON(fault_code) FREE_JSON(get_name_res) return err; @@ -324,29 +325,30 @@ char* cwmp_get_parameter_names(char* object_name, bool next_level, json_object * return NULL; } -char* cwmp_get_parameter_attributes(char* parameter_name, json_object **parameters) +char *cwmp_get_parameter_attributes(char *parameter_name, json_object **parameters) { json_object *get_attributes_res = NULL; char *err = NULL; - int e = cwmp_ubus_call("usp.raw", "getm_attributes", CWMP_UBUS_ARGS{{"paths", {.array_value={{.str_value=!parameter_name||parameter_name[0]=='\0'?DM_ROOT_OBJ:parameter_name}}}, UBUS_Array_Str}}, 1, &get_attributes_res); - if ( e < 0 || get_attributes_res == NULL) + int e = cwmp_ubus_call("usp.raw", "getm_attributes", CWMP_UBUS_ARGS{ { "paths", {.array_value = { {.str_value = !parameter_name || parameter_name[0] == '\0' ? DM_ROOT_OBJ : parameter_name } } }, UBUS_Array_Str } }, 1, &get_attributes_res); + if (e < 0 || get_attributes_res == NULL) return "9002"; json_object *fault_code = NULL; json_object_object_get_ex(get_attributes_res, "fault", &fault_code); if (fault_code != NULL) { *parameters = NULL; - err = strdup((char*)json_object_get_string(fault_code)); + err = strdup((char *)json_object_get_string(fault_code)); FREE_JSON(fault_code) FREE_JSON(get_attributes_res) return err; } json_object_object_get_ex(get_attributes_res, "parameters", parameters); json_object *fault = NULL, *param_obj = NULL; - foreach_jsonobj_in_array(param_obj, *parameters) { + foreach_jsonobj_in_array(param_obj, *parameters) + { json_object_object_get_ex(param_obj, "fault", &fault); if (fault) { - err = strdup((char*)json_object_get_string(fault)); + err = strdup((char *)json_object_get_string(fault)); FREE_JSON(fault) FREE_JSON(*parameters) break; @@ -356,11 +358,13 @@ char* cwmp_get_parameter_attributes(char* parameter_name, json_object **paramete return err; } -char* cwmp_set_parameter_attributes(char* parameter_name, char* notification) +char *cwmp_set_parameter_attributes(char *parameter_name, char *notification) { json_object *set_attribute_res; char *err = NULL; - int e = cwmp_ubus_call("usp.raw", "setm_attributes", CWMP_UBUS_ARGS{{"paths", {.array_value={{.param_value={"path",parameter_name}},{.param_value={"notify-type",notification}},{.param_value={"notify","1"}}}}, UBUS_Array_Obj},{"transaction_id", {.int_val=transaction_id}, UBUS_Integer}}, 2, &set_attribute_res); + int e = cwmp_ubus_call("usp.raw", "setm_attributes", + CWMP_UBUS_ARGS{ { "paths", {.array_value = { {.param_value = { "path", parameter_name } }, {.param_value = { "notify-type", notification } }, {.param_value = { "notify", "1" } } } }, UBUS_Array_Obj }, { "transaction_id", {.int_val = transaction_id }, UBUS_Integer } }, + 2, &set_attribute_res); if (e < 0 || set_attribute_res == NULL) return "9002"; json_object *parameters = NULL; @@ -369,7 +373,7 @@ char* cwmp_set_parameter_attributes(char* parameter_name, char* notification) json_object *fault_code = NULL; json_object_object_get_ex(param_obj, "fault", &fault_code); if (fault_code != NULL) { - err = strdup((char*)json_object_get_string(fault_code)); + err = strdup((char *)json_object_get_string(fault_code)); FREE_JSON(fault_code) } FREE_JSON(param_obj) @@ -384,28 +388,27 @@ char* cwmp_set_parameter_attributes(char* parameter_name, char* notification) int cwmp_update_enabled_list_notify(int instance_mode, int notify_type) { int e; - CWMP_LOG (INFO,"Get List Notify for %s paramters values", notify_type == OLD_LIST_NOTIFY ? "old": "actual"); + CWMP_LOG(INFO, "Get List Notify for %s paramters values", notify_type == OLD_LIST_NOTIFY ? "old" : "actual"); if (notify_type == OLD_LIST_NOTIFY) { - CWMP_LOG (INFO,"%s line %d", __FILE__, __LINE__); + CWMP_LOG(INFO, "%s line %d", __FILE__, __LINE__); FREE_JSON(old_list_notify) FREE_JSON(old_global_json_obj) - CWMP_LOG (INFO,"%s:%s line %d", __FILE__, __FUNCTION__, __LINE__); - e = cwmp_ubus_call("usp.raw", "list_notify", CWMP_UBUS_ARGS{{"instance_mode", {.int_val=instance_mode}, UBUS_Integer}}, 1, &old_global_json_obj); + CWMP_LOG(INFO, "%s:%s line %d", __FILE__, __FUNCTION__, __LINE__); + e = cwmp_ubus_call("usp.raw", "list_notify", CWMP_UBUS_ARGS{ { "instance_mode", {.int_val = instance_mode }, UBUS_Integer } }, 1, &old_global_json_obj); if (e) return e; json_object_object_get_ex(old_global_json_obj, "parameters", &old_list_notify); - CWMP_LOG (INFO,"%s line %d", __FILE__, __LINE__); - } - else { - CWMP_LOG (INFO,"%s line %d", __FILE__, __LINE__); + CWMP_LOG(INFO, "%s line %d", __FILE__, __LINE__); + } else { + CWMP_LOG(INFO, "%s line %d", __FILE__, __LINE__); FREE_JSON(actual_list_notify) FREE_JSON(actual_global_json_obj) - CWMP_LOG (INFO,"%s line %d", __FILE__, __FUNCTION__, __LINE__); - e = cwmp_ubus_call("usp.raw", "list_notify", CWMP_UBUS_ARGS{{"instance_mode", {.int_val=instance_mode}, UBUS_Integer}}, 1, &actual_global_json_obj); + CWMP_LOG(INFO, "%s line %d", __FILE__, __FUNCTION__, __LINE__); + e = cwmp_ubus_call("usp.raw", "list_notify", CWMP_UBUS_ARGS{ { "instance_mode", {.int_val = instance_mode }, UBUS_Integer } }, 1, &actual_global_json_obj); if (e) return e; json_object_object_get_ex(actual_global_json_obj, "parameters", &actual_list_notify); - CWMP_LOG (INFO,"%s line %d", __FILE__, __FUNCTION__, __LINE__); + CWMP_LOG(INFO, "%s line %d", __FILE__, __FUNCTION__, __LINE__); } return 0; } diff --git a/diagnostic.c b/diagnostic.c index 46c5b0d..46b8cb0 100644 --- a/diagnostic.c +++ b/diagnostic.c @@ -19,8 +19,7 @@ #include "ubus.h" #include "cwmp_uci.h" -struct diagnostic_input -{ +struct diagnostic_input { char *input_name; char *parameter_name; char *value; @@ -45,89 +44,88 @@ struct diagnostic_input #define UDPEcho_DIAG_ACT_NAME "UDPEchoDiagnostics" #define NSLookup_DIAG_ACT_NAME "NSLookupDiagnostics" -struct diagnostic_input download_diagnostics_array[DOWNLOAD_NUMBER_INPUTS]={ - {"Interface","Device.IP.Diagnostics.DownloadDiagnostics.Interface",NULL}, - {"DownloadURL","Device.IP.Diagnostics.DownloadDiagnostics.DownloadURL",NULL}, - {"DSCP","Device.IP.Diagnostics.DownloadDiagnostics.DSCP",NULL}, - {"EthernetPriority","Device.IP.Diagnostics.DownloadDiagnostics.EthernetPriority",NULL}, - {"ProtocolVersion","Device.IP.Diagnostics.DownloadDiagnostics.ProtocolVersion",NULL}, - {"NumberOfConnections","Device.IP.Diagnostics.DownloadDiagnostics.NumberOfConnections",NULL}, - {"EnablePerConnectionResults","Device.IP.Diagnostics.DownloadDiagnostics.EnablePerConnection",NULL}, - //{"TimeBasedTestDuration","Device.IP.Diagnostics.DownloadDiagnostics.TimeBasedTestDuration",NULL}, - //{"TimeBasedTestMeasurementInterval","Device.IP.Diagnostics.DownloadDiagnostics.TimeBasedTestMeasurementInterval",NULL}, - //{"TimeBasedTestMeasurementOffset","Device.IP.Diagnostics.DownloadDiagnostics.TimeBasedTestMeasurementOffset",NULL} +struct diagnostic_input download_diagnostics_array[DOWNLOAD_NUMBER_INPUTS] = { + { "Interface", "Device.IP.Diagnostics.DownloadDiagnostics.Interface", NULL }, + { "DownloadURL", "Device.IP.Diagnostics.DownloadDiagnostics.DownloadURL", NULL }, + { "DSCP", "Device.IP.Diagnostics.DownloadDiagnostics.DSCP", NULL }, + { "EthernetPriority", "Device.IP.Diagnostics.DownloadDiagnostics.EthernetPriority", NULL }, + { "ProtocolVersion", "Device.IP.Diagnostics.DownloadDiagnostics.ProtocolVersion", NULL }, + { "NumberOfConnections", "Device.IP.Diagnostics.DownloadDiagnostics.NumberOfConnections", NULL }, + { "EnablePerConnectionResults", "Device.IP.Diagnostics.DownloadDiagnostics.EnablePerConnection", NULL }, + //{"TimeBasedTestDuration","Device.IP.Diagnostics.DownloadDiagnostics.TimeBasedTestDuration",NULL}, + //{"TimeBasedTestMeasurementInterval","Device.IP.Diagnostics.DownloadDiagnostics.TimeBasedTestMeasurementInterval",NULL}, + //{"TimeBasedTestMeasurementOffset","Device.IP.Diagnostics.DownloadDiagnostics.TimeBasedTestMeasurementOffset",NULL} }; -struct diagnostic_input upload_diagnostics_array[UPLOAD_NUMBER_INPUTS]={ - {"Interface","Device.IP.Diagnostics.UploadDiagnostics.Interface",NULL}, - {"UploadURL","Device.IP.Diagnostics.UploadDiagnostics.UploadURL",NULL}, - {"TestFileLength","Device.IP.Diagnostics.UploadDiagnostics.TestFileLength",NULL}, - {"DSCP","Device.IP.Diagnostics.UploadDiagnostics.DSCP",NULL}, - {"EthernetPriority","Device.IP.Diagnostics.UploadDiagnostics.EthernetPriority",NULL}, - {"ProtocolVersion","Device.IP.Diagnostics.UploadDiagnostics.ProtocolVersion",NULL}, - {"NumberOfConnections","Device.IP.Diagnostics.UploadDiagnostics.NumberOfConnections",NULL}, - {"EnablePerConnectionResults","Device.IP.Diagnostics.UploadDiagnostics.EnablePerConnection",NULL}, - //{"TimeBasedTestDuration","Device.IP.Diagnostics.UploadDiagnostics.TimeBasedTestDuration",NULL}, - //{"TimeBasedTestMeasurementInterval","Device.IP.Diagnostics.UploadDiagnostics.TimeBasedTestMeasurementInterval",NULL}, - //{"TimeBasedTestMeasurementOffset","Device.IP.Diagnostics.UploadDiagnostics.TimeBasedTestMeasurementOffset",NULL} +struct diagnostic_input upload_diagnostics_array[UPLOAD_NUMBER_INPUTS] = { + { "Interface", "Device.IP.Diagnostics.UploadDiagnostics.Interface", NULL }, + { "UploadURL", "Device.IP.Diagnostics.UploadDiagnostics.UploadURL", NULL }, + { "TestFileLength", "Device.IP.Diagnostics.UploadDiagnostics.TestFileLength", NULL }, + { "DSCP", "Device.IP.Diagnostics.UploadDiagnostics.DSCP", NULL }, + { "EthernetPriority", "Device.IP.Diagnostics.UploadDiagnostics.EthernetPriority", NULL }, + { "ProtocolVersion", "Device.IP.Diagnostics.UploadDiagnostics.ProtocolVersion", NULL }, + { "NumberOfConnections", "Device.IP.Diagnostics.UploadDiagnostics.NumberOfConnections", NULL }, + { "EnablePerConnectionResults", "Device.IP.Diagnostics.UploadDiagnostics.EnablePerConnection", NULL }, + //{"TimeBasedTestDuration","Device.IP.Diagnostics.UploadDiagnostics.TimeBasedTestDuration",NULL}, + //{"TimeBasedTestMeasurementInterval","Device.IP.Diagnostics.UploadDiagnostics.TimeBasedTestMeasurementInterval",NULL}, + //{"TimeBasedTestMeasurementOffset","Device.IP.Diagnostics.UploadDiagnostics.TimeBasedTestMeasurementOffset",NULL} }; -struct diagnostic_input ipping_diagnostics_array[IPPING_NUMBER_INPUTS]={ - {"Host","Device.IP.Diagnostics.IPPing.Host",NULL}, - {"NumberOfRepetitions","Device.IP.Diagnostics.IPPing.NumberOfRepetitions",NULL}, - {"Timeout","Device.IP.Diagnostics.IPPing.Timeout",NULL}, - {"Interface","Device.IP.Diagnostics.IPPing.Interface",NULL}, - {"ProtocolVersion","Device.IP.Diagnostics.IPPing.ProtocolVersion",NULL}, - {"DSCP","Device.IP.Diagnostics.IPPing.DSCP",NULL}, - {"DataBlockSize","Device.IP.Diagnostics.IPPing.DataBlockSize",NULL} +struct diagnostic_input ipping_diagnostics_array[IPPING_NUMBER_INPUTS] = { + { "Host", "Device.IP.Diagnostics.IPPing.Host", NULL }, + { "NumberOfRepetitions", "Device.IP.Diagnostics.IPPing.NumberOfRepetitions", NULL }, + { "Timeout", "Device.IP.Diagnostics.IPPing.Timeout", NULL }, + { "Interface", "Device.IP.Diagnostics.IPPing.Interface", NULL }, + { "ProtocolVersion", "Device.IP.Diagnostics.IPPing.ProtocolVersion", NULL }, + { "DSCP", "Device.IP.Diagnostics.IPPing.DSCP", NULL }, + { "DataBlockSize", "Device.IP.Diagnostics.IPPing.DataBlockSize", NULL } }; -struct diagnostic_input seserverselection_diagnostics_array[SESERVERSELECT_NUMBER_INPUTS]={ - {"Interface","Device.IP.Diagnostics.ServerSelectionDiagnostics.Interface",NULL}, - {"Protocol","Device.IP.Diagnostics.ServerSelectionDiagnostics.Protocol",NULL}, - {"HostList","Device.IP.Diagnostics.ServerSelectionDiagnostics.HostList",NULL}, - {"ProtocolVersion","Device.IP.Diagnostics.ServerSelectionDiagnostics.ProtocolVersion",NULL}, - {"NumberOfRepetitions","Device.IP.Diagnostics.ServerSelectionDiagnostics.NumberOfRepetitions",NULL}, - {"Timeout","Device.IP.Diagnostics.ServerSelectionDiagnostics.Timeout",NULL} +struct diagnostic_input seserverselection_diagnostics_array[SESERVERSELECT_NUMBER_INPUTS] = { + { "Interface", "Device.IP.Diagnostics.ServerSelectionDiagnostics.Interface", NULL }, + { "Protocol", "Device.IP.Diagnostics.ServerSelectionDiagnostics.Protocol", NULL }, + { "HostList", "Device.IP.Diagnostics.ServerSelectionDiagnostics.HostList", NULL }, + { "ProtocolVersion", "Device.IP.Diagnostics.ServerSelectionDiagnostics.ProtocolVersion", NULL }, + { "NumberOfRepetitions", "Device.IP.Diagnostics.ServerSelectionDiagnostics.NumberOfRepetitions", NULL }, + { "Timeout", "Device.IP.Diagnostics.ServerSelectionDiagnostics.Timeout", NULL } }; -struct diagnostic_input traceroute_diagnostics_array[TRACEROUTE_NUMBER_INPUTS]={ - {"Interface","Device.IP.Diagnostics.TraceRoute.Interface",NULL}, - {"Host","Device.IP.Diagnostics.TraceRoute.Host",NULL}, - {"NumberOfTries","Device.IP.Diagnostics.TraceRoute.NumberOfTries",NULL}, - {"ProtocolVersion","Device.IP.Diagnostics.TraceRoute.ProtocolVersion",NULL}, - {"Timeout","Device.IP.Diagnostics.TraceRoute.Timeout",NULL}, - {"DataBlockSize","Device.IP.Diagnostics.TraceRoute.DataBlockSize",NULL}, - {"DSCP","Device.IP.Diagnostics.TraceRoute.DSCP",NULL}, - {"MaxHopCount","Device.IP.Diagnostics.TraceRoute.MaxHopCount",NULL} +struct diagnostic_input traceroute_diagnostics_array[TRACEROUTE_NUMBER_INPUTS] = { + { "Interface", "Device.IP.Diagnostics.TraceRoute.Interface", NULL }, + { "Host", "Device.IP.Diagnostics.TraceRoute.Host", NULL }, + { "NumberOfTries", "Device.IP.Diagnostics.TraceRoute.NumberOfTries", NULL }, + { "ProtocolVersion", "Device.IP.Diagnostics.TraceRoute.ProtocolVersion", NULL }, + { "Timeout", "Device.IP.Diagnostics.TraceRoute.Timeout", NULL }, + { "DataBlockSize", "Device.IP.Diagnostics.TraceRoute.DataBlockSize", NULL }, + { "DSCP", "Device.IP.Diagnostics.TraceRoute.DSCP", NULL }, + { "MaxHopCount", "Device.IP.Diagnostics.TraceRoute.MaxHopCount", NULL } }; -struct diagnostic_input udpecho_diagnostics_array[UDPECHO_NUMBER_INPUTS]={ - {"Interface","Device.IP.Diagnostics.UDPEchoDiagnostics.Interface",NULL}, - {"Host","Device.IP.Diagnostics.UDPEchoDiagnostics.Host",NULL}, - {"Port","Device.IP.Diagnostics.UDPEchoDiagnostics.Port",NULL}, - {"NumberOfRepetitions","Device.IP.Diagnostics.UDPEchoDiagnostics.NumberOfRepetitions",NULL}, - {"Timeout","Device.IP.Diagnostics.UDPEchoDiagnostics.Timeout",NULL}, - {"DataBlockSize","Device.IP.Diagnostics.UDPEchoDiagnostics.DataBlockSize",NULL}, - {"DSCP","Device.IP.Diagnostics.UDPEchoDiagnostics.DSCP",NULL}, - {"InterTransmissionTime","Device.IP.Diagnostics.UDPEchoDiagnostics.InterTransmissionTime",NULL}, - {"ProtocolVersion","Device.IP.Diagnostics.UDPEchoDiagnostics.ProtocolVersion",NULL}, - //{"EnableIndividualPacketResults","Device.IP.Diagnostics.UDPEchoDiagnostics.EnableIndividualPacketResults",NULL} +struct diagnostic_input udpecho_diagnostics_array[UDPECHO_NUMBER_INPUTS] = { + { "Interface", "Device.IP.Diagnostics.UDPEchoDiagnostics.Interface", NULL }, + { "Host", "Device.IP.Diagnostics.UDPEchoDiagnostics.Host", NULL }, + { "Port", "Device.IP.Diagnostics.UDPEchoDiagnostics.Port", NULL }, + { "NumberOfRepetitions", "Device.IP.Diagnostics.UDPEchoDiagnostics.NumberOfRepetitions", NULL }, + { "Timeout", "Device.IP.Diagnostics.UDPEchoDiagnostics.Timeout", NULL }, + { "DataBlockSize", "Device.IP.Diagnostics.UDPEchoDiagnostics.DataBlockSize", NULL }, + { "DSCP", "Device.IP.Diagnostics.UDPEchoDiagnostics.DSCP", NULL }, + { "InterTransmissionTime", "Device.IP.Diagnostics.UDPEchoDiagnostics.InterTransmissionTime", NULL }, + { "ProtocolVersion", "Device.IP.Diagnostics.UDPEchoDiagnostics.ProtocolVersion", NULL }, + //{"EnableIndividualPacketResults","Device.IP.Diagnostics.UDPEchoDiagnostics.EnableIndividualPacketResults",NULL} }; -struct diagnostic_input nslookup_diagnostics_array[NSLKUP_NUMBER_INPUTS]={ - {"Interface","Device.DNS.Diagnostics.NSLookupDiagnostics.Interface",NULL}, - {"HostName","Device.DNS.Diagnostics.NSLookupDiagnostics.HostName",NULL}, - {"DNSServer","Device.DNS.Diagnostics.NSLookupDiagnostics.DNSServer",NULL}, - {"NumberOfRepetitions","Device.DNS.Diagnostics.NSLookupDiagnostics.NumberOfRepetitions",NULL}, - {"Timeout","Device.DNS.Diagnostics.NSLookupDiagnostics.Timeout",NULL} +struct diagnostic_input nslookup_diagnostics_array[NSLKUP_NUMBER_INPUTS] = { + { "Interface", "Device.DNS.Diagnostics.NSLookupDiagnostics.Interface", NULL }, + { "HostName", "Device.DNS.Diagnostics.NSLookupDiagnostics.HostName", NULL }, + { "DNSServer", "Device.DNS.Diagnostics.NSLookupDiagnostics.DNSServer", NULL }, + { "NumberOfRepetitions", "Device.DNS.Diagnostics.NSLookupDiagnostics.NumberOfRepetitions", NULL }, + { "Timeout", "Device.DNS.Diagnostics.NSLookupDiagnostics.Timeout", NULL } }; -static bool set_specific_diagnostic_object_parameter_structure_value(struct diagnostic_input (*diagnostics_array)[], int number_inputs, char* parameter, char *value) +static bool set_specific_diagnostic_object_parameter_structure_value(struct diagnostic_input (*diagnostics_array)[], int number_inputs, char *parameter, char *value) { int i; - for (i=0; i> 4) & 0x0f; hex[i * 2] = j <= 9 ? (j + '0') : (j + 'a' - 10); j = bin[i] & 0x0f; @@ -81,9 +80,7 @@ static void cvthex(const unsigned char *bin, size_t len, char *hex) * @param realm A string of characters that describes the realm of auth. * @param nonce A pointer to a character array for the nonce to put in */ -static void calculate_nonce(uint32_t nonce_time, const char *method, - const char *rnd, unsigned int rnd_size, const char *uri, - const char *realm, char *nonce) +static void calculate_nonce(uint32_t nonce_time, const char *method, const char *rnd, unsigned int rnd_size, const char *uri, const char *realm, char *nonce) { struct MD5Context md5; unsigned char timestamp[4]; @@ -125,8 +122,7 @@ static void calculate_nonce(uint32_t nonce_time, const char *method, * @param key key to look up in data * @return size of the located value, 0 if otherwise */ -static int lookup_sub_value(char *dest, size_t size, const char *data, - const char *key) +static int lookup_sub_value(char *dest, size_t size, const char *data, const char *key) { size_t keylen; size_t len; @@ -141,30 +137,24 @@ static int lookup_sub_value(char *dest, size_t size, const char *data, return 0; keylen = strlen(key); ptr = data; - while ('\0' != *ptr) - { + while ('\0' != *ptr) { if (NULL == (eq = strchr(ptr, '='))) return 0; q1 = eq + 1; while (' ' == *q1) q1++; - if ('\"' != *q1) - { + if ('\"' != *q1) { q2 = strchr(q1, ','); qn = q2; - } - else - { + } else { q1++; q2 = strchr(q1, '\"'); if (NULL == q2) return 0; /* end quote not found */ qn = q2 + 1; } - if ((0 == strncasecmp(ptr, key, keylen)) && (eq == &ptr[keylen])) - { - if (NULL == q2) - { + if ((0 == strncasecmp(ptr, key, keylen)) && (eq == &ptr[keylen])) { + if (NULL == q2) { len = strlen(q1) + 1; if (size > len) size = len; @@ -172,9 +162,7 @@ static int lookup_sub_value(char *dest, size_t size, const char *data, strncpy(dest, q1, size); dest[size] = '\0'; return size; - } - else - { + } else { diff = (q2 - q1) + 1; if (size > diff) size = diff; @@ -208,9 +196,7 @@ static int lookup_sub_value(char *dest, size_t size, const char *data, * @param cnonce A `char *' pointer to the cnonce value * @param sessionkey pointer to buffer of HASH_MD5_HEX_LEN+1 bytes */ -static void digest_calc_ha1(const char *alg, const char *username, - const char *realm, const char *password, const char *nonce, - const char *cnonce, char *sessionkey) +static void digest_calc_ha1(const char *alg, const char *username, const char *realm, const char *password, const char *nonce, const char *cnonce, char *sessionkey) { struct MD5Context md5; unsigned char ha1[MD5_DIGEST_SIZE]; @@ -222,8 +208,7 @@ static void digest_calc_ha1(const char *alg, const char *username, MD5Update(&md5, ":", 1); MD5Update(&md5, password, strlen(password)); MD5Final(ha1, &md5); - if (0 == strcasecmp(alg, "md5-sess")) - { + if (0 == strcasecmp(alg, "md5-sess")) { MD5Init(&md5); MD5Update(&md5, ha1, sizeof(ha1)); MD5Update(&md5, ":", 1); @@ -248,9 +233,7 @@ static void digest_calc_ha1(const char *alg, const char *username, * @param hentity H(entity body) if qop="auth-int" * @param response request-digest or response-digest */ -static void digest_calc_response(const char *ha1, const char *nonce, - const char *noncecount, const char *cnonce, const char *qop, - const char *method, const char *uri, char *response) +static void digest_calc_response(const char *ha1, const char *nonce, const char *noncecount, const char *cnonce, const char *qop, const char *method, const char *uri, char *response) { struct MD5Context md5; unsigned char ha2[MD5_DIGEST_SIZE]; @@ -269,8 +252,7 @@ static void digest_calc_response(const char *ha1, const char *nonce, MD5Update(&md5, ":", 1); MD5Update(&md5, nonce, strlen(nonce)); MD5Update(&md5, ":", 1); - if ('\0' != *qop) - { + if ('\0' != *qop) { MD5Update(&md5, noncecount, strlen(noncecount)); MD5Update(&md5, ":", 1); MD5Update(&md5, cnonce, strlen(cnonce)); @@ -294,27 +276,21 @@ static void digest_calc_response(const char *ha1, const char *nonce, * @return MHD_YES on success, MHD_NO otherwise */ -int http_digest_auth_fail_response(FILE *fp, const char *http_method, - const char *url, const char *realm, const char *opaque) +int http_digest_auth_fail_response(FILE *fp, const char *http_method, const char *url, const char *realm, const char *opaque) { size_t hlen; char nonce[HASH_MD5_HEX_LEN + 9]; int signal_stale = 0; /* Generating the server nonce */ - calculate_nonce((uint32_t) MHD_monotonic_time(), http_method, - NONCE_PRIV_KEY, strlen(NONCE_PRIV_KEY), url, realm, nonce); + calculate_nonce((uint32_t)MHD_monotonic_time(), http_method, NONCE_PRIV_KEY, strlen(NONCE_PRIV_KEY), url, realm, nonce); /* Building the authentication header */ - hlen = snprintf(NULL, 0, - "Digest realm=\"%s\",qop=\"auth\",nonce=\"%s\",opaque=\"%s\"%s", - realm, nonce, opaque, signal_stale ? ",stale=\"true\"" : ""); + hlen = snprintf(NULL, 0, "Digest realm=\"%s\",qop=\"auth\",nonce=\"%s\",opaque=\"%s\"%s", realm, nonce, opaque, signal_stale ? ",stale=\"true\"" : ""); { char header[hlen + 1]; - snprintf(header, sizeof(header), - "Digest realm=\"%s\",qop=\"auth\",nonce=\"%s\",opaque=\"%s\"%s", - realm, nonce, opaque, signal_stale ? ",stale=\"true\"" : ""); + snprintf(header, sizeof(header), "Digest realm=\"%s\",qop=\"auth\",nonce=\"%s\",opaque=\"%s\"%s", realm, nonce, opaque, signal_stale ? ",stale=\"true\"" : ""); DD(DEBUG, "%s: header: %s", __FUNCTION__, header); @@ -339,9 +315,7 @@ int http_digest_auth_fail_response(FILE *fp, const char *http_method, * @return MHD_YES if authenticated, MHD_NO if not, * MHD_INVALID_NONCE if nonce is invalid */ -int http_digest_auth_check(const char *http_method, const char *url, - const char *header, const char *realm, const char *username, - const char *password, unsigned int nonce_timeout) +int http_digest_auth_check(const char *http_method, const char *url, const char *header, const char *realm, const char *username, const char *password, unsigned int nonce_timeout) { size_t len; char *end; @@ -391,26 +365,23 @@ int http_digest_auth_check(const char *http_method, const char *url, return MHD_NO; /* 8 = 4 hexadecimal numbers for the timestamp */ - nonce_time = strtoul(nonce + len - 8, (char **) NULL, 16); - t = (uint32_t) MHD_monotonic_time(); + nonce_time = strtoul(nonce + len - 8, (char **)NULL, 16); + t = (uint32_t)MHD_monotonic_time(); /* * First level vetting for the nonce validity if the timestamp * attached to the nonce exceeds `nonce_timeout' then the nonce is * invalid. */ - if ((t > nonce_time + nonce_timeout) - || (nonce_time + nonce_timeout < nonce_time)) + if ((t > nonce_time + nonce_timeout) || (nonce_time + nonce_timeout < nonce_time)) return MHD_INVALID_NONCE; - if (0 != strncmp(uri, url, strlen(url))) - { + if (0 != strncmp(uri, url, strlen(url))) { DD(DEBUG, "Authentication failed: URI does not match."); return MHD_NO; } - calculate_nonce(nonce_time, http_method, NONCE_PRIV_KEY, - strlen(NONCE_PRIV_KEY), url, realm, noncehashexp); + calculate_nonce(nonce_time, http_method, NONCE_PRIV_KEY, strlen(NONCE_PRIV_KEY), url, realm, noncehashexp); /* * Second level vetting for the nonce validity @@ -425,20 +396,13 @@ int http_digest_auth_check(const char *http_method, const char *url, if (0 != strcmp(nonce, noncehashexp)) return MHD_INVALID_NONCE; - if ((0 == lookup_sub_value(cnonce, sizeof(cnonce), header, "cnonce")) - || (0 == lookup_sub_value(qop, sizeof(qop), header, "qop")) - || ((0 != strcmp(qop, "auth")) && (0 != strcmp(qop, ""))) - || (0 == lookup_sub_value(nc, sizeof(nc), header, "nc")) - || (0 - == lookup_sub_value(response, sizeof(response), header, - "response"))) - { + if ((0 == lookup_sub_value(cnonce, sizeof(cnonce), header, "cnonce")) || (0 == lookup_sub_value(qop, sizeof(qop), header, "qop")) || ((0 != strcmp(qop, "auth")) && (0 != strcmp(qop, ""))) || (0 == lookup_sub_value(nc, sizeof(nc), header, "nc")) || + (0 == lookup_sub_value(response, sizeof(response), header, "response"))) { DD(DEBUG, "Authentication failed, invalid format."); return MHD_NO; } nci = strtoul(nc, &end, 16); - if (('\0' != *end) || ((LONG_MAX == nci) && (ERANGE == errno))) - { + if (('\0' != *end) || ((LONG_MAX == nci) && (ERANGE == errno))) { DD(DEBUG, "Authentication failed, invalid format."); return MHD_NO; /* invalid nonce format */ } diff --git a/event.c b/event.c index b8f4c64..00bd076 100644 --- a/event.c +++ b/event.c @@ -25,145 +25,132 @@ #include "session.h" #include "xml.h" -const struct EVENT_CONST_STRUCT EVENT_CONST [] = { - [EVENT_IDX_0BOOTSTRAP] = {"0 BOOTSTRAP", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_1BOOT] = {"1 BOOT", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL}, - [EVENT_IDX_2PERIODIC] = {"2 PERIODIC", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_3SCHEDULED] = {"3 SCHEDULED", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_4VALUE_CHANGE] = {"4 VALUE CHANGE", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL}, - [EVENT_IDX_5KICKED] = {"5 KICKED", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_6CONNECTION_REQUEST] = {"6 CONNECTION REQUEST", EVENT_TYPE_SINGLE, 0}, - [EVENT_IDX_7TRANSFER_COMPLETE] = {"7 TRANSFER COMPLETE", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_8DIAGNOSTICS_COMPLETE] = {"8 DIAGNOSTICS COMPLETE", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL}, - [EVENT_IDX_9REQUEST_DOWNLOAD] = {"9 REQUEST DOWNLOAD", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_10AUTONOMOUS_TRANSFER_COMPLETE] = {"10 AUTONOMOUS TRANSFER COMPLETE", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_11DU_STATE_CHANGE_COMPLETE] = {"11 DU STATE CHANGE COMPLETE", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_M_Reboot] = {"M Reboot", EVENT_TYPE_MULTIPLE,EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_M_ScheduleInform] = {"M ScheduleInform", EVENT_TYPE_MULTIPLE,EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_M_Download] = {"M Download", EVENT_TYPE_MULTIPLE,EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_M_Schedule_Download] = {"M ScheduleDownload", EVENT_TYPE_MULTIPLE,EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_M_Upload] = {"M Upload", EVENT_TYPE_MULTIPLE,EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT}, - [EVENT_IDX_M_ChangeDUState] = {"M ChangeDUState", EVENT_TYPE_MULTIPLE,EVENT_RETRY_AFTER_TRANSMIT_FAIL|EVENT_RETRY_AFTER_REBOOT} -}; +const struct EVENT_CONST_STRUCT EVENT_CONST[] = {[EVENT_IDX_0BOOTSTRAP] = { "0 BOOTSTRAP", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_1BOOT] = { "1 BOOT", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL }, + [EVENT_IDX_2PERIODIC] = { "2 PERIODIC", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_3SCHEDULED] = { "3 SCHEDULED", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_4VALUE_CHANGE] = { "4 VALUE CHANGE", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL }, + [EVENT_IDX_5KICKED] = { "5 KICKED", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_6CONNECTION_REQUEST] = { "6 CONNECTION REQUEST", EVENT_TYPE_SINGLE, 0 }, + [EVENT_IDX_7TRANSFER_COMPLETE] = { "7 TRANSFER COMPLETE", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_8DIAGNOSTICS_COMPLETE] = { "8 DIAGNOSTICS COMPLETE", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL }, + [EVENT_IDX_9REQUEST_DOWNLOAD] = { "9 REQUEST DOWNLOAD", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_10AUTONOMOUS_TRANSFER_COMPLETE] = { "10 AUTONOMOUS TRANSFER COMPLETE", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_11DU_STATE_CHANGE_COMPLETE] = { "11 DU STATE CHANGE COMPLETE", EVENT_TYPE_SINGLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_M_Reboot] = { "M Reboot", EVENT_TYPE_MULTIPLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_M_ScheduleInform] = { "M ScheduleInform", EVENT_TYPE_MULTIPLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_M_Download] = { "M Download", EVENT_TYPE_MULTIPLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_M_Schedule_Download] = { "M ScheduleDownload", EVENT_TYPE_MULTIPLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_M_Upload] = { "M Upload", EVENT_TYPE_MULTIPLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, + [EVENT_IDX_M_ChangeDUState] = { "M ChangeDUState", EVENT_TYPE_MULTIPLE, EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT } }; -void cwmp_save_event_container (struct event_container *event_container) //to be moved to backupsession +void cwmp_save_event_container(struct event_container *event_container) //to be moved to backupsession { - struct list_head *ilist; - struct cwmp_dm_parameter *dm_parameter; - mxml_node_t *b; + struct list_head *ilist; + struct cwmp_dm_parameter *dm_parameter; + mxml_node_t *b; - if (EVENT_CONST[event_container->code].RETRY & EVENT_RETRY_AFTER_REBOOT) { - b = bkp_session_insert_event(event_container->code, event_container->command_key, event_container->id, "queue"); + if (EVENT_CONST[event_container->code].RETRY & EVENT_RETRY_AFTER_REBOOT) { + b = bkp_session_insert_event(event_container->code, event_container->command_key, event_container->id, "queue"); - list_for_each(ilist,&(event_container->head_dm_parameter)) { - dm_parameter = list_entry(ilist, struct cwmp_dm_parameter, list); - bkp_session_insert_parameter(b, dm_parameter->name); - } - bkp_session_save(); - } + list_for_each (ilist, &(event_container->head_dm_parameter)) { + dm_parameter = list_entry(ilist, struct cwmp_dm_parameter, list); + bkp_session_insert_parameter(b, dm_parameter->name); + } + bkp_session_save(); + } } -struct event_container *cwmp_add_event_container (struct cwmp *cwmp, int event_code, char *command_key) +struct event_container *cwmp_add_event_container(struct cwmp *cwmp, int event_code, char *command_key) { - static int id; - struct event_container *event_container; - struct session *session; - struct list_head *ilist; + static int id; + struct event_container *event_container; + struct session *session; + struct list_head *ilist; - if (cwmp->head_event_container == NULL) - { - session = cwmp_add_queue_session(cwmp); - if (session == NULL) - { - return NULL; - } - cwmp->head_event_container = &(session->head_event_container); - } - session = list_entry (cwmp->head_event_container, struct session,head_event_container); - list_for_each(ilist, cwmp->head_event_container) - { - event_container = list_entry (ilist, struct event_container, list); - if (event_container->code==event_code && - EVENT_CONST[event_code].TYPE==EVENT_TYPE_SINGLE) - { - return event_container; - } - if(event_container->code > event_code) - { - break; - } - } - event_container = calloc (1,sizeof(struct event_container)); - if (event_container==NULL) - { - return NULL; - } - INIT_LIST_HEAD (&(event_container->head_dm_parameter)); - list_add (&(event_container->list), ilist->prev); - event_container->code = event_code; - event_container->command_key = command_key?strdup(command_key):strdup(""); - if((id<0) || (id>=MAX_INT_ID) ) - { - id=0; - } - id++; - event_container->id = id; - return event_container; + if (cwmp->head_event_container == NULL) { + session = cwmp_add_queue_session(cwmp); + if (session == NULL) { + return NULL; + } + cwmp->head_event_container = &(session->head_event_container); + } + session = list_entry(cwmp->head_event_container, struct session, head_event_container); + list_for_each (ilist, cwmp->head_event_container) { + event_container = list_entry(ilist, struct event_container, list); + if (event_container->code == event_code && EVENT_CONST[event_code].TYPE == EVENT_TYPE_SINGLE) { + return event_container; + } + if (event_container->code > event_code) { + break; + } + } + event_container = calloc(1, sizeof(struct event_container)); + if (event_container == NULL) { + return NULL; + } + INIT_LIST_HEAD(&(event_container->head_dm_parameter)); + list_add(&(event_container->list), ilist->prev); + event_container->code = event_code; + event_container->command_key = command_key ? strdup(command_key) : strdup(""); + if ((id < 0) || (id >= MAX_INT_ID)) { + id = 0; + } + id++; + event_container->id = id; + return event_container; } void cwmp_root_cause_event_ipdiagnostic(void) { - struct cwmp *cwmp = &cwmp_main; - struct event_container *event_container; - - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_8DIAGNOSTICS_COMPLETE, ""); - if (event_container == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); + struct cwmp *cwmp = &cwmp_main; + struct event_container *event_container; + + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_8DIAGNOSTICS_COMPLETE, ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); return; - } - cwmp_save_event_container(event_container); - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); + } + cwmp_save_event_container(event_container); + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); pthread_cond_signal(&(cwmp->threshold_session_send)); - return; + return; } -int cwmp_root_cause_event_boot (struct cwmp *cwmp) +int cwmp_root_cause_event_boot(struct cwmp *cwmp) { - struct event_container *event_container; - if (cwmp->env.boot == CWMP_START_BOOT) - { - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - cwmp->env.boot = 0; - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_1BOOT, ""); - if (event_container == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - cwmp_save_event_container (event_container); - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - } - return CWMP_OK; + struct event_container *event_container; + if (cwmp->env.boot == CWMP_START_BOOT) { + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + cwmp->env.boot = 0; + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_1BOOT, ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + cwmp_save_event_container(event_container); + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + } + return CWMP_OK; } int event_remove_all_event_container(struct session *session, int rem_from) { - struct event_container *event_container; + struct event_container *event_container; - while (session->head_event_container.next!=&(session->head_event_container)) { - event_container = list_entry(session->head_event_container.next, struct event_container, list); - bkp_session_delete_event(event_container->id, rem_from?"send":"queue"); - if (event_container->code == EVENT_IDX_1BOOT && rem_from == RPC_SEND) { - remove("/etc/icwmpd/.icwmpd_boot"); - } - free (event_container->command_key); - free_dm_parameter_all_fromlist(&(event_container->head_dm_parameter)); - list_del(&(event_container->list)); - free (event_container); - } - bkp_session_save(); - return CWMP_OK; + while (session->head_event_container.next != &(session->head_event_container)) { + event_container = list_entry(session->head_event_container.next, struct event_container, list); + bkp_session_delete_event(event_container->id, rem_from ? "send" : "queue"); + if (event_container->code == EVENT_IDX_1BOOT && rem_from == RPC_SEND) { + remove("/etc/icwmpd/.icwmpd_boot"); + } + free(event_container->command_key); + free_dm_parameter_all_fromlist(&(event_container->head_dm_parameter)); + list_del(&(event_container->list)); + free(event_container); + } + bkp_session_save(); + return CWMP_OK; } int event_remove_noretry_event_container(struct session *session, struct cwmp *cwmp) @@ -171,13 +158,13 @@ int event_remove_noretry_event_container(struct session *session, struct cwmp *c struct event_container *event_container; struct list_head *ilist, *q; - list_for_each_safe(ilist,q,&(session->head_event_container)) { + list_for_each_safe (ilist, q, &(session->head_event_container)) { event_container = list_entry(ilist, struct event_container, list); if (EVENT_CONST[event_container->code].RETRY == 0) { - free (event_container->command_key); + free(event_container->command_key); free_dm_parameter_all_fromlist(&(event_container->head_dm_parameter)); list_del(&(event_container->list)); - free (event_container); + free(event_container); } if (EVENT_CONST[event_container->code].CODE[0] == '6') @@ -186,231 +173,221 @@ int event_remove_noretry_event_container(struct session *session, struct cwmp *c return CWMP_OK; } -int cwmp_root_cause_event_bootstrap (struct cwmp *cwmp) +int cwmp_root_cause_event_bootstrap(struct cwmp *cwmp) { - char *acsurl = NULL; - int cmp = 0; - struct event_container *event_container; - struct session *session; + char *acsurl = NULL; + int cmp = 0; + struct event_container *event_container; + struct session *session; - cwmp_load_saved_session(cwmp, &acsurl, ACS); + cwmp_load_saved_session(cwmp, &acsurl, ACS); - if (acsurl == NULL) - save_acs_bkp_config (cwmp); + if (acsurl == NULL) + save_acs_bkp_config(cwmp); - if (acsurl == NULL || ((acsurl != NULL)&&(cmp = strcmp(cwmp->conf.acsurl,acsurl)))) { - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - if (cwmp->head_event_container!=NULL && cwmp->head_session_queue.next!=&(cwmp->head_session_queue)) { - session = list_entry(cwmp->head_event_container,struct session, head_event_container); - event_remove_all_event_container (session,RPC_QUEUE); - } - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_0BOOTSTRAP, ""); - FREE(acsurl); - if (event_container == NULL) { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - cwmp_save_event_container (event_container); - cwmp_scheduleInform_remove_all(); - cwmp_scheduledDownload_remove_all(); + if (acsurl == NULL || ((acsurl != NULL) && (cmp = strcmp(cwmp->conf.acsurl, acsurl)))) { + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + if (cwmp->head_event_container != NULL && cwmp->head_session_queue.next != &(cwmp->head_session_queue)) { + session = list_entry(cwmp->head_event_container, struct session, head_event_container); + event_remove_all_event_container(session, RPC_QUEUE); + } + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_0BOOTSTRAP, ""); + FREE(acsurl); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + cwmp_save_event_container(event_container); + cwmp_scheduleInform_remove_all(); + cwmp_scheduledDownload_remove_all(); cwmp_scheduled_Download_remove_all(); cwmp_apply_scheduled_Download_remove_all(); - cwmp_scheduledUpload_remove_all(); - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - } else { - FREE(acsurl); - } + cwmp_scheduledUpload_remove_all(); + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + } else { + FREE(acsurl); + } - if (cmp) { - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_4VALUE_CHANGE, ""); - if (event_container == NULL) { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } + if (cmp) { + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_4VALUE_CHANGE, ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } - char buf[64] = "Device.ManagementServer.URL"; - add_dm_parameter_tolist(&(event_container->head_dm_parameter), buf, NULL, NULL); - cwmp_save_event_container (event_container); - save_acs_bkp_config(cwmp); - cwmp_scheduleInform_remove_all(); - cwmp_scheduledDownload_remove_all(); + char buf[64] = "Device.ManagementServer.URL"; + add_dm_parameter_tolist(&(event_container->head_dm_parameter), buf, NULL, NULL); + cwmp_save_event_container(event_container); + save_acs_bkp_config(cwmp); + cwmp_scheduleInform_remove_all(); + cwmp_scheduledDownload_remove_all(); cwmp_apply_scheduled_Download_remove_all(); cwmp_scheduled_Download_remove_all(); - cwmp_scheduledUpload_remove_all(); - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - } + cwmp_scheduledUpload_remove_all(); + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + } - return CWMP_OK; -} - -int cwmp_root_cause_TransferComplete (struct cwmp *cwmp, struct transfer_complete *p) -{ - struct event_container *event_container; - struct session *session; - struct rpc *rpc_acs; - - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_7TRANSFER_COMPLETE, ""); - if (event_container == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - switch (p->type) { - case TYPE_DOWNLOAD: - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_M_Download, p->command_key?p->command_key:""); - if (event_container == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - break; - case TYPE_UPLOAD: - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_M_Upload, p->command_key?p->command_key:""); - if (event_container == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - break; - case TYPE_SCHEDULE_DOWNLOAD: - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_M_Schedule_Download, p->command_key?p->command_key:""); - if (event_container == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - break; - } - session = list_entry (cwmp->head_event_container, struct session,head_event_container); - if((rpc_acs = cwmp_add_session_rpc_acs(session, RPC_ACS_TRANSFER_COMPLETE)) == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - rpc_acs->extra_data = (void *)p; - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); return CWMP_OK; } -int cwmp_root_cause_dustatechangeComplete (struct cwmp *cwmp, struct du_state_change_complete *p) +int cwmp_root_cause_TransferComplete(struct cwmp *cwmp, struct transfer_complete *p) { - struct event_container *event_container; - struct session *session; - struct rpc *rpc_acs; + struct event_container *event_container; + struct session *session; + struct rpc *rpc_acs; - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_11DU_STATE_CHANGE_COMPLETE, ""); - if (event_container == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_M_ChangeDUState, p->command_key?p->command_key:""); - if (event_container == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_7TRANSFER_COMPLETE, ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); return CWMP_MEM_ERR; } - session = list_entry (cwmp->head_event_container, struct session,head_event_container); - if((rpc_acs = cwmp_add_session_rpc_acs(session, RPC_ACS_DU_STATE_CHANGE_COMPLETE)) == NULL) - { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - rpc_acs->extra_data = (void *)p; - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_OK; + switch (p->type) { + case TYPE_DOWNLOAD: + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_M_Download, p->command_key ? p->command_key : ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + break; + case TYPE_UPLOAD: + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_M_Upload, p->command_key ? p->command_key : ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + break; + case TYPE_SCHEDULE_DOWNLOAD: + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_M_Schedule_Download, p->command_key ? p->command_key : ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + break; + } + session = list_entry(cwmp->head_event_container, struct session, head_event_container); + if ((rpc_acs = cwmp_add_session_rpc_acs(session, RPC_ACS_TRANSFER_COMPLETE)) == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + rpc_acs->extra_data = (void *)p; + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_OK; } -int cwmp_root_cause_getRPCMethod (struct cwmp *cwmp) +int cwmp_root_cause_dustatechangeComplete(struct cwmp *cwmp, struct du_state_change_complete *p) { - struct event_container *event_container; - struct session *session; + struct event_container *event_container; + struct session *session; + struct rpc *rpc_acs; - if (cwmp->env.periodic == CWMP_START_PERIODIC) { - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - cwmp->env.periodic = 0; - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_2PERIODIC, ""); - if (event_container == NULL) { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - cwmp_save_event_container (event_container); - session = list_entry (cwmp->head_event_container, struct session,head_event_container); - if (cwmp_add_session_rpc_acs(session, RPC_ACS_GET_RPC_METHODS) == NULL) { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MEM_ERR; - } - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - } + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_11DU_STATE_CHANGE_COMPLETE, ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } - return CWMP_OK; + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_M_ChangeDUState, p->command_key ? p->command_key : ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + session = list_entry(cwmp->head_event_container, struct session, head_event_container); + if ((rpc_acs = cwmp_add_session_rpc_acs(session, RPC_ACS_DU_STATE_CHANGE_COMPLETE)) == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + rpc_acs->extra_data = (void *)p; + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_OK; } -void *thread_event_periodic (void *v) +int cwmp_root_cause_getRPCMethod(struct cwmp *cwmp) { - struct cwmp *cwmp = (struct cwmp *) v; - struct event_container *event_container; - static int periodic_interval; - static bool periodic_enable; - static time_t periodic_time; - static struct timespec periodic_timeout = {0, 0}; - time_t current_time; - long int delta_time; + struct event_container *event_container; + struct session *session; - periodic_interval = cwmp->conf.period; - periodic_enable = cwmp->conf.periodic_enable; - periodic_time = cwmp->conf.time; + if (cwmp->env.periodic == CWMP_START_PERIODIC) { + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + cwmp->env.periodic = 0; + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_2PERIODIC, ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + cwmp_save_event_container(event_container); + session = list_entry(cwmp->head_event_container, struct session, head_event_container); + if (cwmp_add_session_rpc_acs(session, RPC_ACS_GET_RPC_METHODS) == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MEM_ERR; + } + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + } - for(;;) { - pthread_mutex_lock (&(cwmp->mutex_periodic)); - if (cwmp->conf.periodic_enable) { - current_time = time(NULL); - if (periodic_time != 0) { - delta_time = (current_time - periodic_time) % periodic_interval; - if (delta_time >= 0) - periodic_timeout.tv_sec = current_time + periodic_interval - delta_time; - else - periodic_timeout.tv_sec = current_time - delta_time; - } else { - periodic_timeout.tv_sec = current_time + periodic_interval; - } - cwmp->session_status.next_periodic = periodic_timeout.tv_sec; - pthread_cond_timedwait(&(cwmp->threshold_periodic), &(cwmp->mutex_periodic), &periodic_timeout); - } else { - cwmp->session_status.next_periodic = 0; - pthread_cond_wait(&(cwmp->threshold_periodic), &(cwmp->mutex_periodic)); - } - pthread_mutex_unlock (&(cwmp->mutex_periodic)); - if (periodic_interval != cwmp->conf.period || - periodic_enable != cwmp->conf.periodic_enable || - periodic_time != cwmp->conf.time) { - periodic_enable = cwmp->conf.periodic_enable; - periodic_interval = cwmp->conf.period; - periodic_time = cwmp->conf.time; - continue; - } - CWMP_LOG(INFO,"Periodic thread: add periodic event in the queue"); - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_2PERIODIC, ""); - if (event_container == NULL) { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - continue; - } - cwmp_save_event_container (event_container); - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - pthread_cond_signal(&(cwmp->threshold_session_send)); - } - return CWMP_OK; + return CWMP_OK; +} + +void *thread_event_periodic(void *v) +{ + struct cwmp *cwmp = (struct cwmp *)v; + struct event_container *event_container; + static int periodic_interval; + static bool periodic_enable; + static time_t periodic_time; + static struct timespec periodic_timeout = { 0, 0 }; + time_t current_time; + long int delta_time; + + periodic_interval = cwmp->conf.period; + periodic_enable = cwmp->conf.periodic_enable; + periodic_time = cwmp->conf.time; + + for (;;) { + pthread_mutex_lock(&(cwmp->mutex_periodic)); + if (cwmp->conf.periodic_enable) { + current_time = time(NULL); + if (periodic_time != 0) { + delta_time = (current_time - periodic_time) % periodic_interval; + if (delta_time >= 0) + periodic_timeout.tv_sec = current_time + periodic_interval - delta_time; + else + periodic_timeout.tv_sec = current_time - delta_time; + } else { + periodic_timeout.tv_sec = current_time + periodic_interval; + } + cwmp->session_status.next_periodic = periodic_timeout.tv_sec; + pthread_cond_timedwait(&(cwmp->threshold_periodic), &(cwmp->mutex_periodic), &periodic_timeout); + } else { + cwmp->session_status.next_periodic = 0; + pthread_cond_wait(&(cwmp->threshold_periodic), &(cwmp->mutex_periodic)); + } + pthread_mutex_unlock(&(cwmp->mutex_periodic)); + if (periodic_interval != cwmp->conf.period || periodic_enable != cwmp->conf.periodic_enable || periodic_time != cwmp->conf.time) { + periodic_enable = cwmp->conf.periodic_enable; + periodic_interval = cwmp->conf.period; + periodic_time = cwmp->conf.time; + continue; + } + CWMP_LOG(INFO, "Periodic thread: add periodic event in the queue"); + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_2PERIODIC, ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + continue; + } + cwmp_save_event_container(event_container); + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + pthread_cond_signal(&(cwmp->threshold_session_send)); + } + return CWMP_OK; } bool event_exist_in_list(struct cwmp *cwmp, int event) { - struct event_container *event_container; - list_for_each_entry(event_container, cwmp->head_event_container, list) { + struct event_container *event_container; + list_for_each_entry (event_container, cwmp->head_event_container, list) { if (event_container->code == event) return true; } @@ -419,39 +396,37 @@ bool event_exist_in_list(struct cwmp *cwmp, int event) int cwmp_root_cause_event_periodic(struct cwmp *cwmp) { - static int period = 0; - static bool periodic_enable = false; - static time_t periodic_time = 0; - char local_time[27] = {0}; - struct tm *t_tm; - - if (period == cwmp->conf.period && - periodic_enable == cwmp->conf.periodic_enable && - periodic_time == cwmp->conf.time) - return CWMP_OK; + static int period = 0; + static bool periodic_enable = false; + static time_t periodic_time = 0; + char local_time[27] = { 0 }; + struct tm *t_tm; + + if (period == cwmp->conf.period && periodic_enable == cwmp->conf.periodic_enable && periodic_time == cwmp->conf.time) + return CWMP_OK; + + pthread_mutex_lock(&(cwmp->mutex_periodic)); + period = cwmp->conf.period; + periodic_enable = cwmp->conf.periodic_enable; + periodic_time = cwmp->conf.time; + CWMP_LOG(INFO, periodic_enable ? "Periodic event is enabled. Interval period = %ds" : "Periodic event is disabled", period); - pthread_mutex_lock(&(cwmp->mutex_periodic)); - period = cwmp->conf.period; - periodic_enable = cwmp->conf.periodic_enable; - periodic_time = cwmp->conf.time; - CWMP_LOG(INFO,periodic_enable?"Periodic event is enabled. Interval period = %ds":"Periodic event is disabled", period); - t_tm = localtime(&periodic_time); if (t_tm == NULL) return CWMP_GEN_ERR; if (strftime(local_time, sizeof(local_time), "%FT%T%z", t_tm) == 0) return CWMP_GEN_ERR; - + local_time[25] = local_time[24]; local_time[24] = local_time[23]; local_time[22] = ':'; local_time[26] = '\0'; - - CWMP_LOG(INFO,periodic_time?"Periodic time is %s":"Periodic time is Unknown", local_time); - pthread_mutex_unlock (&(cwmp->mutex_periodic)); - pthread_cond_signal(&(cwmp->threshold_periodic)); - return CWMP_OK; + + CWMP_LOG(INFO, periodic_time ? "Periodic time is %s" : "Periodic time is Unknown", local_time); + pthread_mutex_unlock(&(cwmp->mutex_periodic)); + pthread_cond_signal(&(cwmp->threshold_periodic)); + return CWMP_OK; } void connection_request_ip_value_change(struct cwmp *cwmp, int version) @@ -474,19 +449,19 @@ void connection_request_ip_value_change(struct cwmp *cwmp, int version) return; } if (strcmp(bip, ip_value) != 0) { - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_4VALUE_CHANGE, ""); + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_4VALUE_CHANGE, ""); if (event_container == NULL) { FREE(bip); - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); FREE(ip_version); FREE(ip_value); return; } - cwmp_save_event_container (event_container); + cwmp_save_event_container(event_container); bkp_session_simple_insert_in_parent("connection_request", ip_version, ip_value); bkp_session_save(); - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); pthread_cond_signal(&(cwmp->threshold_session_send)); } FREE(bip); @@ -510,35 +485,35 @@ void connection_request_port_value_change(struct cwmp *cwmp, int port) return; } if (strcmp(bport, bufport) != 0) { - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_4VALUE_CHANGE, ""); + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_4VALUE_CHANGE, ""); if (event_container == NULL) { FREE(bport); return; } - cwmp_save_event_container (event_container); + cwmp_save_event_container(event_container); bkp_session_simple_insert_in_parent("connection_request", "port", bufport); bkp_session_save(); } FREE(bport); } -int cwmp_root_cause_events (struct cwmp *cwmp) +int cwmp_root_cause_events(struct cwmp *cwmp) { - int error; + int error; - if ((error = cwmp_root_cause_event_bootstrap(cwmp))) + if ((error = cwmp_root_cause_event_bootstrap(cwmp))) return error; - if ((error = cwmp_root_cause_event_boot(cwmp))) - return error; + if ((error = cwmp_root_cause_event_boot(cwmp))) + return error; - if ((error = cwmp_root_cause_getRPCMethod(cwmp))) - return error; + if ((error = cwmp_root_cause_getRPCMethod(cwmp))) + return error; - if ((error = cwmp_root_cause_event_periodic(cwmp))) - return error; + if ((error = cwmp_root_cause_event_periodic(cwmp))) + return error; - return CWMP_OK; + return CWMP_OK; } int cwmp_get_int_event_code(char *code) diff --git a/external.c b/external.c index dafcfcb..1176dd0 100644 --- a/external.c +++ b/external.c @@ -36,43 +36,43 @@ static char *fc_script = "/usr/sbin/icwmp"; #define ICWMP_PROMPT "icwmp>" -void external_downloadFaultResp (char *fault_code) +void external_downloadFaultResp(char *fault_code) { FREE(external_MethodFault); external_MethodFault = fault_code ? strdup(fault_code) : NULL; } -void external_fetch_downloadFaultResp (char **fault) +void external_fetch_downloadFaultResp(char **fault) { *fault = external_MethodFault; external_MethodFault = NULL; } -void external_uploadFaultResp (char *fault_code) +void external_uploadFaultResp(char *fault_code) { FREE(external_MethodFault); external_MethodFault = fault_code ? strdup(fault_code) : NULL; } -void external_fetch_uploadFaultResp (char **fault) +void external_fetch_uploadFaultResp(char **fault) { *fault = external_MethodFault; external_MethodFault = NULL; } -void external_uninstallFaultResp (char *fault_code) +void external_uninstallFaultResp(char *fault_code) { FREE(external_MethodFault); external_MethodFault = fault_code ? strdup(fault_code) : NULL; } -void external_fetch_uninstallFaultResp (char **fault) +void external_fetch_uninstallFaultResp(char **fault) { *fault = external_MethodFault; external_MethodFault = NULL; } -void external_du_change_stateFaultResp (char *fault_code, char *version, char *name, char *uuid, char *env) +void external_du_change_stateFaultResp(char *fault_code, char *version, char *name, char *uuid, char *env) { FREE(external_MethodFault); external_MethodFault = fault_code ? strdup(fault_code) : NULL; @@ -101,44 +101,45 @@ void external_fetch_du_change_stateFaultResp(char **fault, char **version, char } static void external_read_pipe_input(int (*external_handler)(char *msg)) { - char buf[1], *value = NULL, *c = NULL; - struct pollfd fd = { - .fd = pfds_in[0], - .events = POLLIN - }; - while(1) { - poll(&fd, 1, 500000); - if (!(fd.revents & POLLIN)) break; - if (read(pfds_in[0], buf, sizeof(buf))<=0) break; - if (buf[0]!='\n') { + char buf[1], *value = NULL, *c = NULL; + struct pollfd fd = {.fd = pfds_in[0], .events = POLLIN }; + while (1) { + poll(&fd, 1, 500000); + if (!(fd.revents & POLLIN)) + break; + if (read(pfds_in[0], buf, sizeof(buf)) <= 0) + break; + if (buf[0] != '\n') { if (value) - asprintf(&c,"%s%c",value,buf[0]); + asprintf(&c, "%s%c", value, buf[0]); else - asprintf(&c,"%c",buf[0]); + asprintf(&c, "%c", buf[0]); FREE(value); value = c; - } else { - if (!value) continue; - if (strcmp(value, ICWMP_PROMPT)==0) { - FREE(value); - break; - } - if(external_handler) external_handler(value); - FREE(value); - } - } + } else { + if (!value) + continue; + if (strcmp(value, ICWMP_PROMPT) == 0) { + FREE(value); + break; + } + if (external_handler) + external_handler(value); + FREE(value); + } + } } static void external_write_pipe_output(const char *msg) { - char *value = NULL; + char *value = NULL; - asprintf(&value, "%s\n", msg); - if (write(pfds_out[1], value, strlen(value)) == -1) { - CWMP_LOG(ERROR,"Error occured when trying to write to the pipe"); + asprintf(&value, "%s\n", msg); + if (write(pfds_out[1], value, strlen(value)) == -1) { + CWMP_LOG(ERROR, "Error occured when trying to write to the pipe"); } - free(value); + free(value); } static void json_obj_out_add(json_object *json_obj_out, char *name, char *val) @@ -152,7 +153,7 @@ static void json_obj_out_add(json_object *json_obj_out, char *name, char *val) void external_init() { if (pipe(pfds_in) < 0) - return; + return; if (pipe(pfds_out) < 0) return; @@ -172,10 +173,10 @@ void external_init() const char *argv[5]; int i = 0; argv[i++] = "/bin/sh"; - argv[i++] = fc_script; - argv[i++] = "json_continuous_input"; + argv[i++] = fc_script; + argv[i++] = "json_continuous_input"; argv[i++] = NULL; - execvp(argv[0], (char **) argv); + execvp(argv[0], (char **)argv); close(pfds_out[0]); close(pfds_in[1]); @@ -184,25 +185,24 @@ void external_init() } close(pfds_in[1]); - close(pfds_out[0]); + close(pfds_out[0]); - if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) - { - DD(ERROR, "icwmp script intialization: signal ignoring error"); - } + if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { + DD(ERROR, "icwmp script intialization: signal ignoring error"); + } external_read_pipe_input(NULL); DD(INFO, "icwmp script is listening"); return; error: - CWMP_LOG(ERROR,"icwmp script intialization failed"); + CWMP_LOG(ERROR, "icwmp script intialization failed"); exit(EXIT_FAILURE); } void external_exit() { - int status; + int status; json_object *json_obj_out; @@ -219,7 +219,7 @@ void external_exit() } close(pfds_in[0]); - close(pfds_out[1]); + close(pfds_out[1]); } int external_handle_action(int (*external_handler)(char *msg)) @@ -236,7 +236,7 @@ int external_handle_action(int (*external_handler)(char *msg)) int external_simple(char *command, char *arg, int c) { - DD(INFO,"executing %s request", command); + DD(INFO, "executing %s request", command); json_object *json_obj_out; @@ -258,23 +258,22 @@ int external_simple(char *command, char *arg, int c) int external_download(char *url, char *size, char *type, char *user, char *pass, time_t c) { - DD(INFO,"executing download url '%s'", url); + DD(INFO, "executing download url '%s'", url); char *id = NULL; char *cert_path = NULL; struct config *conf; json_object *json_obj_out; - struct cwmp *cwmp = &cwmp_main; - + struct cwmp *cwmp = &cwmp_main; + conf = &(cwmp->conf); - if (strncmp(url,DOWNLOAD_PROTOCOL_HTTPS,strlen(DOWNLOAD_PROTOCOL_HTTPS)) == 0) - { - if(conf->https_ssl_capath) + if (strncmp(url, DOWNLOAD_PROTOCOL_HTTPS, strlen(DOWNLOAD_PROTOCOL_HTTPS)) == 0) { + if (conf->https_ssl_capath) cert_path = strdup(conf->https_ssl_capath); else cert_path = NULL; } - if(cert_path) - CWMP_LOG(DEBUG,"https certif path %s", cert_path); + if (cert_path) + CWMP_LOG(DEBUG, "https certif path %s", cert_path); if (c) asprintf(&id, "%ld", c); /* send data to the script */ @@ -284,28 +283,28 @@ int external_download(char *url, char *size, char *type, char *user, char *pass, json_obj_out_add(json_obj_out, "url", url); json_obj_out_add(json_obj_out, "size", size); json_obj_out_add(json_obj_out, "type", type); - if(user) + if (user) json_obj_out_add(json_obj_out, "user", user); - if(pass) + if (pass) json_obj_out_add(json_obj_out, "pass", pass); - if(id) + if (id) json_obj_out_add(json_obj_out, "ids", id); - if(cert_path) + if (cert_path) json_obj_out_add(json_obj_out, "cert_path", cert_path); external_write_pipe_output(json_object_to_json_string(json_obj_out)); json_object_put(json_obj_out); - if(cert_path) + if (cert_path) free(cert_path); - if(id) + if (id) free(id); return 0; } int external_upload(char *url, char *type, char *user, char *pass, char *name) { - DD(INFO,"executing download url '%s'", url); + DD(INFO, "executing download url '%s'", url); json_object *json_obj_out; @@ -316,8 +315,10 @@ int external_upload(char *url, char *type, char *user, char *pass, char *name) json_obj_out_add(json_obj_out, "url", url); json_obj_out_add(json_obj_out, "type", type); json_obj_out_add(json_obj_out, "name", name); - if(user) json_obj_out_add(json_obj_out, "user", user); - if(pass) json_obj_out_add(json_obj_out, "pass", pass); + if (user) + json_obj_out_add(json_obj_out, "user", user); + if (pass) + json_obj_out_add(json_obj_out, "pass", pass); external_write_pipe_output(json_object_to_json_string(json_obj_out)); @@ -328,7 +329,7 @@ int external_upload(char *url, char *type, char *user, char *pass, char *name) int external_change_du_state_install(char *url, char *uuid, char *user, char *pass, char *env) { - DD(INFO,"executing DU install"); + DD(INFO, "executing DU install"); json_object *json_obj_out; /* send data to the script */ @@ -354,7 +355,7 @@ int external_change_du_state_install(char *url, char *uuid, char *user, char *pa int external_change_du_state_update(char *uuid, char *url, char *user, char *pass) { - DD(INFO,"executing DU update"); + DD(INFO, "executing DU update"); json_object *json_obj_out; /* send data to the script */ @@ -377,7 +378,7 @@ int external_change_du_state_update(char *uuid, char *url, char *user, char *pas int external_change_du_state_uninstall(char *name, char *env) { - DD(INFO,"executing DU uninstall"); + DD(INFO, "executing DU uninstall"); json_object *json_obj_out; /* send data to the script */ @@ -397,12 +398,13 @@ int external_change_du_state_uninstall(char *name, char *env) int external_apply(char *action, char *arg, time_t c) { - DD(INFO,"executing apply %s", action); + DD(INFO, "executing apply %s", action); json_object *json_obj_out; char *id = NULL; - if (c) asprintf(&id, "%ld", c); + if (c) + asprintf(&id, "%ld", c); /* send data to the script */ json_obj_out = json_object_new_object(); @@ -412,16 +414,15 @@ int external_apply(char *action, char *arg, time_t c) if (arg) json_obj_out_add(json_obj_out, "arg", arg); - if(id) + if (id) json_obj_out_add(json_obj_out, "ids", id); external_write_pipe_output(json_object_to_json_string(json_obj_out)); json_object_put(json_obj_out); - if(id) { + if (id) { free(id); - id= NULL; + id = NULL; } return 0; } - diff --git a/http.c b/http.c index 35a3b59..8700a81 100644 --- a/http.c +++ b/http.c @@ -49,13 +49,13 @@ int http_client_init(struct cwmp *cwmp) if (dhcp_dis && cwmp->retry_count_session > 0 && strcmp(dhcp_dis, "enable") == 0) { uci_get_state_value(UCI_DHCP_ACS_URL, &acs_var_stat); - if(acs_var_stat){ + if (acs_var_stat) { if (asprintf(&http_c.url, "%s", acs_var_stat) == -1) { free(acs_var_stat); free(dhcp_dis); return -1; } - }else { + } else { if (asprintf(&http_c.url, "%s", cwmp->conf.acsurl) == -1) { free(dhcp_dis); return -1; @@ -63,13 +63,13 @@ int http_client_init(struct cwmp *cwmp) } } else { if (asprintf(&http_c.url, "%s", cwmp->conf.acsurl) == -1) { - if(dhcp_dis) + if (dhcp_dis) free(dhcp_dis); return -1; } } - if(dhcp_dis) + if (dhcp_dis) free(dhcp_dis); CWMP_LOG(INFO, "ACS url: %s", http_c.url); @@ -78,21 +78,22 @@ int http_client_init(struct cwmp *cwmp) curl_global_init(CURL_GLOBAL_SSL); curl = curl_easy_init(); - if (!curl) return -1; + if (!curl) + return -1; -if (cwmp->conf.ipv6_enable) { - char *ip = NULL; - curl_easy_setopt(curl, CURLOPT_URL, http_c.url); - curl_easy_setopt(curl, CURLOPT_TIMEOUT, HTTP_TIMEOUT); - curl_easy_setopt(curl, CURLOPT_NOBODY, 1); - curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, &ip); - curl_easy_perform(curl); - int tmp = inet_pton(AF_INET, ip, buf); + if (cwmp->conf.ipv6_enable) { + char *ip = NULL; + curl_easy_setopt(curl, CURLOPT_URL, http_c.url); + curl_easy_setopt(curl, CURLOPT_TIMEOUT, HTTP_TIMEOUT); + curl_easy_setopt(curl, CURLOPT_NOBODY, 1); + curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, &ip); + curl_easy_perform(curl); + int tmp = inet_pton(AF_INET, ip, buf); - asprintf(&uci_cmd, "cwmp.acs.ip_version=%d", (tmp == 1) ? 4 : 6); - uci_set_value(uci_cmd); - free(uci_cmd); -} + asprintf(&uci_cmd, "cwmp.acs.ip_version=%d", (tmp == 1) ? 4 : 6); + uci_set_value(uci_cmd); + free(uci_cmd); + } return 0; } @@ -110,8 +111,7 @@ void http_client_exit(void) curl_global_cleanup(); } -static size_t -http_get_response(void *buffer, size_t size, size_t rxed, char **msg_in) +static size_t http_get_response(void *buffer, size_t size, size_t rxed, char **msg_in) { char *c; @@ -126,91 +126,94 @@ http_get_response(void *buffer, size_t size, size_t rxed, char **msg_in) return size * rxed; } -int -http_send_message(struct cwmp *cwmp, char *msg_out, int msg_out_len,char **msg_in) +int http_send_message(struct cwmp *cwmp, char *msg_out, int msg_out_len, char **msg_in) { unsigned char buf[sizeof(struct in6_addr)]; int tmp = 0; CURLcode res; long http_code = 0; - static char ip_acs[128] = {0}; + static char ip_acs[128] = { 0 }; char *ip = NULL; char errbuf[CURL_ERROR_SIZE]; http_c.header_list = NULL; http_c.header_list = curl_slist_append(http_c.header_list, "User-Agent: iopsys-cwmp"); - if (!http_c.header_list) return -1; + if (!http_c.header_list) + return -1; http_c.header_list = curl_slist_append(http_c.header_list, "Content-Type: text/xml"); - if (!http_c.header_list) return -1; -# ifdef ACS_FUSION + if (!http_c.header_list) + return -1; +#ifdef ACS_FUSION char *expect_header = "Expect:"; http_c.header_list = curl_slist_append(http_c.header_list, expect_header); - if (!http_c.header_list) return -1; -# endif /* ACS_FUSION */ - if (cwmp->conf.http_disable_100continue) - { + if (!http_c.header_list) + return -1; +#endif /* ACS_FUSION */ + if (cwmp->conf.http_disable_100continue) { char *expect_header = "Expect:"; http_c.header_list = curl_slist_append(http_c.header_list, expect_header); - if (!http_c.header_list) return -1; + if (!http_c.header_list) + return -1; } curl_easy_setopt(curl, CURLOPT_URL, http_c.url); curl_easy_setopt(curl, CURLOPT_USERNAME, cwmp->conf.acs_userid); curl_easy_setopt(curl, CURLOPT_PASSWORD, cwmp->conf.acs_passwd); - curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC|CURLAUTH_DIGEST); + curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC | CURLAUTH_DIGEST); curl_easy_setopt(curl, CURLOPT_TIMEOUT, HTTP_TIMEOUT); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, HTTP_TIMEOUT); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL); curl_easy_setopt(curl, CURLOPT_NOBODY, 0); switch (cwmp->conf.compression) { - case COMP_NONE: - break; - case COMP_GZIP: - curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "gzip"); - http_c.header_list = curl_slist_append(http_c.header_list, "Content-Encoding: gzip"); - break; - case COMP_DEFLATE: - curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "deflate"); - http_c.header_list = curl_slist_append(http_c.header_list, "Content-Encoding: deflate"); - break; + case COMP_NONE: + break; + case COMP_GZIP: + curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "gzip"); + http_c.header_list = curl_slist_append(http_c.header_list, "Content-Encoding: gzip"); + break; + case COMP_DEFLATE: + curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "deflate"); + http_c.header_list = curl_slist_append(http_c.header_list, "Content-Encoding: deflate"); + break; } curl_easy_setopt(curl, CURLOPT_HTTPHEADER, http_c.header_list); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, msg_out); if (msg_out) - curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) msg_out_len); + curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)msg_out_len); else curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, http_get_response); curl_easy_setopt(curl, CURLOPT_WRITEDATA, msg_in); -# ifdef DEVEL +#ifdef DEVEL curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); -# endif +#endif curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt(curl, CURLOPT_COOKIEFILE, fc_cookies); curl_easy_setopt(curl, CURLOPT_COOKIEJAR, fc_cookies); - + if (cwmp->conf.acs_ssl_capath) - curl_easy_setopt(curl, CURLOPT_CAPATH, cwmp->conf.acs_ssl_capath); + curl_easy_setopt(curl, CURLOPT_CAPATH, cwmp->conf.acs_ssl_capath); if (cwmp->conf.insecure_enable) { curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); } uci_get_value(UCI_CPE_INTERFACE_PATH, &(cwmp->conf.interface)); curl_easy_setopt(curl, CURLOPT_INTERFACE, cwmp->conf.interface); - *msg_in = (char *) calloc (1, sizeof(char)); + *msg_in = (char *)calloc(1, sizeof(char)); res = curl_easy_perform(curl); - if(res != CURLE_OK) { + if (res != CURLE_OK) { size_t len = strlen(errbuf); - if(len) { - if (errbuf[len - 1] == '\n') errbuf[len - 1] = '\0'; - CWMP_LOG(ERROR,"libcurl: (%d) %s", res, errbuf); + if (len) { + if (errbuf[len - 1] == '\n') + errbuf[len - 1] = '\0'; + CWMP_LOG(ERROR, "libcurl: (%d) %s", res, errbuf); } else { - CWMP_LOG(ERROR,"libcurl: (%d) %s", res, curl_easy_strerror(res)); + CWMP_LOG(ERROR, "libcurl: (%d) %s", res, curl_easy_strerror(res)); } } @@ -235,13 +238,11 @@ http_send_message(struct cwmp *cwmp, char *msg_out, int msg_out_len,char **msg_i } curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); - if(http_code == 204) - { - CWMP_LOG (INFO,"Receive HTTP 204 No Content"); + if (http_code == 204) { + CWMP_LOG(INFO, "Receive HTTP 204 No Content"); } - if(http_code == 415) - { + if (http_code == 415) { cwmp->conf.compression = COMP_NONE; goto error; } @@ -255,7 +256,8 @@ http_send_message(struct cwmp *cwmp, char *msg_out, int msg_out_len,char **msg_i http_c.header_list = NULL; } - if (res) goto error; + if (res) + goto error; return 0; @@ -270,10 +272,10 @@ error: void http_success_cr() { - CWMP_LOG(INFO,"Connection Request thread: add connection request event in the queue"); - pthread_mutex_lock (&(cwmp_main.mutex_session_queue)); + CWMP_LOG(INFO, "Connection Request thread: add connection request event in the queue"); + pthread_mutex_lock(&(cwmp_main.mutex_session_queue)); cwmp_add_event_container(&cwmp_main, EVENT_IDX_6CONNECTION_REQUEST, ""); - pthread_mutex_unlock (&(cwmp_main.mutex_session_queue)); + pthread_mutex_unlock(&(cwmp_main.mutex_session_queue)); pthread_cond_signal(&(cwmp_main.threshold_session_send)); } @@ -283,7 +285,7 @@ static void http_cr_new_client(int client, bool service_available) char buffer[BUFSIZ]; int8_t auth_status = 0; - pthread_mutex_lock (&mutex_config_load); + pthread_mutex_lock(&mutex_config_load); fp = fdopen(client, "r+"); while (fgets(buffer, sizeof(buffer), fp)) { @@ -308,25 +310,25 @@ static void http_cr_new_client(int client, bool service_available) goto http_end; } } - if(!service_available) { + if (!service_available) { goto http_end; } goto http_done; - http_end: +http_end: if (!service_available) { - CWMP_LOG (INFO,"Receive Connection Request: Return 503 Service Unavailable"); + CWMP_LOG(INFO, "Receive Connection Request: Return 503 Service Unavailable"); fputs("HTTP/1.1 503 Service Unavailable\r\n", fp); fputs("Connection: close\r\n", fp); fputs("Content-Length: 0\r\n", fp); } else if (auth_status) { - CWMP_LOG (INFO,"Receive Connection Request: success authentication"); + CWMP_LOG(INFO, "Receive Connection Request: success authentication"); fputs("HTTP/1.1 200 OK\r\n", fp); fputs("Connection: close\r\n", fp); fputs("Content-Length: 0\r\n", fp); http_success_cr(); } else { - CWMP_LOG (INFO,"Receive Connection Request: Return 401 Unauthorized"); + CWMP_LOG(INFO, "Receive Connection Request: Return 401 Unauthorized"); fputs("HTTP/1.1 401 Unauthorized\r\n", fp); fputs("Connection: close\r\n", fp); http_digest_auth_fail_response(fp, "GET", "/", REALM, OPAQUE); @@ -334,24 +336,23 @@ static void http_cr_new_client(int client, bool service_available) } fputs("\r\n", fp); - http_done: +http_done: fclose(fp); - pthread_mutex_unlock (&mutex_config_load); + pthread_mutex_unlock(&mutex_config_load); } void http_server_init(void) { - struct sockaddr_in6 server = {0}; + struct sockaddr_in6 server = { 0 }; unsigned short cr_port; - for(;;) { - cr_port = (unsigned short) (cwmp_main.conf.connection_request_port); - unsigned short i = (DEFAULT_CONNECTION_REQUEST_PORT == cr_port)? 1 : 0; + for (;;) { + cr_port = (unsigned short)(cwmp_main.conf.connection_request_port); + unsigned short i = (DEFAULT_CONNECTION_REQUEST_PORT == cr_port) ? 1 : 0; //Create socket - cwmp_main.cr_socket_desc = socket(AF_INET6 , SOCK_STREAM , 0); - if (cwmp_main.cr_socket_desc == -1) - { - CWMP_LOG (ERROR,"Could not open server socket for Connection Requests, Error no is : %d, Error description is : %s", errno, strerror(errno)); + cwmp_main.cr_socket_desc = socket(AF_INET6, SOCK_STREAM, 0); + if (cwmp_main.cr_socket_desc == -1) { + CWMP_LOG(ERROR, "Could not open server socket for Connection Requests, Error no is : %d, Error description is : %s", errno, strerror(errno)); sleep(1); continue; } @@ -359,24 +360,22 @@ void http_server_init(void) fcntl(cwmp_main.cr_socket_desc, F_SETFD, fcntl(cwmp_main.cr_socket_desc, F_GETFD) | FD_CLOEXEC); int reusaddr = 1; - if (setsockopt(cwmp_main.cr_socket_desc, SOL_SOCKET, SO_REUSEADDR, &reusaddr, sizeof(int)) < 0) - { - CWMP_LOG (WARNING,"setsockopt(SO_REUSEADDR) failed"); + if (setsockopt(cwmp_main.cr_socket_desc, SOL_SOCKET, SO_REUSEADDR, &reusaddr, sizeof(int)) < 0) { + CWMP_LOG(WARNING, "setsockopt(SO_REUSEADDR) failed"); } //Prepare the sockaddr_in structure server.sin6_family = AF_INET6; - server.sin6_addr=in6addr_any; - - for(;;i++) { + server.sin6_addr = in6addr_any; + + for (;; i++) { server.sin6_port = htons(cr_port); //Bind - if( bind(cwmp_main.cr_socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0) - { + if (bind(cwmp_main.cr_socket_desc, (struct sockaddr *)&server, sizeof(server)) < 0) { //print the error message - CWMP_LOG (ERROR,"Could not bind server socket on the port %d, Error no is : %d, Error description is : %s", cr_port, errno, strerror(errno)); + CWMP_LOG(ERROR, "Could not bind server socket on the port %d, Error no is : %d, Error description is : %s", cr_port, errno, strerror(errno)); cr_port = DEFAULT_CONNECTION_REQUEST_PORT + i; - CWMP_LOG (INFO,"Trying to use another connection request port: %d", cr_port); + CWMP_LOG(INFO, "Trying to use another connection request port: %d", cr_port); continue; } break; @@ -384,15 +383,15 @@ void http_server_init(void) break; } char buf[64]; - sprintf(buf,UCI_CPE_PORT_PATH"=%d", cr_port); + sprintf(buf, UCI_CPE_PORT_PATH "=%d", cr_port); uci_set_state_value(buf); connection_request_port_value_change(&cwmp_main, cr_port); - CWMP_LOG (INFO,"Connection Request server initiated with the port: %d", cr_port); + CWMP_LOG(INFO, "Connection Request server initiated with the port: %d", cr_port); } void http_server_listen(void) { - int client_sock , c; + int client_sock, c; static int cr_request = 0; static time_t restrict_start_time = 0; time_t current_time; @@ -400,25 +399,19 @@ void http_server_listen(void) struct sockaddr_in6 client; //Listen - listen(cwmp_main.cr_socket_desc , 3); + listen(cwmp_main.cr_socket_desc, 3); //Accept and incoming connection c = sizeof(struct sockaddr_in); - while( (client_sock = accept(cwmp_main.cr_socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) ) - { + while ((client_sock = accept(cwmp_main.cr_socket_desc, (struct sockaddr *)&client, (socklen_t *)&c))) { current_time = time(NULL); service_available = true; - if ((restrict_start_time==0) || - ((current_time-restrict_start_time) > CONNECTION_REQUEST_RESTRICT_PERIOD)) - { + if ((restrict_start_time == 0) || ((current_time - restrict_start_time) > CONNECTION_REQUEST_RESTRICT_PERIOD)) { restrict_start_time = current_time; - cr_request = 1; - } - else - { + cr_request = 1; + } else { cr_request++; - if (cr_request > CONNECTION_REQUEST_RESTRICT_REQUEST) - { + if (cr_request > CONNECTION_REQUEST_RESTRICT_REQUEST) { restrict_start_time = current_time; service_available = false; } @@ -427,9 +420,8 @@ void http_server_listen(void) close(client_sock); } - if (client_sock < 0) - { - CWMP_LOG(ERROR,"Could not accept connections for Connection Requests!"); + if (client_sock < 0) { + CWMP_LOG(ERROR, "Could not accept connections for Connection Requests!"); return; } } diff --git a/inc/backupSession.h b/inc/backupSession.h index 0b7e841..dd557e9 100644 --- a/inc/backupSession.h +++ b/inc/backupSession.h @@ -16,23 +16,17 @@ #include #include "common.h" -#define RPC_NO_STATUS -1 -#define RPC_QUEUE 0 -#define RPC_SEND 1 +#define RPC_NO_STATUS -1 +#define RPC_QUEUE 0 +#define RPC_SEND 1 -# define CWMP_BACKUP_SESSION "" +#define CWMP_BACKUP_SESSION "" #define CWMP_BKP_FILE "/etc/icwmpd/.icwmpd_backup_session.xml" -typedef enum backup_loading { - ALL, - ACS, - CR_IP, - CR_IPv6, - CR_PORT -} backup_loading; +typedef enum backup_loading { ALL, ACS, CR_IP, CR_IPv6, CR_PORT } backup_loading; struct search_keywords { - char *name; - char *value; + char *name; + char *value; }; extern pthread_mutex_t mutex_backup_session; @@ -45,10 +39,10 @@ void bkp_session_delete_event(int id, char *status); void bkp_session_simple_insert_in_parent(char *parent, char *child, char *value); void bkp_session_insert_parameter(mxml_node_t *b, char *name); void bkp_session_simple_insert(char *parent, char *child, char *value); -void bkp_session_move_inform_to_inform_send (); -void bkp_session_move_inform_to_inform_queue (); -void bkp_session_insert_schedule_inform(time_t schedule_time,char *command_key); -void bkp_session_delete_schedule_inform(time_t schedule_time,char *command_key); +void bkp_session_move_inform_to_inform_send(); +void bkp_session_move_inform_to_inform_queue(); +void bkp_session_insert_schedule_inform(time_t schedule_time, char *command_key); +void bkp_session_delete_schedule_inform(time_t schedule_time, char *command_key); void bkp_session_insert_download(struct download *pdownload); void bkp_session_delete_download(struct download *pdownload); void bkp_session_insert_upload(struct upload *pupload); diff --git a/inc/common.h b/inc/common.h index 5ff510d..51df620 100644 --- a/inc/common.h +++ b/inc/common.h @@ -27,66 +27,66 @@ #define ARRAYSIZEOF(a) (sizeof(a) / sizeof((a)[0])) -#define MAX_EVENTS 64 -#define MAX_INT32 2147483646 -#define MAX_INT_ID MAX_INT32 -#define MIN_INT_ID 836464 -#define PERIOD_INFORM_MIN 60 -#define PERIOD_INFORM_DEFAULT 86400 -#define CONNECTION_REQUEST_RESTRICT_PERIOD 5 -#define CONNECTION_REQUEST_RESTRICT_REQUEST 50 -#define DEFAULT_CONNECTION_REQUEST_PORT 7547 -#define DEFAULT_NOTIFY_PERIOD 10 -#define DEFAULT_LWN_PORT 7547 +#define MAX_EVENTS 64 +#define MAX_INT32 2147483646 +#define MAX_INT_ID MAX_INT32 +#define MIN_INT_ID 836464 +#define PERIOD_INFORM_MIN 60 +#define PERIOD_INFORM_DEFAULT 86400 +#define CONNECTION_REQUEST_RESTRICT_PERIOD 5 +#define CONNECTION_REQUEST_RESTRICT_REQUEST 50 +#define DEFAULT_CONNECTION_REQUEST_PORT 7547 +#define DEFAULT_NOTIFY_PERIOD 10 +#define DEFAULT_LWN_PORT 7547 #define DEFAULT_RETRY_MINIMUM_WAIT_INTERVAL 5 -#define DEFAULT_RETRY_INITIAL_INTERVAL 60 -#define DEFAULT_RETRY_INTERVAL_MULTIPLIER 2000 -#define DEFAULT_RETRY_MAX_INTERVAL 60 -#define DEFAULT_AMD_VERSION 5 -#define DEFAULT_INSTANCE_MODE 0 -#define DEFAULT_SESSION_TIMEOUT 60 -#define DEFAULT_ACSURL "http://192.168.1.1:8080/openacs/acs" +#define DEFAULT_RETRY_INITIAL_INTERVAL 60 +#define DEFAULT_RETRY_INTERVAL_MULTIPLIER 2000 +#define DEFAULT_RETRY_MAX_INTERVAL 60 +#define DEFAULT_AMD_VERSION 5 +#define DEFAULT_INSTANCE_MODE 0 +#define DEFAULT_SESSION_TIMEOUT 60 +#define DEFAULT_ACSURL "http://192.168.1.1:8080/openacs/acs" extern char *commandKey; typedef struct env { - unsigned short boot; - unsigned short periodic; - long int max_firmware_size; + unsigned short boot; + unsigned short periodic; + long int max_firmware_size; } env; typedef struct config { - char *acsurl; - char *acs_userid; - char *acs_passwd; - char *acs_ssl_capath; - char *acs_ssl_version; - char *https_ssl_capath; - char *cpe_userid; - char *cpe_passwd; - char *ip; - char *ipv6; - char *interface; - char *ubus_socket; - int connection_request_port; - int period; - int periodic_notify_interval; - int compression; - time_t time; - bool periodic_enable; - bool periodic_notify_enable; - bool insecure_enable; - bool ipv6_enable; - int retry_min_wait_interval; - int retry_interval_multiplier; - bool lw_notification_enable; - char *lw_notification_hostname; - int lw_notification_port; - int amd_version; - int supported_amd_version; - unsigned int instance_mode; - unsigned int session_timeout; - bool http_disable_100continue; + char *acsurl; + char *acs_userid; + char *acs_passwd; + char *acs_ssl_capath; + char *acs_ssl_version; + char *https_ssl_capath; + char *cpe_userid; + char *cpe_passwd; + char *ip; + char *ipv6; + char *interface; + char *ubus_socket; + int connection_request_port; + int period; + int periodic_notify_interval; + int compression; + time_t time; + bool periodic_enable; + bool periodic_notify_enable; + bool insecure_enable; + bool ipv6_enable; + int retry_min_wait_interval; + int retry_interval_multiplier; + bool lw_notification_enable; + char *lw_notification_hostname; + int lw_notification_port; + int amd_version; + int supported_amd_version; + unsigned int instance_mode; + unsigned int session_timeout; + bool http_disable_100continue; } config; struct deviceid { @@ -98,38 +98,38 @@ struct deviceid { }; typedef struct session_status { - time_t last_start_time; - time_t last_end_time; - int last_status; - time_t next_periodic; - time_t next_retry; - unsigned int success_session; - unsigned int failure_session; + time_t last_start_time; + time_t last_end_time; + int last_status; + time_t next_periodic; + time_t next_retry; + unsigned int success_session; + unsigned int failure_session; } session_status; typedef struct cwmp { - struct env env; - struct config conf; - struct deviceid deviceid; - struct list_head head_session_queue; - pthread_mutex_t mutex_session_queue; - struct session *session_send; - bool cwmp_cr_event; - pthread_mutex_t mutex_session_send; - pthread_cond_t threshold_session_send; - pthread_mutex_t mutex_periodic; - pthread_mutex_t mutex_notify_periodic; - pthread_cond_t threshold_periodic; - pthread_cond_t threshold_notify_periodic; - pthread_cond_t threshold_handle_notify; - int count_handle_notify; - int retry_count_session; - struct list_head *head_event_container; - int pid_file; - time_t start_time; - struct session_status session_status; - unsigned int cwmp_id; - int cr_socket_desc; + struct env env; + struct config conf; + struct deviceid deviceid; + struct list_head head_session_queue; + pthread_mutex_t mutex_session_queue; + struct session *session_send; + bool cwmp_cr_event; + pthread_mutex_t mutex_session_send; + pthread_cond_t threshold_session_send; + pthread_mutex_t mutex_periodic; + pthread_mutex_t mutex_notify_periodic; + pthread_cond_t threshold_periodic; + pthread_cond_t threshold_notify_periodic; + pthread_cond_t threshold_handle_notify; + int count_handle_notify; + int retry_count_session; + struct list_head *head_event_container; + int pid_file; + time_t start_time; + struct session_status session_status; + unsigned int cwmp_id; + int cr_socket_desc; } cwmp; enum action @@ -140,35 +140,39 @@ enum action RESTART, }; -enum cwmp_start { - CWMP_START_BOOT = 1, +enum cwmp_start +{ + CWMP_START_BOOT = 1, CWMP_START_PERIODIC = 2 }; -enum cwmp_ret_err { - CWMP_OK, /* No Error */ - CWMP_GEN_ERR, /* General Error */ - CWMP_MEM_ERR, /* Memory Error */ +enum cwmp_ret_err +{ + CWMP_OK, /* No Error */ + CWMP_GEN_ERR, /* General Error */ + CWMP_MEM_ERR, /* Memory Error */ CWMP_MUTEX_ERR, CWMP_RETRY_SESSION }; -enum http_compression { - COMP_NONE, - COMP_GZIP, - COMP_DEFLATE +enum http_compression +{ + COMP_NONE, + COMP_GZIP, + COMP_DEFLATE }; -enum enum_ip_version { - IPv4 = 4, - IPv6 = 6 +enum enum_ip_version +{ + IPv4 = 4, + IPv6 = 6 }; typedef struct rpc { - struct list_head list; - int type; - void *extra_data; - struct list_head *list_set_value_fault; + struct list_head list; + int type; + void *extra_data; + struct list_head *list_set_value_fault; } rpc; struct cwmp_param_fault { @@ -190,7 +194,8 @@ struct cwmp_dm_parameter { char *type; }; -enum amd_version_enum { +enum amd_version_enum +{ AMD_1 = 1, AMD_2, AMD_3, @@ -198,13 +203,13 @@ enum amd_version_enum { AMD_5, }; -enum instance_mode { +enum instance_mode +{ INSTANCE_MODE_NUMBER, INSTANCE_MODE_ALIAS }; -struct cwmp_namespaces -{ +struct cwmp_namespaces { char *soap_env; char *soap_enc; char *xsd; @@ -212,7 +217,8 @@ struct cwmp_namespaces char *cwmp; } ns; -enum rpc_cpe_methods_idx { +enum rpc_cpe_methods_idx +{ RPC_CPE_GET_RPC_METHODS = 1, RPC_CPE_SET_PARAMETER_VALUES, RPC_CPE_GET_PARAMETER_VALUES, @@ -234,8 +240,8 @@ enum rpc_cpe_methods_idx { __RPC_CPE_MAX }; - -enum rpc_acs_methods_idx { +enum rpc_acs_methods_idx +{ RPC_ACS_INFORM = 1, RPC_ACS_GET_RPC_METHODS, RPC_ACS_TRANSFER_COMPLETE, @@ -243,19 +249,22 @@ enum rpc_acs_methods_idx { __RPC_ACS_MAX }; -enum load_type { +enum load_type +{ TYPE_DOWNLOAD = 0, TYPE_SCHEDULE_DOWNLOAD, TYPE_UPLOAD }; -enum dustate_type { +enum dustate_type +{ DU_INSTALL = 1, DU_UPDATE, DU_UNINSTALL }; -enum fault_cpe_idx { +enum fault_cpe_idx +{ FAULT_CPE_NO_FAULT, FAULT_CPE_METHOD_NOT_SUPPORTED, FAULT_CPE_REQUEST_DENIED, @@ -288,7 +297,8 @@ enum fault_cpe_idx { __FAULT_CPE_MAX }; -enum { +enum +{ FAULT_CPE_TYPE_CLIENT, FAULT_CPE_TYPE_SERVER }; @@ -306,125 +316,124 @@ struct rpc_acs_method { int (*extra_clean)(struct session *session, struct rpc *rpc); }; -typedef struct FAULT_CPE -{ - char *CODE; - int ICODE; - int TYPE; - char *DESCRIPTION; +typedef struct FAULT_CPE { + char *CODE; + int ICODE; + int TYPE; + char *DESCRIPTION; } FAULT_CPE; typedef struct schedule_inform { - struct list_head list; - time_t scheduled_time; - char *commandKey; + struct list_head list; + time_t scheduled_time; + char *commandKey; } schedule_inform; typedef struct download { - struct list_head list; - time_t scheduled_time; - int file_size; - char *command_key; - char *file_type; - char *url; - char *username; - char *password; + struct list_head list; + time_t scheduled_time; + int file_size; + char *command_key; + char *file_type; + char *url; + char *username; + char *password; } download; typedef struct timewindow { - time_t windowstart; - time_t windowend; - char *windowmode; - char *usermessage; - int maxretries; -}timewindow; + time_t windowstart; + time_t windowend; + char *windowmode; + char *usermessage; + int maxretries; +} timewindow; typedef struct timeinterval { - time_t windowstart; - time_t windowend; - int maxretries; -}timeinterval; + time_t windowstart; + time_t windowend; + int maxretries; +} timeinterval; typedef struct schedule_download { - struct list_head list; + struct list_head list; //time_t scheduled_time; - int file_size; - char *command_key; - char *file_type; - char *url; - char *username; - char *password; - struct timewindow timewindowstruct[2]; + int file_size; + char *command_key; + char *file_type; + char *url; + char *username; + char *password; + struct timewindow timewindowstruct[2]; } schedule_download; typedef struct apply_schedule_download { - struct list_head list; - char *start_time; - char *command_key; - char *file_type; - struct timeinterval timeintervals[2]; + struct list_head list; + char *start_time; + char *command_key; + char *file_type; + struct timeinterval timeintervals[2]; } apply_schedule_download; typedef struct change_du_state { - struct list_head list; - time_t timeout; - char *command_key; - struct list_head list_operation; + struct list_head list; + time_t timeout; + char *command_key; + struct list_head list_operation; } change_du_state; typedef struct operations { - struct list_head list; - int type; - char *url; - char *uuid; - char *version; - char *username; - char *password; - char *executionenvref; + struct list_head list; + int type; + char *url; + char *uuid; + char *version; + char *username; + char *password; + char *executionenvref; } operations; typedef struct upload { - struct list_head list; - time_t scheduled_time; - char *command_key; - char *file_type; - char *url; - char *username; - char *password; - char *f_instance; + struct list_head list; + time_t scheduled_time; + char *command_key; + char *file_type; + char *url; + char *username; + char *password; + char *f_instance; } upload; typedef struct transfer_complete { - int fault_code; - char *command_key; - char *start_time; - char *complete_time; - char *old_software_version; - int type; + int fault_code; + char *command_key; + char *start_time; + char *complete_time; + char *old_software_version; + int type; } transfer_complete; typedef struct du_state_change_complete { - char *command_key; - time_t timeout; - struct list_head list_opresult; + char *command_key; + time_t timeout; + struct list_head list_opresult; } du_state_change_complete; typedef struct opresult { - struct list_head list; - char *uuid; - char *du_ref; - char *version; - char *current_state; - bool resolved; - char *execution_unit_ref; - char *start_time; - char *complete_time; - int fault; + struct list_head list; + char *uuid; + char *du_ref; + char *version; + char *current_state; + bool resolved; + char *execution_unit_ref; + char *start_time; + char *complete_time; + int fault; } opresult; typedef struct opfault { - int fault_code; - char *fault_string; + int fault_code; + char *fault_string; } opfault; extern struct cwmp cwmp_main; @@ -432,15 +441,21 @@ int cwmp_exit(void); void add_dm_parameter_tolist(struct list_head *head, char *param_name, char *param_data, char *param_type); void delete_dm_parameter_fromlist(struct cwmp_dm_parameter *dm_parameter); void free_dm_parameter_all_fromlist(struct list_head *list); -int global_env_init (int argc, char** argv, struct env *env); +int global_env_init(int argc, char **argv, struct env *env); void cwmp_add_list_fault_param(char *param, int fault, struct list_head *list_set_value_fault); void cwmp_del_list_fault_param(struct cwmp_param_fault *param_fault); -void cwmp_add_list_param_value(char *param, char* value, struct list_head *list_param_value); +void cwmp_add_list_param_value(char *param, char *value, struct list_head *list_param_value); void cwmp_del_list_param_value(struct cwmp_param_value *param_value); void cwmp_free_all_list_param_value(struct list_head *list_param_value); #ifndef FREE -#define FREE(x) do { if (x) {free(x); x = NULL;} } while (0) +#define FREE(x) \ + do { \ + if (x) { \ + free(x); \ + x = NULL; \ + } \ + } while (0) #endif #endif diff --git a/inc/config.h b/inc/config.h index 31e37e1..9243c2e 100755 --- a/inc/config.h +++ b/inc/config.h @@ -16,12 +16,12 @@ #include #include "common.h" -extern pthread_mutex_t mutex_config_load; +extern pthread_mutex_t mutex_config_load; int get_amd_version_config(); int get_instance_mode_config(); int get_session_timeout_config(); int cwmp_config_reload(struct cwmp *cwmp); -int global_conf_init (struct config *conf); +int global_conf_init(struct config *conf); int cwmp_get_deviceid(struct cwmp *cwmp); #endif diff --git a/inc/cwmp.h b/inc/cwmp.h index 2f1d913..a58cb77 100644 --- a/inc/cwmp.h +++ b/inc/cwmp.h @@ -32,5 +32,5 @@ #include "notifications.h" #include "cwmp_uci.h" -int cwmp_rpc_cpe_handle_message (struct session *session, struct rpc *rpc_cpe); +int cwmp_rpc_cpe_handle_message(struct session *session, struct rpc *rpc_cpe); #endif /* _CWMP_H__ */ diff --git a/inc/cwmp_json.h b/inc/cwmp_json.h index 815ef5d..097056a 100644 --- a/inc/cwmp_json.h +++ b/inc/cwmp_json.h @@ -20,7 +20,11 @@ struct cwmp_json_arg { }; #define CWMP_JSON_ARGS (struct cwmp_json_arg[]) -#define FREE_JSON(jobj) if (jobj) { json_object_put(jobj); jobj = NULL;} +#define FREE_JSON(jobj) \ + if (jobj) { \ + json_object_put(jobj); \ + jobj = NULL; \ + } int cwmp_handle_downloadFault(char *msg); int cwmp_handle_uploadFault(char *msg); int cwmp_handle_dustate_changeFault(char *msg); @@ -33,12 +37,12 @@ int cwmp_handle_setParamAttributes(char *msg); int cwmp_handle_addObject(char *msg); int cwmp_handle_delObject(char *msg); void cwmp_json_fprintf(FILE *fp, int argc, struct cwmp_json_arg cwmp_arg[]); -void cwmp_json_get_string(json_object *obj, char* key, char** value); +void cwmp_json_get_string(json_object *obj, char *key, char **value); void cwmp_json_obj_init(char *str, json_object **obj); void cwmp_json_obj_clean(json_object **obj); -#define foreach_jsonobj_in_array(param_obj, parameters) \ +#define foreach_jsonobj_in_array(param_obj, parameters) \ int k, array_length = json_object_array_length(parameters); \ - for (k=0, param_obj = json_object_array_get_idx(parameters, 0); k< array_length; k++, param_obj = json_object_array_get_idx(parameters, k)) \ + for (k = 0, param_obj = json_object_array_get_idx(parameters, 0); k < array_length; k++, param_obj = json_object_array_get_idx(parameters, k)) #endif /* _JSHN_H__ */ diff --git a/inc/cwmp_kernel.h b/inc/cwmp_kernel.h index dc0c862..ff38909 100644 --- a/inc/cwmp_kernel.h +++ b/inc/cwmp_kernel.h @@ -1,8 +1,8 @@ -#define NETLINK_MAX_PAYLOAD 1024 -#define NETLINK_USER 31 -#define NETLINK_CWMP_ID "NETLINK_CWMP_ID" -#define NETLINK_END_DATA "END_DATA" -#define NETLINK_NULL "NULL" +#define NETLINK_MAX_PAYLOAD 1024 +#define NETLINK_USER 31 +#define NETLINK_CWMP_ID "NETLINK_CWMP_ID" +#define NETLINK_END_DATA "END_DATA" +#define NETLINK_NULL "NULL" -int kernel_api_cwmp_value_change_call (int count, ...); +int kernel_api_cwmp_value_change_call(int count, ...); diff --git a/inc/cwmp_time.h b/inc/cwmp_time.h index f7462e5..afc43ac 100644 --- a/inc/cwmp_time.h +++ b/inc/cwmp_time.h @@ -12,7 +12,7 @@ #ifndef CWMP_TIME_H_ #define CWMP_TIME_H_ -char * mix_get_time(void); -char * mix_get_time_of(time_t t_time); +char *mix_get_time(void); +char *mix_get_time_of(time_t t_time); #endif /* SRC_INC_CWMP_TIME_H_ */ diff --git a/inc/cwmp_uci.h b/inc/cwmp_uci.h index d7ee50e..5031657 100644 --- a/inc/cwmp_uci.h +++ b/inc/cwmp_uci.h @@ -14,45 +14,44 @@ #include - //struct uci_context *cwmp_uci_ctx = ((void *)0); -#define UCI_DHCP_DISCOVERY_PATH "cwmp.acs.dhcp_discovery" -#define UCI_ACS_URL_PATH "cwmp.acs.url" -#define UCI_PERIODIC_INFORM_TIME_PATH "cwmp.acs.periodic_inform_time" -#define UCI_PERIODIC_INFORM_INTERVAL_PATH "cwmp.acs.periodic_inform_interval" -#define UCI_PERIODIC_INFORM_ENABLE_PATH "cwmp.acs.periodic_inform_enable" -#define UCI_ACS_USERID_PATH "cwmp.acs.userid" -#define UCI_ACS_PASSWD_PATH "cwmp.acs.passwd" -#define UCI_ACS_PARAMETERKEY_PATH "cwmp.acs.ParameterKey" -#define UCI_ACS_SSL_CAPATH "cwmp.acs.ssl_capath" -#define UCI_HTTPS_SSL_CAPATH "cwmp.acs.https_ssl_capath" -#define UCI_ACS_INSECURE_ENABLE "cwmp.acs.insecure_enable" -#define UCI_ACS_IPV6_ENABLE "cwmp.acs.ipv6_enable" -#define UCI_ACS_SSL_VERSION "cwmp.acs.ssl_version" -#define UCI_ACS_COMPRESSION "cwmp.acs.compression" -#define UCI_ACS_RETRY_MIN_WAIT_INTERVAL "cwmp.acs.retry_min_wait_interval" -#define HTTP_DISABLE_100CONTINUE "cwmp.acs.http_disable_100continue" -#define UCI_ACS_RETRY_INTERVAL_MULTIPLIER "cwmp.acs.retry_interval_multiplier" -#define UCI_LOG_SEVERITY_PATH "cwmp.cpe.log_severity" -#define UCI_CPE_USERID_PATH "cwmp.cpe.userid" -#define UCI_CPE_PASSWD_PATH "cwmp.cpe.passwd" -#define UCI_CPE_INTERFACE_PATH "cwmp.cpe.interface" -#define UCI_CPE_UBUS_SOCKET_PATH "cwmp.cpe.ubus_socket" -#define UCI_CPE_PORT_PATH "cwmp.cpe.port" -#define UCI_CPE_LOG_FILE_NAME "cwmp.cpe.log_file_name" -#define UCI_CPE_LOG_MAX_SIZE "cwmp.cpe.log_max_size" -#define UCI_CPE_ENABLE_STDOUT_LOG "cwmp.cpe.log_to_console" -#define UCI_CPE_ENABLE_FILE_LOG "cwmp.cpe.log_to_file" -#define UCI_CPE_AMD_VERSION "cwmp.cpe.amd_version" -#define UCI_CPE_INSTANCE_MODE "cwmp.cpe.instance_mode" -#define UCI_CPE_SESSION_TIMEOUT "cwmp.cpe.session_timeout" -#define UCI_CPE_EXEC_DOWNLOAD "cwmp.cpe.exec_download" -#define UCI_CPE_NOTIFY_PERIODIC_ENABLE "cwmp.cpe.periodic_notify_enable" -#define UCI_CPE_NOTIFY_PERIOD "cwmp.cpe.periodic_notify_interval" -#define LW_NOTIFICATION_ENABLE "cwmp.lwn.enable" -#define LW_NOTIFICATION_HOSTNAME "cwmp.lwn.hostname" -#define LW_NOTIFICATION_PORT "cwmp.lwn.port" -#define UCI_DHCP_ACS_URL "cwmp.acs.dhcp_url" +#define UCI_DHCP_DISCOVERY_PATH "cwmp.acs.dhcp_discovery" +#define UCI_ACS_URL_PATH "cwmp.acs.url" +#define UCI_PERIODIC_INFORM_TIME_PATH "cwmp.acs.periodic_inform_time" +#define UCI_PERIODIC_INFORM_INTERVAL_PATH "cwmp.acs.periodic_inform_interval" +#define UCI_PERIODIC_INFORM_ENABLE_PATH "cwmp.acs.periodic_inform_enable" +#define UCI_ACS_USERID_PATH "cwmp.acs.userid" +#define UCI_ACS_PASSWD_PATH "cwmp.acs.passwd" +#define UCI_ACS_PARAMETERKEY_PATH "cwmp.acs.ParameterKey" +#define UCI_ACS_SSL_CAPATH "cwmp.acs.ssl_capath" +#define UCI_HTTPS_SSL_CAPATH "cwmp.acs.https_ssl_capath" +#define UCI_ACS_INSECURE_ENABLE "cwmp.acs.insecure_enable" +#define UCI_ACS_IPV6_ENABLE "cwmp.acs.ipv6_enable" +#define UCI_ACS_SSL_VERSION "cwmp.acs.ssl_version" +#define UCI_ACS_COMPRESSION "cwmp.acs.compression" +#define UCI_ACS_RETRY_MIN_WAIT_INTERVAL "cwmp.acs.retry_min_wait_interval" +#define HTTP_DISABLE_100CONTINUE "cwmp.acs.http_disable_100continue" +#define UCI_ACS_RETRY_INTERVAL_MULTIPLIER "cwmp.acs.retry_interval_multiplier" +#define UCI_LOG_SEVERITY_PATH "cwmp.cpe.log_severity" +#define UCI_CPE_USERID_PATH "cwmp.cpe.userid" +#define UCI_CPE_PASSWD_PATH "cwmp.cpe.passwd" +#define UCI_CPE_INTERFACE_PATH "cwmp.cpe.interface" +#define UCI_CPE_UBUS_SOCKET_PATH "cwmp.cpe.ubus_socket" +#define UCI_CPE_PORT_PATH "cwmp.cpe.port" +#define UCI_CPE_LOG_FILE_NAME "cwmp.cpe.log_file_name" +#define UCI_CPE_LOG_MAX_SIZE "cwmp.cpe.log_max_size" +#define UCI_CPE_ENABLE_STDOUT_LOG "cwmp.cpe.log_to_console" +#define UCI_CPE_ENABLE_FILE_LOG "cwmp.cpe.log_to_file" +#define UCI_CPE_AMD_VERSION "cwmp.cpe.amd_version" +#define UCI_CPE_INSTANCE_MODE "cwmp.cpe.instance_mode" +#define UCI_CPE_SESSION_TIMEOUT "cwmp.cpe.session_timeout" +#define UCI_CPE_EXEC_DOWNLOAD "cwmp.cpe.exec_download" +#define UCI_CPE_NOTIFY_PERIODIC_ENABLE "cwmp.cpe.periodic_notify_enable" +#define UCI_CPE_NOTIFY_PERIOD "cwmp.cpe.periodic_notify_interval" +#define LW_NOTIFICATION_ENABLE "cwmp.lwn.enable" +#define LW_NOTIFICATION_HOSTNAME "cwmp.lwn.hostname" +#define LW_NOTIFICATION_PORT "cwmp.lwn.port" +#define UCI_DHCP_ACS_URL "cwmp.acs.dhcp_url" #define UCI_CONFIG_DIR "/etc/config/" #define LIB_DB_CONFIG "/lib/db/config" @@ -68,7 +67,8 @@ typedef enum uci_config_action { CWMP_CMD_DEL, } uci_config_action; -enum uci_paths_types { +enum uci_paths_types +{ UCI_STANDARD_CONFIG, UCI_DB_CONFIG, UCI_BOARD_DB_CONFIG, @@ -76,7 +76,8 @@ enum uci_paths_types { UCI_BBFDM_CONFIG }; -enum cwmp_uci_cmp { +enum cwmp_uci_cmp +{ CWMP_CMP_SECTION, CWMP_CMP_OPTION_EQUAL, CWMP_CMP_OPTION_REGEX, @@ -86,15 +87,15 @@ enum cwmp_uci_cmp { CWMP_CMP_FILTER_FUNC }; -enum cwmp_uci_walk { +enum cwmp_uci_walk +{ CWMP_GET_FIRST_SECTION, CWMP_GET_NEXT_SECTION }; - struct config_uci_list { - struct list_head list; - char *value; + struct list_head list; + char *value; }; struct uci_paths { @@ -106,22 +107,17 @@ int cwmp_uci_init(int uci_path_type); void cwmp_uci_exit(void); int cwmp_uci_lookup_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *package, char *section, char *option, char *value); int cwmp_uci_get_option_value_list(char *package, char *section, char *option, struct list_head *list); -int uci_get_state_value(char *cmd,char **value); +int uci_get_state_value(char *cmd, char **value); int uci_set_state_value(char *cmd); int uci_set_value(char *cmd); -int uci_get_value(char *cmd,char **value); -char* cwmp_db_get_value_string(char *package, char *section, char *option); -struct uci_section *cwmp_uci_walk_section (char *package, char *stype, void *arg1, void *arg2, int cmp , int (*filter)(struct uci_section *s, void *value), struct uci_section *prev_section, int walk); +int uci_get_value(char *cmd, char **value); +char *cwmp_db_get_value_string(char *package, char *section, char *option); +struct uci_section *cwmp_uci_walk_section(char *package, char *stype, void *arg1, void *arg2, int cmp, int (*filter)(struct uci_section *s, void *value), struct uci_section *prev_section, int walk); int cwmp_uci_get_value_by_section_string(struct uci_section *s, char *option, char **value); int cwmp_uci_get_option_value_string(char *package, char *section, char *option, int uci_type, char **value); #define cwmp_uci_path_foreach_option_eq(package, stype, option, val, section) \ - for (section = cwmp_uci_walk_section(package, stype, option, val, CWMP_CMP_OPTION_EQUAL, NULL, NULL, CWMP_GET_FIRST_SECTION); \ - section != NULL; \ - section = cwmp_uci_walk_section(package, stype, option, val, CWMP_CMP_OPTION_EQUAL, NULL, section, CWMP_GET_NEXT_SECTION)) + for (section = cwmp_uci_walk_section(package, stype, option, val, CWMP_CMP_OPTION_EQUAL, NULL, NULL, CWMP_GET_FIRST_SECTION); section != NULL; section = cwmp_uci_walk_section(package, stype, option, val, CWMP_CMP_OPTION_EQUAL, NULL, section, CWMP_GET_NEXT_SECTION)) -#define cwmp_uci_path_foreach_sections(package, stype, section) \ - for (section = cwmp_uci_walk_section(package, stype, NULL, NULL, CMP_SECTION, NULL, NULL, GET_FIRST_SECTION); \ - section != NULL; \ - section = cwmp_uci_walk_section(package, stype, NULL, NULL, CMP_SECTION, NULL, section, GET_NEXT_SECTION)) +#define cwmp_uci_path_foreach_sections(package, stype, section) for (section = cwmp_uci_walk_section(package, stype, NULL, NULL, CMP_SECTION, NULL, NULL, GET_FIRST_SECTION); section != NULL; section = cwmp_uci_walk_section(package, stype, NULL, NULL, CMP_SECTION, NULL, section, GET_NEXT_SECTION)) #endif diff --git a/inc/cwmp_zlib.h b/inc/cwmp_zlib.h index 8a8f63c..acafa16 100644 --- a/inc/cwmp_zlib.h +++ b/inc/cwmp_zlib.h @@ -12,6 +12,6 @@ #ifndef __ZLIB_H #define __ZLIB_H -int zlib_compress (char *message, unsigned char **zmsg, int *zlen, int type); +int zlib_compress(char *message, unsigned char **zmsg, int *zlen, int type); #endif diff --git a/inc/datamodel_interface.h b/inc/datamodel_interface.h index 1bd7fdd..87cb08c 100644 --- a/inc/datamodel_interface.h +++ b/inc/datamodel_interface.h @@ -3,7 +3,6 @@ #include "common.h" #include "cwmp_json.h" - #define DM_ROOT_OBJ "Device." extern bool transaction_started; extern int transaction_id; @@ -12,7 +11,8 @@ extern json_object *actual_global_json_obj; extern json_object *old_list_notify; extern json_object *actual_list_notify; -enum notify_type { +enum notify_type +{ OLD_LIST_NOTIFY, ACTUAL_LIST_NOTIFY }; @@ -21,14 +21,14 @@ int cwmp_transaction_start(char *app); int cwmp_transaction_commit(); int cwmp_transaction_abort(); int cwmp_transaction_status(); -char* cwmp_get_parameter_values(char *parameter_name, json_object **parameters); -char* cwmp_set_parameter_value(char* parameter_name, char* value, char* parameter_key, int* flag); -char* cwmp_set_multiple_parameters_values(struct list_head parameters_values_list, char* parameter_key, int* flag, json_object **faults_array); -char* cwmp_add_object(char* object_name, char* key, char **instance); -char* cwmp_delete_object(char* object_name, char* key); -char* cwmp_get_parameter_names(char* object_name, bool next_level, json_object **parameters); -char* cwmp_get_parameter_attributes(char* parameter_name, json_object **parameters); -char* cwmp_set_parameter_attributes(char* parameter_name, char* notification); +char *cwmp_get_parameter_values(char *parameter_name, json_object **parameters); +char *cwmp_set_parameter_value(char *parameter_name, char *value, char *parameter_key, int *flag); +char *cwmp_set_multiple_parameters_values(struct list_head parameters_values_list, char *parameter_key, int *flag, json_object **faults_array); +char *cwmp_add_object(char *object_name, char *key, char **instance); +char *cwmp_delete_object(char *object_name, char *key); +char *cwmp_get_parameter_names(char *object_name, bool next_level, json_object **parameters); +char *cwmp_get_parameter_attributes(char *parameter_name, json_object **parameters); +char *cwmp_set_parameter_attributes(char *parameter_name, char *notification); int cwmp_update_enabled_list_notify(int instance_moden, int notify_type); #endif /* SRC_DATAMODELIFACE_H_ */ diff --git a/inc/diagnostic.h b/inc/diagnostic.h index 08e1bbd..fe2e1e9 100644 --- a/inc/diagnostic.h +++ b/inc/diagnostic.h @@ -12,7 +12,7 @@ #ifndef __DIAGNOSTIC__H #define __DIAGNOSTIC__H -bool set_diagnostic_parameter_structure_value(char *parameter_name, char* value); +bool set_diagnostic_parameter_structure_value(char *parameter_name, char *value); int cwmp_download_diagnostics(); int cwmp_upload_diagnostics(); diff --git a/inc/digestauth.h b/inc/digestauth.h index d6a1483..96d29ef 100644 --- a/inc/digestauth.h +++ b/inc/digestauth.h @@ -9,7 +9,6 @@ * */ - #ifndef DIGESTAUTH_H_ #define DIGESTAUTH_H_ @@ -28,11 +27,8 @@ */ #define MHD_INVALID_NONCE -1 -int http_digest_auth_fail_response(FILE *fp, const char *http_method, - const char *url, const char *realm, const char *opaque); +int http_digest_auth_fail_response(FILE *fp, const char *http_method, const char *url, const char *realm, const char *opaque); -int http_digest_auth_check(const char *http_method, const char *url, - const char *header, const char *realm, const char *username, - const char *password, unsigned int nonce_timeout); +int http_digest_auth_check(const char *http_method, const char *url, const char *header, const char *realm, const char *username, const char *password, unsigned int nonce_timeout); #endif /* DIGESTAUTH_H_ */ diff --git a/inc/event.h b/inc/event.h index 4088a57..2ec8687 100644 --- a/inc/event.h +++ b/inc/event.h @@ -13,33 +13,35 @@ #define EVENT_H_ #include "common.h" typedef struct event_container { - struct list_head list; - int code; /* required element of type xsd:string */ - char *command_key; - struct list_head head_dm_parameter; - int id; + struct list_head list; + int code; /* required element of type xsd:string */ + char *command_key; + struct list_head head_dm_parameter; + int id; } event_container; -typedef struct EVENT_CONST_STRUCT -{ - char *CODE; - unsigned int TYPE; - unsigned short RETRY; +typedef struct EVENT_CONST_STRUCT { + char *CODE; + unsigned int TYPE; + unsigned short RETRY; } EVENT_CONST_STRUCT; -enum event_retry_after_enum { +enum event_retry_after_enum +{ EVENT_RETRY_AFTER_TRANSMIT_FAIL = 0x1, EVENT_RETRY_AFTER_REBOOT = 0x2, EVENT_RETRY_AFTER_BOOTSTRAP = 0x4 }; -enum event_type_enum { +enum event_type_enum +{ EVENT_TYPE_SINGLE = 0x0, EVENT_TYPE_MULTIPLE = 0x1 }; -enum event_idx_enum { +enum event_idx_enum +{ EVENT_IDX_0BOOTSTRAP, EVENT_IDX_1BOOT, EVENT_IDX_2PERIODIC, @@ -61,18 +63,16 @@ enum event_idx_enum { __EVENT_IDX_MAX }; -extern const struct EVENT_CONST_STRUCT EVENT_CONST [__EVENT_IDX_MAX]; +extern const struct EVENT_CONST_STRUCT EVENT_CONST[__EVENT_IDX_MAX]; - - -struct event_container *cwmp_add_event_container (struct cwmp *cwmp, int event_idx, char *command_key); +struct event_container *cwmp_add_event_container(struct cwmp *cwmp, int event_idx, char *command_key); int event_remove_all_event_container(struct session *session, int rem_from); int event_remove_noretry_event_container(struct session *session, struct cwmp *cwmp); -void cwmp_save_event_container (struct event_container *event_container); -void *thread_event_periodic (void *v); +void cwmp_save_event_container(struct event_container *event_container); +void *thread_event_periodic(void *v); void connection_request_ip_value_change(struct cwmp *cwmp, int version); void connection_request_port_value_change(struct cwmp *cwmp, int port); int cwmp_get_int_event_code(char *code); bool event_exist_in_list(struct cwmp *cwmp, int event); -int cwmp_root_cause_events (struct cwmp *cwmp); +int cwmp_root_cause_events(struct cwmp *cwmp); #endif /* SRC_INC_EVENT_H_ */ diff --git a/inc/external.h b/inc/external.h index 7b25f01..8ca3908 100644 --- a/inc/external.h +++ b/inc/external.h @@ -15,17 +15,17 @@ #define _FREECWMP_EXTERNAL_H__ #include -void external_du_change_stateFaultResp (char *fault_code, char *version, char *name, char *uuid, char *env); -void external_downloadFaultResp (char *fault_code); -void external_fetch_downloadFaultResp (char **fault_code); -void external_uploadFaultResp (char *fault_code); -void external_fetch_uploadFaultResp (char **fault_code); -void external_uninstallFaultResp (char *fault_code); -void external_fetch_uninstallFaultResp (char **fault); +void external_du_change_stateFaultResp(char *fault_code, char *version, char *name, char *uuid, char *env); +void external_downloadFaultResp(char *fault_code); +void external_fetch_downloadFaultResp(char **fault_code); +void external_uploadFaultResp(char *fault_code); +void external_fetch_uploadFaultResp(char **fault_code); +void external_uninstallFaultResp(char *fault_code); +void external_fetch_uninstallFaultResp(char **fault); int external_simple(char *command, char *arg, int c); -int external_download(char *url, char *size, char *type, char *user, char *pass,time_t c); +int external_download(char *url, char *size, char *type, char *user, char *pass, time_t c); int external_upload(char *url, char *type, char *user, char *pass, char *name); -int external_apply(char *action, char *arg,time_t c); +int external_apply(char *action, char *arg, time_t c); void external_fetch_du_change_stateFaultResp(char **fault, char **version, char **name, char **uuid, char **env); int external_change_du_state_install(char *url, char *uuid, char *user, char *pass, char *env); int external_change_du_state_update(char *uuid, char *url, char *user, char *pass); @@ -37,4 +37,3 @@ void external_init(); void external_exit(); #endif - diff --git a/inc/http.h b/inc/http.h index 24dcb56..6b9cefb 100644 --- a/inc/http.h +++ b/inc/http.h @@ -15,19 +15,17 @@ extern char *fc_cookies; #define HTTP_TIMEOUT 30 -struct http_client -{ +struct http_client { struct curl_slist *header_list; char *url; }; int http_client_init(struct cwmp *cwmp); void http_client_exit(void); -int http_send_message(struct cwmp *cwmp, char *msg_out, int msg_out_len,char **msg_in); +int http_send_message(struct cwmp *cwmp, char *msg_out, int msg_out_len, char **msg_in); void http_server_init(void); void http_server_listen(void); void http_success_cr(); #endif - diff --git a/inc/log.h b/inc/log.h index 5ae2f21..0cffc49 100644 --- a/inc/log.h +++ b/inc/log.h @@ -13,7 +13,8 @@ #ifndef _LOG_H_ #define _LOG_H_ -enum log_severity_enum { +enum log_severity_enum +{ EMERG, ALERT, CRITIC, @@ -24,66 +25,68 @@ enum log_severity_enum { DEBUG }; -enum log_xmlmsg_enum { +enum log_xmlmsg_enum +{ XML_MSG_IN, XML_MSG_OUT }; void puts_log(int severity, const char *fmt, ...); void puts_log_xmlmsg(int severity, char *msg, int msgtype); -int log_set_log_file_name (char *value); +int log_set_log_file_name(char *value); int log_set_file_max_size(char *value); int log_set_on_console(char *value); int log_set_on_file(char *value); -int log_set_severity_idx (char *value); -#define DEFAULT_LOG_FILE_SIZE 10240 -#define DEFAULT_LOG_FILE_NAME "/var/log/icwmpd.log" -#define DEFAULT_LOG_SEVERITY INFO +int log_set_severity_idx(char *value); +#define DEFAULT_LOG_FILE_SIZE 10240 +#define DEFAULT_LOG_FILE_NAME "/var/log/icwmpd.log" +#define DEFAULT_LOG_SEVERITY INFO #ifdef WITH_CWMP_DEBUG -# ifndef CWMP_LOG -# define CWMP_LOG(SEV,MESSAGE,args...) puts_log(SEV,MESSAGE,##args); -# define CWMP_LOG_XML_MSG puts_log_xmlmsg -# endif +#ifndef CWMP_LOG +#define CWMP_LOG(SEV, MESSAGE, args...) puts_log(SEV, MESSAGE, ##args); +#define CWMP_LOG_XML_MSG puts_log_xmlmsg +#endif #else -# define CWMP_LOG(SEV,MESSAGE,args...) -# define CWMP_LOG_XML_MSG(X, Y, Z) +#define CWMP_LOG(SEV, MESSAGE, args...) +#define CWMP_LOG_XML_MSG(X, Y, Z) #endif #ifdef WITH_DEV_DEBUG -# ifndef DD -# define DD(SEV,MESSAGE,args...) puts_log(SEV,MESSAGE,##args); -# endif +#ifndef DD +#define DD(SEV, MESSAGE, args...) puts_log(SEV, MESSAGE, ##args); +#endif #else -# define DD(SEV,MESSAGE,args...) +#define DD(SEV, MESSAGE, args...) #endif #ifndef DETECT_CRASH -#define DETECT_CRASH(MESSAGE,args...) { \ - const char *A[] = {MESSAGE}; \ - printf("DETECT_CRASH: %s %s %d\n",__FUNCTION__,__FILE__,__LINE__); fflush(stdout);\ - if(sizeof(A) > 0) \ - printf(*A,##args); \ - sleep(1); \ -} +#define DETECT_CRASH(MESSAGE, args...) \ + { \ + const char *A[] = { MESSAGE }; \ + printf("DETECT_CRASH: %s %s %d\n", __FUNCTION__, __FILE__, __LINE__); \ + fflush(stdout); \ + if (sizeof(A) > 0) \ + printf(*A, ##args); \ + sleep(1); \ + } #endif #ifndef TRACE #define TRACE_TYPE 0 -static inline void trace_empty_func() -{ -} +static inline void trace_empty_func() {} #if TRACE_TYPE == 2 -#define TRACE(MESSAGE,args...) do { \ - const char *A[] = {MESSAGE}; \ - fprintf(stderr, "TRACE: %s %s %d ",__FUNCTION__,__FILE__,__LINE__); \ - if(sizeof(A) > 0) \ - fprintf(stderr, *A,##args); \ - fprintf(stderr, "\n"); \ - fflush(stderr); \ -} while(0) +#define TRACE(MESSAGE, args...) \ + do { \ + const char *A[] = { MESSAGE }; \ + fprintf(stderr, "TRACE: %s %s %d ", __FUNCTION__, __FILE__, __LINE__); \ + if (sizeof(A) > 0) \ + fprintf(stderr, *A, ##args); \ + fprintf(stderr, "\n"); \ + fflush(stderr); \ + } while (0) #elif TRACE_TYPE == 1 -#define TRACE(MESSAGE, ...) printf(MESSAGE, ## __VA_ARGS__) +#define TRACE(MESSAGE, ...) printf(MESSAGE, ##__VA_ARGS__) #else #define TRACE(MESSAGE, ...) trace_empty_func() #endif diff --git a/inc/md5.h b/inc/md5.h index dd68ba6..ea700c0 100644 --- a/inc/md5.h +++ b/inc/md5.h @@ -23,30 +23,22 @@ #include #include - #ifdef WORDS_BIGENDIAN #define HIGHFIRST #endif #define MD5_DIGEST_SIZE 16 -struct MD5Context -{ - uint32_t buf[4]; - uint32_t bits[2]; - unsigned char in[64]; +struct MD5Context { + uint32_t buf[4]; + uint32_t bits[2]; + unsigned char in[64]; }; +void MD5Init(struct MD5Context *ctx); -void -MD5Init(struct MD5Context *ctx); +void MD5Update(struct MD5Context *ctx, const void *buf, unsigned len); -void -MD5Update(struct MD5Context *ctx, - const void *buf, - unsigned len); - -void MD5Final(unsigned char digest[MD5_DIGEST_SIZE], - struct MD5Context *ctx); +void MD5Final(unsigned char digest[MD5_DIGEST_SIZE], struct MD5Context *ctx); #endif /* !MD5_H */ diff --git a/inc/notifications.h b/inc/notifications.h index 0f70950..a29048d 100644 --- a/inc/notifications.h +++ b/inc/notifications.h @@ -18,7 +18,8 @@ #include "datamodel_interface.h" #include "xml.h" -enum NOTIFICATION_STATUS { +enum NOTIFICATION_STATUS +{ NOTIF_NONE = 0, NOTIF_PASSIVE = 1 << 1, NOTIF_ACTIVE = 1 << 2, @@ -35,7 +36,7 @@ extern pthread_mutex_t mutex_value_change; int cwmp_update_enabled_notify_file(); int check_value_change(void); void sotfware_version_value_change(struct cwmp *cwmp, struct transfer_complete *p); -void *thread_periodic_check_notify (void *v); +void *thread_periodic_check_notify(void *v); void send_active_value_change(void); void add_list_value_change(char *param_name, char *param_data, char *param_type); void add_lw_list_value_change(char *param_name, char *param_data, char *param_type); diff --git a/inc/session.h b/inc/session.h index 34c8763..b6f10df 100644 --- a/inc/session.h +++ b/inc/session.h @@ -16,50 +16,52 @@ #include "common.h" typedef struct session { - struct list_head list; - struct list_head head_event_container; - struct list_head head_rpc_cpe; - struct list_head head_rpc_acs; - mxml_node_t *tree_in; - mxml_node_t *tree_out; - mxml_node_t *body_in; - bool hold_request; - bool digest_auth; - int fault_code; - int error; + struct list_head list; + struct list_head head_event_container; + struct list_head head_rpc_cpe; + struct list_head head_rpc_acs; + mxml_node_t *tree_in; + mxml_node_t *tree_out; + mxml_node_t *body_in; + bool hold_request; + bool digest_auth; + int fault_code; + int error; } session; -enum end_session_enum { +enum end_session_enum +{ END_SESSION_REBOOT = 1, - END_SESSION_EXTERNAL_ACTION = 1<<1, - END_SESSION_RELOAD = 1<<2, - END_SESSION_FACTORY_RESET = 1<<3, - END_SESSION_IPPING_DIAGNOSTIC = 1<<4, - END_SESSION_DOWNLOAD_DIAGNOSTIC = 1<<5, - END_SESSION_UPLOAD_DIAGNOSTIC = 1<<6, - END_SESSION_X_FACTORY_RESET_SOFT = 1<<7, - END_SESSION_NSLOOKUP_DIAGNOSTIC = 1<<8, - END_SESSION_TRACEROUTE_DIAGNOSTIC = 1<<9, - END_SESSION_UDPECHO_DIAGNOSTIC = 1<<10, - END_SESSION_SERVERSELECTION_DIAGNOSTIC = 1<<11, - END_SESSION_SET_NOTIFICATION_UPDATE = 1<<12, + END_SESSION_EXTERNAL_ACTION = 1 << 1, + END_SESSION_RELOAD = 1 << 2, + END_SESSION_FACTORY_RESET = 1 << 3, + END_SESSION_IPPING_DIAGNOSTIC = 1 << 4, + END_SESSION_DOWNLOAD_DIAGNOSTIC = 1 << 5, + END_SESSION_UPLOAD_DIAGNOSTIC = 1 << 6, + END_SESSION_X_FACTORY_RESET_SOFT = 1 << 7, + END_SESSION_NSLOOKUP_DIAGNOSTIC = 1 << 8, + END_SESSION_TRACEROUTE_DIAGNOSTIC = 1 << 9, + END_SESSION_UDPECHO_DIAGNOSTIC = 1 << 10, + END_SESSION_SERVERSELECTION_DIAGNOSTIC = 1 << 11, + END_SESSION_SET_NOTIFICATION_UPDATE = 1 << 12, END_SESSION_TRANSACTION_COMMIT = 1 << 13 }; -enum enum_session_status { - SESSION_WAITING, - SESSION_RUNNING, - SESSION_FAILURE, - SESSION_SUCCESS +enum enum_session_status +{ + SESSION_WAITING, + SESSION_RUNNING, + SESSION_FAILURE, + SESSION_SUCCESS }; extern unsigned int end_session_flag; void cwmp_set_end_session(unsigned int flag); -struct rpc *cwmp_add_session_rpc_cpe (struct session *session, int type); -struct session *cwmp_add_queue_session (struct cwmp *cwmp); -struct rpc *cwmp_add_session_rpc_acs (struct session *session, int type); +struct rpc *cwmp_add_session_rpc_cpe(struct session *session, int type); +struct session *cwmp_add_queue_session(struct cwmp *cwmp); +struct rpc *cwmp_add_session_rpc_acs(struct session *session, int type); int cwmp_apply_acs_changes(); -int cwmp_move_session_to_session_send (struct cwmp *cwmp, struct session *session); -struct rpc *cwmp_add_session_rpc_acs_head (struct session *session, int type); +int cwmp_move_session_to_session_send(struct cwmp *cwmp, struct session *session); +struct rpc *cwmp_add_session_rpc_acs_head(struct session *session, int type); #endif /* SRC_INC_SESSION_H_ */ diff --git a/inc/ubus.h b/inc/ubus.h index 1ec9410..a4c9123 100644 --- a/inc/ubus.h +++ b/inc/ubus.h @@ -18,7 +18,8 @@ int ubus_init(struct cwmp *cwmp); void ubus_exit(void); -enum cwmp_ubus_arg_type { +enum cwmp_ubus_arg_type +{ UBUS_String, UBUS_Integer, UBUS_Array_Obj, @@ -34,12 +35,12 @@ struct key_value { }; union array_membre { - char* str_value; + char *str_value; struct key_value param_value; }; union ubus_value { - char* str_val; + char *str_val; int int_val; bool bool_val; union array_membre array_value[ARRAY_MAX]; diff --git a/inc/xml.h b/inc/xml.h index c2c5d50..e4b441c 100644 --- a/inc/xml.h +++ b/inc/xml.h @@ -18,59 +18,66 @@ #include "common.h" #include "session.h" -#define CWMP_MXML_TAB_SPACE " " -#define DOWNLOAD_PROTOCOL_HTTP "http://" -#define DOWNLOAD_PROTOCOL_HTTPS "https://" -#define DOWNLOAD_PROTOCOL_FTP "ftp://" -#define MAX_DOWNLOAD_QUEUE 10 -#define MAX_SCHEDULE_INFORM_QUEUE 10 +#define CWMP_MXML_TAB_SPACE " " +#define DOWNLOAD_PROTOCOL_HTTP "http://" +#define DOWNLOAD_PROTOCOL_HTTPS "https://" +#define DOWNLOAD_PROTOCOL_FTP "ftp://" +#define MAX_DOWNLOAD_QUEUE 10 +#define MAX_SCHEDULE_INFORM_QUEUE 10 -#define MXML_DELETE(X) do {if (X) { mxmlDelete(X); X = NULL; } } while(0) +#define MXML_DELETE(X) \ + do { \ + if (X) { \ + mxmlDelete(X); \ + X = NULL; \ + } \ + } while (0) -extern struct list_head list_schedule_inform; -extern struct list_head list_download; -extern struct list_head list_upload; -extern struct list_head list_schedule_download; -extern struct list_head list_apply_schedule_download; -extern struct list_head list_change_du_state; -extern int count_download_queue; +extern struct list_head list_schedule_inform; +extern struct list_head list_download; +extern struct list_head list_upload; +extern struct list_head list_schedule_download; +extern struct list_head list_apply_schedule_download; +extern struct list_head list_change_du_state; +extern int count_download_queue; extern const struct rpc_cpe_method rpc_cpe_methods[__RPC_CPE_MAX]; extern const struct rpc_acs_method rpc_acs_methods[__RPC_ACS_MAX]; -enum fault_code_enum { - FAULT_9000 = 9000,// Method not supported - FAULT_9001,// Request denied - FAULT_9002,// Internal error - FAULT_9003,// Invalid arguments - FAULT_9004,// Resources exceeded - FAULT_9005,// Invalid parameter name - FAULT_9006,// Invalid parameter type - FAULT_9007,// Invalid parameter value - FAULT_9008,// Attempt to set a non-writable parameter - FAULT_9009,// Notification request rejected - FAULT_9010,// Download failure - FAULT_9011,// Upload failure - FAULT_9012,// File transfer server authentication failure - FAULT_9013,// Unsupported protocol for file transfer - FAULT_9014,// Download failure: unable to join multicast group - FAULT_9015,// Download failure: unable to contact file server - FAULT_9016,// Download failure: unable to access file - FAULT_9017,// Download failure: unable to complete download - FAULT_9018,// Download failure: file corrupted - FAULT_9019,// Download failure: file authentication failure - FAULT_9020,// Download failure: unable to complete download - FAULT_9021,// Cancelation of file transfer not permitted - FAULT_9022,// Invalid UUID format - FAULT_9023,// Unknown Execution Environment - FAULT_9024,// Disabled Execution Environment - FAULT_9025,// Diployment Unit to Execution environment mismatch - FAULT_9026,// Duplicate Deployment Unit - FAULT_9027,// System Ressources Exceeded - FAULT_9028,// Unknown Deployment Unit - FAULT_9029,// Invalid Deployment Unit State - FAULT_9030,// Invalid Deployment Unit Update: Downgrade not permitted - FAULT_9031,// Invalid Deployment Unit Update: Version not specified - FAULT_9032,// Invalid Deployment Unit Update: Version already exist +enum fault_code_enum +{ + FAULT_9000 = 9000, // Method not supported + FAULT_9001, // Request denied + FAULT_9002, // Internal error + FAULT_9003, // Invalid arguments + FAULT_9004, // Resources exceeded + FAULT_9005, // Invalid parameter name + FAULT_9006, // Invalid parameter type + FAULT_9007, // Invalid parameter value + FAULT_9008, // Attempt to set a non-writable parameter + FAULT_9009, // Notification request rejected + FAULT_9010, // Download failure + FAULT_9011, // Upload failure + FAULT_9012, // File transfer server authentication failure + FAULT_9013, // Unsupported protocol for file transfer + FAULT_9014, // Download failure: unable to join multicast group + FAULT_9015, // Download failure: unable to contact file server + FAULT_9016, // Download failure: unable to access file + FAULT_9017, // Download failure: unable to complete download + FAULT_9018, // Download failure: file corrupted + FAULT_9019, // Download failure: file authentication failure + FAULT_9020, // Download failure: unable to complete download + FAULT_9021, // Cancelation of file transfer not permitted + FAULT_9022, // Invalid UUID format + FAULT_9023, // Unknown Execution Environment + FAULT_9024, // Disabled Execution Environment + FAULT_9025, // Diployment Unit to Execution environment mismatch + FAULT_9026, // Duplicate Deployment Unit + FAULT_9027, // System Ressources Exceeded + FAULT_9028, // Unknown Deployment Unit + FAULT_9029, // Invalid Deployment Unit State + FAULT_9030, // Invalid Deployment Unit Update: Downgrade not permitted + FAULT_9031, // Invalid Deployment Unit Update: Version not specified + FAULT_9032, // Invalid Deployment Unit Update: Version already exist __FAULT_MAX }; @@ -89,7 +96,7 @@ int cwmp_handle_rpc_cpe_download(struct session *session, struct rpc *rpc); int cwmp_handle_rpc_cpe_upload(struct session *session, struct rpc *rpc); int cwmp_handle_rpc_cpe_factory_reset(struct session *session, struct rpc *rpc); int cwmp_handle_rpc_cpe_x_factory_reset_soft(struct session *session, struct rpc *rpc); -int cancel_transfer(char * key); +int cancel_transfer(char *key); int cwmp_handle_rpc_cpe_cancel_transfer(struct session *session, struct rpc *rpc); int cwmp_handle_rpc_cpe_schedule_inform(struct session *session, struct rpc *rpc); int cwmp_handle_rpc_cpe_schedule_download(struct session *session, struct rpc *rpc); @@ -110,25 +117,25 @@ int xml_prepare_msg_out(struct session *session); int xml_prepare_lwnotification_message(char **msg_out); int xml_set_cwmp_id_rpc_cpe(struct session *session); int cwmp_create_fault_message(struct session *session, struct rpc *rpc_cpe, int fault_code); -int cwmp_get_fault_code (int fault_code); -int cwmp_get_fault_code_by_string (char* fault_code); +int cwmp_get_fault_code(int fault_code); +int cwmp_get_fault_code_by_string(char *fault_code); int cwmp_scheduleInform_remove_all(); int cwmp_scheduledDownload_remove_all(); int cwmp_scheduledUpload_remove_all(); int cwmp_scheduled_Download_remove_all(); int cwmp_apply_scheduled_Download_remove_all(); struct transfer_complete *cwmp_set_data_rpc_acs_transferComplete(); -void *thread_cwmp_rpc_cpe_scheduleInform (void *v); -void *thread_cwmp_rpc_cpe_download (void *v); -void *thread_cwmp_rpc_cpe_upload (void *v); -void *thread_cwmp_rpc_cpe_schedule_download (void *v); -void *thread_cwmp_rpc_cpe_apply_schedule_download (void *v); -void *thread_cwmp_rpc_cpe_change_du_state (void *v); +void *thread_cwmp_rpc_cpe_scheduleInform(void *v); +void *thread_cwmp_rpc_cpe_download(void *v); +void *thread_cwmp_rpc_cpe_upload(void *v); +void *thread_cwmp_rpc_cpe_schedule_download(void *v); +void *thread_cwmp_rpc_cpe_apply_schedule_download(void *v); +void *thread_cwmp_rpc_cpe_change_du_state(void *v); const char *whitespace_cb(mxml_node_t *node, int where); -int cwmp_root_cause_TransferComplete (struct cwmp *cwmp, struct transfer_complete *p); -int cwmp_root_cause_dustatechangeComplete (struct cwmp *cwmp, struct du_state_change_complete *p); +int cwmp_root_cause_TransferComplete(struct cwmp *cwmp, struct transfer_complete *p); +int cwmp_root_cause_dustatechangeComplete(struct cwmp *cwmp, struct du_state_change_complete *p); void cwmp_root_cause_event_ipdiagnostic(void); int xml_set_cwmp_id(struct session *session); int xml_send_message(struct cwmp *cwmp, struct session *session, struct rpc *rpc); @@ -140,4 +147,3 @@ int cwmp_add_apply_schedule_download(struct schedule_download *schedule_download int cwmp_free_apply_schedule_download_request(struct apply_schedule_download *apply_schedule_download); char *calculate_lwnotification_cnonce(); #endif - diff --git a/kcwmp.c b/kcwmp.c index ab8a3e8..098b9dd 100644 --- a/kcwmp.c +++ b/kcwmp.c @@ -18,11 +18,11 @@ #include "cwmp_kernel.h" typedef struct kernel_cwmp_input { - char **argv; - int argc; - int handler; - struct mutex mutex; - wait_queue_head_t thresholdq; + char **argv; + int argc; + int handler; + struct mutex mutex; + wait_queue_head_t thresholdq; } KERNEL_CWMP_INPUT; static struct sock *nl_sk = NULL; @@ -32,158 +32,136 @@ MODULE_LICENSE("IOPSYS"); static void kernel_api_cwmp_value_change_listener(struct sk_buff *skb) { + struct nlmsghdr *nlh; + int pid; + struct sk_buff *skb_out; + int msg_size; + char *msg; + char *recv; + int i, res; - struct nlmsghdr *nlh; - int pid; - struct sk_buff *skb_out; - int msg_size; - char *msg; - char *recv; - int i,res; + nlh = (struct nlmsghdr *)skb->data; + recv = (char *)nlmsg_data(nlh); - nlh = (struct nlmsghdr*)skb->data; - recv = (char*)nlmsg_data(nlh); + if (strcmp(recv, NETLINK_CWMP_ID) != 0) { + return; + } + pid = nlh->nlmsg_pid; /*pid of sending process */ - if (strcmp(recv,NETLINK_CWMP_ID)!=0) - { - return; - } - pid = nlh->nlmsg_pid; /*pid of sending process */ + while (kernel_cwmp_input.argc == 0) { + if (wait_event_interruptible(kernel_cwmp_input.thresholdq, kernel_cwmp_input.handler)) { + return; + } + } + kernel_cwmp_input.handler = 0; + mutex_lock(&(kernel_cwmp_input.mutex)); - while (kernel_cwmp_input.argc==0) - { - if ( wait_event_interruptible( kernel_cwmp_input.thresholdq, kernel_cwmp_input.handler)) { - return ; - } - } - kernel_cwmp_input.handler = 0; + for (i = 0; i <= kernel_cwmp_input.argc; i++) { + if (i < kernel_cwmp_input.argc) { + msg = kernel_cwmp_input.argv[i]; + } else { + msg = NETLINK_END_DATA; + } + msg_size = strlen(msg); + skb_out = nlmsg_new(msg_size, 0); + if (!skb_out) { + printk(KERN_ERR "Failed to allocate new skb\n"); + return; + } - mutex_lock (&(kernel_cwmp_input.mutex)); + nlh = nlmsg_put(skb_out, 0, 0, NLMSG_DONE, msg_size, 0); + NETLINK_CB(skb_out).dst_group = 0; /* not in mcast group */ + strncpy(nlmsg_data(nlh), msg, msg_size); + res = nlmsg_unicast(nl_sk, skb_out, pid); - for (i=0;i<=kernel_cwmp_input.argc;i++) - { - if (i0) - { - kernel_cwmp_input.handler = 1; - wake_up_interruptible(&(kernel_cwmp_input.thresholdq)); - return 1; - } + if (kernel_cwmp_input.argc > 0) { + kernel_cwmp_input.handler = 1; + wake_up_interruptible(&(kernel_cwmp_input.thresholdq)); + return 1; + } - mutex_lock (&(kernel_cwmp_input.mutex)); - kernel_cwmp_input.argv = kmalloc(count*sizeof(char *),GFP_KERNEL); + mutex_lock(&(kernel_cwmp_input.mutex)); + kernel_cwmp_input.argv = kmalloc(count * sizeof(char *), GFP_KERNEL); - if (kernel_cwmp_input.argv==NULL) - { - goto kernel_api_cwmp_error; - } + if (kernel_cwmp_input.argv == NULL) { + goto kernel_api_cwmp_error; + } - va_start(args, count); - for (i=0;ilog_severity) - { - return; - } - - pthread_mutex_lock (&mutex_log); + if (severity > log_severity) { + return; + } - gettimeofday(&tv, 0); - Tm = localtime(&tv.tv_sec); - i = sprintf(buf,"%02d-%02d-%4d, %02d:%02d:%02d %s ", - Tm->tm_mday, - Tm->tm_mon+1, - Tm->tm_year+1900, - Tm->tm_hour, - Tm->tm_min, - Tm->tm_sec, - SEVERITY_NAMES[severity]); - if(strlen(log_file_name) == 0) - { - strcpy(log_file_name,DEFAULT_LOG_FILE_NAME); - } - if(enable_log_file) - { - if (stat(log_file_name, &st) == 0) - { - size = st.st_size; - } - if(size >= log_max_size) - { - sprintf(log_file_name_bak,"%s.1",log_file_name); - rename(log_file_name,log_file_name_bak); - pLog = fopen(log_file_name,"w"); - } - else - { - pLog = fopen(log_file_name,"a+"); - } - } - va_start(args, fmt); - i += vsprintf(buf+i, fmt, args); - if(enable_log_file) - { - strcpy(buf_file,buf); - strcat(buf_file,"\n"); - fputs (buf_file, pLog); - } - va_end(args); - if(enable_log_file) - { - fclose(pLog); - } - if(enable_log_stdout) - { - puts(buf); - } - pthread_mutex_unlock (&mutex_log); + pthread_mutex_lock(&mutex_log); + + gettimeofday(&tv, 0); + Tm = localtime(&tv.tv_sec); + i = sprintf(buf, "%02d-%02d-%4d, %02d:%02d:%02d %s ", Tm->tm_mday, Tm->tm_mon + 1, Tm->tm_year + 1900, Tm->tm_hour, Tm->tm_min, Tm->tm_sec, SEVERITY_NAMES[severity]); + if (strlen(log_file_name) == 0) { + strcpy(log_file_name, DEFAULT_LOG_FILE_NAME); + } + if (enable_log_file) { + if (stat(log_file_name, &st) == 0) { + size = st.st_size; + } + if (size >= log_max_size) { + sprintf(log_file_name_bak, "%s.1", log_file_name); + rename(log_file_name, log_file_name_bak); + pLog = fopen(log_file_name, "w"); + } else { + pLog = fopen(log_file_name, "a+"); + } + } + va_start(args, fmt); + i += vsprintf(buf + i, fmt, args); + if (enable_log_file) { + strcpy(buf_file, buf); + strcat(buf_file, "\n"); + fputs(buf_file, pLog); + } + va_end(args); + if (enable_log_file) { + fclose(pLog); + } + if (enable_log_stdout) { + puts(buf); + } + pthread_mutex_unlock(&mutex_log); } void puts_log_xmlmsg(int severity, char *msg, int msgtype) { - struct tm *Tm; - struct timeval tv; - FILE *pLog = NULL; - struct stat st; - long int size = 0; - char log_file_name_bak[256]; - char buf[1024]; - char *description, *separator; + struct tm *Tm; + struct timeval tv; + FILE *pLog = NULL; + struct stat st; + long int size = 0; + char log_file_name_bak[256]; + char buf[1024]; + char *description, *separator; - if (severity>log_severity) - { - return; - } + if (severity > log_severity) { + return; + } - pthread_mutex_lock(&mutex_log); + pthread_mutex_lock(&mutex_log); - gettimeofday(&tv, 0); - Tm = localtime(&tv.tv_sec); - sprintf(buf,"%02d-%02d-%4d, %02d:%02d:%02d %s ", - Tm->tm_mday, - Tm->tm_mon+1, - Tm->tm_year+1900, - Tm->tm_hour, - Tm->tm_min, - Tm->tm_sec, - SEVERITY_NAMES[severity]); - if(strlen(log_file_name) == 0) - { - strcpy(log_file_name,DEFAULT_LOG_FILE_NAME); - } + gettimeofday(&tv, 0); + Tm = localtime(&tv.tv_sec); + sprintf(buf, "%02d-%02d-%4d, %02d:%02d:%02d %s ", Tm->tm_mday, Tm->tm_mon + 1, Tm->tm_year + 1900, Tm->tm_hour, Tm->tm_min, Tm->tm_sec, SEVERITY_NAMES[severity]); + if (strlen(log_file_name) == 0) { + strcpy(log_file_name, DEFAULT_LOG_FILE_NAME); + } - if (msgtype == XML_MSG_IN) { - description = "MESSAGE IN\n"; - separator = "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"; + if (msgtype == XML_MSG_IN) { + description = "MESSAGE IN\n"; + separator = "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"; - } - else { - description = "MESSAGE OUT\n"; - separator = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"; - } - if(enable_log_file) - { - - if (stat(log_file_name, &st) == 0) - { - size = st.st_size; - } - if(size >= log_max_size) - { - sprintf(log_file_name_bak,"%s.1",log_file_name); - rename(log_file_name,log_file_name_bak); - pLog = fopen(log_file_name,"w"); - } - else - { - pLog = fopen(log_file_name,"a+"); - } - fputs (buf, pLog); - fputs(description, pLog); - fputs(separator, pLog); - fputs (msg, pLog); - fputs ("\n", pLog); - fputs(separator, pLog); - fclose(pLog); - - } - if(enable_log_stdout) - { - puts (buf); - puts(description); - puts(separator); - puts (msg); - puts ("\n"); - puts(separator); - } - pthread_mutex_unlock (&mutex_log); + } else { + description = "MESSAGE OUT\n"; + separator = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"; + } + if (enable_log_file) { + if (stat(log_file_name, &st) == 0) { + size = st.st_size; + } + if (size >= log_max_size) { + sprintf(log_file_name_bak, "%s.1", log_file_name); + rename(log_file_name, log_file_name_bak); + pLog = fopen(log_file_name, "w"); + } else { + pLog = fopen(log_file_name, "a+"); + } + fputs(buf, pLog); + fputs(description, pLog); + fputs(separator, pLog); + fputs(msg, pLog); + fputs("\n", pLog); + fputs(separator, pLog); + fclose(pLog); + } + if (enable_log_stdout) { + puts(buf); + puts(description); + puts(separator); + puts(msg); + puts("\n"); + puts(separator); + } + pthread_mutex_unlock(&mutex_log); } diff --git a/md5.c b/md5.c index cd0a717..fd1cfcf 100644 --- a/md5.c +++ b/md5.c @@ -17,31 +17,27 @@ #include "md5.h" -# if __BYTE_ORDER == __BIG_ENDIAN +#if __BYTE_ORDER == __BIG_ENDIAN #define HIGHFIRST #endif #ifndef HIGHFIRST -#define byteReverse(buf, len) /* Nothing */ +#define byteReverse(buf, len) /* Nothing */ #else /* * Note: this code is harmless on little-endian machines. */ -static void -byteReverse(unsigned char *buf, - unsigned longs) +static void byteReverse(unsigned char *buf, unsigned longs) { - uint32_t t; - do { - t = (uint32_t) ((unsigned) buf[3] << 8 | buf[2]) << 16 | - ((unsigned) buf[1] << 8 | buf[0]); - *(uint32_t *) buf = t; - buf += 4; - } while (--longs); + uint32_t t; + do { + t = (uint32_t)((unsigned)buf[3] << 8 | buf[2]) << 16 | ((unsigned)buf[1] << 8 | buf[0]); + *(uint32_t *)buf = t; + buf += 4; + } while (--longs); } #endif - /* The four core functions - F1 is optimized somewhat */ /* #define F1(x, y, z) (x & y | ~x & z) */ @@ -51,216 +47,203 @@ byteReverse(unsigned char *buf, #define F4(x, y, z) (y ^ (x | ~z)) /* This is the central step in the MD5 algorithm. */ -#define MD5STEP(f, w, x, y, z, data, s) \ - ( w += f(x, y, z) + data, w = w<>(32-s), w += x ) +#define MD5STEP(f, w, x, y, z, data, s) (w += f(x, y, z) + data, w = w << s | w >> (32 - s), w += x) /* * The core of the MD5 algorithm, this alters an existing MD5 hash to * reflect the addition of 16 longwords of new data. MD5Update blocks * the data and converts bytes into longwords for this routine. */ -static void -MD5Transform(uint32_t buf[4], - uint32_t in[16]) +static void MD5Transform(uint32_t buf[4], uint32_t in[16]) { - uint32_t a, b, c, d; + uint32_t a, b, c, d; - a = buf[0]; - b = buf[1]; - c = buf[2]; - d = buf[3]; + a = buf[0]; + b = buf[1]; + c = buf[2]; + d = buf[3]; - MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); - MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); - MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); - MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); - MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); - MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); - MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); - MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); - MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); - MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); - MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); - MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); - MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); - MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); - MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); - MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); + MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); + MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); + MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); + MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); + MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); + MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); + MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); + MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); + MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); + MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); + MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); + MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); + MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); + MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); + MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); + MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); - MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); - MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); - MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); - MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); - MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); - MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); - MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); - MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); - MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); - MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); - MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); - MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); - MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); - MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); - MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); - MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); + MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); + MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); + MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); + MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); + MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); + MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); + MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); + MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); + MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); + MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); + MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); + MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); + MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); + MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); + MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); + MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); - MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); - MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); - MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); - MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); - MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); - MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); - MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); - MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); - MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); - MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); - MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); - MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); - MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); - MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); - MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); - MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); + MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); + MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); + MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); + MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); + MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); + MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); + MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); + MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); + MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); + MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); + MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); + MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); + MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); + MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); + MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); + MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); - MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); - MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); - MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); - MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); - MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); - MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); - MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); - MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); - MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); - MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); - MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); - MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); - MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); - MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); - MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); - MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); + MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); + MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); + MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); + MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); + MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); + MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); + MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); + MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); + MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); + MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); + MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); + MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); + MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); + MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); + MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); + MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); - buf[0] += a; - buf[1] += b; - buf[2] += c; - buf[3] += d; + buf[0] += a; + buf[1] += b; + buf[2] += c; + buf[3] += d; } - /* * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious * initialization constants. */ -void -MD5Init(struct MD5Context *ctx) +void MD5Init(struct MD5Context *ctx) { - ctx->buf[0] = 0x67452301; - ctx->buf[1] = 0xefcdab89; - ctx->buf[2] = 0x98badcfe; - ctx->buf[3] = 0x10325476; + ctx->buf[0] = 0x67452301; + ctx->buf[1] = 0xefcdab89; + ctx->buf[2] = 0x98badcfe; + ctx->buf[3] = 0x10325476; - ctx->bits[0] = 0; - ctx->bits[1] = 0; + ctx->bits[0] = 0; + ctx->bits[1] = 0; } /* * Update context to reflect the concatenation of another buffer full * of bytes. */ -void -MD5Update(struct MD5Context *ctx, - const void *data, - unsigned len) +void MD5Update(struct MD5Context *ctx, const void *data, unsigned len) { - const unsigned char *buf = data; - uint32_t t; + const unsigned char *buf = data; + uint32_t t; - /* Update bitcount */ + /* Update bitcount */ - t = ctx->bits[0]; - if ((ctx->bits[0] = t + ((uint32_t) len << 3)) < t) - ctx->bits[1]++; /* Carry from low to high */ - ctx->bits[1] += len >> 29; + t = ctx->bits[0]; + if ((ctx->bits[0] = t + ((uint32_t)len << 3)) < t) + ctx->bits[1]++; /* Carry from low to high */ + ctx->bits[1] += len >> 29; - t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ + t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ - /* Handle any leading odd-sized chunks */ + /* Handle any leading odd-sized chunks */ - if (t) { - unsigned char *p = (unsigned char *) ctx->in + t; + if (t) { + unsigned char *p = (unsigned char *)ctx->in + t; - t = 64 - t; - if (len < t) { - memcpy(p, buf, len); - return; + t = 64 - t; + if (len < t) { + memcpy(p, buf, len); + return; + } + memcpy(p, buf, t); + byteReverse(ctx->in, 16); + MD5Transform(ctx->buf, (uint32_t *)ctx->in); + buf += t; + len -= t; } - memcpy(p, buf, t); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32_t *) ctx->in); - buf += t; - len -= t; - } - /* Process data in 64-byte chunks */ + /* Process data in 64-byte chunks */ - while (len >= 64) { - memcpy(ctx->in, buf, 64); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32_t *) ctx->in); - buf += 64; - len -= 64; - } + while (len >= 64) { + memcpy(ctx->in, buf, 64); + byteReverse(ctx->in, 16); + MD5Transform(ctx->buf, (uint32_t *)ctx->in); + buf += 64; + len -= 64; + } - /* Handle any remaining bytes of data. */ + /* Handle any remaining bytes of data. */ - memcpy(ctx->in, buf, len); + memcpy(ctx->in, buf, len); } /* * Final wrapup - pad to 64-byte boundary with the bit pattern * 1 0* (64-bit count of bits processed, MSB-first) */ -void -MD5Final(unsigned char digest[16], - struct MD5Context *ctx) +void MD5Final(unsigned char digest[16], struct MD5Context *ctx) { - unsigned count; - unsigned char *p; + unsigned count; + unsigned char *p; - /* Compute number of bytes mod 64 */ - count = (ctx->bits[0] >> 3) & 0x3F; - - /* Set the first char of padding to 0x80. This is safe since there is + /* Compute number of bytes mod 64 */ + count = (ctx->bits[0] >> 3) & 0x3F; + + /* Set the first char of padding to 0x80. This is safe since there is always at least one byte free */ - p = ctx->in + count; - *p++ = 0x80; - - /* Bytes of padding needed to make 64 bytes */ - count = 64 - 1 - count; - - /* Pad out to 56 mod 64 */ - if (count < 8) - { - /* Two lots of padding: Pad the first block to 64 bytes */ - memset(p, 0, count); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32_t *) ctx->in); - - /* Now fill the next block with 56 bytes */ - memset(ctx->in, 0, 56); - } - else - { - /* Pad block to 56 bytes */ - memset(p, 0, count - 8); - } - byteReverse(ctx->in, 14); - - /* Append length in bits and transform */ - ((uint32_t *) ctx->in)[14] = ctx->bits[0]; - ((uint32_t *) ctx->in)[15] = ctx->bits[1]; - - MD5Transform(ctx->buf, (uint32_t *) ctx->in); - byteReverse((unsigned char *) ctx->buf, 4); - memcpy(digest, ctx->buf, 16); - memset(ctx, 0, sizeof(struct MD5Context)); /* In case it's sensitive */ + p = ctx->in + count; + *p++ = 0x80; + + /* Bytes of padding needed to make 64 bytes */ + count = 64 - 1 - count; + + /* Pad out to 56 mod 64 */ + if (count < 8) { + /* Two lots of padding: Pad the first block to 64 bytes */ + memset(p, 0, count); + byteReverse(ctx->in, 16); + MD5Transform(ctx->buf, (uint32_t *)ctx->in); + + /* Now fill the next block with 56 bytes */ + memset(ctx->in, 0, 56); + } else { + /* Pad block to 56 bytes */ + memset(p, 0, count - 8); + } + byteReverse(ctx->in, 14); + + /* Append length in bits and transform */ + ((uint32_t *)ctx->in)[14] = ctx->bits[0]; + ((uint32_t *)ctx->in)[15] = ctx->bits[1]; + + MD5Transform(ctx->buf, (uint32_t *)ctx->in); + byteReverse((unsigned char *)ctx->buf, 4); + memcpy(digest, ctx->buf, 16); + memset(ctx, 0, sizeof(struct MD5Context)); /* In case it's sensitive */ } /* end of md5.c */ diff --git a/netlink.c b/netlink.c index 4bbf297..f1977d5 100644 --- a/netlink.c +++ b/netlink.c @@ -37,8 +37,8 @@ static int itfcmp(char *itf1, char *itf2); static void netlink_new_msg(struct uloop_fd *ufd, unsigned events); -static struct uloop_fd netlink_event = { .cb = netlink_new_msg }; -static struct uloop_fd netlink_event_v6 = { .cb = netlink_new_msg }; +static struct uloop_fd netlink_event = {.cb = netlink_new_msg }; +static struct uloop_fd netlink_event_v6 = {.cb = netlink_new_msg }; static int itfcmp(char *itf1, char *itf2) { @@ -48,45 +48,45 @@ static int itfcmp(char *itf1, char *itf2) char *buf1 = NULL; char *buf2 = NULL; - if(itf1[0] == '\0') + if (itf1[0] == '\0') goto end; str = strchr(itf1, '.'); - if(str == NULL) - goto end; + if (str == NULL) + goto end; index = (int)(str - itf1); - if(!index) + if (!index) goto end; buf1 = malloc(index); strncpy(buf1, itf1, index); - if(!buf1) + if (!buf1) goto end; buf1[index] = '\0'; - if(itf2[0] == '\0') + if (itf2[0] == '\0') goto end; str = strchr(itf2, '.'); - if(str == NULL) - goto end; + if (str == NULL) + goto end; index = (int)(str - itf2); - if(!index) + if (!index) goto end; buf2 = malloc(index); - if(!buf2) + if (!buf2) goto end; buf2[index] = '\0'; strncpy(buf2, itf1, index); - if(strcmp(buf1, buf2) == 0) + if (strcmp(buf1, buf2) == 0) status = 0; end: - if(buf1) + if (buf1) free(buf1); - if(buf2) + if (buf2) free(buf2); return status; } static void freecwmp_netlink_interface(struct nlmsghdr *nlh) { - struct ifaddrmsg *ifa = (struct ifaddrmsg *) NLMSG_DATA(nlh); + struct ifaddrmsg *ifa = (struct ifaddrmsg *)NLMSG_DATA(nlh); struct rtattr *rth = IFA_RTA(ifa); int rtl = IFA_PAYLOAD(nlh); char if_name[IFNAMSIZ], if_addr[INET_ADDRSTRLEN]; @@ -96,14 +96,14 @@ static void freecwmp_netlink_interface(struct nlmsghdr *nlh) memset(&if_addr, 0, sizeof(if_addr)); char pradd_v6[128]; - if(ifa->ifa_family == AF_INET) { //CASE IPv4 + if (ifa->ifa_family == AF_INET) { //CASE IPv4 while (rtl && RTA_OK(rth, rtl)) { if (rth->rta_type != IFA_LOCAL) { rth = RTA_NEXT(rth, rtl); continue; } - uint32_t addr = htonl(* (uint32_t *)RTA_DATA(rth)); + uint32_t addr = htonl(*(uint32_t *)RTA_DATA(rth)); if (htonl(13) == 13) { // running on big endian system } else { @@ -119,10 +119,10 @@ static void freecwmp_netlink_interface(struct nlmsghdr *nlh) inet_ntop(AF_INET, &(addr), if_addr, INET_ADDRSTRLEN); - if (cwmp_main.conf.ip) FREE(cwmp_main.conf.ip); + if (cwmp_main.conf.ip) + FREE(cwmp_main.conf.ip); cwmp_main.conf.ip = strdup(if_addr); - if (asprintf(&c,"cwmp.cpe.ip=%s",cwmp_main.conf.ip) != -1) - { + if (asprintf(&c, "cwmp.cpe.ip=%s", cwmp_main.conf.ip) != -1) { uci_set_state_value(c); free(c); } @@ -141,10 +141,10 @@ static void freecwmp_netlink_interface(struct nlmsghdr *nlh) rth = RTA_NEXT(rth, rtl); continue; } - if (cwmp_main.conf.ipv6) FREE(cwmp_main.conf.ipv6); + if (cwmp_main.conf.ipv6) + FREE(cwmp_main.conf.ipv6); cwmp_main.conf.ipv6 = strdup(pradd_v6); - if (asprintf(&c,"cwmp.cpe.ipv6=%s",cwmp_main.conf.ipv6) != -1) - { + if (asprintf(&c, "cwmp.cpe.ipv6=%s", cwmp_main.conf.ipv6) != -1) { uci_set_state_value(c); free(c); } @@ -164,7 +164,7 @@ static void netlink_new_msg(struct uloop_fd *ufd, unsigned events __attribute__( nlh = (struct nlmsghdr *)buffer; if ((int)(msg_size = recv(ufd->fd, nlh, BUFSIZ, 0)) == -1) { - CWMP_LOG(ERROR,"error receiving netlink message"); + CWMP_LOG(ERROR, "error receiving netlink message"); return; } @@ -173,12 +173,12 @@ static void netlink_new_msg(struct uloop_fd *ufd, unsigned events __attribute__( int req_len = len - sizeof(*nlh); if (req_len < 0 || (size_t)len > msg_size) { - CWMP_LOG(ERROR,"error reading netlink message"); + CWMP_LOG(ERROR, "error reading netlink message"); return; } if (!NLMSG_OK(nlh, msg_size)) { - CWMP_LOG(ERROR,"netlink message is not NLMSG_OK"); + CWMP_LOG(ERROR, "netlink message is not NLMSG_OK"); return; } @@ -186,7 +186,7 @@ static void netlink_new_msg(struct uloop_fd *ufd, unsigned events __attribute__( freecwmp_netlink_interface(nlh); msg_size -= NLMSG_ALIGN(len); - nlh = (struct nlmsghdr*)((char*)nlh + NLMSG_ALIGN(len)); + nlh = (struct nlmsghdr *)((char *)nlh + NLMSG_ALIGN(len)); } } @@ -203,14 +203,14 @@ int netlink_init_v6(void) memset(&req, 0, sizeof(req)); if ((sock[0] = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE)) == -1) { - CWMP_LOG(ERROR,"couldn't open NETLINK_ROUTE socket"); + CWMP_LOG(ERROR, "couldn't open NETLINK_ROUTE socket"); return -1; } addr.nl_family = AF_NETLINK; addr.nl_groups = RTMGRP_IPV6_IFADDR; if ((bind(sock[0], (struct sockaddr *)&addr, sizeof(addr))) == -1) { - CWMP_LOG(ERROR,"couldn't bind netlink socket"); + CWMP_LOG(ERROR, "couldn't bind netlink socket"); return -1; } @@ -218,7 +218,7 @@ int netlink_init_v6(void) uloop_fd_add(&netlink_event_v6, ULOOP_READ | ULOOP_EDGE_TRIGGER); if ((sock[1] = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE)) == -1) { - CWMP_LOG(ERROR,"couldn't open NETLINK_ROUTE socket"); + CWMP_LOG(ERROR, "couldn't open NETLINK_ROUTE socket"); return -1; } @@ -228,11 +228,11 @@ int netlink_init_v6(void) req.msg.ifa_family = AF_INET6; if ((send(sock[1], &req, req.hdr.nlmsg_len, 0)) == -1) { - CWMP_LOG(ERROR,"couldn't send netlink socket"); + CWMP_LOG(ERROR, "couldn't send netlink socket"); return -1; } - struct uloop_fd dummy_event = { .fd = sock[1] }; + struct uloop_fd dummy_event = {.fd = sock[1] }; netlink_new_msg(&dummy_event, 0); return 0; @@ -251,14 +251,14 @@ int netlink_init(void) memset(&req, 0, sizeof(req)); if ((sock[0] = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE)) == -1) { - CWMP_LOG(ERROR,"couldn't open NETLINK_ROUTE socket"); + CWMP_LOG(ERROR, "couldn't open NETLINK_ROUTE socket"); return -1; } addr.nl_family = AF_NETLINK; addr.nl_groups = RTMGRP_IPV4_IFADDR; if ((bind(sock[0], (struct sockaddr *)&addr, sizeof(addr))) == -1) { - CWMP_LOG(ERROR,"couldn't bind netlink socket"); + CWMP_LOG(ERROR, "couldn't bind netlink socket"); return -1; } @@ -266,7 +266,7 @@ int netlink_init(void) uloop_fd_add(&netlink_event, ULOOP_READ | ULOOP_EDGE_TRIGGER); if ((sock[1] = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE)) == -1) { - CWMP_LOG(ERROR,"couldn't open NETLINK_ROUTE socket"); + CWMP_LOG(ERROR, "couldn't open NETLINK_ROUTE socket"); return -1; } @@ -276,11 +276,11 @@ int netlink_init(void) req.msg.ifa_family = AF_INET; if ((send(sock[1], &req, req.hdr.nlmsg_len, 0)) == -1) { - CWMP_LOG(ERROR,"couldn't send netlink socket"); + CWMP_LOG(ERROR, "couldn't send netlink socket"); return -1; } - struct uloop_fd dummy_event = { .fd = sock[1] }; + struct uloop_fd dummy_event = {.fd = sock[1] }; netlink_new_msg(&dummy_event, 0); return 0; diff --git a/notifications.c b/notifications.c index b54b49d..6294899 100644 --- a/notifications.c +++ b/notifications.c @@ -34,35 +34,40 @@ int cwmp_update_enabled_notify_file() if (fp == NULL) { return 0; } - foreach_jsonobj_in_array(param_obj, old_list_notify) { + foreach_jsonobj_in_array(param_obj, old_list_notify) + { json_object_object_get_ex(param_obj, "parameter", ¶m_name_obj); - if (!param_name_obj || strlen((char*)json_object_get_string(param_name_obj))<=0) + if (!param_name_obj || strlen((char *)json_object_get_string(param_name_obj)) <= 0) continue; json_object_object_get_ex(param_obj, "value", &value_obj); json_object_object_get_ex(param_obj, "type", &type_obj); json_object_object_get_ex(param_obj, "notification", ¬ification_obj); - cwmp_json_fprintf(fp, 4, CWMP_JSON_ARGS{{"parameter", (char*)json_object_get_string(param_name_obj)}, {"notification", notification_obj?(char*)json_object_get_string(notification_obj):""}, {"value", value_obj?(char*)json_object_get_string(value_obj):""}, {"type", type_obj?(char*)json_object_get_string(type_obj):""}}); + cwmp_json_fprintf(fp, 4, CWMP_JSON_ARGS{ { "parameter", (char *)json_object_get_string(param_name_obj) }, + { "notification", notification_obj ? (char *)json_object_get_string(notification_obj) : "" }, + { "value", value_obj ? (char *)json_object_get_string(value_obj) : "" }, + { "type", type_obj ? (char *)json_object_get_string(type_obj) : "" } }); } fclose(fp); return 1; } -void get_parameter_value_from_parameters_list(json_object* list_params_obj, char* parameter_name, struct cwmp_dm_parameter **ret_dm_param) +void get_parameter_value_from_parameters_list(json_object *list_params_obj, char *parameter_name, struct cwmp_dm_parameter **ret_dm_param) { json_object *param_obj = NULL, *param_name_obj = NULL, *value_obj = NULL, *type_obj = NULL; - foreach_jsonobj_in_array(param_obj, list_params_obj) { + foreach_jsonobj_in_array(param_obj, list_params_obj) + { json_object_object_get_ex(param_obj, "parameter", ¶m_name_obj); - if (!param_name_obj || strlen((char*)json_object_get_string(param_name_obj))<=0) + if (!param_name_obj || strlen((char *)json_object_get_string(param_name_obj)) <= 0) continue; - if (strcmp((char*)json_object_get_string(param_name_obj), parameter_name) != 0) + if (strcmp((char *)json_object_get_string(param_name_obj), parameter_name) != 0) continue; - *ret_dm_param = (struct cwmp_dm_parameter*) calloc(1,sizeof(struct cwmp_dm_parameter)); + *ret_dm_param = (struct cwmp_dm_parameter *)calloc(1, sizeof(struct cwmp_dm_parameter)); json_object_object_get_ex(param_obj, "value", &value_obj); (*ret_dm_param)->name = strdup(parameter_name); - (*ret_dm_param)->data = strdup(value_obj?(char*)json_object_get_string(value_obj):""); + (*ret_dm_param)->data = strdup(value_obj ? (char *)json_object_get_string(value_obj) : ""); json_object_object_get_ex(param_obj, "type", &type_obj); - (*ret_dm_param)->type = strdup(type_obj?(char*)json_object_get_string(type_obj):""); + (*ret_dm_param)->type = strdup(type_obj ? (char *)json_object_get_string(type_obj) : ""); break; } } @@ -86,16 +91,16 @@ int check_value_change(void) while (fgets(buf, 512, fp) != NULL) { int len = strlen(buf); if (len) - buf[len-1] = '\0'; + buf[len - 1] = '\0'; cwmp_json_obj_init(buf, &buf_json_obj); json_object_object_get_ex(buf_json_obj, "parameter", ¶m_name_obj); - if(param_name_obj == NULL || strlen((char*)json_object_get_string(param_name_obj))<= 0) + if (param_name_obj == NULL || strlen((char *)json_object_get_string(param_name_obj)) <= 0) continue; - parameter = strdup((char*)json_object_get_string(param_name_obj)); + parameter = strdup((char *)json_object_get_string(param_name_obj)); json_object_object_get_ex(buf_json_obj, "value", &value_obj); json_object_object_get_ex(buf_json_obj, "notification", ¬ification_obj); - value =strdup(value_obj?(char*)json_object_get_string(value_obj):""); - notification = strdup(notification_obj?(char*)json_object_get_string(notification_obj):""); + value = strdup(value_obj ? (char *)json_object_get_string(value_obj) : ""); + notification = strdup(notification_obj ? (char *)json_object_get_string(notification_obj) : ""); cwmp_json_obj_clean(&buf_json_obj); if (param_name_obj) { json_object_put(param_name_obj); @@ -112,10 +117,10 @@ int check_value_change(void) get_parameter_value_from_parameters_list(actual_list_notify, parameter, &dm_parameter); if (dm_parameter == NULL) continue; - if (notification && (strlen(notification) > 0) && (notification[0] >= '1') && (dm_parameter->data != NULL) && (value != NULL) && (strcmp(dm_parameter->data, value) != 0)){ + if (notification && (strlen(notification) > 0) && (notification[0] >= '1') && (dm_parameter->data != NULL) && (value != NULL) && (strcmp(dm_parameter->data, value) != 0)) { if (notification[0] == '1' || notification[0] == '2') add_list_value_change(parameter, dm_parameter->data, dm_parameter->type); - if (notification[0] >= '3' ) + if (notification[0] >= '3') add_lw_list_value_change(parameter, dm_parameter->data, dm_parameter->type); if (notification[0] == '1') @@ -133,7 +138,6 @@ int check_value_change(void) FREE(dm_parameter->data); FREE(dm_parameter->type); FREE(dm_parameter); - } fclose(fp); return is_notify; @@ -147,47 +151,45 @@ void sotfware_version_value_change(struct cwmp *cwmp, struct transfer_complete * return; current_software_version = cwmp->deviceid.softwareversion; - if (p->old_software_version && current_software_version && - strcmp(p->old_software_version, current_software_version) != 0) { - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - cwmp_add_event_container (cwmp, EVENT_IDX_4VALUE_CHANGE, ""); - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); + if (p->old_software_version && current_software_version && strcmp(p->old_software_version, current_software_version) != 0) { + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + cwmp_add_event_container(cwmp, EVENT_IDX_4VALUE_CHANGE, ""); + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); } } -void *thread_periodic_check_notify (void *v) +void *thread_periodic_check_notify(void *v) { - struct cwmp *cwmp = (struct cwmp *) v; - static int periodic_interval; - static bool periodic_enable; - static struct timespec periodic_timeout = {0, 0}; - time_t current_time; - int is_notify; + struct cwmp *cwmp = (struct cwmp *)v; + static int periodic_interval; + static bool periodic_enable; + static struct timespec periodic_timeout = { 0, 0 }; + time_t current_time; + int is_notify; - periodic_interval = cwmp->conf.periodic_notify_interval; - periodic_enable = cwmp->conf.periodic_notify_enable; + periodic_interval = cwmp->conf.periodic_notify_interval; + periodic_enable = cwmp->conf.periodic_notify_enable; - for(;;) { - if (periodic_enable) { - pthread_mutex_lock (&(cwmp->mutex_notify_periodic)); - current_time = time(NULL); - periodic_timeout.tv_sec = current_time + periodic_interval; - pthread_cond_timedwait(&(cwmp->threshold_notify_periodic), &(cwmp->mutex_notify_periodic), &periodic_timeout); - pthread_mutex_lock(&(cwmp->mutex_session_send)); - is_notify = check_value_change(); - if (is_notify > 0) - cwmp_update_enabled_notify_file(); - pthread_mutex_unlock(&(cwmp->mutex_session_send)); - if (is_notify & NOTIF_ACTIVE) - send_active_value_change(); - if (is_notify & NOTIF_LW_ACTIVE) - cwmp_lwnotification(); - pthread_mutex_unlock (&(cwmp->mutex_notify_periodic)); - } - else - break; - } - return CWMP_OK; + for (;;) { + if (periodic_enable) { + pthread_mutex_lock(&(cwmp->mutex_notify_periodic)); + current_time = time(NULL); + periodic_timeout.tv_sec = current_time + periodic_interval; + pthread_cond_timedwait(&(cwmp->threshold_notify_periodic), &(cwmp->mutex_notify_periodic), &periodic_timeout); + pthread_mutex_lock(&(cwmp->mutex_session_send)); + is_notify = check_value_change(); + if (is_notify > 0) + cwmp_update_enabled_notify_file(); + pthread_mutex_unlock(&(cwmp->mutex_session_send)); + if (is_notify & NOTIF_ACTIVE) + send_active_value_change(); + if (is_notify & NOTIF_LW_ACTIVE) + cwmp_lwnotification(); + pthread_mutex_unlock(&(cwmp->mutex_notify_periodic)); + } else + break; + } + return CWMP_OK; } void add_list_value_change(char *param_name, char *param_data, char *param_type) @@ -218,22 +220,18 @@ void send_active_value_change(void) /* * Light Weight Notifications */ -void add_lw_list_value_change(char *param_name, char *param_data, char *param_type) -{ - add_dm_parameter_tolist(&list_lw_value_change, param_name, param_data, param_type); -} - +void add_lw_list_value_change(char *param_name, char *param_data, char *param_type) { add_dm_parameter_tolist(&list_lw_value_change, param_name, param_data, param_type); } static void udplw_server_param(struct addrinfo **res) { - struct addrinfo hints = {0}; - struct cwmp *cwmp = &cwmp_main; - struct config *conf; + struct addrinfo hints = { 0 }; + struct cwmp *cwmp = &cwmp_main; + struct config *conf; char *port; conf = &(cwmp->conf); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; asprintf(&port, "%d", conf->lw_notification_port); - getaddrinfo(conf->lw_notification_hostname,port,&hints,res); + getaddrinfo(conf->lw_notification_hostname, port, &hints, res); //FREE(port); } @@ -242,30 +240,29 @@ static void message_compute_signature(char *msg_out, char *signature) int i; int result_len = 20; unsigned char *result; - struct cwmp *cwmp = &cwmp_main; - struct config *conf; + struct cwmp *cwmp = &cwmp_main; + struct config *conf; conf = &(cwmp->conf); -/* unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, + /* unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, const unsigned char *d, size_t n, unsigned char *md, unsigned int *md_len);*/ - result = HMAC(EVP_sha1(), conf->acs_passwd, strlen(conf->acs_passwd), - (unsigned char *)msg_out, strlen(msg_out), NULL, NULL); + result = HMAC(EVP_sha1(), conf->acs_passwd, strlen(conf->acs_passwd), (unsigned char *)msg_out, strlen(msg_out), NULL, NULL); for (i = 0; i < result_len; i++) { sprintf(&(signature[i * 2]), "%02X", result[i]); } - signature[i * 2 ] = '\0'; + signature[i * 2] = '\0'; FREE(result); } char *calculate_lwnotification_cnonce() { int i; - char *cnonce = malloc( 33 * sizeof(char)); - srand((unsigned int) time(NULL)); + char *cnonce = malloc(33 * sizeof(char)); + srand((unsigned int)time(NULL)); for (i = 0; i < 4; i++) { sprintf(&(cnonce[i * 8]), "%08x", rand()); } - cnonce[i * 8 ] = '\0'; + cnonce[i * 8] = '\0'; return cnonce; } @@ -275,7 +272,7 @@ static void send_udp_message(struct addrinfo *servaddr, char *msg) fd = socket(servaddr->ai_family, SOCK_DGRAM, 0); - if ( fd >= 0) { + if (fd >= 0) { sendto(fd, msg, strlen(msg), 0, servaddr->ai_addr, servaddr->ai_addrlen); close(fd); } @@ -283,7 +280,6 @@ static void send_udp_message(struct addrinfo *servaddr, char *msg) void del_list_lw_notify(struct cwmp_dm_parameter *dm_parameter) { - list_del(&dm_parameter->list); free(dm_parameter->name); free(dm_parameter); @@ -303,20 +299,14 @@ void cwmp_lwnotification() char *msg, *msg_out; char signature[41]; struct addrinfo *servaddr; - struct cwmp *cwmp = &cwmp_main; - struct config *conf; + struct cwmp *cwmp = &cwmp_main; + struct config *conf; conf = &(cwmp->conf); udplw_server_param(&servaddr); xml_prepare_lwnotification_message(&msg_out); message_compute_signature(msg_out, signature); - asprintf(&msg, "%s \n %s: %s \n %s: %s \n %s: %d\n %s: %s\n\n%s", - "POST /HTTPS/1.1", - "HOST", conf->lw_notification_hostname, - "Content-Type", "test/xml; charset=utf-8", - "Content-Lenght", strlen(msg_out), - "Signature",signature, - msg_out); + asprintf(&msg, "%s \n %s: %s \n %s: %s \n %s: %d\n %s: %s\n\n%s", "POST /HTTPS/1.1", "HOST", conf->lw_notification_hostname, "Content-Type", "test/xml; charset=utf-8", "Content-Lenght", strlen(msg_out), "Signature", signature, msg_out); send_udp_message(servaddr, msg); free_all_list_lw_notify(); diff --git a/session.c b/session.c index 3e71a2c..cd5fbd7 100644 --- a/session.c +++ b/session.c @@ -16,99 +16,92 @@ unsigned int end_session_flag = 0; -void cwmp_set_end_session(unsigned int flag) +void cwmp_set_end_session(unsigned int flag) { end_session_flag |= flag; } +struct rpc *cwmp_add_session_rpc_cpe(struct session *session, int type) { - end_session_flag |= flag; + struct rpc *rpc_cpe; + + rpc_cpe = calloc(1, sizeof(struct rpc)); + if (rpc_cpe == NULL) { + return NULL; + } + rpc_cpe->type = type; + list_add_tail(&(rpc_cpe->list), &(session->head_rpc_cpe)); + return rpc_cpe; } -struct rpc *cwmp_add_session_rpc_cpe (struct session *session, int type) +struct rpc *cwmp_add_session_rpc_acs(struct session *session, int type) { - struct rpc *rpc_cpe; + struct rpc *rpc_acs; - rpc_cpe = calloc (1,sizeof(struct rpc)); - if (rpc_cpe==NULL) - { - return NULL; - } - rpc_cpe->type = type; - list_add_tail (&(rpc_cpe->list), &(session->head_rpc_cpe)); - return rpc_cpe; -} - -struct rpc *cwmp_add_session_rpc_acs (struct session *session, int type) -{ - struct rpc *rpc_acs; - - rpc_acs = calloc (1,sizeof(struct rpc)); - if (rpc_acs==NULL) - { - return NULL; - } - rpc_acs->type = type; - list_add_tail (&(rpc_acs->list), &(session->head_rpc_acs)); - return rpc_acs; + rpc_acs = calloc(1, sizeof(struct rpc)); + if (rpc_acs == NULL) { + return NULL; + } + rpc_acs->type = type; + list_add_tail(&(rpc_acs->list), &(session->head_rpc_acs)); + return rpc_acs; } int cwmp_apply_acs_changes(void) { - int error; + int error; - if ((error = cwmp_config_reload(&cwmp_main))) - return error; + if ((error = cwmp_config_reload(&cwmp_main))) + return error; - if ((error = cwmp_root_cause_events(&cwmp_main))) - return error; + if ((error = cwmp_root_cause_events(&cwmp_main))) + return error; - return CWMP_OK; + return CWMP_OK; } -int cwmp_move_session_to_session_send (struct cwmp *cwmp, struct session *session) +int cwmp_move_session_to_session_send(struct cwmp *cwmp, struct session *session) { - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - if (cwmp->session_send != NULL) { - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_MUTEX_ERR; - } - list_del (&(session->list)); - cwmp->session_send = session; - cwmp->head_event_container = NULL; - bkp_session_move_inform_to_inform_send (); - bkp_session_save(); - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - return CWMP_OK; + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + if (cwmp->session_send != NULL) { + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_MUTEX_ERR; + } + list_del(&(session->list)); + cwmp->session_send = session; + cwmp->head_event_container = NULL; + bkp_session_move_inform_to_inform_send(); + bkp_session_save(); + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + return CWMP_OK; } -struct rpc *cwmp_add_session_rpc_acs_head (struct session *session, int type) +struct rpc *cwmp_add_session_rpc_acs_head(struct session *session, int type) { - struct rpc *rpc_acs; + struct rpc *rpc_acs; - rpc_acs = calloc (1,sizeof(struct rpc)); - if (rpc_acs==NULL) - { - return NULL; - } - rpc_acs->type = type; - list_add (&(rpc_acs->list), &(session->head_rpc_acs)); - return rpc_acs; + rpc_acs = calloc(1, sizeof(struct rpc)); + if (rpc_acs == NULL) { + return NULL; + } + rpc_acs->type = type; + list_add(&(rpc_acs->list), &(session->head_rpc_acs)); + return rpc_acs; } -struct session *cwmp_add_queue_session (struct cwmp *cwmp) +struct session *cwmp_add_queue_session(struct cwmp *cwmp) { - struct session *session = NULL; - struct rpc *rpc_acs; + struct session *session = NULL; + struct rpc *rpc_acs; - session = calloc(1, sizeof(struct session)); - if (session == NULL) - return NULL; + session = calloc(1, sizeof(struct session)); + if (session == NULL) + return NULL; - list_add_tail (&(session->list), &(cwmp->head_session_queue)); - INIT_LIST_HEAD (&(session->head_event_container)); - INIT_LIST_HEAD (&(session->head_rpc_acs)); - INIT_LIST_HEAD (&(session->head_rpc_cpe)); - if ((rpc_acs = cwmp_add_session_rpc_acs_head(session, RPC_ACS_INFORM)) == NULL) { - FREE(session); - return NULL; - } + list_add_tail(&(session->list), &(cwmp->head_session_queue)); + INIT_LIST_HEAD(&(session->head_event_container)); + INIT_LIST_HEAD(&(session->head_rpc_acs)); + INIT_LIST_HEAD(&(session->head_rpc_cpe)); + if ((rpc_acs = cwmp_add_session_rpc_acs_head(session, RPC_ACS_INFORM)) == NULL) { + FREE(session); + return NULL; + } - return session; + return session; } diff --git a/ubus.c b/ubus.c index 71f1d32..cd74d73 100644 --- a/ubus.c +++ b/ubus.c @@ -32,39 +32,32 @@ static struct blob_buf b; static json_object *json_res = NULL; static const char *arr_session_status[] = { - [SESSION_WAITING] = "waiting", - [SESSION_RUNNING] = "running", - [SESSION_FAILURE] = "failure", - [SESSION_SUCCESS] = "success", + [SESSION_WAITING] = "waiting", [SESSION_RUNNING] = "running", [SESSION_FAILURE] = "failure", [SESSION_SUCCESS] = "success", }; - -enum command { +enum command +{ COMMAND_NAME, __COMMAND_MAX }; static const struct blobmsg_policy command_policy[] = { - [COMMAND_NAME] = { .name = "command", .type = BLOBMSG_TYPE_STRING }, + [COMMAND_NAME] = {.name = "command", .type = BLOBMSG_TYPE_STRING }, }; -void *thread_exit_program (void *v __attribute__((unused))) +void *thread_exit_program(void *v __attribute__((unused))) { - CWMP_LOG(INFO,"EXIT ICWMP"); + CWMP_LOG(INFO, "EXIT ICWMP"); pthread_mutex_lock(&mutex_backup_session); cwmp_exit(); exit(EXIT_SUCCESS); } -static int -cwmp_handle_command(struct ubus_context *ctx, struct ubus_object *obj __attribute__((unused)), - struct ubus_request_data *req, const char *method __attribute__((unused)), - struct blob_attr *msg) +static int cwmp_handle_command(struct ubus_context *ctx, struct ubus_object *obj __attribute__((unused)), struct ubus_request_data *req, const char *method __attribute__((unused)), struct blob_attr *msg) { struct blob_attr *tb[__COMMAND_MAX]; - blobmsg_parse(command_policy, ARRAYSIZEOF(command_policy), tb, - blob_data(msg), blob_len(msg)); + blobmsg_parse(command_policy, ARRAYSIZEOF(command_policy), tb, blob_data(msg), blob_len(msg)); if (!tb[COMMAND_NAME]) return UBUS_STATUS_INVALID_ARGUMENT; @@ -86,11 +79,10 @@ cwmp_handle_command(struct ubus_context *ctx, struct ubus_object *obj __attribut cwmp_set_end_session(END_SESSION_RELOAD); blobmsg_add_u32(&b, "status", 0); blobmsg_add_string(&b, "info", "Session running, reload at the end of the session"); - } - else { - pthread_mutex_lock (&(cwmp_main.mutex_session_queue)); + } else { + pthread_mutex_lock(&(cwmp_main.mutex_session_queue)); cwmp_apply_acs_changes(); - pthread_mutex_unlock (&(cwmp_main.mutex_session_queue)); + pthread_mutex_unlock(&(cwmp_main.mutex_session_queue)); blobmsg_add_u32(&b, "status", 0); if (asprintf(&info, "icwmpd config reloaded") == -1) return -1; @@ -113,7 +105,7 @@ cwmp_handle_command(struct ubus_context *ctx, struct ubus_object *obj __attribut CWMP_LOG(INFO, "triggered ubus exit"); int rc = flock(cwmp_main.pid_file, LOCK_UN | LOCK_NB); close(cwmp_main.pid_file); - if(rc) { + if (rc) { char *piderr = "PID file unlock failed!"; fprintf(stderr, "%s\n", piderr); CWMP_LOG(ERROR, "%s", piderr); @@ -128,11 +120,10 @@ cwmp_handle_command(struct ubus_context *ctx, struct ubus_object *obj __attribut blob_buf_free(&b); close(cwmp_main.cr_socket_desc); - CWMP_LOG(INFO,"Close connection request server socket"); + CWMP_LOG(INFO, "Close connection request server socket"); error = pthread_create(&exit_thread, NULL, &thread_exit_program, NULL); - if (error<0) - { - CWMP_LOG(ERROR,"Error when creating the exit thread!"); + if (error < 0) { + CWMP_LOG(ERROR, "Error when creating the exit thread!"); return -1; } return 0; @@ -153,90 +144,83 @@ cwmp_handle_command(struct ubus_context *ctx, struct ubus_object *obj __attribut return 0; } -static inline time_t get_session_status_next_time() { - time_t ntime = 0; - if(list_schedule_inform.next!=&(list_schedule_inform)) { - struct schedule_inform *schedule_inform; - schedule_inform = list_entry(list_schedule_inform.next,struct schedule_inform, list); - ntime = schedule_inform->scheduled_time; - } - if (!ntime || (cwmp_main.session_status.next_retry && ntime > cwmp_main.session_status.next_retry)) { - ntime = cwmp_main.session_status.next_retry; - } - if (!ntime || (cwmp_main.session_status.next_periodic && ntime > cwmp_main.session_status.next_periodic)) { - ntime = cwmp_main.session_status.next_periodic; - } - return ntime; -} - -static int -cwmp_handle_status(struct ubus_context *ctx, struct ubus_object *obj __attribute__((unused)), - struct ubus_request_data *req, const char *method __attribute__((unused)), - struct blob_attr *msg __attribute__((unused))) +static inline time_t get_session_status_next_time() { - void *c; - time_t ntime = 0; - - blob_buf_init(&b, 0); - - c = blobmsg_open_table(&b, "cwmp"); - blobmsg_add_string(&b, "status", "up"); - blobmsg_add_string(&b, "start_time", mix_get_time_of(cwmp_main.start_time)); - blobmsg_add_string(&b, "acs_url", cwmp_main.conf.acsurl); - blobmsg_close_table(&b, c); - - c = blobmsg_open_table(&b, "last_session"); - blobmsg_add_string(&b, "status", cwmp_main.session_status.last_start_time ? arr_session_status[cwmp_main.session_status.last_status] : "N/A"); - blobmsg_add_string(&b, "start_time", cwmp_main.session_status.last_start_time ? mix_get_time_of(cwmp_main.session_status.last_start_time) : "N/A"); - blobmsg_add_string(&b, "end_time", cwmp_main.session_status.last_end_time ? mix_get_time_of(cwmp_main.session_status.last_end_time) : "N/A"); - blobmsg_close_table(&b, c); - - c = blobmsg_open_table(&b, "next_session"); - blobmsg_add_string(&b, "status", arr_session_status[SESSION_WAITING]); - ntime = get_session_status_next_time(); - blobmsg_add_string(&b, "start_time", ntime ? mix_get_time_of(ntime) : "N/A"); - blobmsg_add_string(&b, "end_time", "N/A"); - blobmsg_close_table(&b, c); - - c = blobmsg_open_table(&b, "statistics"); - blobmsg_add_u32(&b, "success_sessions", cwmp_main.session_status.success_session); - blobmsg_add_u32(&b, "failure_sessions", cwmp_main.session_status.failure_session); - blobmsg_add_u32(&b, "total_sessions", cwmp_main.session_status.success_session + cwmp_main.session_status.failure_session); - blobmsg_close_table(&b, c); - - - ubus_send_reply(ctx, req, b.head); - blob_buf_free(&b); - - return 0; + time_t ntime = 0; + if (list_schedule_inform.next != &(list_schedule_inform)) { + struct schedule_inform *schedule_inform; + schedule_inform = list_entry(list_schedule_inform.next, struct schedule_inform, list); + ntime = schedule_inform->scheduled_time; + } + if (!ntime || (cwmp_main.session_status.next_retry && ntime > cwmp_main.session_status.next_retry)) { + ntime = cwmp_main.session_status.next_retry; + } + if (!ntime || (cwmp_main.session_status.next_periodic && ntime > cwmp_main.session_status.next_periodic)) { + ntime = cwmp_main.session_status.next_periodic; + } + return ntime; } -enum enum_inform { +static int cwmp_handle_status(struct ubus_context *ctx, struct ubus_object *obj __attribute__((unused)), struct ubus_request_data *req, const char *method __attribute__((unused)), struct blob_attr *msg __attribute__((unused))) +{ + void *c; + time_t ntime = 0; + + blob_buf_init(&b, 0); + + c = blobmsg_open_table(&b, "cwmp"); + blobmsg_add_string(&b, "status", "up"); + blobmsg_add_string(&b, "start_time", mix_get_time_of(cwmp_main.start_time)); + blobmsg_add_string(&b, "acs_url", cwmp_main.conf.acsurl); + blobmsg_close_table(&b, c); + + c = blobmsg_open_table(&b, "last_session"); + blobmsg_add_string(&b, "status", cwmp_main.session_status.last_start_time ? arr_session_status[cwmp_main.session_status.last_status] : "N/A"); + blobmsg_add_string(&b, "start_time", cwmp_main.session_status.last_start_time ? mix_get_time_of(cwmp_main.session_status.last_start_time) : "N/A"); + blobmsg_add_string(&b, "end_time", cwmp_main.session_status.last_end_time ? mix_get_time_of(cwmp_main.session_status.last_end_time) : "N/A"); + blobmsg_close_table(&b, c); + + c = blobmsg_open_table(&b, "next_session"); + blobmsg_add_string(&b, "status", arr_session_status[SESSION_WAITING]); + ntime = get_session_status_next_time(); + blobmsg_add_string(&b, "start_time", ntime ? mix_get_time_of(ntime) : "N/A"); + blobmsg_add_string(&b, "end_time", "N/A"); + blobmsg_close_table(&b, c); + + c = blobmsg_open_table(&b, "statistics"); + blobmsg_add_u32(&b, "success_sessions", cwmp_main.session_status.success_session); + blobmsg_add_u32(&b, "failure_sessions", cwmp_main.session_status.failure_session); + blobmsg_add_u32(&b, "total_sessions", cwmp_main.session_status.success_session + cwmp_main.session_status.failure_session); + blobmsg_close_table(&b, c); + + ubus_send_reply(ctx, req, b.head); + blob_buf_free(&b); + + return 0; +} + +enum enum_inform +{ INFORM_GET_RPC_METHODS, INFORM_EVENT, __INFORM_MAX }; static const struct blobmsg_policy inform_policy[] = { - [INFORM_GET_RPC_METHODS] = { .name = "GetRPCMethods", .type = BLOBMSG_TYPE_BOOL }, - [INFORM_EVENT] = { .name = "event", .type = BLOBMSG_TYPE_STRING }, + [INFORM_GET_RPC_METHODS] = {.name = "GetRPCMethods", .type = BLOBMSG_TYPE_BOOL }, [INFORM_EVENT] = {.name = "event", .type = BLOBMSG_TYPE_STRING }, }; -static int -cwmp_handle_inform(struct ubus_context *ctx, struct ubus_object *obj __attribute__((unused)), - struct ubus_request_data *req, const char *method __attribute__((unused)), - struct blob_attr *msg) +static int cwmp_handle_inform(struct ubus_context *ctx, struct ubus_object *obj __attribute__((unused)), struct ubus_request_data *req, const char *method __attribute__((unused)), struct blob_attr *msg) { - struct blob_attr *tb[__INFORM_MAX]; - bool grm = false; - char *event = ""; - struct event_container *event_container; - struct session *session; + struct blob_attr *tb[__INFORM_MAX]; + bool grm = false; + char *event = ""; + struct event_container *event_container; + struct session *session; - blob_buf_init(&b, 0); + blob_buf_init(&b, 0); - blobmsg_parse(inform_policy, ARRAYSIZEOF(inform_policy), tb, - blob_data(msg), blob_len(msg)); + blobmsg_parse(inform_policy, ARRAYSIZEOF(inform_policy), tb, blob_data(msg), blob_len(msg)); if (tb[INFORM_GET_RPC_METHODS]) { grm = blobmsg_data(tb[INFORM_GET_RPC_METHODS]); @@ -245,55 +229,47 @@ cwmp_handle_inform(struct ubus_context *ctx, struct ubus_object *obj __attribute event = blobmsg_data(tb[INFORM_EVENT]); } if (grm) { - pthread_mutex_lock (&(cwmp_main.mutex_session_queue)); - event_container = cwmp_add_event_container (&cwmp_main, EVENT_IDX_2PERIODIC, ""); - if (event_container == NULL) - { - pthread_mutex_unlock (&(cwmp_main.mutex_session_queue)); + pthread_mutex_lock(&(cwmp_main.mutex_session_queue)); + event_container = cwmp_add_event_container(&cwmp_main, EVENT_IDX_2PERIODIC, ""); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp_main.mutex_session_queue)); return 0; } - cwmp_save_event_container (event_container); - session = list_entry (cwmp_main.head_event_container, struct session,head_event_container); - if(cwmp_add_session_rpc_acs(session, RPC_ACS_GET_RPC_METHODS) == NULL) - { - pthread_mutex_unlock (&(cwmp_main.mutex_session_queue)); + cwmp_save_event_container(event_container); + session = list_entry(cwmp_main.head_event_container, struct session, head_event_container); + if (cwmp_add_session_rpc_acs(session, RPC_ACS_GET_RPC_METHODS) == NULL) { + pthread_mutex_unlock(&(cwmp_main.mutex_session_queue)); return 0; } - pthread_mutex_unlock (&(cwmp_main.mutex_session_queue)); + pthread_mutex_unlock(&(cwmp_main.mutex_session_queue)); pthread_cond_signal(&(cwmp_main.threshold_session_send)); blobmsg_add_u32(&b, "status", 1); blobmsg_add_string(&b, "info", "Session with GetRPCMethods will start"); - } - else { + } else { int event_code = cwmp_get_int_event_code(event); - pthread_mutex_lock (&(cwmp_main.mutex_session_queue)); - cwmp_add_event_container (&cwmp_main, event_code, ""); - pthread_mutex_unlock (&(cwmp_main.mutex_session_queue)); + pthread_mutex_lock(&(cwmp_main.mutex_session_queue)); + cwmp_add_event_container(&cwmp_main, event_code, ""); + pthread_mutex_unlock(&(cwmp_main.mutex_session_queue)); pthread_cond_signal(&(cwmp_main.threshold_session_send)); if (cwmp_main.session_status.last_status == SESSION_RUNNING) { blobmsg_add_u32(&b, "status", -1); blobmsg_add_string(&b, "info", "Session already running, event will be sent at the end of the session"); - } - else - { + } else { blobmsg_add_u32(&b, "status", 1); blobmsg_add_string(&b, "info", "Session started"); } } - ubus_send_reply(ctx, req, b.head); - blob_buf_free(&b); + ubus_send_reply(ctx, req, b.head); + blob_buf_free(&b); - return 0; + return 0; } static const struct ubus_method freecwmp_methods[] = { - UBUS_METHOD("command", cwmp_handle_command, command_policy), - UBUS_METHOD_NOARG("status", cwmp_handle_status), - UBUS_METHOD("inform", cwmp_handle_inform, inform_policy), + UBUS_METHOD("command", cwmp_handle_command, command_policy), UBUS_METHOD_NOARG("status", cwmp_handle_status), UBUS_METHOD("inform", cwmp_handle_inform, inform_policy), }; -static struct ubus_object_type main_object_type = - UBUS_OBJECT_TYPE("freecwmpd", freecwmp_methods); +static struct ubus_object_type main_object_type = UBUS_OBJECT_TYPE("freecwmpd", freecwmp_methods); static struct ubus_object main_object = { .name = "tr069", @@ -302,32 +278,32 @@ static struct ubus_object main_object = { .n_methods = ARRAYSIZEOF(freecwmp_methods), }; -int -ubus_init(struct cwmp *cwmp) +int ubus_init(struct cwmp *cwmp) { uloop_init(); if (netlink_init()) { - CWMP_LOG(ERROR,"netlink initialization failed"); + CWMP_LOG(ERROR, "netlink initialization failed"); } if (cwmp->conf.ipv6_enable) { - if (netlink_init_v6()) { - CWMP_LOG(ERROR,"netlink initialization failed"); + if (netlink_init_v6()) { + CWMP_LOG(ERROR, "netlink initialization failed"); } } ctx = ubus_connect(cwmp->conf.ubus_socket); - if (!ctx) return -1; + if (!ctx) + return -1; ubus_add_uloop(ctx); - if (ubus_add_object(ctx, &main_object)) return -1; - uloop_run(); + if (ubus_add_object(ctx, &main_object)) + return -1; + uloop_run(); return 0; } -void -ubus_exit(void) +void ubus_exit(void) { if (ctx) ubus_free(ctx); @@ -354,7 +330,7 @@ int cwmp_ubus_call(const char *obj, const char *method, const struct cwmp_ubus_a int i = 0; int rc = 0; struct ubus_context *ubus_ctx = NULL; - struct blob_buf b = {0}; + struct blob_buf b = { 0 }; json_res = NULL; @@ -369,8 +345,7 @@ int cwmp_ubus_call(const char *obj, const char *method, const struct cwmp_ubus_a blobmsg_add_string(&b, u_args[i].key, u_args[i].val.str_val); else if (u_args[i].type == UBUS_Integer) { blobmsg_add_u32(&b, u_args[i].key, u_args[i].val.int_val); - } - else if (u_args[i].type == UBUS_Array_Obj || u_args[i].type == UBUS_Array_Str){ + } else if (u_args[i].type == UBUS_Array_Obj || u_args[i].type == UBUS_Array_Str) { void *a, *t; int j; a = blobmsg_open_array(&b, u_args[i].key); @@ -395,8 +370,8 @@ int cwmp_ubus_call(const char *obj, const char *method, const struct cwmp_ubus_a struct cwmp_param_value *param_value; void *a, *t; a = blobmsg_open_array(&b, u_args[i].key); - list_for_each_entry(param_value, u_args[i].val.param_value_list, list) { - if(!param_value->param) + list_for_each_entry (param_value, u_args[i].val.param_value_list, list) { + if (!param_value->param) break; t = blobmsg_open_table(&b, ""); blobmsg_add_string(&b, "path", param_value->param); @@ -407,8 +382,8 @@ int cwmp_ubus_call(const char *obj, const char *method, const struct cwmp_ubus_a } else if (u_args[i].type == UBUS_Obj_Obj) { struct cwmp_param_value *param_value; json_object *input_json_obj = json_object_new_object(); - list_for_each_entry(param_value, u_args[i].val.param_value_list, list) { - if(!param_value->param) + list_for_each_entry (param_value, u_args[i].val.param_value_list, list) { + if (!param_value->param) break; json_object_object_add(input_json_obj, param_value->param, json_object_new_string(param_value->value)); } @@ -422,7 +397,7 @@ int cwmp_ubus_call(const char *obj, const char *method, const struct cwmp_ubus_a else rc = -1; - *json_ret = json_res; + *json_ret = json_res; if (ubus_ctx) { ubus_free(ubus_ctx); diff --git a/xml.c b/xml.c index fa81c9e..7bd1fab 100644 --- a/xml.c +++ b/xml.c @@ -31,22 +31,22 @@ LIST_HEAD(list_upload); LIST_HEAD(list_schedule_download); LIST_HEAD(list_apply_schedule_download); LIST_HEAD(list_change_du_state); -static pthread_mutex_t mutex_download = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t threshold_download; -static pthread_mutex_t mutex_change_du_state = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t threshold_change_du_state; -static pthread_mutex_t mutex_schedule_download = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t threshold_schedule_download; -static pthread_mutex_t mutex_apply_schedule_download = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t threshold_apply_schedule_download; -static pthread_mutex_t mutex_upload = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t threshold_upload; -int count_download_queue = 0; -int count_schedule_inform_queue = 0; +static pthread_mutex_t mutex_download = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t threshold_download; +static pthread_mutex_t mutex_change_du_state = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t threshold_change_du_state; +static pthread_mutex_t mutex_schedule_download = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t threshold_schedule_download; +static pthread_mutex_t mutex_apply_schedule_download = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t threshold_apply_schedule_download; +static pthread_mutex_t mutex_upload = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t threshold_upload; +int count_download_queue = 0; +int count_schedule_inform_queue = 0; LIST_HEAD(list_schedule_inform); -static pthread_mutex_t mutex_schedule_inform = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t threshold_schedule_inform; +static pthread_mutex_t mutex_schedule_inform = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t threshold_schedule_inform; static const char *soap_env_url = "http://schemas.xmlsoap.org/soap/envelope/"; static const char *soap_enc_url = "http://schemas.xmlsoap.org/soap/encoding/"; @@ -58,101 +58,79 @@ typedef struct DEVICE_ID_STRUCT { char *parameter_name; } DEVICE_ID_STRUCT; -static const char *cwmp_urls[] = { - "urn:dslforum-org:cwmp-1-0", - "urn:dslforum-org:cwmp-1-1", - "urn:dslforum-org:cwmp-1-2", - "urn:dslforum-org:cwmp-1-3", - "urn:dslforum-org:cwmp-1-4", - NULL }; +static const char *cwmp_urls[] = { "urn:dslforum-org:cwmp-1-0", "urn:dslforum-org:cwmp-1-1", "urn:dslforum-org:cwmp-1-2", "urn:dslforum-org:cwmp-1-3", "urn:dslforum-org:cwmp-1-4", NULL }; -struct FAULT_CPE FAULT_CPE_ARRAY [] = { - [FAULT_CPE_METHOD_NOT_SUPPORTED] = {"9000", FAULT_9000, FAULT_CPE_TYPE_SERVER, "Method not supported"}, - [FAULT_CPE_REQUEST_DENIED] = {"9001", FAULT_9001, FAULT_CPE_TYPE_SERVER, "Request denied (no reason specified)"}, - [FAULT_CPE_INTERNAL_ERROR] = {"9002", FAULT_9002, FAULT_CPE_TYPE_SERVER, "Internal error"}, - [FAULT_CPE_INVALID_ARGUMENTS] = {"9003", FAULT_9003, FAULT_CPE_TYPE_CLIENT, "Invalid arguments"}, - [FAULT_CPE_RESOURCES_EXCEEDED] = {"9004", FAULT_9004, FAULT_CPE_TYPE_SERVER, "Resources exceeded"}, - [FAULT_CPE_INVALID_PARAMETER_NAME] = {"9005", FAULT_9005, FAULT_CPE_TYPE_CLIENT, "Invalid parameter name"}, - [FAULT_CPE_INVALID_PARAMETER_TYPE] = {"9006", FAULT_9006, FAULT_CPE_TYPE_CLIENT, "Invalid parameter type"}, - [FAULT_CPE_INVALID_PARAMETER_VALUE] = {"9007", FAULT_9007, FAULT_CPE_TYPE_CLIENT, "Invalid parameter value"}, - [FAULT_CPE_NON_WRITABLE_PARAMETER] = {"9008", FAULT_9008, FAULT_CPE_TYPE_CLIENT, "Attempt to set a non-writable parameter"}, - [FAULT_CPE_NOTIFICATION_REJECTED] = {"9009", FAULT_9009, FAULT_CPE_TYPE_SERVER, "Notification request rejected"}, - [FAULT_CPE_DOWNLOAD_FAILURE] = {"9010", FAULT_9010, FAULT_CPE_TYPE_SERVER, "Download failure"}, - [FAULT_CPE_UPLOAD_FAILURE] = {"9011", FAULT_9011, FAULT_CPE_TYPE_SERVER, "Upload failure"}, - [FAULT_CPE_FILE_TRANSFER_AUTHENTICATION_FAILURE]= {"9012", FAULT_9012, FAULT_CPE_TYPE_SERVER, "File transfer server authentication failure"}, - [FAULT_CPE_FILE_TRANSFER_UNSUPPORTED_PROTOCOL] = {"9013", FAULT_9013, FAULT_CPE_TYPE_SERVER, "Unsupported protocol for file transfer"}, - [FAULT_CPE_DOWNLOAD_FAIL_MULTICAST_GROUP] = {"9014", FAULT_9014, FAULT_CPE_TYPE_SERVER, "Download failure: unable to join multicast group"}, - [FAULT_CPE_DOWNLOAD_FAIL_CONTACT_SERVER] = {"9015", FAULT_9015, FAULT_CPE_TYPE_SERVER, "Download failure: unable to contact file server"}, - [FAULT_CPE_DOWNLOAD_FAIL_ACCESS_FILE] = {"9016", FAULT_9016, FAULT_CPE_TYPE_SERVER, "Download failure: unable to access file"}, - [FAULT_CPE_DOWNLOAD_FAIL_COMPLETE_DOWNLOAD] = {"9017", FAULT_9017, FAULT_CPE_TYPE_SERVER, "Download failure: unable to complete download"}, - [FAULT_CPE_DOWNLOAD_FAIL_FILE_CORRUPTED] = {"9018", FAULT_9018, FAULT_CPE_TYPE_SERVER, "Download failure: file corrupted"}, - [FAULT_CPE_DOWNLOAD_FAIL_FILE_AUTHENTICATION] = {"9019", FAULT_9019, FAULT_CPE_TYPE_SERVER, "Download failure: file authentication failure"}, - [FAULT_CPE_DOWNLOAD_FAIL_WITHIN_TIME_WINDOW] = {"9020", FAULT_9020, FAULT_CPE_TYPE_SERVER, "Download failure: unable to complete download"}, - [FAULT_CPE_DUPLICATE_DEPLOYMENT_UNIT] = {"9026", FAULT_9026, FAULT_CPE_TYPE_SERVER, "Duplicate deployment unit"}, - [FAULT_CPE_SYSTEM_RESOURCES_EXCEEDED] = {"9027", FAULT_9027, FAULT_CPE_TYPE_SERVER, "System ressources exceeded"}, - [FAULT_CPE_UNKNOWN_DEPLOYMENT_UNIT] = {"9028", FAULT_9028, FAULT_CPE_TYPE_SERVER, "Unknown deployment unit"}, - [FAULT_CPE_INVALID_DEPLOYMENT_UNIT_STATE] = {"9029", FAULT_9029, FAULT_CPE_TYPE_SERVER, "Invalid deployment unit state"}, - [FAULT_CPE_INVALID_DOWNGRADE_REJECTED] = {"9030", FAULT_9030, FAULT_CPE_TYPE_SERVER, "Invalid deployment unit Update: Downgrade not permitted"}, - [FAULT_CPE_INVALID_UPDATE_VERSION_UNSPECIFIED] = {"9031", FAULT_9031, FAULT_CPE_TYPE_SERVER, "Invalid deployment unit Update: Version not specified"}, - [FAULT_CPE_INVALID_UPDATE_VERSION_EXIST] = {"9031", FAULT_9032, FAULT_CPE_TYPE_SERVER, "Invalid deployment unit Update: Version already exist"} -}; +struct FAULT_CPE FAULT_CPE_ARRAY[] = {[FAULT_CPE_METHOD_NOT_SUPPORTED] = { "9000", FAULT_9000, FAULT_CPE_TYPE_SERVER, "Method not supported" }, + [FAULT_CPE_REQUEST_DENIED] = { "9001", FAULT_9001, FAULT_CPE_TYPE_SERVER, "Request denied (no reason specified)" }, + [FAULT_CPE_INTERNAL_ERROR] = { "9002", FAULT_9002, FAULT_CPE_TYPE_SERVER, "Internal error" }, + [FAULT_CPE_INVALID_ARGUMENTS] = { "9003", FAULT_9003, FAULT_CPE_TYPE_CLIENT, "Invalid arguments" }, + [FAULT_CPE_RESOURCES_EXCEEDED] = { "9004", FAULT_9004, FAULT_CPE_TYPE_SERVER, "Resources exceeded" }, + [FAULT_CPE_INVALID_PARAMETER_NAME] = { "9005", FAULT_9005, FAULT_CPE_TYPE_CLIENT, "Invalid parameter name" }, + [FAULT_CPE_INVALID_PARAMETER_TYPE] = { "9006", FAULT_9006, FAULT_CPE_TYPE_CLIENT, "Invalid parameter type" }, + [FAULT_CPE_INVALID_PARAMETER_VALUE] = { "9007", FAULT_9007, FAULT_CPE_TYPE_CLIENT, "Invalid parameter value" }, + [FAULT_CPE_NON_WRITABLE_PARAMETER] = { "9008", FAULT_9008, FAULT_CPE_TYPE_CLIENT, "Attempt to set a non-writable parameter" }, + [FAULT_CPE_NOTIFICATION_REJECTED] = { "9009", FAULT_9009, FAULT_CPE_TYPE_SERVER, "Notification request rejected" }, + [FAULT_CPE_DOWNLOAD_FAILURE] = { "9010", FAULT_9010, FAULT_CPE_TYPE_SERVER, "Download failure" }, + [FAULT_CPE_UPLOAD_FAILURE] = { "9011", FAULT_9011, FAULT_CPE_TYPE_SERVER, "Upload failure" }, + [FAULT_CPE_FILE_TRANSFER_AUTHENTICATION_FAILURE] = { "9012", FAULT_9012, FAULT_CPE_TYPE_SERVER, "File transfer server authentication failure" }, + [FAULT_CPE_FILE_TRANSFER_UNSUPPORTED_PROTOCOL] = { "9013", FAULT_9013, FAULT_CPE_TYPE_SERVER, "Unsupported protocol for file transfer" }, + [FAULT_CPE_DOWNLOAD_FAIL_MULTICAST_GROUP] = { "9014", FAULT_9014, FAULT_CPE_TYPE_SERVER, "Download failure: unable to join multicast group" }, + [FAULT_CPE_DOWNLOAD_FAIL_CONTACT_SERVER] = { "9015", FAULT_9015, FAULT_CPE_TYPE_SERVER, "Download failure: unable to contact file server" }, + [FAULT_CPE_DOWNLOAD_FAIL_ACCESS_FILE] = { "9016", FAULT_9016, FAULT_CPE_TYPE_SERVER, "Download failure: unable to access file" }, + [FAULT_CPE_DOWNLOAD_FAIL_COMPLETE_DOWNLOAD] = { "9017", FAULT_9017, FAULT_CPE_TYPE_SERVER, "Download failure: unable to complete download" }, + [FAULT_CPE_DOWNLOAD_FAIL_FILE_CORRUPTED] = { "9018", FAULT_9018, FAULT_CPE_TYPE_SERVER, "Download failure: file corrupted" }, + [FAULT_CPE_DOWNLOAD_FAIL_FILE_AUTHENTICATION] = { "9019", FAULT_9019, FAULT_CPE_TYPE_SERVER, "Download failure: file authentication failure" }, + [FAULT_CPE_DOWNLOAD_FAIL_WITHIN_TIME_WINDOW] = { "9020", FAULT_9020, FAULT_CPE_TYPE_SERVER, "Download failure: unable to complete download" }, + [FAULT_CPE_DUPLICATE_DEPLOYMENT_UNIT] = { "9026", FAULT_9026, FAULT_CPE_TYPE_SERVER, "Duplicate deployment unit" }, + [FAULT_CPE_SYSTEM_RESOURCES_EXCEEDED] = { "9027", FAULT_9027, FAULT_CPE_TYPE_SERVER, "System ressources exceeded" }, + [FAULT_CPE_UNKNOWN_DEPLOYMENT_UNIT] = { "9028", FAULT_9028, FAULT_CPE_TYPE_SERVER, "Unknown deployment unit" }, + [FAULT_CPE_INVALID_DEPLOYMENT_UNIT_STATE] = { "9029", FAULT_9029, FAULT_CPE_TYPE_SERVER, "Invalid deployment unit state" }, + [FAULT_CPE_INVALID_DOWNGRADE_REJECTED] = { "9030", FAULT_9030, FAULT_CPE_TYPE_SERVER, "Invalid deployment unit Update: Downgrade not permitted" }, + [FAULT_CPE_INVALID_UPDATE_VERSION_UNSPECIFIED] = { "9031", FAULT_9031, FAULT_CPE_TYPE_SERVER, "Invalid deployment unit Update: Version not specified" }, + [FAULT_CPE_INVALID_UPDATE_VERSION_EXIST] = { "9031", FAULT_9032, FAULT_CPE_TYPE_SERVER, "Invalid deployment unit Update: Version already exist" } }; -const struct rpc_cpe_method rpc_cpe_methods[] = { - [RPC_CPE_GET_RPC_METHODS] = {"GetRPCMethods", cwmp_handle_rpc_cpe_get_rpc_methods, AMD_1}, - [RPC_CPE_SET_PARAMETER_VALUES] = {"SetParameterValues", cwmp_handle_rpc_cpe_set_parameter_values, AMD_1}, - [RPC_CPE_GET_PARAMETER_VALUES] = {"GetParameterValues", cwmp_handle_rpc_cpe_get_parameter_values, AMD_1}, - [RPC_CPE_GET_PARAMETER_NAMES] = {"GetParameterNames", cwmp_handle_rpc_cpe_get_parameter_names, AMD_1}, - [RPC_CPE_SET_PARAMETER_ATTRIBUTES] = {"SetParameterAttributes", cwmp_handle_rpc_cpe_set_parameter_attributes, AMD_1}, - [RPC_CPE_GET_PARAMETER_ATTRIBUTES] = {"GetParameterAttributes", cwmp_handle_rpc_cpe_get_parameter_attributes, AMD_1}, - [RPC_CPE_ADD_OBJECT] = {"AddObject", cwmp_handle_rpc_cpe_add_object, AMD_1}, - [RPC_CPE_DELETE_OBJECT] = {"DeleteObject", cwmp_handle_rpc_cpe_delete_object, AMD_1}, - [RPC_CPE_REBOOT] = {"Reboot", cwmp_handle_rpc_cpe_reboot, AMD_1}, - [RPC_CPE_DOWNLOAD] = {"Download", cwmp_handle_rpc_cpe_download, AMD_1}, - [RPC_CPE_UPLOAD] = {"Upload", cwmp_handle_rpc_cpe_upload, AMD_1}, - [RPC_CPE_FACTORY_RESET] = {"FactoryReset", cwmp_handle_rpc_cpe_factory_reset, AMD_1}, - [RPC_CPE_CANCEL_TRANSFER] = {"CancelTransfer", cwmp_handle_rpc_cpe_cancel_transfer, AMD_3}, - [RPC_CPE_SCHEDULE_INFORM] = {"ScheduleInform", cwmp_handle_rpc_cpe_schedule_inform, AMD_1}, - [RPC_CPE_SCHEDULE_DOWNLOAD] = {"ScheduleDownload", cwmp_handle_rpc_cpe_schedule_download, AMD_3}, - [RPC_CPE_CHANGE_DU_STATE] = {"ChangeDUState", cwmp_handle_rpc_cpe_change_du_state, AMD_3}, - [RPC_CPE_X_FACTORY_RESET_SOFT] = {"X_FactoryResetSoft", cwmp_handle_rpc_cpe_x_factory_reset_soft, AMD_1}, - [RPC_CPE_FAULT] = {"Fault", cwmp_handle_rpc_cpe_fault, AMD_1} -}; +const struct rpc_cpe_method rpc_cpe_methods[] = {[RPC_CPE_GET_RPC_METHODS] = { "GetRPCMethods", cwmp_handle_rpc_cpe_get_rpc_methods, AMD_1 }, + [RPC_CPE_SET_PARAMETER_VALUES] = { "SetParameterValues", cwmp_handle_rpc_cpe_set_parameter_values, AMD_1 }, + [RPC_CPE_GET_PARAMETER_VALUES] = { "GetParameterValues", cwmp_handle_rpc_cpe_get_parameter_values, AMD_1 }, + [RPC_CPE_GET_PARAMETER_NAMES] = { "GetParameterNames", cwmp_handle_rpc_cpe_get_parameter_names, AMD_1 }, + [RPC_CPE_SET_PARAMETER_ATTRIBUTES] = { "SetParameterAttributes", cwmp_handle_rpc_cpe_set_parameter_attributes, AMD_1 }, + [RPC_CPE_GET_PARAMETER_ATTRIBUTES] = { "GetParameterAttributes", cwmp_handle_rpc_cpe_get_parameter_attributes, AMD_1 }, + [RPC_CPE_ADD_OBJECT] = { "AddObject", cwmp_handle_rpc_cpe_add_object, AMD_1 }, + [RPC_CPE_DELETE_OBJECT] = { "DeleteObject", cwmp_handle_rpc_cpe_delete_object, AMD_1 }, + [RPC_CPE_REBOOT] = { "Reboot", cwmp_handle_rpc_cpe_reboot, AMD_1 }, + [RPC_CPE_DOWNLOAD] = { "Download", cwmp_handle_rpc_cpe_download, AMD_1 }, + [RPC_CPE_UPLOAD] = { "Upload", cwmp_handle_rpc_cpe_upload, AMD_1 }, + [RPC_CPE_FACTORY_RESET] = { "FactoryReset", cwmp_handle_rpc_cpe_factory_reset, AMD_1 }, + [RPC_CPE_CANCEL_TRANSFER] = { "CancelTransfer", cwmp_handle_rpc_cpe_cancel_transfer, AMD_3 }, + [RPC_CPE_SCHEDULE_INFORM] = { "ScheduleInform", cwmp_handle_rpc_cpe_schedule_inform, AMD_1 }, + [RPC_CPE_SCHEDULE_DOWNLOAD] = { "ScheduleDownload", cwmp_handle_rpc_cpe_schedule_download, AMD_3 }, + [RPC_CPE_CHANGE_DU_STATE] = { "ChangeDUState", cwmp_handle_rpc_cpe_change_du_state, AMD_3 }, + [RPC_CPE_X_FACTORY_RESET_SOFT] = { "X_FactoryResetSoft", cwmp_handle_rpc_cpe_x_factory_reset_soft, AMD_1 }, + [RPC_CPE_FAULT] = { "Fault", cwmp_handle_rpc_cpe_fault, AMD_1 } }; -const struct rpc_acs_method rpc_acs_methods[] = { - [RPC_ACS_INFORM] = {"Inform", cwmp_rpc_acs_prepare_message_inform, cwmp_rpc_acs_parse_response_inform, cwmp_rpc_acs_destroy_data_inform}, - [RPC_ACS_GET_RPC_METHODS] = {"GetRPCMethods", cwmp_rpc_acs_prepare_get_rpc_methods, NULL, NULL}, - [RPC_ACS_TRANSFER_COMPLETE] = {"TransferComplete", cwmp_rpc_acs_prepare_transfer_complete, NULL, cwmp_rpc_acs_destroy_data_transfer_complete}, - [RPC_ACS_DU_STATE_CHANGE_COMPLETE] = {"DUStateChangeComplete", cwmp_rpc_acs_prepare_du_state_change_complete, NULL, cwmp_rpc_acs_destroy_data_du_state_change_complete} +const struct rpc_acs_method rpc_acs_methods[] = {[RPC_ACS_INFORM] = { "Inform", cwmp_rpc_acs_prepare_message_inform, cwmp_rpc_acs_parse_response_inform, cwmp_rpc_acs_destroy_data_inform }, [RPC_ACS_GET_RPC_METHODS] = { "GetRPCMethods", cwmp_rpc_acs_prepare_get_rpc_methods, NULL, NULL }, + [RPC_ACS_TRANSFER_COMPLETE] = { "TransferComplete", cwmp_rpc_acs_prepare_transfer_complete, NULL, cwmp_rpc_acs_destroy_data_transfer_complete }, + [RPC_ACS_DU_STATE_CHANGE_COMPLETE] = { "DUStateChangeComplete", cwmp_rpc_acs_prepare_du_state_change_complete, NULL, cwmp_rpc_acs_destroy_data_du_state_change_complete } }; -char* forced_inform_parameters[] = { - "Device.RootDataModelVersion", - "Device.DeviceInfo.HardwareVersion", - "Device.DeviceInfo.SoftwareVersion", - "Device.DeviceInfo.ProvisioningCode", - "Device.ManagementServer.ParameterKey", - "Device.ManagementServer.ConnectionRequestURL", - "Device.ManagementServer.AliasBasedAddressing" +char *forced_inform_parameters[] = { + "Device.RootDataModelVersion", "Device.DeviceInfo.HardwareVersion", "Device.DeviceInfo.SoftwareVersion", "Device.DeviceInfo.ProvisioningCode", "Device.ManagementServer.ParameterKey", "Device.ManagementServer.ConnectionRequestURL", "Device.ManagementServer.AliasBasedAddressing" }; -static mxml_node_t * /* O - Element node or NULL */ -mxmlFindElementOpaque(mxml_node_t *node, /* I - Current node */ - mxml_node_t *top, /* I - Top node */ - const char *text, /* I - Element text, if NULL return NULL */ - int descend) /* I - Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST */ +static mxml_node_t * /* O - Element node or NULL */ + mxmlFindElementOpaque(mxml_node_t *node, /* I - Current node */ + mxml_node_t *top, /* I - Top node */ + const char *text, /* I - Element text, if NULL return NULL */ + int descend) /* I - Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST */ { if (!node || !top || !text) return (NULL); node = mxmlWalkNext(node, top, descend); - while (node != NULL) - { - if (node->type == MXML_OPAQUE && - node->value.opaque && - (!text || !strcmp(node->value.opaque, text))) - { + while (node != NULL) { + if (node->type == MXML_OPAQUE && node->value.opaque && (!text || !strcmp(node->value.opaque, text))) { return (node); } @@ -171,36 +149,35 @@ static int xml_recreate_namespace(mxml_node_t *tree) int i; mxml_node_t *b = tree; - do - { + do { FREE(ns.soap_env); FREE(ns.soap_enc); FREE(ns.xsd); FREE(ns.xsi); FREE(ns.cwmp); - c = (char *) mxmlElementGetAttrName(b, soap_env_url); + c = (char *)mxmlElementGetAttrName(b, soap_env_url); if (c && *(c + 5) == ':') { ns.soap_env = strdup((c + 6)); } else { continue; } - c = (char *) mxmlElementGetAttrName(b, soap_enc_url); + c = (char *)mxmlElementGetAttrName(b, soap_enc_url); if (c && *(c + 5) == ':') { ns.soap_enc = strdup((c + 6)); } else { continue; } - c = (char *) mxmlElementGetAttrName(b, xsd_url); + c = (char *)mxmlElementGetAttrName(b, xsd_url); if (c && *(c + 5) == ':') { ns.xsd = strdup((c + 6)); } else { continue; } - c = (char *) mxmlElementGetAttrName(b, xsi_url); + c = (char *)mxmlElementGetAttrName(b, xsi_url); if (c && *(c + 5) == ':') { ns.xsi = strdup((c + 6)); } else { @@ -209,14 +186,15 @@ static int xml_recreate_namespace(mxml_node_t *tree) for (i = 0; cwmp_urls[i] != NULL; i++) { cwmp_urn = cwmp_urls[i]; - c = (char *) mxmlElementGetAttrName(b, cwmp_urn); + c = (char *)mxmlElementGetAttrName(b, cwmp_urn); if (c && *(c + 5) == ':') { ns.cwmp = strdup((c + 6)); break; } } - if (!ns.cwmp) continue; + if (!ns.cwmp) + continue; return 0; } while ((b = mxmlWalkNext(b, tree, MXML_DESCEND))); @@ -237,36 +215,35 @@ int xml_send_message(struct cwmp *cwmp, struct session *session, struct rpc *rpc { char *s, *c, *msg_out = NULL, *msg_in = NULL; int msg_out_len = 0, f, r = 0; - mxml_node_t *b; + mxml_node_t *b; if (session->tree_out) { - unsigned char *zmsg_out; msg_out = mxmlSaveAllocString(session->tree_out, whitespace_cb); - CWMP_LOG_XML_MSG(DEBUG,msg_out,XML_MSG_OUT); + CWMP_LOG_XML_MSG(DEBUG, msg_out, XML_MSG_OUT); if (cwmp->conf.compression != COMP_NONE) { - if (zlib_compress(msg_out, &zmsg_out, &msg_out_len, cwmp->conf.compression)) { - return -1; - } - FREE(msg_out); - msg_out = (char *) zmsg_out; + if (zlib_compress(msg_out, &zmsg_out, &msg_out_len, cwmp->conf.compression)) { + return -1; + } + FREE(msg_out); + msg_out = (char *)zmsg_out; } else { - msg_out_len = strlen(msg_out); + msg_out_len = strlen(msg_out); } } while (1) { f = 0; - if (http_send_message(cwmp, msg_out, msg_out_len,&msg_in)) { + if (http_send_message(cwmp, msg_out, msg_out_len, &msg_in)) { goto error; } if (msg_in) { - CWMP_LOG_XML_MSG(DEBUG,msg_in,XML_MSG_IN); + CWMP_LOG_XML_MSG(DEBUG, msg_in, XML_MSG_IN); if ((s = strstr(msg_in, ""))) - sscanf(s, "%d",&f); + sscanf(s, "%d", &f); if (f) { if (f == 8005) { r++; - if (r<5) { + if (r < 5) { FREE(msg_in); continue; } @@ -276,8 +253,7 @@ int xml_send_message(struct cwmp *cwmp, struct session *session, struct rpc *rpc } else { goto error; } - } - else { + } else { break; } } else { @@ -286,7 +262,8 @@ int xml_send_message(struct cwmp *cwmp, struct session *session, struct rpc *rpc } session->tree_in = mxmlLoadString(NULL, msg_in, MXML_OPAQUE_CALLBACK); - if (!session->tree_in) goto error; + if (!session->tree_in) + goto error; xml_recreate_namespace(session->tree_in); @@ -298,7 +275,7 @@ int xml_send_message(struct cwmp *cwmp, struct session *session, struct rpc *rpc FREE(c); if (b) { b = mxmlWalkNext(b, session->tree_in, MXML_DESCEND_FIRST); - if (b && b->type == MXML_OPAQUE && b->value.opaque) + if (b && b->type == MXML_OPAQUE && b->value.opaque) session->hold_request = atoi(b->value.opaque); } else { if (asprintf(&c, "%s:%s", ns.cwmp, "HoldRequests") == -1) @@ -326,8 +303,8 @@ error: int xml_prepare_msg_out(struct session *session) { - struct cwmp *cwmp = &cwmp_main; - struct config *conf; + struct cwmp *cwmp = &cwmp_main; + struct config *conf; conf = &(cwmp->conf); mxml_node_t *n; #ifdef DUMMY_MODE @@ -338,37 +315,42 @@ int xml_prepare_msg_out(struct session *session) #else session->tree_out = mxmlLoadString(NULL, CWMP_RESPONSE_MESSAGE, MXML_OPAQUE_CALLBACK); n = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Envelope", NULL, NULL, MXML_DESCEND); - if(!n) { return -1;} - mxmlElementSetAttr(n, "xmlns:cwmp", cwmp_urls[(conf->amd_version)-1]); + if (!n) { + return -1; + } + mxmlElementSetAttr(n, "xmlns:cwmp", cwmp_urls[(conf->amd_version) - 1]); #endif - if (!session->tree_out) return -1; + if (!session->tree_out) + return -1; return 0; } int xml_set_cwmp_id(struct session *session) { - char *c; - mxml_node_t *b; + char *c; + mxml_node_t *b; - /* define cwmp id */ - if (asprintf(&c, "%u", ++(cwmp_main.cwmp_id)) == -1) - return -1; + /* define cwmp id */ + if (asprintf(&c, "%u", ++(cwmp_main.cwmp_id)) == -1) + return -1; - b = mxmlFindElement(session->tree_out, session->tree_out, "cwmp:ID", NULL, NULL, MXML_DESCEND); - if (!b) return -1; + b = mxmlFindElement(session->tree_out, session->tree_out, "cwmp:ID", NULL, NULL, MXML_DESCEND); + if (!b) + return -1; - b = mxmlNewOpaque(b, c); - FREE(c); - if (!b) return -1; + b = mxmlNewOpaque(b, c); + FREE(c); + if (!b) + return -1; - return 0; + return 0; } int xml_set_cwmp_id_rpc_cpe(struct session *session) { - char *c; - mxml_node_t *b; + char *c; + mxml_node_t *b; /* handle cwmp:ID */ if (asprintf(&c, "%s:%s", ns.cwmp, "ID") == -1) @@ -377,41 +359,43 @@ int xml_set_cwmp_id_rpc_cpe(struct session *session) b = mxmlFindElement(session->tree_in, session->tree_in, c, NULL, NULL, MXML_DESCEND); FREE(c); - if (b) { - /* ACS send ID parameter */ + /* ACS send ID parameter */ b = mxmlWalkNext(b, session->tree_in, MXML_DESCEND_FIRST); - if (!b || b->type != MXML_OPAQUE || !b->value.opaque) return 0; + if (!b || b->type != MXML_OPAQUE || !b->value.opaque) + return 0; c = strdup(b->value.opaque); b = mxmlFindElement(session->tree_out, session->tree_out, "cwmp:ID", NULL, NULL, MXML_DESCEND); - if (!b) return -1; + if (!b) + return -1; b = mxmlNewOpaque(b, c); FREE(c); - if (!b) return -1; + if (!b) + return -1; } else { - /* ACS does not send ID parameter */ - int r = xml_set_cwmp_id(session); - return r; + /* ACS does not send ID parameter */ + int r = xml_set_cwmp_id(session); + return r; } return 0; } int xml_handle_message(struct session *session) { - struct rpc *rpc_cpe; - char *c; - int i; - mxml_node_t *b; - struct cwmp *cwmp = &cwmp_main; - struct config *conf; + struct rpc *rpc_cpe; + char *c; + int i; + mxml_node_t *b; + struct cwmp *cwmp = &cwmp_main; + struct config *conf; conf = &(cwmp->conf); /* get method */ if (asprintf(&c, "%s:%s", ns.soap_env, "Body") == -1) { - CWMP_LOG (INFO,"Internal error"); + CWMP_LOG(INFO, "Internal error"); session->fault_code = FAULT_CPE_INTERNAL_ERROR; goto fault; } @@ -419,8 +403,8 @@ int xml_handle_message(struct session *session) b = mxmlFindElement(session->tree_in, session->tree_in, c, NULL, NULL, MXML_DESCEND); FREE(c); - if(!b) { - CWMP_LOG (INFO,"Invalid received message"); + if (!b) { + CWMP_LOG(INFO, "Invalid received message"); session->fault_code = FAULT_CPE_REQUEST_DENIED; goto fault; } @@ -428,8 +412,10 @@ int xml_handle_message(struct session *session) while (1) { b = mxmlWalkNext(b, session->body_in, MXML_DESCEND_FIRST); - if (!b) goto error; - if (b->type == MXML_ELEMENT) break; + if (!b) + goto error; + if (b->type == MXML_ELEMENT) + break; } c = b->value.element.name; @@ -439,42 +425,44 @@ int xml_handle_message(struct session *session) size_t ns_len = tmp - c; if (strlen(ns.cwmp) != ns_len) { - CWMP_LOG (INFO,"Invalid received message"); + CWMP_LOG(INFO, "Invalid received message"); session->fault_code = FAULT_CPE_REQUEST_DENIED; goto fault; } - if (strncmp(ns.cwmp, c, ns_len)){ - CWMP_LOG (INFO,"Invalid received message"); + if (strncmp(ns.cwmp, c, ns_len)) { + CWMP_LOG(INFO, "Invalid received message"); session->fault_code = FAULT_CPE_REQUEST_DENIED; goto fault; } c = tmp + 1; } else { - CWMP_LOG (INFO,"Invalid received message"); + CWMP_LOG(INFO, "Invalid received message"); session->fault_code = FAULT_CPE_REQUEST_DENIED; goto fault; } - CWMP_LOG (INFO,"SOAP RPC message: %s", c); + CWMP_LOG(INFO, "SOAP RPC message: %s", c); rpc_cpe = NULL; for (i = 1; i < __RPC_CPE_MAX; i++) { - if (i!= RPC_CPE_FAULT && strcmp(c, rpc_cpe_methods[i].name) == 0 && rpc_cpe_methods[i].amd <= conf->amd_version) { - CWMP_LOG (INFO,"%s RPC is supported",c); + if (i != RPC_CPE_FAULT && strcmp(c, rpc_cpe_methods[i].name) == 0 && rpc_cpe_methods[i].amd <= conf->amd_version) { + CWMP_LOG(INFO, "%s RPC is supported", c); rpc_cpe = cwmp_add_session_rpc_cpe(session, i); - if (rpc_cpe == NULL) goto error; + if (rpc_cpe == NULL) + goto error; break; } } if (!rpc_cpe) { - CWMP_LOG (INFO,"%s RPC is not supported",c); + CWMP_LOG(INFO, "%s RPC is not supported", c); session->fault_code = FAULT_CPE_METHOD_NOT_SUPPORTED; goto fault; } return 0; fault: rpc_cpe = cwmp_add_session_rpc_cpe(session, RPC_CPE_FAULT); - if (rpc_cpe == NULL) goto error; + if (rpc_cpe == NULL) + goto error; return 0; error: return -1; @@ -482,12 +470,12 @@ error: const char *whitespace_cb(mxml_node_t *node, int where) { - static char tab_space[10 * sizeof(CWMP_MXML_TAB_SPACE) + 1]; + static char tab_space[10 * sizeof(CWMP_MXML_TAB_SPACE) + 1]; - if (node->type != MXML_ELEMENT) - return NULL; + if (node->type != MXML_ELEMENT) + return NULL; - switch (where) { + switch (where) { case MXML_WS_BEFORE_CLOSE: if (node->child && node->child->type != MXML_ELEMENT) return NULL; @@ -503,11 +491,10 @@ const char *whitespace_cb(mxml_node_t *node, int where) return "\n"; default: return NULL; - } - return NULL; + } + return NULL; } - /* * [RPC ACS]: Inform */ @@ -515,7 +502,7 @@ const char *whitespace_cb(mxml_node_t *node, int where) static int xml_prepare_events_inform(struct session *session, mxml_node_t *tree) { mxml_node_t *node, *b1, *b2; - char *c=NULL; + char *c = NULL; int n = 0; struct list_head *ilist; struct event_container *event_container; @@ -524,19 +511,18 @@ static int xml_prepare_events_inform(struct session *session, mxml_node_t *tree) if (!b1) return -1; - list_for_each(ilist,&(session->head_event_container)) - { + list_for_each (ilist, &(session->head_event_container)) { event_container = list_entry(ilist, struct event_container, list); - node = mxmlNewElement (b1, "EventStruct"); + node = mxmlNewElement(b1, "EventStruct"); if (!node) goto error; - b2 = mxmlNewElement (node, "EventCode"); + b2 = mxmlNewElement(node, "EventCode"); if (!b2) goto error; b2 = mxmlNewOpaque(b2, EVENT_CONST[event_container->code].CODE); if (!b2) goto error; - b2 = mxmlNewElement (node, "CommandKey"); + b2 = mxmlNewElement(node, "CommandKey"); if (!b2) goto error; if (event_container->command_key) { @@ -567,27 +553,24 @@ static int xml_prepare_parameters_inform(struct cwmp_dm_parameter *dm_parameter, if (b && dm_parameter->data != NULL) { node = b->parent->parent; b = mxmlFindElement(node, node, "Value", NULL, NULL, MXML_DESCEND_FIRST); - if(!b) + if (!b) return 0; - if (b->child && strcmp(dm_parameter->data, b->child->value.opaque)==0) + if (b->child && strcmp(dm_parameter->data, b->child->value.opaque) == 0) return 0; mxmlDelete(b); (*size)--; goto create_value; - } - else if (b && dm_parameter->data == NULL) - { + } else if (b && dm_parameter->data == NULL) { return 0; - } - else if (!b && dm_parameter->data == NULL) - { + } else if (!b && dm_parameter->data == NULL) { json_object *parameters = NULL; cwmp_get_parameter_values(dm_parameter->name, ¶meters); return 0; } - node = mxmlNewElement (parameter_list, "ParameterValueStruct"); - if (!node) return -1; + node = mxmlNewElement(parameter_list, "ParameterValueStruct"); + if (!node) + return -1; b = mxmlNewElement(node, "Name"); if (!b) @@ -603,7 +586,7 @@ create_value: return -1; #ifdef ACS_MULTI - mxmlElementSetAttr(b, "xsi:type", (dm_parameter->type && dm_parameter->type[0] != '\0')? dm_parameter->type : "xsd:string"); + mxmlElementSetAttr(b, "xsi:type", (dm_parameter->type && dm_parameter->type[0] != '\0') ? dm_parameter->type : "xsd:string"); #endif b = mxmlNewOpaque(b, dm_parameter->data); if (!b) @@ -619,7 +602,7 @@ static int xml_prepare_lwnotifications(mxml_node_t *parameter_list) struct list_head *p; struct cwmp_dm_parameter *lw_notification; - list_for_each(p, &list_lw_value_change) { + list_for_each (p, &list_lw_value_change) { lw_notification = list_entry(p, struct cwmp_dm_parameter, list); n = mxmlNewElement(parameter_list, "Param"); @@ -633,13 +616,13 @@ static int xml_prepare_lwnotifications(mxml_node_t *parameter_list) b = mxmlNewOpaque(b, lw_notification->name); if (!b) goto error; - + b = mxmlNewElement(n, "Value"); if (!b) goto error; - #ifdef ACS_MULTI - mxmlElementSetAttr(b, "xsi:type", lw_notification->type); - #endif +#ifdef ACS_MULTI + mxmlElementSetAttr(b, "xsi:type", lw_notification->type); +#endif b = mxmlNewOpaque(b, lw_notification->data); if (!b) goto error; @@ -685,7 +668,7 @@ int xml_prepare_lwnotification_message(char **msg_out) if (!b) goto error; - c = (char*)calculate_lwnotification_cnonce(); + c = (char *)calculate_lwnotification_cnonce(); b = mxmlNewOpaque(b, c); free(c); if (!b) @@ -730,14 +713,14 @@ error: return -1; } -char* xml_get_cwmp_version (int version) +char *xml_get_cwmp_version(int version) { - int k; - char tmp[10] = ""; + int k; + char tmp[10] = ""; static char versions[60] = ""; versions[0] = '\0'; - for (k=0; k < version; k++) { + for (k = 0; k < version; k++) { if (k == 0) sprintf(tmp, "1.%d", k); else @@ -747,17 +730,17 @@ char* xml_get_cwmp_version (int version) return versions; } -int cwmp_rpc_acs_prepare_message_inform (struct cwmp *cwmp, struct session *session, struct rpc *this) +int cwmp_rpc_acs_prepare_message_inform(struct cwmp *cwmp, struct session *session, struct rpc *this) { - struct cwmp_dm_parameter *dm_parameter, cwmp_dm_param = {0}; - struct event_container *event_container; - mxml_node_t *tree, *b, *node, *parameter_list; - char *c = NULL; - int size = 0; - struct list_head *ilist,*jlist; + struct cwmp_dm_parameter *dm_parameter, cwmp_dm_param = { 0 }; + struct event_container *event_container; + mxml_node_t *tree, *b, *node, *parameter_list; + char *c = NULL; + int size = 0; + struct list_head *ilist, *jlist; - if (session == NULL || this == NULL) - return -1; + if (session == NULL || this == NULL) + return -1; #ifdef DUMMY_MODE FILE *fp; @@ -770,10 +753,10 @@ int cwmp_rpc_acs_prepare_message_inform (struct cwmp *cwmp, struct session *sess if (!tree) goto error; b = mxmlFindElement(tree, tree, "soap_env:Envelope", NULL, NULL, MXML_DESCEND); - if(!b) + if (!b) goto error; - mxmlElementSetAttr(b, "xmlns:cwmp", cwmp_urls[(cwmp->conf.supported_amd_version)-1]); - if ( cwmp->conf.supported_amd_version >= 4 ) { + mxmlElementSetAttr(b, "xmlns:cwmp", cwmp_urls[(cwmp->conf.supported_amd_version) - 1]); + if (cwmp->conf.supported_amd_version >= 4) { b = mxmlFindElement(tree, tree, "soap_env:Header", NULL, NULL, MXML_DESCEND); if (!b) goto error; @@ -785,15 +768,15 @@ int cwmp_rpc_acs_prepare_message_inform (struct cwmp *cwmp, struct session *sess if (!node) goto error; } - if ( cwmp->conf.supported_amd_version >= 5 ) { + if (cwmp->conf.supported_amd_version >= 5) { node = mxmlNewElement(b, "cwmp:SupportedCWMPVersions"); if (!node) goto error; mxmlElementSetAttr(node, "soap_env:mustUnderstand", "0"); - node = mxmlNewOpaque(node, xml_get_cwmp_version(cwmp->conf.supported_amd_version)); + node = mxmlNewOpaque(node, xml_get_cwmp_version(cwmp->conf.supported_amd_version)); if (!node) goto error; - } + } b = mxmlFindElement(tree, tree, "RetryCount", NULL, NULL, MXML_DESCEND); if (!b) goto error; @@ -814,42 +797,40 @@ int cwmp_rpc_acs_prepare_message_inform (struct cwmp *cwmp, struct session *sess goto error; parameter_list = mxmlFindElement(tree, tree, "ParameterList", NULL, NULL, MXML_DESCEND); - if (!parameter_list) - goto error; + if (!parameter_list) + goto error; - list_for_each(ilist, &(session->head_event_container)) - { - event_container = list_entry(ilist, struct event_container, list); - list_for_each(jlist, &(event_container->head_dm_parameter)) - { - dm_parameter = list_entry(jlist, struct cwmp_dm_parameter, list); - if (xml_prepare_parameters_inform(dm_parameter, parameter_list, &size)) - goto error; - } - } + list_for_each (ilist, &(session->head_event_container)) { + event_container = list_entry(ilist, struct event_container, list); + list_for_each (jlist, &(event_container->head_dm_parameter)) { + dm_parameter = list_entry(jlist, struct cwmp_dm_parameter, list); + if (xml_prepare_parameters_inform(dm_parameter, parameter_list, &size)) + goto error; + } + } - b = mxmlFindElement(tree, tree, "OUI", NULL, NULL, MXML_DESCEND); + b = mxmlFindElement(tree, tree, "OUI", NULL, NULL, MXML_DESCEND); if (!b) goto error; b = mxmlNewOpaque(b, cwmp->deviceid.oui ? cwmp->deviceid.oui : ""); if (!b) goto error; - b = mxmlFindElement(tree, tree, "Manufacturer", NULL, NULL, MXML_DESCEND); + b = mxmlFindElement(tree, tree, "Manufacturer", NULL, NULL, MXML_DESCEND); if (!b) goto error; b = mxmlNewOpaque(b, cwmp->deviceid.manufacturer ? cwmp->deviceid.manufacturer : ""); if (!b) goto error; - b = mxmlFindElement(tree, tree, "ProductClass", NULL, NULL, MXML_DESCEND); + b = mxmlFindElement(tree, tree, "ProductClass", NULL, NULL, MXML_DESCEND); if (!b) goto error; b = mxmlNewOpaque(b, cwmp->deviceid.productclass ? cwmp->deviceid.productclass : ""); if (!b) goto error; - b = mxmlFindElement(tree, tree, "SerialNumber", NULL, NULL, MXML_DESCEND); + b = mxmlFindElement(tree, tree, "SerialNumber", NULL, NULL, MXML_DESCEND); if (!b) goto error; b = mxmlNewOpaque(b, cwmp->deviceid.serialnumber ? cwmp->deviceid.serialnumber : ""); @@ -857,62 +838,64 @@ int cwmp_rpc_acs_prepare_message_inform (struct cwmp *cwmp, struct session *sess goto error; json_object *parameters = NULL, *param_obj = NULL, *param_name = NULL, *param_value = NULL, *param_type = NULL; - size_t inform_parameters_nbre = sizeof(forced_inform_parameters)/sizeof(forced_inform_parameters[0]); + size_t inform_parameters_nbre = sizeof(forced_inform_parameters) / sizeof(forced_inform_parameters[0]); size_t i; - for (i=0; itree_out = tree; - return 0; error: - CWMP_LOG(ERROR,"Unable Prepare Message Inform",CWMP_BKP_FILE); + CWMP_LOG(ERROR, "Unable Prepare Message Inform", CWMP_BKP_FILE); return -1; } -int cwmp_rpc_acs_parse_response_inform (struct cwmp *cwmp, struct session *session, struct rpc *this __attribute__((unused))) +int cwmp_rpc_acs_parse_response_inform(struct cwmp *cwmp, struct session *session, struct rpc *this __attribute__((unused))) { mxml_node_t *tree, *b; - int i = -1; + int i = -1; char *c; const char *cwmp_urn; tree = session->tree_in; - if (!tree) goto error; + if (!tree) + goto error; b = mxmlFindElement(tree, tree, "MaxEnvelopes", NULL, NULL, MXML_DESCEND); - if (!b) goto error; + if (!b) + goto error; b = mxmlWalkNext(b, tree, MXML_DESCEND_FIRST); if (!b || b->type != MXML_OPAQUE || !b->value.opaque) goto error; - if(cwmp->conf.supported_amd_version == 1) { + if (cwmp->conf.supported_amd_version == 1) { cwmp->conf.amd_version = 1; return 0; } @@ -923,7 +906,7 @@ int cwmp_rpc_acs_parse_response_inform (struct cwmp *cwmp, struct session *sessi goto error; c = (char *)(b->value.opaque); if (c && *(c + 1) == '.') { - c+=2; + c += 2; cwmp->conf.amd_version = atoi(c) + 1; return 0; } @@ -931,36 +914,33 @@ int cwmp_rpc_acs_parse_response_inform (struct cwmp *cwmp, struct session *sessi } for (i = 0; cwmp_urls[i] != NULL; i++) { cwmp_urn = cwmp_urls[i]; - c = (char *) mxmlElementGetAttrName(tree, cwmp_urn); + c = (char *)mxmlElementGetAttrName(tree, cwmp_urn); if (c && *(c + 5) == ':') { break; } } if (i == 0) { - cwmp->conf.amd_version = i+1; - } - else if ( i >= 1 && i <= 3) { - switch (cwmp->conf.supported_amd_version) - { - case 1: - cwmp->conf.amd_version = 1; //Already done - break; - case 2: - case 3: - case 4: - //MIN ACS CPE - if (cwmp->conf.supported_amd_version <= i+1) - cwmp->conf.amd_version = cwmp->conf.supported_amd_version; - else - cwmp->conf.amd_version = i+1; - break; - //(cwmp->supported_conf.amd_version < i+1) ?"cwmp->conf.amd_version":"i+1"; - case 5: - cwmp->conf.amd_version = i+1; - break; + cwmp->conf.amd_version = i + 1; + } else if (i >= 1 && i <= 3) { + switch (cwmp->conf.supported_amd_version) { + case 1: + cwmp->conf.amd_version = 1; //Already done + break; + case 2: + case 3: + case 4: + //MIN ACS CPE + if (cwmp->conf.supported_amd_version <= i + 1) + cwmp->conf.amd_version = cwmp->conf.supported_amd_version; + else + cwmp->conf.amd_version = i + 1; + break; + //(cwmp->supported_conf.amd_version < i+1) ?"cwmp->conf.amd_version":"i+1"; + case 5: + cwmp->conf.amd_version = i + 1; + break; } - } - else if ( i >= 4 ) { + } else if (i >= 4) { cwmp->conf.amd_version = cwmp->conf.supported_amd_version; } return 0; @@ -986,11 +966,10 @@ int cwmp_rpc_acs_prepare_get_rpc_methods(struct cwmp *cwmp, struct session *sess tree = mxmlLoadString(NULL, CWMP_RESPONSE_MESSAGE, MXML_OPAQUE_CALLBACK); n = mxmlFindElement(tree, tree, "soap_env:Envelope", NULL, NULL, MXML_DESCEND); - if(!n) + if (!n) return -1; - mxmlElementSetAttr(n, "xmlns:cwmp", cwmp_urls[(cwmp->conf.amd_version)-1]); - n = mxmlFindElement(tree, tree, "soap_env:Body", - NULL, NULL, MXML_DESCEND); + mxmlElementSetAttr(n, "xmlns:cwmp", cwmp_urls[(cwmp->conf.amd_version) - 1]); + n = mxmlFindElement(tree, tree, "soap_env:Body", NULL, NULL, MXML_DESCEND); if (!n) return -1; @@ -1003,7 +982,7 @@ int cwmp_rpc_acs_prepare_get_rpc_methods(struct cwmp *cwmp, struct session *sess return 0; } -int cwmp_rpc_acs_parse_response_get_rpc_methods (struct session *session) +int cwmp_rpc_acs_parse_response_get_rpc_methods(struct session *session) { mxml_node_t *tree, *b; @@ -1034,12 +1013,11 @@ int cwmp_rpc_acs_prepare_transfer_complete(struct cwmp *cwmp, struct session *se p = (struct transfer_complete *)rpc->extra_data; tree = mxmlLoadString(NULL, CWMP_RESPONSE_MESSAGE, MXML_OPAQUE_CALLBACK); n = mxmlFindElement(tree, tree, "soap_env:Envelope", NULL, NULL, MXML_DESCEND); - if(!n) + if (!n) goto error; - mxmlElementSetAttr(n, "xmlns:cwmp", cwmp_urls[(cwmp->conf.amd_version)-1]); + mxmlElementSetAttr(n, "xmlns:cwmp", cwmp_urls[(cwmp->conf.amd_version) - 1]); - n = mxmlFindElement(tree, tree, "soap_env:Body", - NULL, NULL, MXML_DESCEND); + n = mxmlFindElement(tree, tree, "soap_env:Body", NULL, NULL, MXML_DESCEND); if (!n) goto error; @@ -1051,7 +1029,7 @@ int cwmp_rpc_acs_prepare_transfer_complete(struct cwmp *cwmp, struct session *se if (!n) goto error; - n = mxmlNewOpaque(n, p->command_key?p->command_key:""); + n = mxmlNewOpaque(n, p->command_key ? p->command_key : ""); if (!n) goto error; @@ -1082,7 +1060,7 @@ int cwmp_rpc_acs_prepare_transfer_complete(struct cwmp *cwmp, struct session *se if (!n) goto error; - n = mxmlNewOpaque(n, p->fault_code?FAULT_CPE_ARRAY[p->fault_code].CODE:"0"); + n = mxmlNewOpaque(n, p->fault_code ? FAULT_CPE_ARRAY[p->fault_code].CODE : "0"); if (!n) goto error; @@ -1091,7 +1069,7 @@ int cwmp_rpc_acs_prepare_transfer_complete(struct cwmp *cwmp, struct session *se if (!n) goto error; - n = mxmlNewOpaque(n, p->fault_code?FAULT_CPE_ARRAY [p->fault_code].DESCRIPTION:""); + n = mxmlNewOpaque(n, p->fault_code ? FAULT_CPE_ARRAY[p->fault_code].DESCRIPTION : ""); if (!n) goto error; @@ -1106,10 +1084,9 @@ error: int cwmp_rpc_acs_destroy_data_transfer_complete(struct session *session __attribute__((unused)), struct rpc *rpc) { struct transfer_complete *p; - if(rpc->extra_data != NULL) - { + if (rpc->extra_data != NULL) { p = (struct transfer_complete *)rpc->extra_data; - bkp_session_delete_transfer_complete (p); + bkp_session_delete_transfer_complete(p); bkp_session_save(); FREE(p->command_key); FREE(p->start_time); @@ -1134,10 +1111,10 @@ int cwmp_rpc_acs_prepare_du_state_change_complete(struct cwmp *cwmp, struct sess p = (struct du_state_change_complete *)rpc->extra_data; tree = mxmlLoadString(NULL, CWMP_RESPONSE_MESSAGE, MXML_OPAQUE_CALLBACK); n = mxmlFindElement(tree, tree, "soap_env:Envelope", NULL, NULL, MXML_DESCEND); - if(!n) + if (!n) goto error; - mxmlElementSetAttr(n, "xmlns:cwmp", cwmp_urls[(cwmp->conf.amd_version)-1]); + mxmlElementSetAttr(n, "xmlns:cwmp", cwmp_urls[(cwmp->conf.amd_version) - 1]); n = mxmlFindElement(tree, tree, "soap_env:Body", NULL, NULL, MXML_DESCEND); if (!n) goto error; @@ -1157,9 +1134,9 @@ int cwmp_rpc_acs_prepare_du_state_change_complete(struct cwmp *cwmp, struct sess n = mxmlNewElement(n, "Results"); if (!n) goto error; - - list_for_each_entry(q, &(p->list_opresult), list) { - t = mxmlNewElement(n, "OpResultStruct"); + + list_for_each_entry (q, &(p->list_opresult), list) { + t = mxmlNewElement(n, "OpResultStruct"); if (!t) goto error; @@ -1231,7 +1208,7 @@ int cwmp_rpc_acs_prepare_du_state_change_complete(struct cwmp *cwmp, struct sess if (!b) goto error; - b = mxmlNewOpaque(b, q->fault?FAULT_CPE_ARRAY[q->fault].CODE:"0"); + b = mxmlNewOpaque(b, q->fault ? FAULT_CPE_ARRAY[q->fault].CODE : "0"); if (!b) goto error; @@ -1240,7 +1217,7 @@ int cwmp_rpc_acs_prepare_du_state_change_complete(struct cwmp *cwmp, struct sess if (!b) goto error; - b= mxmlNewOpaque(b, q->fault?FAULT_CPE_ARRAY [q->fault].DESCRIPTION:""); + b = mxmlNewOpaque(b, q->fault ? FAULT_CPE_ARRAY[q->fault].DESCRIPTION : ""); if (!b) goto error; } @@ -1254,8 +1231,7 @@ error: int cwmp_rpc_acs_destroy_data_du_state_change_complete(struct session *session __attribute__((unused)), struct rpc *rpc) { struct du_state_change_complete *p; - if(rpc->extra_data != NULL) - { + if (rpc->extra_data != NULL) { p = (struct du_state_change_complete *)rpc->extra_data; bkp_session_delete_du_state_change_complete(p); bkp_session_save(); @@ -1264,7 +1240,6 @@ int cwmp_rpc_acs_destroy_data_du_state_change_complete(struct session *session _ return 0; } - /* * [RPC CPE]: GetParameterValues */ @@ -1278,8 +1253,7 @@ int cwmp_handle_rpc_cpe_get_parameter_values(struct session *session, struct rpc struct json_object *parameters = NULL, *param_obj = NULL, *param_name = NULL, *param_value = NULL, *param_type = NULL; b = session->body_in; - n = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", - NULL, NULL, MXML_DESCEND); + n = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); if (!n) goto fault; @@ -1296,15 +1270,11 @@ int cwmp_handle_rpc_cpe_get_parameter_values(struct session *session, struct rpc #endif while (b) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "string")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "string")) { parameter_name = b->value.opaque; } if (b && b->type == MXML_ELEMENT && /* added in order to support GetParameterValues with empty string*/ - !strcmp(b->value.element.name, "string") && - !b->child) { + !strcmp(b->value.element.name, "string") && !b->child) { parameter_name = ""; } if (parameter_name) { @@ -1314,7 +1284,8 @@ int cwmp_handle_rpc_cpe_get_parameter_values(struct session *session, struct rpc FREE(err); goto fault; } - foreach_jsonobj_in_array(param_obj, parameters) { + foreach_jsonobj_in_array(param_obj, parameters) + { n = mxmlNewElement(parameter_list, "ParameterValueStruct"); if (!n) goto fault; @@ -1339,11 +1310,11 @@ int cwmp_handle_rpc_cpe_get_parameter_values(struct session *session, struct rpc #endif json_object_object_get_ex(param_obj, "value", ¶m_value); - n = mxmlNewOpaque(n, param_value? json_object_get_string(param_value) : ""); + n = mxmlNewOpaque(n, param_value ? json_object_get_string(param_value) : ""); if (!n) goto fault; counter++; - } + } FREE_JSON(parameters) } b = mxmlWalkNext(b, session->body_in, MXML_DESCEND); @@ -1351,9 +1322,9 @@ int cwmp_handle_rpc_cpe_get_parameter_values(struct session *session, struct rpc } #ifdef ACS_MULTI - b = mxmlFindElement(session->tree_out, session->tree_out, "ParameterList", - NULL, NULL, MXML_DESCEND); - if (!b) goto fault; + b = mxmlFindElement(session->tree_out, session->tree_out, "ParameterList", NULL, NULL, MXML_DESCEND); + if (!b) + goto fault; if (asprintf(&c, "cwmp:ParameterValueStruct[%d]", counter) == -1) goto fault; @@ -1386,8 +1357,7 @@ int cwmp_handle_rpc_cpe_get_parameter_names(struct session *session, struct rpc int counter = 0, fault_code = FAULT_CPE_INTERNAL_ERROR; struct json_object *parameters = NULL, *param_obj = NULL, *param_name = NULL, *writable = NULL; - n = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", - NULL, NULL, MXML_DESCEND); + n = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); if (!n) goto fault; @@ -1404,27 +1374,19 @@ int cwmp_handle_rpc_cpe_get_parameter_names(struct session *session, struct rpc #endif while (b) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "ParameterPath")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "ParameterPath")) { parameter_name = b->value.opaque; } - if (b && b->type == MXML_ELEMENT && - !strcmp(b->value.element.name, "ParameterPath") && - !b->child) { + if (b && b->type == MXML_ELEMENT && !strcmp(b->value.element.name, "ParameterPath") && !b->child) { parameter_name = ""; } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "NextLevel")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "NextLevel")) { NextLevel = b->value.opaque; } b = mxmlWalkNext(b, session->body_in, MXML_DESCEND); } if (parameter_name && NextLevel) { - char *err = cwmp_get_parameter_names(parameter_name, strcmp(NextLevel, "true") == 0 || strcmp(NextLevel, "1") == 0?true:false, ¶meters); + char *err = cwmp_get_parameter_names(parameter_name, strcmp(NextLevel, "true") == 0 || strcmp(NextLevel, "1") == 0 ? true : false, ¶meters); if (err) { fault_code = cwmp_get_fault_code_by_string(err); FREE(err); @@ -1432,7 +1394,8 @@ int cwmp_handle_rpc_cpe_get_parameter_names(struct session *session, struct rpc } } - foreach_jsonobj_in_array(param_obj, parameters) { + foreach_jsonobj_in_array(param_obj, parameters) + { n = mxmlNewElement(parameter_list, "ParameterInfoStruct"); if (!n) goto fault; @@ -1457,13 +1420,12 @@ int cwmp_handle_rpc_cpe_get_parameter_names(struct session *session, struct rpc goto fault; counter++; - } #ifdef ACS_MULTI - b = mxmlFindElement(session->tree_out, session->tree_out, "ParameterList", - NULL, NULL, MXML_DESCEND); - if (!b) goto fault; + b = mxmlFindElement(session->tree_out, session->tree_out, "ParameterList", NULL, NULL, MXML_DESCEND); + if (!b) + goto fault; if (asprintf(&c, "cwmp:ParameterInfoStruct[%d]", counter) == -1) goto fault; @@ -1492,13 +1454,12 @@ int cwmp_handle_rpc_cpe_get_parameter_attributes(struct session *session, struct { mxml_node_t *n, *parameter_list, *b; char *parameter_name = NULL; - char *c=NULL; + char *c = NULL; int counter = 0, fault_code = FAULT_CPE_INTERNAL_ERROR; struct json_object *parameters = NULL, *param_obj = NULL, *param_name = NULL, *notification = NULL; b = session->body_in; - n = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", - NULL, NULL, MXML_DESCEND); + n = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); if (!n) goto fault; @@ -1515,25 +1476,21 @@ int cwmp_handle_rpc_cpe_get_parameter_attributes(struct session *session, struct #endif while (b) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "string")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "string")) { parameter_name = b->value.opaque; } - if (b && b->type == MXML_ELEMENT && - !strcmp(b->value.element.name, "string") && - !b->child) { + if (b && b->type == MXML_ELEMENT && !strcmp(b->value.element.name, "string") && !b->child) { parameter_name = ""; } if (parameter_name) { - char* err = cwmp_get_parameter_attributes(parameter_name, ¶meters); + char *err = cwmp_get_parameter_attributes(parameter_name, ¶meters); if (err) { fault_code = cwmp_get_fault_code_by_string(err); FREE(err); goto fault; } - foreach_jsonobj_in_array(param_obj, parameters) { + foreach_jsonobj_in_array(param_obj, parameters) + { n = mxmlNewElement(parameter_list, "ParameterAttributeStruct"); if (!n) goto fault; @@ -1567,7 +1524,6 @@ int cwmp_handle_rpc_cpe_get_parameter_attributes(struct session *session, struct goto fault; counter++; - } FREE_JSON(param_obj) FREE_JSON(parameters) @@ -1576,9 +1532,9 @@ int cwmp_handle_rpc_cpe_get_parameter_attributes(struct session *session, struct parameter_name = NULL; } #ifdef ACS_MULTI - b = mxmlFindElement(session->tree_out, session->tree_out, "ParameterList", - NULL, NULL, MXML_DESCEND); - if (!b) goto fault; + b = mxmlFindElement(session->tree_out, session->tree_out, "ParameterList", NULL, NULL, MXML_DESCEND); + if (!b) + goto fault; if (asprintf(&c, "cwmp:ParameterAttributeStruct[%d]", counter) == -1) goto fault; @@ -1608,11 +1564,8 @@ static int is_duplicated_parameter(mxml_node_t *param_node, struct session *sess { mxml_node_t *b = param_node; while ((b = mxmlWalkNext(b, session->body_in, MXML_DESCEND))) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "Name")) { - if(strcmp(b->value.opaque, param_node->value.opaque)==0) + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "Name")) { + if (strcmp(b->value.opaque, param_node->value.opaque) == 0) return -1; } } @@ -1629,7 +1582,7 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct session *session, struct rpc int fault_code = FAULT_CPE_INTERNAL_ERROR; b = mxmlFindElement(session->body_in, session->body_in, "ParameterList", NULL, NULL, MXML_DESCEND); - if(!b) { + if (!b) { fault_code = FAULT_CPE_REQUEST_DENIED; goto fault; } @@ -1638,43 +1591,34 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct session *session, struct rpc rpc->list_set_value_fault = &list_fault_param; LIST_HEAD(list_set_param_value); while (b) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "Name")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "Name")) { parameter_name = strdup(b->value.opaque); - if (is_duplicated_parameter(b,session)) { + if (is_duplicated_parameter(b, session)) { fault_code = FAULT_CPE_INVALID_ARGUMENTS; goto fault; } FREE(parameter_value); } - if (b && b->type == MXML_ELEMENT && - !strcmp(b->value.element.name, "Name") && - !b->child) { + if (b && b->type == MXML_ELEMENT && !strcmp(b->value.element.name, "Name") && !b->child) { parameter_name = strdup(""); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "Value")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "Value")) { int whitespace = 0; parameter_value = strdup((char *)mxmlGetOpaque(b)); n = b->parent; while ((b = mxmlWalkNext(b, n, MXML_DESCEND))) { v = (char *)mxmlGetOpaque(b); - if (!whitespace) break; + if (!whitespace) + break; asprintf(&c, "%s %s", parameter_value, v); FREE(parameter_value); parameter_value = strdup(c); } b = n->last_child; } - if (b && b->type == MXML_ELEMENT && - !strcmp(b->value.element.name, "Value") && - !b->child) { + if (b && b->type == MXML_ELEMENT && !strcmp(b->value.element.name, "Value") && !b->child) { parameter_value = strdup(""); } if (parameter_name && parameter_value) { @@ -1686,7 +1630,7 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct session *session, struct rpc } b = mxmlFindElement(session->body_in, session->body_in, "ParameterKey", NULL, NULL, MXML_DESCEND); - if(!b) { + if (!b) { fault_code = FAULT_CPE_REQUEST_DENIED; goto fault; } @@ -1695,7 +1639,7 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct session *session, struct rpc parameter_key = b->value.opaque; json_object *faults_array = NULL; int flag = 0; - if(!transaction_started) { + if (!transaction_started) { if (!cwmp_transaction_start("cwmp")) goto fault; transaction_started = true; @@ -1703,10 +1647,11 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct session *session, struct rpc cwmp_set_multiple_parameters_values(list_set_param_value, parameter_key, &flag, &faults_array); if (faults_array != NULL) { json_object *fault_obj = NULL, *param_name = NULL, *fault_value = NULL; - foreach_jsonobj_in_array(fault_obj, faults_array) { + foreach_jsonobj_in_array(fault_obj, faults_array) + { json_object_object_get_ex(fault_obj, "path", ¶m_name); json_object_object_get_ex(fault_obj, "fault", &fault_value); - cwmp_add_list_fault_param((char*)json_object_get_string(param_name), atoi(json_object_get_string(fault_value)), rpc->list_set_value_fault); + cwmp_add_list_fault_param((char *)json_object_get_string(param_name), atoi(json_object_get_string(fault_value)), rpc->list_set_value_fault); } fault_code = FAULT_CPE_INVALID_ARGUMENTS; FREE_JSON(fault_obj) @@ -1714,13 +1659,12 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct session *session, struct rpc goto fault; } struct cwmp_param_value *param_value; - list_for_each_entry(param_value, &list_set_param_value, list) + list_for_each_entry (param_value, &list_set_param_value, list) set_diagnostic_parameter_structure_value(param_value->param, param_value->value); cwmp_free_all_list_param_value(&list_set_param_value); - b = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", - NULL, NULL, MXML_DESCEND); + b = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); if (!b) goto fault; @@ -1736,7 +1680,7 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct session *session, struct rpc if (!b) goto fault; - cwmp_set_end_session(flag|END_SESSION_TRANSACTION_COMMIT|END_SESSION_SET_NOTIFICATION_UPDATE); + cwmp_set_end_session(flag | END_SESSION_TRANSACTION_COMMIT | END_SESSION_SET_NOTIFICATION_UPDATE); return 0; fault: @@ -1773,7 +1717,8 @@ int cwmp_handle_rpc_cpe_set_parameter_attributes(struct session *session, struct n = mxmlFindElement(session->tree_in, session->tree_in, c, NULL, NULL, MXML_DESCEND); FREE(c); - if (!n) goto fault; + if (!n) + goto fault; b = n; if (!transaction_started) { @@ -1782,47 +1727,31 @@ int cwmp_handle_rpc_cpe_set_parameter_attributes(struct session *session, struct transaction_started = true; } while (b != NULL) { - if (b && b->type == MXML_ELEMENT && - !strcmp(b->value.element.name, "SetParameterAttributesStruct")) { + if (b && b->type == MXML_ELEMENT && !strcmp(b->value.element.name, "SetParameterAttributesStruct")) { //attr_notification_update = NULL; parameter_name = NULL; parameter_notification = NULL; } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "Name")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "Name")) { parameter_name = b->value.opaque; } - if (b && b->type == MXML_ELEMENT && - !strcmp(b->value.element.name, "Name") && - !b->child) { + if (b && b->type == MXML_ELEMENT && !strcmp(b->value.element.name, "Name") && !b->child) { parameter_name = ""; } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "NotificationChange")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "NotificationChange")) { //attr_notification_update = b->value.opaque; } - if (b && b->type == MXML_ELEMENT && - !strcmp(b->value.element.name, "NotificationChange") && - !b->child) { + if (b && b->type == MXML_ELEMENT && !strcmp(b->value.element.name, "NotificationChange") && !b->child) { //attr_notification_update = ""; } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "Notification")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "Notification")) { parameter_notification = b->value.opaque; } - if (b && b->type == MXML_ELEMENT && - !strcmp(b->value.element.name, "Notification") && - !b->child) { + if (b && b->type == MXML_ELEMENT && !strcmp(b->value.element.name, "Notification") && !b->child) { parameter_notification = ""; } if (parameter_name && parameter_notification) { - char* err = cwmp_set_parameter_attributes(parameter_name, parameter_notification); + char *err = cwmp_set_parameter_attributes(parameter_name, parameter_notification); if (err) { fault_code = cwmp_get_fault_code_by_string(err); FREE(err); @@ -1842,7 +1771,7 @@ int cwmp_handle_rpc_cpe_set_parameter_attributes(struct session *session, struct if (!b) goto fault; - cwmp_set_end_session(END_SESSION_SET_NOTIFICATION_UPDATE|END_SESSION_RELOAD|END_SESSION_TRANSACTION_COMMIT); + cwmp_set_end_session(END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RELOAD | END_SESSION_TRANSACTION_COMMIT); return 0; fault: @@ -1876,16 +1805,10 @@ int cwmp_handle_rpc_cpe_add_object(struct session *session, struct rpc *rpc) b = session->body_in; while (b) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "ObjectName")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "ObjectName")) { object_name = b->value.opaque; } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "ParameterKey")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "ParameterKey")) { parameter_key = b->value.opaque; } b = mxmlWalkNext(b, session->body_in, MXML_DESCEND); @@ -1907,8 +1830,7 @@ int cwmp_handle_rpc_cpe_add_object(struct session *session, struct rpc *rpc) goto fault; } - b = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", - NULL, NULL, MXML_DESCEND); + b = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); if (!b) goto fault; @@ -1967,16 +1889,10 @@ int cwmp_handle_rpc_cpe_delete_object(struct session *session, struct rpc *rpc) b = session->body_in; while (b) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "ObjectName")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "ObjectName")) { object_name = b->value.opaque; } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "ParameterKey")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "ParameterKey")) { parameter_key = b->value.opaque; } b = mxmlWalkNext(b, session->body_in, MXML_DESCEND); @@ -1998,9 +1914,7 @@ int cwmp_handle_rpc_cpe_delete_object(struct session *session, struct rpc *rpc) goto fault; } - - b = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", - NULL, NULL, MXML_DESCEND); + b = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); if (!b) goto fault; @@ -2043,10 +1957,9 @@ int cwmp_handle_rpc_cpe_get_rpc_methods(struct session *session, struct rpc *rpc { mxml_node_t *n, *method_list, *b = session->body_in; char *c = NULL; - int i,counter = 0; + int i, counter = 0; - n = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", - NULL, NULL, MXML_DESCEND); + n = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); if (!n) goto fault; @@ -2058,10 +1971,8 @@ int cwmp_handle_rpc_cpe_get_rpc_methods(struct session *session, struct rpc *rpc if (!method_list) goto fault; - for (i=1; i<__RPC_CPE_MAX; i++) - { - if (i!= RPC_CPE_FAULT) - { + for (i = 1; i < __RPC_CPE_MAX; i++) { + if (i != RPC_CPE_FAULT) { n = mxmlNewElement(method_list, "string"); if (!n) goto fault; @@ -2074,8 +1985,7 @@ int cwmp_handle_rpc_cpe_get_rpc_methods(struct session *session, struct rpc *rpc } } #ifdef ACS_MULTI - b = mxmlFindElement(session->tree_out, session->tree_out, "MethodList", - NULL, NULL, MXML_DESCEND); + b = mxmlFindElement(session->tree_out, session->tree_out, "MethodList", NULL, NULL, MXML_DESCEND); if (!b) goto fault; @@ -2131,7 +2041,8 @@ error: * [RPC CPE]: X_FactoryResetSoft */ -int cwmp_handle_rpc_cpe_x_factory_reset_soft(struct session *session, struct rpc *rpc){ +int cwmp_handle_rpc_cpe_x_factory_reset_soft(struct session *session, struct rpc *rpc) +{ mxml_node_t *b; b = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); @@ -2142,7 +2053,6 @@ int cwmp_handle_rpc_cpe_x_factory_reset_soft(struct session *session, struct rpc if (!b) goto fault; - cwmp_set_end_session(END_SESSION_X_FACTORY_RESET_SOFT); return 0; @@ -2167,16 +2077,13 @@ int cwmp_handle_rpc_cpe_cancel_transfer(struct session *session, struct rpc *rpc b = session->body_in; while (b) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "CommandKey")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "CommandKey")) { command_key = b->value.opaque; } b = mxmlWalkNext(b, session->body_in, MXML_DESCEND); } - if(command_key) { - cancel_transfer(command_key); + if (command_key) { + cancel_transfer(command_key); } b = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); if (!b) @@ -2195,50 +2102,46 @@ error: return -1; } -int cancel_transfer(char * key) { - struct upload *pupload; - struct download *pdownload; - struct list_head *ilist, *q; - - if(list_download.next!=&(list_download)) { - list_for_each_safe(ilist,q,&(list_download)) - { +int cancel_transfer(char *key) +{ + struct upload *pupload; + struct download *pdownload; + struct list_head *ilist, *q; + + if (list_download.next != &(list_download)) { + list_for_each_safe (ilist, q, &(list_download)) { pdownload = list_entry(ilist, struct download, list); - if(strcmp(pdownload->command_key, key) == 0 ) - { - pthread_mutex_lock (&mutex_download); + if (strcmp(pdownload->command_key, key) == 0) { + pthread_mutex_lock(&mutex_download); bkp_session_delete_download(pdownload); bkp_session_save(); - list_del (&(pdownload->list)); - if(pdownload->scheduled_time != 0) - count_download_queue--; + list_del(&(pdownload->list)); + if (pdownload->scheduled_time != 0) + count_download_queue--; cwmp_free_download_request(pdownload); - pthread_mutex_unlock (&mutex_download); - } - } + pthread_mutex_unlock(&mutex_download); + } + } } - if(list_upload.next!=&(list_upload)) { - list_for_each_safe(ilist,q,&(list_upload)) - { + if (list_upload.next != &(list_upload)) { + list_for_each_safe (ilist, q, &(list_upload)) { pupload = list_entry(ilist, struct upload, list); - if(strcmp(pupload->command_key, key) == 0 ) - { - pthread_mutex_lock (&mutex_upload); + if (strcmp(pupload->command_key, key) == 0) { + pthread_mutex_lock(&mutex_upload); bkp_session_delete_upload(pupload); bkp_session_save(); //is it needed - list_del (&(pupload->list)); - if(pupload->scheduled_time != 0) - count_download_queue--; + list_del(&(pupload->list)); + if (pupload->scheduled_time != 0) + count_download_queue--; cwmp_free_upload_request(pupload); - pthread_mutex_unlock (&mutex_upload); - } - } + pthread_mutex_unlock(&mutex_upload); + } + } } // Cancel schedule download return CWMP_OK; } - /* * [RPC CPE]: Reboot */ @@ -2246,37 +2149,35 @@ int cancel_transfer(char * key) { int cwmp_handle_rpc_cpe_reboot(struct session *session, struct rpc *rpc) { mxml_node_t *b; - struct event_container *event_container; + struct event_container *event_container; char *command_key = NULL; b = session->body_in; while (b) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "CommandKey")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "CommandKey")) { command_key = b->value.opaque; commandKey = strdup(b->value.opaque); } b = mxmlWalkNext(b, session->body_in, MXML_DESCEND); } - pthread_mutex_lock (&(cwmp_main.mutex_session_queue)); - event_container = cwmp_add_event_container (&cwmp_main, EVENT_IDX_M_Reboot, command_key); - if (event_container == NULL) - { - pthread_mutex_unlock (&(cwmp_main.mutex_session_queue)); + pthread_mutex_lock(&(cwmp_main.mutex_session_queue)); + event_container = cwmp_add_event_container(&cwmp_main, EVENT_IDX_M_Reboot, command_key); + if (event_container == NULL) { + pthread_mutex_unlock(&(cwmp_main.mutex_session_queue)); goto fault; } - cwmp_save_event_container (event_container); - pthread_mutex_unlock (&(cwmp_main.mutex_session_queue)); + cwmp_save_event_container(event_container); + pthread_mutex_unlock(&(cwmp_main.mutex_session_queue)); b = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); - if (!b) goto fault; + if (!b) + goto fault; b = mxmlNewElement(b, "cwmp:RebootResponse"); - if (!b) goto fault; + if (!b) + goto fault; cwmp_set_end_session(END_SESSION_REBOOT); @@ -2295,100 +2196,91 @@ error: * [RPC CPE]: ScheduleInform */ -void *thread_cwmp_rpc_cpe_scheduleInform (void *v) +void *thread_cwmp_rpc_cpe_scheduleInform(void *v) { - struct cwmp *cwmp = (struct cwmp *)v; - struct event_container *event_container; - struct schedule_inform *schedule_inform; - struct timespec si_timeout = {0, 0}; - time_t current_time, stime; - bool add_event_same_time = false; + struct cwmp *cwmp = (struct cwmp *)v; + struct event_container *event_container; + struct schedule_inform *schedule_inform; + struct timespec si_timeout = { 0, 0 }; + time_t current_time, stime; + bool add_event_same_time = false; - for(;;) - { - if(list_schedule_inform.next!=&(list_schedule_inform)) { - schedule_inform = list_entry(list_schedule_inform.next,struct schedule_inform, list); - stime = schedule_inform->scheduled_time; - current_time = time(NULL); - if (current_time >= schedule_inform->scheduled_time) - { - if (add_event_same_time) - { - pthread_mutex_lock (&mutex_schedule_inform); - list_del (&(schedule_inform->list)); - if (schedule_inform->commandKey!=NULL) - { - bkp_session_delete_schedule_inform(schedule_inform->scheduled_time,schedule_inform->commandKey); - free (schedule_inform->commandKey); - } - free(schedule_inform); - pthread_mutex_unlock (&mutex_schedule_inform); - continue; - } - pthread_mutex_lock (&(cwmp->mutex_session_queue)); - CWMP_LOG(INFO,"Schedule Inform thread: add ScheduleInform event in the queue"); - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_3SCHEDULED, ""); - if (event_container != NULL) - { - cwmp_save_event_container (event_container); - } - event_container = cwmp_add_event_container (cwmp, EVENT_IDX_M_ScheduleInform, schedule_inform->commandKey); - if (event_container != NULL) - { - cwmp_save_event_container (event_container); - } - pthread_mutex_unlock (&(cwmp->mutex_session_queue)); - pthread_cond_signal(&(cwmp->threshold_session_send)); - pthread_mutex_lock (&mutex_schedule_inform); - list_del (&(schedule_inform->list)); - if (schedule_inform->commandKey != NULL) - { - bkp_session_delete_schedule_inform(schedule_inform->scheduled_time,schedule_inform->commandKey); - free (schedule_inform->commandKey); - } - free(schedule_inform); - count_schedule_inform_queue--; - pthread_mutex_unlock (&mutex_schedule_inform); - add_event_same_time = true; - continue; - } - bkp_session_save(); - add_event_same_time = false; - pthread_mutex_lock (&mutex_schedule_inform); - si_timeout.tv_sec = stime; - pthread_cond_timedwait(&threshold_schedule_inform, &mutex_schedule_inform, &si_timeout); - pthread_mutex_unlock (&mutex_schedule_inform); - } else { - bkp_session_save(); - add_event_same_time = false; - pthread_mutex_lock (&mutex_schedule_inform); - pthread_cond_wait(&threshold_schedule_inform, &mutex_schedule_inform); - pthread_mutex_unlock (&mutex_schedule_inform); - } - } + for (;;) { + if (list_schedule_inform.next != &(list_schedule_inform)) { + schedule_inform = list_entry(list_schedule_inform.next, struct schedule_inform, list); + stime = schedule_inform->scheduled_time; + current_time = time(NULL); + if (current_time >= schedule_inform->scheduled_time) { + if (add_event_same_time) { + pthread_mutex_lock(&mutex_schedule_inform); + list_del(&(schedule_inform->list)); + if (schedule_inform->commandKey != NULL) { + bkp_session_delete_schedule_inform(schedule_inform->scheduled_time, schedule_inform->commandKey); + free(schedule_inform->commandKey); + } + free(schedule_inform); + pthread_mutex_unlock(&mutex_schedule_inform); + continue; + } + pthread_mutex_lock(&(cwmp->mutex_session_queue)); + CWMP_LOG(INFO, "Schedule Inform thread: add ScheduleInform event in the queue"); + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_3SCHEDULED, ""); + if (event_container != NULL) { + cwmp_save_event_container(event_container); + } + event_container = cwmp_add_event_container(cwmp, EVENT_IDX_M_ScheduleInform, schedule_inform->commandKey); + if (event_container != NULL) { + cwmp_save_event_container(event_container); + } + pthread_mutex_unlock(&(cwmp->mutex_session_queue)); + pthread_cond_signal(&(cwmp->threshold_session_send)); + pthread_mutex_lock(&mutex_schedule_inform); + list_del(&(schedule_inform->list)); + if (schedule_inform->commandKey != NULL) { + bkp_session_delete_schedule_inform(schedule_inform->scheduled_time, schedule_inform->commandKey); + free(schedule_inform->commandKey); + } + free(schedule_inform); + count_schedule_inform_queue--; + pthread_mutex_unlock(&mutex_schedule_inform); + add_event_same_time = true; + continue; + } + bkp_session_save(); + add_event_same_time = false; + pthread_mutex_lock(&mutex_schedule_inform); + si_timeout.tv_sec = stime; + pthread_cond_timedwait(&threshold_schedule_inform, &mutex_schedule_inform, &si_timeout); + pthread_mutex_unlock(&mutex_schedule_inform); + } else { + bkp_session_save(); + add_event_same_time = false; + pthread_mutex_lock(&mutex_schedule_inform); + pthread_cond_wait(&threshold_schedule_inform, &mutex_schedule_inform); + pthread_mutex_unlock(&mutex_schedule_inform); + } + } - return NULL; + return NULL; } int cwmp_scheduleInform_remove_all() { - struct schedule_inform *schedule_inform; + struct schedule_inform *schedule_inform; - pthread_mutex_lock (&mutex_schedule_inform); - while (list_schedule_inform.next!=&(list_schedule_inform)) - { - schedule_inform = list_entry(list_schedule_inform.next,struct schedule_inform, list); + pthread_mutex_lock(&mutex_schedule_inform); + while (list_schedule_inform.next != &(list_schedule_inform)) { + schedule_inform = list_entry(list_schedule_inform.next, struct schedule_inform, list); - list_del (&(schedule_inform->list)); - if (schedule_inform->commandKey!=NULL) - { - bkp_session_delete_schedule_inform(schedule_inform->scheduled_time,schedule_inform->commandKey); - free (schedule_inform->commandKey); + list_del(&(schedule_inform->list)); + if (schedule_inform->commandKey != NULL) { + bkp_session_delete_schedule_inform(schedule_inform->scheduled_time, schedule_inform->commandKey); + free(schedule_inform->commandKey); } free(schedule_inform); - } + } bkp_session_save(); - pthread_mutex_unlock (&mutex_schedule_inform); + pthread_mutex_unlock(&mutex_schedule_inform); return CWMP_OK; } @@ -2397,83 +2289,73 @@ int cwmp_handle_rpc_cpe_schedule_inform(struct session *session, struct rpc *rpc { mxml_node_t *n, *b = session->body_in; char *command_key = NULL; - struct schedule_inform *schedule_inform; - time_t scheduled_time; - struct list_head *ilist; - int fault = FAULT_CPE_NO_FAULT; - unsigned int delay_seconds = 0; + struct schedule_inform *schedule_inform; + time_t scheduled_time; + struct list_head *ilist; + int fault = FAULT_CPE_NO_FAULT; + unsigned int delay_seconds = 0; - pthread_mutex_lock (&mutex_schedule_inform); + pthread_mutex_lock(&mutex_schedule_inform); - while (b) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "CommandKey")) { + while (b) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "CommandKey")) { command_key = b->value.opaque; } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "DelaySeconds")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "DelaySeconds")) { delay_seconds = atoi(b->value.opaque); } b = mxmlWalkNext(b, session->body_in, MXML_DESCEND); } - if (delay_seconds <= 0) { - fault = FAULT_CPE_INVALID_ARGUMENTS; - pthread_mutex_unlock (&mutex_schedule_inform); - goto fault; - } - - if(count_schedule_inform_queue>=MAX_SCHEDULE_INFORM_QUEUE) - { - fault = FAULT_CPE_RESOURCES_EXCEEDED; - pthread_mutex_unlock (&mutex_schedule_inform); + if (delay_seconds <= 0) { + fault = FAULT_CPE_INVALID_ARGUMENTS; + pthread_mutex_unlock(&mutex_schedule_inform); goto fault; } - count_schedule_inform_queue++; - scheduled_time = time(NULL) + delay_seconds; - list_for_each(ilist,&(list_schedule_inform)) - { - schedule_inform = list_entry(ilist,struct schedule_inform, list); - if (schedule_inform->scheduled_time >= scheduled_time) - { - break; - } - } + if (count_schedule_inform_queue >= MAX_SCHEDULE_INFORM_QUEUE) { + fault = FAULT_CPE_RESOURCES_EXCEEDED; + pthread_mutex_unlock(&mutex_schedule_inform); + goto fault; + } + count_schedule_inform_queue++; - n = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", - NULL, NULL, MXML_DESCEND); - if (!n) goto fault; + scheduled_time = time(NULL) + delay_seconds; + list_for_each (ilist, &(list_schedule_inform)) { + schedule_inform = list_entry(ilist, struct schedule_inform, list); + if (schedule_inform->scheduled_time >= scheduled_time) { + break; + } + } - n = mxmlNewElement(n, "cwmp:ScheduleInformResponse"); - if (!n) goto fault; + n = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); + if (!n) + goto fault; + n = mxmlNewElement(n, "cwmp:ScheduleInformResponse"); + if (!n) + goto fault; - CWMP_LOG(INFO,"Schedule inform event will start in %us",delay_seconds); - schedule_inform = calloc (1,sizeof(struct schedule_inform)); - if (schedule_inform==NULL) - { - pthread_mutex_unlock (&mutex_schedule_inform); - goto fault; - } - schedule_inform->commandKey = strdup(command_key); - schedule_inform->scheduled_time = scheduled_time; - list_add (&(schedule_inform->list), ilist->prev); - bkp_session_insert_schedule_inform(schedule_inform->scheduled_time,schedule_inform->commandKey); - bkp_session_save(); - pthread_mutex_unlock (&mutex_schedule_inform); - pthread_cond_signal(&threshold_schedule_inform); + CWMP_LOG(INFO, "Schedule inform event will start in %us", delay_seconds); + schedule_inform = calloc(1, sizeof(struct schedule_inform)); + if (schedule_inform == NULL) { + pthread_mutex_unlock(&mutex_schedule_inform); + goto fault; + } + schedule_inform->commandKey = strdup(command_key); + schedule_inform->scheduled_time = scheduled_time; + list_add(&(schedule_inform->list), ilist->prev); + bkp_session_insert_schedule_inform(schedule_inform->scheduled_time, schedule_inform->commandKey); + bkp_session_save(); + pthread_mutex_unlock(&mutex_schedule_inform); + pthread_cond_signal(&threshold_schedule_inform); success: return 0; fault: - if (cwmp_create_fault_message(session, rpc, fault?fault:FAULT_CPE_INTERNAL_ERROR)) + if (cwmp_create_fault_message(session, rpc, fault ? fault : FAULT_CPE_INTERNAL_ERROR)) goto error; goto success; @@ -2487,119 +2369,105 @@ error: int cwmp_launch_download(struct download *pdownload, struct transfer_complete **ptransfer_complete) { - int i, error = FAULT_CPE_NO_FAULT; - char *download_startTime; - struct transfer_complete *p; - char *fault_code; - char file_size[128]; + int i, error = FAULT_CPE_NO_FAULT; + char *download_startTime; + struct transfer_complete *p; + char *fault_code; + char file_size[128]; - download_startTime = mix_get_time(); + download_startTime = mix_get_time(); - bkp_session_delete_download(pdownload); - bkp_session_save(); + bkp_session_delete_download(pdownload); + bkp_session_save(); - sprintf(file_size,"%d",pdownload->file_size); - external_download(pdownload->url, file_size, pdownload->file_type, - pdownload->username, pdownload->password, 0); - external_handle_action(cwmp_handle_downloadFault); - external_fetch_downloadFaultResp(&fault_code); + sprintf(file_size, "%d", pdownload->file_size); + external_download(pdownload->url, file_size, pdownload->file_type, pdownload->username, pdownload->password, 0); + external_handle_action(cwmp_handle_downloadFault); + external_fetch_downloadFaultResp(&fault_code); - if(fault_code != NULL) - { - if(fault_code[0]=='9') - { - for(i=1;i<__FAULT_CPE_MAX;i++) - { - if(strcmp(FAULT_CPE_ARRAY[i].CODE,fault_code) == 0) - { + if (fault_code != NULL) { + if (fault_code[0] == '9') { + for (i = 1; i < __FAULT_CPE_MAX; i++) { + if (strcmp(FAULT_CPE_ARRAY[i].CODE, fault_code) == 0) { error = i; break; } } - } - free(fault_code); - } - /*else { + } + free(fault_code); + } + /*else { error = FAULT_CPE_INTERNAL_ERROR; }*/ - p = calloc (1,sizeof(struct transfer_complete)); - if(p == NULL) - { + p = calloc(1, sizeof(struct transfer_complete)); + if (p == NULL) { error = FAULT_CPE_INTERNAL_ERROR; return error; } - p->command_key = pdownload->command_key?strdup(pdownload->command_key):strdup(""); - p->start_time = strdup(download_startTime); - p->complete_time = strdup(mix_get_time()); - if(error != FAULT_CPE_NO_FAULT) - { - p->fault_code = error; + p->command_key = pdownload->command_key ? strdup(pdownload->command_key) : strdup(""); + p->start_time = strdup(download_startTime); + p->complete_time = strdup(mix_get_time()); + if (error != FAULT_CPE_NO_FAULT) { + p->fault_code = error; } *ptransfer_complete = p; - return error; + return error; } int cwmp_launch_schedule_download(struct schedule_download *pdownload, struct transfer_complete **ptransfer_complete) { - int i, error = FAULT_CPE_NO_FAULT; - char *download_startTime; - struct transfer_complete *p; - char *fault_code; - char file_size[128]; + int i, error = FAULT_CPE_NO_FAULT; + char *download_startTime; + struct transfer_complete *p; + char *fault_code; + char file_size[128]; - download_startTime = mix_get_time(); + download_startTime = mix_get_time(); - bkp_session_delete_schedule_download(pdownload); - bkp_session_save(); + bkp_session_delete_schedule_download(pdownload); + bkp_session_save(); - sprintf(file_size,"%d",pdownload->file_size); - external_download(pdownload->url, file_size, pdownload->file_type, - pdownload->username, pdownload->password, pdownload->timewindowstruct[0].windowstart); - external_handle_action(cwmp_handle_downloadFault); - external_fetch_downloadFaultResp(&fault_code); + sprintf(file_size, "%d", pdownload->file_size); + external_download(pdownload->url, file_size, pdownload->file_type, pdownload->username, pdownload->password, pdownload->timewindowstruct[0].windowstart); + external_handle_action(cwmp_handle_downloadFault); + external_fetch_downloadFaultResp(&fault_code); - if(fault_code != NULL) - { - if(fault_code[0]=='9') - { - for(i=1;i<__FAULT_CPE_MAX;i++) - { - if(strcmp(FAULT_CPE_ARRAY[i].CODE,fault_code) == 0) - { + if (fault_code != NULL) { + if (fault_code[0] == '9') { + for (i = 1; i < __FAULT_CPE_MAX; i++) { + if (strcmp(FAULT_CPE_ARRAY[i].CODE, fault_code) == 0) { error = i; break; } } - } - free(fault_code); - } - /*else { + } + free(fault_code); + } + /*else { error = FAULT_CPE_INTERNAL_ERROR; }*/ - p = calloc (1,sizeof(struct transfer_complete)); - if(p == NULL) - { + p = calloc(1, sizeof(struct transfer_complete)); + if (p == NULL) { error = FAULT_CPE_INTERNAL_ERROR; return error; } - p->command_key = strdup(pdownload->command_key); - p->start_time = strdup(download_startTime); - p->complete_time = strdup(mix_get_time()); - p->type = TYPE_SCHEDULE_DOWNLOAD; - if(error != FAULT_CPE_NO_FAULT) - { - p->fault_code = error; + p->command_key = strdup(pdownload->command_key); + p->start_time = strdup(download_startTime); + p->complete_time = strdup(mix_get_time()); + p->type = TYPE_SCHEDULE_DOWNLOAD; + if (error != FAULT_CPE_NO_FAULT) { + p->fault_code = error; } *ptransfer_complete = p; - return error; + return error; } int lookup_vcf_name(char *instance, char **value) @@ -2615,17 +2483,17 @@ int lookup_vcf_name(char *instance, char **value) param_obj = json_object_array_get_idx(parameters, 0); json_object_object_get_ex(param_obj, "value", &value_obj); - *value = (char*)json_object_get_string(value_obj); + *value = (char *)json_object_get_string(value_obj); FREE(vcf_name_parameter); return 0; } int cwmp_launch_upload(struct upload *pupload, struct transfer_complete **ptransfer_complete) { - int i, error = FAULT_CPE_NO_FAULT; - char *upload_startTime; - struct transfer_complete *p; - char *fault_code; + int i, error = FAULT_CPE_NO_FAULT; + char *upload_startTime; + struct transfer_complete *p; + char *fault_code; char *name = ""; upload_startTime = mix_get_time(); @@ -2639,14 +2507,10 @@ int cwmp_launch_upload(struct upload *pupload, struct transfer_complete **ptrans external_handle_action(cwmp_handle_uploadFault); external_fetch_uploadFaultResp(&fault_code); - if(fault_code != NULL) - { - if(fault_code[0]=='9') - { - for(i=1;i<__FAULT_CPE_MAX;i++) - { - if(strcmp(FAULT_CPE_ARRAY[i].CODE,fault_code) == 0) - { + if (fault_code != NULL) { + if (fault_code[0] == '9') { + for (i = 1; i < __FAULT_CPE_MAX; i++) { + if (strcmp(FAULT_CPE_ARRAY[i].CODE, fault_code) == 0) { error = i; break; } @@ -2654,19 +2518,17 @@ int cwmp_launch_upload(struct upload *pupload, struct transfer_complete **ptrans } free(fault_code); } - p = calloc (1,sizeof(struct transfer_complete)); - if(p == NULL) - { + p = calloc(1, sizeof(struct transfer_complete)); + if (p == NULL) { error = FAULT_CPE_INTERNAL_ERROR; return error; } - p->command_key = pupload->command_key?strdup(pupload->command_key):strdup(""); - p->start_time = strdup(upload_startTime); - p->complete_time = strdup(mix_get_time()); - if(error != FAULT_CPE_NO_FAULT) - { - p->fault_code = error; + p->command_key = pupload->command_key ? strdup(pupload->command_key) : strdup(""); + p->start_time = strdup(upload_startTime); + p->complete_time = strdup(mix_get_time()); + if (error != FAULT_CPE_NO_FAULT) { + p->fault_code = error; } *ptransfer_complete = p; @@ -2674,588 +2536,486 @@ int cwmp_launch_upload(struct upload *pupload, struct transfer_complete **ptrans return error; } -void *thread_cwmp_rpc_cpe_download (void *v) +void *thread_cwmp_rpc_cpe_download(void *v) { - struct cwmp *cwmp = (struct cwmp *)v; - struct download *pdownload; - struct timespec download_timeout = {0, 0}; - time_t current_time, stime; - int i,error = FAULT_CPE_NO_FAULT; - struct transfer_complete *ptransfer_complete; - long int time_of_grace = 3600,timeout; - char *fault_code; + struct cwmp *cwmp = (struct cwmp *)v; + struct download *pdownload; + struct timespec download_timeout = { 0, 0 }; + time_t current_time, stime; + int i, error = FAULT_CPE_NO_FAULT; + struct transfer_complete *ptransfer_complete; + long int time_of_grace = 3600, timeout; + char *fault_code; - for(;;) - { - if (list_download.next!=&(list_download)) { - pdownload = list_entry(list_download.next,struct download, list); - stime = pdownload->scheduled_time; - current_time = time(NULL); - if(pdownload->scheduled_time != 0) - timeout = current_time - pdownload->scheduled_time; - else - timeout = 0; - if((timeout >= 0)&&(timeout > time_of_grace)) - { - pthread_mutex_lock (&mutex_download); - bkp_session_delete_download(pdownload); - ptransfer_complete = calloc (1,sizeof(struct transfer_complete)); - if(ptransfer_complete != NULL) - { - error = FAULT_CPE_DOWNLOAD_FAILURE; + for (;;) { + if (list_download.next != &(list_download)) { + pdownload = list_entry(list_download.next, struct download, list); + stime = pdownload->scheduled_time; + current_time = time(NULL); + if (pdownload->scheduled_time != 0) + timeout = current_time - pdownload->scheduled_time; + else + timeout = 0; + if ((timeout >= 0) && (timeout > time_of_grace)) { + pthread_mutex_lock(&mutex_download); + bkp_session_delete_download(pdownload); + ptransfer_complete = calloc(1, sizeof(struct transfer_complete)); + if (ptransfer_complete != NULL) { + error = FAULT_CPE_DOWNLOAD_FAILURE; - ptransfer_complete->command_key = strdup(pdownload->command_key); - ptransfer_complete->start_time = strdup(mix_get_time()); - ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); - ptransfer_complete->fault_code = error; + ptransfer_complete->command_key = strdup(pdownload->command_key); + ptransfer_complete->start_time = strdup(mix_get_time()); + ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); + ptransfer_complete->fault_code = error; - ptransfer_complete->type = TYPE_DOWNLOAD; - bkp_session_insert_transfer_complete(ptransfer_complete); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - } - list_del (&(pdownload->list)); - if(pdownload->scheduled_time != 0) - count_download_queue--; - cwmp_free_download_request(pdownload); - pthread_mutex_unlock (&mutex_download); - continue; - } - if((timeout >= 0)&&(timeout <= time_of_grace)) - { - pthread_mutex_lock (&(cwmp->mutex_session_send)); - external_init(); - CWMP_LOG(INFO,"Launch download file %s",pdownload->url); - error = cwmp_launch_download(pdownload,&ptransfer_complete); - if(error != FAULT_CPE_NO_FAULT) - { - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - bkp_session_delete_transfer_complete(ptransfer_complete); - } - else - { - if (pdownload->file_type[0] == '1') { - ptransfer_complete->old_software_version = cwmp->deviceid.softwareversion; - } - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - external_apply("download", pdownload->file_type, 0); - external_handle_action(cwmp_handle_downloadFault); - external_fetch_downloadFaultResp(&fault_code); - if(fault_code != NULL) - { - if(fault_code[0]=='9') - { - for(i=1;i<__FAULT_CPE_MAX;i++) - { - if(strcmp(FAULT_CPE_ARRAY[i].CODE,fault_code) == 0) - { - error = i; - break; - } - } - } - free(fault_code); - if((error == FAULT_CPE_NO_FAULT) && - (pdownload->file_type[0] == '1' || pdownload->file_type[0] == '3' || pdownload->file_type[0] == '6')) - { - if(pdownload->file_type[0] == '3') - CWMP_LOG(INFO, "Download and apply new vendor config file is done successfully"); - exit(EXIT_SUCCESS); - } - bkp_session_delete_transfer_complete(ptransfer_complete); - ptransfer_complete->fault_code = error; - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - } - } - external_exit(); - pthread_mutex_unlock (&(cwmp->mutex_session_send)); - pthread_cond_signal (&(cwmp->threshold_session_send)); - pthread_mutex_lock (&mutex_download); - list_del (&(pdownload->list)); - if(pdownload->scheduled_time != 0) - count_download_queue--; - cwmp_free_download_request(pdownload); - pthread_mutex_unlock (&mutex_download); - continue; - } - pthread_mutex_lock (&mutex_download); - download_timeout.tv_sec = stime; - pthread_cond_timedwait(&threshold_download, &mutex_download, &download_timeout); - pthread_mutex_unlock (&mutex_download); - } else { - pthread_mutex_lock (&mutex_download); - pthread_cond_wait(&threshold_download, &mutex_download); - pthread_mutex_unlock (&mutex_download); - } - } - return NULL; + ptransfer_complete->type = TYPE_DOWNLOAD; + bkp_session_insert_transfer_complete(ptransfer_complete); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + } + list_del(&(pdownload->list)); + if (pdownload->scheduled_time != 0) + count_download_queue--; + cwmp_free_download_request(pdownload); + pthread_mutex_unlock(&mutex_download); + continue; + } + if ((timeout >= 0) && (timeout <= time_of_grace)) { + pthread_mutex_lock(&(cwmp->mutex_session_send)); + external_init(); + CWMP_LOG(INFO, "Launch download file %s", pdownload->url); + error = cwmp_launch_download(pdownload, &ptransfer_complete); + if (error != FAULT_CPE_NO_FAULT) { + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + bkp_session_delete_transfer_complete(ptransfer_complete); + } else { + if (pdownload->file_type[0] == '1') { + ptransfer_complete->old_software_version = cwmp->deviceid.softwareversion; + } + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + external_apply("download", pdownload->file_type, 0); + external_handle_action(cwmp_handle_downloadFault); + external_fetch_downloadFaultResp(&fault_code); + if (fault_code != NULL) { + if (fault_code[0] == '9') { + for (i = 1; i < __FAULT_CPE_MAX; i++) { + if (strcmp(FAULT_CPE_ARRAY[i].CODE, fault_code) == 0) { + error = i; + break; + } + } + } + free(fault_code); + if ((error == FAULT_CPE_NO_FAULT) && (pdownload->file_type[0] == '1' || pdownload->file_type[0] == '3' || pdownload->file_type[0] == '6')) { + if (pdownload->file_type[0] == '3') + CWMP_LOG(INFO, "Download and apply new vendor config file is done successfully"); + exit(EXIT_SUCCESS); + } + bkp_session_delete_transfer_complete(ptransfer_complete); + ptransfer_complete->fault_code = error; + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + } + } + external_exit(); + pthread_mutex_unlock(&(cwmp->mutex_session_send)); + pthread_cond_signal(&(cwmp->threshold_session_send)); + pthread_mutex_lock(&mutex_download); + list_del(&(pdownload->list)); + if (pdownload->scheduled_time != 0) + count_download_queue--; + cwmp_free_download_request(pdownload); + pthread_mutex_unlock(&mutex_download); + continue; + } + pthread_mutex_lock(&mutex_download); + download_timeout.tv_sec = stime; + pthread_cond_timedwait(&threshold_download, &mutex_download, &download_timeout); + pthread_mutex_unlock(&mutex_download); + } else { + pthread_mutex_lock(&mutex_download); + pthread_cond_wait(&threshold_download, &mutex_download); + pthread_mutex_unlock(&mutex_download); + } + } + return NULL; } -void *thread_cwmp_rpc_cpe_schedule_download (void *v) +void *thread_cwmp_rpc_cpe_schedule_download(void *v) { - struct cwmp *cwmp = (struct cwmp *)v; - struct timespec download_timeout = {0, 0}; - time_t current_time; - int i,error = FAULT_CPE_NO_FAULT; - struct transfer_complete *ptransfer_complete; - char *fault_code; + struct cwmp *cwmp = (struct cwmp *)v; + struct timespec download_timeout = { 0, 0 }; + time_t current_time; + int i, error = FAULT_CPE_NO_FAULT; + struct transfer_complete *ptransfer_complete; + char *fault_code; int min_time = 0; struct schedule_download *current_download = NULL; struct schedule_download *p, *_p; for (;;) { current_time = time(NULL); - if(list_schedule_download.next != &(list_schedule_download)) - { - list_for_each_entry_safe(p, _p, &(list_schedule_download), list) - { - if (min_time == 0) - { - if (p->timewindowstruct[0].windowend >= current_time) - { + if (list_schedule_download.next != &(list_schedule_download)) { + list_for_each_entry_safe (p, _p, &(list_schedule_download), list) { + if (min_time == 0) { + if (p->timewindowstruct[0].windowend >= current_time) { min_time = p->timewindowstruct[0].windowstart; current_download = p; - } - else if (p->timewindowstruct[1].windowend >= current_time) - { + } else if (p->timewindowstruct[1].windowend >= current_time) { min_time = p->timewindowstruct[1].windowstart; current_download = p; + } else { + pthread_mutex_lock(&mutex_schedule_download); + bkp_session_delete_schedule_download(p); + ptransfer_complete = calloc(1, sizeof(struct transfer_complete)); + if (ptransfer_complete != NULL) { + error = FAULT_CPE_DOWNLOAD_FAIL_WITHIN_TIME_WINDOW; + ptransfer_complete->command_key = strdup(p->command_key); + ptransfer_complete->start_time = strdup(mix_get_time()); + ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); + ptransfer_complete->fault_code = error; + ptransfer_complete->type = TYPE_SCHEDULE_DOWNLOAD; + bkp_session_insert_transfer_complete(ptransfer_complete); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + } + list_del(&(p->list)); + if (p->timewindowstruct[0].windowstart != 0) + count_download_queue--; + cwmp_free_schedule_download_request(p); + pthread_mutex_unlock(&mutex_schedule_download); + continue; } - else - { - pthread_mutex_lock (&mutex_schedule_download); - bkp_session_delete_schedule_download(p); - ptransfer_complete = calloc (1,sizeof(struct transfer_complete)); - if(ptransfer_complete != NULL) - { - error = FAULT_CPE_DOWNLOAD_FAIL_WITHIN_TIME_WINDOW; - ptransfer_complete->command_key = strdup(p->command_key); - ptransfer_complete->start_time = strdup(mix_get_time()); - ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); - ptransfer_complete->fault_code = error; - ptransfer_complete->type = TYPE_SCHEDULE_DOWNLOAD; - bkp_session_insert_transfer_complete(ptransfer_complete); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - } - list_del (&(p->list)); - if(p->timewindowstruct[0].windowstart != 0) - count_download_queue--; - cwmp_free_schedule_download_request(p); - pthread_mutex_unlock (&mutex_schedule_download); - continue; - } - } - else - { - if(p->timewindowstruct[0].windowend >= current_time ) - { - if(p->timewindowstruct[0].windowstart < min_time) - { + } else { + if (p->timewindowstruct[0].windowend >= current_time) { + if (p->timewindowstruct[0].windowstart < min_time) { min_time = p->timewindowstruct[0].windowstart; current_download = p; } - - } - else if (p->timewindowstruct[1].windowend >= current_time) - { - if(p->timewindowstruct[1].windowstart < min_time) - { + + } else if (p->timewindowstruct[1].windowend >= current_time) { + if (p->timewindowstruct[1].windowstart < min_time) { min_time = p->timewindowstruct[1].windowstart; current_download = p; } - } - else - { - pthread_mutex_lock (&mutex_schedule_download); - bkp_session_delete_schedule_download(p); - ptransfer_complete = calloc (1,sizeof(struct transfer_complete)); - if(ptransfer_complete != NULL) - { - error = FAULT_CPE_DOWNLOAD_FAIL_WITHIN_TIME_WINDOW; - ptransfer_complete->command_key = strdup(p->command_key); - ptransfer_complete->start_time = strdup(mix_get_time()); - ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); - ptransfer_complete->fault_code = error; - ptransfer_complete->type = TYPE_SCHEDULE_DOWNLOAD; - bkp_session_insert_transfer_complete(ptransfer_complete); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - } - list_del (&(p->list)); - if(p->timewindowstruct[0].windowstart != 0) - count_download_queue--; - cwmp_free_schedule_download_request(p); - pthread_mutex_unlock (&mutex_schedule_download); + } else { + pthread_mutex_lock(&mutex_schedule_download); + bkp_session_delete_schedule_download(p); + ptransfer_complete = calloc(1, sizeof(struct transfer_complete)); + if (ptransfer_complete != NULL) { + error = FAULT_CPE_DOWNLOAD_FAIL_WITHIN_TIME_WINDOW; + ptransfer_complete->command_key = strdup(p->command_key); + ptransfer_complete->start_time = strdup(mix_get_time()); + ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); + ptransfer_complete->fault_code = error; + ptransfer_complete->type = TYPE_SCHEDULE_DOWNLOAD; + bkp_session_insert_transfer_complete(ptransfer_complete); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + } + list_del(&(p->list)); + if (p->timewindowstruct[0].windowstart != 0) + count_download_queue--; + cwmp_free_schedule_download_request(p); + pthread_mutex_unlock(&mutex_schedule_download); continue; } } } - } - else - { - pthread_mutex_lock (&mutex_schedule_download); + } else { + pthread_mutex_lock(&mutex_schedule_download); pthread_cond_wait(&threshold_schedule_download, &mutex_schedule_download); - pthread_mutex_unlock (&mutex_schedule_download); + pthread_mutex_unlock(&mutex_schedule_download); } - if (min_time == 0) - { + if (min_time == 0) { continue; - } - else if (min_time <= current_time) { - if ( (min_time == current_download->timewindowstruct[0].windowstart && (current_download->timewindowstruct[0].windowmode)[0] == '2') || (min_time == current_download->timewindowstruct[1].windowstart && (current_download->timewindowstruct[1].windowmode)[0] == '2') ) - { - pthread_mutex_lock (&mutex_schedule_download); - external_init(); - ptransfer_complete = calloc (1,sizeof(struct transfer_complete)); - ptransfer_complete->type = TYPE_SCHEDULE_DOWNLOAD; - error = cwmp_launch_schedule_download(current_download, &ptransfer_complete); - if(error != FAULT_CPE_NO_FAULT) - { - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - cwmp_root_cause_TransferComplete (cwmp, ptransfer_complete); - bkp_session_delete_transfer_complete(ptransfer_complete); - } - else - { - external_exit(); - pthread_mutex_unlock (&mutex_schedule_download); - if(pthread_mutex_trylock(&(cwmp->mutex_session_send)) == 0) - { - pthread_mutex_lock (&mutex_apply_schedule_download); - pthread_mutex_lock (&mutex_schedule_download); - external_init(); - if (current_download->file_type[0] == '1') { - ptransfer_complete->old_software_version = cwmp->deviceid.softwareversion; - } - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - external_apply("download", current_download->file_type, current_download->timewindowstruct[0].windowstart); - external_handle_action(cwmp_handle_downloadFault); - external_fetch_downloadFaultResp(&fault_code); - if(fault_code != NULL) - { - if(fault_code[0]=='9') - { - for(i=1;i<__FAULT_CPE_MAX;i++) - { - if(strcmp(FAULT_CPE_ARRAY[i].CODE,fault_code) == 0) - { - error = i; - break; - } - } - } - free(fault_code); - if((error == FAULT_CPE_NO_FAULT) && - (current_download->file_type[0] == '1' || current_download->file_type[0] == '3' || current_download->file_type[0] == '6')) - { - exit(EXIT_SUCCESS); - } - bkp_session_delete_transfer_complete(ptransfer_complete); - ptransfer_complete->fault_code = error; - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - } + } else if (min_time <= current_time) { + if ((min_time == current_download->timewindowstruct[0].windowstart && (current_download->timewindowstruct[0].windowmode)[0] == '2') || (min_time == current_download->timewindowstruct[1].windowstart && (current_download->timewindowstruct[1].windowmode)[0] == '2')) { + pthread_mutex_lock(&mutex_schedule_download); + external_init(); + ptransfer_complete = calloc(1, sizeof(struct transfer_complete)); + ptransfer_complete->type = TYPE_SCHEDULE_DOWNLOAD; + error = cwmp_launch_schedule_download(current_download, &ptransfer_complete); + if (error != FAULT_CPE_NO_FAULT) { + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + bkp_session_delete_transfer_complete(ptransfer_complete); + } else { external_exit(); - pthread_mutex_unlock (&mutex_schedule_download); - pthread_mutex_unlock (&mutex_apply_schedule_download); - pthread_mutex_unlock(&(cwmp->mutex_session_send)); - pthread_cond_signal(&(cwmp->threshold_session_send)); + pthread_mutex_unlock(&mutex_schedule_download); + if (pthread_mutex_trylock(&(cwmp->mutex_session_send)) == 0) { + pthread_mutex_lock(&mutex_apply_schedule_download); + pthread_mutex_lock(&mutex_schedule_download); + external_init(); + if (current_download->file_type[0] == '1') { + ptransfer_complete->old_software_version = cwmp->deviceid.softwareversion; + } + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + external_apply("download", current_download->file_type, current_download->timewindowstruct[0].windowstart); + external_handle_action(cwmp_handle_downloadFault); + external_fetch_downloadFaultResp(&fault_code); + if (fault_code != NULL) { + if (fault_code[0] == '9') { + for (i = 1; i < __FAULT_CPE_MAX; i++) { + if (strcmp(FAULT_CPE_ARRAY[i].CODE, fault_code) == 0) { + error = i; + break; + } + } + } + free(fault_code); + if ((error == FAULT_CPE_NO_FAULT) && (current_download->file_type[0] == '1' || current_download->file_type[0] == '3' || current_download->file_type[0] == '6')) { + exit(EXIT_SUCCESS); + } + bkp_session_delete_transfer_complete(ptransfer_complete); + ptransfer_complete->fault_code = error; + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + } + external_exit(); + pthread_mutex_unlock(&mutex_schedule_download); + pthread_mutex_unlock(&mutex_apply_schedule_download); + pthread_mutex_unlock(&(cwmp->mutex_session_send)); + pthread_cond_signal(&(cwmp->threshold_session_send)); + } else { + cwmp_add_apply_schedule_download(current_download, ptransfer_complete->start_time); + } } - else - { - cwmp_add_apply_schedule_download(current_download, ptransfer_complete->start_time); + pthread_mutex_lock(&mutex_schedule_download); + bkp_session_delete_schedule_download(current_download); + bkp_session_save(); + list_del(&(current_download->list)); + cwmp_free_schedule_download_request(current_download); + pthread_mutex_unlock(&mutex_schedule_download); + min_time = 0; + current_download = NULL; + continue; + } //AT ANY TIME OR WHEN IDLE + else { + pthread_mutex_lock(&(cwmp->mutex_session_send)); + external_init(); + CWMP_LOG(INFO, "Launch download file %s", current_download->url); + error = cwmp_launch_schedule_download(current_download, &ptransfer_complete); + if (error != FAULT_CPE_NO_FAULT) { + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + bkp_session_delete_transfer_complete(ptransfer_complete); + } else { + if (current_download->file_type[0] == '1') { + ptransfer_complete->old_software_version = cwmp->deviceid.softwareversion; + } + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + external_apply("download", current_download->file_type, 0); + external_handle_action(cwmp_handle_downloadFault); + external_fetch_downloadFaultResp(&fault_code); + if (fault_code != NULL) { + if (fault_code[0] == '9') { + for (i = 1; i < __FAULT_CPE_MAX; i++) { + if (strcmp(FAULT_CPE_ARRAY[i].CODE, fault_code) == 0) { + error = i; + break; + } + } + } + free(fault_code); + if ((error == FAULT_CPE_NO_FAULT) && (current_download->file_type[0] == '1' || current_download->file_type[0] == '3' || current_download->file_type[0] == '6')) { + exit(EXIT_SUCCESS); + } + bkp_session_delete_transfer_complete(ptransfer_complete); + ptransfer_complete->fault_code = error; + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + } } + external_exit(); + pthread_mutex_unlock(&(cwmp->mutex_session_send)); + pthread_cond_signal(&(cwmp->threshold_session_send)); + pthread_mutex_lock(&mutex_schedule_download); + list_del(&(current_download->list)); + if (current_download->timewindowstruct[0].windowstart != 0) + count_download_queue--; + cwmp_free_schedule_download_request(current_download); + pthread_mutex_unlock(&mutex_schedule_download); + continue; } - pthread_mutex_lock (&mutex_schedule_download); - bkp_session_delete_schedule_download(current_download); - bkp_session_save(); - list_del(&(current_download->list)); - cwmp_free_schedule_download_request(current_download); - pthread_mutex_unlock (&mutex_schedule_download); - min_time = 0; - current_download = NULL; - continue; - }//AT ANY TIME OR WHEN IDLE - else - { - pthread_mutex_lock (&(cwmp->mutex_session_send)); - external_init(); - CWMP_LOG(INFO,"Launch download file %s",current_download->url); - error = cwmp_launch_schedule_download(current_download,&ptransfer_complete); - if(error != FAULT_CPE_NO_FAULT) - { - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - bkp_session_delete_transfer_complete(ptransfer_complete); - } - else - { - if (current_download->file_type[0] == '1') { - ptransfer_complete->old_software_version = cwmp->deviceid.softwareversion; - } - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - external_apply("download", current_download->file_type, 0); - external_handle_action(cwmp_handle_downloadFault); - external_fetch_downloadFaultResp(&fault_code); - if(fault_code != NULL) - { - if(fault_code[0]=='9') - { - for(i=1;i<__FAULT_CPE_MAX;i++) - { - if(strcmp(FAULT_CPE_ARRAY[i].CODE,fault_code) == 0) - { - error = i; - break; - } - } - } - free(fault_code); - if((error == FAULT_CPE_NO_FAULT) && - (current_download->file_type[0] == '1' || current_download->file_type[0] == '3' || current_download->file_type[0] == '6')) - { - exit(EXIT_SUCCESS); - } - bkp_session_delete_transfer_complete(ptransfer_complete); - ptransfer_complete->fault_code = error; - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - } - } - external_exit(); - pthread_mutex_unlock (&(cwmp->mutex_session_send)); - pthread_cond_signal (&(cwmp->threshold_session_send)); - pthread_mutex_lock (&mutex_schedule_download); - list_del (&(current_download->list)); - if(current_download->timewindowstruct[0].windowstart != 0) - count_download_queue--; - cwmp_free_schedule_download_request(current_download); - pthread_mutex_unlock (&mutex_schedule_download); - continue; - } - } - else - { - if (min_time == current_download->timewindowstruct[0].windowstart) - { - pthread_mutex_lock (&mutex_schedule_download); + } else { + if (min_time == current_download->timewindowstruct[0].windowstart) { + pthread_mutex_lock(&mutex_schedule_download); download_timeout.tv_sec = min_time; pthread_cond_timedwait(&threshold_schedule_download, &mutex_schedule_download, &download_timeout); - pthread_mutex_unlock (&mutex_schedule_download); - } - else if (min_time == current_download->timewindowstruct[1].windowstart) - { - pthread_mutex_lock (&mutex_schedule_download); + pthread_mutex_unlock(&mutex_schedule_download); + } else if (min_time == current_download->timewindowstruct[1].windowstart) { + pthread_mutex_lock(&mutex_schedule_download); download_timeout.tv_sec = min_time; pthread_cond_timedwait(&threshold_schedule_download, &mutex_schedule_download, &download_timeout); - pthread_mutex_unlock (&mutex_schedule_download); + pthread_mutex_unlock(&mutex_schedule_download); } } - - } - return NULL; + } + return NULL; } -void *thread_cwmp_rpc_cpe_apply_schedule_download (void *v) +void *thread_cwmp_rpc_cpe_apply_schedule_download(void *v) { - struct cwmp *cwmp = (struct cwmp *)v; - struct timespec apply_timeout = {0, 0}; - time_t current_time; - int i, error = FAULT_CPE_NO_FAULT; - struct transfer_complete *ptransfer_complete; - char *fault_code; + struct cwmp *cwmp = (struct cwmp *)v; + struct timespec apply_timeout = { 0, 0 }; + time_t current_time; + int i, error = FAULT_CPE_NO_FAULT; + struct transfer_complete *ptransfer_complete; + char *fault_code; int min_time = 0; struct apply_schedule_download *apply_download = NULL; struct apply_schedule_download *p, *_p; - for(;;) - { + for (;;) { current_time = time(NULL); - if(list_apply_schedule_download.next != &(list_apply_schedule_download)) - { - list_for_each_entry_safe(p, _p, &(list_apply_schedule_download), list) - { - if (min_time == 0) - { - if (p->timeintervals[0].windowend >= current_time) - { + if (list_apply_schedule_download.next != &(list_apply_schedule_download)) { + list_for_each_entry_safe (p, _p, &(list_apply_schedule_download), list) { + if (min_time == 0) { + if (p->timeintervals[0].windowend >= current_time) { min_time = p->timeintervals[0].windowstart; apply_download = p; - } - else if (p->timeintervals[1].windowend >= current_time) - { + } else if (p->timeintervals[1].windowend >= current_time) { min_time = p->timeintervals[1].windowstart; apply_download = p; + } else { + pthread_mutex_lock(&mutex_apply_schedule_download); + bkp_session_delete_apply_schedule_download(p); + ptransfer_complete = calloc(1, sizeof(struct transfer_complete)); + if (ptransfer_complete != NULL) { + error = FAULT_CPE_DOWNLOAD_FAIL_WITHIN_TIME_WINDOW; + ptransfer_complete->command_key = strdup(p->command_key); + ptransfer_complete->start_time = strdup(mix_get_time()); + ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); + ptransfer_complete->fault_code = error; + ptransfer_complete->type = TYPE_SCHEDULE_DOWNLOAD; + bkp_session_insert_transfer_complete(ptransfer_complete); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + } + list_del(&(p->list)); + if (p->timeintervals[0].windowstart != 0) + count_download_queue--; + cwmp_free_apply_schedule_download_request(p); + pthread_mutex_unlock(&mutex_apply_schedule_download); + continue; } - else - { - pthread_mutex_lock (&mutex_apply_schedule_download); - bkp_session_delete_apply_schedule_download(p); - ptransfer_complete = calloc (1,sizeof(struct transfer_complete)); - if(ptransfer_complete != NULL) - { - error = FAULT_CPE_DOWNLOAD_FAIL_WITHIN_TIME_WINDOW; - ptransfer_complete->command_key = strdup(p->command_key); - ptransfer_complete->start_time = strdup(mix_get_time()); - ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); - ptransfer_complete->fault_code = error; - ptransfer_complete->type = TYPE_SCHEDULE_DOWNLOAD; - bkp_session_insert_transfer_complete(ptransfer_complete); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - } - list_del (&(p->list)); - if(p->timeintervals[0].windowstart != 0) - count_download_queue--; - cwmp_free_apply_schedule_download_request(p); - pthread_mutex_unlock (&mutex_apply_schedule_download); - continue; - } - } - else - { - if(p->timeintervals[0].windowend >= current_time ) - { - if(p->timeintervals[0].windowstart < min_time) - { + } else { + if (p->timeintervals[0].windowend >= current_time) { + if (p->timeintervals[0].windowstart < min_time) { min_time = p->timeintervals[0].windowstart; apply_download = p; } - - } - else if (p->timeintervals[1].windowend >= current_time) - { - if(p->timeintervals[1].windowstart < min_time) - { + + } else if (p->timeintervals[1].windowend >= current_time) { + if (p->timeintervals[1].windowstart < min_time) { min_time = p->timeintervals[1].windowstart; apply_download = p; } - } - else - { - pthread_mutex_lock (&mutex_apply_schedule_download); - bkp_session_delete_apply_schedule_download(p); - ptransfer_complete = calloc (1,sizeof(struct transfer_complete)); - if(ptransfer_complete != NULL) - { - error = FAULT_CPE_DOWNLOAD_FAIL_WITHIN_TIME_WINDOW; - ptransfer_complete->command_key = strdup(p->command_key); - ptransfer_complete->start_time = strdup(mix_get_time()); - ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); - ptransfer_complete->fault_code = error; - ptransfer_complete->type = TYPE_SCHEDULE_DOWNLOAD; - bkp_session_insert_transfer_complete(ptransfer_complete); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - } - list_del (&(p->list)); - /*if(p->timewindowintervals[0].windowstart != 0) + } else { + pthread_mutex_lock(&mutex_apply_schedule_download); + bkp_session_delete_apply_schedule_download(p); + ptransfer_complete = calloc(1, sizeof(struct transfer_complete)); + if (ptransfer_complete != NULL) { + error = FAULT_CPE_DOWNLOAD_FAIL_WITHIN_TIME_WINDOW; + ptransfer_complete->command_key = strdup(p->command_key); + ptransfer_complete->start_time = strdup(mix_get_time()); + ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); + ptransfer_complete->fault_code = error; + ptransfer_complete->type = TYPE_SCHEDULE_DOWNLOAD; + bkp_session_insert_transfer_complete(ptransfer_complete); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + } + list_del(&(p->list)); + /*if(p->timewindowintervals[0].windowstart != 0) count_download_queue--;*/ - cwmp_free_apply_schedule_download_request(p); - pthread_mutex_unlock (&mutex_apply_schedule_download); + cwmp_free_apply_schedule_download_request(p); + pthread_mutex_unlock(&mutex_apply_schedule_download); continue; } } } - } - else - { - pthread_mutex_lock (&mutex_apply_schedule_download); + } else { + pthread_mutex_lock(&mutex_apply_schedule_download); pthread_cond_wait(&threshold_apply_schedule_download, &mutex_apply_schedule_download); - pthread_mutex_unlock (&mutex_apply_schedule_download); + pthread_mutex_unlock(&mutex_apply_schedule_download); } - if (min_time == 0) - { + if (min_time == 0) { continue; - } - else if (min_time <= current_time ) - { - pthread_mutex_lock (&(cwmp->mutex_session_send)); - pthread_mutex_lock (&mutex_schedule_download); + } else if (min_time <= current_time) { + pthread_mutex_lock(&(cwmp->mutex_session_send)); + pthread_mutex_lock(&mutex_schedule_download); external_init(); bkp_session_delete_apply_schedule_download(apply_download); bkp_session_save(); - ptransfer_complete = calloc (1,sizeof(struct transfer_complete)); + ptransfer_complete = calloc(1, sizeof(struct transfer_complete)); if (apply_download->file_type[0] == '1') { - ptransfer_complete->old_software_version = cwmp->deviceid.softwareversion; - } - ptransfer_complete->command_key = strdup(apply_download->command_key); - ptransfer_complete->start_time = strdup(apply_download->start_time); - ptransfer_complete->complete_time = strdup(mix_get_time()); - ptransfer_complete->fault_code = error; + ptransfer_complete->old_software_version = cwmp->deviceid.softwareversion; + } + ptransfer_complete->command_key = strdup(apply_download->command_key); + ptransfer_complete->start_time = strdup(apply_download->start_time); + ptransfer_complete->complete_time = strdup(mix_get_time()); + ptransfer_complete->fault_code = error; ptransfer_complete->type = TYPE_SCHEDULE_DOWNLOAD; - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - external_apply("download", apply_download->file_type, apply_download->timeintervals[0].windowstart); + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + external_apply("download", apply_download->file_type, apply_download->timeintervals[0].windowstart); external_handle_action(cwmp_handle_downloadFault); - external_fetch_downloadFaultResp(&fault_code); - if(fault_code != NULL) - { - if(fault_code[0]=='9') - { - for(i=1;i<__FAULT_CPE_MAX;i++) - { - if(strcmp(FAULT_CPE_ARRAY[i].CODE,fault_code) == 0) - { - error = i; - break; - } - } - } - free(fault_code); - if((error == FAULT_CPE_NO_FAULT) && - (apply_download->file_type[0] == '1' || apply_download->file_type[0] == '3' || apply_download->file_type[0] == '6')) - { - exit(EXIT_SUCCESS); - } - bkp_session_delete_transfer_complete(ptransfer_complete); - ptransfer_complete->fault_code = error; - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - } + external_fetch_downloadFaultResp(&fault_code); + if (fault_code != NULL) { + if (fault_code[0] == '9') { + for (i = 1; i < __FAULT_CPE_MAX; i++) { + if (strcmp(FAULT_CPE_ARRAY[i].CODE, fault_code) == 0) { + error = i; + break; + } + } + } + free(fault_code); + if ((error == FAULT_CPE_NO_FAULT) && (apply_download->file_type[0] == '1' || apply_download->file_type[0] == '3' || apply_download->file_type[0] == '6')) { + exit(EXIT_SUCCESS); + } + bkp_session_delete_transfer_complete(ptransfer_complete); + ptransfer_complete->fault_code = error; + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + } external_exit(); - pthread_mutex_unlock (&mutex_schedule_download); - pthread_mutex_unlock (&(cwmp->mutex_session_send)); - pthread_cond_signal (&(cwmp->threshold_session_send)); - pthread_mutex_lock (&mutex_apply_schedule_download); - list_del (&(apply_download->list)); - /*if(pdownload->timeintervals[0].windowstart != 0) + pthread_mutex_unlock(&mutex_schedule_download); + pthread_mutex_unlock(&(cwmp->mutex_session_send)); + pthread_cond_signal(&(cwmp->threshold_session_send)); + pthread_mutex_lock(&mutex_apply_schedule_download); + list_del(&(apply_download->list)); + /*if(pdownload->timeintervals[0].windowstart != 0) count_download_queue--;*/ - cwmp_free_apply_schedule_download_request(apply_download); - pthread_mutex_unlock (&mutex_apply_schedule_download); - continue; - } - else - { - if (min_time == apply_download->timeintervals[0].windowstart) - { - pthread_mutex_lock (&mutex_apply_schedule_download); + cwmp_free_apply_schedule_download_request(apply_download); + pthread_mutex_unlock(&mutex_apply_schedule_download); + continue; + } else { + if (min_time == apply_download->timeintervals[0].windowstart) { + pthread_mutex_lock(&mutex_apply_schedule_download); apply_timeout.tv_sec = min_time; pthread_cond_timedwait(&threshold_apply_schedule_download, &mutex_schedule_download, &apply_timeout); - pthread_mutex_unlock (&mutex_apply_schedule_download); - } - else if (min_time == apply_download->timeintervals[1].windowstart) - { - pthread_mutex_lock (&mutex_apply_schedule_download); + pthread_mutex_unlock(&mutex_apply_schedule_download); + } else if (min_time == apply_download->timeintervals[1].windowstart) { + pthread_mutex_lock(&mutex_apply_schedule_download); apply_timeout.tv_sec = min_time; pthread_cond_timedwait(&threshold_schedule_download, &mutex_schedule_download, &apply_timeout); - pthread_mutex_unlock (&mutex_schedule_download); + pthread_mutex_unlock(&mutex_schedule_download); } } - - } + } return NULL; } -static char *get_software_module_object_eq(char *param1, char *val1, char *param2, char* val2, json_object **parameters) +static char *get_software_module_object_eq(char *param1, char *val1, char *param2, char *val2, json_object **parameters) { char *err = NULL; char *sw_parameter_name = NULL; @@ -3286,9 +3046,9 @@ static char *get_software_module_object_eq(char *param1, char *val1, char *param return NULL; } char *first_param_name = strdup(json_object_get_string(first_param)); - char instance[8]; - snprintf(instance, (size_t)(strchr(first_param_name+strlen("Device.SoftwareModules.DeploymentUnit."),'.') - first_param_name - strlen("Device.SoftwareModules.DeploymentUnit.")+1), "%s", (char*)(first_param_name+strlen("Device.SoftwareModules.DeploymentUnit."))); - return strdup(instance); + char instance[8]; + snprintf(instance, (size_t)(strchr(first_param_name + strlen("Device.SoftwareModules.DeploymentUnit."), '.') - first_param_name - strlen("Device.SoftwareModules.DeploymentUnit.") + 1), "%s", (char *)(first_param_name + strlen("Device.SoftwareModules.DeploymentUnit."))); + return strdup(instance); } static int get_deployment_unit_name_version(char *uuid, char **name, char **version, char **env) @@ -3297,14 +3057,15 @@ static int get_deployment_unit_name_version(char *uuid, char **name, char **vers char *sw_by_uuid_instance = NULL, *name_param = NULL, *version_param = NULL, *environment_param = NULL; sw_by_uuid_instance = get_software_module_object_eq("UUID", uuid, NULL, NULL, &arrobj); - if(!sw_by_uuid_instance) + if (!sw_by_uuid_instance) return 0; asprintf(&name_param, "Device.SoftwareModules.DeploymentUnit.%s.Name", sw_by_uuid_instance); asprintf(&version_param, "Device.SoftwareModules.DeploymentUnit.%s.Version", sw_by_uuid_instance); asprintf(&environment_param, "Device.SoftwareModules.DeploymentUnit.%s.ExecutionEnvRef", sw_by_uuid_instance); - foreach_jsonobj_in_array(du_obj, arrobj) { + foreach_jsonobj_in_array(du_obj, arrobj) + { json_object_object_get_ex(du_obj, "parameter", ¶m_obj); if (!param_obj) continue; @@ -3312,15 +3073,15 @@ static int get_deployment_unit_name_version(char *uuid, char **name, char **vers json_object_object_get_ex(du_obj, "value", &value_obj); if (strcmp(json_object_get_string(param_obj), name_param) == 0) { - *name = strdup(value_obj?json_object_get_string(value_obj):""); + *name = strdup(value_obj ? json_object_get_string(value_obj) : ""); continue; } if (strcmp(json_object_get_string(param_obj), version_param) == 0) { - *version = strdup(value_obj?json_object_get_string(value_obj):""); + *version = strdup(value_obj ? json_object_get_string(value_obj) : ""); continue; } if (strcmp(json_object_get_string(param_obj), environment_param) == 0) { - *env = strdup(value_obj?json_object_get_string(value_obj):""); + *env = strdup(value_obj ? json_object_get_string(value_obj) : ""); continue; } } @@ -3334,12 +3095,13 @@ static char *get_softwaremodules_uuid(char *url) char *sw_by_url_instance = NULL, *uuid_param = NULL, *uuid = NULL; sw_by_url_instance = get_software_module_object_eq("URL", url, NULL, NULL, &arrobj); - if(!sw_by_url_instance) + if (!sw_by_url_instance) return NULL; asprintf(&uuid_param, "Device.SoftwareModules.DeploymentUnit.%s.UUID", sw_by_url_instance); - foreach_jsonobj_in_array(du_obj, arrobj) { + foreach_jsonobj_in_array(du_obj, arrobj) + { json_object_object_get_ex(du_obj, "parameter", ¶m_obj); if (!param_obj) continue; @@ -3347,7 +3109,7 @@ static char *get_softwaremodules_uuid(char *url) json_object_object_get_ex(du_obj, "value", &value_obj); if (strcmp(json_object_get_string(param_obj), uuid_param) == 0) { - uuid = strdup(value_obj?json_object_get_string(value_obj):""); + uuid = strdup(value_obj ? json_object_get_string(value_obj) : ""); break; } } @@ -3361,12 +3123,13 @@ static char *get_softwaremodules_url(char *uuid) char *sw_by_uuid_instance = NULL, *url_param = NULL, *url = NULL; sw_by_uuid_instance = get_software_module_object_eq("UUID", uuid, NULL, NULL, &arrobj); - if(!sw_by_uuid_instance) + if (!sw_by_uuid_instance) return NULL; asprintf(&url_param, "Device.SoftwareModules.DeploymentUnit.%s.URL", sw_by_uuid_instance); - foreach_jsonobj_in_array(du_obj, arrobj) { + foreach_jsonobj_in_array(du_obj, arrobj) + { json_object_object_get_ex(du_obj, "parameter", ¶m_obj); if (!param_obj) continue; @@ -3374,7 +3137,7 @@ static char *get_softwaremodules_url(char *uuid) json_object_object_get_ex(du_obj, "value", &value_obj); if (strcmp(json_object_get_string(param_obj), url_param) == 0) { - url = strdup(value_obj?json_object_get_string(value_obj):""); + url = strdup(value_obj ? json_object_get_string(value_obj) : ""); break; } } @@ -3422,7 +3185,8 @@ static char *get_exec_env_name(char *environment_path) asprintf(&env_param, "%sName", environment_path); - foreach_jsonobj_in_array(du_obj, sw_env_get_obj) { + foreach_jsonobj_in_array(du_obj, sw_env_get_obj) + { json_object_object_get_ex(du_obj, "parameter", ¶m_obj); if (!param_obj) continue; @@ -3430,7 +3194,7 @@ static char *get_exec_env_name(char *environment_path) json_object_object_get_ex(du_obj, "value", &value_obj); if (strcmp(json_object_get_string(param_obj), env_param) == 0) { - env_name = strdup(value_obj?json_object_get_string(value_obj):""); + env_name = strdup(value_obj ? json_object_get_string(value_obj) : ""); break; } } @@ -3440,7 +3204,7 @@ static char *get_exec_env_name(char *environment_path) static int cwmp_launch_du_install(char *url, char *uuid, char *user, char *pass, char *env, char **package_version, char **package_name, char **package_uuid, char **package_env, struct opresult **pchange_du_state_complete) { - int i, error = FAULT_CPE_NO_FAULT; + int i, error = FAULT_CPE_NO_FAULT; char *fault_code; (*pchange_du_state_complete)->start_time = strdup(mix_get_time()); @@ -3463,7 +3227,7 @@ static int cwmp_launch_du_install(char *url, char *uuid, char *user, char *pass, static int cwmp_launch_du_update(char *uuid, char *url, char *user, char *pass, char **package_version, char **package_name, char **package_uuid, char **package_env, struct opresult **pchange_du_state_complete) { - int i, error = FAULT_CPE_NO_FAULT; + int i, error = FAULT_CPE_NO_FAULT; char *fault_code; (*pchange_du_state_complete)->start_time = strdup(mix_get_time()); @@ -3471,9 +3235,9 @@ static int cwmp_launch_du_update(char *uuid, char *url, char *user, char *pass, external_handle_action(cwmp_handle_dustate_changeFault); external_fetch_du_change_stateFaultResp(&fault_code, package_version, package_name, package_uuid, package_env); if (fault_code != NULL) { - if (fault_code[0]=='9') { + if (fault_code[0] == '9') { for (i = 1; i < __FAULT_CPE_MAX; i++) { - if (strcmp(FAULT_CPE_ARRAY[i].CODE,fault_code) == 0) { + if (strcmp(FAULT_CPE_ARRAY[i].CODE, fault_code) == 0) { error = i; break; } @@ -3486,7 +3250,7 @@ static int cwmp_launch_du_update(char *uuid, char *url, char *user, char *pass, static int cwmp_launch_du_uninstall(char *package_name, char *package_env, struct opresult **pchange_du_state_complete) { - int i, error = FAULT_CPE_NO_FAULT; + int i, error = FAULT_CPE_NO_FAULT; char *fault_code; (*pchange_du_state_complete)->start_time = strdup(mix_get_time()); @@ -3494,9 +3258,9 @@ static int cwmp_launch_du_uninstall(char *package_name, char *package_env, struc external_handle_action(cwmp_handle_uninstallFault); external_fetch_uninstallFaultResp(&fault_code); if (fault_code != NULL) { - if (fault_code[0]=='9') { - for (i = 1 ; i < __FAULT_CPE_MAX; i++) { - if (strcmp(FAULT_CPE_ARRAY[i].CODE,fault_code) == 0) { + if (fault_code[0] == '9') { + for (i = 1; i < __FAULT_CPE_MAX; i++) { + if (strcmp(FAULT_CPE_ARRAY[i].CODE, fault_code) == 0) { error = i; break; } @@ -3509,11 +3273,11 @@ static int cwmp_launch_du_uninstall(char *package_name, char *package_env, struc void *thread_cwmp_rpc_cpe_change_du_state(void *v) { - struct cwmp *cwmp = (struct cwmp *)v; - struct timespec change_du_state_timeout = {50, 0}; - int error = FAULT_CPE_NO_FAULT; - struct du_state_change_complete *pdu_state_change_complete; - long int time_of_grace = 216000; + struct cwmp *cwmp = (struct cwmp *)v; + struct timespec change_du_state_timeout = { 50, 0 }; + int error = FAULT_CPE_NO_FAULT; + struct du_state_change_complete *pdu_state_change_complete; + long int time_of_grace = 216000; char *package_version; char *package_name; char *package_uuid; @@ -3523,24 +3287,24 @@ void *thread_cwmp_rpc_cpe_change_du_state(void *v) char *du_ref = NULL; char *cur_uuid = NULL; char *cur_url = NULL; - + for (;;) { if (list_change_du_state.next != &(list_change_du_state)) { - struct change_du_state *pchange_du_state = list_entry(list_change_du_state.next,struct change_du_state, list); + struct change_du_state *pchange_du_state = list_entry(list_change_du_state.next, struct change_du_state, list); time_t current_time = time(NULL); time_t timeout = current_time - pchange_du_state->timeout; if ((timeout >= 0) && (timeout > time_of_grace)) { - pthread_mutex_lock (&mutex_change_du_state); - pdu_state_change_complete = calloc (1, sizeof(struct du_state_change_complete)); + pthread_mutex_lock(&mutex_change_du_state); + pdu_state_change_complete = calloc(1, sizeof(struct du_state_change_complete)); if (pdu_state_change_complete != NULL) { error = FAULT_CPE_DOWNLOAD_FAILURE; INIT_LIST_HEAD(&(pdu_state_change_complete->list_opresult)); pdu_state_change_complete->command_key = strdup(pchange_du_state->command_key); pdu_state_change_complete->timeout = pchange_du_state->timeout; - list_for_each_entry_safe(p, q, &pchange_du_state->list_operation, list) { + list_for_each_entry_safe (p, q, &pchange_du_state->list_operation, list) { res = calloc(1, sizeof(struct opresult)); - list_add_tail(&(res->list), &(pdu_state_change_complete->list_opresult)); + list_add_tail(&(res->list), &(pdu_state_change_complete->list_opresult)); res->uuid = strdup(p->uuid); res->version = strdup(p->version); res->current_state = strdup("Failed"); @@ -3554,20 +3318,20 @@ void *thread_cwmp_rpc_cpe_change_du_state(void *v) } list_del(&(pchange_du_state->list)); cwmp_free_change_du_state_request(pchange_du_state); - pthread_mutex_unlock (&mutex_change_du_state); + pthread_mutex_unlock(&mutex_change_du_state); continue; } if ((timeout >= 0) && (timeout <= time_of_grace)) { - pthread_mutex_lock (&(cwmp->mutex_session_send)); - pdu_state_change_complete = calloc (1, sizeof(struct du_state_change_complete)); + pthread_mutex_lock(&(cwmp->mutex_session_send)); + pdu_state_change_complete = calloc(1, sizeof(struct du_state_change_complete)); if (pdu_state_change_complete != NULL) { error = FAULT_CPE_NO_FAULT; INIT_LIST_HEAD(&(pdu_state_change_complete->list_opresult)); pdu_state_change_complete->command_key = strdup(pchange_du_state->command_key); pdu_state_change_complete->timeout = pchange_du_state->timeout; - list_for_each_entry_safe(p, q, &pchange_du_state->list_operation, list) { + list_for_each_entry_safe (p, q, &pchange_du_state->list_operation, list) { res = calloc(1, sizeof(struct opresult)); list_add_tail(&(res->list), &(pdu_state_change_complete->list_opresult)); external_init(); @@ -3579,14 +3343,9 @@ void *thread_cwmp_rpc_cpe_change_du_state(void *v) break; } - error = cwmp_launch_du_install(p->url, p->uuid, p->username, p->password, get_exec_env_name(p->executionenvref), - &package_version, - &package_name, - &package_uuid, - &package_env, - &res); + error = cwmp_launch_du_install(p->url, p->uuid, p->username, p->password, get_exec_env_name(p->executionenvref), &package_version, &package_name, &package_uuid, &package_env, &res); - if ( error == FAULT_CPE_NO_FAULT) { + if (error == FAULT_CPE_NO_FAULT) { du_ref = (package_name && p->executionenvref) ? get_deployment_unit_reference(package_name, p->executionenvref) : NULL; res->du_ref = strdup(du_ref ? du_ref : ""); @@ -3630,14 +3389,9 @@ void *thread_cwmp_rpc_cpe_change_du_state(void *v) } } - error = cwmp_launch_du_update((cur_uuid && *cur_uuid) ? cur_uuid : p->uuid, (cur_url && *cur_url) ? cur_url : p->url, p->username, p->password, - &package_version, - &package_name, - &package_uuid, - &package_env, - &res); + error = cwmp_launch_du_update((cur_uuid && *cur_uuid) ? cur_uuid : p->uuid, (cur_url && *cur_url) ? cur_url : p->url, p->username, p->password, &package_version, &package_name, &package_uuid, &package_env, &res); - if( error == FAULT_CPE_NO_FAULT) { + if (error == FAULT_CPE_NO_FAULT) { res->uuid = strdup(package_uuid ? package_uuid : ""); res->version = strdup(package_version ? package_version : ""); res->current_state = strdup("Installed"); @@ -3672,7 +3426,7 @@ void *thread_cwmp_rpc_cpe_change_du_state(void *v) error = cwmp_launch_du_uninstall(package_name, get_exec_env_name(package_env), &res); - if( error == FAULT_CPE_NO_FAULT) { + if (error == FAULT_CPE_NO_FAULT) { res->current_state = strdup("Uninstalled"); res->resolved = 1; } else { @@ -3691,7 +3445,6 @@ void *thread_cwmp_rpc_cpe_change_du_state(void *v) FREE(package_version); FREE(package_env); break; - } external_exit(); @@ -3705,131 +3458,125 @@ void *thread_cwmp_rpc_cpe_change_du_state(void *v) } } - pthread_mutex_lock (&mutex_change_du_state); - pthread_cond_timedwait(&threshold_change_du_state, &mutex_change_du_state, &change_du_state_timeout); - pthread_mutex_unlock (&mutex_change_du_state); + pthread_mutex_lock(&mutex_change_du_state); + pthread_cond_timedwait(&threshold_change_du_state, &mutex_change_du_state, &change_du_state_timeout); + pthread_mutex_unlock(&mutex_change_du_state); - pthread_mutex_unlock (&(cwmp->mutex_session_send)); - pthread_cond_signal (&(cwmp->threshold_session_send)); + pthread_mutex_unlock(&(cwmp->mutex_session_send)); + pthread_cond_signal(&(cwmp->threshold_session_send)); - pthread_mutex_lock (&mutex_change_du_state); + pthread_mutex_lock(&mutex_change_du_state); list_del(&(pchange_du_state->list)); cwmp_free_change_du_state_request(pchange_du_state); - pthread_mutex_unlock (&mutex_change_du_state); + pthread_mutex_unlock(&mutex_change_du_state); continue; } else { - pthread_mutex_lock (&mutex_change_du_state); + pthread_mutex_lock(&mutex_change_du_state); pthread_cond_wait(&threshold_change_du_state, &mutex_change_du_state); - pthread_mutex_unlock (&mutex_change_du_state); - } - } - return NULL; + pthread_mutex_unlock(&mutex_change_du_state); + } + } + return NULL; } -void *thread_cwmp_rpc_cpe_upload (void *v) +void *thread_cwmp_rpc_cpe_upload(void *v) { - struct cwmp *cwmp = (struct cwmp *)v; - struct upload *pupload; - struct timespec upload_timeout = {0, 0}; - time_t current_time, stime; - int error = FAULT_CPE_NO_FAULT; - struct transfer_complete *ptransfer_complete; - long int time_of_grace = 3600,timeout; + struct cwmp *cwmp = (struct cwmp *)v; + struct upload *pupload; + struct timespec upload_timeout = { 0, 0 }; + time_t current_time, stime; + int error = FAULT_CPE_NO_FAULT; + struct transfer_complete *ptransfer_complete; + long int time_of_grace = 3600, timeout; - for (;;) { - if (list_upload.next!=&(list_upload)) { - pupload = list_entry(list_upload.next,struct upload, list); - stime = pupload->scheduled_time; - current_time = time(NULL); - if(pupload->scheduled_time != 0) - timeout = current_time - pupload->scheduled_time; - else - timeout = 0; - if((timeout >= 0)&&(timeout > time_of_grace)) - { - pthread_mutex_lock (&mutex_upload); - bkp_session_delete_upload(pupload); - ptransfer_complete = calloc (1,sizeof(struct transfer_complete)); - if(ptransfer_complete != NULL) - { - error = FAULT_CPE_DOWNLOAD_FAILURE; + for (;;) { + if (list_upload.next != &(list_upload)) { + pupload = list_entry(list_upload.next, struct upload, list); + stime = pupload->scheduled_time; + current_time = time(NULL); + if (pupload->scheduled_time != 0) + timeout = current_time - pupload->scheduled_time; + else + timeout = 0; + if ((timeout >= 0) && (timeout > time_of_grace)) { + pthread_mutex_lock(&mutex_upload); + bkp_session_delete_upload(pupload); + ptransfer_complete = calloc(1, sizeof(struct transfer_complete)); + if (ptransfer_complete != NULL) { + error = FAULT_CPE_DOWNLOAD_FAILURE; - ptransfer_complete->command_key = strdup(pupload->command_key); - ptransfer_complete->start_time = strdup(mix_get_time()); - ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); - ptransfer_complete->fault_code = error; - ptransfer_complete->type = TYPE_UPLOAD; - bkp_session_insert_transfer_complete(ptransfer_complete); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - } - list_del (&(pupload->list)); - if(pupload->scheduled_time != 0) - count_download_queue--; - cwmp_free_upload_request(pupload); - pthread_mutex_unlock (&mutex_download); - continue; - } - if((timeout >= 0)&&(timeout <= time_of_grace)) - { - pthread_mutex_lock (&(cwmp->mutex_session_send)); - external_init(); - CWMP_LOG(INFO,"Launch upload file %s",pupload->url); - error = cwmp_launch_upload(pupload,&ptransfer_complete); - if(error != FAULT_CPE_NO_FAULT) - { - bkp_session_insert_transfer_complete(ptransfer_complete); - bkp_session_save(); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - bkp_session_delete_transfer_complete(ptransfer_complete); - } - else - { + ptransfer_complete->command_key = strdup(pupload->command_key); + ptransfer_complete->start_time = strdup(mix_get_time()); + ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time); + ptransfer_complete->fault_code = error; + ptransfer_complete->type = TYPE_UPLOAD; + bkp_session_insert_transfer_complete(ptransfer_complete); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + } + list_del(&(pupload->list)); + if (pupload->scheduled_time != 0) + count_download_queue--; + cwmp_free_upload_request(pupload); + pthread_mutex_unlock(&mutex_download); + continue; + } + if ((timeout >= 0) && (timeout <= time_of_grace)) { + pthread_mutex_lock(&(cwmp->mutex_session_send)); + external_init(); + CWMP_LOG(INFO, "Launch upload file %s", pupload->url); + error = cwmp_launch_upload(pupload, &ptransfer_complete); + if (error != FAULT_CPE_NO_FAULT) { + bkp_session_insert_transfer_complete(ptransfer_complete); + bkp_session_save(); + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + bkp_session_delete_transfer_complete(ptransfer_complete); + } else { bkp_session_delete_transfer_complete(ptransfer_complete); ptransfer_complete->fault_code = error; bkp_session_insert_transfer_complete(ptransfer_complete); bkp_session_save(); - cwmp_root_cause_TransferComplete (cwmp,ptransfer_complete); - } - external_exit(); - pthread_mutex_unlock (&(cwmp->mutex_session_send)); - pthread_cond_signal (&(cwmp->threshold_session_send)); - pthread_mutex_lock (&mutex_upload); - list_del (&(pupload->list)); - if(pupload->scheduled_time != 0) - count_download_queue--; - cwmp_free_upload_request(pupload); - pthread_mutex_unlock (&mutex_upload); - continue; - } - pthread_mutex_lock (&mutex_upload); - upload_timeout.tv_sec = stime; - pthread_cond_timedwait(&threshold_upload, &mutex_upload, &upload_timeout); - pthread_mutex_unlock (&mutex_upload); - } else { - pthread_mutex_lock (&mutex_upload); - pthread_cond_wait(&threshold_upload, &mutex_upload); - pthread_mutex_unlock (&mutex_upload); - } - } - return NULL; + cwmp_root_cause_TransferComplete(cwmp, ptransfer_complete); + } + external_exit(); + pthread_mutex_unlock(&(cwmp->mutex_session_send)); + pthread_cond_signal(&(cwmp->threshold_session_send)); + pthread_mutex_lock(&mutex_upload); + list_del(&(pupload->list)); + if (pupload->scheduled_time != 0) + count_download_queue--; + cwmp_free_upload_request(pupload); + pthread_mutex_unlock(&mutex_upload); + continue; + } + pthread_mutex_lock(&mutex_upload); + upload_timeout.tv_sec = stime; + pthread_cond_timedwait(&threshold_upload, &mutex_upload, &upload_timeout); + pthread_mutex_unlock(&mutex_upload); + } else { + pthread_mutex_lock(&mutex_upload); + pthread_cond_wait(&threshold_upload, &mutex_upload); + pthread_mutex_unlock(&mutex_upload); + } + } + return NULL; } int cwmp_free_download_request(struct download *download) { if (download != NULL) { - if(download->command_key != NULL) + if (download->command_key != NULL) free(download->command_key); - if(download->file_type != NULL) + if (download->file_type != NULL) free(download->file_type); - if(download->url != NULL) + if (download->url != NULL) free(download->url); - if(download->username != NULL) + if (download->username != NULL) free(download->username); - if(download->password != NULL) + if (download->password != NULL) free(download->password); free(download); @@ -3840,26 +3587,26 @@ int cwmp_free_download_request(struct download *download) int cwmp_free_schedule_download_request(struct schedule_download *schedule_download) { if (schedule_download != NULL) { - if(schedule_download->command_key != NULL) + if (schedule_download->command_key != NULL) free(schedule_download->command_key); - if(schedule_download->file_type != NULL) + if (schedule_download->file_type != NULL) free(schedule_download->file_type); - - if(schedule_download->url != NULL) + + if (schedule_download->url != NULL) free(schedule_download->url); - - if(schedule_download->username != NULL) + + if (schedule_download->username != NULL) free(schedule_download->username); - - if(schedule_download->password != NULL) + + if (schedule_download->password != NULL) free(schedule_download->password); for (int i = 0; i <= 1; i++) { - if(schedule_download->timewindowstruct[i].windowmode != NULL) - free(schedule_download->timewindowstruct[i].windowmode); + if (schedule_download->timewindowstruct[i].windowmode != NULL) + free(schedule_download->timewindowstruct[i].windowmode); - if(schedule_download->timewindowstruct[i].usermessage != NULL) + if (schedule_download->timewindowstruct[i].usermessage != NULL) free(schedule_download->timewindowstruct[i].usermessage); } free(schedule_download); @@ -3878,7 +3625,7 @@ int cwmp_free_apply_schedule_download_request(struct apply_schedule_download *ap if (apply_schedule_download->start_time != NULL) free(apply_schedule_download->start_time); - + free(apply_schedule_download); } return CWMP_OK; @@ -3889,7 +3636,7 @@ int cwmp_free_change_du_state_request(struct change_du_state *change_du_state) if (change_du_state != NULL) { struct list_head *ilist, *q; - list_for_each_safe(ilist, q, &(change_du_state->list_operation)) { + list_for_each_safe (ilist, q, &(change_du_state->list_operation)) { struct operations *operation = list_entry(ilist, struct operations, list); FREE(operation->url); FREE(operation->uuid); @@ -3934,76 +3681,72 @@ int cwmp_free_upload_request(struct upload *upload) int cwmp_scheduledDownload_remove_all() { - struct download *download; + struct download *download; - pthread_mutex_lock (&mutex_download); - while (list_download.next!=&(list_download)) - { - download = list_entry(list_download.next,struct download, list); - list_del (&(download->list)); + pthread_mutex_lock(&mutex_download); + while (list_download.next != &(list_download)) { + download = list_entry(list_download.next, struct download, list); + list_del(&(download->list)); bkp_session_delete_download(download); - if(download->scheduled_time != 0) + if (download->scheduled_time != 0) count_download_queue--; cwmp_free_download_request(download); } - pthread_mutex_unlock (&mutex_download); + pthread_mutex_unlock(&mutex_download); return CWMP_OK; } int cwmp_scheduledUpload_remove_all() { - struct upload *upload; + struct upload *upload; - pthread_mutex_lock (&mutex_upload); - while (list_upload.next!=&(list_upload)) - { - upload = list_entry(list_upload.next,struct upload, list); - list_del (&(upload->list)); + pthread_mutex_lock(&mutex_upload); + while (list_upload.next != &(list_upload)) { + upload = list_entry(list_upload.next, struct upload, list); + list_del(&(upload->list)); bkp_session_delete_upload(upload); - if(upload->scheduled_time != 0) + if (upload->scheduled_time != 0) count_download_queue--; cwmp_free_upload_request(upload); } - pthread_mutex_unlock (&mutex_upload); + pthread_mutex_unlock(&mutex_upload); return CWMP_OK; } int cwmp_scheduled_Download_remove_all() { - struct schedule_download *schedule_download; + struct schedule_download *schedule_download; - pthread_mutex_lock (&mutex_schedule_download); - while (list_schedule_download.next!=&(list_schedule_download)) - { - schedule_download = list_entry(list_schedule_download.next,struct schedule_download, list); - list_del (&(schedule_download->list)); + pthread_mutex_lock(&mutex_schedule_download); + while (list_schedule_download.next != &(list_schedule_download)) { + schedule_download = list_entry(list_schedule_download.next, struct schedule_download, list); + list_del(&(schedule_download->list)); bkp_session_delete_schedule_download(schedule_download); - if(schedule_download->timewindowstruct[0].windowstart != 0) + if (schedule_download->timewindowstruct[0].windowstart != 0) count_download_queue--; cwmp_free_schedule_download_request(schedule_download); } - pthread_mutex_unlock (&mutex_schedule_download); + pthread_mutex_unlock(&mutex_schedule_download); return CWMP_OK; } int cwmp_apply_scheduled_Download_remove_all() { - struct apply_schedule_download *apply_schedule_download; + struct apply_schedule_download *apply_schedule_download; - pthread_mutex_lock (&mutex_apply_schedule_download); - while (list_apply_schedule_download.next!=&(list_apply_schedule_download)) - { - apply_schedule_download = list_entry(list_apply_schedule_download.next,struct apply_schedule_download, list); - list_del (&(apply_schedule_download->list)); + pthread_mutex_lock(&mutex_apply_schedule_download); + while (list_apply_schedule_download.next != &(list_apply_schedule_download)) { + apply_schedule_download = list_entry(list_apply_schedule_download.next, struct apply_schedule_download, list); + list_del(&(apply_schedule_download->list)); bkp_session_delete_apply_schedule_download(apply_schedule_download); /*if(apply_schedule_download->timetimeintervals[0].windowstart != 0) count_download_queue--;*/ //TOCK cwmp_free_apply_schedule_download_request(apply_schedule_download); } - pthread_mutex_unlock (&mutex_apply_schedule_download); + pthread_mutex_unlock(&mutex_apply_schedule_download); return CWMP_OK; } @@ -4014,33 +3757,31 @@ int cwmp_add_apply_schedule_download(struct schedule_download *schedule_download int error = FAULT_CPE_NO_FAULT; struct apply_schedule_download *apply_schedule_download; - apply_schedule_download = calloc (1,sizeof(struct apply_schedule_download)); + apply_schedule_download = calloc(1, sizeof(struct apply_schedule_download)); if (apply_schedule_download == NULL) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; } - if(error == FAULT_CPE_NO_FAULT) - { - pthread_mutex_lock (&mutex_apply_schedule_download); + if (error == FAULT_CPE_NO_FAULT) { + pthread_mutex_lock(&mutex_apply_schedule_download); apply_schedule_download->command_key = strdup(schedule_download->command_key); apply_schedule_download->file_type = strdup(schedule_download->file_type); apply_schedule_download->start_time = strdup(start_time); - for (i = 0; i < 2; i++) - { + for (i = 0; i < 2; i++) { apply_schedule_download->timeintervals[i].windowstart = schedule_download->timewindowstruct[i].windowstart; apply_schedule_download->timeintervals[i].windowend = schedule_download->timewindowstruct[i].windowend; apply_schedule_download->timeintervals[i].maxretries = schedule_download->timewindowstruct[i].maxretries; } - list_add_tail (&(apply_schedule_download->list), &(list_apply_schedule_download)); - + list_add_tail(&(apply_schedule_download->list), &(list_apply_schedule_download)); + bkp_session_insert_apply_schedule_download(apply_schedule_download); - bkp_session_save(); - pthread_mutex_unlock (&mutex_apply_schedule_download); + bkp_session_save(); + pthread_mutex_unlock(&mutex_apply_schedule_download); pthread_cond_signal(&threshold_apply_schedule_download); } return 0; fault: - cwmp_free_apply_schedule_download_request(apply_schedule_download); + cwmp_free_apply_schedule_download_request(apply_schedule_download); return 0; } @@ -4049,7 +3790,7 @@ int cwmp_handle_rpc_cpe_change_du_state(struct session *session, struct rpc *rpc mxml_node_t *n, *t, *b = session->body_in; struct change_du_state *change_du_state = NULL; struct operations *elem = NULL; - int error = FAULT_CPE_NO_FAULT; + int error = FAULT_CPE_NO_FAULT; char *c; if (asprintf(&c, "%s:%s", ns.cwmp, "ChangeDUState") == -1) { @@ -4060,10 +3801,11 @@ int cwmp_handle_rpc_cpe_change_du_state(struct session *session, struct rpc *rpc n = mxmlFindElement(session->tree_in, session->tree_in, c, NULL, NULL, MXML_DESCEND); FREE(c); - if (!n) return -1; + if (!n) + return -1; b = n; - change_du_state = calloc (1,sizeof(struct change_du_state)); + change_du_state = calloc(1, sizeof(struct change_du_state)); if (change_du_state == NULL) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; @@ -4075,103 +3817,91 @@ int cwmp_handle_rpc_cpe_change_du_state(struct session *session, struct rpc *rpc while (b != NULL) { t = b; if (b && b->type == MXML_ELEMENT && strcmp(b->value.element.name, "Operations") == 0) { - char *operation = (char *) mxmlElementGetAttrValue(b, "xsi:type"); + char *operation = (char *)mxmlElementGetAttrValue(b, "xsi:type"); if (!strcmp(operation, "cwmp:InstallOpStruct")) { - elem = (operations *) calloc(1, sizeof(operations)); + elem = (operations *)calloc(1, sizeof(operations)); elem->type = DU_INSTALL; list_add_tail(&(elem->list), &(change_du_state->list_operation)); t = mxmlWalkNext(t, b, MXML_DESCEND); while (t) { - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "URL")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "URL")) { elem->url = strdup(t->value.opaque); } - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "UUID")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "UUID")) { elem->uuid = strdup(t->value.opaque); } - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Username")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Username")) { elem->username = strdup(t->value.opaque); } - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Password")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Password")) { elem->password = strdup(t->value.opaque); } - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "ExecutionEnvRef")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "ExecutionEnvRef")) { elem->executionenvref = strdup(t->value.opaque); } t = mxmlWalkNext(t, b, MXML_DESCEND); } } else if (!strcmp(operation, "cwmp:UpdateOpStruct")) { - elem = (operations *) calloc(1,sizeof(operations)); + elem = (operations *)calloc(1, sizeof(operations)); elem->type = DU_UPDATE; list_add_tail(&(elem->list), &(change_du_state->list_operation)); t = mxmlWalkNext(t, b, MXML_DESCEND); while (t) { - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "UUID")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "UUID")) { elem->uuid = strdup(t->value.opaque); } - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Version")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Version")) { elem->version = strdup(t->value.opaque); } - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "URL")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "URL")) { elem->url = strdup(t->value.opaque); } - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Username")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Username")) { elem->username = strdup(t->value.opaque); } - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Password")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Password")) { elem->password = strdup(t->value.opaque); } t = mxmlWalkNext(t, b, MXML_DESCEND); } } else if (!strcmp(operation, "cwmp:UninstallOpStruct")) { - elem = (operations *) calloc(1,sizeof(operations)); - elem->type = DU_UNINSTALL ; + elem = (operations *)calloc(1, sizeof(operations)); + elem->type = DU_UNINSTALL; list_add_tail(&(elem->list), &(change_du_state->list_operation)); t = mxmlWalkNext(t, b, MXML_DESCEND); while (t) { - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "UUID")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "UUID")) { elem->uuid = strdup(t->value.opaque); } - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Version")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "Version")) { elem->version = strdup(t->value.opaque); } - if (t && t->type == MXML_OPAQUE && t->value.opaque && - t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "ExecutionEnvRef")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "ExecutionEnvRef")) { elem->executionenvref = strdup(t->value.opaque); } t = mxmlWalkNext(t, b, MXML_DESCEND); } } } - if (b && b->type == MXML_OPAQUE && b->value.opaque && - b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "CommandKey")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "CommandKey")) { change_du_state->command_key = strdup(b->value.opaque); } b = mxmlWalkNext(b, n, MXML_DESCEND); } t = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); - if (!t) goto fault; + if (!t) + goto fault; t = mxmlNewElement(t, "cwmp:ChangeDUStateResponse"); - if (!t) goto fault; + if (!t) + goto fault; if (error == FAULT_CPE_NO_FAULT) { - pthread_mutex_lock (&mutex_change_du_state); + pthread_mutex_lock(&mutex_change_du_state); list_add_tail(&(change_du_state->list), &(list_change_du_state)); bkp_session_insert_change_du_state(change_du_state); bkp_session_save(); - pthread_mutex_unlock (&mutex_change_du_state); + pthread_mutex_unlock(&mutex_change_du_state); pthread_cond_signal(&threshold_change_du_state); } return 0; @@ -4188,16 +3918,15 @@ error: int cwmp_handle_rpc_cpe_download(struct session *session, struct rpc *rpc) { - mxml_node_t *n, *t, *b = session->body_in; - char *c, *tmp, *file_type = NULL; - int error = FAULT_CPE_NO_FAULT; - struct download *download = NULL,*idownload; - struct list_head *ilist; - time_t scheduled_time = 0; - time_t download_delay = 0; + mxml_node_t *n, *t, *b = session->body_in; + char *c, *tmp, *file_type = NULL; + int error = FAULT_CPE_NO_FAULT; + struct download *download = NULL, *idownload; + struct list_head *ilist; + time_t scheduled_time = 0; + time_t download_delay = 0; - if (asprintf(&c, "%s:%s", ns.cwmp, "Download") == -1) - { + if (asprintf(&c, "%s:%s", ns.cwmp, "Download") == -1) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; } @@ -4205,171 +3934,133 @@ int cwmp_handle_rpc_cpe_download(struct session *session, struct rpc *rpc) n = mxmlFindElement(session->tree_in, session->tree_in, c, NULL, NULL, MXML_DESCEND); FREE(c); - if (!n) return -1; + if (!n) + return -1; b = n; - download = calloc (1,sizeof(struct download)); - if (download == NULL) - { + download = calloc(1, sizeof(struct download)); + if (download == NULL) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; } while (b != NULL) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "CommandKey")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "CommandKey")) { download->command_key = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "FileType")) { - if(download->file_type == NULL) - { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "FileType")) { + if (download->file_type == NULL) { download->file_type = strdup(b->value.opaque); file_type = strdup(b->value.opaque); - } - else - { + } else { tmp = file_type; - if (asprintf(&file_type,"%s %s",tmp, b->value.opaque) == -1) - { + if (asprintf(&file_type, "%s %s", tmp, b->value.opaque) == -1) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; } FREE(tmp); } } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "URL")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "URL")) { download->url = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "Username")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "Username")) { download->username = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "Password")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "Password")) { download->password = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "FileSize")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "FileSize")) { download->file_size = atoi(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "DelaySeconds")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "DelaySeconds")) { download_delay = atol(b->value.opaque); } b = mxmlWalkNext(b, n, MXML_DESCEND); } - if(strcmp(file_type,"1 Firmware Upgrade Image") && - strcmp(file_type,"2 Web Content") && - strcmp(file_type,"3 Vendor Configuration File") && - strcmp(file_type,"6 CWMP CA SSL Certificate File")) - { + if (strcmp(file_type, "1 Firmware Upgrade Image") && strcmp(file_type, "2 Web Content") && strcmp(file_type, "3 Vendor Configuration File") && strcmp(file_type, "6 CWMP CA SSL Certificate File")) { error = FAULT_CPE_INVALID_ARGUMENTS; - } - else if(count_download_queue>=MAX_DOWNLOAD_QUEUE) - { + } else if (count_download_queue >= MAX_DOWNLOAD_QUEUE) { error = FAULT_CPE_RESOURCES_EXCEEDED; - } - else if((download->url == NULL || ((download->url != NULL) && (strcmp(download->url,"")==0)))) - { + } else if ((download->url == NULL || ((download->url != NULL) && (strcmp(download->url, "") == 0)))) { error = FAULT_CPE_REQUEST_DENIED; - } - else if(strstr(download->url,"@") != NULL) - { + } else if (strstr(download->url, "@") != NULL) { error = FAULT_CPE_INVALID_ARGUMENTS; - } - else if(strncmp(download->url,DOWNLOAD_PROTOCOL_HTTP,strlen(DOWNLOAD_PROTOCOL_HTTP))!=0 && - strncmp(download->url,DOWNLOAD_PROTOCOL_HTTPS,strlen(DOWNLOAD_PROTOCOL_HTTPS))!=0 && - strncmp(download->url,DOWNLOAD_PROTOCOL_FTP,strlen(DOWNLOAD_PROTOCOL_FTP))!=0) - { + } else if (strncmp(download->url, DOWNLOAD_PROTOCOL_HTTP, strlen(DOWNLOAD_PROTOCOL_HTTP)) != 0 && strncmp(download->url, DOWNLOAD_PROTOCOL_HTTPS, strlen(DOWNLOAD_PROTOCOL_HTTPS)) != 0 && strncmp(download->url, DOWNLOAD_PROTOCOL_FTP, strlen(DOWNLOAD_PROTOCOL_FTP)) != 0) { error = FAULT_CPE_FILE_TRANSFER_UNSUPPORTED_PROTOCOL; } FREE(file_type); - if(error != FAULT_CPE_NO_FAULT) + if (error != FAULT_CPE_NO_FAULT) goto fault; t = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); - if (!t) goto fault; + if (!t) + goto fault; t = mxmlNewElement(t, "cwmp:DownloadResponse"); - if (!t) goto fault; + if (!t) + goto fault; b = mxmlNewElement(t, "Status"); - if (!b) goto fault; + if (!b) + goto fault; b = mxmlNewOpaque(b, "1"); - if (!b) goto fault; + if (!b) + goto fault; b = b->parent->parent; b = mxmlNewElement(t, "StartTime"); - if (!b) goto fault; + if (!b) + goto fault; b = mxmlNewOpaque(b, "0001-01-01T00:00:00+00:00"); - if (!b) goto fault; + if (!b) + goto fault; b = b->parent->parent; b = mxmlNewElement(t, "CompleteTime"); - if (!b) goto fault; + if (!b) + goto fault; b = mxmlNewOpaque(b, "0001-01-01T00:00:00+00:00"); - if (!b) goto fault; + if (!b) + goto fault; - if(error == FAULT_CPE_NO_FAULT) - { - pthread_mutex_lock (&mutex_download); - if(download_delay != 0) + if (error == FAULT_CPE_NO_FAULT) { + pthread_mutex_lock(&mutex_download); + if (download_delay != 0) scheduled_time = time(NULL) + download_delay; - list_for_each(ilist,&(list_download)) - { - idownload = list_entry(ilist,struct download, list); - if (idownload->scheduled_time >= scheduled_time) - { + list_for_each (ilist, &(list_download)) { + idownload = list_entry(ilist, struct download, list); + if (idownload->scheduled_time >= scheduled_time) { break; } } - list_add (&(download->list), ilist->prev); - if(download_delay != 0) - { + list_add(&(download->list), ilist->prev); + if (download_delay != 0) { count_download_queue++; - download->scheduled_time = scheduled_time; + download->scheduled_time = scheduled_time; } bkp_session_insert_download(download); bkp_session_save(); - if(download_delay != 0) - { - CWMP_LOG(INFO,"Download will start in %us",download_delay); - } - else - { - CWMP_LOG(INFO,"Download will start at the end of session"); + if (download_delay != 0) { + CWMP_LOG(INFO, "Download will start in %us", download_delay); + } else { + CWMP_LOG(INFO, "Download will start at the end of session"); } - pthread_mutex_unlock (&mutex_download); + pthread_mutex_unlock(&mutex_download); pthread_cond_signal(&threshold_download); } return 0; fault: - cwmp_free_download_request(download); + cwmp_free_download_request(download); if (cwmp_create_fault_message(session, rpc, error)) goto error; return 0; @@ -4380,13 +4071,13 @@ error: int cwmp_handle_rpc_cpe_schedule_download(struct session *session, struct rpc *rpc) { - mxml_node_t *n, *t, *b = session->body_in; - char *c, *tmp, *file_type = NULL; - char *windowmode0 = NULL, *windowmode1 = NULL; - int i = 0, j = 0; - int error = FAULT_CPE_NO_FAULT; - struct schedule_download *schedule_download = NULL; - time_t schedule_download_delay[4] = {0, 0, 0, 0}; + mxml_node_t *n, *t, *b = session->body_in; + char *c, *tmp, *file_type = NULL; + char *windowmode0 = NULL, *windowmode1 = NULL; + int i = 0, j = 0; + int error = FAULT_CPE_NO_FAULT; + struct schedule_download *schedule_download = NULL; + time_t schedule_download_delay[4] = { 0, 0, 0, 0 }; if (asprintf(&c, "%s:%s", ns.cwmp, "ScheduleDownload") == -1) { error = FAULT_CPE_INTERNAL_ERROR; @@ -4396,184 +4087,111 @@ int cwmp_handle_rpc_cpe_schedule_download(struct session *session, struct rpc *r n = mxmlFindElement(session->tree_in, session->tree_in, c, NULL, NULL, MXML_DESCEND); FREE(c); - if (!n) return -1; + if (!n) + return -1; b = n; - schedule_download = calloc (1,sizeof(struct schedule_download)); - if (schedule_download == NULL) - { + schedule_download = calloc(1, sizeof(struct schedule_download)); + if (schedule_download == NULL) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; } while (b != NULL) { t = b; - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "CommandKey")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "CommandKey")) { schedule_download->command_key = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "FileType")) { - if(schedule_download->file_type == NULL) - { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "FileType")) { + if (schedule_download->file_type == NULL) { schedule_download->file_type = strdup(b->value.opaque); file_type = strdup(b->value.opaque); - } - else - { + } else { tmp = file_type; - if (asprintf(&file_type,"%s %s",tmp, b->value.opaque) == -1) - { + if (asprintf(&file_type, "%s %s", tmp, b->value.opaque) == -1) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; } FREE(tmp); } } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "URL")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "URL")) { schedule_download->url = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "Username")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "Username")) { schedule_download->username = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "Password")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "Password")) { schedule_download->password = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "FileSize")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "FileSize")) { schedule_download->file_size = atoi(b->value.opaque); } - - if (b && b->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "TimeWindowList")) { - if (!t) return -1; //TO CHECK*/ + + if (b && b->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "TimeWindowList")) { + if (!t) + return -1; //TO CHECK*/ t = mxmlWalkNext(t, b, MXML_DESCEND); while (t) { - if (t && t->type == MXML_OPAQUE && - t->value.opaque && - t->parent->type == MXML_ELEMENT && - !strcmp(t->parent->value.element.name, "WindowStart")) { - schedule_download_delay[j] = atol(t->value.opaque); - j++; - } - if (t && t->type == MXML_OPAQUE && - t->value.opaque && - t->parent->type == MXML_ELEMENT && - !strcmp(t->parent->value.element.name, "WindowEnd")) { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "WindowStart")) { schedule_download_delay[j] = atol(t->value.opaque); j++; } - if (t && t->type == MXML_OPAQUE && - t->value.opaque && - t->parent->type == MXML_ELEMENT && - !strcmp(t->parent->value.element.name, "WindowMode")) { - - if(schedule_download->timewindowstruct[i].windowmode == NULL) - { + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "WindowEnd")) { + schedule_download_delay[j] = atol(t->value.opaque); + j++; + } + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "WindowMode")) { + if (schedule_download->timewindowstruct[i].windowmode == NULL) { schedule_download->timewindowstruct[i].windowmode = strdup(t->value.opaque); if (i == 0) windowmode0 = strdup(t->value.opaque); else windowmode1 = strdup(t->value.opaque); - } - else if (i == 0) - { - + } else if (i == 0) { tmp = windowmode0; - if (asprintf(&windowmode0,"%s %s",tmp, t->value.opaque) == -1) - { + if (asprintf(&windowmode0, "%s %s", tmp, t->value.opaque) == -1) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; } FREE(tmp); - } - else if (i == 1) - { + } else if (i == 1) { tmp = windowmode1; - if (asprintf(&windowmode1,"%s %s",tmp, t->value.opaque) == -1) - { + if (asprintf(&windowmode1, "%s %s", tmp, t->value.opaque) == -1) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; } FREE(tmp); } } - - if (t && t->type == MXML_OPAQUE && - t->value.opaque && - t->parent->type == MXML_ELEMENT && - !strcmp(t->parent->value.element.name, "UserMessage")) { + + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "UserMessage")) { schedule_download->timewindowstruct[i].usermessage = strdup(t->value.opaque); - } - if (t && t->type == MXML_OPAQUE && - t->value.opaque && - t->parent->type == MXML_ELEMENT && - !strcmp(t->parent->value.element.name, "MaxRetries")) { + } + if (t && t->type == MXML_OPAQUE && t->value.opaque && t->parent->type == MXML_ELEMENT && !strcmp(t->parent->value.element.name, "MaxRetries")) { schedule_download->timewindowstruct[i].maxretries = atoi(t->value.opaque); - } + } t = mxmlWalkNext(t, b, MXML_DESCEND); } i++; } b = mxmlWalkNext(b, n, MXML_DESCEND); } - if(strcmp(file_type,"1 Firmware Upgrade Image") && - strcmp(file_type,"2 Web Content") && - strcmp(file_type,"3 Vendor Configuration File") && - strcmp(file_type,"4 Tone File") && - strcmp(file_type,"5 Ringer File") && - strcmp(file_type,"6 CWMP CA SSL Certificate File")) - { + if (strcmp(file_type, "1 Firmware Upgrade Image") && strcmp(file_type, "2 Web Content") && strcmp(file_type, "3 Vendor Configuration File") && strcmp(file_type, "4 Tone File") && strcmp(file_type, "5 Ringer File") && strcmp(file_type, "6 CWMP CA SSL Certificate File")) { error = FAULT_CPE_INVALID_ARGUMENTS; - } - else if(( - strcmp(windowmode0,"1 At Any Time") && - strcmp(windowmode0,"2 Immediately") && - strcmp(windowmode0,"3 When Idle")) || - ( - strcmp(windowmode1,"1 At Any Time") && - strcmp(windowmode1,"2 Immediately") && - strcmp(windowmode1,"3 When Idle"))) - { + } else if ((strcmp(windowmode0, "1 At Any Time") && strcmp(windowmode0, "2 Immediately") && strcmp(windowmode0, "3 When Idle")) || (strcmp(windowmode1, "1 At Any Time") && strcmp(windowmode1, "2 Immediately") && strcmp(windowmode1, "3 When Idle"))) { error = FAULT_CPE_REQUEST_DENIED; - } - else if(count_download_queue>=MAX_DOWNLOAD_QUEUE) - { + } else if (count_download_queue >= MAX_DOWNLOAD_QUEUE) { error = FAULT_CPE_RESOURCES_EXCEEDED; - } - else if((schedule_download->url == NULL || ((schedule_download->url != NULL) && (strcmp(schedule_download->url,"")==0)))) - { + } else if ((schedule_download->url == NULL || ((schedule_download->url != NULL) && (strcmp(schedule_download->url, "") == 0)))) { error = FAULT_CPE_REQUEST_DENIED; - } - else if(strstr(schedule_download->url,"@") != NULL ) - { + } else if (strstr(schedule_download->url, "@") != NULL) { error = FAULT_CPE_INVALID_ARGUMENTS; - } - else if(strncmp(schedule_download->url,DOWNLOAD_PROTOCOL_HTTP,strlen(DOWNLOAD_PROTOCOL_HTTP))!=0 && - strncmp(schedule_download->url,DOWNLOAD_PROTOCOL_FTP,strlen(DOWNLOAD_PROTOCOL_FTP))!=0) - { + } else if (strncmp(schedule_download->url, DOWNLOAD_PROTOCOL_HTTP, strlen(DOWNLOAD_PROTOCOL_HTTP)) != 0 && strncmp(schedule_download->url, DOWNLOAD_PROTOCOL_FTP, strlen(DOWNLOAD_PROTOCOL_FTP)) != 0) { error = FAULT_CPE_FILE_TRANSFER_UNSUPPORTED_PROTOCOL; - } - else { - for (j = 0; j<3; j++) - { - if (schedule_download_delay[j] > schedule_download_delay[j+1]) - { + } else { + for (j = 0; j < 3; j++) { + if (schedule_download_delay[j] > schedule_download_delay[j + 1]) { error = FAULT_CPE_INVALID_ARGUMENTS; break; } @@ -4581,42 +4199,39 @@ int cwmp_handle_rpc_cpe_schedule_download(struct session *session, struct rpc *r } FREE(file_type); - if(error != FAULT_CPE_NO_FAULT) + if (error != FAULT_CPE_NO_FAULT) goto fault; t = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); - if (!t) goto fault; + if (!t) + goto fault; t = mxmlNewElement(t, "cwmp:ScheduleDownloadResponse"); // ScheduleDownloadResponse has no argument - if (!t) goto fault; - - if(error == FAULT_CPE_NO_FAULT) - { - pthread_mutex_lock (&mutex_schedule_download); - list_add_tail (&(schedule_download->list), &(list_schedule_download)); - if(schedule_download_delay[0] != 0) - { - count_download_queue++; + if (!t) + goto fault; + + if (error == FAULT_CPE_NO_FAULT) { + pthread_mutex_lock(&mutex_schedule_download); + list_add_tail(&(schedule_download->list), &(list_schedule_download)); + if (schedule_download_delay[0] != 0) { + count_download_queue++; } while (i > 0) { i--; - schedule_download->timewindowstruct[i].windowstart = time(NULL) + schedule_download_delay[i*2]; - schedule_download->timewindowstruct[i].windowend = time(NULL) + schedule_download_delay[i*2+1]; + schedule_download->timewindowstruct[i].windowstart = time(NULL) + schedule_download_delay[i * 2]; + schedule_download->timewindowstruct[i].windowend = time(NULL) + schedule_download_delay[i * 2 + 1]; } bkp_session_insert_schedule_download(schedule_download); bkp_session_save(); - if(schedule_download_delay[0] != 0) - { - CWMP_LOG(INFO,"Schedule download will start in %us",schedule_download_delay[0]); + if (schedule_download_delay[0] != 0) { + CWMP_LOG(INFO, "Schedule download will start in %us", schedule_download_delay[0]); + } else { + CWMP_LOG(INFO, "Schedule Download will start at the end of session"); } - else - { - CWMP_LOG(INFO,"Schedule Download will start at the end of session"); - } - pthread_mutex_unlock (&mutex_schedule_download); + pthread_mutex_unlock(&mutex_schedule_download); pthread_cond_signal(&threshold_schedule_download); } - + return 0; fault: @@ -4631,53 +4246,42 @@ error: int cwmp_handle_rpc_cpe_upload(struct session *session, struct rpc *rpc) { - mxml_node_t *n, *t, *b = session->body_in; - char *c, *tmp, *file_type = NULL; - int error = FAULT_CPE_NO_FAULT; - struct upload *upload = NULL,*iupload; - struct list_head *ilist; - time_t scheduled_time = 0; - time_t upload_delay = 0; + mxml_node_t *n, *t, *b = session->body_in; + char *c, *tmp, *file_type = NULL; + int error = FAULT_CPE_NO_FAULT; + struct upload *upload = NULL, *iupload; + struct list_head *ilist; + time_t scheduled_time = 0; + time_t upload_delay = 0; - if (asprintf(&c, "%s:%s", ns.cwmp, "Upload") == -1) - { + if (asprintf(&c, "%s:%s", ns.cwmp, "Upload") == -1) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; } n = mxmlFindElement(session->tree_in, session->tree_in, c, NULL, NULL, MXML_DESCEND); FREE(c); - if (!n) return -1; + if (!n) + return -1; b = n; - upload = calloc (1,sizeof(struct upload)); - if (upload == NULL) - { + upload = calloc(1, sizeof(struct upload)); + if (upload == NULL) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; } upload->f_instance = strdup(""); while (b != NULL) { - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "CommandKey")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "CommandKey")) { upload->command_key = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "FileType")) { - if(upload->file_type == NULL) - { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "FileType")) { + if (upload->file_type == NULL) { upload->file_type = strdup(b->value.opaque); file_type = strdup(b->value.opaque); - } - else - { + } else { tmp = file_type; - if (asprintf(&file_type,"%s %s",tmp, b->value.opaque) == -1) - { + if (asprintf(&file_type, "%s %s", tmp, b->value.opaque) == -1) { error = FAULT_CPE_INTERNAL_ERROR; goto fault; } @@ -4687,119 +4291,96 @@ int cwmp_handle_rpc_cpe_upload(struct session *session, struct rpc *rpc) FREE(tmp); } } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "URL")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "URL")) { upload->url = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "Username")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "Username")) { upload->username = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "Password")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "Password")) { upload->password = strdup(b->value.opaque); } - if (b && b->type == MXML_OPAQUE && - b->value.opaque && - b->parent->type == MXML_ELEMENT && - !strcmp(b->parent->value.element.name, "DelaySeconds")) { + if (b && b->type == MXML_OPAQUE && b->value.opaque && b->parent->type == MXML_ELEMENT && !strcmp(b->parent->value.element.name, "DelaySeconds")) { upload_delay = atol(b->value.opaque); } b = mxmlWalkNext(b, n, MXML_DESCEND); } - if(strncmp(file_type, "1 Vendor Configuration File", sizeof"1 Vendor Configuration File" -1) != 0 && - strncmp(file_type, "3 Vendor Configuration File", sizeof"3 Vendor Configuration File" -1) != 0 && - strncmp(file_type, "2 Vendor Log File", sizeof"2 Vendor Log File" -1) != 0 && - strncmp(file_type, "4 Vendor Log File", sizeof"4 Vendor Log File" -1) != 0) - { + if (strncmp(file_type, "1 Vendor Configuration File", sizeof "1 Vendor Configuration File" - 1) != 0 && strncmp(file_type, "3 Vendor Configuration File", sizeof "3 Vendor Configuration File" - 1) != 0 && strncmp(file_type, "2 Vendor Log File", sizeof "2 Vendor Log File" - 1) != 0 && + strncmp(file_type, "4 Vendor Log File", sizeof "4 Vendor Log File" - 1) != 0) { error = FAULT_CPE_REQUEST_DENIED; - } - else if(count_download_queue>=MAX_DOWNLOAD_QUEUE) - { + } else if (count_download_queue >= MAX_DOWNLOAD_QUEUE) { error = FAULT_CPE_RESOURCES_EXCEEDED; - } - else if((upload->url == NULL || ((upload->url != NULL) && (strcmp(upload->url,"")==0)))) - { + } else if ((upload->url == NULL || ((upload->url != NULL) && (strcmp(upload->url, "") == 0)))) { error = FAULT_CPE_REQUEST_DENIED; - } - else if(strstr(upload->url,"@") != NULL) - { + } else if (strstr(upload->url, "@") != NULL) { error = FAULT_CPE_INVALID_ARGUMENTS; - } - else if(strncmp(upload->url,DOWNLOAD_PROTOCOL_HTTP,strlen(DOWNLOAD_PROTOCOL_HTTP))!=0 && - strncmp(upload->url,DOWNLOAD_PROTOCOL_FTP,strlen(DOWNLOAD_PROTOCOL_FTP))!=0) - { + } else if (strncmp(upload->url, DOWNLOAD_PROTOCOL_HTTP, strlen(DOWNLOAD_PROTOCOL_HTTP)) != 0 && strncmp(upload->url, DOWNLOAD_PROTOCOL_FTP, strlen(DOWNLOAD_PROTOCOL_FTP)) != 0) { error = FAULT_CPE_FILE_TRANSFER_UNSUPPORTED_PROTOCOL; } FREE(file_type); - if(error != FAULT_CPE_NO_FAULT){ + if (error != FAULT_CPE_NO_FAULT) { goto fault; } t = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); - if (!t) goto fault; + if (!t) + goto fault; t = mxmlNewElement(t, "cwmp:UploadResponse"); - if (!t) goto fault; + if (!t) + goto fault; b = mxmlNewElement(t, "Status"); - if (!b) goto fault; + if (!b) + goto fault; b = mxmlNewOpaque(b, "1"); - if (!b) goto fault; + if (!b) + goto fault; b = b->parent->parent; b = mxmlNewElement(t, "StartTime"); - if (!b) goto fault; + if (!b) + goto fault; b = mxmlNewOpaque(b, "0001-01-01T00:00:00+00:00"); - if (!b) goto fault; + if (!b) + goto fault; b = b->parent->parent; b = mxmlNewElement(t, "CompleteTime"); - if (!b) goto fault; + if (!b) + goto fault; b = mxmlNewOpaque(b, "0001-01-01T00:00:00+00:00"); - if (!b) goto fault; + if (!b) + goto fault; - if(error == FAULT_CPE_NO_FAULT) - { - pthread_mutex_lock (&mutex_upload); - if(upload_delay != 0) + if (error == FAULT_CPE_NO_FAULT) { + pthread_mutex_lock(&mutex_upload); + if (upload_delay != 0) scheduled_time = time(NULL) + upload_delay; - list_for_each(ilist,&(list_upload)) - { - iupload = list_entry(ilist,struct upload, list); - if (iupload->scheduled_time >= scheduled_time) - { + list_for_each (ilist, &(list_upload)) { + iupload = list_entry(ilist, struct upload, list); + if (iupload->scheduled_time >= scheduled_time) { break; } } - list_add (&(upload->list), ilist->prev); - if(upload_delay != 0) - { + list_add(&(upload->list), ilist->prev); + if (upload_delay != 0) { count_download_queue++; - upload->scheduled_time = scheduled_time; + upload->scheduled_time = scheduled_time; } bkp_session_insert_upload(upload); bkp_session_save(); - if(upload_delay != 0) - { - CWMP_LOG(INFO,"Upload will start in %us",upload_delay); + if (upload_delay != 0) { + CWMP_LOG(INFO, "Upload will start in %us", upload_delay); + } else { + CWMP_LOG(INFO, "Upload will start at the end of session"); } - else - { - CWMP_LOG(INFO,"Upload will start at the end of session"); - } - pthread_mutex_unlock (&mutex_upload); + pthread_mutex_unlock(&mutex_upload); pthread_cond_signal(&threshold_upload); } return 0; @@ -4823,8 +4404,7 @@ int cwmp_handle_rpc_cpe_fault(struct session *session, struct rpc *rpc) struct cwmp_param_fault *param_fault; int idx; - body = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", - NULL, NULL, MXML_DESCEND); + body = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND); b = mxmlNewElement(body, "soap_env:Fault"); if (!b) @@ -4834,8 +4414,7 @@ int cwmp_handle_rpc_cpe_fault(struct session *session, struct rpc *rpc) if (!t) return -1; - u = mxmlNewOpaque(t, - (FAULT_CPE_ARRAY[session->fault_code].TYPE == FAULT_CPE_TYPE_CLIENT) ? "Client" : "Server"); + u = mxmlNewOpaque(t, (FAULT_CPE_ARRAY[session->fault_code].TYPE == FAULT_CPE_TYPE_CLIENT) ? "Client" : "Server"); if (!u) return -1; @@ -4875,8 +4454,7 @@ int cwmp_handle_rpc_cpe_fault(struct session *session, struct rpc *rpc) while (rpc->list_set_value_fault->next != rpc->list_set_value_fault) { param_fault = list_entry(rpc->list_set_value_fault->next, struct cwmp_param_fault, list); - if (param_fault->fault) - { + if (param_fault->fault) { idx = cwmp_get_fault_code(param_fault->fault); t = mxmlNewElement(b, "SetParameterValuesFault"); @@ -4914,33 +4492,31 @@ int cwmp_handle_rpc_cpe_fault(struct session *session, struct rpc *rpc) return 0; } -int cwmp_get_fault_code (int fault_code) +int cwmp_get_fault_code(int fault_code) { int i; - for (i=1; i<__FAULT_CPE_MAX; i++) - { + for (i = 1; i < __FAULT_CPE_MAX; i++) { if (FAULT_CPE_ARRAY[i].ICODE == fault_code) break; } - if(i == __FAULT_CPE_MAX) + if (i == __FAULT_CPE_MAX) i = FAULT_CPE_INTERNAL_ERROR; return i; } -int cwmp_get_fault_code_by_string (char* fault_code) +int cwmp_get_fault_code_by_string(char *fault_code) { int i; - for (i=1; i<__FAULT_CPE_MAX; i++) - { + for (i = 1; i < __FAULT_CPE_MAX; i++) { if (strcmp(FAULT_CPE_ARRAY[i].CODE, fault_code) == 0) break; } - if(i == __FAULT_CPE_MAX) + if (i == __FAULT_CPE_MAX) i = FAULT_CPE_INTERNAL_ERROR; return i; @@ -4948,7 +4524,7 @@ int cwmp_get_fault_code_by_string (char* fault_code) int cwmp_create_fault_message(struct session *session, struct rpc *rpc_cpe, int fault_code) { - CWMP_LOG (INFO,"Fault detected"); + CWMP_LOG(INFO, "Fault detected"); session->fault_code = fault_code; MXML_DELETE(session->tree_out); @@ -4956,7 +4532,7 @@ int cwmp_create_fault_message(struct session *session, struct rpc *rpc_cpe, int if (xml_prepare_msg_out(session)) return -1; - CWMP_LOG (INFO,"Preparing the Fault message"); + CWMP_LOG(INFO, "Preparing the Fault message"); if (rpc_cpe_methods[RPC_CPE_FAULT].handler(session, rpc_cpe)) return -1; rpc_cpe->type = RPC_CPE_FAULT;